From c7258f02db5ecbd58b65dd37265f1fe33b2f2312 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sat, 1 Jul 2017 18:42:04 -0400 Subject: [PATCH] PDF Writer & PDFlib: Remove from tree. Now supplied via HaikuPorts packages. I *think* this was the last component in the tree with a non-OSI license. --- build/jam/images/definitions/regular | 1 - build/jam/packages/Haiku | 15 - data/system/data/licenses/PDFlib Lite | 146 - src/add-ons/print/drivers/Jamfile | 1 - src/add-ons/print/drivers/pdf/CHANGES | 50 - src/add-ons/print/drivers/pdf/Install | 20 - src/add-ons/print/drivers/pdf/Jamfile | 4 - src/add-ons/print/drivers/pdf/README | 47 - src/add-ons/print/drivers/pdf/TODO | 14 - .../print/drivers/pdf/bookmarks/Sample | 13 - .../drivers/pdf/doc/Create_Report_Mail.sh | 43 - src/add-ons/print/drivers/pdf/doc/IF.pdf | Bin 174305 -> 0 bytes .../drivers/pdf/doc/Interactive Features.gbe | Bin 44161 -> 0 bytes .../print/drivers/pdf/doc/User Guide.html | 33 - src/add-ons/print/drivers/pdf/doc/credits.zip | Bin 1575 -> 0 bytes .../pdf/doc/images/add_local_printer.jpeg | Bin 15031 -> 0 bytes .../drivers/pdf/doc/images/add_printer.jpeg | Bin 14385 -> 0 bytes .../pdf/doc/images/make_default_printer.jpeg | Bin 6123 -> 0 bytes .../pdf/doc/images/preferences_printers.jpeg | Bin 25191 -> 0 bytes .../drivers/pdf/doc/images/printers.jpeg | Bin 24312 -> 0 bytes .../print/drivers/pdf/doc/pdf_icon.tga | Bin 12148 -> 0 bytes .../print/drivers/pdf/encoding/t1enc0.enc | 260 - .../print/drivers/pdf/encoding/t1enc1.enc | 260 - .../print/drivers/pdf/encoding/t1enc2.enc | 260 - .../print/drivers/pdf/encoding/t1enc3.enc | 260 - .../print/drivers/pdf/encoding/t1enc4.enc | 31 - .../print/drivers/pdf/encoding/ttenc0.cpg | 260 - .../print/drivers/pdf/encoding/ttenc1.cpg | 260 - .../print/drivers/pdf/encoding/ttenc2.cpg | 260 - .../print/drivers/pdf/encoding/ttenc3.cpg | 260 - .../print/drivers/pdf/encoding/ttenc4.cpg | 31 - .../print/drivers/pdf/source/AboutText.cpp | 48 - .../pdf/source/AdvancedSettingsWindow.cpp | 379 - .../pdf/source/AdvancedSettingsWindow.h | 89 - .../print/drivers/pdf/source/Bezier.cpp | 85 - src/add-ons/print/drivers/pdf/source/Bezier.h | 49 - .../print/drivers/pdf/source/Bookmark.cpp | 206 - .../print/drivers/pdf/source/Bookmark.h | 61 - .../print/drivers/pdf/source/Cache.cpp | 94 - src/add-ons/print/drivers/pdf/source/Cache.h | 74 - .../drivers/pdf/source/DocInfoWindow.cpp | 551 - .../print/drivers/pdf/source/DocInfoWindow.h | 164 - .../print/drivers/pdf/source/DrawShape.cpp | 201 - .../print/drivers/pdf/source/DrawShape.h | 79 - .../print/drivers/pdf/source/Driver.cpp | 136 - src/add-ons/print/drivers/pdf/source/Driver.h | 41 - .../print/drivers/pdf/source/Fonts.cpp | 560 - src/add-ons/print/drivers/pdf/source/Fonts.h | 172 - .../print/drivers/pdf/source/FontsWindow.cpp | 505 - .../print/drivers/pdf/source/FontsWindow.h | 118 - .../print/drivers/pdf/source/Image.cpp | 194 - src/add-ons/print/drivers/pdf/source/Image.h | 91 - .../print/drivers/pdf/source/ImageCache.cpp | 99 - .../print/drivers/pdf/source/ImageCache.h | 64 - src/add-ons/print/drivers/pdf/source/Jamfile | 52 - .../drivers/pdf/source/JobSetupWindow.cpp | 250 - .../print/drivers/pdf/source/JobSetupWindow.h | 83 - .../drivers/pdf/source/LinePathBuilder.cpp | 341 - .../drivers/pdf/source/LinePathBuilder.h | 81 - src/add-ons/print/drivers/pdf/source/Link.cpp | 476 - src/add-ons/print/drivers/pdf/source/Link.h | 135 - src/add-ons/print/drivers/pdf/source/Log.h | 12 - src/add-ons/print/drivers/pdf/source/Mask.cpp | 133 - src/add-ons/print/drivers/pdf/source/Mask.h | 85 - .../drivers/pdf/source/MessagePrinter.cpp | 183 - .../print/drivers/pdf/source/MessagePrinter.h | 59 - .../print/drivers/pdf/source/Notes.txt | 59 - .../drivers/pdf/source/PDFLinePathBuilder.cpp | 65 - .../drivers/pdf/source/PDFLinePathBuilder.h | 54 - .../print/drivers/pdf/source/PDFSystem.h | 63 - .../print/drivers/pdf/source/PDFText.cpp | 614 - .../print/drivers/pdf/source/PDFWriter.cpp | 2452 -- .../print/drivers/pdf/source/PDFWriter.h | 398 - .../print/drivers/pdf/source/PDFWriter.rdef | 78 - .../drivers/pdf/source/PageSetupWindow.cpp | 420 - .../drivers/pdf/source/PageSetupWindow.h | 91 - .../drivers/pdf/source/PictureIterator.cpp | 151 - .../drivers/pdf/source/PictureIterator.h | 93 - .../drivers/pdf/source/PrinterDriver.cpp | 265 - .../print/drivers/pdf/source/PrinterDriver.h | 116 - .../print/drivers/pdf/source/PrinterPrefs.cpp | 102 - .../print/drivers/pdf/source/PrinterPrefs.h | 56 - .../drivers/pdf/source/PrinterSettings.cpp | 306 - .../drivers/pdf/source/PrinterSettings.h | 105 - .../print/drivers/pdf/source/RegExp.cpp | 1340 - src/add-ons/print/drivers/pdf/source/RegExp.h | 179 - .../print/drivers/pdf/source/Report.cpp | 102 - src/add-ons/print/drivers/pdf/source/Report.h | 94 - .../print/drivers/pdf/source/Scanner.cpp | 143 - .../print/drivers/pdf/source/Scanner.h | 65 - .../print/drivers/pdf/source/StatusWindow.cpp | 219 - .../print/drivers/pdf/source/StatusWindow.h | 71 - .../print/drivers/pdf/source/SubPath.cpp | 127 - .../print/drivers/pdf/source/SubPath.h | 66 - .../print/drivers/pdf/source/XReferences.cpp | 443 - .../print/drivers/pdf/source/XReferences.h | 239 - .../print/drivers/pdf/source/_CopyAndRestart | 11 - src/add-ons/print/drivers/pdf/source/cns1.h | 11120 ------- .../print/drivers/pdf/source/enc_range.h | 11 - src/add-ons/print/drivers/pdf/source/gb1.h | 23963 ---------------- .../print/drivers/pdf/source/japanese.h | 8478 ------ src/add-ons/print/drivers/pdf/source/korean.h | 15848 ---------- .../print/drivers/pdf/source/unicode0.h | 260 - .../print/drivers/pdf/source/unicode1.h | 260 - .../print/drivers/pdf/source/unicode2.h | 260 - .../print/drivers/pdf/source/unicode3.h | 260 - .../print/drivers/pdf/source/unicode4.h | 31 - src/add-ons/print/drivers/pdf/xrefs/Deutsch | 7 - src/add-ons/print/drivers/pdf/xrefs/English | 18 - src/apps/aboutsystem/AboutSystem.cpp | 8 - src/libs/Jamfile | 1 - src/libs/pdflib/Jamfile | 3 - src/libs/pdflib/Makefile | 20 - src/libs/pdflib/PDFlib.dsw | 191 - src/libs/pdflib/bind/Makefile | 8 - src/libs/pdflib/bind/pdflib/Makefile | 11 - src/libs/pdflib/bind/pdflib/c/Makefile | 86 - src/libs/pdflib/bind/pdflib/c/businesscard.c | 109 - .../pdflib/bind/pdflib/c/businesscard.dsp | 107 - src/libs/pdflib/bind/pdflib/c/chartab.c | 129 - src/libs/pdflib/bind/pdflib/c/chartab.dsp | 107 - src/libs/pdflib/bind/pdflib/c/examples_c.dsw | 101 - src/libs/pdflib/bind/pdflib/c/hello.c | 63 - src/libs/pdflib/bind/pdflib/c/hello.dsp | 107 - src/libs/pdflib/bind/pdflib/c/hellodl.c | 66 - src/libs/pdflib/bind/pdflib/c/image.c | 71 - src/libs/pdflib/bind/pdflib/c/image.dsp | 107 - src/libs/pdflib/bind/pdflib/c/invoice.c | 196 - src/libs/pdflib/bind/pdflib/c/invoice.dsp | 107 - src/libs/pdflib/bind/pdflib/c/pdfclock.c | 131 - src/libs/pdflib/bind/pdflib/c/pdfclock.dsp | 107 - src/libs/pdflib/bind/pdflib/c/pdflibdl.c | 532 - src/libs/pdflib/bind/pdflib/c/pdflibdl.h | 63 - .../pdflib/bind/pdflib/c/quickreference.c | 112 - .../pdflib/bind/pdflib/c/quickreference.dsp | 107 - src/libs/pdflib/bind/pdflib/c/readme.txt | 3 - src/libs/pdflib/bind/pdflib/c/samples.mcp | Bin 866353 -> 0 bytes src/libs/pdflib/bind/pdflib/cpp/Makefile | 81 - .../pdflib/bind/pdflib/cpp/businesscard.cpp | 96 - .../pdflib/bind/pdflib/cpp/businesscard.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/chartab.cpp | 120 - src/libs/pdflib/bind/pdflib/cpp/chartab.dsp | 113 - .../pdflib/bind/pdflib/cpp/examples_cpp.dsw | 101 - src/libs/pdflib/bind/pdflib/cpp/hello.cpp | 51 - src/libs/pdflib/bind/pdflib/cpp/hello.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/image.cpp | 60 - src/libs/pdflib/bind/pdflib/cpp/image.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/invoice.cpp | 194 - src/libs/pdflib/bind/pdflib/cpp/invoice.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/pdfclock.cpp | 126 - src/libs/pdflib/bind/pdflib/cpp/pdfclock.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/pdflib.cpp | 1299 - src/libs/pdflib/bind/pdflib/cpp/pdflib.hpp | 312 - .../pdflib/bind/pdflib/cpp/quickreference.cpp | 102 - .../pdflib/bind/pdflib/cpp/quickreference.dsp | 113 - src/libs/pdflib/bind/pdflib/cpp/readme.txt | 3 - src/libs/pdflib/bind/pdflib/cpp/samples.mcp | Bin 677679 -> 0 bytes .../bind/pdflib/data/LuciduxSans-Oblique.afm | 497 - .../bind/pdflib/data/LuciduxSans-Oblique.pfa | 947 - src/libs/pdflib/bind/pdflib/data/blocks.pdf | Bin 14262 -> 0 bytes .../pdflib/bind/pdflib/data/boilerplate.pdf | Bin 10989 -> 0 bytes src/libs/pdflib/bind/pdflib/data/nesrin.jpg | Bin 37406 -> 0 bytes .../pdflib/bind/pdflib/data/reference.pdf | Bin 67632 -> 0 bytes .../pdflib/bind/pdflib/data/stationery.pdf | Bin 8265 -> 0 bytes src/libs/pdflib/bind/pdflib/java/Java.dsp | 76 - src/libs/pdflib/bind/pdflib/java/Makefile | 89 - .../bind/pdflib/java/PDFlibException.java | 59 - .../pdflib/bind/pdflib/java/businesscard.java | 90 - src/libs/pdflib/bind/pdflib/java/chartab.java | 124 - src/libs/pdflib/bind/pdflib/java/hello.java | 54 - src/libs/pdflib/bind/pdflib/java/image.java | 61 - src/libs/pdflib/bind/pdflib/java/invoice.java | 169 - .../bind/pdflib/java/jsp/businesscard.jsp | 86 - .../pdflib/bind/pdflib/java/jsp/chartab.jsp | 115 - .../pdflib/bind/pdflib/java/jsp/hello.jsp | 46 - .../pdflib/bind/pdflib/java/jsp/image.jsp | 52 - .../pdflib/bind/pdflib/java/jsp/invoice.jsp | 167 - .../pdflib/bind/pdflib/java/jsp/pdfclock.jsp | 114 - .../bind/pdflib/java/jsp/quickreference.jsp | 94 - .../pdflib/bind/pdflib/java/pdfclock.java | 121 - src/libs/pdflib/bind/pdflib/java/pdflib.java | 1589 - .../pdflib/bind/pdflib/java/pdflib_java.c | 3092 -- .../bind/pdflib/java/quickreference.java | 97 - src/libs/pdflib/bind/pdflib/java/readme.txt | 232 - .../java/servlet/businesscardServlet.java | 103 - .../pdflib/java/servlet/chartabServlet.java | 136 - .../pdflib/java/servlet/helloServlet.java | 65 - .../pdflib/java/servlet/imageServlet.java | 80 - .../pdflib/java/servlet/invoiceServlet.java | 184 - .../pdflib/java/servlet/pdfclockServlet.java | 134 - .../java/servlet/quickreferenceServlet.java | 108 - src/libs/pdflib/bind/pdflib/perl/Makefile | 48 - src/libs/pdflib/bind/pdflib/perl/Perl.dsp | 140 - .../pdflib/bind/pdflib/perl/businesscard.pl | 82 - src/libs/pdflib/bind/pdflib/perl/chartab.pl | 107 - src/libs/pdflib/bind/pdflib/perl/hello.pl | 45 - src/libs/pdflib/bind/pdflib/perl/image.pl | 48 - src/libs/pdflib/bind/pdflib/perl/invoice.pl | 156 - .../pdflib/bind/pdflib/perl/pdfclock.cgi.pl | 103 - src/libs/pdflib/bind/pdflib/perl/pdfclock.pl | 103 - src/libs/pdflib/bind/pdflib/perl/pdflib_pl.c | 3614 --- src/libs/pdflib/bind/pdflib/perl/pdflib_pl.pm | 174 - .../pdflib/bind/pdflib/perl/quickreference.pl | 92 - src/libs/pdflib/bind/pdflib/perl/readme.txt | 27 - .../pdflib/bind/pdflib/php/businesscard.php | 81 - src/libs/pdflib/bind/pdflib/php/chartab.php | 105 - .../pdflib/php/ext/pdf/Makefile.php-404.in | 8 - .../pdflib/bind/pdflib/php/ext/pdf/config.m4 | 29 - .../pdflib/php/ext/pdf/config.php-406+.m4 | 40 - .../bind/pdflib/php/ext/pdf/libs.php-404.mk | 8 - src/libs/pdflib/bind/pdflib/php/ext/pdf/pdf.c | 3573 --- .../pdflib/bind/pdflib/php/ext/pdf/php_pdf.h | 207 - src/libs/pdflib/bind/pdflib/php/hello.php | 40 - src/libs/pdflib/bind/pdflib/php/image.php | 47 - src/libs/pdflib/bind/pdflib/php/invoice.php | 152 - src/libs/pdflib/bind/pdflib/php/pdfclock.php | 102 - .../pdflib/bind/pdflib/php/quickreference.php | 89 - src/libs/pdflib/bind/pdflib/php/readme.txt | 243 - src/libs/pdflib/bind/pdflib/python/Makefile | 56 - src/libs/pdflib/bind/pdflib/python/Python.dsp | 202 - .../pdflib/bind/pdflib/python/businesscard.py | 84 - src/libs/pdflib/bind/pdflib/python/chartab.py | 95 - src/libs/pdflib/bind/pdflib/python/hello.py | 37 - src/libs/pdflib/bind/pdflib/python/image.py | 45 - src/libs/pdflib/bind/pdflib/python/invoice.py | 161 - .../pdflib/bind/pdflib/python/pdfclock.py | 96 - .../pdflib/bind/pdflib/python/pdflib_py.c | 3248 --- .../bind/pdflib/python/quickreference.py | 81 - src/libs/pdflib/bind/pdflib/python/readme.txt | 6 - src/libs/pdflib/bind/pdflib/tcl/Makefile | 61 - src/libs/pdflib/bind/pdflib/tcl/Tcl.dsp | 109 - .../pdflib/bind/pdflib/tcl/businesscard.tcl | 90 - src/libs/pdflib/bind/pdflib/tcl/chartab.tcl | 102 - src/libs/pdflib/bind/pdflib/tcl/hello.tcl | 45 - src/libs/pdflib/bind/pdflib/tcl/image.tcl | 48 - src/libs/pdflib/bind/pdflib/tcl/invoice.tcl | 167 - src/libs/pdflib/bind/pdflib/tcl/pdfclock.tcl | 109 - src/libs/pdflib/bind/pdflib/tcl/pdflib_tcl.c | 4333 --- src/libs/pdflib/bind/pdflib/tcl/pkgIndex.tcl | 11 - .../pdflib/bind/pdflib/tcl/quickreference.tcl | 89 - src/libs/pdflib/bind/pdflib/tcl/readme.txt | 53 - src/libs/pdflib/config/aclocal.m4 | 3583 --- src/libs/pdflib/config/config.guess | 1317 - src/libs/pdflib/config/config.sub | 1411 - src/libs/pdflib/config/install-sh | 251 - src/libs/pdflib/config/ltmain.sh | 5031 ---- src/libs/pdflib/config/mkbind.inc.in | 43 - src/libs/pdflib/config/mkcommon.inc.in | 120 - src/libs/pdflib/config/mklibs.inc.in | 40 - src/libs/pdflib/config/mkmainlib.inc | 46 - src/libs/pdflib/config/mkprogs.inc.in | 47 - src/libs/pdflib/config/mksubdirs.inc.in | 79 - src/libs/pdflib/configure | 9174 ------ src/libs/pdflib/configure.in | 1095 - src/libs/pdflib/doc/PDFlib-license.pdf | Bin 30955 -> 0 bytes src/libs/pdflib/doc/PDFlib-license.rtf | 53 - src/libs/pdflib/doc/grid.pdf | Bin 7858 -> 0 bytes .../pdflib/doc/pdflib/PDFlib-Lite-license.pdf | Bin 28761 -> 0 bytes src/libs/pdflib/doc/pdflib/PDFlib-manual.pdf | Bin 2553541 -> 0 bytes .../doc/pdflib/PDFlib-purchase-order.pdf | Bin 86814 -> 0 bytes src/libs/pdflib/doc/pdflib/changes.txt | 779 - src/libs/pdflib/doc/pdflib/changes4.txt | 3589 --- src/libs/pdflib/doc/pdflib/compatibility.txt | 444 - src/libs/pdflib/doc/pdflib/readme-binary.txt | 43 - .../pdflib/doc/pdflib/readme-source-as400.txt | 42 - .../pdflib/doc/pdflib/readme-source-mac.txt | 31 - .../pdflib/doc/pdflib/readme-source-unix.txt | 203 - .../doc/pdflib/readme-source-windows.txt | 89 - src/libs/pdflib/doc/pdflib/readme.txt | 189 - src/libs/pdflib/fonts/pdflib.upr | 87 - src/libs/pdflib/fonts/print_glyphs.ps | 129 - src/libs/pdflib/libs/Jamfile | 7 - src/libs/pdflib/libs/Makefile | 12 - src/libs/pdflib/libs/PDFlib.mcp | Bin 320148 -> 0 bytes src/libs/pdflib/libs/flate/Jamfile | 24 - src/libs/pdflib/libs/flate/Makefile | 45 - src/libs/pdflib/libs/flate/adler32.c | 46 - src/libs/pdflib/libs/flate/compress.c | 69 - src/libs/pdflib/libs/flate/crc32.c | 163 - src/libs/pdflib/libs/flate/deflate.c | 1356 - src/libs/pdflib/libs/flate/deflate.h | 321 - src/libs/pdflib/libs/flate/flate.dsp | 340 - src/libs/pdflib/libs/flate/infblock.c | 405 - src/libs/pdflib/libs/flate/infblock.h | 42 - src/libs/pdflib/libs/flate/infcodes.c | 252 - src/libs/pdflib/libs/flate/infcodes.h | 30 - src/libs/pdflib/libs/flate/inffast.c | 185 - src/libs/pdflib/libs/flate/inffast.h | 20 - src/libs/pdflib/libs/flate/inffixed.h | 154 - src/libs/pdflib/libs/flate/inflate.c | 368 - src/libs/pdflib/libs/flate/inftrees.c | 456 - src/libs/pdflib/libs/flate/inftrees.h | 61 - src/libs/pdflib/libs/flate/infutil.c | 89 - src/libs/pdflib/libs/flate/infutil.h | 102 - src/libs/pdflib/libs/flate/trees.c | 1216 - src/libs/pdflib/libs/flate/trees.h | 131 - src/libs/pdflib/libs/flate/uncompr.c | 59 - src/libs/pdflib/libs/flate/zconf.h | 389 - src/libs/pdflib/libs/flate/zlib.h | 897 - src/libs/pdflib/libs/flate/zutil.c | 227 - src/libs/pdflib/libs/flate/zutil.h | 228 - src/libs/pdflib/libs/pdcore/Jamfile | 29 - src/libs/pdflib/libs/pdcore/Makefile | 51 - src/libs/pdflib/libs/pdcore/pc_arc4.c | 61 - src/libs/pdflib/libs/pdcore/pc_arc4.h | 60 - src/libs/pdflib/libs/pdcore/pc_chartabs.h | 3590 --- src/libs/pdflib/libs/pdcore/pc_config.h | 289 - src/libs/pdflib/libs/pdcore/pc_core.c | 1077 - src/libs/pdflib/libs/pdcore/pc_core.h | 205 - src/libs/pdflib/libs/pdcore/pc_corefont.c | 238 - src/libs/pdflib/libs/pdcore/pc_corefont.h | 59 - src/libs/pdflib/libs/pdcore/pc_coremetr.h | 1892 -- src/libs/pdflib/libs/pdcore/pc_crypt.c | 26 - src/libs/pdflib/libs/pdcore/pc_crypt.h | 26 - src/libs/pdflib/libs/pdcore/pc_ebcdic.c | 24 - src/libs/pdflib/libs/pdcore/pc_ebcdic.h | 23 - src/libs/pdflib/libs/pdcore/pc_encoding.c | 1259 - src/libs/pdflib/libs/pdcore/pc_encoding.h | 84 - src/libs/pdflib/libs/pdcore/pc_file.c | 772 - src/libs/pdflib/libs/pdcore/pc_file.h | 76 - src/libs/pdflib/libs/pdcore/pc_font.c | 159 - src/libs/pdflib/libs/pdcore/pc_font.h | 226 - src/libs/pdflib/libs/pdcore/pc_generr.h | 235 - src/libs/pdflib/libs/pdcore/pc_geom.c | 332 - src/libs/pdflib/libs/pdcore/pc_geom.h | 89 - src/libs/pdflib/libs/pdcore/pc_md5.c | 307 - src/libs/pdflib/libs/pdcore/pc_md5.h | 57 - src/libs/pdflib/libs/pdcore/pc_nocarbon.h | 24 - src/libs/pdflib/libs/pdcore/pc_optparse.c | 789 - src/libs/pdflib/libs/pdcore/pc_optparse.h | 224 - src/libs/pdflib/libs/pdcore/pc_output.c | 983 - src/libs/pdflib/libs/pdcore/pc_output.h | 136 - src/libs/pdflib/libs/pdcore/pc_sbuf.c | 103 - src/libs/pdflib/libs/pdcore/pc_sbuf.h | 64 - src/libs/pdflib/libs/pdcore/pc_scope.c | 27 - src/libs/pdflib/libs/pdcore/pc_scope.h | 23 - src/libs/pdflib/libs/pdcore/pc_unicode.c | 1214 - src/libs/pdflib/libs/pdcore/pc_unicode.h | 116 - src/libs/pdflib/libs/pdcore/pc_util.c | 678 - src/libs/pdflib/libs/pdcore/pc_util.h | 83 - src/libs/pdflib/libs/pdcore/pdcore.dsp | 352 - src/libs/pdflib/libs/pdflib/Jamfile | 52 - src/libs/pdflib/libs/pdflib/Makefile | 100 - src/libs/pdflib/libs/pdflib/PDFlib.bpf | 120 - src/libs/pdflib/libs/pdflib/PDFlib.bpr | 167 - src/libs/pdflib/libs/pdflib/PDFlib_dll.bpf | 114 - src/libs/pdflib/libs/pdflib/PDFlib_dll.bpr | 169 - src/libs/pdflib/libs/pdflib/PDFlib_dll.res | Bin 1688 -> 0 bytes src/libs/pdflib/libs/pdflib/p_afm.c | 539 - src/libs/pdflib/libs/pdflib/p_annots.c | 1049 - src/libs/pdflib/libs/pdflib/p_basic.c | 1586 - src/libs/pdflib/libs/pdflib/p_block.c | 83 - src/libs/pdflib/libs/pdflib/p_bmp.c | 597 - src/libs/pdflib/libs/pdflib/p_ccitt.c | 190 - src/libs/pdflib/libs/pdflib/p_cid.c | 185 - src/libs/pdflib/libs/pdflib/p_cid.h | 955 - src/libs/pdflib/libs/pdflib/p_color.c | 936 - src/libs/pdflib/libs/pdflib/p_color.h | 155 - src/libs/pdflib/libs/pdflib/p_draw.c | 554 - src/libs/pdflib/libs/pdflib/p_encoding.c | 945 - src/libs/pdflib/libs/pdflib/p_filter.c | 152 - src/libs/pdflib/libs/pdflib/p_font.c | 1516 - src/libs/pdflib/libs/pdflib/p_font.h | 105 - src/libs/pdflib/libs/pdflib/p_generr.h | 402 - src/libs/pdflib/libs/pdflib/p_gif.c | 513 - src/libs/pdflib/libs/pdflib/p_gstate.c | 645 - src/libs/pdflib/libs/pdflib/p_hkscmyk.h | 28 - src/libs/pdflib/libs/pdflib/p_hkslab.h | 28 - src/libs/pdflib/libs/pdflib/p_hostfont.c | 23 - src/libs/pdflib/libs/pdflib/p_hyper.c | 1264 - src/libs/pdflib/libs/pdflib/p_icc.c | 48 - src/libs/pdflib/libs/pdflib/p_icc.h | 24 - src/libs/pdflib/libs/pdflib/p_icc9809.h | 38 - src/libs/pdflib/libs/pdflib/p_icclib.c | 35 - src/libs/pdflib/libs/pdflib/p_icclib.h | 19 - src/libs/pdflib/libs/pdflib/p_image.c | 1762 -- src/libs/pdflib/libs/pdflib/p_image.h | 249 - src/libs/pdflib/libs/pdflib/p_intern.h | 742 - src/libs/pdflib/libs/pdflib/p_jpeg.c | 643 - src/libs/pdflib/libs/pdflib/p_kerning.c | 38 - src/libs/pdflib/libs/pdflib/p_keyconn.h | 153 - src/libs/pdflib/libs/pdflib/p_pantlab.h | 28 - src/libs/pdflib/libs/pdflib/p_params.c | 1060 - src/libs/pdflib/libs/pdflib/p_params.h | 320 - src/libs/pdflib/libs/pdflib/p_pattern.c | 216 - src/libs/pdflib/libs/pdflib/p_pdi.c | 201 - src/libs/pdflib/libs/pdflib/p_pfm.c | 349 - src/libs/pdflib/libs/pdflib/p_png.c | 724 - src/libs/pdflib/libs/pdflib/p_resource.c | 746 - src/libs/pdflib/libs/pdflib/p_shading.c | 381 - src/libs/pdflib/libs/pdflib/p_subsett.c | 26 - src/libs/pdflib/libs/pdflib/p_template.c | 140 - src/libs/pdflib/libs/pdflib/p_text.c | 1632 -- src/libs/pdflib/libs/pdflib/p_tiff.c | 883 - src/libs/pdflib/libs/pdflib/p_truetype.c | 1872 -- src/libs/pdflib/libs/pdflib/p_truetype.h | 437 - src/libs/pdflib/libs/pdflib/p_type1.c | 383 - src/libs/pdflib/libs/pdflib/p_type3.c | 476 - src/libs/pdflib/libs/pdflib/p_xgstate.c | 468 - src/libs/pdflib/libs/pdflib/pdf.dsp | 303 - src/libs/pdflib/libs/pdflib/pdflib.dsp | 117 - src/libs/pdflib/libs/pdflib/pdflib.h | 1301 - src/libs/pdflib/libs/pdflib/pdflib.rc | 117 - src/libs/pdflib/libs/pdflib/pdflib_dll.dsp | 76 - src/libs/pdflib/libs/pdflib/pdflib_pdi.dsp | 120 - .../pdflib/libs/pdflib/pdflib_pdi_dll.dsp | 115 - src/libs/pdflib/libs/pdflib/resource.h | 18 - src/libs/pdflib/libs/png/Jamfile | 23 - src/libs/pdflib/libs/png/Makefile | 38 - src/libs/pdflib/libs/png/png.c | 808 - src/libs/pdflib/libs/png/png.dsp | 203 - src/libs/pdflib/libs/png/png.h | 3289 --- src/libs/pdflib/libs/png/pngasmrd.h | 13 - src/libs/pdflib/libs/png/pngconf.h | 1656 -- src/libs/pdflib/libs/png/pngerror.c | 292 - src/libs/pdflib/libs/png/pngget.c | 928 - src/libs/pdflib/libs/png/pngmem.c | 567 - src/libs/pdflib/libs/png/pngread.c | 1431 - src/libs/pdflib/libs/png/pngrio.c | 168 - src/libs/pdflib/libs/png/pngrtran.c | 4176 --- src/libs/pdflib/libs/png/pngrutil.c | 3104 -- src/libs/pdflib/libs/png/pngset.c | 1161 - src/libs/pdflib/libs/png/pngtrans.c | 641 - src/libs/pdflib/libs/png/pngvcrd.c | 3856 --- src/libs/pdflib/libs/tiff/Jamfile | 39 - src/libs/pdflib/libs/tiff/Makefile | 91 - src/libs/pdflib/libs/tiff/port.h | 226 - src/libs/pdflib/libs/tiff/t4.h | 285 - src/libs/pdflib/libs/tiff/tif_auxx.c | 206 - src/libs/pdflib/libs/tiff/tif_close.c | 53 - src/libs/pdflib/libs/tiff/tif_codec.c | 119 - src/libs/pdflib/libs/tiff/tif_compress.c | 235 - src/libs/pdflib/libs/tiff/tif_dir.c | 1318 - src/libs/pdflib/libs/tiff/tif_dir.h | 270 - src/libs/pdflib/libs/tiff/tif_dirinfo.c | 413 - src/libs/pdflib/libs/tiff/tif_dirread.c | 1383 - src/libs/pdflib/libs/tiff/tif_dumpmode.c | 122 - src/libs/pdflib/libs/tiff/tif_error.c | 49 - src/libs/pdflib/libs/tiff/tif_fax3.c | 1578 - src/libs/pdflib/libs/tiff/tif_fax3.h | 525 - src/libs/pdflib/libs/tiff/tif_fax3sm.c | 2091 -- src/libs/pdflib/libs/tiff/tif_getimage.c | 2422 -- src/libs/pdflib/libs/tiff/tif_luv.c | 1627 -- src/libs/pdflib/libs/tiff/tif_lzw.c | 727 - src/libs/pdflib/libs/tiff/tif_next.c | 142 - src/libs/pdflib/libs/tiff/tif_open.c | 535 - src/libs/pdflib/libs/tiff/tif_packbits.c | 299 - src/libs/pdflib/libs/tiff/tif_predict.c | 465 - src/libs/pdflib/libs/tiff/tif_predict.h | 61 - src/libs/pdflib/libs/tiff/tif_read.c | 636 - src/libs/pdflib/libs/tiff/tif_strip.c | 192 - src/libs/pdflib/libs/tiff/tif_swab.c | 205 - src/libs/pdflib/libs/tiff/tif_thunder.c | 154 - src/libs/pdflib/libs/tiff/tif_tile.c | 219 - src/libs/pdflib/libs/tiff/tif_unix.c | 223 - src/libs/pdflib/libs/tiff/tif_version.c | 33 - src/libs/pdflib/libs/tiff/tif_warning.c | 49 - src/libs/pdflib/libs/tiff/tif_zip.c | 380 - src/libs/pdflib/libs/tiff/tiff.dsp | 267 - src/libs/pdflib/libs/tiff/tiff.h | 458 - src/libs/pdflib/libs/tiff/tiffconf.h | 148 - src/libs/pdflib/libs/tiff/tiffio.h | 351 - src/libs/pdflib/libs/tiff/tiffiop.h | 279 - src/libs/pdflib/libs/tiff/tiffvers.h | 13 - src/libs/pdflib/libs/tiff/uvcode.h | 175 - src/libs/pdflib/pdflib-config.in | 98 - src/libs/pdflib/progs/Makefile | 9 - src/libs/pdflib/progs/pdflib/Makefile | 37 - src/libs/pdflib/progs/pdflib/getopt.c | 116 - src/libs/pdflib/progs/pdflib/pdfimage.c | 165 - src/libs/pdflib/progs/pdflib/pdfimpose.c | 329 - src/libs/pdflib/progs/pdflib/text2pdf.c | 233 - src/libs/pdflib/readme.txt | 189 - 473 files changed, 234839 deletions(-) delete mode 100644 data/system/data/licenses/PDFlib Lite delete mode 100644 src/add-ons/print/drivers/pdf/CHANGES delete mode 100755 src/add-ons/print/drivers/pdf/Install delete mode 100644 src/add-ons/print/drivers/pdf/Jamfile delete mode 100644 src/add-ons/print/drivers/pdf/README delete mode 100644 src/add-ons/print/drivers/pdf/TODO delete mode 100644 src/add-ons/print/drivers/pdf/bookmarks/Sample delete mode 100755 src/add-ons/print/drivers/pdf/doc/Create_Report_Mail.sh delete mode 100644 src/add-ons/print/drivers/pdf/doc/IF.pdf delete mode 100644 src/add-ons/print/drivers/pdf/doc/Interactive Features.gbe delete mode 100644 src/add-ons/print/drivers/pdf/doc/User Guide.html delete mode 100644 src/add-ons/print/drivers/pdf/doc/credits.zip delete mode 100644 src/add-ons/print/drivers/pdf/doc/images/add_local_printer.jpeg delete mode 100644 src/add-ons/print/drivers/pdf/doc/images/add_printer.jpeg delete mode 100644 src/add-ons/print/drivers/pdf/doc/images/make_default_printer.jpeg delete mode 100644 src/add-ons/print/drivers/pdf/doc/images/preferences_printers.jpeg delete mode 100644 src/add-ons/print/drivers/pdf/doc/images/printers.jpeg delete mode 100644 src/add-ons/print/drivers/pdf/doc/pdf_icon.tga delete mode 100644 src/add-ons/print/drivers/pdf/encoding/t1enc0.enc delete mode 100644 src/add-ons/print/drivers/pdf/encoding/t1enc1.enc delete mode 100644 src/add-ons/print/drivers/pdf/encoding/t1enc2.enc delete mode 100644 src/add-ons/print/drivers/pdf/encoding/t1enc3.enc delete mode 100644 src/add-ons/print/drivers/pdf/encoding/t1enc4.enc delete mode 100644 src/add-ons/print/drivers/pdf/encoding/ttenc0.cpg delete mode 100644 src/add-ons/print/drivers/pdf/encoding/ttenc1.cpg delete mode 100644 src/add-ons/print/drivers/pdf/encoding/ttenc2.cpg delete mode 100644 src/add-ons/print/drivers/pdf/encoding/ttenc3.cpg delete mode 100644 src/add-ons/print/drivers/pdf/encoding/ttenc4.cpg delete mode 100644 src/add-ons/print/drivers/pdf/source/AboutText.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Bezier.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Bezier.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Bookmark.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Bookmark.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Cache.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Cache.h delete mode 100644 src/add-ons/print/drivers/pdf/source/DocInfoWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/DocInfoWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/DrawShape.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/DrawShape.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Driver.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Driver.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Fonts.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Fonts.h delete mode 100644 src/add-ons/print/drivers/pdf/source/FontsWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/FontsWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Image.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Image.h delete mode 100644 src/add-ons/print/drivers/pdf/source/ImageCache.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/ImageCache.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Jamfile delete mode 100644 src/add-ons/print/drivers/pdf/source/JobSetupWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/JobSetupWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/LinePathBuilder.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/LinePathBuilder.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Link.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Link.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Log.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Mask.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Mask.h delete mode 100644 src/add-ons/print/drivers/pdf/source/MessagePrinter.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/MessagePrinter.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Notes.txt delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFSystem.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFText.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFWriter.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFWriter.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PDFWriter.rdef delete mode 100644 src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PageSetupWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PictureIterator.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PictureIterator.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterDriver.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterDriver.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterPrefs.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterPrefs.h delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/PrinterSettings.h delete mode 100644 src/add-ons/print/drivers/pdf/source/RegExp.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/RegExp.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Report.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Report.h delete mode 100644 src/add-ons/print/drivers/pdf/source/Scanner.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/Scanner.h delete mode 100644 src/add-ons/print/drivers/pdf/source/StatusWindow.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/StatusWindow.h delete mode 100644 src/add-ons/print/drivers/pdf/source/SubPath.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/SubPath.h delete mode 100644 src/add-ons/print/drivers/pdf/source/XReferences.cpp delete mode 100644 src/add-ons/print/drivers/pdf/source/XReferences.h delete mode 100755 src/add-ons/print/drivers/pdf/source/_CopyAndRestart delete mode 100644 src/add-ons/print/drivers/pdf/source/cns1.h delete mode 100644 src/add-ons/print/drivers/pdf/source/enc_range.h delete mode 100644 src/add-ons/print/drivers/pdf/source/gb1.h delete mode 100644 src/add-ons/print/drivers/pdf/source/japanese.h delete mode 100644 src/add-ons/print/drivers/pdf/source/korean.h delete mode 100644 src/add-ons/print/drivers/pdf/source/unicode0.h delete mode 100644 src/add-ons/print/drivers/pdf/source/unicode1.h delete mode 100644 src/add-ons/print/drivers/pdf/source/unicode2.h delete mode 100644 src/add-ons/print/drivers/pdf/source/unicode3.h delete mode 100644 src/add-ons/print/drivers/pdf/source/unicode4.h delete mode 100644 src/add-ons/print/drivers/pdf/xrefs/Deutsch delete mode 100644 src/add-ons/print/drivers/pdf/xrefs/English delete mode 100644 src/libs/pdflib/Jamfile delete mode 100644 src/libs/pdflib/Makefile delete mode 100644 src/libs/pdflib/PDFlib.dsw delete mode 100644 src/libs/pdflib/bind/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/c/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/c/businesscard.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/businesscard.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/chartab.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/chartab.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/examples_c.dsw delete mode 100644 src/libs/pdflib/bind/pdflib/c/hello.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/hello.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/hellodl.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/image.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/image.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/invoice.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/invoice.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/pdfclock.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/pdfclock.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/pdflibdl.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/pdflibdl.h delete mode 100644 src/libs/pdflib/bind/pdflib/c/quickreference.c delete mode 100644 src/libs/pdflib/bind/pdflib/c/quickreference.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/c/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/c/samples.mcp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/businesscard.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/businesscard.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/chartab.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/chartab.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/examples_cpp.dsw delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/hello.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/hello.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/image.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/image.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/invoice.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/invoice.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/pdfclock.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/pdfclock.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/pdflib.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/pdflib.hpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/quickreference.cpp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/quickreference.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/cpp/samples.mcp delete mode 100644 src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.afm delete mode 100644 src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.pfa delete mode 100644 src/libs/pdflib/bind/pdflib/data/blocks.pdf delete mode 100644 src/libs/pdflib/bind/pdflib/data/boilerplate.pdf delete mode 100644 src/libs/pdflib/bind/pdflib/data/nesrin.jpg delete mode 100644 src/libs/pdflib/bind/pdflib/data/reference.pdf delete mode 100644 src/libs/pdflib/bind/pdflib/data/stationery.pdf delete mode 100644 src/libs/pdflib/bind/pdflib/java/Java.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/java/PDFlibException.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/businesscard.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/chartab.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/hello.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/image.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/invoice.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/businesscard.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/chartab.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/hello.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/image.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/invoice.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/pdfclock.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/jsp/quickreference.jsp delete mode 100644 src/libs/pdflib/bind/pdflib/java/pdfclock.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/pdflib.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/pdflib_java.c delete mode 100644 src/libs/pdflib/bind/pdflib/java/quickreference.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/businesscardServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/chartabServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/helloServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/imageServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/invoiceServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/pdfclockServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/java/servlet/quickreferenceServlet.java delete mode 100644 src/libs/pdflib/bind/pdflib/perl/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/perl/Perl.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/perl/businesscard.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/chartab.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/hello.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/image.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/invoice.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/pdfclock.cgi.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/pdfclock.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/pdflib_pl.c delete mode 100644 src/libs/pdflib/bind/pdflib/perl/pdflib_pl.pm delete mode 100644 src/libs/pdflib/bind/pdflib/perl/quickreference.pl delete mode 100644 src/libs/pdflib/bind/pdflib/perl/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/php/businesscard.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/chartab.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/Makefile.php-404.in delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/config.m4 delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/config.php-406+.m4 delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/libs.php-404.mk delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/pdf.c delete mode 100644 src/libs/pdflib/bind/pdflib/php/ext/pdf/php_pdf.h delete mode 100644 src/libs/pdflib/bind/pdflib/php/hello.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/image.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/invoice.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/pdfclock.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/quickreference.php delete mode 100644 src/libs/pdflib/bind/pdflib/php/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/python/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/python/Python.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/python/businesscard.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/chartab.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/hello.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/image.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/invoice.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/pdfclock.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/pdflib_py.c delete mode 100644 src/libs/pdflib/bind/pdflib/python/quickreference.py delete mode 100644 src/libs/pdflib/bind/pdflib/python/readme.txt delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/Makefile delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/Tcl.dsp delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/businesscard.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/chartab.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/hello.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/image.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/invoice.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/pdfclock.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/pdflib_tcl.c delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/pkgIndex.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/quickreference.tcl delete mode 100644 src/libs/pdflib/bind/pdflib/tcl/readme.txt delete mode 100644 src/libs/pdflib/config/aclocal.m4 delete mode 100755 src/libs/pdflib/config/config.guess delete mode 100755 src/libs/pdflib/config/config.sub delete mode 100755 src/libs/pdflib/config/install-sh delete mode 100644 src/libs/pdflib/config/ltmain.sh delete mode 100644 src/libs/pdflib/config/mkbind.inc.in delete mode 100644 src/libs/pdflib/config/mkcommon.inc.in delete mode 100644 src/libs/pdflib/config/mklibs.inc.in delete mode 100644 src/libs/pdflib/config/mkmainlib.inc delete mode 100644 src/libs/pdflib/config/mkprogs.inc.in delete mode 100644 src/libs/pdflib/config/mksubdirs.inc.in delete mode 100755 src/libs/pdflib/configure delete mode 100644 src/libs/pdflib/configure.in delete mode 100644 src/libs/pdflib/doc/PDFlib-license.pdf delete mode 100644 src/libs/pdflib/doc/PDFlib-license.rtf delete mode 100644 src/libs/pdflib/doc/grid.pdf delete mode 100644 src/libs/pdflib/doc/pdflib/PDFlib-Lite-license.pdf delete mode 100644 src/libs/pdflib/doc/pdflib/PDFlib-manual.pdf delete mode 100644 src/libs/pdflib/doc/pdflib/PDFlib-purchase-order.pdf delete mode 100644 src/libs/pdflib/doc/pdflib/changes.txt delete mode 100644 src/libs/pdflib/doc/pdflib/changes4.txt delete mode 100644 src/libs/pdflib/doc/pdflib/compatibility.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme-binary.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme-source-as400.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme-source-mac.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme-source-unix.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme-source-windows.txt delete mode 100644 src/libs/pdflib/doc/pdflib/readme.txt delete mode 100644 src/libs/pdflib/fonts/pdflib.upr delete mode 100644 src/libs/pdflib/fonts/print_glyphs.ps delete mode 100644 src/libs/pdflib/libs/Jamfile delete mode 100644 src/libs/pdflib/libs/Makefile delete mode 100644 src/libs/pdflib/libs/PDFlib.mcp delete mode 100644 src/libs/pdflib/libs/flate/Jamfile delete mode 100644 src/libs/pdflib/libs/flate/Makefile delete mode 100644 src/libs/pdflib/libs/flate/adler32.c delete mode 100644 src/libs/pdflib/libs/flate/compress.c delete mode 100644 src/libs/pdflib/libs/flate/crc32.c delete mode 100644 src/libs/pdflib/libs/flate/deflate.c delete mode 100644 src/libs/pdflib/libs/flate/deflate.h delete mode 100644 src/libs/pdflib/libs/flate/flate.dsp delete mode 100644 src/libs/pdflib/libs/flate/infblock.c delete mode 100644 src/libs/pdflib/libs/flate/infblock.h delete mode 100644 src/libs/pdflib/libs/flate/infcodes.c delete mode 100644 src/libs/pdflib/libs/flate/infcodes.h delete mode 100644 src/libs/pdflib/libs/flate/inffast.c delete mode 100644 src/libs/pdflib/libs/flate/inffast.h delete mode 100644 src/libs/pdflib/libs/flate/inffixed.h delete mode 100644 src/libs/pdflib/libs/flate/inflate.c delete mode 100644 src/libs/pdflib/libs/flate/inftrees.c delete mode 100644 src/libs/pdflib/libs/flate/inftrees.h delete mode 100644 src/libs/pdflib/libs/flate/infutil.c delete mode 100644 src/libs/pdflib/libs/flate/infutil.h delete mode 100644 src/libs/pdflib/libs/flate/trees.c delete mode 100644 src/libs/pdflib/libs/flate/trees.h delete mode 100644 src/libs/pdflib/libs/flate/uncompr.c delete mode 100644 src/libs/pdflib/libs/flate/zconf.h delete mode 100644 src/libs/pdflib/libs/flate/zlib.h delete mode 100644 src/libs/pdflib/libs/flate/zutil.c delete mode 100644 src/libs/pdflib/libs/flate/zutil.h delete mode 100644 src/libs/pdflib/libs/pdcore/Jamfile delete mode 100644 src/libs/pdflib/libs/pdcore/Makefile delete mode 100644 src/libs/pdflib/libs/pdcore/pc_arc4.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_arc4.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_chartabs.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_config.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_core.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_core.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_corefont.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_corefont.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_coremetr.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_crypt.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_crypt.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_ebcdic.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_ebcdic.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_encoding.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_encoding.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_file.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_file.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_font.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_font.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_generr.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_geom.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_geom.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_md5.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_md5.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_nocarbon.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_optparse.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_optparse.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_output.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_output.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_sbuf.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_sbuf.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_scope.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_scope.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_unicode.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_unicode.h delete mode 100644 src/libs/pdflib/libs/pdcore/pc_util.c delete mode 100644 src/libs/pdflib/libs/pdcore/pc_util.h delete mode 100644 src/libs/pdflib/libs/pdcore/pdcore.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/Jamfile delete mode 100644 src/libs/pdflib/libs/pdflib/Makefile delete mode 100644 src/libs/pdflib/libs/pdflib/PDFlib.bpf delete mode 100644 src/libs/pdflib/libs/pdflib/PDFlib.bpr delete mode 100644 src/libs/pdflib/libs/pdflib/PDFlib_dll.bpf delete mode 100644 src/libs/pdflib/libs/pdflib/PDFlib_dll.bpr delete mode 100644 src/libs/pdflib/libs/pdflib/PDFlib_dll.res delete mode 100644 src/libs/pdflib/libs/pdflib/p_afm.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_annots.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_basic.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_block.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_bmp.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_ccitt.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_cid.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_cid.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_color.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_color.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_draw.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_encoding.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_filter.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_font.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_font.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_generr.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_gif.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_gstate.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_hkscmyk.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_hkslab.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_hostfont.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_hyper.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_icc.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_icc.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_icc9809.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_icclib.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_icclib.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_image.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_image.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_intern.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_jpeg.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_kerning.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_keyconn.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_pantlab.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_params.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_params.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_pattern.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_pdi.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_pfm.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_png.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_resource.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_shading.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_subsett.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_template.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_text.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_tiff.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_truetype.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_truetype.h delete mode 100644 src/libs/pdflib/libs/pdflib/p_type1.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_type3.c delete mode 100644 src/libs/pdflib/libs/pdflib/p_xgstate.c delete mode 100644 src/libs/pdflib/libs/pdflib/pdf.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib.h delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib.rc delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib_dll.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib_pdi.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/pdflib_pdi_dll.dsp delete mode 100644 src/libs/pdflib/libs/pdflib/resource.h delete mode 100644 src/libs/pdflib/libs/png/Jamfile delete mode 100644 src/libs/pdflib/libs/png/Makefile delete mode 100644 src/libs/pdflib/libs/png/png.c delete mode 100644 src/libs/pdflib/libs/png/png.dsp delete mode 100644 src/libs/pdflib/libs/png/png.h delete mode 100644 src/libs/pdflib/libs/png/pngasmrd.h delete mode 100644 src/libs/pdflib/libs/png/pngconf.h delete mode 100644 src/libs/pdflib/libs/png/pngerror.c delete mode 100644 src/libs/pdflib/libs/png/pngget.c delete mode 100644 src/libs/pdflib/libs/png/pngmem.c delete mode 100644 src/libs/pdflib/libs/png/pngread.c delete mode 100644 src/libs/pdflib/libs/png/pngrio.c delete mode 100644 src/libs/pdflib/libs/png/pngrtran.c delete mode 100644 src/libs/pdflib/libs/png/pngrutil.c delete mode 100644 src/libs/pdflib/libs/png/pngset.c delete mode 100644 src/libs/pdflib/libs/png/pngtrans.c delete mode 100644 src/libs/pdflib/libs/png/pngvcrd.c delete mode 100644 src/libs/pdflib/libs/tiff/Jamfile delete mode 100644 src/libs/pdflib/libs/tiff/Makefile delete mode 100644 src/libs/pdflib/libs/tiff/port.h delete mode 100644 src/libs/pdflib/libs/tiff/t4.h delete mode 100644 src/libs/pdflib/libs/tiff/tif_auxx.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_close.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_codec.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_compress.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_dir.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_dir.h delete mode 100644 src/libs/pdflib/libs/tiff/tif_dirinfo.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_dirread.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_dumpmode.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_error.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_fax3.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_fax3.h delete mode 100644 src/libs/pdflib/libs/tiff/tif_fax3sm.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_getimage.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_luv.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_lzw.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_next.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_open.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_packbits.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_predict.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_predict.h delete mode 100644 src/libs/pdflib/libs/tiff/tif_read.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_strip.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_swab.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_thunder.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_tile.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_unix.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_version.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_warning.c delete mode 100644 src/libs/pdflib/libs/tiff/tif_zip.c delete mode 100644 src/libs/pdflib/libs/tiff/tiff.dsp delete mode 100644 src/libs/pdflib/libs/tiff/tiff.h delete mode 100644 src/libs/pdflib/libs/tiff/tiffconf.h delete mode 100644 src/libs/pdflib/libs/tiff/tiffio.h delete mode 100644 src/libs/pdflib/libs/tiff/tiffiop.h delete mode 100644 src/libs/pdflib/libs/tiff/tiffvers.h delete mode 100644 src/libs/pdflib/libs/tiff/uvcode.h delete mode 100644 src/libs/pdflib/pdflib-config.in delete mode 100644 src/libs/pdflib/progs/Makefile delete mode 100644 src/libs/pdflib/progs/pdflib/Makefile delete mode 100644 src/libs/pdflib/progs/pdflib/getopt.c delete mode 100644 src/libs/pdflib/progs/pdflib/pdfimage.c delete mode 100644 src/libs/pdflib/progs/pdflib/pdfimpose.c delete mode 100644 src/libs/pdflib/progs/pdflib/text2pdf.c delete mode 100644 src/libs/pdflib/readme.txt diff --git a/build/jam/images/definitions/regular b/build/jam/images/definitions/regular index 10b846eddc..c4aa815d0f 100644 --- a/build/jam/images/definitions/regular +++ b/build/jam/images/definitions/regular @@ -164,7 +164,6 @@ SYSTEM_ADD_ONS_PRINT += [ FFilterByBuildFeatures Gutenprint@gutenprint PCL5\ Compatible PCL6\ Compatible - PDF\ Writer PS\ Compatible Preview ] ; diff --git a/build/jam/packages/Haiku b/build/jam/packages/Haiku index 32c45ca2ff..296c90ceac 100644 --- a/build/jam/packages/Haiku +++ b/build/jam/packages/Haiku @@ -300,12 +300,6 @@ for linkTarget in $(SYSTEM_DEMOS) { # Deskbar menu entries file AddFilesToPackage data deskbar : menu_entries ; - -# PDF Writer enconding files -CopyDirectoryToPackage data - : [ FDirName $(HAIKU_TOP) src add-ons print drivers pdf encoding ] - : "PDF Writer" : -x Jamfile ; - # licenses CopyDirectoryToPackage data : [ FDirName $(HAIKU_TOP) data system data licenses ] @@ -321,15 +315,6 @@ CopyDirectoryToPackage documentation : [ FDirName $(HAIKU_TOP) docs apps diskusage ] : diskusage ; -# Copy documentation and sample programs as per PDFlib Lite's license -# requirement. -CopyDirectoryToPackage documentation - : [ FDirName $(HAIKU_TOP) src libs pdflib doc ] - : pdflib ; -CopyDirectoryToPackage develop sample-code - : [ FDirName $(HAIKU_TOP) src libs pdflib bind pdflib ] - : pdflib ; - # empty directory AddDirectoryToPackage data empty ; diff --git a/data/system/data/licenses/PDFlib Lite b/data/system/data/licenses/PDFlib Lite deleted file mode 100644 index aa04088044..0000000000 --- a/data/system/data/licenses/PDFlib Lite +++ /dev/null @@ -1,146 +0,0 @@ - -PDFlib Lite License Agreement - -PDFlib GmbH (Licensor), Tal 40, 80331 Munich, Germany -phone +49 · 89 · 29 16 46 87, fax +49 · 89 · 29 16 46 86 -sales@pdflib.com, support@pdflib.com, www.pdflib.com - -Note: this license is substantially different than the license for other -products of PDFlib GmbH. This license does not cover products other than those -mentioned in section 1. - - -1 Definitions - -This agreement defines the licensing terms for the software product called -PDFlib Lite 5.0.3. This product will be referred to as »the program« in this -agreement. The program is a copyrighted work whose copyright is held by the -licensor. - -The program is delivered with a digital manual which describes its programming -features and their usage (»the documentation«). »Programming samples« shall -mean the sample code which demonstrates use of the program, and which is part -of the distribution. »Original distribution» shall mean the set of all files -comprising the source code package for the program as made available by -licensor. - -The term »integrated product« shall be used in this agreement to designate any -product that is made up of both the program and software or hardware developed -or marketed by any other individual or organization. Integrated product shall -mean all components which are required to make reasonable use of the aggregate -software, even if such components are not directly attached to the program. For -example, if integrated product is a virtual printer driver integrated product -means the complete operating system; if integrated product is a word processor -integrated product means the full word processor plus auxiliary components; if -integrated product is a Web application integrated product means all components -for retrieving, processing, and presenting data. (This is not an exhaustive -enumeration.) - -By using, modifying or distributing the program (or any work based on the -program), you indicate your acceptance of this license to do so, and all its -terms and conditions for using, copying, distributing or modifying the program -or works based on it. Nothing other than this license grants you permission to -use, modify or distribute the program or its derivative works. These actions -are prohibited by law. If you do not accept these terms and conditions, do not -use, modify or distribute the program. - - -2 Using the Program - -Functional use (running) of the program requires a commercial license which is -outside the scope of this agreement. However, exempt users listed below are -granted a world-wide, royalty-free, non-exclusive license to use the program. - -2.1 Open Source Developer Exemption -Use of the program as part of an integrated product is exempt from commercial -licensing provided the integrated product is available under a license which -has been approved by the Open Source Initiative OSI (www.opensource.org), -complete source code for the integrated product is available to anyone free of -charge, and the availability of source code is announced on a publicly -accessible Web site. Source code means the preferred machine-readable form in -which a programmer would modify the software. - -2.2 Private non-Profit User Exemption -Non-profit uses of the program by a private individual are exempt from -commercial licensing. For-profit use by individuals and non-profit use by -organizations do not fall under this exemption. - -2.3 Educational and Research Exemption -Use of the program by educational institutions and individuals for educational -and research purposes is exempt from commercial licensing. Other uses (e.g., -administrative) by educational institutions do not fall under this exemption. - - -3 Redistribution - -Redistribution in binary or source form by a commercial organization to any -third party are permitted provided that all of the following conditions are -met. Redistributing the program under these conditions does not necessarily -give the recipient the right to use the program; using the program is always -subject to the conditions in section 2. - -3.1 Modifications -If you have modified the program, you must include prominent notices in stating -that you have modified the program’s files, your name, your e-mail address (if -any) and the date and purpose of any change. - -PDF files generated with the program must include the same Producer entry in -the document info field as those generated with the original (unmodified) -program. Changing the Producer entry renders this license invalid. - -3.2 Source Code Redistribution -Redistributions of source code must include all files which are part of the -original distribution. Omitting one or more files would result in a -distribution which is not compliant with this license. - -3.3 Binary Redistribution -Redistributions in binary (compiled) form must include this license, the -documentation, and programming samples. Not all programming samples must be -included, but only the samples for programming languages which are actually -supported by the binary distribution. As an alternative to including the -documentation in a binary distribution, the documentation may also be made -available separately for free download on the Internet in unmodified form. This -»download« exception does not apply to other files which are part of the -original distribution. - - -4 Reservation of Rights - -No rights are granted to the program except as expressly set forth herein. You -may not use, copy, modify, sublicense, or distribute the program except as -expressly provided under this license. Any attempt otherwise to copy, modify, -sublicense or distribute the program is void, and will automatically terminate -your rights under this license. - - -5 Warranty - -The program is provided to you »as is«, without warranty. There is no warranty -for the program, either expressed or implied, including, but not limited to, -the implied warranties of merchantability and fitness for a particular purpose -and non-infringement of third party rights. The entire risk as to the quality -and performance of the program is with you. Should the program prove defective, -you assume the cost of all necessary servicing, repair or correction. - -In no event unless required by applicable law or agreed to in writing will -licensor, or any other party who may modify and/or redistribute the program as -permitted above, be liable to you for damages, including any general, special, -incidental or consequential damages arising out of the use or inability to use -the program (including but not limited to loss of data or data being rendered -inaccurate or losses sustained by you or third parties or a failure of the -program to operate with any other programs), even if such holder or other party -has been advised of the possibility of such damages. - - -6 General - -This license is governed by the laws of Germany, excluding choice of law rules. -If any part of this license is found to be in conflict with the law, that part -shall be interpreted in its broadest meaning consistent with the law, and no -other parts of the license shall be affected. - - - - -PDFlib Lite License Agreement (created January 21, 2004) -(Converted from PDF to text via Google Quick View) diff --git a/src/add-ons/print/drivers/Jamfile b/src/add-ons/print/drivers/Jamfile index c78844ff1c..3161cd4ca9 100644 --- a/src/add-ons/print/drivers/Jamfile +++ b/src/add-ons/print/drivers/Jamfile @@ -4,6 +4,5 @@ SubInclude HAIKU_TOP src add-ons print drivers canon_lips ; SubInclude HAIKU_TOP src add-ons print drivers gutenprint ; SubInclude HAIKU_TOP src add-ons print drivers pcl5 ; SubInclude HAIKU_TOP src add-ons print drivers pcl6 ; -SubInclude HAIKU_TOP src add-ons print drivers pdf ; SubInclude HAIKU_TOP src add-ons print drivers postscript ; SubInclude HAIKU_TOP src add-ons print drivers preview ; diff --git a/src/add-ons/print/drivers/pdf/CHANGES b/src/add-ons/print/drivers/pdf/CHANGES deleted file mode 100644 index 55cd6a5809..0000000000 --- a/src/add-ons/print/drivers/pdf/CHANGES +++ /dev/null @@ -1,50 +0,0 @@ -CHANGES - -From version 1.5b2 to 2.0b1 (6/27/2003): - -- updated to PDFlib Lite 5.0.0 -- static linked to PDFlib -- added basic support for stroke/fill opacity (transparency) -- add image cache -- ui clean up of Advanced Settings -- added expanded/collapsed state to bookmarks -- added link destination -- bug fixes - -From version 1.5b1 to 1.5b2 (7/5/2002): - -- fixed bug in install script -- better position detection of bookmarks on a page -- updated to PDFlib 4.0.3 (both x86 and PPC!) - - -From version 1.0b1 to 1.5b1 (5/30/2002): - -- Added interactive pdf features (Web links, cross references, bookmarks) -- Added advanced settings for configuration of interactive features -- Added bookmarks definition "Sample" file -- Added xref definition sample files "English" and "Deutsch" -- Added Bookmarks.zip sample document (StyledEdit and gP) -- Added sample document that shows the interactive features of PDF Writer (gP document and generated PDF file) - -- Added doc info window for configuration of PDF document information -- Fixed Document information is now UCS2 encoded - -- Added font embedding configuration window (Fonts->Embedding) -- Added CJK search order configuration window (Fonts->CJK) -- Added Korean font support - -- Added pattern support -- Implemented clipping to "stroked" graphic primitives -- Fixed font color is always high color and not the current pattern -- Fixed ClipChar() creates a rectangle if the glyph can not be retrieved from BFont -- Update to PDFlib 4.0.2 (Intel only) - -- Fixed: silently exit from OpenTransport() in Print To File cancelation case - -- Report information in status window - -- Install script copies bookmark and xref definition files to PDF Writer settings directory -- Install script restarts print_server before termination -- Fixed window title of page setup window - diff --git a/src/add-ons/print/drivers/pdf/Install b/src/add-ons/print/drivers/pdf/Install deleted file mode 100755 index c39ee70024..0000000000 --- a/src/add-ons/print/drivers/pdf/Install +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -launchdir=$(dirname "$0") -copyattr -d "$launchdir/PDF Writer" "$HOME/config/add-ons/Print/PDF Writer" -# copyattr -d "$launchdir/libpdf.so" "$HOME/config/lib/libpdf.so" - -mkdir /boot/home/config/settings/PDF\ Writer -cd $launchdir -cp encoding/* $HOME/config/settings/PDF\ Writer/ - -mkdir /boot/home/config/settings/PDF\ Writer/bookmarks -cp bookmarks/* /boot/home/config/settings/PDF\ Writer/bookmarks - -mkdir /boot/home/config/settings/PDF\ Writer/xrefs -cp xrefs/* /boot/home/config/settings/PDF\ Writer/xrefs - -# restart print_server -/boot/beos/system/servers/print_server - -alert --info "PDF Writer driver is installed" diff --git a/src/add-ons/print/drivers/pdf/Jamfile b/src/add-ons/print/drivers/pdf/Jamfile deleted file mode 100644 index d94efcd771..0000000000 --- a/src/add-ons/print/drivers/pdf/Jamfile +++ /dev/null @@ -1,4 +0,0 @@ -SubDir HAIKU_TOP src add-ons print drivers pdf ; - -SubInclude HAIKU_TOP src add-ons print drivers pdf source ; - diff --git a/src/add-ons/print/drivers/pdf/README b/src/add-ons/print/drivers/pdf/README deleted file mode 100644 index 0b75039bf4..0000000000 --- a/src/add-ons/print/drivers/pdf/README +++ /dev/null @@ -1,47 +0,0 @@ -PDF Writer 2.0b1 -6/27/2003 - -is now part of the print_kit of the Haiku project. -http://www.haiku-os.org - -Developers - Name Email address Native language - Phillipe Houdoin French - Michael Pfeiffer German -Former developer: - Simon Gauvin French/English - -Installation - -1. Expand the zip file somewhere -2. Open the newly created folder -3. Run the Install script to install the driver - -These steps are needed only if you don't have already set up a PDF Writer spooler: - -4. Open the Printers preference panel -5. Click Add button -6. Choose local printer (Network printing is untested, feedback welcome!) -7. Type a name for your new PDF Writer spooler -8. Select PDF Writer as kind -9. Select port to output PDF (Print to file to generate PDF files) -10. Click Add button -11. Click Ok button -12. Enjoy! - - -Changes - -Read the "CHANGES" file for the most recent changes. - - -Known Bugs/Limitations - -- Limited alpha transparency support only (bitmap/pattern only) -- Not all drawing modes supported -- No security settings support. -- Clipping to inverse BPicture not supported - -Note -- BePDF until version 0.9.4 does not take the alpha channel of transparent bitmaps or patterns into account; - Acrobat Reader shows them properly! diff --git a/src/add-ons/print/drivers/pdf/TODO b/src/add-ons/print/drivers/pdf/TODO deleted file mode 100644 index 52b1fb9e87..0000000000 --- a/src/add-ons/print/drivers/pdf/TODO +++ /dev/null @@ -1,14 +0,0 @@ -TODO - -(in abitrary order) -- pdf generation - - alpha channel support - - support for more drawing modes (XOR, AND, OR, alpha, blend) - - text attributes - - check: char spacing - - security settings (printing, copying, changing, ...) -> not with PDFlib :( - - password protection (ditto) - - thumbnails? note recent Acrobat Reader doesn't require them; BePDF does not support them. - - optimize CID tables; the mapping from Unicode to CID is not required, it is sufficient - to know whether a code point is in a certain CID table or not! -> use bitfield instead - diff --git a/src/add-ons/print/drivers/pdf/bookmarks/Sample b/src/add-ons/print/drivers/pdf/bookmarks/Sample deleted file mode 100644 index 187e4841af..0000000000 --- a/src/add-ons/print/drivers/pdf/bookmarks/Sample +++ /dev/null @@ -1,13 +0,0 @@ -# This is the PDF Writer bookmarks definition file! -# The next line is mandatory. -Bookmarks 2.0 - -# PDF Writer searches for this file in directory: -# /boot/home/config/settings/PDF Writer/bookmarks - -# level "font family" "font style" font size -# level has to be between 1 and 10 (both inclusive) -# font family and style and size of the font, expanded or collapsed -1 "Swis721 BT" "Roman" 27.0 expanded -2 "Swis721 BT" "Roman" 20.0 collapsed -3 "Swis721 BT" "Roman" 18.0 collapsed \ No newline at end of file diff --git a/src/add-ons/print/drivers/pdf/doc/Create_Report_Mail.sh b/src/add-ons/print/drivers/pdf/doc/Create_Report_Mail.sh deleted file mode 100755 index 885e99d157..0000000000 --- a/src/add-ons/print/drivers/pdf/doc/Create_Report_Mail.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -/boot/system/apps/BeMail mailto:philippe.houdoin@free.fr -subject "pdf_writer v.1.0b1 report" -body "Thanks for taking the time to report how pdf_writer v1.0b1 worked for you! - -Please edit the following text to reflect your experience when trying pdf_writer: - -1 - How did pdf_writed worked? -It crashed/it produced grabage inside the window/it produced gargage all over the screen/it first worked, but stopped working when I did.../other... - -2 - more information: - - - --------------------------------------------------------------------------- -Please do not edit the information below, unless you don't want to disclose some information it contains: - --- Version app_server: -`/bin/version /system/servers/app_server` - --- Version print_server: -`/bin/version /system/servers/print_server` - --- Version libbe.so: -`/bin/version /system/lib/libbe.so` - --- System print_server add-ons: -`/bin/ls -lt /boot/beos/system/add-ons/Print/*` - --- Custom print_server add-ons: -`/bin/ls -lt /boot/home/config/add-ons/Print/*` - --- System libraries: -`/bin/ls -lt /boot/beos/system/lib/` - --- Custom libraries: -`/bin/ls -lt /boot/home/config/lib/` - --- PDF Encoding files: -`/bin/ls -lt /boot/home/config/settings/PDF\ Writer/` - --- Latest pdf_writer.log: -`/bin/cat /tmp/pdf_writer.log` -" - diff --git a/src/add-ons/print/drivers/pdf/doc/IF.pdf b/src/add-ons/print/drivers/pdf/doc/IF.pdf deleted file mode 100644 index cb993a518572e766fcaba2678062278429df102b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174305 zcmcF~1z1$yx2THJDGdYCpmYx{-6E)T4J8djH_}K;Hx7az-3%?=Ass`5G$`G^gTHvc zd++z||K4}s`@VB#_TIBs?6uckXRR}9(Z7_EVdZ4wL8o6^9UevJrQ)EnGqOY%7G_s6 zwSDVkPQ?d|sG+mVSXeumIquVZ%k)Ic;cIEVa*NDt@KEOk7%G++~uhs6g&23Ep_^V(Pmf1-6TKUa&)0wRL{X z4!^384ph{awpr=Ak%1SrR=)w-wM91e$z?Jyf;kt2_2htrZY7=edwxw5r2pw z!Q-lYqwZtGpy{d{$+Tg@)}GSJSBCS!E~ZYuLDhuhPHFtUi6#5i|aVCYWM*jG)k;aeOT~eRRahwAUy2`RT+9Pd-#qYpgH{oBXE~H

b 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 z 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≺C5W`g3%^)tZkuow0`Ie#{frj(CS#J-mXDeIc$JW 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�c?j_TP@ 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 diff --git a/src/add-ons/print/drivers/pdf/doc/User Guide.html b/src/add-ons/print/drivers/pdf/doc/User Guide.html deleted file mode 100644 index 8cb328ea3c..0000000000 --- a/src/add-ons/print/drivers/pdf/doc/User Guide.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -User Guide - - - -TODO! - -

Installation

-
    -
  1. Open Printers preference panel:
    - -  - -
  2. Click Add button to add a new printer spool:
    - - - -
  3. Choose Local Printer and click Ok button. The Add Local Printer window show up:
    - - - -
  4. Click Add button to validate printer spool settings. -The Printer Model Canon Bubble Jet window show up:
    - - - -
- - - - \ No newline at end of file diff --git a/src/add-ons/print/drivers/pdf/doc/credits.zip b/src/add-ons/print/drivers/pdf/doc/credits.zip deleted file mode 100644 index 150e4bd8f583ed0514cc12496b0048153592172e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1575 zcmWIWW@h1H0D-f9!8%|Dl;B{nV@xheP01`N)(;KgWMDohRAjU6c9BhJ1q)b-Q>rTC zAx0pRgJIVm!KcMVU-`Fjb@CLXe)#%@H?4u;=aHtSIcJ_6nRMol&0ns&oA!vCN5TlO${Y{Jpc#E3#pRpw8Sm^Mhy24wsqFY;wv_Chf|q1snYTEedF@Q>d1Z5Sb$( zVKLWnQ;dU5e9WYXMf2Iq4&6QdzS*g1uB7C|Qr7ga#u7`0Qk{Y%my4l1lejF){?&BM zo^7wp>?6)D@cY^Flx3;QmKhkBd|@u_YJB^+`SqDr&)v_ej_>+a)n?#i6FF^W6kpJU zu4nv*7pyP*snG4+Rh*Ed!SJkX2g8jWO=tFOsWDmX;&5aZo18{DlYvQ^1tUWMJd7W^ zMr$F5u>`|;23Q#TW+rDOrsgOFq@`x2rKJ{u!@M$jwiRlaZ(~>i3G-!j{yn7=_VOJv z;Ay$+o{*6AkX55vz3xh*;-W>d5^GHsiv0|p)OF~x@e*c*#~(k>UAx=4HgEO2TUUDK zSDgN&bFjLXNyuvVT(h{g7dnqix35oXQn|VDt={HsCt?n|1aLp|-t$0%Z9>&ujZUwV z6H=Sy=PX@k_fI$PVDG#Kha~yGdFCv5-`q3tQ^F!1{U!1}W~^TNybJz4(Vl#GS{>hR zY2k>OULH3M*?dde9{sx=eefQ>KoEx~w1AAvoXmoPR0WUx(vA9JF_S$aLUB^SPLaF!5_{5qp+*~J8(FCk&;7uJ?k zi+AfguowDm{jxXeW?h8UNlx7bFOr?l9VrevCf+M5)^^r*{(lX*W$fS0!>><2=*zcO z?j?V*?gqB=;YqfNE}`{{Ubt=k7P-pofo#d1J4#1+J{s?A3#r(j;%QNO|NZ}l%Wn;A zr(Y|Yr6Tji_~qBlQ`v6h?N_K|H|n(izwqS87ICYEZqGKyK6MWG_c!V|)9;O$%!t4| zjFxLf7|y~|RB&c)ex8DRVrdyPAlG5!;4KWZApyxNWPY)9!fviZ4g#*`@(Ic}els7l zo66r5!E)3$*)r!^NPG7|&^n2wa?1 zy1(cWdv-+VwcCdprsbS}eY)eEMOOASb`O3T!Njf1pJxT#eBf}oLXznrM^A`?OUI-O z_g}0KnhgwS|L0cOD;7Psf6QjP(2IA)vR`}t%E_52J>gvubAUl@eMiOX+(lyM8t?Y^ zpS{5z;LXS+E`Y1p5`*S20fx7ZASNt>g@&*~3bD`%1_q~8Rt5!-*OAS_%$_i_7#Nl` zrT~@0%)-p9K(j%a6=wEEkj=!KoymkS8#51}nf(*pY|KP}?Cx#M2(wX>1khYil7P8+ UJ;YpAHW1AMgfT!LZv_|j0P_hh(EtDd diff --git a/src/add-ons/print/drivers/pdf/doc/images/add_local_printer.jpeg b/src/add-ons/print/drivers/pdf/doc/images/add_local_printer.jpeg deleted file mode 100644 index 3e60dfac6cc9d7be55b55ec6fa4962d0e8842f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15031 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 I1;LK~AFWw84gdfE diff --git a/src/add-ons/print/drivers/pdf/doc/images/add_printer.jpeg b/src/add-ons/print/drivers/pdf/doc/images/add_printer.jpeg deleted file mode 100644 index 0c3052c68b26c54765393d2114381e3c767a4cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14385 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 diff --git a/src/add-ons/print/drivers/pdf/doc/images/make_default_printer.jpeg b/src/add-ons/print/drivers/pdf/doc/images/make_default_printer.jpeg deleted file mode 100644 index 393620fe7e38e5e82c5d83dd6b8c32b6baa37ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6123 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 T-XD+q65)sMD~^AzauMBtv8>Q-}k|@!D zRHmd55e*doeXa&?dcVK=KELPp{NMM{IcJ}J_Wta(*IsMwVXZ4@q^>EBlt94*N5{G! z!nPnKCE=2A{DFfo1qC<^q37<6b0oTl;GE$|@Ms7}N=k#PHryJHl$DW&OUWSNwopDe z28)rF0(Tm4X&EVLNpNQXM}dFM;21O-2|iL%g2Qm$&QQ_t|MI^eBF+T{A;g06B)|QK z#K1{+aBtX_wIrkr5;Ow(Z(W+K6!zCNDJcwULmCzvmpcj9k6-pNLOE#>|YE@O6FI57|d_-VK>qlBP+F`ZCJ^TG{8zp zZ{RB|3bmnLEJkVr{jf3{+kuspLH~+b1}VLPCuO8j8~R8FEx7@+40a>^WMohq=qHQW z!1qW=tkkc(hD0Kze#M7G%AkKO4=Do%%`fc$X&dN*l)=hu%qJuHEB&OTWsn=vK==Mi z15m?;u^@%UZ0I*Bj3nyU{*c08fzbLVKZCRl?UlkJf!z8fA66E#;aeG$%&+|c5Ca+a z&u^urr8e-Xv^40D4f$kcexczd_iK5QB#rP-8c0e>t#5}P(b3%#M+CYBhA;(M1&+i@!w@>&E_k>s zU_ZDCP#7k7ydO|AK(de?jfl7aNQHnQ0CK8ZD@Y%}p(GDTV{k4w7fB#RFi2-CQW6dL z7mLB+oTZf%K;8qW188X%CrK<8g>#XWl*BlK5@Z2tDQ6T)$rdOhn6IBB(T}82Bw>Pr z8itx{Y6<8UsOldY&@7mMgCo=&{Tw~V=dI%8=Z^OVZ38_EC9czmYiU0!HH9Oz@Md^WojRmxA@&6y zAT-_mAZ@$;JM22J2vay34dwFm!x6#N)6oy7j&s60g9hl~yj}g=0KM1hhKlg@BjOyr zU|Y0f4mdb4IXO5CbvNB^f-hzs%_Sq-;~4;d)$e|bup0lEdWw^tz_o?qNIzw)3f0^^ zcL_?$XZJhrLpw?@Cr7C~PD;Gke0DC8pthrv&c9vc((#}oegW!C%blqVRX)n^+)J6m zAKY3}8F7FOHfPd?F7WdznKw1HG&j{Io^7kOjPq#uLPa%~XgZk4!Og?!>)@c+)MW9Z ziD{$>9&q&NcJ-TNGfYP|ZQf+oDJcP&5Z{1*GbYxW1d$Ff(+?A4jb=Xxy4H(O-;uhI zi1YUQ*@q@LU%Wrj33Mw`8VDm&f2rZU{XiyPi2SHE)RXABvV<}~N{)2>Rv;uiNzdO3gp>^F`5XO^ko5s2KoXU7{Z=4kS&*K;6)63!KWgWtlE0p=&_2P~W)o&ZtL)BS)W!Cm4zA)P%v|C(%oK}q-k z&Og8hG23tPp|O(ab@&e8{rvD=KYIB)^#H)1sMqfPs*i#ECV>T@{{SpBB7O^28jX@g z{~#trJ?PIH7x=f-Lj!Y(1PB2813=Ko{4F4q6dEP{J3vxvB*YPkc%qx5w=+=T5L$wS zySJYNG!!J9@ZP?D5>7TSH%Fp`m#^#J&=ZZp0QeX<)QtZbK1t^Ne+3^6!3QE8G~*B8 zLvrx<@G-zV{z?7slE@k7iSxse$o*GD1!gb_6+rg~s358QTT~bfRz~(GDyYK&7Cf+K zT!1CF#s%LxAL@E2(c94r_g7GXjvzq=kpBQGq&R*H6-=Gh2`3V7euqj}1FET`ry=1& z_$zQo>>4-#@(;j4+U&RBFu=zD=h%X1=!NrIL*@&NVLypLqPriCK*T$(C6ZVGGA<>c z*ETRe()F*<15HRGEoj9bpoetu@6lsX=yhD+1a&pU2d+531O6^9-^GC^-rM!BF`~di z3JD{?`Ue>QRX1V5?Dse0$H^1#`}e~K1#B}26a?-MK>e#i0!v}&-+(%Rb9MJ70Bdxu zqg_1lj-dD5o&DS-*6!VK?!a9Co32Iy>yw1|n^pOrEf136_uHtyFoz@+zoMP;xkLxK#T{{iHG)j=4HEOPxg zU(@RAMmxcg2&6lhUam3jM)Wo?z{y^CXLlEO9PzK30Ol;DCV-~=K@A>flJp%B z=W7GQ5d(0}-$ueeRfwO&-}HzySTTa^G8AarAGGOTRp0+tZNg%~WL6UFQT&NQB+YVv zJGQ}&26Ej*Xb zd~g3Xi{!6>fu&gzFaYomfc>ko1Pi(tsddc%&DdN61|}6G-v29LU^#~b3;_HCVE;N( zlLd9Eua6}u}PiaQ7J8|A% zMbjM^nvlf)n>IG72pB1JD>aFxUPB^uOxC|69;t zD~&{H0R9gs{jZ7+i3Ll-zo9g+oqy2zuQ&kgM38U+e1CxJUuSP96cYWf9N_91OmO=) z4k3X?dM5F}w^>OL;9(mWG(qw7gznewzT4LR#Gt=2Dv&a3B3TNw?GM`YuS!e`2{vti zPwSs8`Ws>+v1_6j0{92O{#A*g!EWe!iT8cDeHU9mOh7|zgXH`EUc%i52IPjXCmyV) z{j|S-bjx403G6jO3CJ_dJg*Iv+@<3S(fbxMO^mX;MRSb5Sx#3J5y?w=X zz~-O36Uec4qvGxAiGz!Sj=msYARZBd zBjOQ$ZbTdoVFNQls3SBHo`?eoErb_B8{vrXMmQtP5WWa~1P&2`AmE7ZcxQwPA^_n6 z_O?I;US5s}5~UFS&R}YW^L6({I0Ih$cI%ID0-3-94#L+Hsxc7Zf*^SM`yvkbdx8Z> zgs*!LA_$>_@IiPW^bn4I2vY=@PvN{haV~zOJHWMTEjWm90}=&bw?L>O3=#Vg28ewK zUBq6527(BdJ$!+ciE~DnAgmBB?g2Q2CBhtGjPUmc+a$hDcp?trXaja80eoK%Km#xL zHBdhOcqk2`5YETn(Gx*R@C9aoCl2B2?+!3};r-S!{CEUn3qp5*2uMuANxEChbimQc zW38pQASX{pFN7z~*B9YRnr0CZj=oOr?tbo`&bYOToNZtSJQ0pR23o#`E=ji0`2QVR^D`X2m3pbhJk|(;6v~S zMmZX6*ntTi91ZqfNmsDL1a@J7)dE>AU{xG^fQA>7YKE3Ffb|9lCk+rmH9}W# zK!J1*9SMU$iR=HqLtCHrulE4Oh64UI^Dh;B&$pofG~j{nFQF?IbR~2}L45J85U5AK z-)|`3`-@+%>kC-_?vD#t|IzyU|J?$heqCQWbdLgj@oU=p=f6S#@d%`6G``JXz^Gr_ z4F~(gj=nfZ8vMKJf!?mugGiFD1OfwLhTrE6q$D`xfdn14QHZRY$Na~mA+FYT|?})lyg$!Y`ngyKbc%Zj(kJB z4kr3-bHLV}`0xi>*?Div=42SyE10 zci-$UtZd7pN;e~3KIUFHtJpf48g?j|P%rcGq~cRrlM)Zf{#fVtWzXU!nOUxVbuYfC zcBfS?i;<5$!N7gtZVq#)LixFa{xG+DtBNX>5ryuHXXf*h#nXx|JnPF3akkERC3}TF zTRdjJaku#`-Q!Eb9rdw13qtdmoI7SuWR+A{whO$wqXsG(m>8gpADSIbQoJA+q}Acy6)-qQ0bqgApaMszg40)Ua1IKbEJgr3R0|GH z9|KDaj?jf8_JT7QV93D1Sz~ZE8DRuR7{d|31O?}(%;1Q9aD+J=u^*1GfFms72rKw{ z6%ESxVFUblu|^P}AJ-Wq&>1d-Bgg{K17ZWHpp^hAD8LPlaEBuf!Vw;z8E}Lb90A%3 zC_(^)ha@q2!A*t0FDTRBLGo?;fRp6>PRLDbkqja_R}zddgHt80ahwyz&nxw z22RpQgQ`j9AQk$Pzcyvfou?xWete@&6)&;KN2AQZXQ9F2}lCp{xrnk;H2id zENcXSK?fIqnmb@N57kYwT7WhL?D)fkgyh*jOqO*s`u`|xz_CyI4jAlc-)PwDtKZ_`N(i7XDN6|zgn7i?-U1K=*;INch}?2R8{Y* zwg*>z$v>LYtQSEMAr?Uvp-g`k=0ty;vq6$5_0;pxL522D>2s%IqI4oVBvQ6NIeOBi z(KTy8xJb%$@57TtjQ3=&cwV`NywaY{EiLuLe|n~J|Lqt2*MpuV`6y>CXP!y_NHDFr z_snbNY*cQWOPtc)y`6e{&#GS1Huv10ZEmwqp;D^a#8SgzaX$EqcewIliYpdnE=W;E z`i>CE{NZ_m3^pkPL(K7Z-C}hAtj;cd-CpkpWxEE9jE&7h3>zuoZhXr4e>y1d+-i8k_y0>FL)P%Jw1ALm6eXsJquC{BmQZ;guBk zKAk9$Jagyrjv;57ELXGX`cJ`+?JlBtgv(90oJL)a^6Fl4WD^?S)YfNPxAetkoPAJ& zW_R{L2zCCf+0fB_fp=yk2yf(+Lh{w+D-*bB8Wcj42YFIupR@;Ten0%!nvCo42)T!* zn6e(;MkTJCsTFqItX4nsZ33~qu7=OS%Kj#^rp*YW_rQ|I-u>Qk#zTJB-ne)<9!%fV ztw~>Vc~NPvxl4{)jkv~P1qlsHk%1o3hOj+P=yO7-9_E_1av|fFQwQX>-xb{5zk2Dg zwOL$!#pmMFWGgQwr#`qz_Ic?pbmYxTHfwy15zc(~5FdPO^l{ded$y|MnQ zc^I^t-?BY8RWld5J^k*Sklxs%a~H|Y>9|XMOYhIa*h{%C#yxyOGokr}$h`7`lT7#e z)jqu6vr8W3`)uv|g+|iMx55B~~b~W14&?gzm@#~YVt zh7#hJZ$=KUi0s^-MhQa+4?bHS<#woJv#lRDQM-bjkAs(PHs6+Xs&8-1_^G@84lHi2 zd2Cx1;moF?+xOibjhe)oF+Q;IdrH)=EYZuD)sO3SFuaT4y4JZ<Hj`k!Zze{g7 zXTToffS%Tq1+^hxUC&4foyI_Fu?N(_+3}8Uy;U@2On#^)DG1 zEgai^xmzNtE5+*dS^J%@aLELHg|1-a>-zYBl%pN!>q)_W%B@1L0^>sDSVCTy<8@r7rU)psPdZn#@7-@GxlkJA2_ zG5=TV_VQQ73f#w&63>;eR>^DE2ph}nds*8)vZyW2IFxZymvDwx(Rwk_`>ncIJVKt?+;pjbL*BuGZ}~D&CsS7{O~hBA#=cm|wD# zWZ>CZ>^%IKdyZp3BYdi5s~Kh0<|yih=YbXshu(IoTsG!YtaCLycb89@;5Lo!a|{R= zWUTNvTpGMvphkhwUI%&-SNFjTmp9R~tK0JO5En*^^TDKoirK zanH{Q4E;mY)_h40GBm!_qI0Q1xl;@cF`6>XZ%nN#`17a6C?`&E9^`&;bvx5;725gS z=CU325}%UaeF@PT+ZBG0VS=4$jCqH;*{yw#=1*RQJr{RnDTvzRZa@DqZXx?(dD*0A z`P(wKNmL)pBZa}8Xx7tyD&+}fhd)>Dh*oJoYV5{tHKKQ(pdhDTZog^%MxgFgY2?kS zZeoDfV1}TU(jy$^sR$N#=qh6G)wYu_Y=aJTBL(YujeM3*R;FcsN-8(SO++!(i%}|*pGp7XN?0%?8s$HX zFAIHtxaz?s-$KP{#O;aC`@dkva$_0_dDv9hwzYi7vo2}%$ZPFHEpzN1w7;5?{EFLV z`HqQUM$NW~)nGwE%46q8$+8*k$fJ=k#?`D@F<9*6-4@K-n>EgMk2V07cxDFpQPWN7Yw57ig zHS3fhP;=n$<@T#zu#CkH+m>3Gs-p>GSHEmVPjX+2AzOK~!V)6$K3hIQ*l>8(k*a3s zr5NL_6-O1j?Q`Qrst}d+-RW>6qO*yU)?HcLmjYx=-qTB+wi1~&HGCaL z5H!+H%-=PzDMmoZn1kVs;N$30x?OLp+&>gOg9T?%)7*~7^!xJWf0~qvIitaQkrj`? z=D(iFxIkw#7OHUiQmyP2P4e9R4;YW5FEzg2cSpb1%IC_P!mqbvdV+7ex@}EKFHGFu z*JPfrY<{64Ied2_&FP3rmFzcHX{aj_yYA~4^{I;Wu!p7WlTf^P(n5l6G4sasYp=FK zcHIv*gX=9W3&Dr9S`OKr8bq>Eb0;0ao0_V)-^^a-je%KZRH?R%oD(-}zDZ}^GFf-! z4XrDV%%+;REMLDl-Z1r5l4lZ))3Y4M*U7b8@8A}t&CqMD!Z>ttZ~M&U07+8B6&`9kAupn|;DM&ogJz`kCTAuQ4FI z!lVZs4$pc{$?q7RUtsuOn)f=iB7Wc$X^enJT`rN(A%-<{YiBF;Yd6v;aM7uhnWAZ?vjDz->6Bo8EUD3je zs88^(mW{sQ&k_@87<_^P-f<%EjyyDEvmRxeh9ULUCTa2uZ;kGAKW0&4O{i3z`jdmB z4c~#u>g1&EP6)J>6bdL-ay|2urcK@6D!(GN?qbX7xu@@1kY{0ys=o4djx;VS{P)t> zB2HYA|AHS`sM#6FDs%c#Xj6R^*U_bChN=i=>O6bl6CYBN)r$u%-c~>Vdhx=f^r<}yZCVTM zg`tm=UQ`X=SZ28By@yRyw}AS)vRfUVrsU0)g52%%3@#9 zI<3saQ+bn%by&DLJ9oCJrSyg7b8Ec$0!6G2TVi*Fuv=8`xp_pX z#=;E_DRZiggiY_+ymEz|pEgZ$(=OVD0vXPnt>C(*YA=GZ+zvP zxqb1G)QSDF#vBJMIU=p>YW(vATi7i>TC8|c-f&^TT-dk&ZqHzVx)#2f zosEBAm9XP`_a4P#5`LM1<}TSbHdbaPW_LX;(slRP(@SRHpAC!OvVo6^#dfan>N&6~ zItUyZixhR)O2#cFvmn}!;Tan9^}$3r+QhFmkIdqSJK{p)dKS^qyWD$KJw#L@LiM+t zJ{qc#BItCkylH=Up^owMa%aokme2UB#S#-s#Z!WAeBi>-)X_G2L@@ITzw~_0Hu0&@ zeR}}oYex>7FRxk57&w+I)A@7>gf421;hh?{((EGwxtnNj^UCKxHx;Af+G-lG2h~U9 zVr*nj|0GuC-AwJ9?epNEf6)rX0z&5IY~*vxekZTg9rn>F&#$ugatro9-MqJXZ-5Td zoGsq3r7}sLIDg>rXEX&BUoaV2V&UE1xBQ(g>iWX<-utqLulZe1PV7&;ZqU-ka42xj zNA3!Zy3_MBQICms>;tTo7;(MKOu`$1Q<^JtQe{h13#nT^-y3XAsIeoP?6MASr*BqI z=4L&^yErA~raB#-C)>s_xNR6+r3+}J8CGdhC2;sr4*~~ah{8Z zTTyFLmY=}z1vYz?(Z!LqB*R5a22?FticCfGRa?Z)4afRxSsPa#e8BwL*i}Sa#$WE* zzS%RiUGu6J70()kzDk_UK9dzVM4X*nc`UJ%%dm`o0@nrSurw{B|5h%ko#e}U&L?~E$y5ywtYluCW9{J+c9^?w8$n=rcvy&NH32`9$G1`aW?jFwf>b@FZHR;^XS|z&jORF z<_XEF*ljfO;j(UCsrB`Zo4XgnD^G2ID%IW2G>Eu%tzW>;;_;ld9rLi9 z&*q*9>G6rZQ(W1XqOs!U6e8K!JBywV-&ZBZatk(;8Ej3s=$C1v0AE(}jD32BslPQ> zj%iNLGYxZt`)c>w5yRA*Ri@&Lw#0A=X??`qODkPMtGlqUH@5F8sPkWu$!K0xp*?h0 z(cYh5IFCP};3fC*>BoYSY(*wIl4O|9n5MkeK^HPhjP4D^G zY_*H2jdodG3Ch6R^hOa^*bc^&nMDNwNgl<71(~xbtY3PmKc^;_{+W1*PwloeIxLIy zC!&m1*|cKL(W=&870Xt!t~BGWD7(!?#p$(JSMj;7sAW{n|^ZlzP&xC!dC`o zT)UOed$J(iyXU(^XbT7Lx>)S95KTJ%kOTK{NtDT?*3!Qw>_J=yZgH`$X!f5 zpe*Cd!$$^6+MWltI*6-(7&Cb#8^=SLZWbr_{E0?&WV=E>4f~66mrQa(n`-uSVkBS5 zyUWcMBMSn|MH*znflk&wn&S6WGfa){-Y(A?A4!^Z+Yxl~iBYn8KzET>Y)s4I*wkX5 zl2ElIj|07%ySq(__U3s$6~tqB<8|D{xI!I12Sm=D?us2jF}4kjE}n8q*Pxi< zk9BWc$fnyJFMay373B^PF{JcH(s*EHD4S$%>cyMMIs#9H4YB1nl1ECeo4V9r**+k> zWi#$YhfgJbF7%ajv;~v>L2BWx?vYLN(XiVys#HH-b#~hh@{lK~%z3?z&W8JWsWAs*Q1a&TqRL5#3M)TkZFjKJ)zQ$sv#H z`ezPA8_|mjXjcjudu7Foc8Qy33VCi5BJ52#Crx!Yf=!^Lnr_W0}GC0RAZC9gDJePK3-{ouKk&Je=L}Lcp`?WQbY(qZd z^TJfBSel4K_vzTEyr<4}iE6gp^XihK8L@Ftd2r1xb&Mwakkc;x&)iScx7=2`$bbE_ zTrX8C&s}Yg$YM!7^$xdwCk`Pt)$%QuG@arT680LknF&7W%PQp>ubJ-~8VtDAP^Dw2 z(w_GI^80Dlo=%UOt`&CEbwX@bQB(|?QF>-Xamf#!6qsgmK zS?_zg=@v$c5kc=P$=>X$=^JSO_&h^i@l1Wx0g3t@1)lhU7he-zjo!WMQq0J5a@Y7u z&HHKlxc;}MBO{Yf+tVvKB-m?6Mjo=`ri9+_*Rprp|d9>EbIbWP2>8x7{Yi& z;*7|=OI{ksym*~(*HcwFJ<`-cmQnXzQAJ$UiLO51*F~*8GAy>ieroa@Fz=|ya6d_M zn_$9b`K9X@6Y`Xo2pN4D3l#q5^s52WKAm0 zX`geiH@fwe`m5uo%HM6?eLnz*0tW=XhqPI9692ZP_aApYpv@a-m-e4~t%p+e@sA{# zj?b>J`s$sMT8wYE*Af$9DP|M!*<)iN__&mxC64KEZsnB$6LdmZzd=s0SNn(hzJl61 zW;loIR;2J{tAp(t(exRoj`>R}aas?&d0`W_q)S*Gw5Wa}#KGudapUm4k27J2*K)6; zPn?SwWW*-6=Mp|n1O**IJXAPaG|~EqQC-4ux@1CPVx|4lz#*QK!YT|*^=)??k~sX_ zsEa$gSnH})KX72&7UGetlUTUcOQGsV=Epgn-p$L+;C?W1$Zm!$zN#R#y1==Z`r(me z|EVm=`2>@egyak5ewK{q+w%EvaWU2YsabOO8E#fPXuD+@1!?K{sJSnCg`voHN(vnv zmZXGNFY@VH9q5)EH$fO_b-IS=E_pVwM??;zC zoe#E9m9V;Z?~MD=X z?6764uIO?dyIhvMuPskEBB8j9CmIved0@vI*qOGO+;^?wt{d^LzR3mg36=@ly?zs)0QLP4BN`ki z_{lHpP7wY_egTJLzz*Gi-YIiVb2ro zU^TA3VM%$*+bETT=jbhpQ@8b=5n%DVxG-6lPqZWXdYT0#Z{3QK_Lgo(rf_WCJ}Q1c zDkHeuo@iijc4>a*#>eNOLtnr0>x)i{WELr&zP;PFKIp>G-LiOA(IRo?SI-tiJAF;7 z^f3hnPkO70Rr#>GH~oSNi|3CPk22Bu+Bn>tn#gGpWNmw}kS{pJp8ozCyZ3#GI}gMM zGBKjKPWie8dfP`XS8DgLGjVafuIL=h%*?texNC>)nL1l`cMNOU9jS>o`TCTcS^A=s z11_ezGhz=lQ)(Y9ETcp+52Z$M7Z#MvIh9y$Lnr17D3tKTh9u@2m_Cv+p)Smm5sSZD zeBVUz5#7^-5BX|u7+-TOQQsI37!P2~DC{zDQFkX1O!egO*x!hCNdcDqArwoRDq}V+%N0nH# zYxr)HxQ!r1OOPUkS}N5m`^b#MJuE#sZ=xUeO7d(*arDO@MG)$=Z5-n7xhhxFFr8v> zG4A#t}|#Qy+?rW+xNFX9-Xp632tcFCKZ$Kcwn1qKX9l(?u~$~9jf$HlFL6CN4o z^}F9K(5C!2*=k?(x#(*5iYuPkWLg@>Y-E^k(Qvhj>U4e4cK#sEYsZX(PIfr#aYYSV z@s?@qkcmhdTh-`VZTd_e*(9~OD?Q&f6{|J0J1oc2B|iT01d@#YtDpR|OCF3~Re9#a z$R`$>bMo6G$;iG?hPf2k4P_7X^gMdjQ+du3F_$9dalD?+eE=__zGuH69}lggO5scX zGn+Qw-1D$}nBg#apk@P1i{im6{tHy*Rc1rmY)9G zuPYN-eY1*QiNR+UkVRF;kNZd-KWcUL5P>Dybj+iE$$G%iFac{$PPe~9l)zWdA*%`7 z%`S7J$}`Qm@{sS@ugm54xrYvh$Jd{n?2qIfd=l5L^DyD;%>~P>4@w@gh|$|$SSgr=n;4Jvc&)FikJ1#M z=rg1sNVeuVSbu#hf!ucT*vSucy}_!XX1CJ(ojP=ULbA5JGu_*i8%{P^kmuwa_&HB< zc$w$Q#~2M~m!^?1{KHYyO3nR8adQIk=0eT%7R#c{yZrd=1gl-J9P|SNqPLG{fB0~G z36nG{eBh-FT#Kz&t&B^VYm1{#KFeOu7D>$kS^>J{)UzU0j_;C=bf!I*oISOe=WkyS ztx<~@+jIY%Ug(Nd8+_*qg>l7eB_lN{?f7RjZ&dM5_eZvi&3w3Uja!i`uf;oWwu_T> zoOV=O^5e^?SVXnMG+7%Rt*}}O)AjJy1uu=X(*n$F#M4`g#a*izyT{9t81na7xaiTn zsID!I?H`rx99g=%`KhpNa1YDS5}C~14hO?agIP%)9#Omw-E6q>-3E{IC#s?;(vaB0 z6p!2DZUkK08{M2#j@cQOS=Q!N($tY2F><(dlSu7j+psTHw;}>LC5c=;!q%K#=WnPb zJV5Lb4f#SX?Q;C|{++QqRBSZ%2L|V|%{S%Rd}W~ZFC?dGxUuQ^{QJ@mp6uh!mr6gB zMIDj9x{D@kr_%LgH;-v}$ZZ0(WeRwneWLNe<}*P zDE|6#h)873**&|m_bg`ZlsLwUAS%p+Ehl`*eJ^%0R^UdKdEl1+umXsP?N@vR>9Ob7MP~rJ1F`dnpI0J$ zt^}zQuV0H32ea!BWa!=3S$XMt_T!84<(cJ~k74_}SiVqSi}_rj#iAVV z)Vrp&GDJ^Xo-2?8kghA}O~K)4mYfbr_9gh{70nSIu0Tg_ zN-wp>a8;SDxkkMioO|f5A7|K|N;V+$jO&Z?0^{w;RRfnDqy48feWwQ-MUm=b9_588 znJiqRS*MQK$=*M&%*rfL>@jk28spU26ELMGH@N(W{qVbxxQ{QJdijT!O~q^V+a;1H zBMv_);^`BbPTkuaEHmWuz##J6;nbk7J{))ZT}L@0=&n!HmHKN*Uy3%6l}qkwR}uSa zwygA)ZGX+xpoaq|)rahpBqd@fYE>k4i3!?b$*14sZoawuRsm~#6S{`2xPZI>`4W~8 z4L_E4AurO6A(;FcWo~Vk#@=r4q{dw38LIacY|O?<$=IX3lH{W=7!}T?lrT^^%G1pc z7!u~5`q%j(yz`QE;xWp~I}B+*+{8O7IIcPeMD;xpl#>`arSzVOu`+(;Wk>v>@wmD@ z?Bp@~JDxl6da=&OD8Z>WPzJA)8rQmi^@dIfDwr z(WWyU3U+x2qi|FH&+>M4SY{CwjfE?GGU>Zn_Ay0XW;%{0bGYDET0U7%Knhl#mL}Kd zjJVFFnp)#fq?j<`!Zp$tvLPYtklb&^syFmy%9U7=p2NO z!URw$Q4DNddPp~_`$Y_=Xn85}a)pzrf))Cm9yevu?(sbRPPVE@gI;Rzntof-jias8Tu-HHv{Kz{~mpAibqp>KYhAM{g~QG@*c`qDJ@B}V5D4KTWj<3lT@XcBp0`k zVPixOndoj7x+%m%y9ekeyWr_ZnaKiuaxPAttI@ZaQ7?UYV7X)0-RMFwd%L#09SH$y zaf0`_?UiOqJj6$0gmnhX<6=$RP8=(zvzcJyvNp3ke2pPByV~j@_4OgOYO8tI%jEc; z05(-lI#b)+g0_R*G_#7?37Bjp;z$|!wK2RBmDC*8I)z`%(ULJeVsm1w+U|tK?b6R) z?6CCV(Q|GnKTKRT&sg1UASWJEa%N%^IZCfcio{kbiAbq>`tY52~m}oDtx32?6s@?gyb3tM`W+hzGS;fpsf(~&odl# zDSUo<*YglQxz{^1mRd}=RExRxqMqQr&137FSLF=#44TREr1C}#s_^q+FILEVbOg`oALTP z-*Ry@n)mv}7R6fKhj`1?BZSaCFC5HuzVq(;+Oll=f~vR%<0|?1Gni!Vm8H$ooa*-u z&Yia6TtM17GWxvig`LYW&NesX?36~Z^s6)Vt1~~$Xz{Z>eCYbzEe3mrRn=7V8Hx*( z@~S-ME=)c6HoGl5G$j-cSv&ZD8ty3*?Q&p zY30@T;i2Xwdv-m<-4;~3Ei7@{A%4esp>rm5oxQO-7cz5>96K|q9f;@Cey(@t^oX2@ z(2BbLh-YSfn51A0Ot8$!fo-zns9rQvGi0p!x`08t>8|ybJ;$FPJ*nD9p#jt9A_omg63KKarWzIff#h zt-Luy;iI|pgsV(Qtzk{Oguz~Z#d78S`Fr9LL#b!d?9B3Z8Mn-zanAD>*yckxB@nPR z*2uRB**)1Pv~2|IA#$jsf9TdH82Y1%9&UMG7ZRUXwoljZ8n4^i?imTPxKL~O~w{CJMBii&Qz&X$}q(++XYSpLbpLGha+v z>K)1SDm?1pwi?bae6}PQc2-$e;>eeyZc@7)+34OQC8sas=bwLP)mGcu;aXFG7iqnJ zr@&Y@yQVjoFEQcr_*0v<588{bPBA%sV32rzT+SxgZsF)^Y2Bo1CVhb*QTZRI?Sv*sG&|Ts(!NYj@^MilgO}Jaz;oWvUyz1 z*_Y>vN^gY>Tq=5ckheU((-$SIa79D6}X(?O!pTn zO4?1j$gs}MVN_c?!n<^$d7e_J4%#KQ_q6R1vLqYdBE~s$?ao);ZGMJj9@vg{r!=|u zoLM4ouQg9H?_G5l`839I-%DpX z?hl+YfS2BX=U4&!F-TsT-#sh-JI4yxKRheeIaUB?Bj6(dVqZcrXCeQ9|1Dn%SV+CkfcUc}e`alLYJ+FNy!wdEr-=g#S&aVkn~hno}|94)|n!_bCRhjN(vyaNuiA zaw%SmV)Rd!Vr~8JF2$;NPiJu>Pe*si8D_m#F%&r8l;l&41Tj_DITZuX#qUnVP~6vF zy^6hoFEMZ$Uh@)G0ZzuAz|9zPGG22qc0;Ur3?Bf_yH3Ct7jiS!0dC072>pUHQ!>A>#{Z|$pkni z?+3oZYd*FXz+E^9xB;)ZAs_rXUe@^`0WaY1?D~_jAa7ZppB^kE_mrQHBv;#S-o_#8 zoLYW(G_Cm?kp_hgY|WF{>KDITXc->3(XDr4Avv=D;+;iu&if0$Tga{ESHIhDK9uYI z2fyD-11DC}AMk#K0!c!?r_vxcF3ATKcnD!Y*Noha)Zh`A76rCJ|8eQ`M z2B9rL98_=*xyJ&SP}>0tGzd5h-OGSKC>?}3Cw&KlJ_Z5KNp8U)Bpk`t81euHaoWL0 zfG$vQR?vaJBKZFNR}P!sKU#nNzbgO@_5ZhSM1!vWe*eb^paOs}T<>oRsW`}K^q>Bw z|00)ubvcE8nSk{5I+s(>@f*j_pSqk%f!{><=QgNWQm1z-9JrhwYTIq$ttBACS;7n(kYu8ro9mwp7nml! zwX;W25p@qA*3n&=DWo*GH-XE(T%jj@gem^;gAtipN=)&nQtjrIR|oyhx;y&nROIf= zcJ*ki)RI;q$I+rO@%;AZ!_pMVKYAU0imRlt>@U7JXEf$ks41);2d_F$an6j^ZF1Gs zlUv@bpz*v@rIe1FqX3?KLU>e_O5#IKfnAVoY149qYy20zvixxPS%tpA_x2TT;#It? z;C*pAO+KydIFq?LR%z$Ur`uHL=JRwT#%I{v8E(J59BQIGh>v0}yi!-XtH;hMN&Y^JJwi;}VNbBE z0EPwDbBy~ybChQO1!>dZEU6>LFH0At4!_zP*Ko3Obo}dF1AHqgm|68f5!g1#)et5WxBF3 z7h3~->#1Q8NueHJ)Wfk8ZxnaM!qYg+b_*UMwtf*4ZLmj}^I+zMT#NdsBu@rO2o_J7 zru4llynAaG?;#r3SI*sC9kN0zIs0C?Ek&E2ff3I;)wn%yr}jmOZlX_oHA1FIAULP+ zW^8Ms=r=8q|9nbO?qz%W$!B`QV-m%d?6+;azmnPB{anbdS@iJCq1_Xw+BZE64=o^< zx%6at;h9*ggk7O1(VgRVTB*b9YGs36vP!>%YySvHVtxx$RPI}5}R~n zV>pYI+2}9l7^tFLCGK?`d30iNoS(U4rlyPjv)d8oYb~pE%lnUzZ92OdP5jMfH;~h7 zJPAcW|FPK(?*EKaf8&I1LUKZ{U*7ehzm&QOxig8$Bt^u8A*@6v6#F4rfYphUcxR}u zGuce>Nc-5?vyS>ziqj02c((^L-jp4s(Vy~cI@d@MVKi3je@f?aIp@Ul1 zVa-a2NJ60ytuC!Ck_ zzh0bSVoCn$Q+!eD)I+7Llc8}DeN+(vu8}51tf~ICWOB=^db=%+v9GMDo73F6*o`Ho zBiZF!U}IsoO4A88>KW3xTPvn$mGJ_XIPn4rIldnk@5Pnxt&PB(i{h%W zw7~ju5Ct@xUW8q`K8FMU??O8!y5#@jcdh7LD*-2EI z*Mo9z)b@23@|FdZ^M9(LD&!=B%wqUu*#t;2E-|m0wxc1Pf7>DAZ38mFZ__q8#MT-2`E3Q0BO*EDAuDiWN<;TNMu2H5nymZwhpPl1wh_L6@ay&et^g=p(yz5c&wq>nD&U`H4hSFfJ2OXD^&iu(A5ootwQ~TgY_xOM z4sHE&p78x(59z1Ueh#2@VLJXiTooyZ&%cDL0{r@YZVBRSAwd`!sJ;K3TmD<))=w_i zhpa+^QMPV+39SA9$J}3sRkd~R<1pPIigb$7-6^27fYL}xcbBA6qI7pRQX<`mAYIZa z-Hn7u{np-a)bkvCI6mL^dautvuD#aYEblR6j5)@<=NLcSOOUVeOVTQ^PX}@sFZ@EV z6A1GEE;CetlQR8CPzBC51*EY8JWwOR(^S0lKY>Vx8Y(Cwl|JC5Y5`8CHQ=j?0Qsq; z0XGzsy2=blXa!1VC3&@P2zEN1058%WaB0<06##GY!j}~LnQcl6$TlSlIGxV{f7KC4 zu4Q%Ue4709E9HOsj$l_3a8&=69pN&$l;BSX^gq%x0n_lG%iUj?TtGS&aAlDHr??TI z@BV8h4j_F7I2FhL7BISq7XeE0ucRCQEl>owVnEUjAg>XSbOXq_0gSwhgd5;wYv7C< zKw73NGj9AxeCW#X5YYNSnh{VE4N!@jKh2^6iVyuq|6Q5Q;y>a+;4b_(L`_y^p!&@< z#5>anXZhR1ge?Zq38S!Dk;2Wb^qurb)C#zKpwv8Y>DsF~QF+9>lvb?)W0#C&{Lfrg-#qvl# zp5{l8N&7oLe2U?& zbQ!B&j~uD+3Z*fYU{?kuL+oxQ6>+Rer;Ph;%=Bc^2zhqljpS_2Py({F`GIlyJNrz7 z5~wmdCHE7=wvx9-zKz`;-(%M3B-fWNQ^|}<2&>f&SciSwKsSd}VO*e0--^1c@rhRW zZK}+Ul4`>N^ms?v^Nq!^jq+pd*q##4e)9Ez1EqBef<UjA zXq}KbLCmyvIoBLK`BUWQyCaP{`W%$FE7)PLVQi;+;pa}RDDVcC9s1H--4U$m=aQC5=f@`;h%Q1oOkp7Rn{H|#c;kQu zTll2waF|tK9!7|@SGSWz7Cs#bBO1oZR^YyQUjw-$EWB96SBDb#fzBt>WL`^f7JRw) zBkDNpj$#wNVy5ApZ)v?R_ilOqfdAq12W-#@$=D)=WBqtaXlJ(2-zTm06ouElYR~T+=i4fsHJSS~O;dW97qxJz!@f7_KXJby=7e&OZ zG-LDWLOK1XdY>qb?=>CreO_!liUtOzVU{>)@f%A|3=bYQui0y-Or(L;Uy&r z1a|FyENQ-k(C~g4%4LUOzQza|u$`%KuKIDqNpFz074i6*rSi7HNG#^aW3{vLr={pw8)V(T1%~59?Ma zb6UXcB8#KJ*kIIHb^ZGNh$O0l7N$FQ_*~6Oj!f4Q&iu+%K6Rh?Rr(meaQhH()31H{ z{>KbI%QiR;5pL8&Sm}aOtVt`_v5ZRpS2rqs8xU>0r9@cRttq_sJ5f zVTxpF^UlknG}j%?Vn;PXeTU87^b8D96kqbf_Dj+p&|(U!SQq{z-R-nb+sVM^7bhfb zJ?_(-@%qlw09?74hsR}DwO=$P+2gx5SB?2aSM9@X(W+&ryd1VVaK)s)7cV!=gqJ$0 zSBR1nS-P1Bgmif$L8etMp^uF0ShegZVk0Y6?`!I-M|#xDu%RI`+_CkKRLhem5+nTh zb=uq(O-)uoynXb@fd60|USSfC1dVJc_Ql;SjsqN~bLp=esxOt&Dx?sQ`Wa}))pbV6 z%03tmS*Nz`zFpJ`8%-XZgS|s)by@>uW42-b9#i{ihiDgD{UEP7jbz{M#_@;8kDy>( z5qWV}M$@CV*Y@TGt?+mQ@mO_m$M%vj(orY)R9;Fs<7B?qGZJ6GXEO}5)4>@izXS7- z-u6XdwP1(m@fq9--e<+{m=(-n1+v)?epn~CI?&M6xwrDUX!UXnrm{~wz4wHkGk&zE ztJ=J2DZ*&<>}>{YDSUgA7L`xF8Ly7f;D_(?m+ zu1RMf6N?yZ-IiesC<=p{GvvqlpVQxa&x$p8 z7v+=r&?`(Vv?uy@Xd~5V=dqq#VKf*tckO3;B`xo&z6!^9U*<+fMa&^?o>8OXOA;RSBIxX?7Y!33&FAB| zSB1B%eVEr~qTiU$lOya2J+b{dK5-5ec@{7cLd1WBMtv|+`Khx?xjI@wt!s2L^!`lP|cly5$!ucu`jYjJ8I?apy{YUx3qXI-9XO>V~0}_uIw1utv z{h2Llc$%iBJEoIAq){NeyAtwHq=Z`4M*iG!vw^q%w6Ush&1;!uv^*%?|o*v)$SX6I!~3gq7o*Tn!Pb z@}-wex%JC!!!MMn#}y&163cKMhukAhN9Oj(BZd47V%YA`Bb#BUMh3#sD6s~bWDW2Y zq;qf0=0pv)B9bJfa)x%qOTIcu_fz(Z+rwMSWa~4A;eT;ehJ>P>?`VHQq$W1AP`|36 zr1_@GB+`1-v*PV!0Sa3PjmyTT_gZvQgdug2OEhXRefRzD-N}n|QlsfRI;cY>V!L&I zf@xI~{_eGPMcFvFgHdND&a+ubCzD4y#v9DaeW`SZLXf5?Egf>ttOnfWS>x0erkob! z@OO7M&)%O|t<4RO;8gnS>lCN3i*05p_;#;uzI%qfg}s!;YsAcv!6DS0*#+&Ysx<^fpERwpLfL2_8Q9VtAUw(bci8=UAnTTcU?;BeZc zi)D%$YH#zs4%`mj5swznG5H|brvhzcc5Bb$fLI|yGb7S(LFmr&m5;8-!YH@_#Ivb4 z_jAqdHJokdN^}=Vd1sZ#Ee1YR-zLio^6Z7M!Yi@ClJ$sAc)|PF7P}E6u#AsKbm((d z#fM<~r?X)%z3i!pAJ1{gzkP1-^4G1fRv2BBng^s`9%g4G;8srjc!l&IHp(%{D zR||7W`LqS;3-WW#Bvy6N2d>VqpQ__vQ}1vhO7XX4achmRMAZ1;wT=<#qhVTAyyh8O z50+&wzQK8lV;>babl*L|2W_lQ-anwV)jz~z53kLr@I;=igq&98J5}^ts*hP;iGUY?bo-M99iYMR4f&_W0JjD)KyZ3 zZp#-xR;$+XdnYqym^ao(0xu`?6aL9bgl1TjDoQg)G%o z8X`w0rNuNj6Bwtw*@^!A6_)N6Y0VDNjj8>;jMZ2u6+5M{K6$Ne1&YsYHr~bW!n+AM zLzEo`4%)pjG#=Z$l~S)-`GyUzT9jjI2~pm{fFeq9T+rmHlB0m+DPAB!^dbAnr<~LA z+E6Dv1@vTisQWmh^oj%ya}6faFR?!tsX9t2N7QSq9x~;R3LB(*`B4{oa~g}&d)FiO z)LNtxR;79kHEn;vUX)R^ODQo%J>wo|M$Fb=)IXVRjs2Q{{or(3wyliJ7WNSrlIj@+ zKDFZr18bue=8W`ry)P^ARl{+`PY&$X*(u{p-0t}%y!MB!SG++_Zv9L@o<8^c(&~=Q zf`s&&_@lV?ax>YJ_IvLFmfz*+EaUC6e@vxu&xO+<^P3+sKkB$&v%$Ke);3t|K za1NU;tSJNAUkAB{f0LbeY|{yegD6Ln>J9>fo@X#FFuHD8r5_VuBhqP!ov4kwk<>nM zFjRaDbCdxqL6grIkKS5Z@UrSfADv#e8*Gm36FK`!w$$i1s7ASfk~ zYub<~r+rc~M&$9>R6B_Fn-+89i<=RA3{5#>o$(m5U*saOFw79Jhqw495^1Q8AZfYk zVo1U^_Hq<6MvO8>1giQ`WYz2lsyZ<}LnRoN9&PldpnT$WX=-kkci_84tZ}>>CvwZH zaK)$YZ3FuUo6!J0MyHoy-a+IgeTM1O3zU#Ya-8^jA_ppQib=BNm}N$7_qV9~vod11 zM7A)-nWSlI9N+y6X_la9f}>o%Q`XZ zN|4JzP#X{9ZwU4#W+m^QA_&IKrfJMa5wUbhl=KNt?bX+^<$2toXX93Y*vO?B?XN0x zZVE|8vt`2R^Vuu_jWlBCxEBRW{eX313rem?nUzhNg*c1$VXkAVoLDQTA)ia{f#W@Y z1lWkc9Jbje<4|KB)pr$L4GmR=g&z_gXv@os*q7XXRr}OfrZPo-y+ZcOP7F+>?V7HT zm&|sl_j#kncXgOr1=}UE-uea75S{XhMZB=L(jO;B2-ZF(hta@EuqPltEgi-odq5hm z=Tc`H`WlIzPM4{JXl{0iPEHdhEuKZu(l|9`uQKQhL#%;k?d~E`E4o^P^S9WZ&o6Fs zyVQGEx(7`|_-!aoWo|joWWOxP{1!};CGRF^E{K*zW1V2K^)=}^Z9^)d=gPlM2UcJS=6S`QiD&A4cY4jusUR6~s59Z#>BPV9HozpH~t|C%7Z+V(h2F?oQ=k zn4%y!YX@!J{{BFXl3Se!nJj|2a1dKhqYi88+l#|jX47`)5v(VqC3`LoY=kdwHb3e} zdNrGdP{{2gYcsUdMN*S@MEVGt!7KwVMMcrYkz3<&a^`H9H1oC=PcsA#W2Erb_hGd zDogoxh+Z?tii(_)Vx4NO?7}O|l}?I;L72OPHE)f%zGNGJ9`+G!O(Z-zST|I8gV!4O+q`TIS`25zY!x8si^v zF)!X$5!3QXN+=BOi5CkCOQ+Q zYKhx71ym({XXuCYu;6yvS4-*dI>bZ?(YNAozAA=6g2?JHiuN9d_$-1oG6r*~d1rI!}5x1X_4=mgE!p3r=N z7@1@ny<%$-*o?W{S_DcQ{@7Xs;+X$#Ymo{3_y0NO{pC9@Ho<8e)bMULkWoFV!U}Z9 zx<8++Du)x8L~S~1IRUpk{5&#zjvc}GgWIQ;O>2Go)>-_0PxIweB3tDc0l5t+sp6xZ zbQ%n!`<)!88pF-~-$RHpSu#5C)-VXAgef-g8f~*8V?B*lvL!NSj+o)-La+_9=pJGl zusP!<-i^V1WjBo246KIjCP*GtQ^Ife9h`G_9E_#*bXzV26D z8<;v@GHbx1^vL1F8>gJ&l!H$`6e%12l=*D{v(yM*Z$|CD);$v;;Q7E2BVe@lgSTuH-0p2bG6R;+=^V3EObyIc4pz1G=TXw3}5V z5k_|$WIxbQ#;>|jo7KY}XJ?47KSYl!YSHE?qu_x%#b~*=F&5`W8)ksXYtEGLMq zY|;q#n&L)RLu$hfp1o{RN`dvX{E8VKaDJ#@IPLZ=@SXHx&Knd_14P`Cc6Ha%3F4&l z+C^&?7%HJ4%!2gVN1c3=;#3jKw*0=kczb2|FJrzh8s7*Bm1^#{6VTEBO0i-uJpMue zdAVdn`+n=V=O~-uo+|QZj$@b`WwUTWji_I`AbGi`qbIO;3~TmsPh8&2P>+en46Cb$ zjO8D1piSoXvD$UNQmpDwu{>TB-0*7{`F2*kEedS2+fcL5T{Rc}qJFT0N{;|(p+Ny{ zCLogkZ|A~A;`zT5LcHW9EYcX!>%P)(I;CnKy=oX%;COw1|AU$8o$yfB>Mp^1UB>69 zFLVSoGaf0Bt$rB!THCBlCYV5T^68c01LLUbqVNbAb_=u^-)FDYGt*_;m%7MlG8dB8 zvnoP97u}|yF3J0J#`e-lt^9PS^!{@mYJxBO@=sSj6+1Z1V{7Dz`?=V?Aa^o)p<581 zQ4T2;+cF}AZ=U+iA;nCp>s?;7Z*LQRR+g+nkHe~$!SRb#F?@ll%sP}eNDK*vKGj>d z-VpKc$%oZVw9bvnP<`Qd@~(z^#EjYP)XI^bP~ww?-O|A}Rb$sUqP-tyOBS$v9(q{x z@CZue1!wJM`SA;gnU9oPP-TY9P!mtxwoofz^mZ38JWLkSaLXb|3{39Qz(eNE_qdjI z)v=8(9mKfxJz4KBc6BQ2xpzEZI+amh#?ePs@}{5;!({sb(twCocJ>Et;Z7{P!C-P@ z`G*5Lh1oZ)MpY+9QS-vw!(_7Vne?@3AG6h`jJ!XaxP?}z)~w=p+bcWV_e`}p@ud9w z<2O-~2sk636wQ2YyoaX&b&Jyq~T=e zyNUSxso8Udtn@1?hHu@A=98U3agAR^x;OSUAfUlX0NN>$4VZL zE?n+=e0-0Q7Icx4iuk}u_h`NI;H@B|oC3zJzWxq=Ah-Vg7KzZSrp8}f6Lx@&`*Uji zLU#D?OCx}32ioHM`_u>ze_%1ri1G?Z&%y2cfbLBw?fCGWj+87S7n9c?#3qIW!}NW| zA&>W+!$ULG{qn1uWF=)>rtVIvW6|RbJ7wjqF1}(L;#Qo@p?uPj^r`fV+-R%_e;C_? z8*9j=qy>@#L0*jS%HeYY`oo;am!7-~H1T!F9<8D{;Jh#MD*5aoVe_-5Jot4_jmH*; zTQ*OO?WVHSC>t}vgDQH~Ciesah-Bn5ZuFymF5fJoeB$(oy&z{+9Fs>zPdG?_O7^h! z+t`eh$(_@|t+N76d{p>_HA7mW02Vs|ZiBJx13@cQmlfZ!64YSj2rScaThgJ-z@c1o zxsg4r(OY5%xbqdl3v^=YGRi6IT#jPuw8M>!jHnXmnza}aC?jOZ!K&8ZMV@tG8<*W3 z))j!{g?w|9!Yw;5L_Z>Xf+FmDZLE6?0mG}sXac8J$=7D};`%7qNSGNWZRap>>{-7q({*x(rDFbTaYm-1wm%Q^Z8Cr?wubRuKAcbdorxsuIzJtUYg z)8k+G9Z6EEQ;<91yFiFx8Kl9*KBv$030j&7Vlak4GB&++S4Yj{Gbx?7cU1L45f^O9 zfk%zTmk`!v2+s_Q?~`Jv?GK0B{L7c@1K)(ss^Kd$Gqt@YP4BP#@G|DLQF#~eulYOZ z#qXt#!zy)ZluUjE!%6ayjn7?g?ampwVeURxJe1K{eDJp6TRD(iL@bE;{HoFZ7YBhI z*rfeA+JD)SzGk#v#SHWUEs6wCYSw5DDp>Qn`1UKX3IInSSrr2(kgl4VpsjEcW@Gqy zg~{Nf*i>|q4Nn5=))Z#C*kMULi|nIBS99ikW3x|tu44uw*zFEl9m%$L)btcqgw5k; z*VxDPl494*l@ad7sw?JH-NJjKhNCVzoGP6$_?WdPCa~PCtF&)y+B7U6cX&Nl?QEHf zAv^-VJwP#{#xDz9M&Uv>bu2z$xcnS9UVjA<A+()P2_$IL}(PeIBlh~qDC-sNlEbAG|caaR+e-O zq+Dd#pChbaPpYk>HR7Efbx=E{;%OvSKl8#ZG)#tnL94V)=1YRA+_ZmZC^v?TnIj_B z`eCM~X`;WFH?Pe=ak`d;A%TSfE(c@tYP)=wyAd5i{FbPv9EP!g3K zIWf&j-gKJ1qrq?UfomvOf}{4e$Wi|;tzhcSr7EsZ{17Gz682N%N0tkuW@5dtOB8pB z%~ExCW`oW`OD6m_>EKB6qP~2x1`>U|eEeX;UbMlz2f?3f z=WUNdJd4u_-3N$*GM>j*&4Ry@^_n&9wr5{8K9I-+>aj6Eq8>v5*86Ttu~a~Arv)PK~+4S z=G@rbI+QI7%Ofm;tR7({3uS0)S&$2jl^pBjjx;tZ>MXWSqYH)( zx)3?4LGfuykYX_pTC*SeR7X~m9y9V7ldzF?A$zzeDsBnJ+o(i?o!#MEz$vGZjpAI4 z{2C#&w0wE4;>r;B`5ELEg(C5~aPeT_Kx$uM!CX=i%GbH=MZ0V=JGV#0U@DvSTkla> zd`#A=!+skQyEU}#cvg`;wy%A+BxxeQ_c8Yuzk!*xSNvfo{yoH_>y{fMjuxA?{}&u z%Aajfq{RJJq{A|!H9%VW#-tmb7Hwx^x70~9PQU&(&ijS?e%dnp&qr!v<#Q|(v~c9> z&f}p_rF_@|k~d!LCcdJ0X`5!)5cP3pv{>$NX7jC}QVF(K^2<)nF6QarmIvCybCl;E zf!&_+o4$b|uj+#W(JE0^pDf=VF7v~;wN?rAZpODQjBV5-K5u(%^_}_XWn>|q1L34e zC!QgOpnLiL?9+YZlg7{E!qG<9Hd;(u?#bxod(M#uBP`#)ie^IGe1~wSLxw&yRd2?l zTB7|0AxE9b1L7PUOW&^^#p=i+h*dhpTP=P1l!V$VKDrN|OFYmQh#ARWsYkh~*Up#f zBJSvP_eDG#(WD_{%*kD$dKesto|U^0SB&wWWAU%CEUje#8oSbO0KWlL*o*`4t3kxF2j=D$z;A(S zap0BEMP<5+w}VzuvLqKaYcQ zCg>|!3vg*mfUgLe{g<8?=>Ph0fC!)i0<|Bdm>B7~=(&JXU7SD4mi{Qz3={>m1?p>B zTG(9F1-+=U`d778$A4Y(6A%YfKMyD(51iZi7ZrFxZE+<|7A7vvpH)nM;xx2){*TI~ zAmo395Okgggb+XqYQcvV)z*mzD%|)0GI>*%`Th7J&U5LI=kyF<#cL z{n4swsDFeSbm$6%8bE(7YS5^<5;Z_CW@Gzj{{w|yZH>(BfC}sm|E!7q$L$Lu5rdEd zh_6Ko8u(WtW#(Yz_}RXCKN?uy2s~6xff}V(w=$^owW*#ty}lYMxK{9w_NM=(oUMiB zAGJL&dBG9^l3gniXbxW~5gQjXJLAu`zpO5A0}N?x3kN;jtEIWDcMMd{0*22;8DyZQ z`sGl14l1j8`PmS}6ulsSg7qgbuz%$2lQc3n0jUZ-9Z)@85c8HDP<3p8o@56kyH+BQ zI{Lpa5isJweFR8$tweuYnEk3Bnc28lf0nAgY+9gafckkrtyge+U)@hX3a+c6UUb#RtC*uZmqz{A=bS~n0 zlpxD@B}z^%pu*dasqk}hU&6H10_M22`9E6P!qV0hDB$}?fI($kL4YsMBK}up4_+}` z378$wMn6ld|4>E%UVT%oOO<)ite|^ypqB3+fdm-uV2}XV>s$4|7)=fi_8+bKD@c&G zG`29hY*Da=ynON}Fj;|R2N)&*_j;JWwVYgxEdK?jj+W&`zyF02c<@Ic0YW$kBna&F zAb)EpxfmH)uWm~-BVcTr8UdGIXA}78AK?T}5rJ_6c(2F#TQkYQ$pI|vfMV&k7PgL- z|JmoiD6EUo34ZWLFoDA;V3+{h>tX)Z_Hh8GMt&BS^ra9}EeAc0HuunjsD@E|x2nzd+S=pa%W_ zfC_MPz^DLp*P;S@KUXS2W)9}78p_rhs8J7Sz0393#Xz(DYuRP{N8SS~=)fANO98~! zBmJ#?VdrALQpM&0i>O{s<)tsQfnwC4lyNl)rVxm{=IEbaG7eE}fiu#uJu50>7ZVL-2fe2_g16Z%e_*-iPc&4mB$H5PyX=Y)sXKV5682C#) z{F!zD0#0C%0NCq6{?;r3=aCtIn#>;{K})&+Uw{OT6@x(nV6O-HTSLXf!o+d~NF6)t ze>5f2<*af1>w^O`=m~g6If6d|Q_F$nuV1nJ$=GEElE;9h0i?QC8gN|hN&^R+a%R86 z?CKa<>-^nr{1_LPXs!PUEU-ra0t*6tJ=ovdI2NFW^*?p8mbK26Bls_*msdbX04HKW zK?Mt-*#WKbM-l*}C$I#7B-cyuTl>es$;fiW8XJ({(owkp_m9T@DS{fR_5UgYusIJF z0TAVS5q@hJxmbbI|Nra+Yar6{-+JMfzztv+4Z*pq{-^^$0Rzww0;ISe{cr6d3kwVT z6&;{sYGI=X_}~}ef-WZum5uExr^eRW!sO2l8#B;QU{Cp}h2 zu(7kUvR~2FKN<@N5&bXdm@eZ!Ae7gm`@Km6;`&#h(>F3T{o|DY6X%5i13|kU(r*nI z3kMhD6;>7m>3?l2P-ZTmoj?Gu2lii#7Axb=CCU%W`lBcRUl0PRAHWC!q}L(@Z;$;j zM1T*kBc}%n&@uo$M#3Nu#Nxs40OeUA0a83Lh_I3{U2dr{hyaNgzj9xnL0fvBwPhD^WQn5+=ZV|Lf~tH#dGUE)0@-<_5NgK$;MMfOI8i1N4VL$LVRA zp(2U-)F_QxkGI}*9afsQn!fcun#OIO%4aseU4q@`%WSxBCP_#&a~tU$iLrN2k~VQ6 zYCdGf=Y+SDyTxp-bgXQ$=qdJ1ZSJgQC7ov!x12^C3L6zoccd~aD;tJ&wSUyFK3Ih` z8Ovas^Ruja>L@4AhIP6U`xc3%RB=_jQu>v6rNFZQuKL9|ay%#feCvMeg2YIcvfi1K zSd$!5$$SNUmF`zYTxk>wrh-(_Pje{kFeJLA9@0~dAYZTr zer3BY%;FBe(f&~?KSV7-ZRxy+8g*Z+h#uJ@^j=-Jt|*Wf2RD$n;C0`<(%N(`PPuAv z(bYwN;+J)`-&gLo>6PD5!d%PXf8mzHtc%(!JGOq%p`aX|k(uC^%UtbRDVs_Ab^O`8 zGbafeK8f?}-O@oySnghL$;M?F%jKptPg*Wp%g3uEoQ0;A)3o>N)J|1T^|+?&H|UT1 ziHp{w;)0H7Z!6wkNXZ^twK)h{8k{X(PudWyHW~I~KkwO?Y87Unm;LH){@p!5K@l>^ zZY$9|XNL7|*5so6NQAMC*~(IB$JyD0SyJ`7&f{8v`%7;!R2X(+ngz?p@(x|}W4c)H zuvORI>?#{J%`-f6jFR)ukF|)({ls_tji6LM$8+e>eidhvl+OXz2{E+P<8V~!u_5me z5&KB}@JUPd>Y?|#$^(m(tEOoMTs=F8L!pjuY%?^|0}I-tOsmIj<6IU$*{b5~mqoP7 znQZfM_R(5VcHBWDYjICs3ZioxfVPTE*RMi|RP!rxYDFW`8XTSo9yZ2+w!a}Tu>iwf zYEeCL^WNqzF54qAhH&9_L_L|vvXWw%xKj#Y?a|j}=BppyuC31)v53|stQHM>Dn)ke z;_mD1M=GVS$vuXLS)eD+^RdS4W6}u2n?m zv-wzZLPWSCm)fnOPuAT#BX_h*HX5}$tF5 zEV2l<+{Za&NNM}oTLJ2{G+Sh8C~J$M{@;BKG}^PNVz)Q^Z_#CUut+_rTBp5Fo_rT2 zyCz(Bb-y(=Y*|~c3sK~Yze;|R>S!aIQHYq=JR3*&;AYrt>9eMK{O$shjMRm-b+Px; zIuxIYavv1F$%614V{=_gYnZovR`FuHB?xI4(KPO+X};4_yWL)htZqYL}@y~@XSQ@w^is{aWlIEb)<%hW3$a@Om4^Db5rAl z`bPX!dBd33h=h;wnFiFe+!h_LzW#wJZw9lNXrjy{A}im5A$1YyTtq`#qzJx-#~YtK zGi;Ypzj!!3koK5GO|p?lV*B9DCnRRKnpk(!-r!~p}kV9Z3Qkmo-C;5^bK!hBMS9v+;lQe?kZC15k3FhDk^X)`&$l72k?`gVDgjZ`FoP3*jO2uFq#KiDZG~Iu-e2NVy!k&y zw;9xl(v{zzSx^=n&fjMe-#ofYqvEHjjfkHz#2f#x2P5yD2{)y%JLlZ^oRav%9xEoq*XAK%|qLzc6MKTyNdgox5hbD_w$={kSB)_RyVSaoVwtU{4$ z-&kg>Mt&-dJci1xo>zo}qg^$i6-*|HFVk{j@aidk>1HJ_VL`3IX|clxCQs+`6~Chc z=i4@zE5?xrHXe_Vo5-B&67ZGQR?6(yIR|$92r=VYb>FhP<(LxE8Zk^)2~(OLCZ^;yD(#xgYQz$olzE4meW>Dd zL$j|bYSerL{j;rAx9(T{XgIa~vkAC0ce$%piF|IeMHd+=Jf>6fyU%<3+~XSuBc_E1 zVFo+1n$I0x6YuG)$rfnCYd z734Ouo>k*N=%{*LEZOww9tSj6rO9EZHo{Au%5nFPgq%1v{b4BYS8+-02}|=J*PsXJ z`ZX-?J`GVdmteUK(crN(fJVh6?~b#-MzB1plgv3oHjQkCcFTtcp#WbTxfNTC^!uiw z?<%*2*WqxUjIHh@4aSRbzI#d5izKHvA*nXMq+3%~XA|6F^sT8S3CeJNCRh@{Glky4 z_<_xTdKI={A3{mjx;~me0|l;5+)PG&fY4z!x$BPM6RxLa()Vc8J$7s1`2_rStdf<| zP;H}9N!n_R@o=XL?=+|LzAe?Fjx^WhoiggwbVBWanf4e3>hxncG5lmYRfg!IVYFa^ z^I3^{_q)+#Pl>U@Ih&4pTU2yDbB`TVRf6z$46Uj8IfteE_^Un#Ss9ga0}~6Yhdbtw zf$~`y`%q|wM|)Uvy@%h7-$2p3uYYyf6Hga-g@3CG>k$dnjd<%cwCD8A-#1$rHom=L z?JaFe=aF*bCWMZzm=k(zBoHK5q*|NFu97QbeWRFCC*Do;wZA!j*6_GgRp-My>bu`H zw?$!~ZVdO)qeWuD^Q3({ErrRQ)m*{Y-{86fL-Af^1F!0pRug+vvfq4j?b-3NHC*i% z^}f5&{dXKu?g$2aM)+cHM!kBlX*IQv8Avq3EN8naO`h4-uHKlz^*H=RQUPuycAwWy z^K&MGK5Amf#DaDI9W!EQ*@^U=FAk2k0w&T4#Hy{*EV^Q>6g5Z`JFvG-G?`El$9!bMXFhiQi zJ;+5H84>DvGFD4u$vGb;QW#~TcYn6@vHO619A_?XPYyxkPC^?J*&%Ok4rlI%!nUEA zSR?0SJQE*Rc-IFal7hE8YCN@NcAvym-HzL!iX)y6Kz3Dg^C4qf z$Ic!R*as1Thw zH_LBV5^Y&Z(NP~i&(|$hz=1SmNA_M~?Ry>-m-cNa*`0^cMoZh=JQD9*w4yk32S?GZ zYvJHCKdBwnh6Gb>?)k?>I_6 zurkaIdqx%2w=F{>Oyi}xhKb+;^Vr}~doG~}X?}I_eGv`&{lw$mnZebEGf^)%-{>KR z!U+W5+wh9y_H^~y;xlJqTI=JF8yUITFxr#gH9bs_w_EV`i!RJPN^_A_Qb%kVK1%{G zJ+18F6F%44J!Fdkc-QCO>8;YDP||PU46n1q#D`eJ9-MddS~>7NXRx!~jB3E0l3>_b zCTgyjg`cJlm+9Y@C92jAU63kxBVn#)m7AWxkYm(yl3@jn626u59V6pR9=>dv`aSat zJ|?1((xewIBT~5qU&V2|02=E(C5|i%V|^D$0`F(K=5>De6jx$36cZTe#2YEca>l2r zQsW!3*z>dj1BpWs_)^$BHfc|TQ08rH}@%!Jr#r#NmHY2<3RJmA8E>Iuh;{s~%< z*C%w#67pEBA|&^Tzv$Rv=->cl69+gzy2N3oB^C%yHiXF&P3PuH>yB-y&{jY2&c21UG0@y#duz=k-P^x_Eiva2` zq&-@F3pufksXL>|3c=t>;Y{(10(ZGR@ud-!Y>i{%lP}{2y##Zf?RrkF)STHpZ`P*HclW> zE=UYOoa@B^>7Og-1~U^-8{y|bvbQkO1&ySO8T*49_ea2hVg(>zAb{5b1MBB2fpM}k zvi%(4KZcBrAuwdj4gN;l1GW9-^Ir!BFlqmg#s>^|HbA+9(F0OkkN%giCMv_Px|x;b z*ZKL2$}#*ACm_2q^gWk01ieJ1|55>h%zRYg1V`m{@+Ur+&^^;2^+15dNjZ zFRzXldI#8I)d98p|DbnRSuWH$C>Q+oGW^!ivN3UT{<2s9t5pJOEm{62dG4Ra>5tkS zIGY4+cL4kKn163cfinU>+x^GT08G%|Apa3EfM5+qc9}8#ztXtCYy2y15HpbH{ugAI zt!ZJYXKtx$^p8pSW48Tbgn$uo!RWWtveq&Kt9;-s;F~{@hXt^cAT7xPxE$BE^pEs0 z;B4)G)A|2rUzy1e#U47J%OTBaR-hRAT{1v0#w@hQbSW(ys)`1UM(ZtbqSM$t{0a z+rPmCPh`+{=5}VEG~u!2yRWMPlb-Xa7ZS z{k5pS;2r21T_+UK6>6w|LYM?P17L-Kk%J_-en$V+26M49v;Dd%{R=u^gMk6_ci^DA zf7)SS)o*TN`#;-ZP{|a~paRKry&S)_!~drS6%h6Ui}Y`Zz~F$@m4gc4Yy3hY|EuKz zD+sJSfxfZVGPV2X!qi015j>hQU0P zE9GEjXZeM|^tU(<$n(9B25g~$Q>xaWNA#9p89-+}!O@AomU({@?uTf9B+{k7!2EA$ z#=mB101m_d|DVMJj@4ea=?@kU6QHX81&e20Ny-Ah?Pl$oQs;YB^p^f9Anh{&YK$nFxzO-&R#pH zYQYNQf8W1^!ILkjPmbjpF!F?++*vy-h{9flrM7=itaU);A$8VJP0|;G)i&2Md%bNr zKc=X``P6a>`&e6DgICWc&$A(j&0<_{s>kSPwfkBv7rTtpFUFp=ljaR>7(WxBT zcf`eToNG#5V##{GNS}9dSTPyh;!K!~S6#d3M4q(gEECuG{#|=dbGLQGG6CJN-zEf``g<|Ecz&r;?tWRtKy$W%*+9Q` zy&C^Uv`vn-zFQiBZ|xR(-81L86f_9^-Z`aPK zn|*N6wRUE#ioa-^PzH>d(Bdno=`1vsHbdGe_e1VQ-bj8uwyBkx)0Csz#E*#m-R&Hh@o5$2y_i3*<-Wv_ zQPNYt`QXM&$Q5=vp>()UaSct0bE>0!aiSK)Ce$(5X8NhMAMSb{hl=X0x)>*#bJ&=f zu22=AA>Y`3++#_+ufZd1es<%&zdO}l#p^BlIUgb68-0bMY8#f;M<+suWsgXLaiMlI zM@-$dz9B3@r#$Jgge?8?GHpu441rgiZ8l4kqj;9Q#bSN|?hQGIvt-xUyPN&X)5_Hb z@-llP-bpiFNE;sYCT=7!FH%tN7}ct*c@5G{c9&9OuvrGe`kAQYWca0ylME%=I}^e! z6bdxp?kB(PTpXW0dF+W7KekbCX4@oaQ$Z|Tsk3&hy~8-=oAGt#(XKvxc<;FD%n~EgC9XngR@OMivp~9h)lN75Za50XLXW=#O6AU=A8 z2915O-iG&=7B9n90mje&_yiG`GAUQ_atMxk=Z$MzBC0Azj#>`VM z<2Q9{+xQby=h|4&q6L0xV0wHiN`+#b?`=ZE&6|6)(RHg5+4y}jk}+b4@tS$1ae-)H z1zLnin_>YkqUbHd20z-7ZU~%F!L*iPTR~p9AVZtauCmW>8FJ&(Wrv_UAX>?)lgvIK z;e{oY!JKMWn9pHrh=U%5vzICfpvjNia7I!kPl*uF-jUMGrT(4;A4j+5fM*J+ow3CX zuURbk*fc3j{=m{NKFlrN#e9>B1fnfK+CKl_SpS$c9g^Ze_*2KH;e~u@6su~58?SS3 zJaicH_vi^{W7Tq+mzZ4pkSB|AW;<_FQ5*)4&`w{iNcRGl)75yS9 zB6u9}p0vrG4Ty2804F;MJ-G9v&1X`#C4JQQek%OA2|;51e{ErHFWYT%GdcpQz^nB?d@} zG39Ism{gV>GdJUX=Wh{ic2BRnq-{cvMa)(?r}b`1PHpIMi~b|BI?L>H3c&28h&O%jRkO}v2L9zlnL+l{|#S`jJ1o)u}BZk!_A(*T9({-iw(6_1lz*d&aGmbS@Y7i&lACIXC!aKv9^bAeC*ijz*EJ9A zsWU=CdGr872E{us81K1)ykFN&#yR|kxBSh00dq>}Rf!?))V)5jNt_TzZ#|-^aUboH zyPqn)1ZUoK+Kawd%-mLkDEawRvwWxFNsl(+Qq|3+u|R+~s-8E*qaVGff7BX_hLL$pb%2xEZ%L$lXsHkT~KagzzULk_i6?Wa3md!h2;rI-`C z_35?l^I#(?pY#<48650<ad`Vy1i}=16jP>u z)WCY^BTd=hVb!A5z8jB)5;Hq=q*_pQm)EnAj7-xWODW)}1hm&eJS^2usfwBkio>jr z?#M3AlBN(te7JL5KpK;Ggo)TRg49&SGnYG3Gs&-JNd4?FoPyIK?tGq$HN*D>EnC56 ze=AId;2FM1G?BY;aEapgHM4^Xl*7?AEZJgDTcr#iM&}O(xW(4!60@*x+tqv%t1CZ7 zi_o^D55jw(2WQM$fg8QUGipag!0P6?o@fq1-#m<}$u7UORfb(--li6>T$&J#o7m@R ztZm+q+;pS717C_XY?I|#KHt}lquCAzH?lpeb|bfpRl)WiRl%=GN%(NzUXf2eU5`8` z8)mZK9*=W{T-1+EMpUSMTIXSMq12}&qTj5jaNF+{yGMF;?i*)+XEuJmD$J z!_?LYav9HkP0j_5EP||)x`-+HJ$8q=+fhCn; zs9a|D;rfbDrDGG;%TaT&e)CkKb;V@FrBteFDA6g3BZ~@*!v-8}{=3YTOR(4s_r#*q zAm5~O@<<@C;}WVWq}>jx%E8UNH767aE8B{5bS8Y3#lhKY_Gt)CP2r$K$qi=^*R) zYVikfLb9SZSc!+cq_Ol#&uI>@OL-{;>LdsXFc(xzx+!wSMbqGtTvD`rg^KQmOgz%1 z_$s2m+RfXfO{C`)@&wwHxuMz8sfnA@J*3<#-`v{vwkau`=$!Yw!I1hlGX9fu?9Rhv z+}@pa2&ui2Z-j}N6ST+?zkrqyil^pDV6khuySZtx8CQsjK1L4fA= zbTY3f7SyHRcXs7zq`KqWx2tKjPapD#+T3)7uU#WXA{X|2IXyI``m24=SnTp$Bj@-h zV?=n^qM_9v@b-v&)9Lm3Tl1(boC};D@glC*&C+yqaHN!W5sxsKsXbI%YTp;iL(7b0 zS=jbTn3YuWgr1Q!c^gZi?zSvQDJY;2DTfhk{tUt5`)izTeFtIhySB~jQ1EN(RH6m9 z4R6BXOLG~Srw#hLEK;|=OpD{IHC%ajYBF_yW#jxqy><(S5!bh)e`a_GayX<8}MhN-kr)YPx{dLB#Xoagl7^Zqffk3T$@>%O1+y4UBvmhXi= zX@d3uqjpyV2~n}9?rI%4qhF|7Wd3L zWwQ#DFM#3KwheS~pzZHh@rZ3hO1qswWhxDIl}OlJ)c2rAMb~Y|4+!WDc?}4N>`|pc zyT!fKFtMCeXz@V}1sX*M*k7n<{fqQX7nT24B7t!Y8>NAS-C@Ur(ov!y2t$d29##hc zQuaSYFhITNUob?28WJ=&H##IBN54Y?DY(C}I{v-(19BzS{{w*q!w%$c^goL(E2<`k!~-Jlk0`@O{IZrQvMnUjtwxXyBlSwSORP zhuFnN=>nlM0Tbtc>3c=+NM5g7A&)Ys)`9~b*4lx%6=L@<<*lW$ShC;cz1@u-)bP2@ z;{i@u_w7k$qV#=;qu$Ce_m%i74-#9F29VI0Gy`!f#IBJ_rC}g6nv!`B!bnzvA43pZ z*bU);-696(g@-OqzzW40361S{abj2XzDE8FwoFVj(9?ikTPB4LO&@?Qv&Q?1`2J<> z#&**ala8n@tBE!&ZD6|0Fg3c~_8@ihC?}3u{LIlOkDZ@qSL}=a z81hjP?sxO`tF9AWPl;brD=!M!FHd@HD0+7zKX;kSBF}dox|jSzQUo`iQ2FU?pZA|x z)jD*_y-vYp;-3wR%>+-g!i&TsvuA{TsHw^raZdECwk+%WcCicbP-%>R?(&k~sK=i@ zP0mbTDE4x9bSkgeo_Mo%(s-(=!Q-sd%~8VIn%zHKiE67k63J>6JmsYpiErHHXO$<= z-rcC#8}D2FYyHD5E`AwK8>57a(kk-CoZoJ+->b^>;VrvkC-2#M>}@ouEzs9n_WJSd z`;|ln!MouB(Xw?zT!(|pS#urj>mJV^y^mZ#e7;1Qnd#uy5bLMDDF5yIhg)nON;jFk zjXM%^)F4gO_lTd~^%iGQQx!v3C~A3;T|;r4xwZOrq+USjbe6jP?e_W)59c|}!7JNqT@#0Ns!mE9H-eUuqm%gf_lN1bDw(Ofh8@3Pdvek^ zX*72h)$zc_8Iwg4A1j*r!68YDV$bbx%`4BFUeT2Q)|)1{y=%&GQ|tC~IWFgDkDj%~ z-YyO|&>8xjm$dmztltt<4dWB4J3f{=wQSEltJ-B8Vm!vMeS$<=O(c?F2BBAaMo_quvbab z8ns%6)s3nezny5Cxb|b^nUj+&4#OIDVSb@;w1lvDSpsgh^dz^&A-PY8N7 zs-v{|;meT+cQN0cPgfEAa`L2F$r#%>m9^$;w~~fla6KDZM@fiG`028+dOVW4z=o%j za4LG(g%y;&D?=x2F|GDf(KVj1BPO?ub@_hA=?w1Wzn*-mX0)X0w^rL*tkojk$`HAp z`PsC_rzyEraxB5MykxZAyR~|!*S&IZd_STrYgkNkl5}kStRt)rvl!Ja+J{7A3qp^~ zNz2Gd-8f_7r()}dmBkbP)+dyTXk#3x?zzGWcJ%qG)eD{Lipcw-)Q!hTH^;xp9Otdc&Pb)C?|VuDV{lmdB5?#}Q4Z z??q{Zv*Y&0=D zsw&N=X;0v69PL<}rjvL0{Qa=b zL(-Akt{Pb~0|`Ypzo=cmxFgzZ^03zh%`=}K%wJR9Jm3GNYXW;+;k;ENMxWZS&2ew& zv^_Nzk;xyWW85w`Hf_<1O`CCsK&boknfBeI<4cOlPhCuMY8)R$9UB#LZOz0y>-l>Y z=>-1svgB-V-lz*!j-He?pTz4sGyeI@!|3z+e_mz`zfxRu(6B9v^?TZbb>r9n{K&{Z zkGbijU^L|FI;)z>Q{hy^>pnVw2{OoknRZ?hJ?=i~`-=5G{)}tu|peAtO4xRc+hV+4j$ms<$NVdb?)*s`TZL1QW9acalT=^?0tc z={e!E3MnS5nchrw_UsRpKkm4*&%)%`?iGg(1FFAV8r>RSYM%VUIFjG3jT|0u|D#vvt|3FGSpnyWqF5Dt779 zbi=?j^GV0E>mr{-*RH=hRJ#6sO6kzJ2m18fmBNBc!n&lbf+B*oo#{p^qfsmMi-Z%d zZyVxjSiPXKV_fSGs%y+Q#ALLRRvj`LnQ}n1*O6_Xcfc^^Q+Za)wzT7sxsTmB882$r zH*dTBQ<^G8Z8AA|eYb6@)4TuH)mz?gbN|Gjo4?EB zyqhV{lRf9l4?Abo_z$nxGS?%sGxRTJ;-Y%nWKwRV<9O{{b-kqapT^~R`;LD3>lM=i zgS0%ad8P#i#@y1n&g_qMgVc~;M+JbPz!x8rcrKJv)FI(CXm%7n>7PMhr0RxOEYrKgy^EA#sg<)^!A zYYuwWXdzSL7q5zXzeo4-y$`QOjXB`8>xa7LVNGi38M=bd#P*vd0;3dPHglpwc|tX{ zHo#o%3CFo%yR>UfYGzYhzzM{$s5`&iidKK~Cg`I6&EFgA=}(PH({pBdY|reNJ>-X(@1+~{ zPg_MFifCF)I$tljUDjm0M3fbgA5fbTId$ih_v9`ESJv#8?^hL^t$kGXp2zE$Fu{vV zq}a`*RMfF9^QI@U8;|Xrwa&+$Tb?V~bE;s+3w@o{m9#x)h701447a8QC0WKgloDb{ zE>RZliwty&+}iwXNTIjnZUq-uF0HI_=6> z)fNAxsszq^dmnG=!qVCFeF}dyb%lZ*$W_Qg)6SN(OQZP|0PkkZ!>|d%$WX7~5M=NF*u=@J#{9i-nL)Nn|4u$q4RNb^y2~5e5e- z*;y|s8j0i%Wm612% zMsgF`@mC6+qQv}#QSP4HsMTB+&xpW@l<-5XjG!JP8*2>>OEJ&i!UHhbA_4<~LM`CQ z%4nrTBC;S7!^6YP!>Q)MVgV7NWmrTKg-D^80f$*=WRQd%VHOmsZ=}&vQ0UWFE-2KT z4LMU$16LqX=tCr%lZZy}DgyQ{ut9OfLJ>Ob1U4r)Oae{TAavKFyb92dLLF3MADabG z`eC((DlLJ{qGuLbqf^ifekpWMGGc+SEUh8YY91DFg5XeRtMH82ujl!Gc1`;!pV zOJh<{m|pZphDJr(r$9qZCWtiNE)F) zqmf9cF;lKS8i|6d50KJ}i+2Lp$DFC;3!y@N)@%?%ojhMMgZ>Z2>+W8m9NW1-pRNH}?+I^39pGFFifA{udHj*uY#l|ow(5)HQo z5fYuE_zr}`#Pt;dF%F9Tf{-bYoJL+=1VB?2`voBb1U!xpOxidai>5ff2!)J7)X4QI zLcy;igo5DvfWm;CPqD0$cL1)s;=D%y+5%4lYn@_!V7|lCU=vg10~A~w9|N?lihK+N zx0fIcNHv7xW8u~>!h}SAihN8eYKV~UKPG}YODWJ8_%UL#&@X6tJ{B4OUKXGa#;6%F+WUPYv6xao}|HGl??qJV;ua)D?_LUO5=wJTV5(Y2tUsEc9& zT`Q~DQ4kcCMG*m&Rj{zA*s$Z9Nk|BwyYK(^d&!sFnRCyaIdkgF8Ov$zTq4+?U72;$}gpfhk4?nAkjZd_3`nbb z(-c@d&?lV@-gvvuav-yX6e?Xv7m-LTmQcW_N75J!5tRjIiKKz2lLLcEW3gx=N+gBK zr_)%>NIIWPp$W(|Dw|26h?q{{z%mF*oUg!DdLklpl*De zFOfw77N+r|FeL)ysAA3s!}%ic4gmsFa|>Sc_ySC#M1cHNAg;F?kK+LrD2!7gKsXSn zW0@34t9?2&5TP; zQUnnZ^}>jVM-e@GrI{O5_vrWY@E(HE){zlUMD>w^h^=+WAGX(|q%?)aIjxP*GcsCh zWb~llV%oIL7keWYdg#;pbD+1h(`)w|)kKgx=uho1;EP(038-2?P%J9xC@?9m6;A-B zl*K88KwxBzG~8rT9H0P*Mr1yiNX&PYB?9M$I;XSg2sB>k;BE?;{M&B=WH^utK-U$e zY7(vHrYU5?Knw?DQ4nenGzd$?RaCiv1q6f{luJg)YE7bC3WzFzTmXPl5i(2FgyKa# z5^>K!)nsspXCN7&!1V(}&p--7QLhVP>gZHORm+H4LaJGT$;SzBl}SM;3~F4lLW#RY z^A!k{0=hhYdk;Dn0Sy+5@MtAi0|mr9D4ySDk)g8^j&@c@bMf7Qg{KO_U6kS{PC^wj)A7y&j}EVc>^U#aJ$0tl&n z07PQ~Eck?W;2{OpFP26jKps*TsZy*35KvdX5>v?*^};0a7%mp_iLNq<$WI^<$HqaU zgm2w3rBET3<1z(8ZjUp%`huWu=u2l50d-Ldp=~pPaRAHY%e^phRJ5iKG2vSx1;lnR zrGy^^A^?Lzp+PM|4qVlSOe8aD0E@x`DGhMKW~eP4V)*i7fQNr?72Y5MiG?oGC<%rT zfu#de!m*ecU^#Gxkalk9DkFk#ywq=WR|!3?eU+L(LT8e`9ckdWj?hvU=db8=>-DIOetm>%vL@b*H_Sm%Sh@h@J_KUwst zY$W|0f<$jlr8RiAWxR`CNE)>8!cgAw$UVoGJMZyU{8T?!F_N0k%H z61Ka%$v+T(=K7&Cr}kwHTsML{{)X}KEQ!eIs%yjQdwr^{OP6mB88`fzN618zJ=cHl zJuf|L*N~T{_@uP@jqa1?@pv1q6jwA98$LQQ^PJgDIwdTnE&Jw6ON6SfPZ^^g3 zC~UC*uw_%+;pUa=dZrg-jr!Q&abN$Qr9~aLsrVx!1g~^R=NP2-4tA3ZEybLi4|VsTX=a%=OF@%Nbzu=}ip@}8LkR_xs}*~ccK4#yIs(TyJm{=Q__Vlq20AlEnVT~5U70m-u0 z;*tP^+9}h6KLoDa{^D+>pfdB~zGtJ3rHhpHL8DfLH4&{o4dzuHd$zmurd-%AzOq_u!M0}|_P^cXXkm>AUa9^qRuulF(gYFH(HB2qm=u}jJ z^3g<8j4I`PA%+H`NvIOVQ4Ebig|e6!KI)B1Q6VbF6k?eOorcO$iH(|Lkl!&7wP85z zydzL0qHjba$k2bEJz#FpW)CXd4Sw@WWx#Bv{{J?H8v32UPp3hJGMSKw`pZ;>d;nAJ zqcl(;!;U6wF~Eibq$99vhiw>t;a9^ae3D6Ypg~nmXRu*zAkf%Musxt6G>{h5_zVU} zBXsirAxZq50dz4$m92JB4P^IUs|K2oRyBX0*h$*N4|Ab<(ePilrz2T)qV7P`4A+Hs zBy$Z^hk))-^&E7PdN$b8@JealF~BDa=$imvYJTb@4u`epe9!_UAQ@FlGX)i#TK+%D z{ria>8c7#@bvjjcY{dR$V(%7p$RLe^q)vxPoq@2aYK#0gqx##jY%g|uF=BQv+YG!Gk za+24XtiL!BPmVTvG9&I*@%yKq`08Z4bKSZUPK4=IlQ9=w%-?BJetFA+F;z%hIj|Xe zL(1iTKi)e3GM5^Dx~#RWHMprCEpyeXTKa+Yb6eSIA77P?x$xRAKh@;R`_Ll~4^rn8 zd7cUmv~TlUf!{*rxa{zl?K+zqZ*kwVDXn+$*oOWJBlh|X=Mg^zdRZt&h+Vf0b`^L= zFL#;kv1sYqvA5^#IQXGCea_7t2Uf(LX==UsrFRUsXY24*QEBn!55zHx%Wc2bh4Pu% zIY(wO-UYWBZ#wN`V;i@X*Z215W!zq)?^UNR9bq)SFxT2)g?AAW;y5`qeDOMKR%-52 zZcuAMb)Wvd7U}n5k@JyN>ZnK`@Y<5>T@7q=0H8JyzJ6i+%JuiDV*8D z9NI*FKX}1=`<6i~2&Q$X?yOqcxB2mfH&1TY)AQFa9bhyd#UQBFA3GA@R{eObS-8MD zFY~GXg9V5GxbJ$g+60??<#}(bk7N6;E;oGVBw958MTxA9mnUD-8aiTI1WG<6Hn;aa zyW(!onQsQi$1FLvFMTahVv5vGYC6ZC*_xO5hv%V{d6p&V*>CE?<_`8FF5fKsDdGC< zpsx z-^Aw|r?I5>6VChHJ#TM58xzIGT2*^&E#mp^F-$P?8BL`}8?`X5PLNj&P0#e@?#5Z$ z`tSQNbm#UR1FwHt)8_FNDQujZzoy6A>Y@iTcGeS;E*r=SC$==4{xKRf{|+_O#dCF#MR=gwmD7OK6u(kh|yk8LCN?K13b(V`T11<_uZ??cN84_WmCeK5pBMA3x?MRo0`4fo6o&qK60KlYxR<64@MXa^jcQu z7M;~gujp63EayLCd40>K7xZyB@^oRUJ#uH5!|H2=COeO(CXGA%*ADTnk3n{8QlFl{ zn`&ugddk^bE*Nuie|OtY%Q(B!?8rf%vmdMHEB3ccUjD+pZnXs7uAi~^9W6< zCK*TW%jIs!JnpkKx;!TezoZyicJ1QWW@G;yncl&FUUa`cCi_vq*OmQZCj7w`zux*( zU;jDTamD$RFN1?VQ=M#v-ZPVp=jGK*Jw1vzf7<^2b4NF4i1#Mn$_OuwwiG*leE)Sy zsdt!7%3lGyZHdp~xd+0A_hvK1+mBZmpVU8ADdnosqkrpJLw|C!)`+p^nuDMSYq5Voc=~L9(Qj);HO9r7 z6xp08!KPE^9<0f!%5H19|KcPa8Rr9UQ86=Jcb` zeWNFz4qCJ-?c#(MCr{Crbm!#LJx-S7n*J4=cxd#3OB}|vfXk11yoeZeDRGj=%7xT6 z(`Q@G+5aFhr#eb)L`TbXb4y)x9kQNAJ5 z|5-*Fqb!$me~+C>LE9vYsTsBUb`kaTBQH?-7z1B{oN2vyh;>%WQheaMMJCO;ZM`p^ z;t$BXpcljlW&4{~2~C@q9?^3idM;(*QU9gomuC;nxauB$C8gw0?8{1f)5OmwN(>9n z_w6x4|MR`>$1GKes>?pLqmTtQ6fQ_4U!sK7kw71WWJiMA55H+zpiHi9`c3mu71dom zDF`@#Me^e$I6$867SO35)Tygebx>^;|DF|Gp{mpTuQ};dwhRP|>Aal+n@261zHu?I z=tcr7hg(XpP1RYEPQg}lgjH9C3FuU@2#!+~(Nx1wH(4Ag3xUI!4uMY9CO1&N#l!3gZd@4(*}qNKODKIxSWHc2?+^y2~<0oA_^t5*=&?VK`9g>z#uATG8MWGsXMEftqoyeD~RR-8m8wG%TTijYy zmAFAqEp7~YRwt=-2)hdsTrva!8Hyv5x{d21?Jk(w!R;4D|J86^Tnzz@7y&a-jxG`$ zE~vdH5koO>Bz$Rk2B|EM2GNg`GeQmdz(tOE*{p_%euYEB-fkf=OVBt$U@ z76WgAfcD5b&LR?OmG^yYl>$XV4i013KQ2v+_-)HmuL%SdCxedo1ge&fRtgYvy5EO& zDql_$=gNd`AxU?n`bH7~x1H^m%HRP?Ty!cOiPT&) zGbo@k*5#5_bphTLMx}yc3;c9kQZuOFeyuBv4sLGtm{s28GpbFu<7>*6nha P{lB`jB{Qk**S7xwI4Rel diff --git a/src/libs/pdflib/bind/pdflib/java/Java.dsp b/src/libs/pdflib/bind/pdflib/java/Java.dsp deleted file mode 100644 index 26b3994958..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/Java.dsp +++ /dev/null @@ -1,76 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Java" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=Java - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Java.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Java.mak" CFG="Java - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Java - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Java___Win32_Release" -# PROP BASE Intermediate_Dir "Java___Win32_Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /Gz /MT /W3 /O2 /I "c:\jdk1.3\include" /I "c:\jdk1.3\include\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"pdf_java.dll" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /base:"0x55320000" /dll /pdb:none /machine:I386 /out:"pdf_java.dll" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /map /debug -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Desc=Creating jar file and documentation... -PostBuild_Cmds=c:\jdk1.3\bin\javac PDFlibException.java pdflib.java rmdir /s /q com mkdir com\pdflib copy pdflib.class com\pdflib copy PDFlibException.class com\pdflib c:\jdk1.3\bin\jar cvf pdflib.jar com/pdflib/PDFlibException.class com/pdflib/pdflib.class rmdir /s /q javadoc mkdir javadoc c:\jdk1.3\bin\javadoc -notree -author -version -d javadoc -public pdflib.java -# End Special Build Tool -# Begin Target - -# Name "Java - Win32 Release" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib_java.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/java/Makefile b/src/libs/pdflib/bind/pdflib/java/Makefile deleted file mode 100644 index 8f3a6cbc6e..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/Makefile +++ /dev/null @@ -1,89 +0,0 @@ -# Makefile for PDFlib's Java binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc -PDFPEDANTIC = - -LIBS = $(PDFLIBLINK) -INCLUDES = $(PDFLIBINC) $(JAVAINCLUDE) - -LANG_LIBDIR = $(libdir) - -LIBNAME = libpdf_java$(LA) -OBJ = pdflib_java$(LO) -SRC = pdflib_java.c - -TESTPROGS = \ - hello.class \ - image.class \ - pdfclock.class \ - chartab.class \ - invoice.class \ - businesscard.class \ - quickreference.class - -include $(top_builddir)/config/mkbind.inc - -.SUFFIXES: .java .class - -.java.class: - -CLASSPATH=$$CLASSPATH:pdflib.jar:. javac $< - - -all:: pdflib.jar - -pdflib.jar:: pdflib.java PDFlibException.java - $(RM) com - mkdir -p com/pdflib - javac PDFlibException.java pdflib.java && mv pdflib.class com/pdflib\ - && mv PDFlibException.class com/pdflib/PDFlibException.class - jar cvf pdflib.jar com/pdflib/pdflib.class \ - com/pdflib/PDFlibException.class - $(RM) com - -javadoc:: - $(RM) javadoc - mkdir javadoc - -javadoc -notree -author -version -d javadoc -public \ - pdflib.java PDFlibException.java - -test:: $(LIBNAME) pdflib.jar $(TESTPROGS) - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java hello - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java image - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java pdfclock - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java chartab - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java invoice - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java businesscard - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java quickreference - -smoke:: test smoketest.class - -CLASSPATH=$$CLASSPATH:pdflib.jar:. $(LIBTOOL_EXE) java smoketest - -install:: $(LIBNAME) pdflib.jar - @-if test -f .libs/libpdf_java.jnilib; then \ - $(LIBTOOL) --mode=install $(INSTALL_DATA) \ - .libs/libpdf_java.jnilib $(LANG_LIBDIR); \ - else \ - $(LIBTOOL) --mode=install $(INSTALL_DATA) \ - $(LIBNAME) $(LANG_LIBDIR); \ - fi - @echo Copy pdflib.jar and javadoc to an appropriate directory, - @echo and include pdflib.jar in your CLASSPATH. - -uninstall:: - @-if test -f .libs/libpdf_java.jnilib; then \ - $(LIBTOOL) --mode=uninstall $(RM) \ - $(LANG_LIBDIR)/libpdf_java.jnilib; \ - else \ - $(LIBTOOL) --mode=uninstall $(RM) \ - $(LANG_LIBDIR)/$(LIBNAME); \ - fi - -clean:: - $(RM) *.class com pdflib.jar javadoc smoke_c_?.pdf - $(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf - $(RM) businesscard.pdf quickreference.pdf - -# Automatically generated dependencies diff --git a/src/libs/pdflib/bind/pdflib/java/PDFlibException.java b/src/libs/pdflib/bind/pdflib/java/PDFlibException.java deleted file mode 100644 index ebd861d4fe..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/PDFlibException.java +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: PDFlibException.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlibException Java class - */ - -package com.pdflib; - -/** PDFlib - A library for generating PDF on the fly - - Exception handling for PDFlib. - @author Rainer Schaaf - @version 5.0.3 -*/ - -public class PDFlibException extends Exception { - public PDFlibException() { - super(); - } - - public PDFlibException(String msg) { - super(msg); - } - - public PDFlibException(String msg, int errnum, String apiname) { - super(msg); - pdf_errnum = errnum; - pdf_apiname = apiname; - } - - /** Map standard getMessage method to get_errmsg. */ - public String get_errmsg() { - return super.getMessage(); - } - - /** Get the error number of the exception. */ - public int get_errnum() { - return pdf_errnum; - } - - /** Get the name of the API function which caused the exception. */ - public String get_apiname() { - return pdf_apiname; - } - - private int pdf_errnum; - private String pdf_apiname; -} diff --git a/src/libs/pdflib/bind/pdflib/java/businesscard.java b/src/libs/pdflib/bind/pdflib/java/businesscard.java deleted file mode 100644 index 035cfc3412..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/businesscard.java +++ /dev/null @@ -1,90 +0,0 @@ -/* $Id: businesscard.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: hello example in Java - */ - -import java.io.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class businesscard -{ - public static void main (String argv[]) - { - int font; - pdflib p = null ; - int i, blockcontainer, page; - String infile = "boilerplate.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary. - * - * Note that this directory must also contain the LuciduxSans font - * outline and metrics files. - */ - String searchpath = "../data"; - String[][] data = { - { "name", "Victor Kraxi" }, - { "business.title", "Chief Paper Officer" }, - { "business.address.line1", "17, Aviation Road" }, - { "business.address.city", "Paperfield" }, - { "business.telephone.voice","phone +1 234 567-89" }, - { "business.telephone.fax", "fax +1 234 567-98" }, - { "business.email", "victor@kraxi.com" }, - { "business.homepage", "www.kraxi.com" }, - }; - - try{ - p = new pdflib(); - - // open new PDF file - if (p.open_file("businesscard.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "businesscard.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title","PDFlib block processing sample (Java)"); - - blockcontainer = p.open_pdi(infile, "", 0); - if (blockcontainer == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - page = p.open_pdi_page(blockcontainer, 1, ""); - if (page == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.begin_page(20, 20); // dummy page size - - // This will adjust the page size to the block container's size. - p.fit_pdi_page(page, 0, 0, "adjustpage"); - - // Fill all text blocks with dynamic data - for (i = 0; i < (int) data.length; i++) { - if (p.fill_textblock(page, data[i][0], data[i][1], - "embedding encoding=winansi") == -1) { - System.err.println("Warning: " + p.get_errmsg()); - } - } - - p.end_page(); // close page - p.close_pdi_page(page); - - p.close(); // close PDF document - p.close_pdi(blockcontainer); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in businesscard sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/chartab.java b/src/libs/pdflib/bind/pdflib/java/chartab.java deleted file mode 100644 index a999d2446d..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/chartab.java +++ /dev/null @@ -1,124 +0,0 @@ -/* $Id: chartab.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: character table - */ - -import java.io.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class chartab -{ - /* change these as required */ - static final String fontname = "LuciduxSans-Oblique"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - static final String searchpath = "../data"; - - /* list of encodings to use */ - static final String encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" }; - static final int ENCODINGS = 3; - static final float FONTSIZE = 16; - static final float TOP = 700; - static final float LEFT = 50; - static final float YINCR = 2*FONTSIZE; - static final float XINCR = 2*FONTSIZE; - - public static void main (String argv[]) - { - - /* whether or not to embed the font */ - int embed = 1; - - String buf; - float x, y; - int row, col, font, page; - - pdflib p = null ; - - try{ - p = new pdflib(); - - /* open new PDF file */ - if (p.open_file("chartab.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("openaction", "fitpage"); - p.set_parameter("fontwarning", "true"); - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "chartab.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Character table (Java)"); - - /* loop over all encodings */ - for (page = 0; page < ENCODINGS; page++) - { - p.begin_page(595, 842); /* start a new page */ - - /* print the heading and generate the bookmark */ - font = p.load_font("Helvetica", "winansi", ""); - p.setfont(font, FONTSIZE); - if (embed == 1) { - buf = fontname + " (" + encodings[page] + ") embedded"; - } else{ - buf = fontname + " (" + encodings[page] + ") not embedded"; - } - - p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR); - p.add_bookmark(buf, 0, 0); - - /* print the row and column captions */ - p.setfont(font, 2 * FONTSIZE/3); - - for (row = 0; row < 16; row++) - { - buf ="x" + (Integer.toHexString(row)).toUpperCase(); - p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR); - - buf = (Integer.toHexString(row)).toUpperCase() + "x"; - p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR); - } - - /* print the character table */ - if (embed == 1) { - buf = "embedding"; - } else{ - buf = ""; - } - font = p.load_font(fontname, encodings[page],buf); - p.setfont(font, FONTSIZE); - - y = TOP; - x = LEFT; - - for (row = 0; row < 16; row++) - { - for (col = 0; col < 16; col++) { - buf = String.valueOf((char)(16*row + col)); - p.show_xy(buf, x, y); - x += XINCR; - } - x = LEFT; - y -= YINCR; - } - - p.end_page(); /* close page */ - } - p.close(); /* close PDF document */ - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in chartab sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/hello.java b/src/libs/pdflib/bind/pdflib/java/hello.java deleted file mode 100644 index b239a65aab..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/hello.java +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id: hello.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: hello example in Java - */ - -import java.io.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class hello -{ - public static void main (String argv[]) - { - int font; - pdflib p = null; - - try{ - p = new pdflib(); - - /* open new PDF file */ - if (p.open_file("hello.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_info("Creator", "hello.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Hello world (Java)!"); - - p.begin_page(595, 842); /* start a new page */ - - font = p.load_font("Helvetica-Bold", "winansi", ""); - - p.setfont(font, 18); - - p.set_text_pos(50, 700); - p.show("Hello world!"); - p.continue_text("(says Java)"); - p.end_page(); /* close page */ - - p.close(); /* close PDF document */ - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in hello sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/image.java b/src/libs/pdflib/bind/pdflib/java/image.java deleted file mode 100644 index 4734aa6cc1..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/image.java +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id: image.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: image example in Java - */ - -import java.io.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class image -{ - public static void main (String argv[]) - { - int image; - float width, height; - pdflib p = null; - String imagefile = "nesrin.jpg"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - - try{ - - p = new pdflib(); - /* open new PDF file */ - if (p.open_file("image.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "image.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "image sample (Java)"); - - image = p.load_image("auto", imagefile, ""); - - if (image == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - /* dummy page size, will be adjusted by PDF_fit_image() */ - p.begin_page(10, 10); - p.fit_image(image, (float) 0.0, (float) 0.0, "adjustpage"); - p.close_image(image); - p.end_page(); /* close page */ - - p.close(); /* close PDF document */ - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in hello sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/invoice.java b/src/libs/pdflib/bind/pdflib/java/invoice.java deleted file mode 100644 index af119d794c..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/invoice.java +++ /dev/null @@ -1,169 +0,0 @@ -/* $Id: invoice.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: invoice example in Java - */ - -import java.io.*; -import java.text.*; // DateFormat -import java.util.*; // Date -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class invoice -{ - public static void main (String argv[]) - { - pdflib p = null ; - int i, form, page, regularfont, boldfont; - String infile = "stationery.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - final float col1 = 55; - final float col2 = 100; - final float col3 = 330; - final float col4 = 430; - final float col5 = 530; - float fontsize = 12, leading, y; - float sum, total; - float pagewidth = 595, pageheight = 842; - Date now = new Date(); - DateFormat fulldate = DateFormat.getDateInstance(DateFormat.LONG); - - String closingtext = - "30 days warranty starting at the day of sale. " + - "This warranty covers defects in workmanship only. " + - "Kraxi Systems, Inc. will, at its option, repair or replace the " + - "product under the warranty. This warranty is not transferable. " + - "No returns or exchanges will be accepted for wet products."; - - String[][] data = { - { "Super Kite", "20", "2"}, - { "Turbo Flyer", "40", "5"}, - { "Giga Trash", "180", "1"}, - { "Bare Bone Kit", "50", "3"}, - { "Nitty Gritty", "20", "10"}, - { "Pretty Dark Flyer", "75", "1"}, - { "Free Gift", "0", "1"}, - }; - - String[] months = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }; - - try{ - p = new pdflib(); - - // open new PDF file - if (p.open_file("invoice.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "invoice.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "PDFlib invoice generation demo (Java)"); - - form = p.open_pdi(infile, "", 0); - if (form == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - page = p.open_pdi_page(form, 1, ""); - if (page == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - boldfont = p.load_font("Helvetica-Bold", "winansi", ""); - regularfont = p.load_font("Helvetica", "winansi", ""); - leading = fontsize + 2; - - // Establish coordinates with the origin in the upper left corner. - p.set_parameter("topdown", "true"); - - p.begin_page(pagewidth, pageheight); // A4 page - - p.fit_pdi_page(page, 0, pageheight, ""); - p.close_pdi_page(page); - - p.setfont(regularfont, fontsize); - - // Print the address - y = 170; - p.set_value("leading", leading); - - p.show_xy("John Q. Doe", col1, y); - p.continue_text("255 Customer Lane"); - p.continue_text("Suite B"); - p.continue_text("12345 User Town"); - p.continue_text("Everland"); - - // Print the header and date - - p.setfont(boldfont, fontsize); - y = 300; - p.show_xy("INVOICE", col1, y); - - p.fit_textline(fulldate.format(now), col5, y, "position {100 0}"); - - // Print the invoice header line - p.setfont(boldfont, fontsize); - - // "position {0 0}" is left-aligned, "position {100 0}" right-aligned - y = 370; - p.fit_textline("ITEM", col1, y, "position {0 0}"); - p.fit_textline("DESCRIPTION", col2, y, "position {0 0}"); - p.fit_textline("QUANTITY", col3, y, "position {100 0}"); - p.fit_textline("PRICE", col4, y, "position {100 0}"); - p.fit_textline("AMOUNT", col5, y, "position {100 0}"); - - // Print the article list - - p.setfont(regularfont, fontsize); - y += 2*leading; - total = 0; - - for (i = 0; i < data.length; i++) { - p.show_xy(Integer.toString(i+1), col1, y); - p.show_xy(data[i][0], col2, y); - p.fit_textline(data[i][2], col3, y, "position {100 0}"); - p.fit_textline(data[i][1], col4, y, "position {100 0}"); - sum = 0; - - sum = Integer.parseInt(data[i][2]) * Integer.parseInt(data[i][1]); - p.fit_textline(Float.toString(sum), col5, y, "position {100 0}"); - - y += leading; - total += sum; - } - - y += leading; - p.setfont(boldfont, fontsize); - p.fit_textline(Float.toString(total), col5, y, "position {100 0}"); - - // Print the closing text - - y += 5*leading; - p.setfont(regularfont, fontsize); - p.set_value("leading", leading); - p.show_boxed(closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", ""); - - p.end_page(); - p.close(); - p.close_pdi(form); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in invoice sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/businesscard.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/businesscard.jsp deleted file mode 100644 index 4ebc34504e..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/businesscard.jsp +++ /dev/null @@ -1,86 +0,0 @@ -<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><% - - /* $Id: businesscard.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * businesscard.jsp - */ - - - int font; - pdflib p = null ; - int i, blockcontainer, pdipage; - String infile = "boilerplate.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary. - * - * Note that this directory must also contain the LuciduxSans font - * outline and metrics files. - */ - String searchpath = "../data"; - String[][] data = { - { "name", "Victor Kraxi" }, - { "business.title", "Chief Paper Officer" }, - { "business.address.line1", "17, Aviation Road" }, - { "business.address.city", "Paperfield" }, - { "business.telephone.voice","phone +1 234 567-89" }, - { "business.telephone.fax", "fax +1 234 567-98" }, - { "business.email", "victor@kraxi.com" }, - { "business.homepage", "www.kraxi.com" }, - }; - - byte[] buf; - ServletOutputStream output; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "businesscard.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title","PDFlib block processing sample (JSP)"); - - blockcontainer = p.open_pdi(infile, "", 0); - if (blockcontainer == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - pdipage = p.open_pdi_page(blockcontainer, 1, ""); - if (pdipage == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.begin_page(20, 20); // dummy page size - - // This will adjust the page size to the block container's size. - p.fit_pdi_page(pdipage, 0, 0, "adjustpage"); - - // Fill all text blocks with dynamic data - for (i = 0; i < (int) data.length; i++) { - if (p.fill_textblock(pdipage, data[i][0], data[i][1], - "embedding encoding=winansi") == -1) { - System.err.println("Warning: " + p.get_errmsg()); - } - } - - p.end_page(); // close page - p.close_pdi_page(pdipage); - - p.close(); // close PDF document - p.close_pdi(blockcontainer); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/chartab.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/chartab.jsp deleted file mode 100644 index 70c870c6f1..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/chartab.jsp +++ /dev/null @@ -1,115 +0,0 @@ -<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><% - - /* $Id: chartab.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * chartab.jsp - */ - - /* change these as required */ - String fontname = "LuciduxSans-Oblique"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - String searchpath = "../data"; - - /* list of encodings to use */ - String encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" }; - int ENCODINGS = 3; - float FONTSIZE= 16; - float TOP = 700; - float LEFT = 50; - float YINCR = 2*FONTSIZE; - float XINCR = 2*FONTSIZE; - - /* whether or not to embed the font */ - int embed = 1; - - String buf; - float x, y; - int row, col, font, codepage; - - pdflib p = null ; - byte[] outbuf; - ServletOutputStream output; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("openaction", "fitpage"); - p.set_parameter("fontwarning", "true"); - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "chartab.jsp"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Character table (Java/JSP)"); - - /* loop over all encodings */ - for (codepage = 0; codepage < ENCODINGS; codepage++) - { - p.begin_page(595, 842); /* start a new page */ - - /* print the heading and generate the bookmark */ - font = p.load_font("Helvetica", "winansi", ""); - p.setfont(font, FONTSIZE); - if (embed == 1) { - buf = fontname + " (" + encodings[codepage] + ") embedded"; - } else{ - buf = fontname + " (" + encodings[codepage] + ") not embedded"; - } - - p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR); - p.add_bookmark(buf, 0, 0); - - /* print the row and column captions */ - p.setfont(font, 2 * FONTSIZE/3); - - for (row = 0; row < 16; row++) - { - buf ="x" + (Integer.toHexString(row)).toUpperCase(); - p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR); - - buf = (Integer.toHexString(row)).toUpperCase() + "x"; - p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR); - } - - /* print the character table */ - if (embed == 1) { - buf = "embedding"; - } else{ - buf = ""; - } - font = p.load_font(fontname, encodings[codepage],buf); - p.setfont(font, FONTSIZE); - - y = TOP; - x = LEFT; - - for (row = 0; row < 16; row++) - { - for (col = 0; col < 16; col++) { - buf = String.valueOf((char)(16*row + col)); - p.show_xy(buf, x, y); - x += XINCR; - } - x = LEFT; - y -= YINCR; - } - - p.end_page(); /* close page */ - } - p.close(); /* close PDF document */ - - outbuf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(outbuf.length); - - output = response.getOutputStream(); - output.write(outbuf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/hello.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/hello.jsp deleted file mode 100644 index 321d2a8f00..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/hello.jsp +++ /dev/null @@ -1,46 +0,0 @@ -<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><% - - /* $Id: hello.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * hello.jsp - */ - - int font; - pdflib p; - byte[] buf; - ServletOutputStream output; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_info("Creator", "hello.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "Hello world (Java/JSP)!"); - - p.begin_page(595, 842); /* start a new page */ - - font = p.load_font("Helvetica-Bold", "winansi", ""); - - p.setfont(font, 18); - - p.set_text_pos(50, 700); - p.show("Hello world!"); - p.continue_text("(says Java/JSP)"); - p.end_page(); /* close page */ - - p.close(); /* close PDF document */ - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/image.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/image.jsp deleted file mode 100644 index 17231c62aa..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/image.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><% -/* $Id: image.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * image.jsp - */ - - int image; - float width, height; - pdflib p; - String imagefile = "nesrin.jpg"; - byte[] buf; - ServletOutputStream output; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "image.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "image sample (JSP)"); - - image = p.load_image("auto", imagefile, ""); - - if (image == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - /* dummy page size, will be adjusted by PDF_fit_image() */ - p.begin_page(10, 10); - p.fit_image(image, (float) 0.0, (float) 0.0, "adjustpage"); - p.close_image(image); - p.end_page(); - - p.close(); - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/invoice.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/invoice.jsp deleted file mode 100644 index fb9dbaf814..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/invoice.jsp +++ /dev/null @@ -1,167 +0,0 @@ -<%@page import="java.io.*, - javax.servlet.*, - java.text.*, - java.util.*, - com.pdflib.pdflib" - %><% - - /* $Id: invoice.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * invoice.jsp - */ - - pdflib p = null ; - int i, form, pdipage, regularfont, boldfont; - String infile = "stationery.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - final float col1 = 55; - final float col2 = 100; - final float col3 = 330; - final float col4 = 430; - final float col5 = 530; - float fontsize = 12, leading, y; - float sum, total; - float pagewidth = 595, pageheight = 842; - Date now = new Date(); - DateFormat fulldate = DateFormat.getDateInstance(DateFormat.LONG); - - byte[] buf; - ServletOutputStream output; - - String closingtext = - "30 days warranty starting at the day of sale. " + - "This warranty covers defects in workmanship only. " + - "Kraxi Systems, Inc. will, at its option, repair or replace the " + - "product under the warranty. This warranty is not transferable. " + - "No returns or exchanges will be accepted for wet products."; - - String[][] data = { - { "Super Kite", "20", "2"}, - { "Turbo Flyer", "40", "5"}, - { "Giga Trash", "180", "1"}, - { "Bare Bone Kit", "50", "3"}, - { "Nitty Gritty", "20", "10"}, - { "Pretty Dark Flyer", "75", "1"}, - { "Free Gift", "0", "1"}, - }; - - String[] months = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "invoice.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "PDFlib invoice generation demo (Java/JSP)"); - - form = p.open_pdi(infile, "", 0); - if (form == -1) { - System.err.println("Couldn't open infile '" + infile + "'.\n"); - System.exit(1); - } - - pdipage = p.open_pdi_page(form, 1, ""); - if (pdipage == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - boldfont = p.load_font("Helvetica-Bold", "winansi", ""); - regularfont = p.load_font("Helvetica", "winansi", ""); - leading = fontsize + 2; - - // Establish coordinates with the origin in the upper left corner. - p.set_parameter("topdown", "true"); - - p.begin_page(pagewidth, pageheight); // A4 page - - p.fit_pdi_page(pdipage, 0, pageheight, ""); - p.close_pdi_page(pdipage); - - p.setfont(regularfont, fontsize); - - // Print the address - y = 170; - p.set_value("leading", leading); - - p.show_xy("John Q. Doe", col1, y); - p.continue_text("255 Customer Lane"); - p.continue_text("Suite B"); - p.continue_text("12345 User Town"); - p.continue_text("Everland"); - - // Print the header and date - - p.setfont(boldfont, fontsize); - y = 300; - p.show_xy("INVOICE", col1, y); - - p.fit_textline(fulldate.format(now), col5, y, "position {100 0}"); - - // Print the invoice header line - p.setfont(boldfont, fontsize); - - // "position {0 0}" is left-aligned, "position {100 0}" right-aligned - y = 370; - p.fit_textline("ITEM", col1, y, "position {0 0}"); - p.fit_textline("DESCRIPTION", col2, y, "position {0 0}"); - p.fit_textline("QUANTITY", col3, y, "position {100 0}"); - p.fit_textline("PRICE", col4, y, "position {100 0}"); - p.fit_textline("AMOUNT", col5, y, "position {100 0}"); - - // Print the article list - - p.setfont(regularfont, fontsize); - y += 2*leading; - total = 0; - - for (i = 0; i < data.length; i++) { - p.show_xy(Integer.toString(i+1), col1, y); - p.show_xy(data[i][0], col2, y); - p.fit_textline(data[i][2], col3, y, "position {100 0}"); - p.fit_textline(data[i][1], col4, y, "position {100 0}"); - sum = 0; - - sum = Integer.parseInt(data[i][2]) * Integer.parseInt(data[i][1]); - p.fit_textline(Float.toString(sum), col5, y, "position {100 0}"); - - y += leading; - total += sum; - } - - y += leading; - p.setfont(boldfont, fontsize); - p.fit_textline(Float.toString(total), col5, y, "position {100 0}"); - - // Print the closing text - - y += 5*leading; - p.setfont(regularfont, fontsize); - p.set_value("leading", leading); - p.show_boxed(closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", ""); - - p.end_page(); - p.close(); - p.close_pdi(form); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/pdfclock.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/pdfclock.jsp deleted file mode 100644 index bbfda7180e..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/pdfclock.jsp +++ /dev/null @@ -1,114 +0,0 @@ -<%@page import="java.io.*, - javax.servlet.*, - java.text.*, - java.util.*, - com.pdflib.pdflib" %><% - /* $Id: pdfclock.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFclock.jsp - */ - - pdflib p; - int tm_hour, tm_min, tm_sec, alpha; - float RADIUS = 200.0f; - float MARGIN = 20.0f; - SimpleDateFormat format; - Date now = new Date(); - byte[] buf; - ServletOutputStream output; - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_info("Creator", "pdfclock.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "PDF clock (Java/JSP)"); - - p.begin_page( (int) (2 * (RADIUS + MARGIN)), - (int) (2 * (RADIUS + MARGIN))); - - p.translate(RADIUS + MARGIN, RADIUS + MARGIN); - p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f); - p.save(); - - // minute strokes - p.setlinewidth(2.0f); - for (alpha = 0; alpha < 360; alpha += 6) - { - p.rotate(6.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN/3, 0.0f); - p.stroke(); - } - - p.restore(); - p.save(); - - // 5 minute strokes - p.setlinewidth(3.0f); - for (alpha = 0; alpha < 360; alpha += 30) - { - p.rotate(30.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN, 0.0f); - p.stroke(); - } - - format = new SimpleDateFormat("hh"); - tm_hour= Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("mm"); - tm_min = Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("ss"); - tm_sec = Integer.parseInt(format.format(now)); - - // draw hour hand - p.save(); - p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS/2, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw minute hand - p.save(); - p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS * 0.8f, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw second hand - p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f); - p.setlinewidth(2); - p.save(); - p.rotate(-((tm_sec - 15.0f) * 6.0f)); - p.moveto(-RADIUS/5, 0.0f); - p.lineto(RADIUS, 0.0f); - p.stroke(); - p.restore(); - - // draw little circle at center - p.circle(0f, 0f, RADIUS/30); - p.fill(); - - p.restore(); - p.end_page(); - p.close(); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/jsp/quickreference.jsp b/src/libs/pdflib/bind/pdflib/java/jsp/quickreference.jsp deleted file mode 100644 index 2ce8b8c5f1..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/jsp/quickreference.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%@page import="java.io.*, - javax.servlet.*, - com.pdflib.pdflib" %><% - /* $Id: quickreference.jsp 14574 2005-10-29 16:27:43Z bonefish $ - * - * quickreference.jsp - */ - - int font, row, col, i; - int manual, pages; - final int maxrow=2, maxcol=2; - int startpage = 1, endpage = 4; - final float width = 500, height = 770; - int pageno; - String infile = "reference.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary. */ - String searchpath = "../data"; - byte[] buf; - ServletOutputStream output; - - pdflib p; - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "quickreference.jsp"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "quickreference (Java/JSP)"); - - manual = p.open_pdi(infile, "", 0); - row = 0; - col = 0; - i = 0; - - if (manual == -1){ - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - - p.set_parameter("topdown", "true"); - - for (pageno = startpage; pageno <= endpage; pageno++) { - if (row == 0 && col == 0) { - i++; - p.begin_page(width, height); - font = p.load_font("Helvetica-Bold", "winansi", ""); - p.setfont(font, 18); - p.set_text_pos(24, 24); - p.show("PDFlib Quick Reference"); - } - - pages = p.open_pdi_page(manual, pageno, ""); - - if (pages == -1) { - System.err.println("Error: " + p.get_errmsg()); - System.exit(1); - } - p.fit_pdi_page(manual, width/maxcol*col, - (row + 1) * height/maxrow, "scale " + (float)1/maxrow); - - p.close_pdi_page(pages); - - col++; - if (col == maxcol) { - col = 0; - row++; - } - if (row == maxrow) { - row = 0; - p.end_page(); - } - } - // finish the last partial page - if (row != 0 || col != 0) - p.end_page(); - - p.close(); - p.close_pdi(manual); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); -%> diff --git a/src/libs/pdflib/bind/pdflib/java/pdfclock.java b/src/libs/pdflib/bind/pdflib/java/pdfclock.java deleted file mode 100644 index 29172fb7d5..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/pdfclock.java +++ /dev/null @@ -1,121 +0,0 @@ -/* $Id: pdfclock.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: pdfclock example in Java - */ - -import java.io.*; -import java.text.*; // SimpleDateFormat -import java.util.*; // Date -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class pdfclock -{ - public static void main (String argv[]) - { - pdflib p = null; - int tm_hour, tm_min, tm_sec, alpha; - float RADIUS = 200.0f; - float MARGIN = 20.0f; - SimpleDateFormat format; - Date now = new Date(); - - try{ - p = new pdflib(); - /* open new PDF file */ - if (p.open_file("pdfclock.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_info("Creator", "pdfclock.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "PDF clock (Java)"); - - p.begin_page( (int) (2 * (RADIUS + MARGIN)), - (int) (2 * (RADIUS + MARGIN))); - - p.translate(RADIUS + MARGIN, RADIUS + MARGIN); - p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f); - p.save(); - - // minute strokes - p.setlinewidth(2.0f); - for (alpha = 0; alpha < 360; alpha += 6) - { - p.rotate(6.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN/3, 0.0f); - p.stroke(); - } - - p.restore(); - p.save(); - - // 5 minute strokes - p.setlinewidth(3.0f); - for (alpha = 0; alpha < 360; alpha += 30) - { - p.rotate(30.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN, 0.0f); - p.stroke(); - } - - format = new SimpleDateFormat("hh"); - tm_hour= Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("mm"); - tm_min = Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("ss"); - tm_sec = Integer.parseInt(format.format(now)); - - // draw hour hand - p.save(); - p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS/2, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw minute hand - p.save(); - p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS * 0.8f, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw second hand - p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f); - p.setlinewidth(2); - p.save(); - p.rotate(-((tm_sec - 15.0f) * 6.0f)); - p.moveto(-RADIUS/5, 0.0f); - p.lineto(RADIUS, 0.0f); - p.stroke(); - p.restore(); - - // draw little circle at center - p.circle(0f, 0f, RADIUS/30); - p.fill(); - - p.restore(); - p.end_page(); - p.close(); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in pdfclock sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/pdflib.java b/src/libs/pdflib/bind/pdflib/java/pdflib.java deleted file mode 100644 index af4d7ab5e1..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/pdflib.java +++ /dev/null @@ -1,1589 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib Java class - */ - -package com.pdflib; - -import java.io.*; - -/** PDFlib -- a library for generating PDF on the fly. - - Note that this is only a syntax summary. It covers several products: - PDFlib Lite, PDFlib, PDFlib+PDI, and PDFlib Personalization Server (PPS). - Not all features are available in all products, although dummies for - all missing API functions are provided. A comparison which - details function availability in different products is available at - http://www.pdflib.com. - - For complete information please refer to the PDFlib API reference - manual which is available in the PDF file PDFlib-manual.pdf in the - PDFlib distribution. - - @author Thomas Merz - @version 5.0.3 -*/ - -public final class pdflib { - - // The initialization code for loading the PDFlib shared library. - // The library name will be transformed into something platform- - // specific by the VM, e.g. libpdf_java.so or pdf_java.dll. - - static { - try { - System.loadLibrary("pdf_java"); - } catch (UnsatisfiedLinkError e) { - System.err.println( - "Cannot load the PDFlib shared library/DLL for Java.\n" + - "Make sure to properly install the native PDFlib library.\n\n" + - "For your information, the current value of java.library.path is:\n" + - System.getProperty("java.library.path") + "\n"); - - throw e; - } - PDF_boot(); - } - - // ------------------------------------------------------------------------ - // public functions - - /* p_annots.c: */ - - /** Add a launch annotation (to a target of arbitrary file type). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_launchlink( - float llx, float lly, float urx, float ury, String filename) - throws PDFlibException - { - PDF_add_launchlink(p, llx, lly, urx, ury, filename); - } - - /** Add a link annotation to a target within the current PDF file. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_locallink( - float llx, float lly, float urx, float ury, int page, String optlist) - throws PDFlibException - { - PDF_add_locallink(p, llx, lly, urx, ury, page, optlist); - } - - /** Add a note annotation. icon is one of of "comment", "insert", "note", - "paragraph", "newparagraph", "key", or "help". - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_note( - float llx, float lly, float urx, float ury, - String contents, String title, String icon, int open) - throws PDFlibException - { - PDF_add_note(p, llx, lly, urx, ury, contents, title, icon, open); - } - - /** Add a file link annotation (to a PDF target). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_pdflink( - float llx, float lly, float urx, float ury, - String filename, int page, String optlist) - throws PDFlibException - { - PDF_add_pdflink(p, llx, lly, urx, ury, filename, page, optlist); - } - - /** Add a weblink annotation to a target URL on the Web. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_weblink( - float llx, float lly, float urx, float ury, String url) - throws PDFlibException - { - PDF_add_weblink(p, llx, lly, urx, ury, url); - } - - /** Add a file attachment annotation. icon is one of "graph", "paperclip", - "pushpin", or "tag". - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void attach_file( - float llx, float lly, float urx, float ury, String filename, - String description, String author, String mimetype, String icon) - throws PDFlibException - { - PDF_attach_file(p, llx, lly, urx, ury, filename, - description, author, mimetype, icon); - } - - /** Set the border color for all kinds of annotations. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_border_color(float red, float green, float blue) - throws PDFlibException - { - PDF_set_border_color(p, red, green, blue); - } - - /** Set the border dash style for all kinds of annotations. - See PDF_setdash(). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_border_dash(float b, float w) - throws PDFlibException - { - PDF_set_border_dash(p, b, w); - } - - /** Set the border style for all kinds of annotations. style is "solid" or - "dashed". - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_border_style(String style, float width) - throws PDFlibException - { - PDF_set_border_style(p, style, width); - } - - /* p_basic.c */ - - /** Add a new page to the document. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void begin_page(float width, float height) - throws PDFlibException - { - PDF_begin_page(p, width, height); - } - - /** Close the generated PDF file, and release all document-related - resources. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void close() - throws PDFlibException - { - PDF_close(p); - } - - /** Delete the PDFlib object, and free all internal resources. - Never throws any PDFlib exception. - */ - public final void delete() - { - PDF_delete(p); - p = (long) 0; - } - - /** Finish the page. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void end_page() - throws PDFlibException - { - PDF_end_page(p); - } - - /** Get the name of the API function which failed. - @return PDFlib API function name - */ - public final String get_apiname() - throws PDFlibException - { - return PDF_get_apiname(p); - } - - /** Get the contents of the PDF output buffer. The result must be used by - the client before calling any other PDFlib function. - @return A byte array containing the PDF output generated so far. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final byte[] get_buffer() - throws PDFlibException - { - return PDF_get_buffer(p); - } - - /** Get the descriptive text of a failed function call. - @return PDFlib error message - */ - public final String get_errmsg() - throws PDFlibException - { - return PDF_get_errmsg(p); - } - - /** Get the the reason code of a failed function call. - @return PDFlib error number - */ - public final int get_errnum() - throws PDFlibException - { - return PDF_get_errnum(p); - } - - /** Create a new PDFlib object. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public pdflib() - throws PDFlibException - { - p = PDF_new(); - } - - /** Create a new PDF file using the supplied file name. - @return -1 on error, 1 on success. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_file(String filename) - throws PDFlibException - { - return PDF_open_file(p, filename); - } - - /* p_block.c */ - - /** Process an image block according to its properties. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int fill_imageblock( - int page, String blockname, int image, String optlist) - throws PDFlibException - { - return PDF_fill_imageblock(p, page, blockname, image, optlist); - } - - /** Process a PDF block according to its properties. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int fill_pdfblock( - int page, String blockname, int contents, String optlist) - throws PDFlibException - { - return PDF_fill_pdfblock(p, page, blockname, contents, optlist); - } - - /** Process a text block according to its properties. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int fill_textblock( - int page, String blockname, String text, String optlist) - throws PDFlibException - { - return PDF_fill_textblock(p, page, blockname, text, optlist); - } - - /* p_color.c */ - - /** Make a named spot color from the current color. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int makespotcolor(String spotname) - throws PDFlibException - { - return PDF_makespotcolor(p, spotname); - } - - /** Set the current color space and color. - fstype is "fill", "stroke", or "fillstroke". - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setcolor( - String fstype, String colorspace, float c1, float c2, float c3, float c4) - throws PDFlibException - { - PDF_setcolor(p, fstype, colorspace, c1, c2, c3, c4); - } - - /** Set the current fill and stroke color. - @deprecated Use setcolor("fillstroke", "gray", g, 0, 0, 0) instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setgray(float g) - throws PDFlibException - { - PDF_setcolor(p, "fillstroke", "gray", g, 0, 0, 0); - } - - /** Set the current fill color to a gray value between 0 and 1 inclusive. - @deprecated Use setcolor("fill", "gray", g, 0, 0, 0) instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setgray_fill(float g) - throws PDFlibException - { - PDF_setcolor(p, "fill", "gray", g, 0, 0, 0); - } - - /** Set the current fill color to the supplied RGB values. - @deprecated Use setcolor("fill", "rgb", red, green, blue, 0) instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setrgbcolor_fill(float red, float green, float blue) - throws PDFlibException - { - PDF_setcolor(p, "fill", "rgb", red, green, blue, 0); - } - - /** Set the current fill and stroke color to the supplied RGB values. - @deprecated Use setcolor("fillstroke", "rgb", red, green, blue, 0) - instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setrgbcolor(float red, float green, float blue) - throws PDFlibException - { - PDF_setcolor(p, "fillstroke", "rgb", red, green, blue, 0); - } - - /** Set the current stroke color to the supplied RGB values. - @deprecated Use setcolor("stroke", "rgb", red, green, blue, 0) instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setrgbcolor_stroke(float red, float green, float blue) - throws PDFlibException - { - PDF_setcolor(p, "stroke", "rgb", red, green, blue, 0); - } - - /** Set the current stroke color to a gray value between 0 and 1 - inclusive. - @deprecated Use setcolor("stroke", "gray", g, 0, 0, 0) instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setgray_stroke(float g) - throws PDFlibException - { - PDF_setcolor(p, "stroke", "gray", g, 0, 0, 0); - } - - /* p_draw.c */ - - /** Draw a circular arc with center (x, y) and radius r from alpha to beta. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void arc(float x, float y, float r, float alpha, float beta) - throws PDFlibException - { - PDF_arc(p, x, y, r, alpha, beta); - } - - /** Draw a clockwise circular arc from alpha to beta degrees. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void arcn(float x, float y, float r, float alpha, float beta) - throws PDFlibException - { - PDF_arcn(p, x, y, r, alpha, beta); - } - - /** Draw a circle with center (x, y) and radius r. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void circle(float x, float y, float r) - throws PDFlibException - { - PDF_circle(p, x, y, r); - } - - /** Use the current path as clipping path. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void clip() - throws PDFlibException - { - PDF_clip(p); - } - - /** Close the current path. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void closepath() - throws PDFlibException - { - PDF_closepath(p); - } - - /** Close the path, fill, and stroke it. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void closepath_fill_stroke() - throws PDFlibException - { - PDF_closepath_fill_stroke(p); - } - - /** Close the path, and stroke it. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void closepath_stroke() - throws PDFlibException - { - PDF_closepath_stroke(p); - } - - /** Draw a Bezier curve from the current point, using 3 more control - points. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void curveto( - float x1, float y1, float x2, float y2, float x3, float y3) - throws PDFlibException - { - PDF_curveto(p, x1, y1, x2, y2, x3, y3); - } - - /** End the current path without filling or stroking it. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void endpath() - throws PDFlibException - { - PDF_endpath(p); - } - - /** Fill the interior of the path with the current fill color. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void fill() - throws PDFlibException - { - PDF_fill(p); - } - - /** Fill and stroke the path with the current fill and stroke color. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void fill_stroke() - throws PDFlibException - { - PDF_fill_stroke(p); - } - - /** Draw a line from the current point to (x, y). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void lineto(float x, float y) - throws PDFlibException - { - PDF_lineto(p, x, y); - } - - /** Set the current point to (x, y). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void moveto(float x, float y) - throws PDFlibException - { - PDF_moveto(p, x, y); - } - - /** Draw a rectangle at lower left (x, y) with width and height. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void rect(float x, float y, float width, float height) - throws PDFlibException - { - PDF_rect(p, x, y, width, height); - } - - /** Stroke the path with the current color and line width,and clear it. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void stroke() - throws PDFlibException - { - PDF_stroke(p); - } - - /* p_encoding.c */ - - /** Add a glyph name to a custom encoding. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void encoding_set_char( - String encoding, int slot, String glyphname, int uv) - throws PDFlibException - { - PDF_encoding_set_char(p, encoding, slot, glyphname, uv); - } - - /* p_font.c */ - - /** Search a font, and prepare it for later use. PDF_load_font() is - recommended. - @return A valid font handle. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int findfont(String fontname, String encoding, int options) - throws PDFlibException - { - return PDF_findfont(p, fontname, encoding, options); - } - - /** Search a font, and prepare it for later use. - @return A valid font handle. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int load_font(String fontname, String encoding, String optlist) - throws PDFlibException - { - return PDF_load_font(p, fontname, encoding, optlist); - } - - /** Set the current font in the given size, - using a font handle returned by PDF_load_font(). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setfont(int font, float fontsize) - throws PDFlibException - { - PDF_setfont(p, font, fontsize); - } - - /* p_gstate.c */ - - /** Concatenate a matrix to the current transformation matrix. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void concat( - float a, float b, float c, float d, float e, float f) - throws PDFlibException - { - PDF_concat(p, a, b, c, d, e, f); - } - - /** Reset all implicit color and graphics state parameters to their - defaults. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void initgraphics() - throws PDFlibException - { - PDF_initgraphics(p); - } - - /** Restore the most recently saved graphics state. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void restore() - throws PDFlibException - { - PDF_restore(p); - } - - /** Rotate the coordinate system by phi degrees. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void rotate(float phi) - throws PDFlibException - { - PDF_rotate(p, phi); - } - - /** Save the current graphics state. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void save() - throws PDFlibException - { - PDF_save(p); - } - - /** Scale the coordinate system by (sx, sy). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void scale(float sx, float sy) - throws PDFlibException - { - PDF_scale(p, sx, sy); - } - - /** Set the current dash pattern to b black and w white units. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setdash(float b, float w) - throws PDFlibException - { - PDF_setdash(p, b, w); - } - - /** Set a more complicated dash pattern defined by an optlist. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setdashpattern(String optlist) - throws PDFlibException - { - PDF_setdashpattern(p, optlist); - } - - /** Set the flatness to a value between 0 and 100 inclusive. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setflat(float flatness) - throws PDFlibException - { - PDF_setflat(p, flatness); - } - - /** Set the linecap parameter to a value between 0 and 2 inclusive. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setlinecap(int linecap) - throws PDFlibException - { - PDF_setlinecap(p, linecap); - } - - /** Set the line join parameter to a value between 0 and 2 inclusive. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setlinejoin(int linejoin) - throws PDFlibException - { - PDF_setlinejoin(p, linejoin); - } - - /** Set the current linewidth to width. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setlinewidth(float width) - throws PDFlibException - { - PDF_setlinewidth(p, width); - } - - /** Explicitly set the current transformation matrix. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setmatrix( - float a, float b, float c, float d, float e, float f) - throws PDFlibException - { - PDF_setmatrix(p, a, b, c, d, e, f); - } - - /** Set the miter limit to a value greater than or equal to 1. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setmiterlimit(float miter) - throws PDFlibException - { - PDF_setmiterlimit(p, miter); - } - - /** Set a dash pattern. - @deprecated Use PDF_setdashpattern() instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void setpolydash(float[] dasharray) - throws PDFlibException - { - PDF_setpolydash(p, dasharray); - } - - /** Skew the coordinate system in x and y direction by alpha and beta - degrees. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void skew(float alpha, float beta) - throws PDFlibException - { - PDF_skew(p, alpha, beta); - } - - /** Translate the origin of the coordinate system to (tx, ty). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void translate(float tx, float ty) - throws PDFlibException - { - PDF_translate(p, tx, ty); - } - - /* p_hyper.c */ - - /** Add a nested bookmark under parent, or a new top-level bookmark if - parent = 0. If open = 1, child bookmarks will - be folded out, and invisible if open = 0. - @return A bookmark descriptor which may be used as parent for - subsequent nested bookmarks. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int add_bookmark(String text, int parent, int open) - throws PDFlibException - { - return PDF_add_bookmark(p, text, parent, open); - } - - /** Create a named destination on an arbitrary page in the current - document. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_nameddest(String name, String optlist) - throws PDFlibException - { - PDF_add_nameddest(p, name, optlist); - } - - /** Fill document information field key with value. key is one of "Subject", - "Title", "Creator", "Author", "Keywords", or a user-defined key. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_info(String key, String value) - throws PDFlibException - { - PDF_set_info(p, key, value); - } - - /* p_icc.c */ - - /** Search an ICC profile, and prepare it for later use. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int load_iccprofile(String profilename, String optlist) - throws PDFlibException - { - return PDF_load_iccprofile(p, profilename, optlist); - } - - /* p_image.c */ - - /** Add an existing image as thumbnail for the current page. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void add_thumbnail(int image) - throws PDFlibException - { - PDF_add_thumbnail(p, image); - } - - /** Close an image retrieved with one of the PDF_open_image*() functions. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void close_image(int image) - throws PDFlibException - { - PDF_close_image(p, image); - } - - /** Place an image or template at (x, y) with various options. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void fit_image(int image, float x, float y, String optlist) - throws PDFlibException - { - PDF_fit_image(p, image, x, y, optlist); - } - - /** Open a (disk-based or virtual) image file with various options. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int load_image( - String imagetype, String filename, String optlist) - throws PDFlibException - { - return PDF_load_image(p, imagetype, filename, optlist); - } - - /** Load a CCITT image file. - @deprecated Use PDF_load_image() instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_CCITT( - String filename, int width, int height, int BitReverse, int K, int BlackIs1) - throws PDFlibException - { - return PDF_open_CCITT(p, filename, width, height, BitReverse, K, - BlackIs1); - } - - /** Open an image from memory. - @deprecated Use PDF_load_image() with virtual files instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_image( - String imagetype, String source, byte[] data, long length, int width, - int height, int components, int bpc, String params) - throws PDFlibException - { - return PDF_open_image(p, imagetype, source, data, length, width, - height, components, bpc, params); - } - - /** Open an image from file. - @deprecated Use PDF_load_image() with virtual files instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_image_file( - String imagetype, String filename, String stringparam, int intparam) - throws PDFlibException - { - return PDF_open_image_file(p, imagetype, filename, stringparam, - intparam); - } - - /** Place an image on the page. - @deprecated Use PDF_fit_image() with virtual files instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void place_image(int image, float x, float y, float scale) - throws PDFlibException - { - PDF_place_image(p, image, x, y, scale); - } - - /* p_params.c */ - - /** Get some PDFlib parameters with string type - @return A string containing the requested parameter. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final String get_parameter(String key, float modifier) - throws PDFlibException - { - return PDF_get_parameter(p, key, modifier); - } - - /** Get the value of some PDFlib parameters with float type. - @return The requested parameter value. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final float get_value(String key, float modifier) - throws PDFlibException - { - return PDF_get_value(p, key, modifier); - } - - /** Set some PDFlib parameters with string type. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_parameter(String key, String value) - throws PDFlibException - { - PDF_set_parameter(p, key, value); - } - - /** Set some PDFlib parameters with float type. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_value(String key, float value) - throws PDFlibException - { - PDF_set_value(p, key, value); - } - - /* p_pattern.c */ - - /** Start a new pattern definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int begin_pattern( - float width, float height, float xstep, float ystep, int painttype) - throws PDFlibException - { - return PDF_begin_pattern(p, width, height, xstep, ystep, painttype); - } - - /** Finish a pattern definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void end_pattern() - throws PDFlibException - { - PDF_end_pattern(p); - } - - /* p_pdi.c */ - - /** Close all open page handles, and close the input PDF document. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void close_pdi(int doc) - throws PDFlibException - { - PDF_close_pdi(p, doc); - } - - /** Close the page handle, and free all page-related resources. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void close_pdi_page(int page) - throws PDFlibException - { - PDF_close_pdi_page(p, page); - } - - /** Place an imported PDF page with the lower left corner at (x, y) with - various options. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void fit_pdi_page(int page, float x, float y, String optlist) - throws PDFlibException - { - PDF_fit_pdi_page(p, page, x, y, optlist); - } - - /** Get the contents of some PDI document parameter with string type. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final String get_pdi_parameter( - String key, int doc, int page, int reserved) - throws PDFlibException - { - return PDF_get_pdi_parameter(p, key, doc, page, reserved); - } - - /** Get the contents of some PDI document parameter with numerical type. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final float get_pdi_value( - String key, int doc, int page, int reserved) - throws PDFlibException - { - return PDF_get_pdi_value(p, key, doc, page, reserved); - } - - /** Open an existing PDF document and prepare it for later use. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_pdi(String filename, String optlist, int reserved) - throws PDFlibException - { - return PDF_open_pdi(p, filename, optlist, reserved); - } - - /** Open a (disk-based or virtual) PDF document and prepare it - for later use. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int open_pdi_page(int doc, int pagenumber, String optlist) - throws PDFlibException - { - return PDF_open_pdi_page(p, doc, pagenumber, optlist); - } - - /** Perform various actions on a PDI document. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final float process_pdi(int doc, int page, String optlist) - throws PDFlibException - { - return PDF_process_pdi(p, doc, page, optlist); - } - - /** Place an imported page on the output page. - @deprecated Use PDF_fit_pdi_page() instead. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void place_pdi_page( - int page, float x, float y, float sx, float sy) - throws PDFlibException - { - PDF_place_pdi_page(p, page, x, y, sx, sy); - } - - /* p_resource.c */ - - /** Create a file in the PDFlib virtual file system (PVF). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void create_pvf(String filename, byte[] data, String optlist) - throws PDFlibException - { - PDF_create_pvf(p, filename, data, optlist); - } - - /** Delete a virtual file. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int delete_pvf(String filename) - throws PDFlibException - { - return PDF_delete_pvf(p, filename); - } - - /* p_shading.c */ - - /** Define a color blend (smooth shading) from the current fill color - to the supplied color. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int shading( - String shtype, float x0, float y0, float x1, float y1, - float c1, float c2, float c3, float c4, String optlist) - throws PDFlibException - { - return PDF_shading(p, shtype, x0, y0, x1, y1, c1, c2, c3, c4, optlist); - } - - /** Define a shading pattern using a shading object. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int shading_pattern(int shading, String optlist) - throws PDFlibException - { - return PDF_shading_pattern(p, shading, optlist); - } - - /** Fill an area with a shading, based on a shading object. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void shfill(int shading) - throws PDFlibException - { - PDF_shfill(p, shading); - } - - /* p_template.c */ - - /** Start a new template definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int begin_template(float width, float height) - throws PDFlibException - { - return PDF_begin_template(p, width, height); - } - - /** Finish a template definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void end_template() - throws PDFlibException - { - PDF_end_template(p); - } - - /* p_text.c */ - - /** Print text at the next line. The spacing between lines is determined - by the "leading" parameter. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void continue_text(String text) - throws PDFlibException - { - PDF_continue_text(p, text); - } - - /** Print text in the current font placed and fitted at (x, y). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void fit_textline( - String text, float x, float y, String optlist) - throws PDFlibException - { - PDF_fit_textline(p, text, x, y, optlist); - } - - /** Set the text output position. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_text_pos(float x, float y) - throws PDFlibException - { - PDF_set_text_pos(p, x, y); - } - - /** Print text in the current font and size at the current position. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void show(String text) - throws PDFlibException - { - PDF_show(p, text); - } - - /** Format text in the current font and size into the supplied text box - according to the requested formatting mode, which must be one of - "left", "right", "center", "justify", or "fulljustify". If width - and height are 0, only a single line is placed at the point - (left, top) in the requested mode. - @return Number of characters which didn't fit in the box. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int show_boxed(String text, float left, float bottom, - float width, float height, String hmode, String feature) - throws PDFlibException - { - return PDF_show_boxed(p, text, left, bottom, width, height, - hmode, feature); - } - - /** Print text in the current font at (x, y). - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void show_xy(String text, float x, float y) - throws PDFlibException - { - PDF_show_xy(p, text, x, y); - } - - /** Return the width of text in an arbitrary font. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final float stringwidth(String text, int font, float fontsize) - throws PDFlibException - { - return PDF_stringwidth(p, text, font, fontsize); - } - - /* p_type3.c */ - - /** Start a type3 font definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void begin_font( - String name, float a, float b, float c, float d, float e, float f, - String optlist) - throws PDFlibException - { - PDF_begin_font(p, name, a, b, c, d, e, f, optlist); - } - - /** Start a type 3 glyph definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void begin_glyph( - String glyphname, float wx, float llx, float lly, float urx, float ury) - throws PDFlibException - { - PDF_begin_glyph(p, glyphname, wx, llx, lly, urx, ury); - } - - /** Terminate a type 3 font definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void end_font() - throws PDFlibException - { - PDF_end_font(p); - } - - /** Terminate a type 3 glyph definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void end_glyph() - throws PDFlibException - { - PDF_end_glyph(p); - } - - /* p_xgstate.c */ - - /** Create a gstate object definition. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final int create_gstate(String optlist) - throws PDFlibException - { - return PDF_create_gstate(p, optlist); - } - - /** Activate a gstate object. - @exception com.pdflib.PDFlibException - PDF output cannot be finished after an exception. - */ - public final void set_gstate(int gstate) - throws PDFlibException - { - PDF_set_gstate(p, gstate); - } - - - // ------------------------------------------------------------------------ - // private functions - - private long p; - - protected final void finalize() - throws PDFlibException - { - PDF_delete(p); - p = (long) 0; - } - - private final static void classFinalize() { - PDF_shutdown(); - } - - /* p_annots.c */ - - private final static native void PDF_add_launchlink(long jp, float jarg1, float jarg2, float jarg3, float jarg4, String jarg5) throws PDFlibException; - - private final static native void PDF_add_locallink(long jp, float jarg1, float jarg2, float jarg3, float jarg4, int jarg5, String jarg6) throws PDFlibException; - - private final static native void PDF_add_note(long jp, float jarg1, float jarg2, float jarg3, float jarg4, String jarg5, String jarg6, String jarg7, int jarg8) throws PDFlibException; - - private final static native void PDF_add_pdflink(long jp, float jarg1, float jarg2, float jarg3, float jarg4, String jarg5, int jarg6, String jarg7) throws PDFlibException; - - private final static native void PDF_add_weblink(long jp, float jarg1, float jarg2, float jarg3, float jarg4, String jarg5) throws PDFlibException; - - private final static native void PDF_attach_file(long jp, float jarg1, float jarg2, float jarg3, float jarg4, String jarg5, String jarg6, String jarg7, String jarg8, String jarg9) throws PDFlibException; - - private final static native void PDF_set_border_color(long jp, float jarg1, float jarg2, float jarg3) throws PDFlibException; - - private final static native void PDF_set_border_dash(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_set_border_style(long jp, String jarg1, float jarg2) throws PDFlibException; - - /* p_basic.c */ - - private final static native void PDF_begin_page(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_boot(); - - private final static native void PDF_close(long jp) throws PDFlibException; - - private final static native synchronized void PDF_delete(long jp); - - private final static native void PDF_end_page(long jp) throws PDFlibException; - - private final static native String PDF_get_apiname(long jp) throws PDFlibException; - - private final static native byte[] PDF_get_buffer(long jp) throws PDFlibException; - - private final static native String PDF_get_errmsg(long jp) throws PDFlibException; - - private final static native int PDF_get_errnum(long jp) throws PDFlibException; - - private final static native synchronized long PDF_new() throws PDFlibException; - - private final static native int PDF_open_file(long jp, String jarg1) throws PDFlibException; - - private final static native void PDF_shutdown(); - - - /* p_block.c */ - - private final static native int PDF_fill_imageblock(long jp, int jpage, String jblockname, int jimage, String joptlist) throws PDFlibException; - - private final static native int PDF_fill_pdfblock(long jp, int jpage, String jblockname, int jcontents, String joptlist) throws PDFlibException; - - private final static native int PDF_fill_textblock(long jp, int jpage, String jblockname, String jtext, String joptlist) throws PDFlibException; - - /* p_color.c */ - - private final static native int PDF_makespotcolor(long jp, String jarg1) throws PDFlibException; - - private final static native void PDF_setcolor(long jp, String jarg1, String jarg2, float jarg3, float jarg4, float jarg5, float jarg6) throws PDFlibException; - - /* p_draw.c */ - - private final static native void PDF_arc(long jp, float jarg1, float jarg2, float jarg3, float jarg4, float jarg5) throws PDFlibException; - - private final static native void PDF_arcn(long jp, float jarg1, float jarg2, float jarg3, float jarg4, float jarg5) throws PDFlibException; - - private final static native void PDF_circle(long jp, float jarg1, float jarg2, float jarg3) throws PDFlibException; - - private final static native void PDF_clip(long jp) throws PDFlibException; - - private final static native void PDF_closepath(long jp) throws PDFlibException; - - private final static native void PDF_closepath_fill_stroke(long jp) throws PDFlibException; - - private final static native void PDF_closepath_stroke(long jp) throws PDFlibException; - - private final static native void PDF_curveto(long jp, float jarg1, float jarg2, float jarg3, float jarg4, float jarg5, float jarg6) throws PDFlibException; - - private final static native void PDF_endpath(long jp) throws PDFlibException; - - private final static native void PDF_fill(long jp) throws PDFlibException; - - private final static native void PDF_fill_stroke(long jp) throws PDFlibException; - - private final static native void PDF_lineto(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_moveto(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_rect(long jp, float jarg1, float jarg2, float jarg3, float jarg4) throws PDFlibException; - - private final static native void PDF_stroke(long jp) throws PDFlibException; - - /* p_encoding.c */ - - private final static native void PDF_encoding_set_char(long jp, String jencoding, int jslot, String jglyphname, int juv) throws PDFlibException; - - /* p_font.c */ - - private final static native int PDF_findfont(long jp, String jarg1, String jarg2, int jarg3) throws PDFlibException; - - private final static native int PDF_load_font(long jp, String jfontname, String jencoding, String joptlist) throws PDFlibException; - - private final static native void PDF_setfont(long jp, int jarg1, float jarg2) throws PDFlibException; - - /* p_gstate.c */ - - private final static native void PDF_concat(long jp, float a, float b, float c, float d, float e, float f) throws PDFlibException; - - private final static native void PDF_initgraphics(long jp) throws PDFlibException; - - private final static native void PDF_restore(long jp) throws PDFlibException; - - private final static native void PDF_rotate(long jp, float jarg1) throws PDFlibException; - - private final static native void PDF_save(long jp) throws PDFlibException; - - private final static native void PDF_scale(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_setdash(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_setdashpattern(long jp, String joptlist) throws PDFlibException; - - private final static native void PDF_setflat(long jp, float jarg1) throws PDFlibException; - - private final static native void PDF_setlinecap(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_setlinejoin(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_setlinewidth(long jp, float jarg1) throws PDFlibException; - - private final static native void PDF_setmatrix(long jp, float jarg1, float jarg2, float jarg3, float jarg4, float jarg5, float jarg6) throws PDFlibException; - - private final static native void PDF_setmiterlimit(long jp, float jarg1) throws PDFlibException; - - private final static native void PDF_setpolydash(long jp, float[] jarg1) throws PDFlibException; - - private final static native void PDF_skew(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_translate(long jp, float jarg1, float jarg2) throws PDFlibException; - - /* p_hyper.c */ - - private final static native int PDF_add_bookmark(long jp, String jarg1, int jarg2, int jarg3) throws PDFlibException; - - private final static native void PDF_add_nameddest(long jp, String jname, String joptlist) throws PDFlibException; - - private final static native void PDF_set_info(long jp, String jarg1, String jarg2) throws PDFlibException; - - /* p_icc.c */ - - private final static native int PDF_load_iccprofile(long jp, String jprofilename, String joptlist) throws PDFlibException; - - /* p_image.c */ - - private final static native void PDF_add_thumbnail(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_close_image(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_fit_image(long jp, int jimage, float jx, float jy, String joptlist) throws PDFlibException; - - private final static native int PDF_load_image(long jp, String jimagetype, String jfilename, String joptlist) throws PDFlibException; - - private final static native int PDF_open_CCITT(long jp, String jarg1, int jarg2, int jarg3, int jarg4, int jarg5, int jarg6) throws PDFlibException; - - private final static native int PDF_open_image(long jp, String jarg1, String jarg2, byte[] jarg3, long jarg4, int jarg5, int jarg6, int jarg7, int jarg8, String jarg9) throws PDFlibException; - - private final static native int PDF_open_image_file(long jp, String jarg1, String jarg2, String jarg3, int jarg4) throws PDFlibException; - - private final static native void PDF_place_image(long jp, int jarg1, float jarg2, float jarg3, float jarg4) throws PDFlibException; - - /* p_params.c */ - - private final static native String PDF_get_parameter(long jp, String key, float mod) throws PDFlibException; - - private final static native float PDF_get_value(long jp, String key, float mod) throws PDFlibException; - - private final static native void PDF_set_parameter(long jp, String jarg1, String jarg2) throws PDFlibException; - - private final static native void PDF_set_value(long jp, String jarg1, float jarg2) throws PDFlibException; - - /* p_pattern.c */ - - private final static native int PDF_begin_pattern(long jp, float jarg1, float jarg2, float jarg3, float jarg4, int jarg5) throws PDFlibException; - - private final static native void PDF_end_pattern(long jp) throws PDFlibException; - - /* p_pdi.c */ - - private final static native void PDF_close_pdi(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_close_pdi_page(long jp, int jarg1) throws PDFlibException; - - private final static native void PDF_fit_pdi_page(long jp, int jpage, float jx, float jy, String joptlist) throws PDFlibException; - - private final static native String PDF_get_pdi_parameter(long jp, String jarg2, int jarg3, int jarg4, int jarg5) throws PDFlibException; - - private final static native float PDF_get_pdi_value(long jp, String jarg1, int jarg2, int jarg3, int jarg4) throws PDFlibException; - - private final static native int PDF_open_pdi(long jp, String jarg1, String jarg2, int jarg3) throws PDFlibException; - - private final static native int PDF_open_pdi_page(long jp, int jarg1, int jarg2, String jarg3) throws PDFlibException; - - private final static native void PDF_place_pdi_page(long jp, int jarg1, float jarg2, float jarg3, float jarg4, float jarg5) throws PDFlibException; - - private final static native int PDF_process_pdi(long jp, int jdoc, int jpage, String joptlist) throws PDFlibException; - - /* p_resource.c */ - - private final static native void PDF_create_pvf(long jp, String jfilename, byte[] jdata, String joptlist) throws PDFlibException; - - private final static native int PDF_delete_pvf(long jp, String jfilename) throws PDFlibException; - - /* p_shading.c */ - - private final static native int PDF_shading(long jp, String jshtype, float jx0, float jy0, float jx1, float jy1, float jc1, float jc2, float jc3, float jc4, String joptlist) throws PDFlibException; - - private final static native int PDF_shading_pattern(long jp, int jshading, String joptlist) throws PDFlibException; - - private final static native void PDF_shfill(long jp, int jshading) throws PDFlibException; - - /* p_template.c */ - - private final static native int PDF_begin_template(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_end_template(long jp) throws PDFlibException; - - /* p_text.c */ - - private final static native void PDF_continue_text(long jp, String jarg1) throws PDFlibException; - - private final static native void PDF_fit_textline(long jp, String jtext, float jx, float jy, String joptlist) throws PDFlibException; - - private final static native void PDF_set_text_pos(long jp, float jarg1, float jarg2) throws PDFlibException; - - private final static native void PDF_show(long jp, String jarg1) throws PDFlibException; - - private final static native int PDF_show_boxed(long jp, String jarg1, float jarg2, float jarg3, float jarg4, float jarg5, String jarg6, String jarg7) throws PDFlibException; - - private final static native void PDF_show_xy(long jp, String jarg1, float jarg2, float jarg3) throws PDFlibException; - - private final static native float PDF_stringwidth(long jp, String jarg1, int jarg2, float jarg3) throws PDFlibException; - - /* p_type3.c */ - - private final static native void PDF_begin_font(long jp, String jname, float ja, float jb, float jc, float jd, float je, float jf, String optlist) throws PDFlibException; - - private final static native void PDF_begin_glyph(long jp, String jname, float jwx, float jllx, float jlly, float jurx, float jury) throws PDFlibException; - - private final static native void PDF_end_font(long jp) throws PDFlibException; - - private final static native void PDF_end_glyph(long jp) throws PDFlibException; - - /* p_xgstate.c */ - - private final static native int PDF_create_gstate(long jp, String joptlist) throws PDFlibException; - - private final static native void PDF_set_gstate(long jp, int jhandle) throws PDFlibException; -} diff --git a/src/libs/pdflib/bind/pdflib/java/pdflib_java.c b/src/libs/pdflib/bind/pdflib/java/pdflib_java.c deleted file mode 100644 index 9dc1ce13d2..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/pdflib_java.c +++ /dev/null @@ -1,3092 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib_java.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * synch'd with pdflib.h 1.151.2.22 - * - * JNI wrapper code for the PDFlib Java binding - * - */ - -#include -#include -#include - -#ifdef OS390 -#define IBM_MVS -#define NEEDSIEEE754 -#define NEEDSLONGLONG -#endif - -#include - -#ifdef OS390 -#include -#endif - -#if defined __ILEC400__ && !defined AS400 -#define AS400 -#endif - -#include "pdflib.h" - -/* figure out whether or not we're running on an EBCDIC-based machine */ -#define ASCII_A 0x41 -#define PLATFORM_A 'A' -#define EBCDIC_A 0xC1 - -#if (ASCII_A != PLATFORM_A && EBCDIC_A == PLATFORM_A) -#define PDFLIB_EBCDIC -#endif - -#ifndef OS390 - -#ifndef int2ll -#define int2ll(a) ((jlong) (a)) -#endif - -#ifndef ll2int -#define ll2int(a) ((int) (a)) -#endif - -#ifndef tofloat -#define tofloat(a) ((jfloat) (a)) -#endif - -#ifndef flt2nat -#define flt2nat(a) ((float) (a)) -#endif - -#endif /* OS390 */ - - -#define NULL_INT NULL -#define PDF_ENV jlong -#define PDF_ENV2PTR(env) *((PDF **) &(env)) - - - -/* Compilers which are not strictly ANSI conforming can set PDF_VOLATILE - * to an empty value. - */ -#ifndef PDF_VOLATILE -#define PDF_VOLATILE volatile -#endif - -/* thread-specific data */ -typedef struct { - jint jdkversion; - jmethodID MID_String_getBytes; /* cached method identifier */ -} pdf_wrapper_data; - -/* This is used in the wrapper functions for thread-safe exception handling */ -#define EXC_STUFF pdf_wrapper_data * PDF_VOLATILE ex - -/* Exception handling */ - -#define PDF_ISNULL(j) (j == (PDF_ENV) 0) - - -#define PDF_JAVA_SANITY_CHECK_VOID(j) \ - if (PDF_ISNULL(j)) { \ - jthrow(jenv, "Must not call any PDFlib method after delete()", \ - 0, "pdflib_java.c"); \ - return; \ - } - -#define PDF_JAVA_SANITY_CHECK(j) \ - if (PDF_ISNULL(j)) { \ - jthrow(jenv, "Must not call any PDFlib method after delete()", \ - 0, "pdflib_java.c"); \ - return _jresult; \ - } - -/* {{{ jthrow */ -static void -jthrow(JNIEnv *jenv, const char *msg, int errnum, const char *apiname) -{ - jclass PDFlibException; - jstring jmsg, japiname; - jmethodID cid; - jthrowable e; - char *classstring; - -#ifndef PDFLIB_EBCDIC - classstring = "com/pdflib/PDFlibException"; - jmsg = (*jenv)->NewStringUTF(jenv, msg); - japiname = (*jenv)->NewStringUTF(jenv, apiname); -#endif /* PDFLIB_EBCDIC */ - - PDFlibException = (*jenv)->FindClass(jenv, classstring); - if (PDFlibException == NULL_INT) { - return; /* Exception thrown */ - } - - /* Get method ID for PDFlibException(String, int, String) constructor */ -#ifndef PDFLIB_EBCDIC - cid = (*jenv)->GetMethodID(jenv, PDFlibException, "", - "(Ljava/lang/String;ILjava/lang/String;)V"); -#endif /* PDFLIB_EBCDIC */ - if (cid == NULL_INT) { - return; /* Exception thrown */ - } - - e = (*jenv)->NewObject(jenv, PDFlibException, cid, jmsg, errnum, japiname); - (*jenv)->Throw(jenv, e); -} -/* }}} */ - -#define pdf_catch PDF_CATCH(p) { \ - jthrow(jenv, PDF_get_errmsg(p), PDF_get_errnum(p), \ - PDF_get_apiname(p)); \ - } - -/* {{{ GetStringPDFChars - * Single-byte sequence for file names e.g.: pick only low bytes from Unicode - * and end with null byte. - */ - -static char * -GetStringPDFChars(PDF *p, JNIEnv *jenv, jstring string) -{ - const jchar *unistring; - char *result; - size_t i, len; - - if (!string) - return NULL; - - len = (size_t) (*jenv)->GetStringLength(jenv, string); - - if (len == (size_t) 0) - return NULL; - - unistring = (*jenv)->GetStringChars(jenv, string, NULL); - - if (!unistring) { - pdf_throw(p, "Java", "GetStringPDFChars", - "JNI internal string allocation failed"); - } - - result = (char *) malloc(len + 1); - - if (!result) { - pdf_throw(p, "Java", "GetStringPDFChars", - "JNI internal string allocation failed"); - } - - /* pick the low-order bytes only */ - for (i = 0; i < len; i++) { - if (unistring[i] > 0xFF) { - pdf_throw(p, "Java", "GetStringPDFChars", - "PDFlib supports only Latin-1 character strings"); - } - result[i] = (char) unistring[i]; - } - - result[i] = '\0'; /* NULL-terminate */ - - (*jenv)->ReleaseStringChars(jenv, string, unistring); - - - return result; -} -/* }}} */ - -#define ReleaseStringPDFChars(jenv, string, chars) \ - if (chars) free(chars); - -#define ReleaseStringJavaChars(jenv, string, chars) \ - if (chars) (*jenv)->ReleaseStringChars(jenv, string, (jchar *) chars); - -/* {{{ GetStringUnicodePDFChars - * Unicode strings (page description text or hyper text strings) - */ -static const jchar * -GetStringUnicodePDFChars(PDF *p, JNIEnv *jenv, jstring string, int *lenP) -{ - const jchar *unistring; - size_t len; - - *lenP = 0; - - if (!string) - return NULL; - - len = (size_t) (*jenv)->GetStringLength(jenv, string); - - if (len == (size_t) 0) - return NULL; - - unistring = (*jenv)->GetStringChars(jenv, string, NULL); - - if (!unistring) { - pdf_throw(p, "Java", "GetStringUnicodePDFChars", - "JNI internal string allocation failed"); - } - - *lenP = (int) (2 * len); - - return unistring; -} -/* }}} */ - -/* {{{ GetStringPDFChars - * Converts a C string to a Java string for - */ - -/* The Unicode byte order mark (BOM) byte parts */ -#define PDF_BOM0 0376 /* '\xFE' */ -#define PDF_BOM1 0377 /* '\xFF' */ - -static jstring -GetNewStringUTF(JNIEnv *jenv, char *cstring) -{ - jstring _jresult = 0; - char *_result = cstring; - - - _jresult = (jstring)(*jenv)->NewStringUTF(jenv, _result); - - - return _jresult; -} -/* }}} */ - - -/* export the PDFlib routines to the shared library */ -#ifdef __MWERKS__ -#pragma export on -#endif - -/* p_annots.c */ - -/* {{{ PDF_add_launchlink */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1launchlink(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jstring jfilename) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE filename = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - - PDF_add_launchlink(p, llx, lly, urx, ury, filename); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); -} -/* }}} */ - -/* {{{ PDF_add_locallink */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1locallink(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jint jpage, jstring joptlist) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - int page; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - page = (int )jpage; - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - PDF_add_locallink(p, llx, lly, urx, ury, page, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_add_note */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1note(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jstring jcontents, jstring jtitle, jstring jicon, jint jopen) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE contents = NULL; - char * PDF_VOLATILE title = NULL; - char * PDF_VOLATILE icon = NULL; - int open; - int clen, tlen; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - contents = (char *)GetStringUnicodePDFChars(p, jenv, jcontents, &clen); - title = (char *)GetStringUnicodePDFChars(p, jenv, jtitle, &tlen); - icon = (char *)GetStringPDFChars(p, jenv, jicon); - open = (int )jopen; - - PDF_add_note2(p, llx, lly, urx, ury, contents, clen, title, tlen, - icon, open); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jcontents, contents); - ReleaseStringJavaChars(jenv, jtitle, title); - ReleaseStringPDFChars(jenv, jicon, icon); -} -/* }}} */ - -/* {{{ PDF_add_pdflink */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1pdflink(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jstring jfilename, jint jpage, jstring joptlist) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE filename = NULL; - int page; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - page = (int )jpage; - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - PDF_add_pdflink(p, llx, lly, urx, ury, filename, page, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_add_weblink */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1weblink(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jstring jurl) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - char *PDF_VOLATILE url = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - url = (char *)GetStringPDFChars(p, jenv, jurl); - - PDF_add_weblink(p, llx, lly, urx, ury, url); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jurl, url); -} -/* }}} */ - -/* {{{ PDF_attach_file */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1attach_1file(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jllx, jfloat jlly, jfloat jurx, jfloat jury, - jstring jfilename, jstring jdescription, jstring jauthor, - jstring jmimetype, jstring jicon) -{ - PDF *p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE filename = NULL; - char * PDF_VOLATILE description = NULL; - char * PDF_VOLATILE author = NULL; - char * PDF_VOLATILE mimetype = NULL; - char * PDF_VOLATILE icon = NULL; - int dlen, alen; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - description = - (char *)GetStringUnicodePDFChars(p, jenv, jdescription, &dlen); - author = (char *)GetStringUnicodePDFChars(p, jenv, jauthor, &alen); - mimetype = (char *)GetStringPDFChars(p, jenv, jmimetype); - icon = (char *)GetStringPDFChars(p, jenv, jicon); - - PDF_attach_file2(p, llx, lly, urx, ury, filename, 0, - description, dlen, author, alen, mimetype, icon); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - ReleaseStringJavaChars(jenv, jdescription, description); - ReleaseStringJavaChars(jenv, jauthor, author); - ReleaseStringPDFChars(jenv, jmimetype, mimetype); - ReleaseStringPDFChars(jenv, jicon, icon); -} -/* }}} */ - -/* {{{ PDF_set_border_color */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1border_1color(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jred, jfloat jgreen, jfloat jblue) -{ - PDF *p; - float red; - float green; - float blue; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - red = flt2nat(jred); - green = flt2nat(jgreen); - blue = flt2nat(jblue); - - PDF_TRY(p) { PDF_set_border_color(p, red, green, blue); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_set_border_dash */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1border_1dash(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jb, jfloat jw) -{ - PDF *p; - float b; - float w; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - b = flt2nat(jb); - w = flt2nat(jw); - - PDF_TRY(p) { PDF_set_border_dash(p, b, w); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_set_border_style */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1border_1style(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jstyle, jfloat jwidth) -{ - PDF *p; - char * PDF_VOLATILE style = NULL; - float width; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - style = (char *)GetStringPDFChars(p, jenv, jstyle); - width = flt2nat(jwidth); - - PDF_set_border_style(p, style, width); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jstyle, style); -} -/* }}} */ - -/* p_basic.c */ - -/* {{{ PDF_boot */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1boot(JNIEnv *jenv, jclass jcls) -{ - /* throws nothing from within the library */ - PDF_boot(); -} -/* }}} */ - -/* {{{ PDF_begin_page */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1begin_1page(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jwidth, jfloat jheight) -{ - PDF *p; - float width; - float height; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - width = flt2nat(jwidth); - height = flt2nat(jheight); - PDF_begin_page(p, width, height); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_close */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1close(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_close(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_delete */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1delete(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - EXC_STUFF; - - /* Different sanity check here since PDF_delete() may be called multiply, - * e.g., once from the finalizer and once explicitly - */ - - if (PDF_ISNULL(jp)) - return; - - p = PDF_ENV2PTR(jp); - - - ex = (pdf_wrapper_data *) (PDF_get_opaque(p)); - free(ex); - - PDF_delete(p); -} -/* }}} */ - -/* {{{ PDF_end_page */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1end_1page(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_end_page(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_get_apiname */ -JNIEXPORT jstring JNICALL -Java_com_pdflib_pdflib_PDF_1get_1apiname(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - jstring PDF_VOLATILE _jresult = 0; - char * PDF_VOLATILE _result = NULL; - PDF *p; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - _result = (char *)PDF_get_apiname(p); - } pdf_catch; - - if(_result) - _jresult = (jstring)GetNewStringUTF(jenv, _result); - return _jresult; -} -/* }}} */ - -/* {{{ PDF_get_buffer */ -JNIEXPORT jbyteArray JNICALL -Java_com_pdflib_pdflib_PDF_1get_1buffer(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - jbyteArray PDF_VOLATILE _jresult = 0; - const unsigned char *buffer; - PDF *p; - long size; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - buffer = (const unsigned char *) PDF_get_buffer(p, &size); - _jresult = (*jenv)->NewByteArray(jenv, (jsize) size); - - if (_jresult == (jbyteArray) NULL) { - pdf_throw(p, "Java", "get_buffer", - "Couldn't allocate PDF output buffer"); - } else { - - (*jenv)->SetByteArrayRegion(jenv, _jresult, - 0, (jsize) size, (jbyte *) buffer); - } - } pdf_catch; - - return _jresult; -} -/* }}} */ - -/* {{{ PDF_get_errnum */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1get_1errnum(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - jint _jresult = 0; - int PDF_VOLATILE _result = 0; - PDF *p; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - _result = PDF_get_errnum(p); - } pdf_catch; - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_get_errmsg */ -JNIEXPORT jstring JNICALL -Java_com_pdflib_pdflib_PDF_1get_1errmsg(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - jstring PDF_VOLATILE _jresult = 0; - char * PDF_VOLATILE _result = NULL; - PDF *p; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - _result = (char *)PDF_get_errmsg(p); - } pdf_catch; - - if(_result) - _jresult = (jstring)GetNewStringUTF(jenv, _result); - return _jresult; -} -/* }}} */ - -/* {{{ PDF_new */ -JNIEXPORT jlong JNICALL -Java_com_pdflib_pdflib_PDF_1new(JNIEnv *jenv, jclass jcls) -{ - jlong _jresult; - PDF * PDF_VOLATILE p = (PDF *) 0; - EXC_STUFF; - char jdkname[64]; - jclass stringClass; - -#ifdef AS400 - int aux = PDF_JAVA_AS400_FIRSTINDEX; - JavaI2L(aux, _jresult); -#else - _jresult = int2ll(0); -#endif - - - if ((ex = malloc(sizeof(pdf_wrapper_data))) == NULL) { - jthrow(jenv, "Couldn't initialize PDFlib (malloc)", 0, "pdflib_java.c"); - return _jresult; - } - - p = (PDF *)PDF_new2(NULL, NULL, NULL, NULL, (void *) ex); - if (p == (PDF *)0) { - jthrow(jenv, "Couldn't initialize PDF object due to memory shortage", - 0, "pdflibp_java.c"); - return _jresult; - } - - PDF_TRY(p) { - ex->jdkversion = (*jenv)->GetVersion(jenv); - - if (((*jenv)->ExceptionOccurred(jenv)) != NULL_INT) { - (*jenv)->ExceptionDescribe(jenv); - return _jresult; - } - - sprintf(jdkname, "JDK %d.%d", - (int) ((ex->jdkversion & 0xFF0000) >> 16), - (int) (ex->jdkversion & 0xFF)); - PDF_set_parameter(p, "binding", jdkname); - - PDF_set_parameter(p, "textformat", "auto2"); - PDF_set_parameter(p, "hypertextformat", "auto2"); - PDF_set_parameter(p, "hypertextencoding", ""); - -/* "java/lang/String */ -#define PDF_java_lang_String \ - "\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67" -#define PDF_getBytes "\x67\x65\x74\x42\x79\x74\x65\x73" /* "getBytes" */ -#define PDF_sig "\x28\x29\x5B\x42" /* "()[B" */ - - stringClass = (*jenv)->FindClass(jenv, PDF_java_lang_String); - - if (stringClass == NULL_INT) { - (*jenv)->ExceptionDescribe(jenv); - jthrow(jenv, - "Couldn't initialize PDFlib (FindClass)", 0, "pdflib_java.c"); -#ifdef AS400 - JavaI2L(0, _jresult); -#else - _jresult = int2ll(0); -#endif - return _jresult; - } - - ex->MID_String_getBytes = - (*jenv)->GetMethodID(jenv, stringClass, PDF_getBytes, PDF_sig); - - if (ex->MID_String_getBytes == NULL_INT) { - (*jenv)->ExceptionDescribe(jenv); - jthrow(jenv, - "Couldn't initialize PDFlib (GetMethodID)", 0, "pdflib_java.c"); - return _jresult; - } - - } pdf_catch; - - -#ifdef AS400 - JavaI2L(aux, _jresult); -#else - *(PDF **)&_jresult = p; -#endif - - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_file */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1file(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfilename) -{ - jint _jresult = -1; - int PDF_VOLATILE _result = -1; - PDF *p; - char * PDF_VOLATILE filename = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - _result = (int )PDF_open_file(p, filename); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_shutdown */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1shutdown(JNIEnv *jenv, jclass jcls) -{ - /* throws nothing */ - PDF_shutdown(); -} -/* }}} */ - -/* p_block.c */ - -/* {{{ PDF_fill_imageblock */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1fill_1imageblock(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage, jstring jblockname, jint jimage, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE blockname = NULL; - char * PDF_VOLATILE optlist = NULL; - int page = (int) jpage; - int image = (int) jimage; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - blockname = (char *)GetStringPDFChars(p, jenv, jblockname); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - _result = (int )PDF_fill_imageblock(p, page, blockname, image, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jblockname, blockname); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_fill_pdfblock */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1fill_1pdfblock(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage, jstring jblockname, jint jcontents, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE blockname = NULL; - char * PDF_VOLATILE optlist = NULL; - int page = (int) jpage; - int contents = (int) jcontents; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - blockname = (char *)GetStringPDFChars(p, jenv, jblockname); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - _result = - (int )PDF_fill_pdfblock(p, page, blockname, contents, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jblockname, blockname); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_fill_textblock */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1fill_1textblock(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage, jstring jblockname, jstring jtext, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - int page = (int) jpage; - char * PDF_VOLATILE blockname = NULL; - char * PDF_VOLATILE text = NULL; - char * PDF_VOLATILE optlist = NULL; - int tlen; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - blockname = (char *)GetStringPDFChars(p, jenv, jblockname); - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &tlen); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - _result = (int )PDF_fill_textblock(p, page, blockname, - text, tlen, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jblockname, blockname); - ReleaseStringJavaChars(jenv, jtext, text); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* p_color.c */ - -/* {{{ PDF_makespotcolor */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1makespotcolor(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jspotname) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE spotname = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - spotname = (char *)GetStringPDFChars(p, jenv, jspotname); - _result = (int )PDF_makespotcolor(p, spotname, 0); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jspotname, spotname); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_setcolor */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setcolor(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfstype, jstring jcolorspace, jfloat jc1, jfloat jc2, - jfloat jc3, jfloat jc4) -{ - PDF *p; - char * PDF_VOLATILE fstype = NULL; - char * PDF_VOLATILE colorspace = NULL; - float c1; - float c2; - float c3; - float c4; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - c1 = flt2nat(jc1); - c2 = flt2nat(jc2); - c3 = flt2nat(jc3); - c4 = flt2nat(jc4); - - PDF_TRY(p) { - fstype = (char *)GetStringPDFChars(p, jenv, jfstype); - colorspace = (char *)GetStringPDFChars(p, jenv, jcolorspace); - PDF_setcolor(p, fstype, colorspace, c1, c2, c3, c4); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfstype, fstype); - ReleaseStringPDFChars(jenv, jcolorspace, colorspace); -} -/* }}} */ - -/* p_draw.c */ - -/* {{{ PDF_arc */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1arc(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy, jfloat jr, jfloat jalpha, - jfloat jbeta) -{ - PDF *p; - float x; - float y; - float r; - float alpha; - float beta; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - r = flt2nat(jr); - alpha = flt2nat(jalpha); - beta = flt2nat(jbeta); - - PDF_arc(p, x, y, r, alpha, beta); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_arcn */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1arcn(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy, jfloat jr, jfloat jalpha, - jfloat jbeta) -{ - PDF *p; - float x; - float y; - float r; - float alpha; - float beta; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - r = flt2nat(jr); - alpha = flt2nat(jalpha); - beta = flt2nat(jbeta); - - PDF_arcn(p, x, y, r, alpha, beta); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_circle */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1circle(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy, jfloat jr) -{ - PDF *p; - float x; - float y; - float r; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - r = flt2nat(jr); - PDF_circle(p,x,y,r); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_clip */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1clip(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_clip(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_closepath */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1closepath(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_closepath(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_closepath_fill_stroke */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1closepath_1fill_1stroke(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_closepath_fill_stroke(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_closepath_stroke */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1closepath_1stroke(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_closepath_stroke(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_curveto */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1curveto(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx1, jfloat jy1, jfloat jx2, jfloat jy2, - jfloat jx3, jfloat jy3) -{ - PDF *p; - float x1; - float y1; - float x2; - float y2; - float x3; - float y3; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x1 = flt2nat(jx1); - y1 = flt2nat(jy1); - x2 = flt2nat(jx2); - y2 = flt2nat(jy2); - x3 = flt2nat(jx3); - y3 = flt2nat(jy3); - - PDF_curveto(p, x1, y1, x2, y2, x3, y3); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_endpath */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1endpath(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_endpath(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_fill */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1fill(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_fill(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_fill_stroke */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1fill_1stroke(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_fill_stroke(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_lineto */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1lineto(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy) -{ - PDF *p; - float x; - float y; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - - PDF_lineto(p, x, y); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_moveto */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1moveto(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy) -{ - PDF *p; - float x; - float y; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - - PDF_moveto(p, x, y); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_rect */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1rect(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy, jfloat jwidth, jfloat jheight) -{ - PDF *p; - float x; - float y; - float width; - float height; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - width = flt2nat(jwidth); - height = flt2nat(jheight); - - PDF_rect(p, x, y, width, height); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_stroke */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1stroke(JNIEnv *jenv, jclass jcls, PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_stroke(p); - } pdf_catch; -} -/* }}} */ - -/* p_encoding.c */ - -/* {{{ PDF_encoding_set_char */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1encoding_1set_1char(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jencoding, jint jslot, jstring jglyphname, jint juv) -{ - PDF *p; - char * PDF_VOLATILE encoding = NULL; - int slot; - char * PDF_VOLATILE glyphname = NULL; - int uv; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - encoding = (char *)GetStringPDFChars(p, jenv, jencoding); - slot = (int)jslot; - glyphname = (char *)GetStringPDFChars(p, jenv, jglyphname); - uv = (int)juv; - - PDF_encoding_set_char(p, encoding, slot, glyphname, uv); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jencoding, encoding); - ReleaseStringPDFChars(jenv, jglyphname, glyphname); -} -/* }}} */ - -/* p_font.c */ - -/* {{{ PDF_findfont */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1findfont(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfontname, jstring jencoding, jint jembed) -{ - jint _jresult = -1; - int PDF_VOLATILE _result = -1; - PDF *p; - char * PDF_VOLATILE fontname = NULL; - char * PDF_VOLATILE encoding = NULL; - int embed; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - fontname = (char *)GetStringPDFChars(p, jenv, jfontname); - encoding = (char *)GetStringPDFChars(p, jenv, jencoding); - embed = (int )jembed; - - _result = (int )PDF_findfont(p, fontname, encoding, embed); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfontname, fontname); - ReleaseStringPDFChars(jenv, jencoding, encoding); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_load_font */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1load_1font(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfontname, jstring jencoding, jstring joptlist) -{ - jint _jresult = -1; - int PDF_VOLATILE _result = -1; - PDF *p; - char * PDF_VOLATILE fontname = NULL; - char * PDF_VOLATILE encoding = NULL; - char * PDF_VOLATILE optlist = NULL; - int len1; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - fontname = (char *)GetStringUnicodePDFChars(p, jenv, jfontname, &len1); - encoding = (char *)GetStringPDFChars(p, jenv, jencoding); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_load_font(p,fontname, len1, encoding, optlist); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jfontname, fontname); - ReleaseStringPDFChars(jenv, jencoding, encoding); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_setfont */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setfont(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jfont, jfloat jfontsize) -{ - PDF *p; - int font; - float fontsize; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - font = (int )jfont; - fontsize = flt2nat(jfontsize); - PDF_setfont(p, font, fontsize); - } pdf_catch; -} -/* }}} */ - -/* p_gstate.c */ - -/* {{{ PDF_concat */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1concat(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat a, jfloat b, jfloat c, jfloat d, jfloat e, jfloat f) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - PDF_concat(p, flt2nat(a), flt2nat(b), flt2nat(c), flt2nat(d), - flt2nat(e), flt2nat(f)); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_initgraphics */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1initgraphics(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_initgraphics(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_restore */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1restore(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_restore(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_rotate */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1rotate(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jphi) -{ - PDF *p; - float phi; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - phi = flt2nat(jphi); - - PDF_TRY(p) { PDF_rotate(p, phi); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_save */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1save(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_save(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_scale */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1scale(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jsx, jfloat jsy) -{ - PDF *p; - float sx; - float sy; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - sx = flt2nat(jsx); - sy = flt2nat(jsy); - - PDF_scale(p, sx, sy); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setdash */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setdash(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jb, jfloat jw) -{ - PDF *p; - float b; - float w; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - b = flt2nat(jb); - w = flt2nat(jw); - - PDF_setdash(p, b, w); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setdashpattern */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setdashpattern(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring joptlist) -{ - PDF *p; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - PDF_setdashpattern(p, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_setflat */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setflat(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jflatness) -{ - PDF *p; - float flatness; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - flatness = flt2nat(jflatness); - - PDF_setflat(p, flatness); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setlinecap */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setlinecap(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jlinecap) -{ - PDF *p; - int linecap; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - linecap = (int )jlinecap; - - PDF_setlinecap(p, linecap); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setlinejoin */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setlinejoin(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jlinejoin) -{ - PDF *p; - int linejoin; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - linejoin = (int )jlinejoin; - - PDF_setlinejoin(p, linejoin); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setlinewidth */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setlinewidth(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jwidth) -{ - PDF *p; - float width; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - width = flt2nat(jwidth); - - PDF_setlinewidth(p, width); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setmatrix */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setmatrix(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat ja, jfloat jb, jfloat jc, jfloat jd, - jfloat je, jfloat jf) -{ - PDF *p; - float a; - float b; - float c; - float d; - float e; - float f; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - a = flt2nat(ja); - b = flt2nat(jb); - c = flt2nat(jc); - d = flt2nat(jd); - e = flt2nat(je); - f = flt2nat(jf); - - PDF_setmatrix(p, a, b, c, d, e, f); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setmiterlimit */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setmiterlimit(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jmiter) -{ - PDF *p; - float miter; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - miter = flt2nat(jmiter); - - PDF_setmiterlimit(p, miter); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_setpolydash */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1setpolydash(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloatArray jdasharray) -{ - PDF *p; - float carray[MAX_DASH_LENGTH]; - jfloat* javaarray; - int i; - jsize PDF_VOLATILE length; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - length = (*jenv)->GetArrayLength(jenv, jdasharray); - if (length > MAX_DASH_LENGTH) - length = MAX_DASH_LENGTH; - - javaarray = (*jenv)->GetFloatArrayElements(jenv, jdasharray, 0); - - for(i=0; i < length; i++) - carray[i] = flt2nat(javaarray[i]); - - PDF_setpolydash(p, carray, length); - (*jenv)->ReleaseFloatArrayElements(jenv, jdasharray, javaarray, 0); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_skew */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1skew(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jalpha, jfloat jbeta) -{ - PDF *p; - float alpha; - float beta; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - alpha = flt2nat(jalpha); - beta = flt2nat(jbeta); - - PDF_skew(p, alpha, beta); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_translate */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1translate(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jtx, jfloat jty) -{ - PDF *p; - float tx; - float ty; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - tx = flt2nat(jtx); - ty = flt2nat(jty); - - PDF_translate(p, tx, ty); - } pdf_catch; -} -/* }}} */ - -/* p_hyper.c */ - -/* {{{ PDF_add_bookmark */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1add_1bookmark(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext, jint jparent, jint jopen) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE text = NULL; - int parent; - int open; - int len1; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - parent = (int )jparent; - open = (int )jopen; - - _result = (int )PDF_add_bookmark2(p, text, len1, parent, open); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_add_nameddest */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1nameddest(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jname, jstring joptlist) -{ - PDF *p; - char * PDF_VOLATILE name = NULL; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - name = (char *)GetStringPDFChars(p, jenv, jname); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - PDF_add_nameddest(p, name, 0, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jname, name); - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_set_info */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1info(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jstring jvaluex) -{ - PDF *p; - char * PDF_VOLATILE key = NULL; - char * PDF_VOLATILE value = NULL; - int len2; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - key = (char *)GetStringPDFChars(p, jenv, jkey); - value = (char *)GetStringUnicodePDFChars(p, jenv, jvaluex, &len2); - - PDF_set_info2(p, key, value, len2); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - ReleaseStringJavaChars(jenv, jvaluex, value); -} -/* }}} */ - -/* p_icc.c */ - -/* {{{ PDF_load_iccprofile */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1load_1iccprofile(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jprofilename, jstring joptlist) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE profilename = NULL; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - profilename = (char *)GetStringPDFChars(p, jenv, jprofilename); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_load_iccprofile(p, profilename, 0, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jprofilename, profilename); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* p_image.c */ - -/* {{{ PDF_add_thumbnail */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1add_1thumbnail(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jimage) -{ - PDF *p; - int image; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - image = (int )jimage; - - PDF_add_thumbnail(p, image); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_close_image */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1close_1image(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jimage) -{ - PDF *p; - int image; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - image = (int )jimage; - - PDF_close_image(p, image); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_fit_image */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1fit_1image(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jimage, jfloat jx, jfloat jy, jstring joptlist) -{ - PDF *p; - int image; - float x; - float y; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - optlist = (char *) GetStringPDFChars(p, jenv, joptlist); - image = (int)jimage; - x = flt2nat(jx); - y = flt2nat(jy); - PDF_fit_image(p, image, x, y, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_load_image */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1load_1image(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jimagetype, jstring jfilename, jstring joptlist) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE imagetype = NULL; - char * PDF_VOLATILE filename = NULL; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - imagetype = (char *)GetStringPDFChars(p, jenv, jimagetype); - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_load_image(p, imagetype, filename, 0, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jimagetype, imagetype); - ReleaseStringPDFChars(jenv, jfilename, filename); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_CCITT */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1CCITT(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfilename, jint jwidth, jint jheight, jint jBitReverse, - jint jK, jint jBlackIs1) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE filename = NULL; - int width; - int height; - int BitReverse; - int K; - int BlackIs1; - - PDF_JAVA_SANITY_CHECK(jp); - - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - width = (int )jwidth; - height = (int )jheight; - BitReverse = (int )jBitReverse; - K = (int )jK; - BlackIs1 = (int )jBlackIs1; - - _result = (int )PDF_open_CCITT(p, filename, width, height, BitReverse, - K, BlackIs1); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_image */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1image(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jimagetype, jstring jsource, jbyteArray jdata, - jlong jlength, jint jwidth, jint jheight, jint jcomponents, - jint jbpc, jstring jparams) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE imagetype = NULL; - char * PDF_VOLATILE source = NULL; - char * PDF_VOLATILE data = NULL; -#ifdef OS390 - int ilength; -#endif - long length; - int width; - int height; - int components; - int bpc; - char * PDF_VOLATILE params = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - data = (char *) - (*jenv)->GetByteArrayElements(jenv, jdata, (jboolean *) NULL); - imagetype = (char *)GetStringPDFChars(p, jenv, jimagetype); - source = (char *)GetStringPDFChars(p, jenv, jsource); - -#ifdef AS400 - /* deal with the AS/400's idea of a jlong... */ - JavaL2I(jlength, length); -#elif OS390 - ilength = ll2int(jlength); - length = (long )ilength; -#else - length = (long )jlength; -#endif - - width = (int )jwidth; - height = (int )jheight; - components = (int )jcomponents; - bpc = (int )jbpc; - params = (char *)GetStringPDFChars(p, jenv, jparams); - - _result = (int )PDF_open_image(p, imagetype, source, data, length, - width, height, components, bpc, params); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jimagetype, imagetype); - ReleaseStringPDFChars(jenv, jsource, source); - (*jenv)->ReleaseByteArrayElements(jenv, jdata, (jbyte*) data, JNI_ABORT); - ReleaseStringPDFChars(jenv, jparams, params); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_image_file */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1image_1file(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jimagetype, jstring jfilename, jstring jstringparam, - jint jintparam) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE imagetype = NULL; - char * PDF_VOLATILE filename = NULL; - char * PDF_VOLATILE stringparam = NULL; - int intparam; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - imagetype = (char *)GetStringPDFChars(p, jenv, jimagetype); - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - stringparam = (char *)GetStringPDFChars(p, jenv, jstringparam); - intparam = (int )jintparam; - - _result = (int )PDF_open_image_file(p, imagetype, filename, - stringparam, intparam); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jimagetype, imagetype); - ReleaseStringPDFChars(jenv, jfilename, filename); - ReleaseStringPDFChars(jenv, jstringparam, stringparam); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_place_image */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1place_1image(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jimage, jfloat jx, jfloat jy, jfloat jscale) -{ - PDF *p; - int image; - float x; - float y; - float scale; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - image = (int )jimage; - x = flt2nat(jx); - y = flt2nat(jy); - scale = flt2nat(jscale); - - PDF_place_image(p, image, x, y, scale); - } pdf_catch; -} -/* }}} */ - -/* p_params.c */ - -/* {{{ PDF_get_parameter */ -JNIEXPORT jstring JNICALL -Java_com_pdflib_pdflib_PDF_1get_1parameter(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jfloat jmodifier) -{ - jstring PDF_VOLATILE _jresult = 0; - char * PDF_VOLATILE _result = NULL; - char * PDF_VOLATILE key = NULL; - float modifier; - PDF *p; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - key = (char *) GetStringPDFChars(p, jenv, jkey); - modifier = flt2nat(jmodifier); - - _result = (char *)PDF_get_parameter(p, key, modifier); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - - if(_result) - _jresult = (jstring)GetNewStringUTF(jenv, _result); - return _jresult; -} -/* }}} */ - -/* {{{ PDF_get_value */ -JNIEXPORT jfloat JNICALL -Java_com_pdflib_pdflib_PDF_1get_1value(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jfloat jvaluex) -{ - jfloat _jresult = tofloat(0); - float PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE key = NULL; - float value; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - key = (char *) GetStringPDFChars(p, jenv, jkey); - value = flt2nat(jvaluex); - - _result = (float )PDF_get_value(p, key, value); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - - _jresult = tofloat(_result); - return _jresult; -} -/* }}} */ - -/* {{{ PDF_set_parameter */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1parameter(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jstring jvaluex) -{ - PDF *p; - char * PDF_VOLATILE key = NULL; - char * PDF_VOLATILE value = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - key = (char *)GetStringPDFChars(p, jenv, jkey); - value = (char *)GetStringPDFChars(p, jenv, jvaluex); - - PDF_set_parameter(p, key, value); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - ReleaseStringPDFChars(jenv, jvaluex, value); -} -/* }}} */ - -/* {{{ PDF_set_value */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1value(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jfloat jvaluex) -{ - PDF *p; - char * PDF_VOLATILE key = NULL; - float value; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - key = (char *) GetStringPDFChars(p, jenv, jkey); - value = flt2nat(jvaluex); - - PDF_set_value(p, key, value); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); -} -/* }}} */ - -/* p_pattern.c */ - -/* {{{ PDF_begin_pattern */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1begin_1pattern(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jwidth, jfloat jheight, jfloat jxstep, jfloat jystep, - jint jpainttype) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - float width; - float height; - float xstep; - float ystep; - int painttype; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - width = flt2nat(jwidth); - height = flt2nat(jheight); - xstep = flt2nat(jxstep); - ystep = flt2nat(jystep); - painttype = (int)jpainttype; - - _result = (int )PDF_begin_pattern(p, width, height, xstep, - ystep, painttype); - } pdf_catch; - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_end_pattern */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1end_1pattern(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_end_pattern(p); - } pdf_catch; -} -/* }}} */ - -/* p_pdi.c */ -/* {{{ PDF_close_pdi */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1close_1pdi(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jdoc) -{ - PDF *p; - int doc; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - doc = (int )jdoc; - - PDF_close_pdi(p, doc); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_close_pdi_page */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1close_1pdi_1page(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage) -{ - PDF *p; - int page; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - page = (int )jpage; - - PDF_close_pdi_page(p, page); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_fit_pdi_page */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1fit_1pdi_1page(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage, jfloat jx, jfloat jy, jstring joptlist) -{ - PDF *p; - int page; - float x; - float y; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - page = (int) jpage; - x = flt2nat(jx); - y = flt2nat(jy); - optlist = (char *) GetStringPDFChars(p, jenv, joptlist); - - PDF_fit_pdi_page(p, page, x, y, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_get_pdi_parameter */ -JNIEXPORT jstring JNICALL -Java_com_pdflib_pdflib_PDF_1get_1pdi_1parameter(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jint jdoc, jint jpage, jint jreserved) -{ - PDF *p; - jstring PDF_VOLATILE _jresult = 0; - char * PDF_VOLATILE _result = NULL; - char * PDF_VOLATILE key = NULL; - int doc; - int page; - int reserved; - int len; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - doc = (int )jdoc; - page = (int )jpage; - reserved = (int )jreserved; - key = (char *)GetStringPDFChars(p, jenv, jkey); - - _result = (char *) - PDF_get_pdi_parameter(p, key, doc, page, reserved, &len); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - - /* TODO: return a Unicode string based on _result and len */ - if(_result != NULL) - _jresult = (jstring)GetNewStringUTF(jenv, _result); - return _jresult; -} -/* }}} */ - -/* {{{ PDF_get_pdi_value */ -JNIEXPORT jfloat JNICALL -Java_com_pdflib_pdflib_PDF_1get_1pdi_1value(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jkey, jint jdoc, jint jpage, jint jreserved) -{ - PDF *p; - jfloat _jresult = tofloat(0); - jfloat PDF_VOLATILE _result = tofloat(0); - char * PDF_VOLATILE key = NULL; - int doc; - int page; - int reserved; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - doc = (int )jdoc; - page = (int )jpage; - reserved = (int )jreserved; - key = (char *)GetStringPDFChars(p, jenv, jkey); - - _result = tofloat(PDF_get_pdi_value(p, key, doc, page, reserved)); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jkey, key); - - _jresult = _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_pdi */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1pdi(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfilename, jstring joptlist, jint jreserved) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE filename = NULL; - char * PDF_VOLATILE optlist = NULL; - int reserved; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - reserved = (int )jreserved; - - _result = (int )PDF_open_pdi(p, filename, optlist, reserved); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_open_pdi_page */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1open_1pdi_1page(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jdoc, jint jpagenumber, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - int doc; - int pagenumber; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - doc = (int )jdoc; - pagenumber = (int )jpagenumber; - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_open_pdi_page(p, doc, pagenumber, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_place_pdi_page */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1place_1pdi_1page(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jpage, jfloat jx, jfloat jy, jfloat jsx, jfloat jsy) -{ - PDF *p; - int page; - float x; - float y; - float sx; - float sy; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - page = (int )jpage; - x = flt2nat(jx); - y = flt2nat(jy); - sx = flt2nat(jsx); - sy = flt2nat(jsy); - - PDF_place_pdi_page(p, page, x, y, sx, sy); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_process_pdi */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1process_1pdi(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jdoc, jint jpage, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - int doc; - int page; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - doc = (int )jdoc; - page = (int )jpage; - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_process_pdi(p, doc, page, optlist); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* p_resource.c */ - -/* {{{ PDF_create_pvf */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1create_1pvf(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfilename, jbyteArray jdata, jstring joptlist) -{ - PDF *p; - char * PDF_VOLATILE filename = NULL; - char * PDF_VOLATILE data = NULL; - char * PDF_VOLATILE optlist = NULL; - size_t dlen; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - filename = (char *) GetStringPDFChars(p, jenv, jfilename); - dlen = (*jenv)->GetArrayLength(jenv, jdata); - data = (char *) - (*jenv)->GetByteArrayElements(jenv, jdata, (jboolean *) NULL); - optlist = (char *) GetStringPDFChars(p, jenv, joptlist); - - /* TODO: append "copy" to existing optlist, if optlist changes */ - PDF_create_pvf(p, filename, 0, data, dlen, "copy"); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - (*jenv)->ReleaseByteArrayElements(jenv, jdata, (jbyte*) data, JNI_ABORT); - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_delete_pvf */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1delete_1pvf(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfilename) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE filename = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - filename = (char *)GetStringPDFChars(p, jenv, jfilename); - - _result = (int )PDF_delete_pvf(p, filename, 0); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfilename, filename); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* p_shading.c */ - -/* {{{ PDF_shading */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1shading(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jshtype, jfloat jx0, jfloat jy0, jfloat jx1, jfloat jy1, - jfloat jc1, jfloat jc2, jfloat jc3, jfloat jc4, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE shtype = NULL; - char * PDF_VOLATILE optlist = NULL; - float x0, y0, x1, y1, c1, c2, c3, c4; - - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - shtype = (char *)GetStringPDFChars(p, jenv, jshtype); - x0 = flt2nat(jx0); - y0 = flt2nat(jy0); - x1 = flt2nat(jx1); - y1 = flt2nat(jy1); - c1 = flt2nat(jc1); - c2 = flt2nat(jc2); - c3 = flt2nat(jc3); - c4 = flt2nat(jc4); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_shading(p, shtype, x0, y0, x1, y1, c1, c2, c3, c4, - optlist); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, jshtype, shtype); - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_shading_pattern */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1shading_1pattern(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jshading, jstring joptlist) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - char * PDF_VOLATILE optlist = NULL; - int shading; - - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - shading = (int)jshading; - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = (int )PDF_shading_pattern(p, shading, optlist); - - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_shfill */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1shfill(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jshading) -{ - PDF *p; - int shading; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - shading = (int )jshading; - - PDF_shfill(p, shading); - } pdf_catch; -} -/* }}} */ - -/* p_template.c */ - -/* {{{ PDF_begin_template */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1begin_1template(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jwidth, jfloat jheight) -{ - PDF *p; - jint _jresult = 0; - int PDF_VOLATILE _result = -1; - float width; - float height; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - width = flt2nat(jwidth); - height = flt2nat(jheight); - - _result = (int )PDF_begin_template(p, width, height); - } pdf_catch; - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_end_template */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1end_1template(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_end_template(p); - } pdf_catch; -} -/* }}} */ - -/* p_text.c */ - -/* {{{ PDF_continue_text */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1continue_1text(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext) -{ - PDF *p; - char * PDF_VOLATILE text = NULL; - int len1; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - - PDF_continue_text2(p, text, len1); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); -} -/* }}} */ - -/* {{{ PDF_fit_textline */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1fit_1textline(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext, jfloat jx, jfloat jy, jstring joptlist) -{ - PDF *p; - char * PDF_VOLATILE text = NULL; - float x; - float y; - char * PDF_VOLATILE optlist = NULL; - int len; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len); - x = flt2nat(jx); - y = flt2nat(jy); - optlist = (char *) GetStringPDFChars(p, jenv, joptlist); - - PDF_fit_textline(p, text, len, x, y, optlist); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_set_text_pos */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1text_1pos(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jfloat jx, jfloat jy) -{ - PDF *p; - float x; - float y; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - x = flt2nat(jx); - y = flt2nat(jy); - - PDF_set_text_pos(p, x, y); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_show */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1show(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext) -{ - PDF *p; - char * PDF_VOLATILE text = NULL; - int len1; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - - PDF_show2(p, text, len1); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); -} -/* }}} */ - -/* {{{ PDF_show_boxed */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1show_1boxed(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext, jfloat jleft, jfloat jtop, jfloat jwidth, - jfloat jheight, jstring jhmode, jstring jfeature) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE text = NULL; - float left; - float top; - float width; - float height; - char * PDF_VOLATILE hmode = NULL; - char * PDF_VOLATILE feature = NULL; - int len1; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - left = flt2nat(jleft); - top = flt2nat(jtop); - width = flt2nat(jwidth); - height = flt2nat(jheight); - hmode = (char *)GetStringPDFChars(p, jenv, jhmode); - feature = (char *)GetStringPDFChars(p, jenv, jfeature); - - _result = PDF_show_boxed2(p, text, len1, left, top, width, height, - hmode, feature); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); - ReleaseStringPDFChars(jenv, jhmode, hmode); - ReleaseStringPDFChars(jenv, jfeature, feature); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_show_xy */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1show_1xy(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext, jfloat jx, jfloat jy) -{ - PDF *p; - char * PDF_VOLATILE text = NULL; - float x; - float y; - int len1; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - x = flt2nat(jx); - y = flt2nat(jy); - - PDF_show_xy2(p, text, len1, x, y); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); -} -/* }}} */ - -/* {{{ PDF_stringwidth */ -JNIEXPORT jfloat JNICALL -Java_com_pdflib_pdflib_PDF_1stringwidth(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jtext, jint jfont, jfloat jfontsize) -{ - jfloat _jresult = tofloat(0); - float PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE text = NULL; - int font; - float fontsize; - int len1; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - text = (char *)GetStringUnicodePDFChars(p, jenv, jtext, &len1); - font = (int )jfont; - fontsize = flt2nat(jfontsize); - - _result = (float )PDF_stringwidth2(p, text, len1, font, fontsize); - } pdf_catch; - - ReleaseStringJavaChars(jenv, jtext, text); - - _jresult = tofloat(_result); - return _jresult; -} -/* }}} */ - -/* p_type3.c */ - -/* {{{ PDF_begin_font */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1begin_1font(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jfontname, jfloat ja, jfloat jb, jfloat jc, - jfloat jd, jfloat je, jfloat jf, jstring joptlist) -{ - PDF *p; - char * PDF_VOLATILE fontname = NULL; - float a; - float b; - float c; - float d; - float e; - float f; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - fontname = (char *)GetStringPDFChars(p, jenv, jfontname); - a = flt2nat(ja); - b = flt2nat(jb); - c = flt2nat(jc); - d = flt2nat(jd); - e = flt2nat(je); - f = flt2nat(jf); - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - PDF_begin_font(p, fontname, 0, a, b, c, d, e, f, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jfontname, fontname); - ReleaseStringPDFChars(jenv, joptlist, optlist); -} -/* }}} */ - -/* {{{ PDF_begin_glyph */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1begin_1glyph(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring jglyphname, jfloat jwx, jfloat jllx, jfloat jlly, - jfloat jurx, jfloat jury) -{ - PDF *p; - char * PDF_VOLATILE glyphname = NULL; - float wx; - float llx; - float lly; - float urx; - float ury; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - glyphname = (char *)GetStringPDFChars(p, jenv, jglyphname); - wx = flt2nat(jwx); - llx = flt2nat(jllx); - lly = flt2nat(jlly); - urx = flt2nat(jurx); - ury = flt2nat(jury); - - PDF_begin_glyph(p, glyphname, wx, llx, lly, urx, ury); - } pdf_catch; - - ReleaseStringPDFChars(jenv, jglyphname, glyphname); -} -/* }}} */ - -/* {{{ PDF_end_font */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1end_1font(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_end_font(p); - } pdf_catch; -} -/* }}} */ - -/* {{{ PDF_end_glyph */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1end_1glyph(JNIEnv *jenv, jclass jcls, - PDF_ENV jp) -{ - PDF *p; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { PDF_end_glyph(p); - } pdf_catch; -} -/* }}} */ - -/* p_xgstate.c */ - -/* {{{ PDF_create_gstate */ -JNIEXPORT jint JNICALL -Java_com_pdflib_pdflib_PDF_1create_1gstate(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jstring joptlist) -{ - jint _jresult = 0; - int PDF_VOLATILE _result; - PDF *p; - char * PDF_VOLATILE optlist = NULL; - - PDF_JAVA_SANITY_CHECK(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - optlist = (char *)GetStringPDFChars(p, jenv, joptlist); - - _result = PDF_create_gstate(p, optlist); - } pdf_catch; - - ReleaseStringPDFChars(jenv, joptlist, optlist); - - _jresult = (jint) _result; - return _jresult; -} -/* }}} */ - -/* {{{ PDF_set_gstate */ -JNIEXPORT void JNICALL -Java_com_pdflib_pdflib_PDF_1set_1gstate(JNIEnv *jenv, jclass jcls, - PDF_ENV jp, jint jgstate) -{ - PDF *p; - int gstate; - - PDF_JAVA_SANITY_CHECK_VOID(jp); - p = PDF_ENV2PTR(jp); - - PDF_TRY(p) { - gstate = (int)jgstate; - - PDF_set_gstate(p, gstate); - } pdf_catch; -} -/* }}} */ - -/* - * vim600: sw=4 fdm=marker - */ diff --git a/src/libs/pdflib/bind/pdflib/java/quickreference.java b/src/libs/pdflib/bind/pdflib/java/quickreference.java deleted file mode 100644 index 7cfe836f8b..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/quickreference.java +++ /dev/null @@ -1,97 +0,0 @@ -/* $Id: quickreference.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib/PDI client: mini imposition demo - */ - -import java.io.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class quickreference -{ - public static void main (String argv[]) - { - int manual, page; - int font, row, col; - final int maxrow = 2, maxcol = 2; - int i, startpage = 1, endpage = 4; - final float width = 500, height = 770; - int pageno; - pdflib p = null; - String infile = "reference.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - - try{ - p = new pdflib(); - - if (p.open_file("quickreference.pdf") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "quickreference.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "imposition demo (Java)"); - - manual = p.open_pdi(infile, "", 0); - if (manual == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - row = 0; - col = 0; - - p.set_parameter("topdown", "true"); - - for (pageno = startpage; pageno <= endpage; pageno++) { - if (row == 0 && col == 0) { - p.begin_page(width, height); - font = p.load_font("Helvetica-Bold", "winansi", ""); - p.setfont(font, 18); - p.set_text_pos(24, 24); - p.show("PDFlib Quick Reference"); - } - - page = p.open_pdi_page(manual, pageno, ""); - - if (page == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.fit_pdi_page(manual, width/maxcol*col, - (row + 1) * height/maxrow, "scale " + (float)1/maxrow); - p.close_pdi_page(page); - - col++; - if (col == maxcol) { - col = 0; - row++; - } - if (row == maxrow) { - row = 0; - p.end_page(); - } - } - - // finish the last partial page - if (row != 0 || col != 0) - p.end_page(); - - p.close(); - p.close_pdi(manual); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in quickreference sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/readme.txt b/src/libs/pdflib/bind/pdflib/java/readme.txt deleted file mode 100644 index af2bc104e8..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/readme.txt +++ /dev/null @@ -1,232 +0,0 @@ -Using the JSP and servlet examples -================================== - -Before using the examples you must either copy the relevant -image and PDF files to an appropriate location, or modify -the paths in the source code to point to the sample files. - -Note: If you find corrections to the instructions below, or -can contribute configuration hints for other environments -we'll be happy to hear from you -- please send all suggestions -to support@pdflib.com. - - -Exception: PDFlib already loaded in another classloader -======================================================= - -When using PDFlib (on any platform) with an application server you -may encounter the following exception: - -java.lang.UnsatisfiedLinkError: Native Library -C:\WINNT\system32\pdf_java.dll already loaded in another classloader - -This is caused by multiple classloaders trying to load the PDFlib class, -and therefore the PDFlib native libary, into the server's address space -simultaneously. The problem can be avoided by putting pdflib.jar into -the global class path instead of the classpath of the web application. -The PDFlib shared library/DLL should still be placed in an accessible -system directory. - -For example, for Tomcat consider the following directories for pdflib.jar: -bad: WEB-INF/lib -good: $CATALINA_HOME/shared/lib - - -Using PDFlib with IBM Visual Age for Java -========================================== - -- Add pdflib.jar to your project. - -- Place pdf_java.dll in the \winnt\system32 directory, or some - other directory contained in the PATH environment variable. - -- Relative pathnames in PDFlib function calls are interpreted relative - to the java bin directory, not the project directory. For this reason - the output of the supplied PDFlib samples may end up in some strange - place. Absolute path names work. - - -Using PDFlib with Borland JBuilder -================================== - -- Having pdflib.java in the same directory as the project file - seems to confuse JBuilder. - -- On Windows pdf_java.dll must be placed in the \winnt\system32 directory, - or some other directory contained in the PATH environment variable. - On Linux libpdf_java.so should be placed in /usr/lib or a similar - well-known (to the system) directory. - -- Relative pathnames in PDFlib function calls are interpreted relative - to the JBuilder bin directory, not the project directory. For this - reason the output of the supplied PDFlib samples may end up in some - strange place. Absolute path names work. - - -Using PDFlib with MacroMedia ColdFusion MX -========================================== - -We recommend the PDFlib Java edition (instead of the COM edition) for -use with ColdFusion MX. Install the PDFlib Java edition by extracting -pdflib.jar and pdf_java.dll into a folder defined in ColdFusion MX's -Java classpath and the system's PATH variable (might as well just use -C:/CFusionMX/lib). If you previously used the PDFlib COM edition -with ColdFusion you have to change the tag parameters in -the CF file as follows: - - - - -Using PDFlib with Allaire JRun -============================== - -In order to use PDFlib with JRun the following is suggested: - -- Copy PDFlib.jar and lib_java.dll to the .../JRun/servers/lib directory. - -- Make sure that the lib directory is contained in the servlet.jnipath - property. This property can be set from the management console, or - specified in a local.properties file. - - -Using PDFlib with J2EE-compliant servers -======================================== - -In order to use PDFlib with J2EE do the following: - -- Add the following lines in the file $J2EE_HOME/lib/security/server.policy - in order to allow the PDFlib native library to be loaded: - - // default permissions granted to all domains - grant { - permission java.lang.RuntimePermission "loadLibrary.*"; - permission java.lang.RuntimePermission "accessClassInPackage.*"; - ... - -- Use the deployment tool to add pdflib.jar to the project as an external - jar library. - It seems that pdflib.jar must be placed in the %J2EE_HOME%/lib directory; - otherwise the server will attempt to load the PDFlib shared library - multiply, resulting in the error message "shared library already loaded". - -- pdf_java.dll or libpdf_java.so must be accessible in some system path, - e.g. \winnt\system32 or /usr/local/lib, or via PATH/LD_LIBRARY_PATH. - -- The PATH and CLASSPATH variables should point to the bin subdirectories - of J2EE and JDK. - - -Using PDFlib with Tomcat -======================== - -In order to use PDFlib with Apache Tomcat do the following: - -- Put the PDFlib shared library or DLL (e.g. pdf_java.dll) into a directly - which is accessible systemwide (e.g. C:\winnt\system32). - -- It is suggested to load PDFlib as early as possible. Loading PDFlib later - in the servlet (e.g., via repositories) may fail due to different - class loaders. - -- Put pdflib.jar into - $CATALINA_HOME/common/lib (Tomcat 3) or - $CATALINA_HOME/shared/lib (Tomcat 4). - -- Add a line similar to the file tomcat.properties: - - wrapper.env="/usr/local/lib:/usr/lib:/lib" - -- After building or installing PDFlib it may help to update the shared - library cache via - - ldconfig -v (or similar command depending on your Unix version) - - - -Using PDFlib with IBM WebSphere Application Server -================================================== - -The instructions in this section apply to WebSphere 3 and 4. -For WebSphere 5 please refer to the section above on J2EE-compliant -servers. - -Servlets are loaded with a custom class loader. For this reason, -the pdflib.jar file has to be located in the Application Server's -classpath rather than the web application's classpath. - -To locate the pdflib.jar file in the app server's classpath, place the jar -file in the \\lib directory and edit the -admin.config file. In the admin.config file add the path to the jar file -to the setting labeled: - -com.ibm.ejs.sm.adminserver.classpath - -If you use the Websphere Application Assembly Tool you can add pdflib.jar -to your project. - -The DLL or .so must be located somewhere on the machine's path. -The winnt\system32 directory works for Windows, the bin directory -of WAS on Solaris. - -On the AS/400 make sure that the PDFLIB and PDF_JAVA SRVPGM can be -found in the library list of the jobs running your Java apps. The -easiest way to achieve this is to copy these SRVPGMs to the QGPL -library. In most cases this library is found in every LIBL. - - -Using PDFlib on Mac OS X -======================== - -On Mac OS X the shared PDFlib library for Java, which has a default file -name of libpdf_java.dylib, must be renamed to libpdf_java.jnilib. The -PDFlib build process does this automatically. - -The default search path for JNI libraries on OS X is as follows: - - .:/usr/lib:/usr/lib/java:/lib: - /System/Library/Frameworks/JavaVM.framework/Versions/1.2/Libraries - -You can extend the JNI search path by defining the DYLD_LIBRARY_PATH -with more directories. - - -Using PDFlib with Apple WebObjects -================================== - -To the best of our knowledge, the following should be sufficient in order -to use PDFlib with WebObjects: - -- Use the java-framework-maker tool to create a new WebObjects Framework, - and select PDFlib.jar as input package. - -- Add the new framework to your project. - - -Using PDFlib with Lotus Notes -============================= - -We don't have first-hand experience with deploying PDFlib in Notes. -However, a user contributed the following information: - -> Apparently when you compile the Java code and then you run the code, Domino -> is not using the same paths. To compile the code you need to add the -> pdflib.jar to the project. This can be done by clicking the Edit Project -> button and browsing to the directory where the file is located and then -> adding the file to the project. This will allow you to compile the code -> without errors. If you are a programmer you will assume that since the -> code compiled therefore Domino knows where the Java class resides but you -> know what happens when you assume. The second thing that you need to do is -> create a "\com\pdflib" directory within your Notes directory and put the -> pdflib.class file in that directory. When you specify "import -> com.pdflib.pdflib" this is where Java will go to look for the class -> then it executes it. I found documentation that said that you can add a -> path my adding a line in the notes.ini file "JavaUserClasses=yourpath" but -> it did not work. - - -Using PDFlib on SGI IRIX -======================== - -Use the LD_LIBRARYN32_PATH environment variable (as opposed to the -traditional LD_LIBRARY_PATH) in order to set the directory where the -PDFlib shared library for Java will be found. diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/businesscardServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/businesscardServlet.java deleted file mode 100644 index c51a430efe..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/businesscardServlet.java +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id: businesscardServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: hello servlet example in Java - */ - -import java.io.*; -import javax.servlet.*; - -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class businesscardServlet extends GenericServlet -{ - public void service(ServletRequest request, ServletResponse response) - { - int font; - pdflib p = null ; - int i, blockcontainer, page; - String infile = "boilerplate.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary. - * - * Note that this directory must also contain the LuciduxSans font - * outline and metrics files. - */ - String searchpath = "../data"; - String[][] data = { - { "name", "Victor Kraxi" }, - { "business.title", "Chief Paper Officer" }, - { "business.address.line1", "17, Aviation Road" }, - { "business.address.city", "Paperfield" }, - { "business.telephone.voice","phone +1 234 567-89" }, - { "business.telephone.fax", "fax +1 234 567-98" }, - { "business.email", "victor@kraxi.com" }, - { "business.homepage", "www.kraxi.com" }, - }; - byte[] buf; - ServletOutputStream out; - - try{ - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "businesscard.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title","PDFlib block processing sample (Java)"); - - blockcontainer = p.open_pdi(infile, "", 0); - if (blockcontainer == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - page = p.open_pdi_page(blockcontainer, 1, ""); - if (page == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.begin_page(20, 20); // dummy page size - - // This will adjust the page size to the block container's size. - p.fit_pdi_page(page, 0, 0, "adjustpage"); - - // Fill all text blocks with dynamic data - for (i = 0; i < (int) data.length; i++) { - if (p.fill_textblock(page, data[i][0], data[i][1], - "embedding encoding=winansi") == -1) { - System.err.println("Warning: " + p.get_errmsg()); - } - } - - p.end_page(); // close page - p.close_pdi_page(page); - - p.close(); // close PDF document - p.close_pdi(blockcontainer); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - out = response.getOutputStream(); - out.write(buf); - out.close(); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in businesscard sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/chartabServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/chartabServlet.java deleted file mode 100644 index e3d5bbc1ce..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/chartabServlet.java +++ /dev/null @@ -1,136 +0,0 @@ -/* $Id: chartabServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: hello servlet example in Java - */ - -import java.io.*; -import javax.servlet.*; - -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class chartabServlet extends GenericServlet -{ - /* change these as required */ - static final String fontname = "LuciduxSans-Oblique"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - static final String searchpath = "../data"; - - /* list of encodings to use */ - static final String encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" }; - static final int ENCODINGS = 3; - static final float FONTSIZE = 16; - static final float TOP = 700; - static final float LEFT = 50; - static final float YINCR = 2*FONTSIZE; - static final float XINCR = 2*FONTSIZE; - - public void service(ServletRequest request, ServletResponse response) - { - /* whether or not to embed the font */ - int embed = 1; - - String buf; - float x, y; - int row, col, font, page; - - pdflib p = null ; - byte[] outbuf; - ServletOutputStream out; - - try{ - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("openaction", "fitpage"); - p.set_parameter("fontwarning", "true"); - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "chartabServlet.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Character table (Java/Servlet)"); - - /* loop over all encodings */ - for (page = 0; page < ENCODINGS; page++) - { - p.begin_page(595, 842); /* start a new page */ - - /* print the heading and generate the bookmark */ - font = p.load_font("Helvetica", "winansi", ""); - p.setfont(font, FONTSIZE); - if (embed == 1) { - buf = fontname + " (" + encodings[page] + ") embedded"; - } else{ - buf = fontname + " (" + encodings[page] + ") not embedded"; - } - - p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR); - p.add_bookmark(buf, 0, 0); - - /* print the row and column captions */ - p.setfont(font, 2 * FONTSIZE/3); - - for (row = 0; row < 16; row++) - { - buf ="x" + (Integer.toHexString(row)).toUpperCase(); - p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR); - - buf = (Integer.toHexString(row)).toUpperCase() + "x"; - p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR); - } - - /* print the character table */ - if (embed == 1) { - buf = "embedding"; - } else{ - buf = ""; - } - font = p.load_font(fontname, encodings[page],buf); - p.setfont(font, FONTSIZE); - - y = TOP; - x = LEFT; - - for (row = 0; row < 16; row++) - { - for (col = 0; col < 16; col++) { - buf = String.valueOf((char)(16*row + col)); - p.show_xy(buf, x, y); - x += XINCR; - } - x = LEFT; - y -= YINCR; - } - - p.end_page(); /* close page */ - } - p.close(); /* close PDF document */ - - outbuf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(outbuf.length); - - out = response.getOutputStream(); - out.write(outbuf); - out.close(); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in chartab sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/helloServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/helloServlet.java deleted file mode 100644 index e2fef66c57..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/helloServlet.java +++ /dev/null @@ -1,65 +0,0 @@ -/* $Id: helloServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: hello servlet example in Java - */ - -import java.io.*; -import javax.servlet.*; - -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class helloServlet extends GenericServlet -{ - public void service(ServletRequest request, ServletResponse response) - { - int font; - pdflib p = null; - byte[] buf; - ServletOutputStream out; - - try{ - p = new pdflib(); - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_info("Creator", "helloServlet.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Hello world (Java/Servlet)!"); - - p.begin_page(595, 842); /* start a new page */ - - font = p.load_font("Helvetica-Bold", "winansi", ""); - - p.setfont(font, 18); - - p.set_text_pos(50, 700); - p.show("Hello world!"); - p.continue_text("(says Java/Servlet)"); - p.end_page(); /* close page */ - - p.close(); /* close PDF document */ - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - out = response.getOutputStream(); - out.write(buf); - out.close(); - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in hello sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/imageServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/imageServlet.java deleted file mode 100644 index d0aba17359..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/imageServlet.java +++ /dev/null @@ -1,80 +0,0 @@ -/* $Id: imageServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: image example in JavaServlet - */ - -import java.io.*; -import javax.servlet.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class imageServlet extends GenericServlet -{ - public void service (ServletRequest request, ServletResponse response) - { - int image; - float width, height; - pdflib p = null; - String imagefile = "nesrin.jpg"; - byte[] buf; - ServletOutputStream output; - int manual, page; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - - try{ - - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "imageServlet.java"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "image sample (JavaServlet)"); - - if (request.getParameter("image") != null){ - imagefile = request.getParameter("image") ; - } - - image = p.load_image("auto", imagefile, ""); - - if (image == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - - /* dummy page size, will be adjusted by PDF_fit_image() */ - p.begin_page(10, 10); - p.fit_image(image, (float) 0.0, (float) 0.0, "adjustpage"); - p.close_image(image); - p.end_page(); - - p.close(); - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in hello sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/invoiceServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/invoiceServlet.java deleted file mode 100644 index 50b8bd10bc..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/invoiceServlet.java +++ /dev/null @@ -1,184 +0,0 @@ -/* $Id: invoiceServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: invoice servlet example in Java - */ - -import java.io.*; -import java.text.*; // DateFormat -import java.util.*; // Date -import javax.servlet.*; - -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class invoiceServlet extends GenericServlet -{ - public void service(ServletRequest request, ServletResponse response) - { - - pdflib p = null ; - int i, form, page, regularfont, boldfont; - String infile = "stationery.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - final float col1 = 55; - final float col2 = 100; - final float col3 = 330; - final float col4 = 430; - final float col5 = 530; - float fontsize = 12, leading, y; - float sum, total; - float pagewidth = 595, pageheight = 842; - Date now = new Date(); - DateFormat fulldate = DateFormat.getDateInstance(DateFormat.LONG); - byte[] buf; - ServletOutputStream out; - - String closingtext = - "30 days warranty starting at the day of sale. " + - "This warranty covers defects in workmanship only. " + - "Kraxi Systems, Inc. will, at its option, repair or replace the " + - "product under the warranty. This warranty is not transferable. " + - "No returns or exchanges will be accepted for wet products."; - - String[][] data = { - { "Super Kite", "20", "2"}, - { "Turbo Flyer", "40", "5"}, - { "Giga Trash", "180", "1"}, - { "Bare Bone Kit", "50", "3"}, - { "Nitty Gritty", "20", "10"}, - { "Pretty Dark Flyer", "75", "1"}, - { "Free Gift", "0", "1"}, - }; - - String[] months = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }; - - try{ - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "invoiceServlet.java"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", - "PDFlib invoice generation demo (Java/Servlet)"); - - form = p.open_pdi(infile, "", 0); - if (form == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - page = p.open_pdi_page(form, 1, ""); - if (page == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - boldfont = p.load_font("Helvetica-Bold", "winansi", ""); - regularfont = p.load_font("Helvetica", "winansi", ""); - leading = fontsize + 2; - - // Establish coordinates with the origin in the upper left corner. - p.set_parameter("topdown", "true"); - - p.begin_page(pagewidth, pageheight); // A4 page - - p.fit_pdi_page(page, 0, pageheight, ""); - p.close_pdi_page(page); - - p.setfont(regularfont, fontsize); - - // Print the address - y = 170; - p.set_value("leading", leading); - - p.show_xy("John Q. Doe", col1, y); - p.continue_text("255 Customer Lane"); - p.continue_text("Suite B"); - p.continue_text("12345 User Town"); - p.continue_text("Everland"); - - // Print the header and date - - p.setfont(boldfont, fontsize); - y = 300; - p.show_xy("INVOICE", col1, y); - - p.fit_textline(fulldate.format(now), col5, y, "position {100 0}"); - - // Print the invoice header line - p.setfont(boldfont, fontsize); - - // "position {0 0}" is left-aligned, "position {100 0}" right-aligned - y = 370; - p.fit_textline("ITEM", col1, y, "position {0 0}"); - p.fit_textline("DESCRIPTION", col2, y, "position {0 0}"); - p.fit_textline("QUANTITY", col3, y, "position {100 0}"); - p.fit_textline("PRICE", col4, y, "position {100 0}"); - p.fit_textline("AMOUNT", col5, y, "position {100 0}"); - - // Print the article list - - p.setfont(regularfont, fontsize); - y += 2*leading; - total = 0; - - for (i = 0; i < data.length; i++) { - p.show_xy(Integer.toString(i+1), col1, y); - p.show_xy(data[i][0], col2, y); - p.fit_textline(data[i][2], col3, y, "position {100 0}"); - p.fit_textline(data[i][1], col4, y, "position {100 0}"); - sum = 0; - - sum = Integer.parseInt(data[i][2]) * Integer.parseInt(data[i][1]); - p.fit_textline(Float.toString(sum), col5, y, "position {100 0}"); - - y += leading; - total += sum; - } - - y += leading; - p.setfont(boldfont, fontsize); - p.fit_textline(Float.toString(total), col5, y, "position {100 0}"); - - // Print the closing text - - y += 5*leading; - p.setfont(regularfont, fontsize); - p.set_value("leading", leading); - p.show_boxed(closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", ""); - - p.end_page(); - p.close(); - p.close_pdi(form); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - out = response.getOutputStream(); - out.write(buf); - out.close(); - - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in invoice sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/pdfclockServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/pdfclockServlet.java deleted file mode 100644 index 70e2ef23e7..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/pdfclockServlet.java +++ /dev/null @@ -1,134 +0,0 @@ -/* $Id: pdfclockServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib client: pdfclock example in Java - */ - -import java.io.*; -import java.text.*; // SimpleDateFormat -import java.util.*; // Date -import javax.servlet.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class pdfclockServlet extends GenericServlet -{ - public void service (ServletRequest request, ServletResponse response) - { - pdflib p = null; - int tm_hour, tm_min, tm_sec, alpha; - float RADIUS = 200.0f; - float MARGIN = 20.0f; - SimpleDateFormat format; - Date now = new Date(); - - try{ - p = new pdflib(); - byte[] buf; - ServletOutputStream out; - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_info("Creator", "pdfclockServlet.java"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "PDF clock (Java/servlet)"); - - p.begin_page( (int) (2 * (RADIUS + MARGIN)), - (int) (2 * (RADIUS + MARGIN))); - - p.translate(RADIUS + MARGIN, RADIUS + MARGIN); - p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f); - p.save(); - - // minute strokes - p.setlinewidth(2.0f); - for (alpha = 0; alpha < 360; alpha += 6) - { - p.rotate(6.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN/3, 0.0f); - p.stroke(); - } - - p.restore(); - p.save(); - - // 5 minute strokes - p.setlinewidth(3.0f); - for (alpha = 0; alpha < 360; alpha += 30) - { - p.rotate(30.0f); - p.moveto(RADIUS, 0.0f); - p.lineto(RADIUS-MARGIN, 0.0f); - p.stroke(); - } - - format = new SimpleDateFormat("hh"); - tm_hour= Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("mm"); - tm_min = Integer.parseInt(format.format(now)); - format = new SimpleDateFormat("ss"); - tm_sec = Integer.parseInt(format.format(now)); - - // draw hour hand - p.save(); - p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS/2, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw minute hand - p.save(); - p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f)); - p.moveto(-RADIUS/10, -RADIUS/20); - p.lineto(RADIUS * 0.8f, 0.0f); - p.lineto(-RADIUS/10, RADIUS/20); - p.closepath(); - p.fill(); - p.restore(); - - // draw second hand - p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f); - p.setlinewidth(2); - p.save(); - p.rotate(-((tm_sec - 15.0f) * 6.0f)); - p.moveto(-RADIUS/5, 0.0f); - p.lineto(RADIUS, 0.0f); - p.stroke(); - p.restore(); - - // draw little circle at center - p.circle(0f, 0f, RADIUS/30); - p.fill(); - - p.restore(); - p.end_page(); - p.close(); - - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - out = response.getOutputStream(); - out.write(buf); - out.close(); - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in pdfclock sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - - - } -} diff --git a/src/libs/pdflib/bind/pdflib/java/servlet/quickreferenceServlet.java b/src/libs/pdflib/bind/pdflib/java/servlet/quickreferenceServlet.java deleted file mode 100644 index 25f3747a9a..0000000000 --- a/src/libs/pdflib/bind/pdflib/java/servlet/quickreferenceServlet.java +++ /dev/null @@ -1,108 +0,0 @@ -/* $Id: quickreferenceServlet.java 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib/PDI client: mini imposition demo - */ - -import java.io.*; -import javax.servlet.*; -import com.pdflib.pdflib; -import com.pdflib.PDFlibException; - -public class quickreferenceServlet extends GenericServlet -{ - public void service (ServletRequest request, ServletResponse response) - { - int font, row = 0 , col = 0 , i; - int manual, pages; - final int maxrow=2, maxcol=2; - int startpage = 1, endpage = 4; - final float width = 500, height = 770; - int pageno; - String infile = "reference.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - String searchpath = "../data"; - byte[] buf; - ServletOutputStream output; - pdflib p = null; - - try{ - p = new pdflib(); - - // Generate a PDF in memory; insert a file name to create PDF on disk - if (p.open_file("") == -1) { - throw new Exception("Couldn't create PDF output.\n"); - } - - p.set_parameter("SearchPath", searchpath); - - p.set_info("Creator", "quickreferenceServlet.java"); - p.set_info("Author", "Rainer Ploeckl"); - p.set_info("Title", "imposition demo (Java/Servlet)"); - - manual = p.open_pdi(infile, "", 0); - i = 0; - - if (manual == -1){ - throw new Exception("Error: " + p.get_errmsg()); - } - - p.set_parameter("topdown", "true"); - - for (pageno = startpage; pageno <= endpage; pageno++) { - if (row == 0 && col == 0) { - i++; - p.begin_page(width, height); - font = p.load_font("Helvetica-Bold", "winansi", ""); - p.setfont(font, 18); - p.set_text_pos(24, 24); - p.show("PDFlib Quick Reference"); - } - - pages = p.open_pdi_page(manual, pageno, ""); - - if (pages == -1) { - throw new Exception("Error: " + p.get_errmsg()); - } - - p.fit_pdi_page(manual, width/maxcol*col, - (row + 1) * height/maxrow, "scale " + (float)1/maxrow); - p.close_pdi_page(pages); - - col++; - if (col == maxcol) { - col = 0; - row++; - } - if (row == maxrow) { - row = 0; - p.end_page(); - } - } - - // finish the last partial page - if (row != 0 || col != 0) - p.end_page(); - - p.close(); - p.close_pdi(manual); - buf = p.get_buffer(); - - response.setContentType("application/pdf"); - response.setContentLength(buf.length); - - output = response.getOutputStream(); - output.write(buf); - output.close(); - } catch (PDFlibException e) { - System.err.print("PDFlib exception occurred in quickreference sample:\n"); - System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + - ": " + e.getMessage() + "\n"); - } catch (Exception e) { - System.err.println(e.getMessage()); - } finally { - if (p != null) { - p.delete(); /* delete the PDFlib object */ - } - } - } -} diff --git a/src/libs/pdflib/bind/pdflib/perl/Makefile b/src/libs/pdflib/bind/pdflib/perl/Makefile deleted file mode 100644 index 3733fd0c2a..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# Makefile for PDFlib's Perl binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc - -INCLUDES = $(PDFLIBINC) $(PERLBOOLDEF) $(PERLINCLUDE) -# special CFLAGS, as -ansi is not working here. -CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES) - -PERLBIN = $(PERL) -I. -I.libs -LANG_LIBDIR = $(PERLLIBDIR) -BINDEXTERNALLIBS= $(PERLLINK) - -LIBNAME = pdflib_pl$(LA) -OBJ = pdflib_pl$(LO) -SRC = pdflib_pl.c - -include $(top_builddir)/config/mkbind.inc - -test:: all - -$(PERLBIN) hello.pl - -$(PERLBIN) image.pl - -$(PERLBIN) pdfclock.pl - -$(PERLBIN) chartab.pl - -$(PERLBIN) invoice.pl - -$(PERLBIN) businesscard.pl - -$(PERLBIN) quickreference.pl - -smoke:: test - -$(PERLBIN) smoketest.pl - -install:: $(SWIG_LIB) - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) $(SWIG_LIB) $(LANG_LIBDIR) - $(INSTALL_DATA) pdflib_pl.pm $(LANG_LIBDIR) - -uninstall:: - $(LIBTOOL) --mode=uninstall \ - $(RM) $(LANG_LIBDIR)/$(SWIG_LIB) $(LANG_LIBDIR)/pdflib_pl.pm - -clean:: - $(RM) smoke_c_?.pdf - $(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf - $(RM) businesscard.pdf quickreference.pdf - -# Automatically generated dependencies diff --git a/src/libs/pdflib/bind/pdflib/perl/Perl.dsp b/src/libs/pdflib/bind/pdflib/perl/Perl.dsp deleted file mode 100644 index b543466544..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/Perl.dsp +++ /dev/null @@ -1,140 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Perl" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=Perl - Win32 perlAS56 -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Perl.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Perl.mak" CFG="Perl - Win32 perlAS56" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Perl - Win32 perlAS56" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Perl - Win32 perlAS58" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Perl - Win32 perl5005" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Perl - Win32 perlAS56" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "perlAS56" -# PROP BASE Intermediate_Dir "perlAS56" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "perlAS56" -# PROP Intermediate_Dir "perlAS56" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl56\lib\CORE" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS56\pdflib_pl.dll" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS56\pdflib_pl.dll" /libpath:"c:\programme\Perl56\lib\CORE" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "Perl - Win32 perlAS58" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "perlAS58" -# PROP BASE Intermediate_Dir "perlAS58" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "perlAS58" -# PROP Intermediate_Dir "perlAS58" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl58\lib\CORE" /I "c:\programme\Perl58\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS58\pdflib_pl.dll" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl58.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS58\pdflib_pl.dll" /libpath:"c:\programme\Perl58\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "Perl - Win32 perl5005" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "perl5005" -# PROP BASE Intermediate_Dir "perl5005" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "perl5005" -# PROP Intermediate_Dir "perl5005" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl5.005\lib\CORE" /I "c:\programme\Perl5.005\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /D "PERL_OBJECT" /FR /YX /FD /c /Tp -# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl5.005\lib\CORE" /I "c:\programme\Perl5.005\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /D "PERL_OBJECT" /FR /YX /FD /c /Tp -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib perlcore.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perl5005\pdflib_pl.dll" /libpath:"c:\programme\Perl5.005\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib perlcore.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perl5005\pdflib_pl.dll" /libpath:"c:\programme\Perl5.005\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug - -!ENDIF - -# Begin Target - -# Name "Perl - Win32 perlAS56" -# Name "Perl - Win32 perlAS58" -# Name "Perl - Win32 perl5005" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib_pl.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/perl/businesscard.pl b/src/libs/pdflib/bind/pdflib/perl/businesscard.pl deleted file mode 100644 index cf8b765b22..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/businesscard.pl +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/perl -# $Id: businesscard.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: block processing example in C -# - -use pdflib_pl 5.0; - -$infile = "boilerplate.pdf"; -# This is where font/image/PDF input files live. Adjust as necessary. -# -# Note that this directory must also contain the LuciduxSans font outline -# and metrics files. -# -$searchpath = "../data"; - -%data = ( "name" => "Victor Kraxi", - "business.title" => "Chief Paper Officer", - "business.address.line1" => "17, Aviation Road", - "business.address.city" => "Paperfield", - "business.telephone.voice" => "phone +1 234 567-89", - "business.telephone.fax" => "fax +1 234 567-98", - "business.email" => "victor\@kraxi.com", - "business.homepage" => "www.kraxi.com" - ); - -# create a new PDFlib object -$p = PDF_new(); - -eval { - # open new PDF file - if (PDF_open_file($p, "businesscard.pdf") == -1){ - printf ("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_set_parameter($p, "SearchPath", $searchpath); - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "businesscard.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "PDFlib block processing sample (Perl)"); - - $blockcontainer = PDF_open_pdi($p, $infile, "", 0); - if ($blockcontainer == -1){ - printf ("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - $page = PDF_open_pdi_page($p, $blockcontainer, 1, ""); - if ($page == -1){ - printf ("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_begin_page($p, 20, 20); # dummy page size - - # This will adjust the page size to the block container's size. - PDF_fit_pdi_page($p, $page, 0, 0, "adjustpage"); - - # Fill all text blocks with dynamic data - foreach $elem(keys %data){ - if (PDF_fill_textblock($p, $page, $elem, $data{$elem}, - "embedding encoding=winansi") == -1) { - printf ("Warning: %s\n", PDF_get_errmsg($p)); - } - } - - PDF_end_page($p); # close page - PDF_close_pdi_page($p, $page); - - PDF_close($p); # close PDF document - PDF_close_pdi($p, $blockcontainer); -}; -if ($@) { - printf("businesscard: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} -PDF_delete($p); # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/perl/chartab.pl b/src/libs/pdflib/bind/pdflib/perl/chartab.pl deleted file mode 100644 index 360c20ddeb..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/chartab.pl +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/perl -# $Id: chartab.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: hello example in Perl -# - -use pdflib_pl 5.0; - -# change these as required -$fontname = "LuciduxSans-Oblique"; - -# This is where font/image/PDF input files live. Adjust as necessary. -$searchpath = "../data"; - -# list of encodings to use -@encodings = ( "iso8859-1", "iso8859-2", "iso8859-15" ); - -# whether or not to embed the font -$embed = 1; - -use constant "FONTSIZE" => 16; -use constant "TOP" => 700; -use constant "LEFT" => 50; -use constant "YINCR" => 2*FONTSIZE; -use constant "XINCR" => 2*FONTSIZE; - -# create a new PDFlib object -$p = PDF_new(); - -eval { - # open new PDF file - if (PDF_open_file($p, "chartab.pdf") == 0) { - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_set_parameter($p, "openaction", "fitpage"); - PDF_set_parameter($p, "fontwarning", "true"); - PDF_set_parameter($p, "SearchPath", $searchpath); - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "chartab.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "Character table (Perl)"); - - # loop over all encodings - for ($page = 0; $page <= $#encodings; $page++) - { - PDF_begin_page($p, 595, 842); # start a new page - - # print the heading and generate the bookmark - $font = PDF_load_font($p, "Helvetica", "winansi", ""); - PDF_setfont($p, $font, FONTSIZE); - $buf = sprintf("%s (%s) %sembedded", - $fontname, $encodings[$page], $embed ? "" : "not "); - - PDF_show_xy($p, $buf, LEFT - XINCR, TOP + 3 * YINCR); - PDF_add_bookmark($p, $buf, 0, 0); - - # print the row and column captions - PDF_setfont($p, $font, 2 * FONTSIZE/3); - - for ($row = 0; $row < 16; $row++) - { - $buf = sprintf("x%X", $row); - PDF_show_xy($p, $buf, LEFT + $row*XINCR, TOP + YINCR); - - $buf = sprintf("%Xx", $row); - PDF_show_xy($p, $buf, LEFT - XINCR, TOP - $row * YINCR); - } - - # print the character table - $font = PDF_load_font($p, $fontname, $encodings[$page], - $embed ? "embedding": ""); - PDF_setfont($p, $font, FONTSIZE); - - $y = TOP; - $x = LEFT; - - for ($row = 0; $row < 16; $row++) - { - for ($col = 0; $col < 16; $col++) { - $buf = sprintf("%c", 16*$row + $col); - PDF_show_xy($p, $buf, $x, $y); - $x += XINCR; - } - $x = LEFT; - $y -= YINCR; - } - - PDF_end_page($p); # close page - } - - - PDF_close($p); # close PDF document - -}; - -if ($@) { - printf("chartab: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/perl/hello.pl b/src/libs/pdflib/bind/pdflib/perl/hello.pl deleted file mode 100644 index a5aec9d0a7..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/hello.pl +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/perl -# $Id: hello.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: hello example in Perl -# - -use pdflib_pl 5.0; - -# create a new PDFlib object -$p = PDF_new(); - -eval { - # open new PDF file - if (PDF_open_file($p, "hello.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "hello.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "Hello world (Perl)!"); - - PDF_begin_page($p, 595, 842); # start a new page - - $font = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); - - PDF_setfont($p, $font, 24.0); - PDF_set_text_pos($p, 50, 700); - PDF_show($p, "Hello world!"); - PDF_continue_text($p, "(says Perl)"); - PDF_end_page($p); # close page - - PDF_close($p); # close PDF document -}; - -if ($@) { - printf("hello: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/perl/image.pl b/src/libs/pdflib/bind/pdflib/perl/image.pl deleted file mode 100644 index 07b6df734b..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/image.pl +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/perl -# $Id: image.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: image example in Perl -# - -use pdflib_pl 5.0; - -# This is where font/image/PDF input files live. Adjust as necessary. -$searchpath = "../data"; -$imagefile = "nesrin.jpg"; - -$p = PDF_new(); - -eval { - if (PDF_open_file($p, "image.pdf") == -1){ - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_set_parameter($p, "SearchPath", $searchpath); - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "image.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "image sample (Perl)"); - - - $image = PDF_load_image($p, "auto", $imagefile, ""); - die "Couldn't open image '$imagefile'" if ($image == -1); - - # dummy page size, will be adjusted by PDF_fit_image() - PDF_begin_page($p, 10, 10); - PDF_fit_image($p, $image, 0, 0, "adjustpage"); - PDF_close_image($p, $image); - PDF_end_page($p); # close page - - PDF_close($p); # close PDF document -}; -if ($@) { - printf("image: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/perl/invoice.pl b/src/libs/pdflib/bind/pdflib/perl/invoice.pl deleted file mode 100644 index 3a0d8d0070..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/invoice.pl +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/perl -# $Id: invoice.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: invoice generation demo -# - -use pdflib_pl 5.0; - -$col1 = 55; -$col2 = 100; -$col3 = 330; -$col4 = 430; -$col5 = 530; -$fontsize = 12; -$pagewidth = 595; -$pageheight = 842; -$fontsize = 12; -$infile = "stationery.pdf"; -# This is where font/image/PDF input files live. Adjust as necessary. -$searchpath = "../data"; -$closingtext = - "30 days warranty starting at the day of sale. " . - "This warranty covers defects in workmanship only. " . - "Kraxi Systems, Inc. will, at its option, repair or replace the " . - "product under the warranty. This warranty is not transferable. " . - "No returns or exchanges will be accepted for wet products."; - -@data = ( {name=>"Super Kite", price=>20, quantity=>2}, - {name=>"Turbo Flyer", price=>40, quantity=>5}, - {name=>"Giga Trasch", price=>180, quantity=>1}, - {name=>"Bare Bone Kit", price=>50, quantity=>3}, - {name=>"Nitty Gritty", price=>20, quantity=>10}, - {name=>"Pretty Dark Flyer", price=>75, quantity=>1}, - {name=>"Free Gift", price=>0, quantity=>1} - ); - -@months = ( "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December"); - -# create a new PDFlib object -$p = PDF_new(); - -eval { - # open new PDF file - if (PDF_open_file($p, "invoice.pdf") == -1){ - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_set_parameter($p, "SearchPath", $searchpath); - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "invoice.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "PDFlib invoice generation demo (Perl)"); - - $form = PDF_open_pdi($p, $infile, "", 0); - if ($form == -1){ - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - $page = PDF_open_pdi_page($p, $form, 1, ""); - if ($page == -1){ - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - - $boldfont = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); - $regularfont = PDF_load_font($p, "Helvetica", "winansi", ""); - $leading = $fontsize + 2; - - # Establish coordinates with the origin in the upper left corner. - PDF_set_parameter($p, "topdown", "true"); - - PDF_begin_page($p, $pagewidth, $pageheight); # A4 page - - PDF_fit_pdi_page($p, $page, 0, $pageheight, ""); - PDF_close_pdi_page($p, $page); - - PDF_setfont($p, $regularfont, $fontsize); - - # print the address - $y = 170; - PDF_set_value($p, "leading", $leading); - - PDF_show_xy($p, "John Q. Doe", $col1, $y); - PDF_continue_text($p, "255 Customer Lane"); - PDF_continue_text($p, "Suite B"); - PDF_continue_text($p, "12345 User Town"); - PDF_continue_text($p, "Everland"); - - # print the header and date - - PDF_setfont($p, $boldfont, $fontsize); - $y = 300; - PDF_show_xy($p, "INVOICE", $col1, $y); - - $buf = sprintf("%s %d, %d", $months[(localtime)[4]], (localtime)[3], - (localtime)[5]+1900); - PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}"); - - - # print the invoice header line - PDF_setfont($p, $boldfont, $fontsize); - - # "position {0 0}" is left-aligned, "position {100 0}" right-aligned - $y = 370; - PDF_fit_textline($p, "ITEM", $col1, $y, "position {0 0}"); - PDF_fit_textline($p, "DESCRIPTION", $col2, $y, "position {0 0}"); - PDF_fit_textline($p, "QUANTITY", $col3, $y, "position {100 0}"); - PDF_fit_textline($p, "PRICE", $col4, $y, "position {100 0}"); - PDF_fit_textline($p, "AMOUNT", $col5, $y, "position {100 0}"); - - PDF_setfont($p, $regularfont, $fontsize); - $y += 2*$leading; - $total = 0; - for ($i = 0; $i <= $#data; $i++){ - PDF_show_xy($p, $i+1, $col1, $y); - - PDF_show_xy($p, $data[$i]{name}, $col2, $y); - PDF_fit_textline($p, $data[$i]{quantity}, $col3, $y, "position {100 0}"); - PDF_fit_textline($p, $data[$i]{price}, $col4, $y, "position {100 0}"); - $sum = $data[$i]{price}*$data[$i]{quantity}; - $buf = sprintf("%.2f", $sum); - PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}"); - $y += $leading; - $total +=$sum; - } - - $y += $leading; - PDF_setfont($p, $boldfont, $fontsize); - PDF_fit_textline($p,sprintf("%.2f",$total), $col5, $y, "position {100 0}"); - - # Print the closing text - - $y +=5*$leading; - PDF_setfont($p, $regularfont, $fontsize); - PDF_set_value($p, "leading", $leading); - PDF_show_boxed($p, $closingtext, - $col1, $y + 4*$leading, $col5-$col1, 4*$leading, "justify", ""); - - PDF_end_page($p); - PDF_close($p); - PDF_close_pdi($p, $form); -}; -if ($@) { - printf("invoice: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); diff --git a/src/libs/pdflib/bind/pdflib/perl/pdfclock.cgi.pl b/src/libs/pdflib/bind/pdflib/perl/pdfclock.cgi.pl deleted file mode 100644 index 575916ad11..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/pdfclock.cgi.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl -# $Id: pdfclock.cgi.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: pdfclock CGI example in Perl -# - -use pdflib_pl 5.0; - -$RADIUS = 200.0; -$MARGIN = 20.0; - -$p = PDF_new(); - -PDF_open_file($p, ""); - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter($p, "hypertextencoding", "winansi"); - -PDF_set_info($p, "Creator", "pdfclock.cgi.pl"); -PDF_set_info($p, "Author", "Thomas Merz"); -PDF_set_info($p, "Title", "PDF clock (Perl/CGI)"); - -PDF_begin_page($p, 2 * ($RADIUS + $MARGIN), 2 * ($RADIUS + $MARGIN)); - -PDF_translate($p, $RADIUS + $MARGIN, $RADIUS + $MARGIN); -PDF_setcolor($p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0); -PDF_save($p); - -# minute strokes -PDF_setlinewidth($p, 2.0); -for ($alpha = 0; $alpha < 360; $alpha += 6) -{ - PDF_rotate($p, 6.0); - PDF_moveto($p, $RADIUS, 0.0); - PDF_lineto($p, $RADIUS-$MARGIN/3, 0.0); - PDF_stroke($p); -} - -PDF_restore($p); -PDF_save($p); - -# 5 minute strokes -PDF_setlinewidth($p, 3.0); -for ($alpha = 0; $alpha < 360; $alpha += 30) -{ - PDF_rotate($p, 30.0); - PDF_moveto($p, $RADIUS, 0.0); - PDF_lineto($p, $RADIUS-$MARGIN, 0.0); - PDF_stroke($p); -} - -($tm_sec,$tm_min,$tm_hour) = localtime(time); - -# draw hour hand -PDF_save($p); -PDF_rotate($p, (-(($tm_min/60.0) + $tm_hour - 3.0) * 30.0)); -PDF_moveto($p, -$RADIUS/10, -$RADIUS/20); -PDF_lineto($p, $RADIUS/2, 0.0); -PDF_lineto($p, -$RADIUS/10, $RADIUS/20); -PDF_closepath($p); -PDF_fill($p); -PDF_restore($p); - -# draw minute hand -PDF_save($p); -PDF_rotate($p, (-(($tm_sec/60.0) + $tm_min - 15.0) * 6.0)); -PDF_moveto($p, -$RADIUS/10, -$RADIUS/20); -PDF_lineto($p, $RADIUS * 0.8, 0.0); -PDF_lineto($p, -$RADIUS/10, $RADIUS/20); -PDF_closepath($p); -PDF_fill($p); -PDF_restore($p); - -# draw second hand -PDF_setcolor($p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0); -PDF_setlinewidth($p, 2); -PDF_save($p); -PDF_rotate($p, -(($tm_sec - 15.0) * 6.0)); -PDF_moveto($p, -$RADIUS/5, 0.0); -PDF_lineto($p, $RADIUS, 0.0); -PDF_stroke($p); -PDF_restore($p); - -# draw little circle at center -PDF_circle($p, 0, 0, $RADIUS/30); -PDF_fill($p); - -PDF_restore($p); -PDF_end_page($p); - -PDF_close($p); - -$buf = PDF_get_buffer($p); - -# the following is required on Windows systems -binmode(STDOUT); - -print "Content-Type: application/pdf\n"; -print "Content-Length: " . length($buf) . "\n"; -print "Content-Disposition: inline; filename=" . "pdfclock.cgi.pl.pdf" . "\n\n"; -print $buf; - -PDF_delete($p); diff --git a/src/libs/pdflib/bind/pdflib/perl/pdfclock.pl b/src/libs/pdflib/bind/pdflib/perl/pdfclock.pl deleted file mode 100644 index 17ed511f7a..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/pdfclock.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl -# $Id: pdfclock.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: pdfclock example in Perl -# - -use pdflib_pl 5.0; - -$RADIUS = 200.0; -$MARGIN = 20.0; - -$p = PDF_new(); -eval{ - if (PDF_open_file($p, "pdfclock.pdf") == -1){ - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "pdfclock.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "PDF clock (Perl)"); - - PDF_begin_page($p, 2 * ($RADIUS + $MARGIN), 2 * ($RADIUS + $MARGIN)); - - PDF_translate($p, $RADIUS + $MARGIN, $RADIUS + $MARGIN); - PDF_setcolor($p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0); - PDF_save($p); - - # minute strokes - PDF_setlinewidth($p, 2.0); - for ($alpha = 0; $alpha < 360; $alpha += 6) - { - PDF_rotate($p, 6.0); - PDF_moveto($p, $RADIUS, 0.0); - PDF_lineto($p, $RADIUS-$MARGIN/3, 0.0); - PDF_stroke($p); - } - - PDF_restore($p); - PDF_save($p); - - # 5 minute strokes - PDF_setlinewidth($p, 3.0); - for ($alpha = 0; $alpha < 360; $alpha += 30) - { - PDF_rotate($p, 30.0); - PDF_moveto($p, $RADIUS, 0.0); - PDF_lineto($p, $RADIUS-$MARGIN, 0.0); - PDF_stroke($p); - } - - ($tm_sec,$tm_min,$tm_hour) = localtime(time); - - # draw hour hand - PDF_save($p); - PDF_rotate($p, (-(($tm_min/60.0) + $tm_hour - 3.0) * 30.0)); - PDF_moveto($p, -$RADIUS/10, -$RADIUS/20); - PDF_lineto($p, $RADIUS/2, 0.0); - PDF_lineto($p, -$RADIUS/10, $RADIUS/20); - PDF_closepath($p); - PDF_fill($p); - PDF_restore($p); - - # draw minute hand - PDF_save($p); - PDF_rotate($p, (-(($tm_sec/60.0) + $tm_min - 15.0) * 6.0)); - PDF_moveto($p, -$RADIUS/10, -$RADIUS/20); - PDF_lineto($p, $RADIUS * 0.8, 0.0); - PDF_lineto($p, -$RADIUS/10, $RADIUS/20); - PDF_closepath($p); - PDF_fill($p); - PDF_restore($p); - - # draw second hand - PDF_setcolor($p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0); - PDF_setlinewidth($p, 2); - PDF_save($p); - PDF_rotate($p, -(($tm_sec - 15.0) * 6.0)); - PDF_moveto($p, -$RADIUS/5, 0.0); - PDF_lineto($p, $RADIUS, 0.0); - PDF_stroke($p); - PDF_restore($p); - - # draw little circle at center - PDF_circle($p, 0, 0, $RADIUS/30); - PDF_fill($p); - - PDF_restore($p); - PDF_end_page($p); - - PDF_close($p); - -}; -if ($@) { - printf("pdfclock: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.c b/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.c deleted file mode 100644 index 16b9150555..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.c +++ /dev/null @@ -1,3614 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib_pl.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Wrapper code for the PDFlib Perl binding - * - * in sync with pdflib.h 1.151.2.22 - * - */ - -/* - * The PERL_OBJECT #define is only required for ActivePerl < 5.6 - * - * IMPORTANT: in this case the code must be compiled in C++ mode! - */ -#if defined(WIN32) && \ - defined(PERL_REVISION) && defined(PERL_VERSION) && \ - PERL_REVISION == 5 && PERL_VERSION < 6 -#define PERL_OBJECT -#endif - -#ifdef __cplusplus -#include -#include - -extern "C" { -#endif /* __cplusplus */ - -#undef DEBUG -#include -#include -#include -#undef free -#undef malloc -#include - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* Compilers which are not strictly ANSI conforming can set PDF_VOLATILE - * to an empty value. - */ -#ifndef PDF_VOLATILE -#define PDF_VOLATILE volatile -#endif - -/* Definitions for compiling Perl extensions on a variety of machines */ - -#if defined(WIN32) || defined(__WIN32__) -# if defined(_MSC_VER) -# define SWIGEXPORT(a,b) __declspec(dllexport) a b -# else -# if defined(__BORLANDC__) -# define SWIGEXPORT(a,b) a _export b -# else -# define SWIGEXPORT(a,b) a b -# endif -# endif -#else -# define SWIGEXPORT(a,b) a b -#endif - -/* #defines for older Perl versions < 5.005_50 */ -#if !defined(PERL_REVISION) || \ - ((PERL_REVISION >= 5) && \ - ((PERL_VERSION<5) || ((PERL_VERSION==5) && (PERL_SUBVERSION<50)))) -#ifndef PL_sv_yes -#define PL_sv_yes sv_yes -#endif -#ifndef PL_na -#define PL_na na -#endif -#endif - -#ifdef PERL_OBJECT -#define MAGIC_PPERL CPerlObj *pPerl = (CPerlObj *) this; -#define MAGIC_CAST (int (CPerlObj::*)(SV *, MAGIC *)) -#define SWIGCLASS_STATIC -#else -#define MAGIC_PPERL -#define MAGIC_CAST -#define SWIGCLASS_STATIC static -#endif - -#include - -#ifdef SWIG_GLOBAL -#ifdef __cplusplus -#define SWIGSTATIC extern "C" -#else -#define SWIGSTATIC -#endif -#endif - -#ifndef SWIGSTATIC -#define SWIGSTATIC static -#endif - -typedef struct SwigPtrType { - char *name; - int len; - void *(*cast)(void *); - struct SwigPtrType *next; -} SwigPtrType; - -/* Pointer cache structure */ -typedef struct { - int stat; /* Status (valid) bit */ - SwigPtrType *tp; /* Pointer to type structure */ - char name[256]; /* Given datatype name */ - char mapped[256]; /* Equivalent name */ -} SwigCacheType; - -static int SwigPtrMax = 64; /* Max entries that can be currently held */ -static int SwigPtrN = 0; /* Current number of entries */ -static int SwigPtrSort = 0; /* Status flag indicating sort */ -static SwigPtrType *SwigPtrTable = 0; /* Table containing pointer equivalences */ -static int SwigStart[256]; /* Table containing starting positions */ - -/* Cached values */ -#define SWIG_CACHESIZE 8 -#define SWIG_CACHEMASK 0x7 -static SwigCacheType SwigCache[SWIG_CACHESIZE]; -static int SwigCacheIndex = 0; -static int SwigLastCache = 0; - -/* Sort comparison function */ -static int swigsort(const void *data1, const void *data2) { - SwigPtrType *d1 = (SwigPtrType *) data1; - SwigPtrType *d2 = (SwigPtrType *) data2; - return strcmp(d1->name,d2->name); -} - -/* Binary Search function */ -static int swigcmp(const void *key, const void *data) { - char *k = (char *) key; - SwigPtrType *d = (SwigPtrType *) data; - return strncmp(k,d->name,d->len); -} - -/* Register a new datatype with the type-checker */ - -#ifndef PERL_OBJECT -SWIGSTATIC -void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) { -#else -SWIGSTATIC -#define SWIG_RegisterMapping(a,b,c) _SWIG_RegisterMapping(pPerl, a,b,c) -void _SWIG_RegisterMapping(CPerlObj *pPerl, char *origtype, char *newtype, void *(*cast)(void *)) { -#endif - - int i; - SwigPtrType *t = 0, *t1; - - if (!SwigPtrTable) { - SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType)); - SwigPtrN = 0; - } - if (SwigPtrN >= SwigPtrMax) { - SwigPtrMax = 2*SwigPtrMax; - SwigPtrTable = (SwigPtrType *) realloc(SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType)); - } - for (i = 0; i < SwigPtrN; i++) - if (strcmp(SwigPtrTable[i].name,origtype) == 0) { - t = &SwigPtrTable[i]; - break; - } - if (!t) { - t = &SwigPtrTable[SwigPtrN]; - t->name = origtype; - t->len = strlen(t->name); - t->cast = 0; - t->next = 0; - SwigPtrN++; - } - while (t->next) { - if (strcmp(t->name,newtype) == 0) { - if (cast) t->cast = cast; - return; - } - t = t->next; - } - t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType)); - t1->name = newtype; - t1->len = strlen(t1->name); - t1->cast = cast; - t1->next = 0; - t->next = t1; - SwigPtrSort = 0; -} - -/* Function for getting a pointer value */ - -#ifndef PERL_OBJECT -SWIGSTATIC -char *SWIG_GetPtr(SV *sv, void **ptr, char *_t) -#else -SWIGSTATIC -#define SWIG_GetPtr(a,b,c) _SWIG_GetPtr(pPerl,a,b,c) -char *_SWIG_GetPtr(CPerlObj *pPerl, SV *sv, void **ptr, char *_t) -#endif -{ - char temp_type[256]; - char *name,*_c; - int len,i,start,end; - IV tmp = 0; - SwigPtrType *sp,*tp; - SwigCacheType *cache; - - /* If magical, apply more magic */ - - if (SvGMAGICAL(sv)) - mg_get(sv); - - /* Check to see if this is an object */ - if (sv_isobject(sv)) { - SV *tsv = (SV*) SvRV(sv); - if ((SvTYPE(tsv) == SVt_PVHV)) { - MAGIC *mg; - if (SvMAGICAL(tsv)) { - mg = mg_find(tsv,'P'); - if (mg) { - SV *rsv = mg->mg_obj; - if (sv_isobject(rsv)) { - tmp = SvIV((SV*)SvRV(rsv)); - } - } - } else { - return "Not a valid pointer value"; - } - } else { - tmp = SvIV((SV*)SvRV(sv)); - } - if (!_t) { - *(ptr) = (void *) tmp; - return (char *) 0; - } - } else if (! SvOK(sv)) { /* Check for undef */ - *(ptr) = (void *) 0; - return (char *) 0; - } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ - *(ptr) = (void *) 0; - if (!SvROK(sv)) - return (char *) 0; - else - return "Not a valid pointer value"; - } else { /* Don't know what it is */ - *(ptr) = (void *) 0; - return "Not a valid pointer value"; - } - if (_t) { - /* Now see if the types match */ - - if (!sv_isa(sv,_t)) { - _c = HvNAME(SvSTASH(SvRV(sv))); - if (!SwigPtrSort) { - qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); - for (i = 0; i < 256; i++) { - SwigStart[i] = SwigPtrN; - } - for (i = SwigPtrN-1; i >= 0; i--) { - SwigStart[(int) SwigPtrTable[i].name[0]] = i; - } - for (i = 255; i >= 1; i--) { - if (SwigStart[i-1] > SwigStart[i]) - SwigStart[i-1] = SwigStart[i]; - } - SwigPtrSort = 1; - for (i = 0; i < SWIG_CACHESIZE; i++) - SwigCache[i].stat = 0; - } - /* First check cache for matches. Uses last cache value as starting point */ - cache = &SwigCache[SwigLastCache]; - for (i = 0; i < SWIG_CACHESIZE; i++) { - if (cache->stat) { - if (strcmp(_t,cache->name) == 0) { - if (strcmp(_c,cache->mapped) == 0) { - cache->stat++; - *ptr = (void *) tmp; - if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr); - return (char *) 0; - } - } - } - SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK; - if (!SwigLastCache) cache = SwigCache; - else cache++; - } - - start = SwigStart[(int) _t[0]]; - end = SwigStart[_t[0]+1]; - sp = &SwigPtrTable[start]; - while (start < end) { - if (swigcmp(_t,sp) == 0) break; - sp++; - start++; - } - if (start >= end) sp = 0; - if (sp) { - while (swigcmp(_t,sp) == 0) { - name = sp->name; - len = sp->len; - tp = sp->next; - while(tp) { - if (tp->len >= 255) { - return _c; - } - strcpy(temp_type,tp->name); - strncat(temp_type,_t+len,255-tp->len); - if (sv_isa(sv,temp_type)) { - /* Get pointer value */ - *ptr = (void *) tmp; - if (tp->cast) *ptr = (*(tp->cast))(*ptr); - - strcpy(SwigCache[SwigCacheIndex].mapped,_c); - strcpy(SwigCache[SwigCacheIndex].name,_t); - SwigCache[SwigCacheIndex].stat = 1; - SwigCache[SwigCacheIndex].tp = tp; - SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK; - return (char *) 0; - } - tp = tp->next; - } - /* Hmmm. Didn't find it this time */ - sp++; - } - } - /* Didn't find any sort of match for this data. - Get the pointer value and return the received type */ - *ptr = (void *) tmp; - return _c; - } else { - /* Found a match on the first try. Return pointer value */ - *ptr = (void *) tmp; - return (char *) 0; - } - } - *ptr = (void *) tmp; - return (char *) 0; -} - -#ifdef __cplusplus -extern "C" -#endif -#ifndef PERL_OBJECT -/* If we don't use the XS macro it doesn't work with all Perl configurations */ -SWIGEXPORT(/* */, XS(boot_pdflib_pl)); -#else -SWIGEXPORT(void,boot_pdflib_pl)(CV *cv, CPerlObj *pPerl); -#endif - -#include - -/* The following sick stuff is an attempt to make recent Perl versions - * work with recent SWIG versions compiled with recent MS VC++ versions. - */ -#ifdef _MSC_VER - #undef setjmp - #define setjmp _setjmp - #undef longjmp -#endif - -#include "pdflib.h" - -/* exception handling is currently not thread-safe! */ -#define SWIG_exception(msg) croak(msg) -static jmp_buf exception_buffer; -static int exception_status; -static char error_message[1024]; - -/* Exception handling */ -#define try if ((exception_status = setjmp(exception_buffer)) == 0) -#define catch(error) else if (exception_status == error) -#define throw(error) longjmp(exception_buffer, error) - -/* PDFlib error handler */ - -static void -pdf_swig_errorhandler(PDF *p, int errortype, const char* shortmsg) -{ - sprintf(error_message, "PDFlib Error %s\n", shortmsg); - - /* Issue a warning message and continue for non-fatal errors */ - if (errortype == PDF_NonfatalError) { - fprintf(stderr, error_message); - return; - } - - /* ...and throw an exception */ - throw(errortype); -} - -/* export the PDFlib routines to the shared library */ -#ifdef __MWERKS__ -#pragma export on -#endif - -/* p_annots.c */ -XS(_wrap_PDF_add_launchlink) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * PDF_VOLATILE _arg5; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_add_launchlink(p, llx, lly, urx, ury, filename);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_launchlink. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (char *) SvPV(ST(5),PL_na); - - try { PDF_add_launchlink(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_add_locallink) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int PDF_VOLATILE _arg5; - char * PDF_VOLATILE _arg6; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_add_locallink(p, llx, lly, urx, ury, page, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_locallink. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (int )SvIV(ST(5)); - _arg6 = (char *) SvPV(ST(6),PL_na); - - try { PDF_add_locallink(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_add_note) { - PDF * p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE contents; - size_t len_cont; - char * PDF_VOLATILE title; - size_t len_title; - char * PDF_VOLATILE icon; - int PDF_VOLATILE open; - dXSARGS ; - - if (items != 9) - croak("Usage: PDF_add_note(p, llx, lly, urx, ury, contents, title, icon, open);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_note. Expected PDFPtr."); - XSRETURN(1); - } - llx = (float ) SvNV(ST(1)); - lly = (float ) SvNV(ST(2)); - urx = (float ) SvNV(ST(3)); - ury = (float ) SvNV(ST(4)); - contents = (char *) SvPV(ST(5),len_cont); - title = (char *) SvPV(ST(6),len_title); - icon = (char *) SvPV(ST(7),PL_na); - open = (int )SvIV(ST(8)); - - try { PDF_add_note2(p,llx,lly,urx,ury,contents,(int)len_cont,title,(int)len_title,icon,open); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_add_pdflink) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * PDF_VOLATILE _arg5; - int PDF_VOLATILE _arg6; - char * PDF_VOLATILE _arg7; - dXSARGS ; - - if (items != 8) - croak("Usage: PDF_add_pdflink(p, llx, lly, urx, ury, filename, page, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_pdflink. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (char *) SvPV(ST(5),PL_na); - _arg6 = (int )SvIV(ST(6)); - _arg7 = (char *) SvPV(ST(7),PL_na); - - try { PDF_add_pdflink(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_add_weblink) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * PDF_VOLATILE _arg5; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_add_weblink(p, llx, lly, urx, ury, url);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_weblink. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (char *) SvPV(ST(5),PL_na); - - try { PDF_add_weblink(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_attach_file) { - PDF * p; - float llx; - float lly; - float urx; - float ury; - char * PDF_VOLATILE filename; - char * PDF_VOLATILE description; - size_t len_descr; - char * PDF_VOLATILE author; - size_t len_auth; - char * PDF_VOLATILE mimetype; - char * PDF_VOLATILE icon; - dXSARGS ; - - if (items != 10) - croak("Usage: PDF_attach_file(p, llx, lly, urx, ury, filename, description, author, mimetype, icon);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_attach_file. Expected PDFPtr."); - XSRETURN(1); - } - llx = (float ) SvNV(ST(1)); - lly = (float ) SvNV(ST(2)); - urx = (float ) SvNV(ST(3)); - ury = (float ) SvNV(ST(4)); - filename = (char *) SvPV(ST(5),PL_na); - description = (char *) SvPV(ST(6),len_descr); - author = (char *) SvPV(ST(7),len_auth); - mimetype = (char *) SvPV(ST(8),PL_na); - icon = (char *) SvPV(ST(9),PL_na); - - try { PDF_attach_file2(p,llx,lly,urx,ury,filename,0,description,(int) len_descr,author,(int) len_auth,mimetype,icon); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_border_color) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_set_border_color(p, red, green, blue);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_border_color. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - - try { PDF_set_border_color(_arg0,_arg1,_arg2,_arg3); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_border_dash) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_border_dash(p, w, b);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_border_dash. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_set_border_dash(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_border_style) { - PDF * _arg0; - char * PDF_VOLATILE _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_border_style(p, style, width);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_border_style. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_set_border_style(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_basic.c */ -XS(_wrap_PDF_begin_page) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_begin_page(p, width, height);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_begin_page. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_begin_page(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_close) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_close(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_close. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_close(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_delete) { - PDF * p; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_delete(p);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_delete. Expected PDFPtr."); - XSRETURN(1); - } - - /* no try catch here */ - PDF_delete(p); - - XSRETURN(0); -} - -XS(_wrap_PDF_end_page) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_end_page(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_end_page. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_end_page(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_get_apiname) { - char * _result; - PDF * _arg0; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_get_apiname(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_apiname. Expected PDFPtr."); - XSRETURN(1); - } - - try { - _result = (char *)PDF_get_apiname(_arg0); - } else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setpv((SV*)ST(argvi++),(char *) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_get_buffer) { - const char * _result; - PDF * _arg0; - long size; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_get_buffer(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0, "PDFPtr")) { - croak("Type error in argument 1 of PDF_get_buffer. Expected PDFPtr."); - XSRETURN(1); - } - - try { _result = (char *)PDF_get_buffer(_arg0, &size); - } - else { - SWIG_exception(error_message); - } - - ST(0) = sv_newmortal(); - sv_setpvn((SV*)ST(0), (char *) _result, size); - XSRETURN(1); -} - -XS(_wrap_PDF_get_errmsg) { - char * _result; - PDF * _arg0; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_get_errmsg(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_errmsg. Expected PDFPtr."); - XSRETURN(1); - } - - try { - _result = (char *)PDF_get_errmsg(_arg0); - } else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setpv((SV*)ST(argvi++),(char *) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_get_errnum) { - int _result; - PDF * _arg0; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_get_errnum(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_errnum. Expected PDFPtr."); - XSRETURN(1); - } - - try { _result = (int )PDF_get_errnum(_arg0); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_new) { - PDF * _result; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - char versionbuf[32]; - - if (items != 0) - croak("Usage: PDF_new();"); - - try { - _result = (PDF*)PDF_new2(pdf_swig_errorhandler, NULL, NULL, NULL, NULL); - - if (_result) { -#if defined(ACTIVEPERL_VERSION) - sprintf(versionbuf, "ASperl %s", PERLFILEVERSION); -#elif defined(PERL_REVISION) && defined(PERL_VERSION) && defined(PERL_SUBVERSION) - sprintf(versionbuf, "Perl %d.%d.%d", - PERL_REVISION, PERL_VERSION, PERL_SUBVERSION); -#else - sprintf(versionbuf, "Perl"); -#endif - PDF_set_parameter(_result, "binding", versionbuf); - } else { - SWIG_exception("PDF_new: internal error"); - } - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setref_pv(ST(argvi++),"PDFPtr", (void *) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_open_file) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_open_file(p,filename);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_file. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - - try { _result = (int )PDF_open_file(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -/* p_block.c */ - -XS(_wrap_PDF_fill_imageblock) { - int _result; - PDF * p; - int PDF_VOLATILE page; - char * PDF_VOLATILE blockname; - int PDF_VOLATILE image; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fill_imageblock(p, page, blockname, image, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fill_imageblock. Expected PDFPtr."); - XSRETURN(1); - } - page = (int )SvIV(ST(1)); - blockname = (char *) SvPV(ST(2),PL_na); - image = (int )SvIV(ST(3)); - optlist = (char *) SvPV(ST(4),PL_na); - - try { _result = (int )PDF_fill_imageblock(p,page, blockname, image, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_fill_pdfblock) { - int _result; - PDF * p; - int PDF_VOLATILE page; - char * PDF_VOLATILE blockname; - int PDF_VOLATILE contents; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fill_pdfblock(p, page, blockname, contents, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fill_pdfblock. Expected PDFPtr."); - XSRETURN(1); - } - page = (int )SvIV(ST(1)); - blockname = (char *) SvPV(ST(2),PL_na); - contents = (int )SvIV(ST(3)); - optlist = (char *) SvPV(ST(4),PL_na); - - try { _result = (int )PDF_fill_pdfblock(p,page, blockname, contents, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_fill_textblock) { - int _result; - PDF * p; - int PDF_VOLATILE page; - char * PDF_VOLATILE blockname; - char * PDF_VOLATILE text; - size_t len; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fill_textblock(p, page, blockname, text, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fill_textblock. Expected PDFPtr."); - XSRETURN(1); - } - page = (int )SvIV(ST(1)); - blockname = (char *) SvPV(ST(2),PL_na); - text = (char *) SvPV(ST(3),len); - optlist = (char *) SvPV(ST(4),PL_na); - - try { _result = (int )PDF_fill_textblock(p,page, blockname, text, len, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -/* p_color.c */ - -XS(_wrap_PDF_makespotcolor) { - int _result; - PDF * p; - char * PDF_VOLATILE spotname; - int PDF_VOLATILE reserved = 0; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - /* to be compatible to old buggy version we allow two or three parameters */ - if (items != 3 && items != 2) - croak("Usage: PDF_makespotcolor(p, spotname);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_makespotcolor. Expected PDFPtr."); - XSRETURN(1); - } - spotname = (char *) SvPV(ST(1),PL_na); - /* Ignore "reserved" parameter, was buggy in V4 wrapper, V5 need 0 */ - /* reserved = (int )SvIV(ST(2)); */ - - try { _result = (int )PDF_makespotcolor(p, spotname, reserved); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_setcolor) { - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - int argvi = 0; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_setcolor(p, fstype, colorspace, c1, c2, c3, c4);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setcolor. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - _arg6 = (float ) SvNV(ST(6)); - - try { PDF_setcolor(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(argvi); -} - -XS(_wrap_PDF_setgray) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setgray(p, gray);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setgray. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setcolor(_arg0, "fillstroke", "gray", _arg1, 0, 0, 0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setgray_fill) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setgray_fill(p, gray);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setgray_fill. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setcolor(_arg0, "fill", "gray", _arg1, 0, 0, 0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setgray_stroke) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setgray_stroke(p, gray);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setgray_stroke. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setcolor(_arg0, "stroke", "gray", _arg1, 0, 0, 0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setrgbcolor) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_setrgbcolor(p, red, green, blue);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setrgbcolor. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - - try { PDF_setcolor(_arg0, "fillstroke", "rgb", _arg1, _arg2, _arg3,0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setrgbcolor_fill) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_setrgbcolor_fill(p, red, green, blue);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setrgbcolor_fill. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - - try { PDF_setcolor(_arg0, "fill", "rgb", _arg1, _arg2, _arg3, 0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setrgbcolor_stroke) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_setrgbcolor_stroke(p,red,green,blue);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setrgbcolor_stroke. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - - try { PDF_setcolor(_arg0, "stroke", "rgb", _arg1, _arg2, _arg3, 0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_draw.c */ - -XS(_wrap_PDF_arc) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_arc(p, x, y, r, alpha, beta);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_arc. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - - try { PDF_arc(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_arcn) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - int argvi = 0; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_arcn(p, x, y, r, alpha, beta);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_arcn. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - - try { PDF_arcn(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_circle) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_circle(p, x, y, r);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_circle. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - - try { PDF_circle(_arg0,_arg1,_arg2,_arg3); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_clip) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_clip(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_clip. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_clip(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_closepath) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_closepath(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_closepath. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_closepath(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_closepath_fill_stroke) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_closepath_fill_stroke(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_closepath_fill_stroke. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_closepath_fill_stroke(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_closepath_stroke) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_closepath_stroke(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_closepath_stroke. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_closepath_stroke(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_curveto) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_curveto(p, x1, y1, x2, y2, x3, y3);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_curveto. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - _arg6 = (float ) SvNV(ST(6)); - - try { PDF_curveto(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_endpath) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_endpath(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_endpath. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_endpath(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_fill) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_fill(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fill. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_fill(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_fill_stroke) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_fill_stroke(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fill_stroke. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_fill_stroke(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_lineto) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_lineto(p, x, y);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_lineto. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_lineto(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_moveto) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_moveto(p, x, y);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_moveto. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_moveto(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_rect) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_rect(p, x, y, width, height);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_rect. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - - try { PDF_rect(_arg0,_arg1,_arg2,_arg3,_arg4); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_stroke) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_stroke(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_stroke. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_stroke(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_encoding.c */ - -XS(_wrap_PDF_encoding_set_char) { - PDF * p; - char * PDF_VOLATILE encoding; - int PDF_VOLATILE slot; - char * PDF_VOLATILE glyphname; - int PDF_VOLATILE uv; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_encoding_set_char(p, encoding, slot, glyphname, uv);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_encoding_set_char. Expected PDFPtr."); - XSRETURN(1); - } - - encoding = (char *) SvPV(ST(1),PL_na); - slot = (int )SvIV(ST(2)); - glyphname = (char *) SvPV(ST(3),PL_na); - uv = (int )SvIV(ST(4)); - - try { PDF_encoding_set_char(p, encoding, slot, glyphname, uv); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - - -/* p_font.c */ - -XS(_wrap_PDF_findfont) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - int PDF_VOLATILE _arg3; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_findfont(p, fontname, encoding, embed);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_findfont. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - _arg3 = (int )SvIV(ST(3)); - - try { _result = (int )PDF_findfont(_arg0,_arg1,_arg2,_arg3); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_load_font) { - int _result; - PDF * p; - char * PDF_VOLATILE fontname; - char * PDF_VOLATILE encoding; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_load_font(p, fontname, encoding, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_load_font. Expected PDFPtr."); - XSRETURN(1); - } - fontname = (char *) SvPV(ST(1),PL_na); - encoding = (char *) SvPV(ST(2),PL_na); - optlist = (char *) SvPV(ST(3),PL_na); - - try { _result = (int )PDF_load_font(p, fontname, 0, encoding, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_setfont) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_setfont(p, font, fontsize);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setfont. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_setfont(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_gstate.c */ - -XS(_wrap_PDF_concat) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_concat(p, a, b, c, d, e, f);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_concat. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - _arg6 = (float ) SvNV(ST(6)); - - try { PDF_concat(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_initgraphics) { - PDF * _arg0; - int argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_initgraphics(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_initgraphics. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_initgraphics(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_restore) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_restore(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_restore. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_restore(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_rotate) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_rotate(p, phi);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_rotate. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_rotate(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_save) { - PDF * _arg0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_save(p);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_save. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_save(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_scale) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_scale(p, sx, sy);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_scale. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_scale(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setdash) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_setdash(p, b, w);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setdash. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_setdash(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setdashpattern) { - PDF * p; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setdashpattern(p, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setdashpattern. Expected PDFPtr."); - XSRETURN(1); - } - optlist = (char *) SvPV(ST(1),PL_na); - - try { PDF_setdashpattern(p, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setflat) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setflat(p, flatness);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setflat. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setflat(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setlinecap) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setlinecap(p, linecap);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setlinecap. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_setlinecap(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setlinejoin) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setlinejoin(p, linejoin);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setlinejoin. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_setlinejoin(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setlinewidth) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setlinewidth(p, width);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setlinewidth. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setlinewidth(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setmatrix) { - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - int argvi = 0; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_setmatrix(p, a, b, c, d, e, f);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setmatrix. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - _arg6 = (float ) SvNV(ST(6)); - - try { PDF_setmatrix(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_setmiterlimit) { - PDF * _arg0; - float _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setmiterlimit(p, miter);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_setmiterlimit. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - - try { PDF_setmiterlimit(_arg0,_arg1); -} - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_setpolydash) { - PDF *p; - SV *val; - AV *av; - float carray[MAX_DASH_LENGTH]; - int PDF_VOLATILE length; - int i; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_setpolydash(p, arrayref);"); - - if (SWIG_GetPtr(ST(0),(void **) &p, "PDFPtr")) { - croak("Type error in argument 1 of PDF_setpolydash. Expected PDFPtr."); - XSRETURN(1); - } - - if (!SvROK(ST(1))) { - croak("Type error in argument 2 of PDF_setpolydash. Expected reference to array."); - XSRETURN(1); - } - - av = (AV *) SvRV(ST(1)); - length = (int) av_len(av) + 1; - - if (length > MAX_DASH_LENGTH) - length = MAX_DASH_LENGTH; - - for (i = 0; i < length; i++) { - val = *av_fetch(av, i, 0); - if ((!SvNOK(val)) && (!SvIOK(val))) { - croak("expected a reference to a float array in PDF_setpolydash\n"); - } - carray[i] = SvNV(val); - } - - try { PDF_setpolydash(p, carray, length); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - -XS(_wrap_PDF_skew) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_skew(p, alpha, beta);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_skew. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_skew(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_translate) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_translate(p, tx, ty);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_translate. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_translate(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_hyper.c */ - -XS(_wrap_PDF_add_bookmark) { - int _result; - PDF * p; - char * PDF_VOLATILE text; - size_t len; - int PDF_VOLATILE parent; - int PDF_VOLATILE open; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_add_bookmark(p, text, parent, open);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_bookmark. Expected PDFPtr."); - XSRETURN(1); - } - text = (char *) SvPV(ST(1),len); - parent = (int )SvIV(ST(2)); - open = (int )SvIV(ST(3)); - - try { _result = PDF_add_bookmark2(p,text,(int) len,parent,open); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_add_nameddest) { - PDF * p; - char * PDF_VOLATILE name; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_add_nameddest(p, name, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_nameddest. Expected PDFPtr."); - XSRETURN(1); - } - name = (char *) SvPV(ST(1),PL_na); - optlist = (char *) SvPV(ST(2),PL_na); - - try { PDF_add_nameddest(p, name, 0, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_info) { - PDF * p; - char * PDF_VOLATILE key; - char * PDF_VOLATILE value; - size_t len; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_info(p, key, value);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_info. Expected PDFPtr."); - XSRETURN(1); - } - key = (char *) SvPV(ST(1),PL_na); - value = (char *) SvPV(ST(2),len); - - try { PDF_set_info2(p,key,value,(int) len); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_icc.c */ - -XS(_wrap_PDF_load_iccprofile) { - int _result; - PDF * p; - char * PDF_VOLATILE profilename; - char * PDF_VOLATILE optlist; - int argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_load_iccprofile(p, profilename, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_load_iccprofile. Expected PDFPtr."); - XSRETURN(1); - } - profilename = (char *) SvPV(ST(1),PL_na); - optlist = (char *) SvPV(ST(2),PL_na); - - try { _result = PDF_load_iccprofile(p, profilename, 0, optlist); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -/* p_image.c */ - -XS(_wrap_PDF_add_thumbnail) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - int argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_add_thumbnail(p, image);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_add_thumbnail. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_add_thumbnail(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_close_image) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_close_image(p, image);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_close_image. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_close_image(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_fit_image) { - PDF * p; - int image; - float x; - float y; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fit_image(p, image, x, y, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fit_image. Expected PDFPtr."); - XSRETURN(1); - } - image = (int )SvIV(ST(1)); - x = (float ) SvNV(ST(2)); - y = (float ) SvNV(ST(3)); - optlist = (char *) SvPV(ST(4),PL_na); - - try { PDF_fit_image(p, image, x, y, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_load_image) { - int _result; - PDF * p; - char * PDF_VOLATILE imagetype; - char * PDF_VOLATILE filename; - char * PDF_VOLATILE optlist; - int argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_load_image(p, imagetype, filename, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_load_image. Expected PDFPtr."); - XSRETURN(1); - } - imagetype = (char *) SvPV(ST(1),PL_na); - filename = (char *) SvPV(ST(2),PL_na); - optlist = (char *) SvPV(ST(3),PL_na); - - try { _result = PDF_load_image(p, imagetype, filename, 0, optlist); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -XS(_wrap_PDF_open_CCITT) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - int PDF_VOLATILE _arg2; - int PDF_VOLATILE _arg3; - int PDF_VOLATILE _arg4; - int PDF_VOLATILE _arg5; - int PDF_VOLATILE _arg6; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_open_CCITT(p, filename, width, height, BitReverse, K, BlackIs1);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_CCITT. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (int )SvIV(ST(2)); - _arg3 = (int )SvIV(ST(3)); - _arg4 = (int )SvIV(ST(4)); - _arg5 = (int )SvIV(ST(5)); - _arg6 = (int )SvIV(ST(6)); - - try { _result = (int )PDF_open_CCITT(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_open_image) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - char * PDF_VOLATILE _arg3; - long PDF_VOLATILE _arg4; - int PDF_VOLATILE _arg5; - int PDF_VOLATILE _arg6; - int PDF_VOLATILE _arg7; - int PDF_VOLATILE _arg8; - char * PDF_VOLATILE _arg9; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 10) - croak("Usage: PDF_open_image(p, imagetype, source, data, length, width, height, components, bpc, params);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_image. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - _arg3 = (char *) SvPV(ST(3),PL_na); - _arg4 = (long )SvIV(ST(4)); - _arg5 = (int )SvIV(ST(5)); - _arg6 = (int )SvIV(ST(6)); - _arg7 = (int )SvIV(ST(7)); - _arg8 = (int )SvIV(ST(8)); - _arg9 = (char *) SvPV(ST(9),PL_na); - - try { _result = (int )PDF_open_image(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_open_image_file) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - char * PDF_VOLATILE _arg3; - int PDF_VOLATILE _arg4; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_open_image_file(p, imagetype, filename, stringparam, intparam);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_image_file. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - _arg3 = (char *) SvPV(ST(3),PL_na); - _arg4 = (int )SvIV(ST(4)); - - try { _result = (int )PDF_open_image_file(_arg0,_arg1,_arg2,_arg3,_arg4); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_place_image) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - float _arg2; - float _arg3; - float _arg4; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_place_image(p, image, x, y, scale);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_place_image. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - - try { PDF_place_image(_arg0,_arg1,_arg2,_arg3,_arg4); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -/* p_params.c */ - -XS(_wrap_PDF_get_parameter) { - char * _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - float _arg2; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_get_parameter(p, key, modifier);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_parameter. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (float ) SvNV(ST(2)); - - try { _result = (char *)PDF_get_parameter(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setpv((SV*)ST(argvi++),(char *) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_get_value) { - float _result; - PDF * p; - char * PDF_VOLATILE key; - float value; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_get_value(p, key, modifier);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - /* allow get_value with null-pointer */ - p = (PDF *)0; - /*croak("Type error in argument 1 of PDF_get_value. Expected PDFPtr."); - XSRETURN(1); - */ - } - key = (char *) SvPV(ST(1),PL_na); - value = (float ) SvNV(ST(2)); - - try { _result = (float )PDF_get_value(p,key,value); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setnv(ST(argvi++), (double) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_set_parameter) { - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_parameter(p, key, value);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_parameter. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - - try { PDF_set_parameter(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_value) { - PDF * _arg0; - char * PDF_VOLATILE _arg1; - float _arg2; - int argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_value(p, key, value);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_value. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_set_value(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -/* p_pattern.c */ - -XS(_wrap_PDF_begin_pattern) { - int _result; - PDF * _arg0; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int PDF_VOLATILE _arg5; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_begin_pattern(p, width, height, xstep, ystep, painttype);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_begin_pattern. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (int )SvIV(ST(5)); - - try { _result = (int )PDF_begin_pattern(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_end_pattern) { - PDF * _arg0; - int argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_end_pattern(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_end_pattern. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_end_pattern(_arg0); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -/* p_pdi.c */ -XS(_wrap_PDF_close_pdi) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - int argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_close_pdi(p, doc);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_close_pdi. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_close_pdi(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_close_pdi_page) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - int argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_close_pdi_page(p, page);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_close_pdi_page. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - - try { PDF_close_pdi_page(_arg0,_arg1); - } - else { - SWIG_exception(error_message); - } - XSRETURN(argvi); -} - -XS(_wrap_PDF_fit_pdi_page) { - PDF * p; - int PDF_VOLATILE page; - float x; - float y; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fit_pdi_page(p, page, x, y, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fit_pdi_page. Expected PDFPtr."); - XSRETURN(1); - } - page = (int )SvIV(ST(1)); - x = (float ) SvNV(ST(2)); - y = (float ) SvNV(ST(3)); - optlist = (char *) SvPV(ST(4),PL_na); - - try { PDF_fit_pdi_page(p, page, x, y, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - - -XS(_wrap_PDF_get_pdi_parameter) { - char * _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - int PDF_VOLATILE _arg2; - int PDF_VOLATILE _arg3; - int PDF_VOLATILE _arg4; - int len; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_get_pdi_parameter(p, key, doc, page, reserved);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_pdi_parameter. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (int )SvIV(ST(2)); - _arg3 = (int )SvIV(ST(3)); - _arg4 = (int )SvIV(ST(4)); - - try { _result = (char *)PDF_get_pdi_parameter(_arg0,_arg1,_arg2,_arg3,_arg4, &len); - } - else { - SWIG_exception(error_message); - } - - ST(0) = sv_newmortal(); - sv_setpvn((SV*)ST(0), (char *) _result, len); - XSRETURN(1); -} - -XS(_wrap_PDF_get_pdi_value) { - float _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - int PDF_VOLATILE _arg2; - int PDF_VOLATILE _arg3; - int PDF_VOLATILE _arg4; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_get_pdi_value(p, key, doc, page, reserved);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_get_pdi_value. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (int )SvIV(ST(2)); - _arg3 = (int )SvIV(ST(3)); - _arg4 = (int )SvIV(ST(4)); - - try { _result = (float )PDF_get_pdi_value(_arg0,_arg1,_arg2,_arg3,_arg4); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setnv(ST(argvi++), (double) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_open_pdi) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - char * PDF_VOLATILE _arg2; - int PDF_VOLATILE _arg3; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_open_pdi(p, filename, stringparam, reserved);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_pdi. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (char *) SvPV(ST(2),PL_na); - _arg3 = (int )SvIV(ST(3)); - - try { _result = (int )PDF_open_pdi(_arg0,_arg1,_arg2,_arg3); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_open_pdi_page) { - int _result; - PDF * _arg0; - int PDF_VOLATILE _arg1; - int PDF_VOLATILE _arg2; - char * PDF_VOLATILE _arg3; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_open_pdi_page(p, doc, page, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_open_pdi_page. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - _arg2 = (int )SvIV(ST(2)); - _arg3 = (char *) SvPV(ST(3),PL_na); - - try { _result = (int )PDF_open_pdi_page(_arg0,_arg1,_arg2,_arg3); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_place_pdi_page) { - PDF * _arg0; - int PDF_VOLATILE _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - dXSARGS ; - - if (items != 6) - croak("Usage: PDF_place_pdi_page(p, image, x, y, sx, sy);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_place_pdi_page. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (int )SvIV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - - try { PDF_place_pdi_page(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_process_pdi) { - int _result; - PDF * p; - int PDF_VOLATILE doc; - int PDF_VOLATILE page; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_process_pdi(p, doc, page, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_process_pdi. Expected PDFPtr."); - XSRETURN(1); - } - doc = (int )SvIV(ST(1)); - page = (int )SvIV(ST(2)); - optlist = (char *) SvPV(ST(3),PL_na); - - try { _result = (int )PDF_process_pdi(p, doc, page, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -/* p_resource.c */ - -XS(_wrap_PDF_create_pvf) { - PDF * p; - char * PDF_VOLATILE filename; - char * PDF_VOLATILE data; - size_t size; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_create_pvf(p, filename, data, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_create_pvf. Expected PDFPtr."); - XSRETURN(1); - } - filename = (char *) SvPV(ST(1),PL_na); - data = (char *) SvPV(ST(2),size); - optlist = (char *) SvPV(ST(3),PL_na); - - try { PDF_create_pvf(p, filename, 0, data, size, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_delete_pvf) { - int _result; - PDF * p; - char * PDF_VOLATILE filename; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_delete_pvf(p, filename);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_delete_pvf. Expected PDFPtr."); - XSRETURN(1); - } - filename = (char *) SvPV(ST(1),PL_na); - - try { _result = (int )PDF_delete_pvf(p, filename, 0); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -/* p_shading.c */ - -XS(_wrap_PDF_shading) { - int _result; - PDF * p; - char * PDF_VOLATILE shtype; - float x0; - float y0; - float x1; - float y1; - float c1; - float c2; - float c3; - float c4; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 11) - croak("Usage: PDF_shading(p, shtype, x0, y0, x1, y1, c1, c2, c3, c4, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_shading. Expected PDFPtr."); - XSRETURN(1); - } - shtype = (char *) SvPV(ST(1),PL_na); - x0 = (float ) SvNV(ST(2)); - y0 = (float ) SvNV(ST(3)); - x1 = (float ) SvNV(ST(4)); - y1 = (float ) SvNV(ST(5)); - c1 = (float ) SvNV(ST(6)); - c2 = (float ) SvNV(ST(7)); - c3 = (float ) SvNV(ST(8)); - c4 = (float ) SvNV(ST(9)); - optlist = (char *) SvPV(ST(10),PL_na); - - try { _result = (int )PDF_shading(p, shtype, x0, y0, x1, y1, c1, c2, c3, c4, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_shading_pattern) { - int _result; - PDF * p; - int PDF_VOLATILE shading; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_shading_pattern(p, shading, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_shading_pattern. Expected PDFPtr."); - XSRETURN(1); - } - shading = (int )SvIV(ST(1)); - optlist = (char *) SvPV(ST(2),PL_na); - - try { _result = (int )PDF_shading_pattern(p, shading, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_shfill) { - PDF * p; - int PDF_VOLATILE shading; - int argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_shfill(p, shading);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_shfill. Expected PDFPtr."); - XSRETURN(1); - } - - shading = (int )SvIV(ST(1)); - - try { PDF_shfill(p, shading); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(argvi); -} - - -/* p_template.c */ - -XS(_wrap_PDF_begin_template) { - int _result; - PDF * _arg0; - float _arg1; - float _arg2; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_begin_template(p, width, height);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_begin_template. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { _result = (int )PDF_begin_template(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_end_template) { - PDF * _arg0; - int argvi = 0; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_end_template(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_end_template. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_end_template(_arg0); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(argvi); -} - -/* p_text.c */ - -XS(_wrap_PDF_continue_text) { - PDF * p; - char * PDF_VOLATILE text; - size_t len; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_continue_text(p, text);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_continue_text. Expected PDFPtr."); - XSRETURN(1); - } - text = (char *) SvPV(ST(1), len); - - try { PDF_continue_text2(p, text, (int) len); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_fit_textline) { - PDF * p; - char * PDF_VOLATILE text; - size_t len; - float x; - float y; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 5) - croak("Usage: PDF_fit_textline(p, text, x, y, optlist);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_fit_textline. Expected PDFPtr."); - XSRETURN(1); - } - text = (char *) SvPV(ST(1), len); - x = (float ) SvNV(ST(2)); - y = (float ) SvNV(ST(3)); - optlist = (char *) SvPV(ST(4), PL_na); - - try { PDF_fit_textline(p, text, (int) len, x, y, optlist); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_set_text_pos) { - PDF * _arg0; - float _arg1; - float _arg2; - dXSARGS ; - - if (items != 3) - croak("Usage: PDF_set_text_pos(p, x, y);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_text_pos. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (float ) SvNV(ST(1)); - _arg2 = (float ) SvNV(ST(2)); - - try { PDF_set_text_pos(_arg0,_arg1,_arg2); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_show) { - PDF * _arg0; - char * PDF_VOLATILE _arg1; - dXSARGS ; - size_t len; - - if (items != 2) - croak("Usage: PDF_show(p, text);"); - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_show. Expected PDFPtr."); - XSRETURN(1); - } - _arg1 = (char *) SvPV(ST(1), len); - - try { PDF_show2(_arg0,_arg1, (int) len); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_show_boxed) { - int _result; - PDF * _arg0; - char * PDF_VOLATILE _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - char * PDF_VOLATILE _arg6; - char * PDF_VOLATILE _arg7; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 8) - croak("Usage: PDF_show_boxed(p, text, left, top, width, height, hmode, feature);"); - - if (SWIG_GetPtr(ST(0),(void **) &_arg0,"PDFPtr")) { - croak("Type error in argument 1 of PDF_show_boxed. Expected PDFPtr."); - XSRETURN(1); - } - - _arg1 = (char *) SvPV(ST(1),PL_na); - _arg2 = (float ) SvNV(ST(2)); - _arg3 = (float ) SvNV(ST(3)); - _arg4 = (float ) SvNV(ST(4)); - _arg5 = (float ) SvNV(ST(5)); - _arg6 = (char *) SvPV(ST(6),PL_na); - _arg7 = (char *) SvPV(ST(7),PL_na); - - try { _result = (int )PDF_show_boxed(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - -XS(_wrap_PDF_show_xy) { - PDF * p; - char * PDF_VOLATILE text; - float x; - float y; - size_t len; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_show_xy(p, text, x, y);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_show_xy. Expected PDFPtr."); - XSRETURN(1); - } - text = (char *) SvPV(ST(1), len); - x = (float ) SvNV(ST(2)); - y = (float ) SvNV(ST(3)); - - try { PDF_show_xy2(p,text, (int) len, x,y); - } - else { - SWIG_exception(error_message); - } - XSRETURN(0); -} - -XS(_wrap_PDF_stringwidth) { - float _result; - PDF * p; - char * PDF_VOLATILE text; - int PDF_VOLATILE font; - float fontsize; - int PDF_VOLATILE argvi = 0; - size_t len; - dXSARGS ; - - if (items != 4) - croak("Usage: PDF_stringwidth(p, text, font, fontsize);"); - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_stringwidth. Expected PDFPtr."); - XSRETURN(1); - } - text = (char *) SvPV(ST(1), len); - font = (int )SvIV(ST(2)); - fontsize = (float ) SvNV(ST(3)); - - try { _result = (float )PDF_stringwidth2(p,text, (int) len, font,fontsize); - } - else { - SWIG_exception(error_message); - } - ST(argvi) = sv_newmortal(); - sv_setnv(ST(argvi++), (double) _result); - XSRETURN(argvi); -} - -/* p_type3.c */ - -XS(_wrap_PDF_begin_font) { - PDF * p; - char * PDF_VOLATILE fontname; - float a, b, c, d, e, f; - char * PDF_VOLATILE optlist; - dXSARGS ; - - if (items != 9) - croak("Usage: PDF_begin_font(p, fontname, a, b, c, d, e, f, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_begin_font. Expected PDFPtr."); - XSRETURN(1); - } - - fontname = (char *) SvPV(ST(1),PL_na); - a = (float )SvNV(ST(2)); - b = (float )SvNV(ST(3)); - c = (float )SvNV(ST(4)); - d = (float )SvNV(ST(5)); - e = (float )SvNV(ST(6)); - f = (float )SvNV(ST(7)); - optlist = (char *) SvPV(ST(8),PL_na); - - try { PDF_begin_font(p, fontname, 0, a, b, c, d, e, f, optlist); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - -XS(_wrap_PDF_begin_glyph) { - PDF * p; - char * PDF_VOLATILE glyphname; - float wx, llx, lly, urx, ury; - dXSARGS ; - - if (items != 7) - croak("Usage: PDF_begin_glyph(p, glyphname, wx, llx, lly, urx, ury);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_begin_glyph. Expected PDFPtr."); - XSRETURN(1); - } - - glyphname = (char *) SvPV(ST(1),PL_na); - wx = (float )SvIV(ST(2)); - llx = (float )SvIV(ST(3)); - lly = (float )SvIV(ST(4)); - urx = (float )SvIV(ST(5)); - ury = (float )SvIV(ST(6)); - - try { PDF_begin_glyph(p, glyphname, wx, llx, lly, urx, ury); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - -XS(_wrap_PDF_end_font) { - PDF * p; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_end_font(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_end_font. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_end_font(p); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - -XS(_wrap_PDF_end_glyph) { - PDF * p; - dXSARGS ; - - if (items != 1) - croak("Usage: PDF_end_glyph(p);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_end_glyph. Expected PDFPtr."); - XSRETURN(1); - } - - try { PDF_end_glyph(p); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - -/* p_xgstate.c */ - -/* -5 int PDF_create_gstate (p, char *optlist) -*/ -XS(_wrap_PDF_create_gstate) { - int _result; - PDF * p; - char * PDF_VOLATILE optlist; - int PDF_VOLATILE argvi = 0; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_create_gstate(p, optlist);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_create_gstate. Expected PDFPtr."); - XSRETURN(1); - } - optlist = (char *) SvPV(ST(1),PL_na); - - try { _result = (int )PDF_create_gstate(p, optlist); - } - else { - SWIG_exception(error_message); - } - - ST(argvi) = sv_newmortal(); - sv_setiv(ST(argvi++),(IV) _result); - XSRETURN(argvi); -} - - -XS(_wrap_PDF_set_gstate) { - PDF * p; - int PDF_VOLATILE gstate; - dXSARGS ; - - if (items != 2) - croak("Usage: PDF_set_gstate(p, gstate);"); - - if (SWIG_GetPtr(ST(0),(void **) &p,"PDFPtr")) { - croak("Type error in argument 1 of PDF_set_gstate. Expected PDFPtr."); - XSRETURN(1); - } - - gstate = (int )SvIV(ST(1)); - - try { PDF_set_gstate(p, gstate); - } - else { - SWIG_exception(error_message); - } - - XSRETURN(0); -} - - - -XS(_wrap_perl5_pdflib_var_init) { - dXSARGS; - (void) items; - - XSRETURN(1); -} -#ifdef __cplusplus -extern "C" -#endif -XS(boot_pdflib_pl) { - dXSARGS; - char *file = __FILE__; - newXS("pdflibc::var_pdflib_init", _wrap_perl5_pdflib_var_init, file); - - (void) items; - - /* Boot the PDFlib core */ - PDF_boot(); - - newXS("pdflibc::PDF_add_launchlink", _wrap_PDF_add_launchlink, file); - newXS("pdflibc::PDF_add_locallink", _wrap_PDF_add_locallink, file); - newXS("pdflibc::PDF_add_note", _wrap_PDF_add_note, file); - newXS("pdflibc::PDF_add_pdflink", _wrap_PDF_add_pdflink, file); - newXS("pdflibc::PDF_add_weblink", _wrap_PDF_add_weblink, file); - newXS("pdflibc::PDF_attach_file", _wrap_PDF_attach_file, file); - newXS("pdflibc::PDF_set_border_color", _wrap_PDF_set_border_color, file); - newXS("pdflibc::PDF_set_border_dash", _wrap_PDF_set_border_dash, file); - newXS("pdflibc::PDF_set_border_style", _wrap_PDF_set_border_style, file); - - newXS("pdflibc::PDF_begin_page", _wrap_PDF_begin_page, file); - newXS("pdflibc::PDF_close", _wrap_PDF_close, file); - newXS("pdflibc::PDF_delete", _wrap_PDF_delete, file); - newXS("pdflibc::PDF_end_page", _wrap_PDF_end_page, file); - newXS("pdflibc::PDF_get_buffer", _wrap_PDF_get_buffer, file); - newXS("pdflibc::PDF_new", _wrap_PDF_new, file); - newXS("pdflibc::PDF_open_file", _wrap_PDF_open_file, file); - newXS("pdflibc::PDF_get_errmsg", _wrap_PDF_get_errmsg, file); - newXS("pdflibc::PDF_get_apiname", _wrap_PDF_get_apiname, file); - newXS("pdflibc::PDF_get_errnum", _wrap_PDF_get_errnum, file); - - newXS("pdflibc::PDF_fill_imageblock", _wrap_PDF_fill_imageblock, file); - newXS("pdflibc::PDF_fill_pdfblock", _wrap_PDF_fill_pdfblock, file); - newXS("pdflibc::PDF_fill_textblock", _wrap_PDF_fill_textblock, file); - - newXS("pdflibc::PDF_makespotcolor", _wrap_PDF_makespotcolor, file); - newXS("pdflibc::PDF_setcolor", _wrap_PDF_setcolor, file); - newXS("pdflibc::PDF_setgray", _wrap_PDF_setgray, file); - newXS("pdflibc::PDF_setgray_fill", _wrap_PDF_setgray_fill, file); - newXS("pdflibc::PDF_setgray_stroke", _wrap_PDF_setgray_stroke, file); - newXS("pdflibc::PDF_setrgbcolor", _wrap_PDF_setrgbcolor, file); - newXS("pdflibc::PDF_setrgbcolor_fill", _wrap_PDF_setrgbcolor_fill, file); - newXS("pdflibc::PDF_setrgbcolor_stroke", _wrap_PDF_setrgbcolor_stroke, file); - - newXS("pdflibc::PDF_arc", _wrap_PDF_arc, file); - newXS("pdflibc::PDF_arcn", _wrap_PDF_arcn, file); - newXS("pdflibc::PDF_circle", _wrap_PDF_circle, file); - newXS("pdflibc::PDF_clip", _wrap_PDF_clip, file); - newXS("pdflibc::PDF_closepath", _wrap_PDF_closepath, file); - newXS("pdflibc::PDF_closepath_fill_stroke", _wrap_PDF_closepath_fill_stroke, file); - newXS("pdflibc::PDF_closepath_stroke", _wrap_PDF_closepath_stroke, file); - newXS("pdflibc::PDF_curveto", _wrap_PDF_curveto, file); - newXS("pdflibc::PDF_endpath", _wrap_PDF_endpath, file); - newXS("pdflibc::PDF_fill", _wrap_PDF_fill, file); - newXS("pdflibc::PDF_fill_stroke", _wrap_PDF_fill_stroke, file); - newXS("pdflibc::PDF_lineto", _wrap_PDF_lineto, file); - newXS("pdflibc::PDF_moveto", _wrap_PDF_moveto, file); - newXS("pdflibc::PDF_rect", _wrap_PDF_rect, file); - newXS("pdflibc::PDF_stroke", _wrap_PDF_stroke, file); - - newXS("pdflibc::PDF_encoding_set_char", _wrap_PDF_encoding_set_char, file); - - newXS("pdflibc::PDF_findfont", _wrap_PDF_findfont, file); - newXS("pdflibc::PDF_load_font", _wrap_PDF_load_font, file); - newXS("pdflibc::PDF_setfont", _wrap_PDF_setfont, file); - - newXS("pdflibc::PDF_concat", _wrap_PDF_concat, file); - newXS("pdflibc::PDF_initgraphics", _wrap_PDF_initgraphics, file); - newXS("pdflibc::PDF_restore", _wrap_PDF_restore, file); - newXS("pdflibc::PDF_rotate", _wrap_PDF_rotate, file); - newXS("pdflibc::PDF_save", _wrap_PDF_save, file); - newXS("pdflibc::PDF_scale", _wrap_PDF_scale, file); - newXS("pdflibc::PDF_setdash", _wrap_PDF_setdash, file); - newXS("pdflibc::PDF_setdashpattern", _wrap_PDF_setdashpattern, file); - newXS("pdflibc::PDF_setflat", _wrap_PDF_setflat, file); - newXS("pdflibc::PDF_setlinecap", _wrap_PDF_setlinecap, file); - newXS("pdflibc::PDF_setlinejoin", _wrap_PDF_setlinejoin, file); - newXS("pdflibc::PDF_setlinewidth", _wrap_PDF_setlinewidth, file); - newXS("pdflibc::PDF_setmatrix", _wrap_PDF_setmatrix, file); - newXS("pdflibc::PDF_setmiterlimit", _wrap_PDF_setmiterlimit, file); - newXS("pdflibc::PDF_setpolydash", _wrap_PDF_setpolydash, file); - newXS("pdflibc::PDF_skew", _wrap_PDF_skew, file); - newXS("pdflibc::PDF_translate", _wrap_PDF_translate, file); - - newXS("pdflibc::PDF_add_bookmark", _wrap_PDF_add_bookmark, file); - newXS("pdflibc::PDF_add_nameddest", _wrap_PDF_add_nameddest, file); - newXS("pdflibc::PDF_set_info", _wrap_PDF_set_info, file); - - newXS("pdflibc::PDF_load_iccprofile", _wrap_PDF_load_iccprofile, file); - - newXS("pdflibc::PDF_add_thumbnail", _wrap_PDF_add_thumbnail, file); - newXS("pdflibc::PDF_close_image", _wrap_PDF_close_image, file); - newXS("pdflibc::PDF_fit_image", _wrap_PDF_fit_image, file); - newXS("pdflibc::PDF_load_image", _wrap_PDF_load_image, file); - newXS("pdflibc::PDF_open_CCITT", _wrap_PDF_open_CCITT, file); - newXS("pdflibc::PDF_open_image", _wrap_PDF_open_image, file); - newXS("pdflibc::PDF_open_image_file", _wrap_PDF_open_image_file, file); - newXS("pdflibc::PDF_place_image", _wrap_PDF_place_image, file); - - newXS("pdflibc::PDF_get_parameter", _wrap_PDF_get_parameter, file); - newXS("pdflibc::PDF_get_value", _wrap_PDF_get_value, file); - newXS("pdflibc::PDF_set_parameter", _wrap_PDF_set_parameter, file); - newXS("pdflibc::PDF_set_value", _wrap_PDF_set_value, file); - - newXS("pdflibc::PDF_begin_pattern", _wrap_PDF_begin_pattern, file); - newXS("pdflibc::PDF_end_pattern", _wrap_PDF_end_pattern, file); - - newXS("pdflibc::PDF_close_pdi", _wrap_PDF_close_pdi, file); - newXS("pdflibc::PDF_close_pdi_page", _wrap_PDF_close_pdi_page, file); - newXS("pdflibc::PDF_fit_pdi_page", _wrap_PDF_fit_pdi_page, file); - newXS("pdflibc::PDF_get_pdi_parameter", _wrap_PDF_get_pdi_parameter, file); - newXS("pdflibc::PDF_get_pdi_value", _wrap_PDF_get_pdi_value, file); - newXS("pdflibc::PDF_open_pdi", _wrap_PDF_open_pdi, file); - newXS("pdflibc::PDF_open_pdi_page", _wrap_PDF_open_pdi_page, file); - newXS("pdflibc::PDF_place_pdi_page", _wrap_PDF_place_pdi_page, file); - newXS("pdflibc::PDF_process_pdi", _wrap_PDF_process_pdi, file); - - newXS("pdflibc::PDF_create_pvf", _wrap_PDF_create_pvf, file); - newXS("pdflibc::PDF_delete_pvf", _wrap_PDF_delete_pvf, file); - - newXS("pdflibc::PDF_shading", _wrap_PDF_shading, file); - newXS("pdflibc::PDF_shading_pattern", _wrap_PDF_shading_pattern, file); - newXS("pdflibc::PDF_shfill", _wrap_PDF_shfill, file); - - newXS("pdflibc::PDF_begin_template", _wrap_PDF_begin_template, file); - newXS("pdflibc::PDF_end_template", _wrap_PDF_end_template, file); - - newXS("pdflibc::PDF_continue_text", _wrap_PDF_continue_text, file); - newXS("pdflibc::PDF_fit_textline", _wrap_PDF_fit_textline, file); - newXS("pdflibc::PDF_set_text_pos", _wrap_PDF_set_text_pos, file); - newXS("pdflibc::PDF_show", _wrap_PDF_show, file); - newXS("pdflibc::PDF_show_boxed", _wrap_PDF_show_boxed, file); - newXS("pdflibc::PDF_show_xy", _wrap_PDF_show_xy, file); - newXS("pdflibc::PDF_stringwidth", _wrap_PDF_stringwidth, file); - - newXS("pdflibc::PDF_begin_font", _wrap_PDF_begin_font, file); - newXS("pdflibc::PDF_begin_glyph", _wrap_PDF_begin_glyph, file); - newXS("pdflibc::PDF_end_font", _wrap_PDF_end_font, file); - newXS("pdflibc::PDF_end_glyph", _wrap_PDF_end_glyph, file); - - newXS("pdflibc::PDF_create_gstate", _wrap_PDF_create_gstate, file); - newXS("pdflibc::PDF_set_gstate", _wrap_PDF_set_gstate, file); - -/* - * These are the pointer type-equivalency mappings. - * (Used by the SWIG pointer type-checker). - */ - SWIG_RegisterMapping("unsigned short","short",0); - SWIG_RegisterMapping("PDF","struct PDF_s",0); - SWIG_RegisterMapping("long","unsigned long",0); - SWIG_RegisterMapping("long","signed long",0); - SWIG_RegisterMapping("signed short","short",0); - SWIG_RegisterMapping("signed int","int",0); - SWIG_RegisterMapping("short","unsigned short",0); - SWIG_RegisterMapping("short","signed short",0); - SWIG_RegisterMapping("unsigned long","long",0); - SWIG_RegisterMapping("int","unsigned int",0); - SWIG_RegisterMapping("int","signed int",0); - SWIG_RegisterMapping("unsigned int","int",0); - SWIG_RegisterMapping("struct PDF_s","PDF",0); - SWIG_RegisterMapping("signed long","long",0); - ST(0) = &PL_sv_yes; - XSRETURN(1); -} diff --git a/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.pm b/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.pm deleted file mode 100644 index daa3e0fa92..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/pdflib_pl.pm +++ /dev/null @@ -1,174 +0,0 @@ -# $Id: pdflib_pl.pm 14574 2005-10-29 16:27:43Z bonefish $ -package pdflib_pl; -require Exporter; -require DynaLoader; -$VERSION=5.0; -@ISA = qw(Exporter DynaLoader); -package pdflibc; -bootstrap pdflib_pl; -var_pdflib_init(); -@EXPORT = qw( ); - -# ---------- BASE METHODS ------------- - -package pdflib_pl; - -sub TIEHASH { - my ($classname,$obj) = @_; - return bless $obj, $classname; -} - -sub CLEAR { } - -sub this { - my $ptr = shift; - return tied(%$ptr); -} - - -# ------- FUNCTION WRAPPERS -------- - -package pdflib_pl; - -# p_annots.c -*PDF_add_launchlink = *pdflibc::PDF_add_launchlink; -*PDF_add_locallink = *pdflibc::PDF_add_locallink; -*PDF_add_note = *pdflibc::PDF_add_note; -*PDF_add_pdflink = *pdflibc::PDF_add_pdflink; -*PDF_add_weblink = *pdflibc::PDF_add_weblink; -*PDF_attach_file = *pdflibc::PDF_attach_file; -*PDF_set_border_color = *pdflibc::PDF_set_border_color; -*PDF_set_border_dash = *pdflibc::PDF_set_border_dash; -*PDF_set_border_style = *pdflibc::PDF_set_border_style; -# p_basic.c -*PDF_begin_page = *pdflibc::PDF_begin_page; -*PDF_close = *pdflibc::PDF_close; -*PDF_delete = *pdflibc::PDF_delete; -*PDF_end_page = *pdflibc::PDF_end_page; -*PDF_get_apiname = *pdflibc::PDF_get_apiname; -*PDF_get_buffer = *pdflibc::PDF_get_buffer; -*PDF_get_errmsg = *pdflibc::PDF_get_errmsg; -*PDF_get_errnum = *pdflibc::PDF_get_errnum; -*PDF_new = *pdflibc::PDF_new; -*PDF_open_file = *pdflibc::PDF_open_file; -# p_block.c -*PDF_fill_imageblock = *pdflibc::PDF_fill_imageblock; -*PDF_fill_pdfblock = *pdflibc::PDF_fill_pdfblock; -*PDF_fill_textblock = *pdflibc::PDF_fill_textblock; -# p_color.c -*PDF_makespotcolor = *pdflibc::PDF_makespotcolor; -*PDF_setcolor = *pdflibc::PDF_setcolor; -*PDF_setgray = *pdflibc::PDF_setgray; -*PDF_setgray_fill = *pdflibc::PDF_setgray_fill; -*PDF_setgray_stroke = *pdflibc::PDF_setgray_stroke; -*PDF_setrgbcolor = *pdflibc::PDF_setrgbcolor; -*PDF_setrgbcolor_fill = *pdflibc::PDF_setrgbcolor_fill; -*PDF_setrgbcolor_stroke = *pdflibc::PDF_setrgbcolor_stroke; -# p_draw.c -*PDF_arc = *pdflibc::PDF_arc; -*PDF_arcn = *pdflibc::PDF_arcn; -*PDF_circle = *pdflibc::PDF_circle; -*PDF_clip = *pdflibc::PDF_clip; -*PDF_closepath = *pdflibc::PDF_closepath; -*PDF_closepath_fill_stroke = *pdflibc::PDF_closepath_fill_stroke; -*PDF_closepath_stroke = *pdflibc::PDF_closepath_stroke; -*PDF_curveto = *pdflibc::PDF_curveto; -*PDF_endpath = *pdflibc::PDF_endpath; -*PDF_fill = *pdflibc::PDF_fill; -*PDF_fill_stroke = *pdflibc::PDF_fill_stroke; -*PDF_lineto = *pdflibc::PDF_lineto; -*PDF_moveto = *pdflibc::PDF_moveto; -*PDF_rect = *pdflibc::PDF_rect; -*PDF_stroke = *pdflibc::PDF_stroke; -# p_encoding.c -*PDF_encoding_set_char = *pdflibc::PDF_encoding_set_char; -# p_font.c -*PDF_findfont = *pdflibc::PDF_findfont; -*PDF_load_font = *pdflibc::PDF_load_font; -*PDF_setfont = *pdflibc::PDF_setfont; -# p_gstate.c -*PDF_concat = *pdflibc::PDF_concat; -*PDF_initgraphics = *pdflibc::PDF_initgraphics; -*PDF_restore = *pdflibc::PDF_restore; -*PDF_rotate = *pdflibc::PDF_rotate; -*PDF_save = *pdflibc::PDF_save; -*PDF_scale = *pdflibc::PDF_scale; -*PDF_setdash = *pdflibc::PDF_setdash; -*PDF_setdashpattern = *pdflibc::PDF_setdashpattern; -*PDF_setflat = *pdflibc::PDF_setflat; -*PDF_setlinecap = *pdflibc::PDF_setlinecap; -*PDF_setlinejoin = *pdflibc::PDF_setlinejoin; -*PDF_setlinewidth = *pdflibc::PDF_setlinewidth; -*PDF_setmatrix = *pdflibc::PDF_setmatrix; -*PDF_setmiterlimit = *pdflibc::PDF_setmiterlimit; -*PDF_setpolydash = *pdflibc::PDF_setpolydash; -*PDF_skew = *pdflibc::PDF_skew; -*PDF_translate = *pdflibc::PDF_translate; -# p_hyper.c -*PDF_add_bookmark = *pdflibc::PDF_add_bookmark; -*PDF_add_nameddest = *pdflibc::PDF_add_nameddest; -*PDF_set_info = *pdflibc::PDF_set_info; -# p_icc.c -*PDF_load_iccprofile = *pdflibc::PDF_load_iccprofile; -# p_image.c -*PDF_add_thumbnail = *pdflibc::PDF_add_thumbnail; -*PDF_close_image = *pdflibc::PDF_close_image; -*PDF_fit_image = *pdflibc::PDF_fit_image; -*PDF_load_image = *pdflibc::PDF_load_image; -*PDF_open_CCITT = *pdflibc::PDF_open_CCITT; -*PDF_open_image = *pdflibc::PDF_open_image; -*PDF_open_image_file = *pdflibc::PDF_open_image_file; -*PDF_place_image = *pdflibc::PDF_place_image; -# p_parmas.c -*PDF_get_parameter = *pdflibc::PDF_get_parameter; -*PDF_get_value = *pdflibc::PDF_get_value; -*PDF_set_parameter = *pdflibc::PDF_set_parameter; -*PDF_set_value = *pdflibc::PDF_set_value; -# p_pattern.c -*PDF_begin_pattern = *pdflibc::PDF_begin_pattern; -*PDF_end_pattern = *pdflibc::PDF_end_pattern; -# p_pdi.c -*PDF_close_pdi = *pdflibc::PDF_close_pdi; -*PDF_close_pdi_page = *pdflibc::PDF_close_pdi_page; -*PDF_fit_pdi_page = *pdflibc::PDF_fit_pdi_page; -*PDF_get_pdi_parameter = *pdflibc::PDF_get_pdi_parameter; -*PDF_get_pdi_value = *pdflibc::PDF_get_pdi_value; -*PDF_open_pdi = *pdflibc::PDF_open_pdi; -*PDF_open_pdi_page = *pdflibc::PDF_open_pdi_page; -*PDF_place_pdi_page = *pdflibc::PDF_place_pdi_page; -*PDF_process_pdi = *pdflibc::PDF_process_pdi; -# p_resource.c -*PDF_create_pvf = *pdflibc::PDF_create_pvf; -*PDF_delete_pvf = *pdflibc::PDF_delete_pvf; -# p_shading.c -*PDF_shading = *pdflibc::PDF_shading; -*PDF_shading_pattern = *pdflibc::PDF_shading_pattern; -*PDF_shfill = *pdflibc::PDF_shfill; -# p_template.c -*PDF_begin_template = *pdflibc::PDF_begin_template; -*PDF_end_template = *pdflibc::PDF_end_template; -# p_text.c -*PDF_continue_text = *pdflibc::PDF_continue_text; -*PDF_fit_textline = *pdflibc::PDF_fit_textline; -*PDF_set_text_pos = *pdflibc::PDF_set_text_pos; -*PDF_show = *pdflibc::PDF_show; -*PDF_show_boxed = *pdflibc::PDF_show_boxed; -*PDF_show_xy = *pdflibc::PDF_show_xy; -*PDF_stringwidth = *pdflibc::PDF_stringwidth; -# p_type3.c -*PDF_begin_font = *pdflibc::PDF_begin_font; -*PDF_begin_glyph = *pdflibc::PDF_begin_glyph; -*PDF_end_font = *pdflibc::PDF_end_font; -*PDF_end_glyph = *pdflibc::PDF_end_glyph; -# p_xgstate.c -*PDF_create_gstate = *pdflibc::PDF_create_gstate; -*PDF_set_gstate = *pdflibc::PDF_set_gstate; - - -@EXPORT = qw( PDF_add_launchlink PDF_add_locallink PDF_add_note PDF_add_pdflink PDF_add_weblink PDF_attach_file PDF_set_border_color PDF_set_border_dash PDF_set_border_style PDF_begin_page PDF_close PDF_delete PDF_end_page PDF_get_apiname PDF_get_buffer PDF_get_errmsg PDF_get_errnum PDF_new PDF_open_file PDF_fill_imageblock PDF_fill_pdfblock PDF_fill_textblock PDF_makespotcolor PDF_setcolor PDF_setgray PDF_setgray_fill PDF_setgray_stroke PDF_setrgbcolor PDF_setrgbcolor_fill PDF_setrgbcolor_stroke PDF_arc PDF_arcn PDF_circle PDF_clip PDF_closepath PDF_closepath_fill_stroke PDF_closepath_stroke PDF_curveto PDF_endpath PDF_fill PDF_fill_stroke PDF_lineto PDF_moveto PDF_rect PDF_stroke PDF_encoding_set_char PDF_findfont PDF_load_font PDF_setfont PDF_concat PDF_initgraphics PDF_restore PDF_rotate PDF_save PDF_scale PDF_setdash PDF_setdashpattern PDF_setflat PDF_setlinecap PDF_setlinejoin PDF_setlinewidth PDF_setmatrix PDF_setmiterlimit PDF_setpolydash PDF_skew PDF_translate PDF_add_bookmark PDF_add_nameddest PDF_set_info PDF_load_iccprofile PDF_add_thumbnail PDF_close_image PDF_fit_image PDF_load_image PDF_open_CCITT PDF_open_image PDF_open_image_file PDF_place_image PDF_get_parameter PDF_get_value PDF_set_parameter PDF_set_value PDF_begin_pattern PDF_end_pattern PDF_close_pdi PDF_close_pdi_page PDF_fit_pdi_page PDF_get_pdi_parameter PDF_get_pdi_value PDF_open_pdi PDF_open_pdi_page PDF_place_pdi_page PDF_process_pdi PDF_create_pvf PDF_delete_pvf PDF_shading PDF_shading_pattern PDF_shfill PDF_begin_template PDF_end_template PDF_continue_text PDF_fit_textline PDF_set_text_pos PDF_show PDF_show_boxed PDF_show_xy PDF_stringwidth PDF_begin_font PDF_begin_glyph PDF_end_font PDF_end_glyph PDF_create_gstate PDF_set_gstate ); - -# ------- VARIABLE STUBS -------- - -package pdflib_pl; - -1; diff --git a/src/libs/pdflib/bind/pdflib/perl/quickreference.pl b/src/libs/pdflib/bind/pdflib/perl/quickreference.pl deleted file mode 100644 index fe6420afdf..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/quickreference.pl +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/perl -# $Id: quickreference.pl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib/PDI client: mini imposition demo -# - -use pdflib_pl 5.0; - -$infile = "reference.pdf"; -# This is where font/image/PDF input files live. Adjust as necessary. -$searchpath = "../data"; -$maxrow = 2; -$maxcol = 2; -$pagecount = 4; -$width = 500.0; -$height = 770.0; -$startpage = 1; -$endpage = 4; - -$p = PDF_new(); -eval{ - if (PDF_open_file($p, "quickreference.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_set_parameter($p, "SearchPath", $searchpath); - - # This line is required to avoid problems on Japanese systems - PDF_set_parameter($p, "hypertextencoding", "winansi"); - - PDF_set_info($p, "Creator", "quickreference.pl"); - PDF_set_info($p, "Author", "Thomas Merz"); - PDF_set_info($p, "Title", "mini imposition demo (Perl)"); - - $manual = PDF_open_pdi($p, $infile, "", 0); - if ($manual == -1) { - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - $row = 0; - $col = 0; - - PDF_set_parameter($p, "topdown", "true"); - - for ($pageno = $startpage; $pageno <= $endpage; $pageno++) { - if ($row == 0 && $col == 0) { - PDF_begin_page($p, $width, $height); - $font = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); - PDF_setfont($p, $font, 18); - PDF_set_text_pos($p, 24, 24); - PDF_show($p, "PDFlib Quick Reference"); - } - - $page = PDF_open_pdi_page($p, $manual, $pageno, ""); - - if ($page == -1) { - printf("Error: %s\n", PDF_get_errmsg($p)); - exit; - } - - PDF_fit_pdi_page($p, $page, - $width/$maxcol*$col, ($row + 1) * $height/$maxrow, "scale ". 1/$maxrow); - PDF_close_pdi_page($p, $page); - - $col++; - if ($col == $maxcol) { - $col = 0; - $row++; - } - if ($row == $maxrow) { - $row = 0; - PDF_end_page($p); - } - } - - # finish the last partial page - if ($row != 0 || $col != 0) { - PDF_end_page($p); - } - - PDF_close($p); - PDF_close_pdi($p, $manual); -}; -if ($@) { - printf("quickreference: PDFlib Exception occurred:\n"); - printf(" $@\n"); - exit; -} - -PDF_delete($p); diff --git a/src/libs/pdflib/bind/pdflib/perl/readme.txt b/src/libs/pdflib/bind/pdflib/perl/readme.txt deleted file mode 100644 index 4c21748748..0000000000 --- a/src/libs/pdflib/bind/pdflib/perl/readme.txt +++ /dev/null @@ -1,27 +0,0 @@ -ActivePerl versions -=================== - -- ActivePerl 5.6 is _not_ binary compatible to older versions of ActivePerl - with respect to extensions. For this reason the same PDFlib DLL can _not_ - be used with ActivePerl 5.6 and older versions. The "oldperl" directory - of the PDFlib binary distribution for Windows contains a PDFlib DLL for - ActivePerl versions before 5.6. - - -Compiling PDFlib for ActivePerl on Win32 -======================================== -(not relevant for users of the binary distribution) - -The distribution is set up to be compiled with ActivePerl 5.6. - -With some minor modification you can also compile with ActivePerl -versions older than 5.6 (the MSVC project contains an "oldperl" configuration -with all of this): - -- Run the compiler in C++ mode (required by ActiveState). In MSVC++ 6 there - doesn't seem to be a GUI option for C++ mode, but the compiler switch - /Tp works. - -- Change the Perl include and lib paths appropriately. - -- Change perl56.lib to perlcore.lib. diff --git a/src/libs/pdflib/bind/pdflib/php/businesscard.php b/src/libs/pdflib/bind/pdflib/php/businesscard.php deleted file mode 100644 index 9c75ff86ac..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/businesscard.php +++ /dev/null @@ -1,81 +0,0 @@ - "Victor Kraxi", - "business.title" => "Chief Paper Officer", - "business.address.line1" => "17, Aviation Road", - "business.address.city" => "Paperfield", - "business.telephone.voice" => "phone +1 234 567-89", - "business.telephone.fax" => "fax +1 234 567-98", - "business.email" => "victor@kraxi.com", - "business.homepage" => "www.kraxi.com" - ); - -$p = PDF_new(); - -/* open new PDF file; insert a file name to create the PDF on disk */ -if (PDF_open_file($p, "") == 0) { - die("Error: " . PDF_get_errmsg($p)); -} - -PDF_set_parameter($p, "SearchPath", $searchpath); - -/* This line is required to avoid problems on Japanese systems */ -PDF_set_parameter($p, "hypertextencoding", "winansi"); - -PDF_set_info($p, "Creator", "businesscard.php"); -PDF_set_info($p, "Author", "Thomas Merz"); -PDF_set_info($p, "Title", "PDFlib block processing sample (PHP)"); - -$blockcontainer = PDF_open_pdi($p, $infile, "", 0); -if ($blockcontainer == 0){ - die ("Error: " . PDF_get_errmsg($p)); -} - -$page = PDF_open_pdi_page($p, $blockcontainer, 1, ""); -if ($page == 0){ - die ("Error: " . PDF_get_errmsg($p)); -} - -PDF_begin_page($p, 20, 20); /* dummy page size */ - -/* This will adjust the page size to the block container's size. */ -PDF_fit_pdi_page($p, $page, 0, 0, "adjustpage"); - -/* Fill all text blocks with dynamic data */ -foreach ($data as $key => $value){ - if (PDF_fill_textblock($p, $page, $key, $value, - "embedding encoding=winansi") == 0) { - printf("Warning: %s\n ", PDF_get_errmsg($p)); - } -} - -PDF_end_page($p); /* close page */ -PDF_close_pdi_page($p, $page); - -PDF_close($p); /* close PDF document */ -PDF_close_pdi($p, $blockcontainer); - -$buf = PDF_get_buffer($p); -$len = strlen($buf); - -header("Content-type: application/pdf"); -header("Content-Length: $len"); -header("Content-Disposition: inline; filename=businesscard.pdf"); -print $buf; - -PDF_delete($p); /* delete the PDFlib object */ -?> diff --git a/src/libs/pdflib/bind/pdflib/php/chartab.php b/src/libs/pdflib/bind/pdflib/php/chartab.php deleted file mode 100644 index ebff0b72de..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/chartab.php +++ /dev/null @@ -1,105 +0,0 @@ - diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/Makefile.php-404.in b/src/libs/pdflib/bind/pdflib/php/ext/pdf/Makefile.php-404.in deleted file mode 100644 index 6e05e279b2..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/Makefile.php-404.in +++ /dev/null @@ -1,8 +0,0 @@ - -LTLIBRARY_NAME = libpdf.la -LTLIBRARY_SOURCES = pdf.c -LTLIBRARY_SHARED_NAME = libpdf_php.la -PDFLIB_SHARED_LIBBADD = -lpdf -LTLIBRARY_SHARED_LIBADD = $(PDFLIB_SHARED_LIBBADD) - -include $(top_srcdir)/build/dynlib.mk diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.m4 b/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.m4 deleted file mode 100644 index 66e131412c..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.m4 +++ /dev/null @@ -1,29 +0,0 @@ -dnl $Id: config.m4 14574 2005-10-29 16:27:43Z bonefish $ - -PHP_ARG_WITH(pdflib,whether to include PDFlib support, -[ --with-pdflib[=DIR] Include PDFlib 4.x support. DIR is the PDFlib - base install directory, defaults to /usr/local - Set DIR to "shared" to build as dl, or "shared,DIR" - to build as dl and still specify DIR.]) - - case "$PHP_PDFLIB" in - yes) - PHP_EXTENSION(pdf, $ext_shared) - AC_DEFINE(HAVE_PDFLIB,1,[ ]) - AC_SUBST(PDFLIB_SHARED_LIBADD) - PHP_ADD_LIBRARY(pdf, PDFLIB_SHARED_LIBADD) - ;; - no) - ;; - *) - dnl build from a installed/binary pdflib distribution - if test -f "$PHP_PDFLIB/include/pdflib.h" ; then - PHP_EXTENSION(pdf, $ext_shared) - AC_DEFINE(HAVE_PDFLIB,1,[ ]) - AC_SUBST(PDFLIB_SHARED_LIBADD) - PHP_ADD_LIBRARY_WITH_PATH(pdf, $withval/lib, PDFLIB_SHARED_LIBADD) - PHP_ADD_INCLUDE($PHP_PDFLIB/include) - else - AC_MSG_ERROR([pdflib.h not found under $PHP_PDFLIB/include/]) - fi ;; - esac diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.php-406+.m4 b/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.php-406+.m4 deleted file mode 100644 index 23002cfd64..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/config.php-406+.m4 +++ /dev/null @@ -1,40 +0,0 @@ -dnl $Id: config.php-406+.m4 14574 2005-10-29 16:27:43Z bonefish $ - -PHP_ARG_WITH(pdflib,whether to include PDFlib support, -[ --with-pdflib[=DIR] Include PDFlib 4.x support. DIR is the PDFlib - base install directory, defaults to /usr/local - Set DIR to "shared" to build as dl, or "shared,DIR" - to build as dl and still specify DIR.]) - - PHP_SUBST(PDFLIB_SHARED_LIBADD) - PHP_EXTENSION(pdf, $ext_shared) - - case "$PHP_PDFLIB" in - yes) - AC_CHECK_LIB(pdf, PDF_open_pdi, [ - AC_DEFINE(HAVE_PDFLIB,1,[ ]) - PHP_ADD_LIBRARY(pdf,, PDFLIB_SHARED_LIBADD) - ],[ - AC_MSG_ERROR(PDFlib extension requires PDFlib 4.x.) - ]) - PHP_ADD_LIBRARY(pdf,, PDFLIB_SHARED_LIBADD) - ;; - no) - ;; - *) - test -f $PHP_PDFLIB/include/pdflib.h && PDFLIB_INCLUDE="$PHP_PDFLIB/include" - if test -n "$PDFLIB_INCLUDE" ; then - PHP_CHECK_LIBRARY(pdf, PDF_open_pdi, [ - AC_DEFINE(HAVE_PDFLIB,1,[ ]) - PHP_ADD_LIBRARY_WITH_PATH(pdf, $PHP_PDFLIB/lib, PDFLIB_SHARED_LIBADD) - PHP_ADD_INCLUDE($PDFLIB_INCLUDE) - ],[ - AC_MSG_ERROR(PDFlib extension requires PDFlib 4.x.) - ],[ - -L$PHP_PDFLIB/lib - ]) - else - AC_MSG_ERROR([pdflib.h not found under $PHP_PDFLIB/include/]) - - fi ;; - esac diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/libs.php-404.mk b/src/libs/pdflib/bind/pdflib/php/ext/pdf/libs.php-404.mk deleted file mode 100644 index 9ff618293b..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/libs.php-404.mk +++ /dev/null @@ -1,8 +0,0 @@ -include $(top_builddir)/config_vars.mk -LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X) -LTLIBRARY_SHARED_OBJECTS = $(LTLIBRARY_OBJECTS:.lo=.slo) -$(LTLIBRARY_SHARED_NAME): $(LTLIBRARY_SHARED_OBJECTS) $(LTLIBRARY_DEPENDENCIES) - $(SHARED_LIBTOOL) --mode=link $(COMPILE) $(LDFLAGS) -o $@ -avoid-version -module -rpath $(phplibdir) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_SHARED_LIBADD) - $(SHARED_LIBTOOL) --mode=install cp $@ $(phplibdir) - -targets = $(LTLIBRARY_SHARED_NAME) diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/pdf.c b/src/libs/pdflib/bind/pdflib/php/ext/pdf/pdf.c deleted file mode 100644 index 0b8d94c33b..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/pdf.c +++ /dev/null @@ -1,3573 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2003 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Uwe Steinmann | - | Rainer Schaaf | - +----------------------------------------------------------------------+ -*/ - -/* $Id: pdf.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* Bootstrap of PDFlib Feature setup */ -#define PDF_FEATURE_SERIAL - - -/* derived from: - Id: pdf.c,v 1.112.2.5 2003/04/30 21:54:02 iliaa Exp - - with some exeptions: - - pdf_get_major/minorversion not included, as pdf_get_value supports this - without a PDF-object - - #if ZEND_MODULE_API_NO >= 20010901 for new ZEND_MODULE support, - so that it compiles with older PHP Versions too - - TSRMLS fixes included only with ZEND_MODULE_API_NO >= 20010901 - would break older builds otherwise - - new PHP streams #if ZEND_MODULE_API_NO >= 20020429 && HAVE_PHP_STREAM - TODO: CVS (1.107/108/109/112) - - added better support to see if it comes as binary from PDFlib GmbH. - - change from emalloc to safe_emalloc (112.2.4 -> 112.2.5) not included - (would not be backwardcompatible with older php builds) - - TODO: merge back to PHP-CVS - */ - -/* pdflib 2.02 ... 4.0x is subject to the ALADDIN FREE PUBLIC LICENSE. - Copyright (C) 1997-1999 Thomas Merz. 2000-2002 PDFlib GmbH */ - -/* Note that there is no code from the pdflib package in this file */ - -/* {{{ includes - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "php_globals.h" -#include "zend_list.h" -#include "ext/standard/head.h" -#include "ext/standard/info.h" -#include "ext/standard/file.h" - -#if HAVE_LIBGD13 -#include "ext/gd/php_gd.h" -#if HAVE_GD_BUNDLED -#include "ext/gd/libgd/gd.h" -#else -#include "gd.h" -#endif -static int le_gd; -#endif - -#ifdef HAVE_UNISTD_H -# include -#endif -#ifdef PHP_WIN32 -# include -# include -#endif -/* }}} */ - -#if HAVE_PDFLIB - -#include "php_pdf.h" - -#if ((100*PDFLIB_MAJORVERSION+10*PDFLIB_MINORVERSION+PDFLIB_REVISION) >= 500) - /* This wrapper code will work only with PDFlib V5 or greater, - * because the special handling for returning 0 instead of -1 - * for PHP is now done in the PDFlib kernel - */ -#else - -#error "PDFlib version does not match PHP-wrapper code" - -#endif /* PDFlib >= V5 */ - -#undef VIRTUAL_DIR - -static int le_pdf; - -/* {{{ pdf_functions[] - */ -function_entry pdf_functions[] = { - /* p_font.c */ - PHP_FE(pdf_add_launchlink, NULL) - PHP_FE(pdf_add_locallink, NULL) - PHP_FE(pdf_add_note, NULL) - PHP_FE(pdf_add_pdflink, NULL) - PHP_FE(pdf_add_weblink, NULL) - PHP_FE(pdf_attach_file, NULL) - PHP_FE(pdf_set_border_color, NULL) - PHP_FE(pdf_set_border_dash, NULL) - PHP_FE(pdf_set_border_style, NULL) - - /* p_basic.c */ - PHP_FE(pdf_begin_page, NULL) - PHP_FE(pdf_close, NULL) - PHP_FE(pdf_delete, NULL) - PHP_FE(pdf_end_page, NULL) - PHP_FE(pdf_get_buffer, NULL) - PHP_FE(pdf_new, NULL) - PHP_FE(pdf_open_file, NULL) - - /* p_block.c */ - PHP_FE(pdf_fill_imageblock, NULL) - PHP_FE(pdf_fill_pdfblock, NULL) - PHP_FE(pdf_fill_textblock, NULL) - - /* p_color.c */ - PHP_FE(pdf_makespotcolor, NULL) - PHP_FE(pdf_setcolor, NULL) - PHP_FE(pdf_setgray_fill, NULL) /* deprecated (since 4.0) */ - PHP_FE(pdf_setgray_stroke, NULL) /* deprecated (since 4.0) */ - PHP_FE(pdf_setgray, NULL) /* deprecated (since 4.0) */ - PHP_FE(pdf_setrgbcolor_fill, NULL) /* deprecated (since 4.0) */ - PHP_FE(pdf_setrgbcolor_stroke, NULL)/* deprecated (since 4.0) */ - PHP_FE(pdf_setrgbcolor, NULL) /* deprecated (since 4.0) */ - - /* p_draw.c */ - PHP_FE(pdf_arc, NULL) - PHP_FE(pdf_arcn, NULL) - PHP_FE(pdf_circle, NULL) - PHP_FE(pdf_clip, NULL) - PHP_FE(pdf_closepath, NULL) - PHP_FE(pdf_closepath_fill_stroke, NULL) - PHP_FE(pdf_closepath_stroke, NULL) - PHP_FE(pdf_curveto, NULL) - PHP_FE(pdf_endpath, NULL) - PHP_FE(pdf_fill, NULL) - PHP_FE(pdf_fill_stroke, NULL) - PHP_FE(pdf_lineto, NULL) - PHP_FE(pdf_moveto, NULL) - PHP_FE(pdf_rect, NULL) - PHP_FE(pdf_stroke, NULL) - - /* p_encoding.c */ - PHP_FE(pdf_encoding_set_char, NULL) - - /* p_font.c */ - PHP_FE(pdf_findfont, NULL) - PHP_FE(pdf_load_font, NULL) - PHP_FE(pdf_setfont, NULL) - - /* p_gstate.c */ - PHP_FE(pdf_concat, NULL) - PHP_FE(pdf_initgraphics, NULL) - PHP_FE(pdf_restore, NULL) - PHP_FE(pdf_rotate, NULL) - PHP_FE(pdf_save, NULL) - PHP_FE(pdf_scale, NULL) - PHP_FE(pdf_setdash, NULL) - PHP_FE(pdf_setdashpattern, NULL) - PHP_FE(pdf_setflat, NULL) - PHP_FE(pdf_setlinecap, NULL) - PHP_FE(pdf_setlinejoin, NULL) - PHP_FE(pdf_setlinewidth, NULL) - PHP_FE(pdf_setmatrix, NULL) - PHP_FE(pdf_setmiterlimit, NULL) - PHP_FE(pdf_setpolydash, NULL) /* deprecated since V5.0 */ - PHP_FE(pdf_skew, NULL) - PHP_FE(pdf_translate, NULL) - - /* p_hyper.c */ - PHP_FE(pdf_add_bookmark, NULL) - PHP_FE(pdf_add_nameddest, NULL) - PHP_FE(pdf_set_info, NULL) - - /* p_icc.c */ - PHP_FE(pdf_load_iccprofile, NULL) - - /* p_image.c */ - PHP_FE(pdf_add_thumbnail, NULL) - PHP_FE(pdf_close_image, NULL) - PHP_FE(pdf_fit_image, NULL) - PHP_FE(pdf_load_image, NULL) - PHP_FE(pdf_open_ccitt, NULL) /* deprecated since V5.0 */ - PHP_FE(pdf_open_image, NULL) /* deprecated since V5.0 */ - PHP_FE(pdf_open_image_file, NULL) /* deprecated since V5.0 */ - PHP_FE(pdf_place_image, NULL) /* deprecated since V5.0 */ - - /* p_params.c */ - PHP_FE(pdf_get_parameter, NULL) - PHP_FE(pdf_get_value, NULL) - PHP_FE(pdf_set_parameter, NULL) - PHP_FE(pdf_set_value, NULL) - - /* p_pattern.c */ - PHP_FE(pdf_begin_pattern, NULL) - PHP_FE(pdf_end_pattern, NULL) - - /* p_pdi.c */ - PHP_FE(pdf_close_pdi, NULL) - PHP_FE(pdf_close_pdi_page, NULL) - PHP_FE(pdf_fit_pdi_page, NULL) - PHP_FE(pdf_get_pdi_parameter, NULL) - PHP_FE(pdf_get_pdi_value, NULL) - PHP_FE(pdf_open_pdi, NULL) - PHP_FE(pdf_open_pdi_page, NULL) - PHP_FE(pdf_place_pdi_page, NULL) /* deprecated since V5.0 */ - PHP_FE(pdf_process_pdi, NULL) - - /* p_resource.c */ - PHP_FE(pdf_create_pvf, NULL) - PHP_FE(pdf_delete_pvf, NULL) - - /* p_shading.c */ - PHP_FE(pdf_shading, NULL) - PHP_FE(pdf_shading_pattern, NULL) - PHP_FE(pdf_shfill, NULL) - - /* p_template.c */ - PHP_FE(pdf_begin_template, NULL) - PHP_FE(pdf_end_template, NULL) - - /* p_text.c */ - PHP_FE(pdf_continue_text, NULL) - PHP_FE(pdf_fit_textline, NULL) - PHP_FE(pdf_set_text_pos, NULL) - PHP_FE(pdf_show, NULL) - PHP_FE(pdf_show_boxed, NULL) - PHP_FE(pdf_show_xy, NULL) - PHP_FE(pdf_stringwidth, NULL) - - /* p_type3.c */ - PHP_FE(pdf_begin_font, NULL) - PHP_FE(pdf_begin_glyph, NULL) - PHP_FE(pdf_end_font, NULL) - PHP_FE(pdf_end_glyph, NULL) - - /* p_xgstate.c */ - PHP_FE(pdf_create_gstate, NULL) - PHP_FE(pdf_set_gstate, NULL) - - /* exception handling */ - PHP_FE(pdf_get_errnum, NULL) - PHP_FE(pdf_get_errmsg, NULL) - PHP_FE(pdf_get_apiname, NULL) - - /* End of the official PDFLIB V3.x/V4.x/V5.x API */ - -#if HAVE_LIBGD13 - /* not supported by PDFlib GmbH */ - PHP_FE(pdf_open_memory_image, NULL) -#endif - - {NULL, NULL, NULL} -}; -/* }}} */ - -/* {{{ pdf_module_entry - */ -zend_module_entry pdf_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 - STANDARD_MODULE_HEADER, -#endif - "pdf", - pdf_functions, - PHP_MINIT(pdf), - PHP_MSHUTDOWN(pdf), - NULL, - NULL, - PHP_MINFO(pdf), -#if ZEND_MODULE_API_NO >= 20010901 - NO_VERSION_YET, -#endif - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -#ifdef COMPILE_DL_PDF -ZEND_GET_MODULE(pdf) -#endif - -/* PHP/PDFlib internal functions */ -/* {{{ _free_pdf_doc - */ -static void _free_pdf_doc(zend_rsrc_list_entry *rsrc) -{ - PDF *pdf = (PDF *)rsrc->ptr; - PDF_delete(pdf); -} -/* }}} */ - -/* {{{ custom_errorhandler - */ -static void custom_errorhandler(PDF *p, int errnum, const char *shortmsg) -{ - if (errnum == PDF_NonfatalError) - { - /* - * PDFlib warnings should be visible to the user. - * If he decides to live with PDFlib warnings - * he may use the PDFlib function - * pdf_set_parameter($p, "warning" 0) to switch off - * the warnings inside PDFlib. - */ - php_error(E_WARNING, "PDFlib warning %s", shortmsg); - } - else - { - /* give up in all other cases */ - php_error(E_ERROR, "PDFlib error %s", shortmsg); - } -} -/* }}} */ - -/* {{{ pdf_emalloc - */ -static void *pdf_emalloc(PDF *p, size_t size, const char *caller) -{ - return(emalloc(size)); -} -/* }}} */ - -/* {{{ pdf_realloc - */ -static void *pdf_realloc(PDF *p, void *mem, size_t size, const char *caller) -{ - return(erealloc(mem, size)); -} -/* }}} */ - -/* {{{ pdf_efree - */ -static void pdf_efree(PDF *p, void *mem) -{ - efree(mem); -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(pdf) -{ - char tmp[32]; - - snprintf(tmp, 31, "%d.%02d", PDF_get_majorversion(), PDF_get_minorversion() ); - tmp[31]=0; - - php_info_print_table_start(); - php_info_print_table_row(2, "PDF Support", "enabled" ); - php_info_print_table_row(2, "PDFlib GmbH Version", PDFLIB_VERSIONSTRING ); - php_info_print_table_row(2, "Revision", "$Revision: 1.1 $" ); - php_info_print_table_end(); - -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(pdf) -{ - if ((PDF_get_majorversion() != PDFLIB_MAJORVERSION) || - (PDF_get_minorversion() != PDFLIB_MINORVERSION)) { - php_error(E_ERROR,"PDFlib error: Version mismatch in wrapper code"); - } - le_pdf = zend_register_list_destructors_ex(_free_pdf_doc, NULL, "pdf object", module_number); - - /* this does something like setlocale("C", ...) in PDFlib 3.x */ - PDF_boot(); - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(pdf) -{ - PDF_shutdown(); - return SUCCESS; -} -/* }}} */ - - -/* p_annots.c */ - -/* {{{ proto void pdf_add_launchlink(int pdfdoc, float llx, float lly, float urx, float ury, string filename) - * Add a launch annotation (to a target of arbitrary file type). */ -PHP_FUNCTION(pdf_add_launchlink) -{ - zval **p, **llx, **lly, **urx, **ury, **filename; - PDF *pdf; - const char * vfilename; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &p, &llx, &lly, &urx, &ury, &filename) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - convert_to_string_ex(filename); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - PDF_add_launchlink(pdf, - (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury), - vfilename); - - RETURN_TRUE; -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_add_locallink(int pdfdoc, float llx, float lly, float urx, float ury, int page, string optlist) - * Add a link annotation to a target within the current PDF file. */ -PHP_FUNCTION(pdf_add_locallink) -{ - zval **p, **llx, **lly, **urx, **ury, **page, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &p, &llx, &lly, &urx, &ury, &page, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - convert_to_long_ex(page); - convert_to_string_ex(optlist); - - PDF_add_locallink(pdf, - (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury), - Z_LVAL_PP(page), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_add_note(int pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open) - * Add a note annotation. icon is one of of "comment", "insert", "note", "paragraph", "newparagraph", "key", or "help". */ -PHP_FUNCTION(pdf_add_note) -{ - zval **p, **llx, **lly, **urx, **ury, **contents, **title, **icon, **open; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &p, &llx, &lly, &urx, &ury, &contents, &title, &icon, &open) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - convert_to_string_ex(contents); - convert_to_string_ex(title); - convert_to_string_ex(icon); - convert_to_long_ex(open); - - PDF_add_note2(pdf, - (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury), - Z_STRVAL_PP(contents), - Z_STRLEN_PP(contents), - Z_STRVAL_PP(title), - Z_STRLEN_PP(title), - Z_STRVAL_PP(icon), - Z_LVAL_PP(open)); - - RETURN_TRUE; -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_add_pdflink(int pdfdoc, float llx, float lly, float urx, float ury, string filename, int page, string optlist) - * Add a file link annotation (to a PDF target). */ -PHP_FUNCTION(pdf_add_pdflink) -{ - zval **p, **llx, **lly, **urx, **ury, **filename, **page, **optlist; - PDF *pdf; - const char * vfilename; - - if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &p, &llx, &lly, &urx, &ury, &filename, &page, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - convert_to_string_ex(filename); - convert_to_long_ex(page); - convert_to_string_ex(optlist); -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - PDF_add_pdflink(pdf, (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury), - vfilename, - Z_LVAL_PP(page), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_add_weblink(int pdfdoc, float llx, float lly, float urx, float ury, string url) - * Add a weblink annotation to a target URL on the Web. */ -PHP_FUNCTION(pdf_add_weblink) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_string_ex(arg6); - PDF_add_weblink(pdf, (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - Z_STRVAL_PP(arg6)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_attach_file(int pdfdoc, float lly, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon) - * Add a file attachment annotation. icon is one of "graph", "paperclip", "pushpin", or "tag". */ -PHP_FUNCTION(pdf_attach_file) -{ - zval **p, **llx, **lly, **urx, **ury, **filename, **description, **author, **mimetype, **icon; - PDF *pdf; - const char * vfilename; - - if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &p, &llx, &lly, &urx, &ury, &filename, &description, &author, &mimetype, &icon) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - convert_to_string_ex(filename); - convert_to_string_ex(description); - convert_to_string_ex(author); - convert_to_string_ex(mimetype); - convert_to_string_ex(icon); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - - PDF_attach_file2(pdf, - (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury), - vfilename, - 0, - Z_STRVAL_PP(description), - Z_STRLEN_PP(description), - Z_STRVAL_PP(author), - Z_STRLEN_PP(author), - Z_STRVAL_PP(mimetype), - Z_STRVAL_PP(icon)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_set_border_color(int pdfdoc, float red, float green, float blue) - * Set the border color for all kinds of annotations. */ -PHP_FUNCTION(pdf_set_border_color) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - PDF_set_border_color(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_set_border_dash(int pdfdoc, float b, float w) - * Set the border dash style for all kinds of annotations. See PDF_setdash(). */ -PHP_FUNCTION(pdf_set_border_dash) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_set_border_dash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_set_border_style(int pdfdoc, string style, float width) - * Set the border style for all kinds of annotations. style is "solid" or "dashed". */ -PHP_FUNCTION(pdf_set_border_style) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_double_ex(arg3); - PDF_set_border_style(pdf, Z_STRVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* p_basic.c */ - -/* {{{ proto void pdf_begin_page(int pdfdoc, float width, float height) - * Add a new page to the document. */ -PHP_FUNCTION(pdf_begin_page) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_begin_page(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_close(int pdfdoc) - * Close the generated PDF file, and release all document-related resources. */ -PHP_FUNCTION(pdf_close) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_close(pdf); - - RETURN_TRUE; -} - -/* }}} */ - -/* {{{ proto bool pdf_delete(int pdfdoc) - * Delete the PDF object, and free all internal resources. */ -PHP_FUNCTION(pdf_delete) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - -#ifndef Z_RESVAL /* for php 4.0.3pl1 */ -#define Z_RESVAL(zval) (zval).value.lval -#define Z_RESVAL_PP(zval_pp) Z_RESVAL(**zval_pp) -#endif - zend_list_delete(Z_RESVAL_PP(arg1)); - - RETURN_TRUE; -} - -/* }}} */ - -/* {{{ proto void pdf_end_page(int pdfdoc) - * Finish the page. */ -PHP_FUNCTION(pdf_end_page) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_end_page(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int pdf_get_apiname(int pdfdoc); - * Get the name of the API function which threw the last exception or failed. */ -PHP_FUNCTION(pdf_get_apiname) -{ - zval **p; - PDF *pdf; - char *buffer; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - buffer = PDF_get_apiname(pdf); - - RETURN_STRING(buffer, 1); -} -/* }}} */ - -/* {{{ proto int pdf_get_buffer(int pdfdoc) - * Get the contents of the PDF output buffer. The result must be used by the client before calling any other PDFlib function. */ -PHP_FUNCTION(pdf_get_buffer) -{ - zval **arg1; - long size; - PDF *pdf; - const char *buffer; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - buffer = PDF_get_buffer(pdf, &size); - - RETURN_STRINGL((char *)buffer, size, 1); -} - -/* }}} */ - -/* {{{ proto int pdf_get_errmsg(int pdfdoc); - * Get the contents of the PDF output buffer. The result must be used by - * the client before calling any other PDFlib function. */ -PHP_FUNCTION(pdf_get_errmsg) -{ - zval **p; - PDF *pdf; - char *buffer; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - buffer = PDF_get_errmsg(pdf); - - RETURN_STRING(buffer, 1); -} -/* }}} */ - -/* {{{ proto int pdf_get_errnum(int pdfdoc); - * Get the descriptive text of the last thrown exception, or the reason of - * a failed function call.*/ -PHP_FUNCTION(pdf_get_errnum) -{ - zval **p; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - retval = PDF_get_errnum(pdf); - - RETURN_LONG(retval); -} -/* }}} */ - -/* {{{ proto int pdf_new() - * Creates a new PDF object */ -PHP_FUNCTION(pdf_new) -{ - PDF *pdf; - - pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL); - if (pdf != NULL) { - PDF_set_parameter(pdf, "imagewarning", "true"); - - /* Trigger special handling of PDFlib-handles for PHP */ - PDF_set_parameter(pdf, "hastobepos", "true"); - PDF_set_parameter(pdf, "binding", "PHP"); - ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf); - } else { - php_error(E_ERROR, "PDF_new: internal error"); - } - -} - -/* }}} */ - -/* {{{ proto int pdf_open_file(int pdfdoc [, char filename]) - * Create a new PDF file using the supplied file name. */ -PHP_FUNCTION(pdf_open_file) -{ - zval **p, **filename; - int pdf_file; - const char *vfilename; - int argc; - PDF *pdf; - - if((argc = ZEND_NUM_ARGS()) > 2) - WRONG_PARAM_COUNT; - - if (argc == 1) { - if (zend_get_parameters_ex(1, &p) == FAILURE) - WRONG_PARAM_COUNT; - } else { - if (zend_get_parameters_ex(2, &p, &filename) == FAILURE) - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - if (argc == 2) { - convert_to_string_ex(filename); -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - pdf_file = PDF_open_file(pdf, vfilename); - } else { - /* open in memory */ - pdf_file = PDF_open_file(pdf, ""); - } - - RETURN_LONG(pdf_file); /* change return from -1 to 0 handled by PDFlib */ -} - -/* }}} */ - -/* p_block.c */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_fill_imageblock(int pdfdoc, int page, string spotname, int image, string optlist); - * Process an image block according to its properties. */ -PHP_FUNCTION(pdf_fill_imageblock) -{ - zval **p, **page, **blockname, **image, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &page, &blockname, &image, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(page); - convert_to_string_ex(blockname); - convert_to_long_ex(image); - convert_to_string_ex(optlist); - - retval = PDF_fill_imageblock(pdf, - Z_LVAL_PP(page), - Z_STRVAL_PP(blockname), - Z_LVAL_PP(image), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* change return from -1 to 0 handled by PDFlib */ -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_fill_pdfblock(int pdfdoc, int page, string spotname, int contents, string optlist); - * Process a PDF block according to its properties. */ -PHP_FUNCTION(pdf_fill_pdfblock) -{ - zval **p, **page, **blockname, **contents, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &page, &blockname, &contents, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(page); - convert_to_string_ex(blockname); - convert_to_long_ex(contents); - convert_to_string_ex(optlist); - - retval = PDF_fill_pdfblock(pdf, - Z_LVAL_PP(page), - Z_STRVAL_PP(blockname), - Z_LVAL_PP(contents), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* change return from -1 to 0 handled by PDFlib */ -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_fill_textblock(int pdfdoc, int page, string spotname, string text, string optlist); - * Process a text block according to its properties. */ -PHP_FUNCTION(pdf_fill_textblock) -{ - zval **p, **page, **blockname, **text, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &page, &blockname, &text, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(page); - convert_to_string_ex(blockname); - convert_to_string_ex(text); - convert_to_string_ex(optlist); - - retval = PDF_fill_textblock(pdf, - Z_LVAL_PP(page), - Z_STRVAL_PP(blockname), - Z_STRVAL_PP(text), - Z_STRLEN_PP(text), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* change return from -1 to 0 handled by PDFlib */ -} -/* }}} */ - -/* p_color.c */ - -/* {{{ proto int pdf_makespotcolor(int pdfdoc, string spotname); - * Make a named spot color from the current color. */ -PHP_FUNCTION(pdf_makespotcolor) -{ - zval **arg1, **arg2; - PDF *pdf; - int spotcolor; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - - spotcolor = PDF_makespotcolor(pdf, - Z_STRVAL_PP(arg2), - Z_STRLEN_PP(arg2)); - - RETURN_LONG(spotcolor); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_setcolor(int pdfdoc, string fstype, string colorspace, float c1 [, float c2 [, float c3 [, float c4]]]); - * Set the current color space and color. fstype is "fill", "stroke", or "both". */ -PHP_FUNCTION(pdf_setcolor) -{ - zval **p, **fstype, **colorspace, **c1, **c2, **c3, **c4; - PDF *pdf; - int argc = ZEND_NUM_ARGS(); - - if(argc < 4 || argc > 7) { - WRONG_PARAM_COUNT; - } - switch(argc) { - case 4: - if(zend_get_parameters_ex(4, &p, &fstype, &colorspace, &c1) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - case 5: - if(zend_get_parameters_ex(5, &p, &fstype, &colorspace, &c1, &c2) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - case 6: - if(zend_get_parameters_ex(6, &p, &fstype, &colorspace, &c1, &c2, &c3) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - case 7: - if(zend_get_parameters_ex(7, &p, &fstype, &colorspace, &c1, &c2, &c3, &c4) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(fstype); - convert_to_string_ex(colorspace); - convert_to_double_ex(c1); - if(argc > 4) convert_to_double_ex(c2); - if(argc > 5) convert_to_double_ex(c3); - if(argc > 6) convert_to_double_ex(c4); - - - PDF_setcolor(pdf, - Z_STRVAL_PP(fstype), - Z_STRVAL_PP(colorspace), - (float) Z_DVAL_PP(c1), - (float) ((argc>4) ? Z_DVAL_PP(c2):0), - (float) ((argc>5) ? Z_DVAL_PP(c3):0), - (float) ((argc>6) ? Z_DVAL_PP(c4):0)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setgray(int pdfdoc, float value) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setgray) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - PDF_setcolor(pdf, "both", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setgray_fill(int pdfdoc, float value) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setgray_fill) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - PDF_setcolor(pdf, "fill", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setgray_stroke(int pdfdoc, float value) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setgray_stroke) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - PDF_setcolor(pdf, "stroke", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setrgbcolor(int pdfdoc, float red, float green, float blue) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setrgbcolor) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - PDF_setcolor(pdf, "both", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setrgbcolor_fill) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - PDF_setcolor(pdf, "fill", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue) - * Depricated user pdf_setcolor instead */ -PHP_FUNCTION(pdf_setrgbcolor_stroke) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - PDF_setcolor(pdf, "stroke", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0); - RETURN_TRUE; -} -/* }}} */ - -/* p_draw.c */ - -/* {{{ proto void pdf_arc(int pdfdoc, float x, float y, float r, float alpha, float beta) - * Draw a counterclockwise circular arc from alpha to beta degrees. */ -PHP_FUNCTION(pdf_arc) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_double_ex(arg6); - - PDF_arc(pdf, (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - (float) Z_DVAL_PP(arg6)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_arcn(int pdfdoc, float x, float y, float r, float alpha, float beta); - * Draw a clockwise circular arc from alpha to beta degrees. */ -PHP_FUNCTION(pdf_arcn) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_double_ex(arg6); - - PDF_arcn(pdf, - (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - (float) Z_DVAL_PP(arg6)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_circle(int pdfdoc, float x, float y, float r) - * Draw a circle with center (x, y) and radius r. */ -PHP_FUNCTION(pdf_circle) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - PDF_circle(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_clip(int pdfdoc) - * Use the current path as clipping path. */ -PHP_FUNCTION(pdf_clip) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_clip(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_closepath(int pdfdoc) - * Close the current path. */ -PHP_FUNCTION(pdf_closepath) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_closepath(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_closepath_fill_stroke(int pdfdoc) - * Close the path, fill, and stroke it. */ -PHP_FUNCTION(pdf_closepath_fill_stroke) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_closepath_fill_stroke(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_closepath_stroke(int pdfdoc) - * Close the path, and stroke it. */ -PHP_FUNCTION(pdf_closepath_stroke) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_closepath_stroke(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3) - * Draw a Bezier curve from the current point, using 3 more control points. */ -PHP_FUNCTION(pdf_curveto) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_double_ex(arg6); - convert_to_double_ex(arg7); - - PDF_curveto(pdf, (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - (float) Z_DVAL_PP(arg6), - (float) Z_DVAL_PP(arg7)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_endpath(int pdfdoc) - * End the current path without filling or stroking it. */ -PHP_FUNCTION(pdf_endpath) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_endpath(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_fill(int pdfdoc) - * Fill the interior of the path with the current fill color. */ -PHP_FUNCTION(pdf_fill) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_fill(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_fill_stroke(int pdfdoc) - * Fill and stroke the path with the current fill and stroke color. */ -PHP_FUNCTION(pdf_fill_stroke) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_fill_stroke(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_lineto(int pdfdoc, float x, float y) - * Draw a line from the current point to (x, y). */ -PHP_FUNCTION(pdf_lineto) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_lineto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_moveto(int pdfdoc, float x, float y) - * Set the current point. */ -PHP_FUNCTION(pdf_moveto) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_moveto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_rect(int pdfdoc, float x, float y, float width, float height) - * Draw a rectangle at lower left (x, y) with width and height. */ -PHP_FUNCTION(pdf_rect) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - - PDF_rect(pdf, (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_stroke(int pdfdoc) - * Stroke the path with the current color and line width, and clear it. */ -PHP_FUNCTION(pdf_stroke) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_stroke(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* p_encoding.c */ - -/* {{{ proto void pdf_encoding_set_char(int pdfdoc, string encoding, int slot, string glyphname, int uv); - * Add a glyph name to a custom encoding. */ -PHP_FUNCTION(pdf_encoding_set_char) -{ - zval **p, **encoding, **slot, **glyphname, **uv; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &encoding, &slot, &glyphname, &uv) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(encoding); - convert_to_long_ex(slot); - convert_to_string_ex(glyphname); - convert_to_long_ex(uv); - - PDF_encoding_set_char(pdf, - Z_STRVAL_PP(encoding), - Z_LVAL_PP(slot), - Z_STRVAL_PP(glyphname), - Z_LVAL_PP(uv)); - - RETURN_TRUE; -} -/* }}} */ - - -/* p_font.c */ - -/* {{{ proto int pdf_findfont(int pdfdoc, string fontname, string encoding [, int embed]) - * Search a font, and prepare it for later use. PDF_load_font() is recommended. */ -PHP_FUNCTION(pdf_findfont) -{ - zval **arg1, **arg2, **arg3, **arg4; - int embed, font; - const char *fontname, *encoding; - PDF *pdf; - - switch (ZEND_NUM_ARGS()) { - case 3: - if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - embed = 0; - break; - case 4: - if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(arg4); - embed = Z_LVAL_PP(arg4); - break; - default: - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - fontname = Z_STRVAL_PP(arg2); - - convert_to_string_ex(arg3); - encoding = Z_STRVAL_PP(arg3); - - font = PDF_findfont(pdf, fontname, encoding, embed); - - RETURN_LONG(font); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_load_font(int pdfdoc, string fontname, string encoding, string optlist); - * Open and search a font, and prepare it for later use.*/ -PHP_FUNCTION(pdf_load_font) -{ - zval **p, **fontname, **encoding, **optlist; - PDF *pdf; - int reserved = 0; - int retval; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &fontname, &encoding, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(fontname); - convert_to_string_ex(encoding); - convert_to_string_ex(optlist); - - retval = PDF_load_font(pdf, - Z_STRVAL_PP(fontname), - reserved, - Z_STRVAL_PP(encoding), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_setfont(int pdfdoc, int font, float fontsize) - * Set the current font in the given size, using a font handle returned by PDF_load_font(). */ -PHP_FUNCTION(pdf_setfont) -{ - zval **arg1, **arg2, **arg3; - int font; - float fontsize; - PDF *pdf; - - if(ZEND_NUM_ARGS() != 3) - WRONG_PARAM_COUNT; - if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) - WRONG_PARAM_COUNT; - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - font = Z_LVAL_PP(arg2); - - convert_to_double_ex(arg3); - fontsize = (float)Z_DVAL_PP(arg3); - - PDF_setfont(pdf, font, fontsize); - - RETURN_TRUE; -} -/* }}} */ - -/* p_gstate.c */ - -/* {{{ proto void pdf_concat(int pdfdoc, float a, float b, float c, float d, float e, float f) - * Concatenate a matrix to the current transformation matrix. */ -PHP_FUNCTION(pdf_concat) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_double_ex(arg6); - convert_to_double_ex(arg7); - - PDF_concat(pdf, - (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - (float) Z_DVAL_PP(arg6), - (float) Z_DVAL_PP(arg7)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_initgraphics(int pdfdoc); - * Reset all color and graphics state parameters to their defaults. */ -PHP_FUNCTION(pdf_initgraphics) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_initgraphics(pdf); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_restore(int pdfdoc) - * Restore the most recently saved graphics state. */ -PHP_FUNCTION(pdf_restore) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_restore(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_rotate(int pdfdoc, float angle) - * Rotate the coordinate system by phi degrees. */ -PHP_FUNCTION(pdf_rotate) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - PDF_rotate(pdf, (float) Z_DVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_save(int pdfdoc) - * Save the current graphics state. */ -PHP_FUNCTION(pdf_save) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_save(pdf); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_scale(int pdfdoc, float x_scale, float y_scale) - * Scale the coordinate system. */ -PHP_FUNCTION(pdf_scale) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_scale(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setdash(int pdfdoc, float black, float white) - * Set the current dash pattern to b black and w white units. */ -PHP_FUNCTION(pdf_setdash) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_setdash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setdashpattern(int pdfdoc, string optlist) - * Set a more complicated dash pattern defined by an optlist. */ -PHP_FUNCTION(pdf_setdashpattern) -{ - zval **p, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(optlist); - - PDF_setdashpattern(pdf, Z_STRVAL_PP(optlist)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setflat(int pdfdoc, float flatness) - * Set the flatness to a value between 0 and 100 inclusive. */ -PHP_FUNCTION(pdf_setflat) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - - PDF_setflat(pdf, (float) Z_DVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setlinecap(int pdfdoc, int linecap) - * Set the linecap parameter to a value between 0 and 2 inclusive. */ -PHP_FUNCTION(pdf_setlinecap) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - - PDF_setlinecap(pdf, Z_LVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setlinejoin(int pdfdoc, int linejoin) - * Set the line join parameter to a value between 0 and 2 inclusive. */ -PHP_FUNCTION(pdf_setlinejoin) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - - PDF_setlinejoin(pdf, Z_LVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setlinewidth(int pdfdoc, float width) - * Set the current linewidth to width. */ -PHP_FUNCTION(pdf_setlinewidth) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - PDF_setlinewidth(pdf, (float) Z_DVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setmatrix(int pdfdoc, float a, float b, float c, float d, float e, float f) - * Explicitly set the current transformation matrix. */ -PHP_FUNCTION(pdf_setmatrix) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_double_ex(arg6); - convert_to_double_ex(arg7); - - PDF_setmatrix(pdf, - (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - (float) Z_DVAL_PP(arg6), - (float) Z_DVAL_PP(arg7)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setmiterlimit(int pdfdoc, float value) - * Set the miter limit to a value greater than or equal to 1. */ -PHP_FUNCTION(pdf_setmiterlimit) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - - PDF_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_setpolydash(int pdfdoc, float darray) - * Deprecated, use PDF_setdashpattern() instead. */ -PHP_FUNCTION(pdf_setpolydash) -{ - zval **arg1, **arg2; - HashTable *array; - int len, i; - float *darray; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_array_ex(arg2); - array = Z_ARRVAL_PP(arg2); - len = zend_hash_num_elements(array); - - /* TODO: ohne Malloc: maximum ist 8 ... */ - if (NULL == (darray = emalloc(len * sizeof(double)))) { - RETURN_FALSE; - } - zend_hash_internal_pointer_reset(array); - for (i=0; i 2) { - convert_to_long_ex(parent); - parentid = Z_LVAL_PP(parent); - - if (ZEND_NUM_ARGS() > 3) { - convert_to_long_ex(open); - p_open = Z_LVAL_PP(open); - } else { - p_open = 0; - } - } else { - parentid = 0; - p_open = 0; - } - - /* will never return 0 */ - id = PDF_add_bookmark2(pdf, - Z_STRVAL_PP(text), - Z_STRLEN_PP(text), - parentid, - p_open); - - RETURN_LONG(id); -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_add_nameddest(int pdfdoc, string name, string optlist) - * Set a more complicated dash pattern defined by an optlist. */ -PHP_FUNCTION(pdf_add_nameddest) -{ - zval **p, **name, **optlist; - PDF *pdf; - int reserved = 0; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &p, &name, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(name); - convert_to_string_ex(optlist); - - PDF_add_nameddest(pdf, - Z_STRVAL_PP(name), - reserved, - Z_STRVAL_PP(optlist)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool pdf_set_info(int pdfdoc, string key, string value) - * Fill document information field key with value. key is one of "Subject", "Title", "Creator", "Author", "Keywords", or a user-defined key. */ -PHP_FUNCTION(pdf_set_info) -{ - zval **p, **key, **value; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &p, &key, &value) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(key); - convert_to_string_ex(value); - - PDF_set_info2(pdf, - Z_STRVAL_PP(key), - Z_STRVAL_PP(value), - Z_STRLEN_PP(value)); - - RETURN_TRUE; -} -/* }}} */ - -/* p_icc.c */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_load_iccprofile(int pdfdoc, string profilename, string optlist); - * Search an ICC profile, and prepare it for later use. */ -PHP_FUNCTION(pdf_load_iccprofile) -{ - zval **p, **profilename, **optlist; - PDF *pdf; - int reserved = 0; - char * vprofilename; - int retval; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &p, &profilename, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(profilename); - convert_to_string_ex(optlist); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(profilename), &vprofilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(profilename), &vprofilename); -# endif -#else - vprofilename = Z_STRVAL_PP(profilename); -#endif - - - retval = PDF_load_iccprofile(pdf, - vprofilename, - reserved, - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* p_image.c */ - -/* {{{ proto void pdf_add_thumbnail(int pdfdoc, int image); - * Add an existing image as thumbnail for the current page. */ -PHP_FUNCTION(pdf_add_thumbnail) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - - PDF_add_thumbnail(pdf, - Z_LVAL_PP(arg2)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_close_image(int pdfdoc, int image) - * Close an image retrieved with PDF_load_image(). */ -PHP_FUNCTION(pdf_close_image) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - convert_to_long_ex(arg2); - - PDF_close_image(pdf, Z_LVAL_PP(arg2)); -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_fit_image(int pdfdoc, int image, float x, float y, string optlist); - * Place an image or template at (x, y) with various options. */ -PHP_FUNCTION(pdf_fit_image) -{ - zval **p, **image, **x, **y, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &image, &x, &y, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(image); - convert_to_double_ex(x); - convert_to_double_ex(y); - convert_to_string_ex(optlist); - - PDF_fit_image(pdf, - Z_LVAL_PP(image), - (float)Z_DVAL_PP(x), - (float)Z_DVAL_PP(y), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_load_image(int pdfdoc, string imagetype, string filename, string optlist); - * Open a (disk-based or virtual) image file with various options.*/ -PHP_FUNCTION(pdf_load_image) -{ - zval **p, **imagetype, **filename, **optlist; - PDF *pdf; - const char *vfilename; - int reserved = 0; - int retval; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &imagetype, &filename, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(imagetype); - convert_to_string_ex(filename); - convert_to_string_ex(optlist); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - retval = PDF_load_image(pdf, - Z_STRVAL_PP(imagetype), - vfilename, - reserved, - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto int pdf_open_ccitt(int pdfdoc, string filename, int width, int height, int bitreverse, int k, int blackls1) - * Deprecated, use PDF_load_image() instead. */ -PHP_FUNCTION(pdf_open_ccitt) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7; - PDF *pdf; - int pdf_image; - char *image; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(arg2), &image TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(arg2), &image); -# endif -#else - image = Z_STRVAL_PP(arg2); -#endif - - convert_to_long_ex(arg3); - convert_to_long_ex(arg4); - convert_to_long_ex(arg5); - convert_to_long_ex(arg6); - convert_to_long_ex(arg7); - - pdf_image = PDF_open_CCITT(pdf, - image, - Z_LVAL_PP(arg3), - Z_LVAL_PP(arg4), - Z_LVAL_PP(arg5), - Z_LVAL_PP(arg6), - Z_LVAL_PP(arg7)); - - RETURN_LONG(pdf_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto int pdf_open_image(int pdfdoc, string imagetype, string source, string data, long length, int width, int height, int components, int bpc, string params) - * Deprecated, use PDF_load_image() with virtual files instead. */ -PHP_FUNCTION(pdf_open_image) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10; - PDF *pdf; - int pdf_image; - - if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_string_ex(arg3); - convert_to_string_ex(arg4); - convert_to_long_ex(arg5); - convert_to_long_ex(arg6); - convert_to_long_ex(arg7); - convert_to_long_ex(arg8); - convert_to_long_ex(arg9); - convert_to_string_ex(arg10); - - pdf_image = PDF_open_image(pdf, - Z_STRVAL_PP(arg2), - Z_STRVAL_PP(arg3), - Z_STRVAL_PP(arg4), - Z_LVAL_PP(arg5), - Z_LVAL_PP(arg6), - Z_LVAL_PP(arg7), - Z_LVAL_PP(arg8), - Z_LVAL_PP(arg9), - Z_STRVAL_PP(arg10)); - - RETURN_LONG(pdf_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto int pdf_open_image_file(int pdfdoc, string imagetype, string filename, string stringparam, int intparam) - * Deprecated, use PDF_load_image() instead. */ -PHP_FUNCTION(pdf_open_image_file) -{ - zval **p, **imagetype, **filename, **stringparam, **intparam; - PDF *pdf; - int pdf_image, argc; - const char *vfilename; - - switch ((argc = ZEND_NUM_ARGS())) { - case 3: - if (zend_get_parameters_ex(3, &p, &imagetype, &filename) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 5: - if (zend_get_parameters_ex(5, &p, &imagetype, &filename, &stringparam, &intparam) == FAILURE) - WRONG_PARAM_COUNT; - break; - default: - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(imagetype); - convert_to_string_ex(filename); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(filename), &vfilename TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(filename), &vfilename); -# endif -#else - vfilename = Z_STRVAL_PP(filename); -#endif - - if (argc == 3) { - pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(imagetype), vfilename, "", 0); - } else { - convert_to_string_ex(stringparam); - convert_to_long_ex(intparam); - - pdf_image = PDF_open_image_file(pdf, - Z_STRVAL_PP(imagetype), - vfilename, - Z_STRVAL_PP(stringparam), - Z_LVAL_PP(intparam)); - } - - RETURN_LONG(pdf_image); /* offset handled in PDFlib Kernel */ - -} -/* }}} */ - -/* {{{ proto void pdf_place_image(int pdfdoc, int image, float x, float y, float scale) - * Deprecated, use PDF_fit_image() instead. */ -PHP_FUNCTION(pdf_place_image) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - - PDF_place_image(pdf, Z_LVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), (float) Z_DVAL_PP(arg5)); - RETURN_TRUE; -} -/* }}} */ - -/* p_params.c */ - -/* {{{ proto string pdf_get_parameter(int pdfdoc, string key, float modifier) - * Get the contents of some PDFlib parameter with string type. */ -PHP_FUNCTION(pdf_get_parameter) -{ - zval **argv[3]; - int argc = ZEND_NUM_ARGS(); - PDF *pdf; - char *value; - - if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(argv[1]); - - if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "version"))) { - value = (char *) PDF_get_parameter(0, Z_STRVAL_PP(argv[1]), 0.0); - RETURN_STRING(value, 1); - } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "pdi"))) { - value = (char *) PDF_get_parameter(0, Z_STRVAL_PP(argv[1]), 0.0); - RETURN_STRING(value, 1); - } else { - ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf); - } - - if(argc == 3) { - convert_to_double_ex(argv[2]); - value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2])); - } else { - value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), 0.0); - } - - RETURN_STRING(value, 1); -} -/* }}} */ - -/* {{{ proto float pdf_get_value(int pdfdoc, string key, float modifier) - * Get the value of some PDFlib parameter with float type. */ -PHP_FUNCTION(pdf_get_value) -{ - zval **argv[3]; - int argc = ZEND_NUM_ARGS(); - PDF *pdf; - double value; - - if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(argv[1]); - if(argc == 3) - convert_to_double_ex(argv[2]); - - if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "major"))) { - value = PDF_get_value(0, Z_STRVAL_PP(argv[1]), 0); - RETURN_DOUBLE(value); - } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "minor"))) { - value = PDF_get_value(0, Z_STRVAL_PP(argv[1]), 0); - RETURN_DOUBLE(value); - } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "revision"))) { - value = PDF_get_value(0, Z_STRVAL_PP(argv[1]), 0); - RETURN_DOUBLE(value); - } else { - ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf); - } - - if(argc < 3) { - value = PDF_get_value(pdf, - Z_STRVAL_PP(argv[1]), - 0.0); - } else { - value = PDF_get_value(pdf, - Z_STRVAL_PP(argv[1]), - (float)Z_DVAL_PP(argv[2])); - } - - RETURN_DOUBLE(value); -} -/* }}} */ - -/* {{{ proto void pdf_set_parameter(int pdfdoc, string key, string value) - * Set some PDFlib parameter with string type. */ -PHP_FUNCTION(pdf_set_parameter) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_string_ex(arg3); - - PDF_set_parameter(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_set_value(int pdfdoc, string key, float value) - * Set the value of some PDFlib parameter with float type. */ -PHP_FUNCTION(pdf_set_value) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_double_ex(arg3); - PDF_set_value(pdf, Z_STRVAL_PP(arg2), (float)Z_DVAL_PP(arg3)); - - RETURN_TRUE; -} -/* }}} */ - -/* p_pattern.c */ - -/* {{{ proto int pdf_begin_pattern(int pdfdoc, float width, float height, float xstep, float ystep, int painttype); - * Start a new pattern definition. */ -PHP_FUNCTION(pdf_begin_pattern) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6; - PDF *pdf; - int pattern_image; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - convert_to_double_ex(arg4); - convert_to_double_ex(arg5); - convert_to_long_ex(arg6); - - pattern_image = PDF_begin_pattern(pdf, - (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3), - (float) Z_DVAL_PP(arg4), - (float) Z_DVAL_PP(arg5), - Z_LVAL_PP(arg6)); - - RETURN_LONG(pattern_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_end_pattern(int pdfdoc); - * Finish the pattern definition. */ -PHP_FUNCTION(pdf_end_pattern) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - PDF_end_pattern(pdf); - - RETURN_TRUE; -} -/* }}} */ - -/* p_pdi.c */ - -/* {{{ proto void pdf_close_pdi(int pdfdoc, int doc); - * Close all open page handles, and close the input PDF document. */ -PHP_FUNCTION(pdf_close_pdi) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - - PDF_close_pdi(pdf, - Z_LVAL_PP(arg2)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_close_pdi_page(int pdfdoc, int page); - * Close the page handle, and free all page-related resources. */ -PHP_FUNCTION(pdf_close_pdi_page) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_long_ex(arg2); - - PDF_close_pdi_page(pdf, - Z_LVAL_PP(arg2)); - - RETURN_TRUE; -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_fit_pdi_page(int pdfdoc, int page, float x, float y, string optlist); - * Place an imported PDF page with the lower left corner at (x, y) with - * various options.*/ -PHP_FUNCTION(pdf_fit_pdi_page) -{ - zval **p, **page, **x, **y, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &page, &x, &y, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(page); - convert_to_double_ex(x); - convert_to_double_ex(y); - convert_to_string_ex(optlist); - - PDF_fit_pdi_page(pdf, - Z_LVAL_PP(page), - (float)Z_DVAL_PP(x), - (float)Z_DVAL_PP(y), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE -} -/* }}} */ - -/* TODO [reserved] */ -/* {{{ proto string pdf_get_pdi_parameter(int pdfdoc, string key, int doc, int page, int reserved); - * Get the contents of some PDI document parameter with string type. */ -PHP_FUNCTION(pdf_get_pdi_parameter) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5; - PDF *pdf; - const char *buffer; - int size; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_long_ex(arg3); - convert_to_long_ex(arg4); - convert_to_long_ex(arg5); - - buffer = PDF_get_pdi_parameter(pdf, - Z_STRVAL_PP(arg2), - Z_LVAL_PP(arg3), - Z_LVAL_PP(arg4), - Z_LVAL_PP(arg5), - &size); - - RETURN_STRINGL((char *)buffer, size, 1); -} -/* }}} */ - -/* TODO [reserved] */ -/* {{{ proto float pdf_get_pdi_value(int pdfdoc, string key, int doc, int page, int reserved); - * Get the contents of some PDI document parameter with numerical type. */ -PHP_FUNCTION(pdf_get_pdi_value) -{ - zval **arg1, **arg2, **arg3, **arg4, **arg5; - PDF *pdf; - double value; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_long_ex(arg3); - convert_to_long_ex(arg4); - convert_to_long_ex(arg5); - - value = (double)PDF_get_pdi_value(pdf, - Z_STRVAL_PP(arg2), - Z_LVAL_PP(arg3), - Z_LVAL_PP(arg4), - Z_LVAL_PP(arg5)); - - RETURN_DOUBLE(value); -} -/* }}} */ - -/* TODO [optlist, reserved] */ -/* {{{ proto int pdf_open_pdi(int pdfdoc, string filename, string optlist, int reserved); - * Open a (disk-based or virtual) PDF document and prepare it for later use. */ -PHP_FUNCTION(pdf_open_pdi) -{ - zval **arg1, **arg2, **arg3, **arg4; - PDF *pdf; - int pdi_handle; - char *file; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - convert_to_string_ex(arg3); - convert_to_long_ex(arg4); - -#ifdef VIRTUAL_DIR -# if ZEND_MODULE_API_NO >= 20010901 - virtual_filepath(Z_STRVAL_PP(arg2), &file TSRMLS_CC); -# else - virtual_filepath(Z_STRVAL_PP(arg2), &file); -# endif -#else - file = Z_STRVAL_PP(arg2); -#endif - - pdi_handle = PDF_open_pdi(pdf, - file, - Z_STRVAL_PP(arg3), - Z_LVAL_PP(arg4)); - - RETURN_LONG(pdi_handle); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_open_pdi_page(int pdfdoc, int doc, int pagenumber, string optlist); - * Prepare a page for later use with PDF_place_pdi_page(). */ -PHP_FUNCTION(pdf_open_pdi_page) -{ - zval **p, **doc, **pagenumber, **optlist; - PDF *pdf; - int pdi_image; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &doc, &pagenumber, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(doc); - convert_to_long_ex(pagenumber); - convert_to_string_ex(optlist); - - pdi_image = PDF_open_pdi_page(pdf, - Z_LVAL_PP(doc), - Z_LVAL_PP(pagenumber), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(pdi_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_place_pdi_page(int pdfdoc, int page, float x, float y, float sx, float sy) - * Deprecated, use PDF_fit_pdi_page( ) instead. */ -PHP_FUNCTION(pdf_place_pdi_page) -{ - zval **p, **page, **x, **y, **sx, **sy; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &p, &page, &x, &y, &sx, &sy) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(page); - convert_to_double_ex(x); - convert_to_double_ex(y); - convert_to_double_ex(sx); - convert_to_double_ex(sy); - - PDF_place_pdi_page(pdf, - Z_LVAL_PP(page), - (float) Z_DVAL_PP(x), - (float) Z_DVAL_PP(y), - (float) Z_DVAL_PP(sx), - (float) Z_DVAL_PP(sy)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int pdf_process_pdi(int pdfdoc, int doc, int page, string optlist); - * Perform various actions on a PDI document. */ -PHP_FUNCTION(pdf_process_pdi) -{ - zval **p, **doc, **page, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &doc, &page, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(doc); - convert_to_long_ex(page); - convert_to_string_ex(optlist); - - retval = PDF_process_pdi(pdf, - Z_LVAL_PP(doc), - Z_LVAL_PP(page), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* p_resource.c */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_create_pvf(int pdfdoc, string filename, string data, string optlist); - * Create a new virtual file. */ -PHP_FUNCTION(pdf_create_pvf) -{ - zval **p, **filename, **data, **optlist; - PDF *pdf; - int reserved = 0; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &filename, &data, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(filename); - convert_to_string_ex(data); - convert_to_string_ex(optlist); - - PDF_create_pvf(pdf, - Z_STRVAL_PP(filename), - reserved, - Z_STRVAL_PP(data), - Z_STRLEN_PP(data), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE -} -/* }}} */ - -/* {{{ proto int pdf_delete_pvf(int pdfdoc, string filname); - * Delete a virtual file. */ -PHP_FUNCTION(pdf_delete_pvf) -{ - zval **p, **filename; - PDF *pdf; - int retval; - int reserved = 0; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &filename) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(filename); - - retval = PDF_delete_pvf(pdf, - Z_STRVAL_PP(filename), - reserved); - - RETURN_LONG(retval); /* change return from -1 to 0 handled by PDFlib */ -} -/* }}} */ - -/* p_shading.c */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_shading(int pdfdoc, string type, float x0, float y0, float x1, float y1, float c1, float c2, float c3, float c4, string optlist); - * Define a color blend (smooth shading) from the current fill color to the supplied color. */ -PHP_FUNCTION(pdf_shading) -{ - zval **p, **type, **x0, **y0, **x1, **y1, **c1, **c2, **c3, **c4, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &p, &type, &x0, &y0, &x1, &y1, &c1, &c2, &c3, &c4, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(type); - convert_to_double_ex(x0); - convert_to_double_ex(y0); - convert_to_double_ex(x1); - convert_to_double_ex(y1); - convert_to_double_ex(c1); - convert_to_double_ex(c2); - convert_to_double_ex(c3); - convert_to_double_ex(c4); - convert_to_string_ex(optlist); - - retval = PDF_shading(pdf, - Z_STRVAL_PP(type), - (float) Z_DVAL_PP(x0), - (float) Z_DVAL_PP(y0), - (float) Z_DVAL_PP(x1), - (float) Z_DVAL_PP(y1), - (float) Z_DVAL_PP(c1), - (float) Z_DVAL_PP(c2), - (float) Z_DVAL_PP(c3), - (float) Z_DVAL_PP(c4), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto int pdf_shading_pattern(int pdfdoc, int shading, string optlist); - * Define a shading pattern using a shading object. */ -PHP_FUNCTION(pdf_shading_pattern) -{ - zval **p, **shading, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &p, &shading, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(shading); - convert_to_string_ex(optlist); - - retval = PDF_shading_pattern(pdf, - Z_LVAL_PP(shading), - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_shfill(int pdfdoc, int shading); - * Fill an area with a shading, based on a shading object. */ -PHP_FUNCTION(pdf_shfill) -{ - zval **p, **shading; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &shading) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(shading); - - PDF_shfill(pdf, - Z_LVAL_PP(shading)); - - RETURN_TRUE; -} -/* }}} */ - -/* p_template.c */ - -/* {{{ proto int pdf_begin_template(int pdfdoc, float width, float height); - * Start a new template definition. */ -PHP_FUNCTION(pdf_begin_template) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - int tmpl_image; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - - tmpl_image = PDF_begin_template(pdf, - (float) Z_DVAL_PP(arg2), - (float) Z_DVAL_PP(arg3)); - - RETURN_LONG(tmpl_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_end_template(int pdfdoc); - * Finish a template definition. */ -PHP_FUNCTION(pdf_end_template) -{ - zval **arg1; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - - PDF_end_template(pdf); - - RETURN_TRUE; -} -/* }}} */ - -/* p_text.c */ - -/* {{{ proto void pdf_continue_text(int pdfdoc, string text) - * Print text at the next line. The spacing between lines is determined by the "leading" parameter. */ -PHP_FUNCTION(pdf_continue_text) -{ - zval **p, **text; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &text) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(text); - - PDF_continue_text2(pdf, - Z_STRVAL_PP(text), - Z_STRLEN_PP(text)); - RETURN_TRUE; -} -/* }}} */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_fit_textline(int pdfdoc, int text, float x, float y, string optlist); - * Place an imported PDF page with the lower left corner at (x, y) with - * various options.*/ -PHP_FUNCTION(pdf_fit_textline) -{ - zval **p, **text, **x, **y, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &text, &x, &y, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(text); - convert_to_double_ex(x); - convert_to_double_ex(y); - convert_to_string_ex(optlist); - - PDF_fit_textline(pdf, - Z_STRVAL_PP(text), - Z_STRLEN_PP(text), - (float)Z_DVAL_PP(x), - (float)Z_DVAL_PP(y), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE -} -/* }}} */ - -/* {{{ proto void pdf_set_text_pos(int pdfdoc, float x, float y) - * Set the text output position. */ -PHP_FUNCTION(pdf_set_text_pos) -{ - zval **arg1, **arg2, **arg3; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_double_ex(arg2); - convert_to_double_ex(arg3); - PDF_set_text_pos(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_show(int pdfdoc, string text) - * Print text in the current font and size at the current position. */ -PHP_FUNCTION(pdf_show) -{ - zval **arg1, **arg2; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - - convert_to_string_ex(arg2); - PDF_show2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int pdf_show_boxed(int pdfdoc, string text, float x, float y, float width, float height, string hmode [, string feature]) - * Format text in the current font and size into the supplied text box according to the requested formatting mode, which must be one of "left", "right", "center", "justify", or "fulljustify". If width and height are 0, only a single line is placed at the point (left, top) in the requested mode. */ -PHP_FUNCTION(pdf_show_boxed) -{ - zval **argv[8]; - int argc = ZEND_NUM_ARGS(); - int nr; - char *feature; - PDF *pdf; - - if (((argc < 7) || (argc > 8)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf); - - convert_to_string_ex(argv[1]); - convert_to_double_ex(argv[2]); - convert_to_double_ex(argv[3]); - convert_to_double_ex(argv[4]); - convert_to_double_ex(argv[5]); - convert_to_string_ex(argv[6]); - - if(argc == 8) { - convert_to_string_ex(argv[7]); - feature = Z_STRVAL_PP(argv[7]); - } else { - feature = NULL; - } - - nr = PDF_show_boxed(pdf, Z_STRVAL_PP(argv[1]), - (float) Z_DVAL_PP(argv[2]), - (float) Z_DVAL_PP(argv[3]), - (float) Z_DVAL_PP(argv[4]), - (float) Z_DVAL_PP(argv[5]), - Z_STRVAL_PP(argv[6]), - feature); - - RETURN_LONG(nr); -} -/* }}} */ - -/* {{{ proto void pdf_show_xy(int pdfdoc, string text, float x, float y) - * Print text in the current font at (x, y). */ -PHP_FUNCTION(pdf_show_xy) -{ - zval **p, **text, **x, **y; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &text, &x, &y) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(text); - convert_to_double_ex(x); - convert_to_double_ex(y); - - PDF_show_xy2(pdf, - Z_STRVAL_PP(text), - Z_STRLEN_PP(text), - (float) Z_DVAL_PP(x), - (float) Z_DVAL_PP(y)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto float pdf_stringwidth(int pdfdoc, string text [, int font, float fontsize]) - * Return the width of text in an arbitrary font. */ -PHP_FUNCTION(pdf_stringwidth) -{ - zval **p, **text, **font, **fontsize; - int p_font; - double width, p_fontsize; - PDF *pdf; - - switch (ZEND_NUM_ARGS()) { - case 2: - if (zend_get_parameters_ex(2, &p, &text) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 4: - if (zend_get_parameters_ex(4, &p, &text, &font, &fontsize) == FAILURE) - WRONG_PARAM_COUNT; - convert_to_long_ex(font); - break; - default: - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(text); - if (ZEND_NUM_ARGS() == 2) { - p_font = (int)PDF_get_value(pdf, "font", 0); - p_fontsize = PDF_get_value(pdf, "fontsize", 0); - } else { - convert_to_long_ex(font); - p_font = Z_LVAL_PP(font); - convert_to_double_ex(fontsize); - p_fontsize = Z_DVAL_PP(fontsize); - } - width = (double) PDF_stringwidth2(pdf, - Z_STRVAL_PP(text), - Z_STRLEN_PP(text), - p_font, - (float)p_fontsize); - - RETURN_DOUBLE(width); -} -/* }}} */ - -/* p_type3.c */ - -/* TODO [optlist] */ -/* {{{ proto void pdf_begin_font(string fontname, int subtype, float a, float b, - float c, float d, float e, float f, string optlist); - * Start a type 3 font definition. */ -PHP_FUNCTION(pdf_begin_font) -{ - zval **p, **fontname, **a, **b, **c, **d, **e, **f, **optlist; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &p, &fontname, &a, &b, &c, &d, &e, &f, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(fontname); - convert_to_double_ex(a); - convert_to_double_ex(b); - convert_to_double_ex(c); - convert_to_double_ex(d); - convert_to_double_ex(e); - convert_to_double_ex(f); - convert_to_string_ex(optlist); - - PDF_begin_font(pdf, - Z_STRVAL_PP(fontname), - 0, - (float) Z_DVAL_PP(a), - (float) Z_DVAL_PP(b), - (float) Z_DVAL_PP(c), - (float) Z_DVAL_PP(d), - (float) Z_DVAL_PP(e), - (float) Z_DVAL_PP(f), - Z_STRVAL_PP(optlist)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_begin_glyph(int pdfdoc, string glyphname, float wx, float llx, float lly, float urx, float ury) - * Start a type 3 glyph definition. */ -PHP_FUNCTION(pdf_begin_glyph) -{ - zval **p, **glyphname, **wx, **llx, **lly, **urx, **ury; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &p, &glyphname, &wx, &llx, &lly, &urx, &ury) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(glyphname); - convert_to_double_ex(wx); - convert_to_double_ex(llx); - convert_to_double_ex(lly); - convert_to_double_ex(urx); - convert_to_double_ex(ury); - - PDF_begin_glyph(pdf, - Z_STRVAL_PP(glyphname), - (float) Z_DVAL_PP(wx), - (float) Z_DVAL_PP(llx), - (float) Z_DVAL_PP(lly), - (float) Z_DVAL_PP(urx), - (float) Z_DVAL_PP(ury)); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_end_font(int pdfdoc); - * Terminate a type 3 font definition. */ -PHP_FUNCTION(pdf_end_font) -{ - zval **p; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - - PDF_end_font(pdf); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void pdf_end_glyph(int pdfdoc); - * Terminate a type 3 glyph definition. */ -PHP_FUNCTION(pdf_end_glyph) -{ - zval **p; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - - PDF_end_glyph(pdf); - - RETURN_TRUE; -} -/* }}} */ - -/* p_xgstate.c */ - -/* {{{ proto int pdf_create_gstate(int pdfdoc, string optlist); - * Create a gstate object definition. */ -PHP_FUNCTION(pdf_create_gstate) -{ - zval **p, **optlist; - PDF *pdf; - int retval; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &optlist) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_string_ex(optlist); - - retval = PDF_create_gstate(pdf, - Z_STRVAL_PP(optlist)); - - RETURN_LONG(retval); /* offset handled in PDFlib Kernel */ -} -/* }}} */ - -/* {{{ proto void pdf_set_gstate(int pdfdoc, int gstate); - * Activate a gstate object. */ -PHP_FUNCTION(pdf_set_gstate) -{ - zval **p, **gstate; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &gstate) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf); - - convert_to_long_ex(gstate); - - PDF_set_gstate(pdf, - Z_LVAL_PP(gstate)); - - RETURN_TRUE; -} -/* }}} */ - -/* End of the official PDFlib GmbH V3.x/V4.x/V5.x API */ - -#if HAVE_LIBGD13 -/* {{{ proto int pdf_open_memory_image(int pdfdoc, int image) - Takes an GD image and returns an image for placement in a PDF document */ -PHP_FUNCTION(pdf_open_memory_image) -{ - zval **arg1, **arg2; - int i, j, color, count; - int pdf_image; - gdImagePtr im; - unsigned char *buffer, *ptr; - PDF *pdf; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf); - ZEND_GET_RESOURCE_TYPE_ID(le_gd,"gd"); - if(!le_gd) - { - php_error(E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded."); - } - ZEND_FETCH_RESOURCE(im, gdImagePtr, arg2, -1, "Image", le_gd); - - count = 3 * im->sx * im->sy; - buffer = (unsigned char *) emalloc(count); - - ptr = buffer; - for(i=0; isy; i++) { - for(j=0; jsx; j++) { -#if HAVE_LIBGD20 - if(gdImageTrueColor(im)) { - if (im->tpixels && gdImageBoundsSafe(im, j, i)) { - color = gdImageTrueColorPixel(im, j, i); - *ptr++ = (color >> 16) & 0xFF; - *ptr++ = (color >> 8) & 0xFF; - *ptr++ = color & 0xFF; - } - } else { -#endif - if (im->pixels && gdImageBoundsSafe(im, j, i)) { - color = im->pixels[i][j]; - *ptr++ = im->red[color]; - *ptr++ = im->green[color]; - *ptr++ = im->blue[color]; - } -#if HAVE_LIBGD20 - } -#endif - } - } - - pdf_image = PDF_open_image(pdf, "raw", "memory", buffer, im->sx*im->sy*3, im->sx, im->sy, 3, 8, NULL); - efree(buffer); - - if (pdf_image == 0) { - efree(buffer); - RETURN_FALSE; - } - - RETURN_LONG(pdf_image); /* offset handled in PDFlib Kernel */ -} -/* }}} */ -#endif /* HAVE_LIBGD13 */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/src/libs/pdflib/bind/pdflib/php/ext/pdf/php_pdf.h b/src/libs/pdflib/bind/pdflib/php/ext/pdf/php_pdf.h deleted file mode 100644 index 34e0b0daec..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/ext/pdf/php_pdf.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Uwe Steinmann | - +----------------------------------------------------------------------+ -*/ - -/* $Id: php_pdf.h 14574 2005-10-29 16:27:43Z bonefish $ */ -/* Derived from: - Id: php_pdf.h,v 1.22 2001/11/30 04:46:35 sniper Exp */ - -#ifndef PHP_PDF_H -#define PHP_PDF_H - -#if HAVE_PDFLIB - -#include - -extern zend_module_entry pdf_module_entry; -#define pdf_module_ptr &pdf_module_entry - -PHP_MINFO_FUNCTION(pdf); -PHP_MINIT_FUNCTION(pdf); -PHP_MSHUTDOWN_FUNCTION(pdf); - -/* p_font.c */ -PHP_FUNCTION(pdf_add_launchlink); -PHP_FUNCTION(pdf_add_locallink); -PHP_FUNCTION(pdf_add_note); -PHP_FUNCTION(pdf_add_pdflink); -PHP_FUNCTION(pdf_add_weblink); -PHP_FUNCTION(pdf_attach_file); -PHP_FUNCTION(pdf_set_border_color); -PHP_FUNCTION(pdf_set_border_dash); -PHP_FUNCTION(pdf_set_border_style); - -/* p_basic.c */ -PHP_FUNCTION(pdf_begin_page); -PHP_FUNCTION(pdf_close); -PHP_FUNCTION(pdf_delete); -PHP_FUNCTION(pdf_end_page); -PHP_FUNCTION(pdf_get_apiname); -PHP_FUNCTION(pdf_get_errmsg); -PHP_FUNCTION(pdf_get_errnum); -PHP_FUNCTION(pdf_get_buffer); -PHP_FUNCTION(pdf_new); -PHP_FUNCTION(pdf_open_file); - -/* p_block.c */ -PHP_FUNCTION(pdf_fill_imageblock); -PHP_FUNCTION(pdf_fill_pdfblock); -PHP_FUNCTION(pdf_fill_textblock); - -/* p_color.c */ -PHP_FUNCTION(pdf_makespotcolor); -PHP_FUNCTION(pdf_setcolor); -PHP_FUNCTION(pdf_setgray_fill); /* deprecated (since 4.0) */ -PHP_FUNCTION(pdf_setgray_stroke); /* deprecated (since 4.0) */ -PHP_FUNCTION(pdf_setgray); /* deprecated (since 4.0) */ -PHP_FUNCTION(pdf_setrgbcolor_fill); /* deprecated (since 4.0) */ -PHP_FUNCTION(pdf_setrgbcolor_stroke);/* deprecated (since 4.0) */ -PHP_FUNCTION(pdf_setrgbcolor); /* deprecated (since 4.0) */ - -/* p_draw.c */ -PHP_FUNCTION(pdf_arc); -PHP_FUNCTION(pdf_arcn); -PHP_FUNCTION(pdf_circle); -PHP_FUNCTION(pdf_clip); -PHP_FUNCTION(pdf_closepath); -PHP_FUNCTION(pdf_closepath_fill_stroke); -PHP_FUNCTION(pdf_closepath_stroke); -PHP_FUNCTION(pdf_curveto); -PHP_FUNCTION(pdf_endpath); -PHP_FUNCTION(pdf_fill); -PHP_FUNCTION(pdf_fill_stroke); -PHP_FUNCTION(pdf_lineto); -PHP_FUNCTION(pdf_moveto); -PHP_FUNCTION(pdf_rect); -PHP_FUNCTION(pdf_stroke); - -/* p_encoding.c */ -PHP_FUNCTION(pdf_encoding_set_char); - -/* p_font.c */ -PHP_FUNCTION(pdf_findfont); -PHP_FUNCTION(pdf_load_font); -PHP_FUNCTION(pdf_setfont); - -/* p_gstate.c */ -PHP_FUNCTION(pdf_concat); -PHP_FUNCTION(pdf_initgraphics); -PHP_FUNCTION(pdf_restore); -PHP_FUNCTION(pdf_rotate); -PHP_FUNCTION(pdf_save); -PHP_FUNCTION(pdf_scale); -PHP_FUNCTION(pdf_setdash); -PHP_FUNCTION(pdf_setdashpattern); -PHP_FUNCTION(pdf_setflat); -PHP_FUNCTION(pdf_setlinecap); -PHP_FUNCTION(pdf_setlinejoin); -PHP_FUNCTION(pdf_setlinewidth); -PHP_FUNCTION(pdf_setmatrix); -PHP_FUNCTION(pdf_setmiterlimit); -PHP_FUNCTION(pdf_setpolydash); /* deprecated since V5.0 */ -PHP_FUNCTION(pdf_skew); -PHP_FUNCTION(pdf_translate); - -/* p_hyper.c */ -PHP_FUNCTION(pdf_add_bookmark); -PHP_FUNCTION(pdf_add_nameddest); -PHP_FUNCTION(pdf_set_info); - -/* p_icc.c */ -PHP_FUNCTION(pdf_load_iccprofile); - -/* p_image.c */ -PHP_FUNCTION(pdf_add_thumbnail); -PHP_FUNCTION(pdf_close_image); -PHP_FUNCTION(pdf_fit_image); -PHP_FUNCTION(pdf_load_image); -PHP_FUNCTION(pdf_open_ccitt); /* deprecated since V5.0 */ -PHP_FUNCTION(pdf_open_image); /* deprecated since V5.0 */ -PHP_FUNCTION(pdf_open_image_file); /* deprecated since V5.0 */ -PHP_FUNCTION(pdf_place_image); /* deprecated since V5.0 */ - -/* p_params.c */ -PHP_FUNCTION(pdf_get_parameter); -PHP_FUNCTION(pdf_get_value); -PHP_FUNCTION(pdf_set_parameter); -PHP_FUNCTION(pdf_set_value); - -/* p_pattern.c */ -PHP_FUNCTION(pdf_begin_pattern); -PHP_FUNCTION(pdf_end_pattern); - -/* p_pdi.c */ -PHP_FUNCTION(pdf_close_pdi); -PHP_FUNCTION(pdf_close_pdi_page); -PHP_FUNCTION(pdf_fit_pdi_page); -PHP_FUNCTION(pdf_get_pdi_parameter); -PHP_FUNCTION(pdf_get_pdi_value); -PHP_FUNCTION(pdf_open_pdi); -PHP_FUNCTION(pdf_open_pdi_page); -PHP_FUNCTION(pdf_place_pdi_page); /* deprecated since V5.0 */ -PHP_FUNCTION(pdf_process_pdi); - -/* p_resource.c */ -PHP_FUNCTION(pdf_create_pvf); -PHP_FUNCTION(pdf_delete_pvf); - -/* p_shading.c */ -PHP_FUNCTION(pdf_shading); -PHP_FUNCTION(pdf_shading_pattern); -PHP_FUNCTION(pdf_shfill); - -/* p_template.c */ -PHP_FUNCTION(pdf_begin_template); -PHP_FUNCTION(pdf_end_template); - -/* p_text.c */ -PHP_FUNCTION(pdf_continue_text); -PHP_FUNCTION(pdf_fit_textline); -PHP_FUNCTION(pdf_set_text_pos); -PHP_FUNCTION(pdf_show); -PHP_FUNCTION(pdf_show_boxed); -PHP_FUNCTION(pdf_show_xy); -PHP_FUNCTION(pdf_stringwidth); - -/* p_type3.c */ -PHP_FUNCTION(pdf_begin_font); -PHP_FUNCTION(pdf_begin_glyph); -PHP_FUNCTION(pdf_end_font); -PHP_FUNCTION(pdf_end_glyph); - -/* p_xgstate.c */ -PHP_FUNCTION(pdf_create_gstate); -PHP_FUNCTION(pdf_set_gstate); - - -#if HAVE_LIBGD13 -/* not supported by PDFlib GmbH */ -PHP_FUNCTION(pdf_open_memory_image); -#endif - -#ifdef ZTS -#define PDFG(v) TSRMG(pdf_globals_id, php_pdf_globals *, v) -#else -#define PDFG(v) (pdf_globals.v) -#endif - - -#else -#define pdf_module_ptr NULL -#endif -#define phpext_pdf_ptr pdf_module_ptr -#endif /* PHP_PDF_H */ diff --git a/src/libs/pdflib/bind/pdflib/php/hello.php b/src/libs/pdflib/bind/pdflib/php/hello.php deleted file mode 100644 index 365617bc42..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/hello.php +++ /dev/null @@ -1,40 +0,0 @@ - diff --git a/src/libs/pdflib/bind/pdflib/php/image.php b/src/libs/pdflib/bind/pdflib/php/image.php deleted file mode 100644 index 38693c6651..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/image.php +++ /dev/null @@ -1,47 +0,0 @@ - diff --git a/src/libs/pdflib/bind/pdflib/php/invoice.php b/src/libs/pdflib/bind/pdflib/php/invoice.php deleted file mode 100644 index 0b5ea909dd..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/invoice.php +++ /dev/null @@ -1,152 +0,0 @@ -"Super Kite", "price"=>20, "quantity"=>2), - array("name"=>"Turbo Flyer", "price"=>40, "quantity"=>5), - array("name"=>"Giga Trasch", "price"=>180, "quantity"=>1), - array("name"=>"Bare Bone Kit", "price"=>50, "quantity"=>3), - array("name"=>"Nitty Gritty", "price"=>20, "quantity"=>10), - array("name"=>"Pretty Dark Flyer","price"=>75, "quantity"=>1), - array("name"=>"Free Gift", "price"=>0, "quantity"=>1) - ); - -$months = array( "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December"); - -$p = PDF_new(); - -/* open new PDF file; insert a file name to create the PDF on disk */ -if (PDF_open_file($p, "") == 0) { - die("Error: " . PDF_get_errmsg($p)); -} - -PDF_set_parameter($p, "SearchPath", $searchpath); - -/* This line is required to avoid problems on Japanese systems */ -PDF_set_parameter($p, "hypertextencoding", "winansi"); - -PDF_set_info($p, "Creator", "invoice.php"); -PDF_set_info($p, "Author", "Thomas Merz"); -PDF_set_info($p, "Title", "PDFlib invoice generation demo (PHP)"); - -$form = PDF_open_pdi($p, $infile, "", 0); -if ($form == 0){ - die("Error: " . PDF_get_errmsg($p)); -} - -$page = PDF_open_pdi_page($p, $form, 1, ""); -if ($page == 0){ - die("Error: " . PDF_get_errmsg($p)); -} - - -$boldfont = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); -$regularfont = PDF_load_font($p, "Helvetica", "winansi", ""); -$leading = $fontsize + 2; - -/* Establish coordinates with the origin in the upper left corner. */ -PDF_set_parameter($p, "topdown", "true"); - -PDF_begin_page($p, $pagewidth, $pageheight); /* A4 page */ - -PDF_fit_pdi_page($p, $page, 0, $pageheight, ""); -PDF_close_pdi_page($p, $page); - -PDF_setfont($p, $regularfont, $fontsize); - -/* print the address */ -$y = 170; -PDF_set_value($p, "leading", $leading); - -PDF_show_xy($p, "John Q. Doe", $col1, $y); -PDF_continue_text($p, "255 Customer Lane"); -PDF_continue_text($p, "Suite B"); -PDF_continue_text($p, "12345 User Town"); -PDF_continue_text($p, "Everland"); - -/* print the header and date */ - -PDF_setfont($p, $boldfont, $fontsize); -$y = 300; -PDF_show_xy($p, "INVOICE", $col1, $y); -$time = localtime(); -$buf = sprintf("%s %d, %d", $months[$time[4]], $time[3], $time[5]+1900); -PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}"); - - -/* print the invoice header line */ -PDF_setfont($p, $boldfont, $fontsize); - -/* "position {0 0}" is left-aligned, "position {100 0}" right-aligned */ -$y = 370; -PDF_fit_textline($p, "ITEM", $col1, $y, "position {0 0}"); -PDF_fit_textline($p, "DESCRIPTION", $col2, $y, "position {0 0}"); -PDF_fit_textline($p, "QUANTITY", $col3, $y, "position {100 0}"); -PDF_fit_textline($p, "PRICE", $col4, $y, "position {100 0}"); -PDF_fit_textline($p, "AMOUNT", $col5, $y, "position {100 0}"); - -PDF_setfont($p, $regularfont, $fontsize); -$y += 2*$leading; -$total = 0; - -for ($i = 0; $i < count($data); $i++){ - PDF_show_xy($p, $i+1, $col1, $y); - - PDF_show_xy($p, $data[$i]{"name"}, $col2, $y); - PDF_fit_textline($p, $data[$i]{"quantity"}, $col3, $y, "position {100 0}"); - PDF_fit_textline($p, $data[$i]{"price"}, $col4, $y, "position {100 0}"); - $sum = $data[$i]{"price"}*$data[$i]{"quantity"}; - $buf = sprintf("%.2f", $sum); - PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}"); - $y += $leading; - $total +=$sum; -} - -$y += $leading; -PDF_setfont($p, $boldfont, $fontsize); -PDF_fit_textline($p,sprintf("%.2f",$total), $col5, $y, "position {100 0}"); - -/* Print the closing text */ - -$y +=5*$leading; -PDF_setfont($p, $regularfont, $fontsize); -PDF_set_value($p, "leading", $leading); -PDF_show_boxed($p, $closingtext, - $col1, $y + 4*$leading, $col5-$col1, 4*$leading, "justify", ""); - -PDF_end_page($p); -PDF_close($p); -PDF_close_pdi($p, $form); - -$buf = PDF_get_buffer($p); -$len = strlen($buf); - -header("Content-type: application/pdf"); -header("Content-Length: $len"); -header("Content-Disposition: inline; filename=hello.pdf"); -print $buf; - -PDF_delete($p); -?> diff --git a/src/libs/pdflib/bind/pdflib/php/pdfclock.php b/src/libs/pdflib/bind/pdflib/php/pdfclock.php deleted file mode 100644 index d44c55e261..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/pdfclock.php +++ /dev/null @@ -1,102 +0,0 @@ - diff --git a/src/libs/pdflib/bind/pdflib/php/quickreference.php b/src/libs/pdflib/bind/pdflib/php/quickreference.php deleted file mode 100644 index 5afa597a0b..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/quickreference.php +++ /dev/null @@ -1,89 +0,0 @@ - diff --git a/src/libs/pdflib/bind/pdflib/php/readme.txt b/src/libs/pdflib/bind/pdflib/php/readme.txt deleted file mode 100644 index 7501b76b03..0000000000 --- a/src/libs/pdflib/bind/pdflib/php/readme.txt +++ /dev/null @@ -1,243 +0,0 @@ -=================================== -Notes on the PDFlib binding for PHP -=================================== - -The binary distribution of PDFlib supports using PDFlib as a loadable -module (DSO) in PHP. This implies some restrictions, but simplifies PDFlib -deployment a lot. Using PDFlib as a loadable module is the recommended -way for using PDFlib with PHP. - -If the loadable module does not fit your needs, the binary distribution -also includes a precompiled PDFlib library (bind/c/lib/libpdf.*), to be used in -your custom build process for PHP. This will allow you to integrate PDFlib -(including the PDI functionality) into your own PHP build process. - -Please note that only PDFlib Lite is available in source form. -PDFlib, PDFlib+PDI, and the PDFlib Personalization Server (PPS) are -available for commercial licensing only, and therefore require a -binary package. - -If your distribution does not contain the expected binaries, please contact -bindings@pdflib.com. We only include binaries for the most common PHP versions -to not overload the download package. Please include the platform and the -exact PHP version you are looking for. - -Of course you may also use PDFlib for PHP with the source distribution, but -since there are so many PHP configuration options we will only give a rough -overview how to do this. - -Summary of this document: - -- "Loadable Module (DSO)" - The recommended way for using PDFlib with PHP. - If you could not find a DSO for your PHP version/platform in the distribution - please contact bindings@pdflib.com. - -- "Rebuild PHP" - If the loadable module does not fit your needs, or if DSO modules are not - supported on your platform, you can rebuild PHP with PDFlib support. - Caution: this requires substantially more effort than the loadable module. - -- "Samples" - How to set up the supplied PDFlib examples. - - -Loadable Module -=============== - -Use the PDFlib loadable module from the "bind/php/" directory -of the PDFlib binary distribution. The name of the loadable module depends -on the platform: - - - Windows: libpdf_php.dll - - Linux: libpdf_php.so - - Other Unix systems: libpdf_php.* with the appropriate shared - library suffix - -The following conditions must be met in order to use PDFlib as a -loadable module: - - - PHP on your platform must support DSOs. This is the case on Windows - and many Unix platforms, but not all. For example, PHP does not support - DSOs on Mac OS X before PHP 4.3.0. - - - PDFlib support must not already have been compiled into your PHP version. - If your PHP already includes PDFlib support (this is the case for - versions of PHP distributed with many Linux distributions) you must - rebuild PHP with the "-with-pdflib=no" configure option. - (*HINT* for maintainers of Linux distributions: - include PDFlib support for PHP as DSO, this allows easier updates) - - - Several properties of your PHP version must match the loadable module - of PDFlib. The supplied binary modules for PDFlib have been built as - follows: - - nondebug version - - for supported PHP version numbers see "bind/php/ - - thread-safe (only relevant for Windows) - - If you get an error message similar to the following your PHP version - number does not match that of the PDFlib module: - Warning: pdf: Unable to initialize module - Module compiled with debug=0, thread-safety=1 module API=20001214 - PHP compiled with debug=0, thread-safety=1 module API=20001222 - Unfortunately new PHP version simply deny loading a wrong module - whithout any specific error message. - - All of these options must match. - - -If you can't meet the above conditions you must choose to "Rebuild PHP" as -described below (or ask us whether your combination will be available soon). - - -Installing the module on Windows: - - - Our DLLs have been tested with the binary PHP distribution which is - available from http://www.php.net. - - - The PDFlib binary distribution for Windows contains several DLLs - for different versions of PHP. Currently we offer the following - flavors: - - - "php-4.1.0\libpdf_php.dll" was built for PHP 4.1.0/4.1.1/4.2.0 - - "php-4.2.1\libpdf_php.dll" was built for PHP 4.2.1-4.3.5 - - - For the PHP installation please follow the documentation of your - PHP distribution and copy "bind/php//libpdf_php.dll" - to the directory which is specified in the "extension_dir" line in - php.ini. - -Installing the module on Unix: - - - The PDFlib binary distribution for Unix contains several shared libraries - for different versions of PHP. Currently we offer the following - flavors: - - - "php-4.1.0\libpdf_php.*" was built for PHP 4.1.0, 4.1.1, 4.2.0 - - "php-4.2.1\libpdf_php.*" was built for PHP 4.2.1-4.3.5 - - - Copy the file libpdf_php.* from the directory "bind/php/" - of the PDFlib binary distribution to the directory which is specified in - the "extension_dir" line in php.ini. - - -Using the module: - - - If you decide to load PDFlib each time PHP starts insert one line in - php.ini: - extension=libpdf_php.dll (on Windows) - or - extension = libpdf_php.so (on Unix) - - and restart apache, so that the changes are recognized. - You may check whether the installation did work. If you - don't find a PDF section please check your logfiles for the reason. - - - Without the "extension = ..." line in php.ini you must include the - following line in your PHP scripts: - dl("libpdf_php.dll"); (on Windows) - or - dl("libpdf_php.so"); (on Unix) - - In this case your php.ini needs these settings: - - php.ini must include the line "safe_mode=Off". - - php.ini must include the line "enable_dl=On". - - - -Rebuild PHP -=========== - -If the loadable module does not fit your needs, or if DSO modules are not -supported on your platform, you can rebuild PHP with PDFlib support. - -WARNING: this option requires substantial experience with building PHP. -It is not a matter of simply calling "make" and waiting for the result. -If you never built PHP from source code it is strongly recommended to -avoid this option. - -When recompiling PHP using the library from the binary PDFlib distribution -you have to use the library located in the "bind/c" directory of the PDFlib -distribution. - -Note: Building PDFlib for PHP from the source code of PDFlib is not supported -by PDFlib GmbH since we supply precompiled binaries (although it should work, -and therefore you will find hints how to do it below). - -Unix - - Unpack the PDFlib binary distribution to , - or unpack the PDFlib source distribution to , and - issue the command - - $ ./configure; make; make install - - - Copy some PDFlib support files for PHP to your PHP source tree (check - the section "Support Files" below to see which files apply to your - PHP version. - - $ cp /bind/php/ext/pdf/ /ext/pdf - - and rebuild the PHP configure script in the PHP directory (only - neccesary if you decided to use our config.m4 script): - - $ ./buildconf - - - For rebuilding PHP add the following to your PHP configure options: - --with-pdflib=/bind/c - - or if building PDFlib from source: - --with-pdflib[=] - - where will typically be something like - /usr/local or similar (the directory where "lib" and "include" for PDFlib - reside). - - - Now rebuild PHP as usual, and install it. - -Windows - - Create PDFlib.lib from the PDFlib sources. Change the project settings - to create a "Multithreaded DLL" library named pdflib.lib. - - - Copy the required PDFlib support files (see below) for PHP to your - PHP source tree. - - C:\> copy \bind\php\ext\pdf\ \ext\pdf - - - Now rebuild libpdf_php.dll. - - -Support files - The following files have to be copied from bind/php/ext/pdf to the ext/pdf - directory of your PHP source tree. Replacing config.m4 is optional, but - the config.m4 supplied by us is much simpler and therefor makes less - troubles if you manage to go through the buildconf process. - - Which files are needed depends on the PHP version you use: - - PHP 4.1.0-4.1.1 - config.php-406+.m4 -> config.m4 - pdf.c -> pdf.c - php_pdf.h -> php_pdf.h - - PHP 4.2.1-4.2.3 - config.php-406+.m4 -> config.m4 - pdf.c -> pdf.c - php_pdf.h -> php_pdf.h - - PHP 4.3.0-4.3.5 - pdf.c -> pdf.c - php_pdf.h -> php_pdf.h - - -Samples -======= - -To use the samples: - - - Copy some files: - $ cp bind/php/*.php .../htdocs # (to your htdocs directory) - $ cp bind/data/* .../htdocs/data # (to your htdocs) - - - point your browser to the sample files - - - enjoy the generated PDFs diff --git a/src/libs/pdflib/bind/pdflib/python/Makefile b/src/libs/pdflib/bind/pdflib/python/Makefile deleted file mode 100644 index 7826160fb1..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# Makefile for PDFlib's Python binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc - -INCLUDES = $(PDFLIBINC) $(PYINCLUDE) -# special CFLAGS, as -ansi is not working here. -CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES) - -LANG_LIBDIR = $(PYTHONLIBDIR) - -LIBNAME = pdflib_py$(LA) -OBJ = pdflib_py$(LO) -SRC = pdflib_py.c - - -include $(top_builddir)/config/mkbind.inc - -test:: all - @-(. ./pdflib_py$(LA); cd .libs; cp $$library_names ..) - -$(LIBTOOL_EXE) python hello.py - -$(LIBTOOL_EXE) python image.py - -$(LIBTOOL_EXE) python pdfclock.py - -$(LIBTOOL_EXE) python chartab.py - -$(LIBTOOL_EXE) python invoice.py - -$(LIBTOOL_EXE) python businesscard.py - -$(LIBTOOL_EXE) python quickreference.py - -smoke:: test - -install:: $(LIBNAME) - @-if test -f .libs/libpdflib_py.dylib; then \ - $(INSTALL_DATA) .libs/pdflib_py.so $(LANG_LIBDIR); \ - else \ - $(LIBTOOL) --mode=install $(INSTALL_DATA) \ - $(LIBNAME) $(LANG_LIBDIR); \ - fi - -uninstall:: - @-if test -f .libs/libpdflib_py.dylib; then \ - $(LIBTOOL) --mode=uninstall $(RM) $(LANG_LIBDIR)/pdflib_py.so\ - else \ - $(LIBTOOL) --mode=uninstall $(RM) $(LANG_LIBDIR)/$(LIBNAME) \ - fi - -clean:: - @-if test -f pdflib_py.la; then \ - (. ./pdflib_py.la; $(RM) $$library_names) \ - fi - $(RM) smoke_c_?.pdf - $(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf - $(RM) businesscard.pdf quickreference.pdf - -# Automatically generated dependencies diff --git a/src/libs/pdflib/bind/pdflib/python/Python.dsp b/src/libs/pdflib/bind/pdflib/python/Python.dsp deleted file mode 100644 index cb947290a1..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/Python.dsp +++ /dev/null @@ -1,202 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Python" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=Python - Win32 python23 -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Python.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Python.mak" CFG="Python - Win32 python23" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Python - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Python - Win32 oldpython" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Python - Win32 python21" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Python - Win32 python22" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Python - Win32 python23" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Python - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Python___Win32_Release" -# PROP BASE Intermediate_Dir "Python___Win32_Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python20\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib /nologo /dll /debug /machine:I386 /out:"pdflib.dll" /pdbtype:sept -# SUBTRACT BASE LINK32 /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python20.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"c:\programme\python20\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ELSEIF "$(CFG)" == "Python - Win32 oldpython" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Python___Win32_oldpython" -# PROP BASE Intermediate_Dir "Python___Win32_oldpython" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "oldpython" -# PROP Intermediate_Dir "oldpython" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python 1.5.2\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python 1.5.2\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib libpng.lib libtiff.lib zlib.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"..\..\..\..\libs\zlib" /libpath:"c:\programme\python 1.5.2\libs" /libpath:"..\..\..\libs\pdflib" /libpath:"..\..\..\..\libs\libpng" /libpath:"..\..\..\..\libs\libtiff" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"oldpython/pdflib_py.dll" /libpath:"c:\programme\python 1.5.2\libs" /libpath:"..\..\..\libs\pdflib" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ELSEIF "$(CFG)" == "Python - Win32 python21" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Python___Win32_python21" -# PROP BASE Intermediate_Dir "Python___Win32_python21" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "python21" -# PROP Intermediate_Dir "python21" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "D:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib libpng.lib libtiff.lib zlib.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"..\..\..\..\libs\zlib" /libpath:"c:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib" /libpath:"..\..\..\..\libs\libpng" /libpath:"..\..\..\..\libs\libtiff" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python21.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python21/pdflib_py.dll" /libpath:"C:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ELSEIF "$(CFG)" == "Python - Win32 python22" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Python___Win32_python22" -# PROP BASE Intermediate_Dir "Python___Win32_python22" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "python22" -# PROP Intermediate_Dir "python22" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python22\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python21.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python21/pdflib_py.dll" /libpath:"C:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python22/pdflib_py.dll" /libpath:"C:\programme\python22\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ELSEIF "$(CFG)" == "Python - Win32 python23" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Python___Win32_python23" -# PROP BASE Intermediate_Dir "Python___Win32_python23" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Python23" -# PROP Intermediate_Dir "Python23" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python22\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python23\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python22/pdflib_py.dll" /libpath:"C:\programme\python22\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python23.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python23/pdflib_py.dll" /libpath:"C:\programme\python23\libs" /libpath:"..\..\..\libs\pdflib\Release" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ENDIF - -# Begin Target - -# Name "Python - Win32 Release" -# Name "Python - Win32 oldpython" -# Name "Python - Win32 python21" -# Name "Python - Win32 python22" -# Name "Python - Win32 python23" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib_py.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/python/businesscard.py b/src/libs/pdflib/bind/pdflib/python/businesscard.py deleted file mode 100644 index bb6d84bd14..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/businesscard.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -# $Id: businesscard.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: block processing example in Python -# - -from sys import * -from pdflib_py import * - -infile = "boilerplate.pdf" - -# This is where font/image/PDF input files live. Adjust as necessary. -# -# Note that this directory must also contain the LuciduxSans font outline -# and metrics files. -# -searchpath = "../data" - -data_name = [ - "name", - "business.title", - "business.address.line1", - "business.address.city", - "business.telephone.voice", - "business.telephone.fax", - "business.email", - "business.homepage" ] - -data_value = [ - "Victor Kraxi", - "Chief Paper Officer", - "17, Aviation Road", - "Paperfield", - "phone +1 234 567-89", - "fax +1 234 567-98", - "victor@kraxi.com", - "www.kraxi.com" ] - -BLOCKCOUNT = 8 - -p = PDF_new() - -if PDF_open_file(p, "businesscard.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -# Set the search path for fonts and PDF files -PDF_set_parameter(p, "SearchPath", searchpath) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "businesscard.c") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title","PDFlib block processing sample (C)") - -blockcontainer = PDF_open_pdi(p, infile, "", 0) -if blockcontainer == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -page = PDF_open_pdi_page(p, blockcontainer, 1, "") -if page == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -PDF_begin_page(p, 20, 20) # dummy page size - -# This will adjust the page size to the block container's size. -PDF_fit_pdi_page(p, page, 0, 0, "adjustpage") - -# Fill all text blocks with dynamic data -for i in range(0, BLOCKCOUNT, 1): - if PDF_fill_textblock(p, page, data_name[i], data_value[i], \ - "embedding encoding=winansi") == -1: - print "Warning: " + PDF_get_errmsg(p) + "\n" - -PDF_end_page(p) # close page */ -PDF_close_pdi_page(p, page) - -PDF_close(p) # close PDF document */ -PDF_close_pdi(p, blockcontainer) - -PDF_delete(p) # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/python/chartab.py b/src/libs/pdflib/bind/pdflib/python/chartab.py deleted file mode 100644 index c152791077..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/chartab.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/python -# $Id: chartab.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: hello character table in Python -# - -from sys import * -from pdflib_py import * - -# change these as required -fontname = "LuciduxSans-Oblique" - -# This is where font/image/PDF input files live. Adjust as necessary. -searchpath = "../data" - -# list of encodings to use -encoding = ["iso8859-1", "iso8859-2", "iso8859-15"] - -# whether or not to embed the font -embed = "" -# embed = "not " -embedding = "embedding" -# embedding = "" - -ENCODINGS = 3 -FONTSIZE = 16 -TOP = 700 -LEFT = 50 -YINCR = 2*FONTSIZE -XINCR = 2*FONTSIZE - -# create a new PDFlib object -p = PDF_new() - -# open new PDF file -if PDF_open_file(p, "chartab.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -PDF_set_parameter(p, "openaction", "fitpage") -PDF_set_parameter(p, "fontwarning", "true") - -PDF_set_parameter(p, "SearchPath", searchpath) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "chartab.c") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title", "Character table (C)") - -# loop over all encodings -for page in range(0, ENCODINGS, 1): - PDF_begin_page(p, 595, 842) # start a new page - - # print the heading and generate the bookmark - font = PDF_load_font(p, "Helvetica", "winansi", "") - PDF_setfont(p, font, FONTSIZE) - buf = fontname + " (" + encoding[page] + ") " + embed + "embedded" - - PDF_show_xy(p, buf, LEFT - XINCR, TOP + 3 * YINCR) - PDF_add_bookmark(p, buf, 0, 0) - - # print the row and column captions - PDF_setfont(p, font, 2 * FONTSIZE/3) - - for row in range(0, 16, 1): - buf = "x" + repr(row) - PDF_show_xy(p, buf, LEFT + row*XINCR, TOP + YINCR) - - buf = "x" + repr(row) - PDF_show_xy(p, buf, LEFT - XINCR, TOP - row * YINCR) - - # print the character table - font = PDF_load_font(p, fontname, encoding[page], embedding) - PDF_setfont(p, font, FONTSIZE) - - y = TOP - x = LEFT - - for row in range(0, 16, 1): - for col in range(0, 16, 1): - val = (16*row + col) - if val != 0: - buf = chr(val) - PDF_show_xy(p, buf, x, y) - x += XINCR - x = LEFT - y -= YINCR - - PDF_end_page(p) # close page - -PDF_close(p) # close PDF document - -PDF_delete(p) # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/python/hello.py b/src/libs/pdflib/bind/pdflib/python/hello.py deleted file mode 100644 index 3f02d518f2..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/hello.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/python -# $Id: hello.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: hello example in Python -# - -from sys import * -from pdflib_py import * - -# create a new PDFlib object -p = PDF_new() - -# open new PDF file -if PDF_open_file(p, "hello.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Creator", "hello.py") -PDF_set_info(p, "Title", "Hello world (Python)") - -PDF_begin_page(p, 595, 842) # start a new page - -font = PDF_load_font(p, "Helvetica-Bold", "winansi", "") - -PDF_setfont(p, font, 24) -PDF_set_text_pos(p, 50, 700) -PDF_show(p, "Hello world!") -PDF_continue_text(p, "(says Python)") -PDF_end_page(p) # close page - -PDF_close(p) # close PDF document - -PDF_delete(p) # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/python/image.py b/src/libs/pdflib/bind/pdflib/python/image.py deleted file mode 100644 index 71c46b79f3..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/image.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/python -# $Id: image.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: image example in Python -# - -from sys import * -from pdflib_py import * - -imagefile = "nesrin.jpg" - -# This is where font/image/PDF input files live. Adjust as necessary. -searchpath = "../data" - - -p = PDF_new() - -if PDF_open_file(p, "image.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -PDF_set_parameter(p, "SearchPath", searchpath) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "image.py") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title", "image sample (Python)") - -image = PDF_load_image(p, "auto", imagefile, "") - -if image == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(3) - -# dummy page size, will be adjusted by PDF_fit_image() -PDF_begin_page(p, 10, 10) -PDF_fit_image(p, image, 0, 0, "adjustpage") -PDF_close_image(p, image) -PDF_end_page(p) # close page - -PDF_close(p) # close PDF document - -PDF_delete(p) diff --git a/src/libs/pdflib/bind/pdflib/python/invoice.py b/src/libs/pdflib/bind/pdflib/python/invoice.py deleted file mode 100644 index 245aae77b9..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/invoice.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/python -# $Id: invoice.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: invoice generation demo -# - -from sys import * -import time -import fpformat -from pdflib_py import * - -infile = "stationery.pdf" - -# This is where font/image/PDF input files live. Adjust as necessary. -searchpath = "../data" - -col1 = 55 -col2 = 100 -col3 = 330 -col4 = 430 -col5 = 530 -fontsize = 12 -pagewidth = 595 -pageheight = 842 -closingtext = \ - "30 days warranty starting at the day of sale. " +\ - "This warranty covers defects in workmanship only. " +\ - "Kraxi Systems, Inc. will, at its option, repair or replace the " +\ - "product under the warranty. This warranty is not transferable. " +\ - "No returns or exchanges will be accepted for wet products." - -data_name = [ - "Super Kite", - "Turbo Flyer", - "Giga Trash", - "Bare Bone Kit", - "Nitty Gritty", - "Pretty Dark Flyer", - "Free Gift" ] -data_price = [ 20, 40, 180, 50, 20, 75, 0] -data_quantity = [ 2, 5, 1, 3, 10, 1, 1] - - -ARTICLECOUNT = 6 - -p = PDF_new() - -PDF_set_parameter(p, "tracefile", "invoice.trace") -PDF_set_parameter(p, "debug", "t") -# open new PDF file -if PDF_open_file(p, "invoice.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -PDF_set_parameter(p, "SearchPath", searchpath) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "invoice.c") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title", "PDFlib invoice generation demo (C)") - -form = PDF_open_pdi(p, infile, "", 0) -if form == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -page = PDF_open_pdi_page(p, form, 1, "") -if page == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -boldfont = PDF_load_font(p, "Helvetica-Bold", "winansi", "") -regularfont = PDF_load_font(p, "Helvetica", "winansi", "") -leading = fontsize + 2 - -# Establish coordinates with the origin in the upper left corner. -PDF_set_parameter(p, "topdown", "true") - -PDF_begin_page(p, pagewidth, pageheight) # A4 page - -PDF_fit_pdi_page(p, page, 0, pageheight, "") -PDF_close_pdi_page(p, page) - -PDF_setfont(p, regularfont, fontsize) - -# Print the address -y = 170 -PDF_set_value(p, "leading", leading) - -PDF_show_xy(p, "John Q. Doe", col1, y) -PDF_continue_text(p, "255 Customer Lane") -PDF_continue_text(p, "Suite B") -PDF_continue_text(p, "12345 User Town") -PDF_continue_text(p, "Everland") - -# Print the header and date - -PDF_setfont(p, boldfont, fontsize) -y = 300 -PDF_show_xy(p, "INVOICE", col1, y) - -buf = time.strftime("%x", time.gmtime(time.time())) -PDF_fit_textline(p, buf, col5, y, "position {100 0}") - -# Print the invoice header line -PDF_setfont(p, boldfont, fontsize) - -# "position {0 0}" is left-aligned, "position {100 0}" right-aligned -y = 370 -PDF_fit_textline(p, "ITEM", col1, y, "position {0 0}") -PDF_fit_textline(p, "DESCRIPTION", col2, y, "position {0 0}") -PDF_fit_textline(p, "QUANTITY", col3, y, "position {100 0}") -PDF_fit_textline(p, "PRICE", col4, y, "position {100 0}") -PDF_fit_textline(p, "AMOUNT", col5, y, "position {100 0}") - -# Print the article list - -PDF_setfont(p, regularfont, fontsize) -y += 2*leading -total = 0 - -for i in range(0, ARTICLECOUNT, 1): - buf = repr(i) - i +=1 - PDF_show_xy(p, buf, col1, y) - - PDF_show_xy(p, data_name[i], col2, y) - - buf = repr(data_quantity[i]) - PDF_fit_textline(p, buf, col3, y, "position {100 0}") - - buf = fpformat.fix(data_price[i], 2) - PDF_fit_textline(p, buf, col4, y, "position {100 0}") - - sum = data_price[i] * data_quantity[i] - buf = fpformat.fix(sum, 2) - PDF_fit_textline(p, buf, col5, y, "position {100 0}") - - y += leading - total += sum - -y += leading -PDF_setfont(p, boldfont, fontsize) -buf = fpformat.fix(total, 2) -PDF_fit_textline(p, buf, col5, y, "position {100 0}") - -# Print the closing text - -y += 5*leading -PDF_setfont(p, regularfont, fontsize) -PDF_set_value(p, "leading", leading) -PDF_show_boxed(p, closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", "") - -PDF_end_page(p) -PDF_close(p) -PDF_close_pdi(p, form) - -PDF_delete(p) diff --git a/src/libs/pdflib/bind/pdflib/python/pdfclock.py b/src/libs/pdflib/bind/pdflib/python/pdfclock.py deleted file mode 100644 index b4831ea356..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/pdfclock.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/python -# $Id: pdfclock.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: pdfclock example in Python -# - -from sys import * -from time import * -from pdflib_py import * - -RADIUS = 200.0 -MARGIN = 20.0 - -p = PDF_new() - -if PDF_open_file(p, "pdfclock.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "pdfclock.py") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title", "PDF clock (Python)") - -PDF_begin_page(p, 2 * (RADIUS + MARGIN), 2 * (RADIUS + MARGIN)) - -PDF_translate(p, RADIUS + MARGIN, RADIUS + MARGIN) -PDF_setcolor(p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0) -PDF_save(p) - -# minute strokes -PDF_setlinewidth(p, 2.0) -for alpha in range(0, 360, 6): - PDF_rotate(p, 6.0) - PDF_moveto(p, RADIUS, 0.0) - PDF_lineto(p, RADIUS-MARGIN/3, 0.0) - PDF_stroke(p) - -PDF_restore(p) -PDF_save(p) - -# 5 minute strokes -PDF_setlinewidth(p, 3.0) -for alpha in range(0, 360, 30): - PDF_rotate(p, 30.0) - PDF_moveto(p, RADIUS, 0.0) - PDF_lineto(p, RADIUS-MARGIN, 0.0) - PDF_stroke(p) - -(tm_year, tm_month, tm_day, -tm_hour, tm_min, tm_sec, -tm_weekday, tm_julian, tm_ds) = localtime(time()) - -# draw hour hand -PDF_save(p) -PDF_rotate(p, (-((tm_min/60.0) + tm_hour - 3.0) * 30.0)) -PDF_moveto(p, -RADIUS/10, -RADIUS/20) -PDF_lineto(p, RADIUS/2, 0.0) -PDF_lineto(p, -RADIUS/10, RADIUS/20) -PDF_closepath(p) -PDF_fill(p) -PDF_restore(p) - -# draw minute hand -PDF_save(p) -PDF_rotate(p, (-((tm_sec/60.0) + tm_min - 15.0) * 6.0)) -PDF_moveto(p, -RADIUS/10, -RADIUS/20) -PDF_lineto(p, RADIUS * 0.8, 0.0) -PDF_lineto(p, -RADIUS/10, RADIUS/20) -PDF_closepath(p) -PDF_fill(p) -PDF_restore(p) - -# draw second hand -PDF_setcolor(p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0) -PDF_setlinewidth(p, 2) -PDF_save(p) -PDF_rotate(p, -((tm_sec - 15.0) * 6.0)) -PDF_moveto(p, -RADIUS/5, 0.0) -PDF_lineto(p, RADIUS, 0.0) -PDF_stroke(p) -PDF_restore(p) - -# draw little circle at center -PDF_circle(p, 0, 0, RADIUS/30) -PDF_fill(p) - -PDF_restore(p) - -PDF_end_page(p) - -PDF_close(p) - -PDF_delete(p) # delete the PDFlib object diff --git a/src/libs/pdflib/bind/pdflib/python/pdflib_py.c b/src/libs/pdflib/bind/pdflib/python/pdflib_py.c deleted file mode 100644 index 590ef3a2fa..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/pdflib_py.c +++ /dev/null @@ -1,3248 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib_py.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Wrapper code for the PDFlib Python binding - * - */ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -#include -#ifdef __cplusplus -} -#endif - -/* Compilers which are not strictly ANSI conforming can set PDF_VOLATILE - * to an empty value. - */ -#ifndef PDF_VOLATILE -#define PDF_VOLATILE volatile -#endif - -/* Definitions for Windows/Unix exporting */ -#if defined(__WIN32__) -# if defined(_MSC_VER) -# define SWIGEXPORT(a,b) __declspec(dllexport) a b -# else -# if defined(__BORLANDC__) -# define SWIGEXPORT(a,b) a _export b -# else -# define SWIGEXPORT(a,b) a b -# endif -# endif -#else -# define SWIGEXPORT(a,b) a b -#endif - -#ifdef SWIG_GLOBAL -#ifdef __cplusplus -#define SWIGSTATIC extern "C" -#else -#define SWIGSTATIC -#endif -#endif - -#ifndef SWIGSTATIC -#define SWIGSTATIC static -#endif - -typedef struct { - char *name; - PyObject *(*get_attr)(void); - int (*set_attr)(PyObject *); -} swig_globalvar; - -typedef struct swig_varlinkobject { - PyObject_HEAD - swig_globalvar **vars; - int nvars; - int maxvars; -} swig_varlinkobject; - -/* ---------------------------------------------------------------------- - swig_varlink_repr() - - Function for python repr method - ---------------------------------------------------------------------- */ - -static PyObject * -swig_varlink_repr(swig_varlinkobject *v) -{ - v = v; - return PyString_FromString(""); -} - -/* --------------------------------------------------------------------- - swig_varlink_print() - - Print out all of the global variable names - --------------------------------------------------------------------- */ - -static int -swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) -{ - - int i = 0; - flags = flags; - fprintf(fp,"Global variables { "); - while (v->vars[i]) { - fprintf(fp,"%s", v->vars[i]->name); - i++; - if (v->vars[i]) fprintf(fp,", "); - } - fprintf(fp," }\n"); - return 0; -} - -/* -------------------------------------------------------------------- - swig_varlink_getattr - - This function gets the value of a variable and returns it as a - PyObject. In our case, we'll be looking at the datatype and - converting into a number or string - -------------------------------------------------------------------- */ - -static PyObject * -swig_varlink_getattr(swig_varlinkobject *v, char *n) -{ - int i = 0; - char temp[128]; - - while (v->vars[i]) { - if (strcmp(v->vars[i]->name,n) == 0) { - return (*v->vars[i]->get_attr)(); - } - i++; - } - sprintf(temp,"C global variable %s not found.", n); - PyErr_SetString(PyExc_NameError,temp); - return NULL; -} - -/* ------------------------------------------------------------------- - swig_varlink_setattr() - - This function sets the value of a variable. - ------------------------------------------------------------------- */ - -static int -swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) -{ - char temp[128]; - int i = 0; - while (v->vars[i]) { - if (strcmp(v->vars[i]->name,n) == 0) { - return (*v->vars[i]->set_attr)(p); - } - i++; - } - sprintf(temp,"C global variable %s not found.", n); - PyErr_SetString(PyExc_NameError,temp); - return 1; -} - -statichere PyTypeObject varlinktype = { -/* PyObject_HEAD_INIT(&PyType_Type) Note : This doesn't work on some machines */ - PyObject_HEAD_INIT(0) - 0, - "varlink", /* Type name */ - sizeof(swig_varlinkobject), /* Basic size */ - 0, /* Itemsize */ - 0, /* Deallocator */ - (printfunc) swig_varlink_print, /* Print */ - (getattrfunc) swig_varlink_getattr, /* get attr */ - (setattrfunc) swig_varlink_setattr, /* Set attr */ - 0, /* tp_compare */ - (reprfunc) swig_varlink_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_mapping*/ - 0, /* tp_hash */ -}; - -/* Create a variable linking object for use later */ - -SWIGSTATIC PyObject * -SWIG_newvarlink(void) -{ - swig_varlinkobject *result = 0; - result = PyMem_NEW(swig_varlinkobject,1); - varlinktype.ob_type = &PyType_Type; /* Patch varlinktype into a PyType */ - result->ob_type = &varlinktype; - /* _Py_NewReference(result); Does not seem to be necessary */ - result->nvars = 0; - result->maxvars = 64; - result->vars = (swig_globalvar **) malloc(64*sizeof(swig_globalvar *)); - result->vars[0] = 0; - result->ob_refcnt = 0; - Py_XINCREF((PyObject *) result); - return ((PyObject*) result); -} - -#ifdef PDFLIB_UNUSED -SWIGSTATIC void -SWIG_addvarlink(PyObject *p, char *name, - PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) -{ - swig_varlinkobject *v; - v= (swig_varlinkobject *) p; - - if (v->nvars >= v->maxvars -1) { - v->maxvars = 2*v->maxvars; - v->vars = (swig_globalvar **) realloc(v->vars,v->maxvars*sizeof(swig_globalvar *)); - if (v->vars == NULL) { - fprintf(stderr,"SWIG : Fatal error in initializing Python module.\n"); - exit(1); - } - } - v->vars[v->nvars] = (swig_globalvar *) malloc(sizeof(swig_globalvar)); - v->vars[v->nvars]->name = (char *) malloc(strlen(name)+1); - strcpy(v->vars[v->nvars]->name,name); - v->vars[v->nvars]->get_attr = get_attr; - v->vars[v->nvars]->set_attr = set_attr; - v->nvars++; - v->vars[v->nvars] = 0; -} - -#endif /* PDFLIB_UNUSED */ - -#include - -#ifdef SWIG_GLOBAL -#ifdef __cplusplus -#define SWIGSTATIC extern "C" -#else -#define SWIGSTATIC -#endif -#endif - -#ifndef SWIGSTATIC -#define SWIGSTATIC static -#endif - - -/* SWIG pointer structure */ - -typedef struct SwigPtrType { - char *name; /* Datatype name */ - int len; /* Length (used for optimization) */ - void *(*cast)(void *); /* Pointer casting function */ - struct SwigPtrType *next; /* Linked list pointer */ -} SwigPtrType; - -/* Pointer cache structure */ - -typedef struct { - int stat; /* Status (valid) bit */ - SwigPtrType *tp; /* Pointer to type structure */ - char name[256]; /* Given datatype name */ - char mapped[256]; /* Equivalent name */ -} SwigCacheType; - -/* Some variables */ - -static int SwigPtrMax = 64; /* Max entries that can be currently held */ - /* This value may be adjusted dynamically */ -static int SwigPtrN = 0; /* Current number of entries */ -static int SwigPtrSort = 0; /* Status flag indicating sort */ -static int SwigStart[256]; /* Starting positions of types */ - -/* Pointer table */ -static SwigPtrType *SwigPtrTable = 0; /* Table containing pointer equivalences */ - -/* Cached values */ - -#define SWIG_CACHESIZE 8 -#define SWIG_CACHEMASK 0x7 -static SwigCacheType SwigCache[SWIG_CACHESIZE]; -static int SwigCacheIndex = 0; -static int SwigLastCache = 0; - -/* Sort comparison function */ -static int swigsort(const void *data1, const void *data2) { - SwigPtrType *d1 = (SwigPtrType *) data1; - SwigPtrType *d2 = (SwigPtrType *) data2; - return strcmp(d1->name,d2->name); -} - -/* Binary Search function */ -static int swigcmp(const void *key, const void *data) { - char *k = (char *) key; - SwigPtrType *d = (SwigPtrType *) data; - return strncmp(k,d->name,d->len); -} - -/* Register a new datatype with the type-checker */ - -SWIGSTATIC -void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) { - - int i; - SwigPtrType *t = 0,*t1; - - /* Allocate the pointer table if necessary */ - - if (!SwigPtrTable) { - SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType)); - SwigPtrN = 0; - } - /* Grow the table */ - if (SwigPtrN >= SwigPtrMax) { - SwigPtrMax = 2*SwigPtrMax; - SwigPtrTable = (SwigPtrType *) realloc((char *) SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType)); - } - for (i = 0; i < SwigPtrN; i++) - if (strcmp(SwigPtrTable[i].name,origtype) == 0) { - t = &SwigPtrTable[i]; - break; - } - if (!t) { - t = &SwigPtrTable[SwigPtrN]; - t->name = origtype; - t->len = strlen(t->name); - t->cast = 0; - t->next = 0; - SwigPtrN++; - } - - /* Check for existing entry */ - - while (t->next) { - if ((strcmp(t->name,newtype) == 0)) { - if (cast) t->cast = cast; - return; - } - t = t->next; - } - - /* Now place entry (in sorted order) */ - - t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType)); - t1->name = newtype; - t1->len = strlen(t1->name); - t1->cast = cast; - t1->next = 0; - t->next = t1; - SwigPtrSort = 0; -} - -/* Make a pointer value string */ - -SWIGSTATIC -void SWIG_MakePtr(char *_c, const void *_ptr, char *type) { - static char _hex[16] = - {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f'}; - unsigned long _p, _s; - char _result[20], *_r; /* Note : a 64-bit hex number = 16 digits */ - _r = _result; - _p = (unsigned long) _ptr; - if (_p > 0) { - while (_p > 0) { - _s = _p & 0xf; - *(_r++) = _hex[_s]; - _p = _p >> 4; - } - *_r = '_'; - while (_r >= _result) - *(_c++) = *(_r--); - } else { - strcpy (_c, "NULL"); - } - if (_ptr) - strcpy (_c, type); -} - -/* Function for getting a pointer value */ - -SWIGSTATIC -char *SWIG_GetPtr(char *_c, void **ptr, char *_t) -{ - unsigned long _p; - char temp_type[256]; - char *name; - int i, len; - SwigPtrType *sp,*tp; - SwigCacheType *cache; - int start, end; - _p = 0; - - /* Pointer values must start with leading underscore */ - if (*_c == '_') { - _c++; - /* Extract hex value from pointer */ - while (*_c) { - if ((*_c >= '0') && (*_c <= '9')) - _p = (_p << 4) + (*_c - '0'); - else if ((*_c >= 'a') && (*_c <= 'f')) - _p = (_p << 4) + ((*_c - 'a') + 10); - else - break; - _c++; - } - - if (_t) { - if (strcmp(_t,_c)) { - if (!SwigPtrSort) { - qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); - for (i = 0; i < 256; i++) { - SwigStart[i] = SwigPtrN; - } - for (i = SwigPtrN-1; i >= 0; i--) { - SwigStart[(int) (SwigPtrTable[i].name[1])] = i; - } - for (i = 255; i >= 1; i--) { - if (SwigStart[i-1] > SwigStart[i]) - SwigStart[i-1] = SwigStart[i]; - } - SwigPtrSort = 1; - for (i = 0; i < SWIG_CACHESIZE; i++) - SwigCache[i].stat = 0; - } - - /* First check cache for matches. Uses last cache value as starting point */ - cache = &SwigCache[SwigLastCache]; - for (i = 0; i < SWIG_CACHESIZE; i++) { - if (cache->stat) { - if (strcmp(_t,cache->name) == 0) { - if (strcmp(_c,cache->mapped) == 0) { - cache->stat++; - *ptr = (void *) _p; - if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr); - return (char *) 0; - } - } - } - SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK; - if (!SwigLastCache) cache = SwigCache; - else cache++; - } - /* We have a type mismatch. Will have to look through our type - mapping table to figure out whether or not we can accept this datatype */ - - start = SwigStart[(int) _t[1]]; - end = SwigStart[(int) _t[1]+1]; - sp = &SwigPtrTable[start]; - while (start < end) { - if (swigcmp(_t,sp) == 0) break; - sp++; - start++; - } - if (start >= end) sp = 0; - /* Try to find a match for this */ - if (sp) { - while (swigcmp(_t,sp) == 0) { - name = sp->name; - len = sp->len; - tp = sp->next; - /* Try to find entry for our given datatype */ - while(tp) { - if (tp->len >= 255) { - return _c; - } - strcpy(temp_type,tp->name); - strncat(temp_type,_t+len,255-tp->len); - if (strcmp(_c,temp_type) == 0) { - - strcpy(SwigCache[SwigCacheIndex].mapped,_c); - strcpy(SwigCache[SwigCacheIndex].name,_t); - SwigCache[SwigCacheIndex].stat = 1; - SwigCache[SwigCacheIndex].tp = tp; - SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK; - - /* Get pointer value */ - *ptr = (void *) _p; - if (tp->cast) *ptr = (*(tp->cast))(*ptr); - return (char *) 0; - } - tp = tp->next; - } - sp++; - /* Hmmm. Didn't find it this time */ - } - } - /* Didn't find any sort of match for this data. - Get the pointer value and return the received type */ - *ptr = (void *) _p; - return _c; - } else { - /* Found a match on the first try. Return pointer value */ - *ptr = (void *) _p; - return (char *) 0; - } - } else { - /* No type specified. Good luck */ - *ptr = (void *) _p; - return (char *) 0; - } - } else { - if (strcmp (_c, "NULL") == 0) { - *ptr = (void *) 0; - return (char *) 0; - } - *ptr = (void *) 0; - return _c; - } -} - -#include - -#include "pdflib.h" - - -/* Exception handling */ - -#define try PDF_TRY(p) -#define catch PDF_CATCH(p) { \ - char errmsg[1024];\ - sprintf(errmsg, "PDFlib Error [%d] %s: %s", PDF_get_errnum(p),\ - PDF_get_apiname(p), PDF_get_errmsg(p));\ - PyErr_SetString(PyExc_SystemError,errmsg); \ - return NULL; \ - } - -/* export the PDFlib routines to the shared library */ -#ifdef __MWERKS__ -#pragma export on -#endif - -static PyObject *_wrap_PDF_new(PyObject *self, PyObject *args) { - PDF *p; - char _ptemp[128]; - char versionbuf[32]; - - if(!PyArg_ParseTuple(args,":PDF_new")) - return NULL; - - p = PDF_new(); - - if (p) { -#if defined(PY_VERSION) - sprintf(versionbuf, "Python %s", PY_VERSION); -#elif defined(PATCHLEVEL) - sprintf(versionbuf, "Python %s", PATCHLEVEL); -#else - sprintf(versionbuf, "Python (unknown)"); -#endif - PDF_set_parameter(p, "binding", versionbuf); - } - else { - PyErr_SetString(PyExc_SystemError, "PDFlib error: in PDF_new()"); - return NULL; - } - - SWIG_MakePtr(_ptemp, (char *) p,"_PDF_p"); - return Py_BuildValue("s",_ptemp); -} - -static PyObject *_wrap_PDF_delete(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_delete",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_delete. Expected _PDF_p."); - return NULL; - } - } - - PDF_delete(p); - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_open_file(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ss:PDF_open_file",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_file. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_file(p,_arg1); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_close(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_close",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_close. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_close(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_get_buffer(PyObject *self, PyObject *args) { - char * _result; - PDF * p; - char * _argc0 = 0; - long size; - - if(!PyArg_ParseTuple(args,"s:PDF_get_buffer",&_argc0)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError, - "Type error in argument 1 of PDF_get_buffer. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (char *)PDF_get_buffer(p, &size); - } catch; - return Py_BuildValue("s#", _result, (int) size); -} - -static PyObject *_wrap_PDF_begin_page(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_begin_page",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_begin_page. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_begin_page(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_end_page(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_end_page",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_end_page. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_end_page(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_get_errmsg(PyObject *self, PyObject *args) { - PyObject * _resultobj; - char * _result; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_get_errmsg",&_argc0)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_errmsg. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (char *)PDF_get_errmsg(p); - } catch; - _resultobj = Py_BuildValue("s", _result); - return _resultobj; -} - -static PyObject *_wrap_PDF_get_apiname(PyObject *self, PyObject *args) { - PyObject * _resultobj; - char * _result; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_get_apiname",&_argc0)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_apiname. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (char *)PDF_get_apiname(p); - } catch; - _resultobj = Py_BuildValue("s", _result); - return _resultobj; -} - -static PyObject *_wrap_PDF_get_errnum(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_get_errnum",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_errnum. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_get_errnum(p); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_set_parameter(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - char * _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sss:PDF_set_parameter",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_parameter. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_parameter(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_get_parameter(PyObject *self, PyObject *args) { - PyObject * _resultobj; - char * _result; - PDF * p; - char * _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssf:PDF_get_parameter",&_argc0,&_arg1,&_arg2)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_parameter. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (char *)PDF_get_parameter(p,_arg1,_arg2); - } catch; - _resultobj = Py_BuildValue("s", _result); - return _resultobj; -} - -static PyObject *_wrap_PDF_set_value(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - char * _arg1; - float _arg2; - char * _argc0 = 0; - - self = self; - if(!PyArg_ParseTuple(args,"ssf:PDF_set_value",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_value. Expected _PDF_p."); - return NULL; - } - } -{ - try { PDF_set_value(p,_arg1,_arg2); - } catch; -} Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_get_value(PyObject *self, PyObject *args) { - PyObject * _resultobj; - float _result; - PDF * p; - char * _arg1; - float _arg2; - char * _argc0 = 0; - - self = self; - if(!PyArg_ParseTuple(args,"ssf:PDF_get_value",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_value. Expected _PDF_p."); - return NULL; - } - } -{ - try { _result = (float)PDF_get_value(p,_arg1,_arg2); - } catch; -} _resultobj = Py_BuildValue("f",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_findfont(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - char * _arg2; - int _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sssi:PDF_findfont",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_findfont. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_findfont(p,_arg1,_arg2,_arg3); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_setfont(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sif:PDF_setfont",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setfont. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setfont(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_show(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - char * _argc0 = 0; - int len; - - if(!PyArg_ParseTuple(args,"ss:PDF_show",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_show. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - PDF_show2(p,_arg1, len); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_show_xy(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - int len; - - if(!PyArg_ParseTuple(args,"ssff:PDF_show_xy",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_show_xy. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - PDF_show_xy2(p,_arg1, len, _arg2,_arg3); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_continue_text(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - char * _argc0 = 0; - int len; - - if(!PyArg_ParseTuple(args,"ss:PDF_continue_text",&_argc0,&_arg1)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_continue_text. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - PDF_continue_text2(p,_arg1, len); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_show_boxed(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - char * _arg6; - char * _arg7; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssffffss:PDF_show_boxed",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_arg7)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_show_boxed. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_show_boxed(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7); - } catch; - - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_set_text_pos(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_set_text_pos",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_text_pos. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_text_pos(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_stringwidth(PyObject *self, PyObject *args) { - float _result; - PDF * p; - char * _arg1; - int _arg2; - float _arg3; - char * _argc0 = 0; - int len; - - if(!PyArg_ParseTuple(args,"ssif:PDF_stringwidth",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_stringwidth. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - _result = (float)PDF_stringwidth2(p,_arg1, len, _arg2,_arg3); - } catch; - return Py_BuildValue("f",_result); -} - -static PyObject *_wrap_PDF_setdash(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_setdash",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setdash. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setdash(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setpolydash(PyObject *self, PyObject *args) { - PyObject *val; - PDF *p; - float fval, carray[MAX_DASH_LENGTH]; - int PDF_VOLATILE length, i; - char *_argc0 = NULL; - PyObject *_argc1 = NULL; - - if(!PyArg_ParseTuple(args, "sO:PDF_setpolydash", &_argc0, &_argc1)) - return NULL; - - if (!_argc0 || SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError, - "Type error in argument 1 of PDF_setpolydash. Expected _PDF_p."); - return NULL; - } - - if (!_argc1 || !PyTuple_Check(_argc1)) { - PyErr_SetString(PyExc_TypeError, - "Type error in argument 2 of PDF_setpolydash. Expected float tuple."); - return NULL; - } - - length = PyTuple_Size(_argc1); - - if (length > MAX_DASH_LENGTH) - length = MAX_DASH_LENGTH; - - for (i = 0; i < length; i++) { - val = PyTuple_GetItem(_argc1, i); - if (!PyArg_Parse(val, "f:PDF_setpolydash", &fval)) { - PyErr_SetString(PyExc_TypeError, - "Type error in argument 2 of PDF_setpolydash. Expected float."); - return NULL; - } - carray[i] = fval; - } - - try { PDF_setpolydash(p, carray, length); - } catch; - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setflat(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setflat",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setflat. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setflat(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setlinejoin(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_setlinejoin",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setlinejoin. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setlinejoin(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setlinecap(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_setlinecap",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setlinecap. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setlinecap(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setmiterlimit(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setmiterlimit",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setmiterlimit. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setmiterlimit(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setlinewidth(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setlinewidth",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setlinewidth. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setlinewidth(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_save(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_save",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_save. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_save(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_restore(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_restore",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_restore. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_restore(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_translate(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_translate",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_translate. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_translate(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_scale(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_scale",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_scale. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_scale(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_rotate(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_rotate",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_rotate. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_rotate(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_skew(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_skew",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_skew. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_skew(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_concat(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffff:PDF_concat", - &_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError, - "Type error in argument 1 of PDF_concat. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_concat(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_moveto(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_moveto",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_moveto. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_moveto(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_lineto(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_lineto",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_lineto. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_lineto(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_curveto(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffff:PDF_curveto",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_curveto. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_curveto(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_circle(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfff:PDF_circle",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_circle. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_circle(p,_arg1,_arg2,_arg3); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_arc(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfffff:PDF_arc",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_arc. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_arc(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_rect(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffff:PDF_rect",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_rect. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_rect(p,_arg1,_arg2,_arg3,_arg4); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_closepath(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_closepath",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_closepath. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_closepath(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_stroke(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_stroke",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_stroke(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_closepath_stroke(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_closepath_stroke",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_closepath_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_closepath_stroke(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_fill(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_fill",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fill. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_fill(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_fill_stroke(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_fill_stroke",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fill_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_fill_stroke(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_closepath_fill_stroke(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_closepath_fill_stroke",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_closepath_fill_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_closepath_fill_stroke(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_endpath(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_endpath",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_endpath. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_endpath(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_clip(PyObject *self, PyObject *args) { - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_clip",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_clip. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_clip(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setgray_fill(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setgray_fill",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setgray_fill. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "fill", "gray", _arg1, 0, 0, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setgray_stroke(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setgray_stroke",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setgray_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "stroke", "gray", _arg1, 0, 0, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setgray(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sf:PDF_setgray",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setgray. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "fillstroke", "gray", _arg1, 0, 0, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setrgbcolor_fill(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfff:PDF_setrgbcolor_fill",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setrgbcolor_fill. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "fill", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setrgbcolor_stroke(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfff:PDF_setrgbcolor_stroke",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setrgbcolor_stroke. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "stroke", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_setrgbcolor(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfff:PDF_setrgbcolor",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setrgbcolor. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p, "fillstroke", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_place_image(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sifff:PDF_place_image",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_place_image. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_place_image(p,_arg1,_arg2,_arg3,_arg4); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_open_image(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - char * _arg2; - char * _arg3; - long _arg4; - int _arg5; - int _arg6; - int _arg7; - int _arg8; - char * _arg9; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssssliiiis:PDF_open_image",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_arg7,&_arg8,&_arg9)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_image. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_image(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_close_image(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_close_image",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_close_image. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_close_image(p,_arg1); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_open_image_file(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - char * _arg2; - char * _arg3; - int _arg4; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssssi:PDF_open_image_file",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_image_file. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_image_file(p,_arg1,_arg2,_arg3,_arg4); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_open_CCITT(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - int _arg2; - int _arg3; - int _arg4; - int _arg5; - int _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssiiiii:PDF_open_CCITT",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_CCITT. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_CCITT(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_add_bookmark(PyObject *self, PyObject *args) { - int _result; - PDF * p; - char * _arg1; - int len; - int _arg2; - int _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssii:PDF_add_bookmark",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_bookmark. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - _result = (int)PDF_add_bookmark2(p,_arg1,len,_arg2,_arg3); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_set_info(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - char * _arg2; - int len; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sss:PDF_set_info",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_info. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 2)); - PDF_set_info2(p,_arg1,_arg2,len); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_attach_file(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _arg5; - char * _arg6; - int len_descr; - char * _arg7; - int len_auth; - char * _arg8; - char * _arg9; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffsssss:PDF_attach_file",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_arg7,&_arg8,&_arg9)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_attach_file. Expected _PDF_p."); - return NULL; - } - } - - try { - len_descr = PyString_Size(PyTuple_GetItem(args, 6)); - len_auth = PyString_Size(PyTuple_GetItem(args, 7)); - PDF_attach_file2(p,_arg1,_arg2,_arg3,_arg4,_arg5,0, - _arg6,len_descr,_arg7,len_auth,_arg8,_arg9); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_note(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _arg5; - char * _arg6; - char * _arg7; - int _arg8; - int len_cont; - int len_title; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffsssi:PDF_add_note",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_arg7,&_arg8)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_note. Expected _PDF_p."); - return NULL; - } - } - - try { - len_cont = PyString_Size(PyTuple_GetItem(args, 5)); - len_title = PyString_Size(PyTuple_GetItem(args, 6)); - PDF_add_note2(p,_arg1,_arg2,_arg3,_arg4,_arg5,len_cont,_arg6,len_title,_arg7,_arg8); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_pdflink(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _arg5; - int _arg6; - char * _arg7; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffsis:PDF_add_pdflink",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_arg7)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_pdflink. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_add_pdflink(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_launchlink(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffs:PDF_add_launchlink",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_launchlink. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_add_launchlink(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_locallink(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int _arg5; - char * _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffis:PDF_add_locallink",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_locallink. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_add_locallink(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_weblink(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char * _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffs:PDF_add_weblink",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_weblink. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_add_weblink(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_set_border_style(PyObject *self, PyObject *args) { - PDF * p; - char * _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssf:PDF_set_border_style",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_border_style. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_border_style(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_set_border_color(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - float _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfff:PDF_set_border_color",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_border_color. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_border_color(p,_arg1,_arg2,_arg3); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_set_border_dash(PyObject *self, PyObject *args) { - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_set_border_dash",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_border_dash. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_border_dash(p,_arg1,_arg2); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_open_pdi(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - char * _arg1; - char * _arg2; - int _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sssi:PDF_open_pdi",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_pdi. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_pdi(p,_arg1,_arg2,_arg3); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_close_pdi(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_close_pdi",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_close_pdi. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_close_pdi(p,_arg1); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_open_pdi_page(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - int _arg1; - int _arg2; - char * _arg3; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"siis:PDF_open_pdi_page",&_argc0,&_arg1,&_arg2,&_arg3)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_open_pdi_page. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_open_pdi_page(p,_arg1,_arg2,_arg3); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_close_pdi_page(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_close_pdi_page",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_close_pdi_page. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_close_pdi_page(p,_arg1); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_place_pdi_page(PyObject *self, PyObject *args) { - PDF * p; - int _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"siffff:PDF_place_pdi_page",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_place_image. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_place_pdi_page(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_get_pdi_parameter(PyObject *self, PyObject *args) { - char * _result; - PDF * p; - char * _arg1; - int _arg2; - int _arg3; - int _arg4; - int size; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssiii:PDF_get_pdi_parameter",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_pdi_parameter. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (char *)PDF_get_pdi_parameter(p,_arg1,_arg2,_arg3,_arg4, &size); - } catch; - return Py_BuildValue("s#", _result, (int) size); -} - -static PyObject *_wrap_PDF_get_pdi_value(PyObject *self, PyObject *args) { - PyObject * _resultobj; - float _result; - PDF * p; - char * _arg1; - int _arg2; - int _arg3; - int _arg4; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssiii:PDF_get_pdi_value",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_get_pdi_value. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (float)PDF_get_pdi_value(p,_arg1,_arg2,_arg3,_arg4); - } catch; - _resultobj = Py_BuildValue("f",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_makespotcolor(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - char * _arg1; - int _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"ssi:PDF_makespotcolor",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_makespotcolor. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_makespotcolor(p,_arg1,_arg2); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_setcolor(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - char * _arg1; - char * _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sssffff:PDF_setcolor",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setcolor. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setcolor(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_begin_pattern(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffi:PDF_begin_pattern",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_begin_pattern. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_begin_pattern(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_end_pattern(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_end_pattern",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_end_pattern. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_end_pattern(p); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_begin_template(PyObject *self, PyObject *args) { - PyObject * _resultobj; - int _result; - PDF * p; - float _arg1; - float _arg2; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sff:PDF_begin_template",&_argc0,&_arg1,&_arg2)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_begin_template. Expected _PDF_p."); - return NULL; - } - } - - try { _result = (int)PDF_begin_template(p,_arg1,_arg2); - } catch; - _resultobj = Py_BuildValue("i",_result); - return _resultobj; -} - -static PyObject *_wrap_PDF_end_template(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_end_template",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_end_template. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_end_template(p); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_arcn(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sfffff:PDF_arcn",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_arcn. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_arcn(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_add_thumbnail(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - int _arg1; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"si:PDF_add_thumbnail",&_argc0,&_arg1)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_thumbnail. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_add_thumbnail(p,_arg1); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_setmatrix(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"sffffff:PDF_setmatrix",&_argc0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setmatrix. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_setmatrix(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_initgraphics(PyObject *self, PyObject *args) { - PyObject * _resultobj; - PDF * p; - char * _argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_initgraphics",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_initgraphics. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_initgraphics(p); - } catch; - Py_INCREF(Py_None); - _resultobj = Py_None; - return _resultobj; -} - -static PyObject *_wrap_PDF_begin_font(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - char *name; - float a, b, c, d, e, f; - char *optlist; - - if(!PyArg_ParseTuple(args,"ssffffffs:PDF_begin_font",&_argc0,&name,&a,&b,&c,&d,&e,&f,&optlist)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_begin_font. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_begin_font(p, name, 0, a, b, c, d, e, f, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_end_font(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_end_font",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_end_font. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_end_font(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_begin_glyph(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - char *name; - float wx; - float llx; - float lly; - float urx; - float ury; - - if(!PyArg_ParseTuple(args,"ssfffff:PDF_begin_glyph",&_argc0,&name,&wx,&llx,&lly,&urx,&ury)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_begin_glyph. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_begin_glyph(p, name, wx, llx, lly, urx, ury); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_end_glyph(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - - if(!PyArg_ParseTuple(args,"s:PDF_end_glyph",&_argc0)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_end_glyph. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_end_glyph(p); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_encoding_set_char(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - char *encoding; - int slot; - char *glyphname; - int uv; - - if(!PyArg_ParseTuple(args,"ssisi:PDF_encoding_set_char",&_argc0,&encoding,&slot,&glyphname,&uv)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_encoding_set_char. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_encoding_set_char(p, encoding, slot, glyphname, uv); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_set_gstate(PyObject *self, PyObject *args) { - PDF *p; - char *_argc0 = 0; - int handle; - - if(!PyArg_ParseTuple(args,"si:PDF_set_gstate",&_argc0,&handle)) - return NULL; - if (_argc0) { - if (SWIG_GetPtr(_argc0,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_set_gstate. Expected _PDF_p."); - return NULL; - } - } - - try { PDF_set_gstate(p, handle); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_fill_imageblock(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - int page; - char *blockname; - int image; - char *optlist; - - if(!PyArg_ParseTuple(args,"sisis:PDF_fill_imageblock",&py_p,&page,&blockname,&image,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fill_imageblock. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_fill_imageblock(p, page, blockname, image, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_fill_pdfblock(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - int page; - char *blockname; - int contents; - char *optlist; - - if(!PyArg_ParseTuple(args,"sisis:PDF_fill_pdfblock",&py_p,&page,&blockname,&contents,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fill_pdfblock. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_fill_pdfblock(p, page, blockname, contents, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_fill_textblock(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - int page; - char *blockname; - char *text; - int len; - char *optlist; - - if(!PyArg_ParseTuple(args,"sisss:PDF_fill_textblock",&py_p,&page,&blockname,&text,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fill_textblock. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 3)); - _result = PDF_fill_textblock(p, page, blockname, text, len, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_load_font(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *fontname; - char *encoding; - char *optlist; - - if(!PyArg_ParseTuple(args,"ssss:PDF_load_font",&py_p,&fontname,&encoding,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_load_font. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_load_font(p, fontname, 0, encoding, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_setdashpattern(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - char *optlist; - - if(!PyArg_ParseTuple(args,"ss:PDF_setdashpattern",&py_p,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_setdashpattern. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_setdashpattern(p, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_add_nameddest(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - char *name; - char *optlist; - - if(!PyArg_ParseTuple(args,"sss:PDF_add_nameddest",&py_p,&name,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_add_nameddest. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_add_nameddest(p, name, 0, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_load_iccprofile(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *profilename; - char *optlist; - - if(!PyArg_ParseTuple(args,"sss:PDF_load_iccprofile",&py_p,&profilename,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_load_iccprofile. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_load_iccprofile(p, profilename, 0, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_fit_image(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - int image; - float x; - float y; - char *optlist; - - if(!PyArg_ParseTuple(args,"siffs:PDF_fit_image",&py_p,&image,&x,&y,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fit_image. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_fit_image(p, image, x, y, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_load_image(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *imagetype; - char *filename; - char *optlist; - - if(!PyArg_ParseTuple(args,"ssss:PDF_load_image",&py_p,&imagetype,&filename,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_load_image. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_load_image(p, imagetype, filename, 0, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_fit_pdi_page(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - int page; - float x; - float y; - char *optlist; - - if(!PyArg_ParseTuple(args,"siffs:PDF_fit_pdi_page",&py_p,&page,&x,&y,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fit_pdi_page. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_fit_pdi_page(p, page, x, y, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_process_pdi(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - int doc; - int page; - char *optlist; - - if(!PyArg_ParseTuple(args,"siis:PDF_process_pdi",&py_p,&doc,&page,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_process_pdi. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_process_pdi(p, doc, page, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_create_pvf(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - char *filename; - void *data; - char *optlist; - int size; - - if(!PyArg_ParseTuple(args,"sss#s:PDF_create_pvf", &py_p,&filename,&data,&size, &optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_create_pvf. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_create_pvf(p, filename, 0, data, size, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_delete_pvf(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *filename; - - if(!PyArg_ParseTuple(args,"ss:PDF_delete_pvf",&py_p,&filename)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_delete_pvf. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_delete_pvf(p, filename, 0); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_shading(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *shtype; - float x0; - float yy0; - float x1; - float yy1; - float c1; - float c2; - float c3; - float c4; - char *optlist; - - if(!PyArg_ParseTuple(args,"ssffffffffs:PDF_shading",&py_p,&shtype,&x0,&yy0,&x1,&yy1,&c1,&c2,&c3,&c4,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_shading. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_shading(p, shtype, x0, yy0, x1, yy1, c1, c2, c3, c4, optlist); - } catch; - return Py_BuildValue("i",_result); -} -static PyObject *_wrap_PDF_shading_pattern(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - int shading; - char *optlist; - - if(!PyArg_ParseTuple(args,"sis:PDF_shading_pattern",&py_p,&shading,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_shading_pattern. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_shading_pattern(p, shading, optlist); - } catch; - return Py_BuildValue("i",_result); -} - -static PyObject *_wrap_PDF_shfill(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - int shading; - - if(!PyArg_ParseTuple(args,"si:PDF_shfill",&py_p,&shading)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_shfill. Expected _PDF_p."); - return NULL; - } - } - - try { - PDF_shfill(p, shading); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_fit_textline(PyObject *self, PyObject *args) { - PDF *p; - char *py_p = 0; - char *text; - int len; - float x; - float y; - char *optlist; - - if(!PyArg_ParseTuple(args,"ssffs:PDF_fit_textline",&py_p,&text,&x,&y,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_fit_textline. Expected _PDF_p."); - return NULL; - } - } - - try { - len = PyString_Size(PyTuple_GetItem(args, 1)); - PDF_fit_textline(p, text, len, x, y, optlist); - } catch; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *_wrap_PDF_create_gstate(PyObject *self, PyObject *args) { - int _result; - PDF *p; - char *py_p = 0; - char *optlist; - - if(!PyArg_ParseTuple(args,"ss:PDF_create_gstate",&py_p,&optlist)) - return NULL; - if (py_p) { - if (SWIG_GetPtr(py_p,(void **) &p,"_PDF_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of PDF_create_gstate. Expected _PDF_p."); - return NULL; - } - } - - try { - _result = PDF_create_gstate(p, optlist); - } catch; - return Py_BuildValue("i",_result); -} - - -static PyMethodDef pdflibMethods[] = { - { "PDF_set_border_dash", _wrap_PDF_set_border_dash, 1 }, - { "PDF_set_border_color", _wrap_PDF_set_border_color, 1 }, - { "PDF_set_border_style", _wrap_PDF_set_border_style, 1 }, - { "PDF_add_weblink", _wrap_PDF_add_weblink, 1 }, - { "PDF_add_locallink", _wrap_PDF_add_locallink, 1 }, - { "PDF_add_launchlink", _wrap_PDF_add_launchlink, 1 }, - { "PDF_add_pdflink", _wrap_PDF_add_pdflink, 1 }, - { "PDF_add_note", _wrap_PDF_add_note, 1 }, - { "PDF_attach_file", _wrap_PDF_attach_file, 1 }, - { "PDF_set_info", _wrap_PDF_set_info, 1 }, - { "PDF_add_bookmark", _wrap_PDF_add_bookmark, 1 }, - { "PDF_open_CCITT", _wrap_PDF_open_CCITT, 1 }, - { "PDF_close_image", _wrap_PDF_close_image, 1 }, - { "PDF_open_image", _wrap_PDF_open_image, 1 }, - { "PDF_open_image_file", _wrap_PDF_open_image_file, 1 }, - { "PDF_place_image", _wrap_PDF_place_image, 1 }, - { "PDF_setrgbcolor", _wrap_PDF_setrgbcolor, 1 }, - { "PDF_setrgbcolor_stroke", _wrap_PDF_setrgbcolor_stroke, 1 }, - { "PDF_setrgbcolor_fill", _wrap_PDF_setrgbcolor_fill, 1 }, - { "PDF_setgray", _wrap_PDF_setgray, 1 }, - { "PDF_setgray_stroke", _wrap_PDF_setgray_stroke, 1 }, - { "PDF_setgray_fill", _wrap_PDF_setgray_fill, 1 }, - { "PDF_clip", _wrap_PDF_clip, 1 }, - { "PDF_endpath", _wrap_PDF_endpath, 1 }, - { "PDF_closepath_fill_stroke", _wrap_PDF_closepath_fill_stroke, 1 }, - { "PDF_fill_stroke", _wrap_PDF_fill_stroke, 1 }, - { "PDF_fill", _wrap_PDF_fill, 1 }, - { "PDF_closepath_stroke", _wrap_PDF_closepath_stroke, 1 }, - { "PDF_stroke", _wrap_PDF_stroke, 1 }, - { "PDF_closepath", _wrap_PDF_closepath, 1 }, - { "PDF_rect", _wrap_PDF_rect, 1 }, - { "PDF_arc", _wrap_PDF_arc, 1 }, - { "PDF_circle", _wrap_PDF_circle, 1 }, - { "PDF_curveto", _wrap_PDF_curveto, 1 }, - { "PDF_lineto", _wrap_PDF_lineto, 1 }, - { "PDF_moveto", _wrap_PDF_moveto, 1 }, - { "PDF_skew", _wrap_PDF_skew, 1 }, - { "PDF_concat", _wrap_PDF_concat, 1 }, - { "PDF_rotate", _wrap_PDF_rotate, 1 }, - { "PDF_scale", _wrap_PDF_scale, 1 }, - { "PDF_translate", _wrap_PDF_translate, 1 }, - { "PDF_restore", _wrap_PDF_restore, 1 }, - { "PDF_save", _wrap_PDF_save, 1 }, - { "PDF_setlinewidth", _wrap_PDF_setlinewidth, 1 }, - { "PDF_setmiterlimit", _wrap_PDF_setmiterlimit, 1 }, - { "PDF_setlinecap", _wrap_PDF_setlinecap, 1 }, - { "PDF_setlinejoin", _wrap_PDF_setlinejoin, 1 }, - { "PDF_setflat", _wrap_PDF_setflat, 1 }, - { "PDF_setpolydash", _wrap_PDF_setpolydash, 1 }, - { "PDF_setdash", _wrap_PDF_setdash, 1 }, - { "PDF_stringwidth", _wrap_PDF_stringwidth, 1 }, - { "PDF_set_text_pos", _wrap_PDF_set_text_pos, 1 }, - { "PDF_continue_text", _wrap_PDF_continue_text, 1 }, - { "PDF_show_boxed", _wrap_PDF_show_boxed, 1 }, - { "PDF_show_xy", _wrap_PDF_show_xy, 1 }, - { "PDF_show", _wrap_PDF_show, 1 }, - { "PDF_setfont", _wrap_PDF_setfont, 1 }, - { "PDF_findfont", _wrap_PDF_findfont, 1 }, - { "PDF_set_parameter", _wrap_PDF_set_parameter, 1 }, - { "PDF_get_parameter", _wrap_PDF_get_parameter, 1 }, - { "PDF_get_value", _wrap_PDF_get_value, 1 }, - { "PDF_set_value", _wrap_PDF_set_value, 1 }, - { "PDF_end_page", _wrap_PDF_end_page, 1 }, - { "PDF_begin_page", _wrap_PDF_begin_page, 1 }, - { "PDF_get_buffer", _wrap_PDF_get_buffer, 1 }, - { "PDF_close", _wrap_PDF_close, 1 }, - { "PDF_open_file", _wrap_PDF_open_file, 1 }, - { "PDF_delete", _wrap_PDF_delete, 1 }, - { "PDF_new", _wrap_PDF_new, 1 }, - { "PDF_initgraphics", _wrap_PDF_initgraphics, 1 }, - { "PDF_setmatrix", _wrap_PDF_setmatrix, 1 }, - { "PDF_add_thumbnail", _wrap_PDF_add_thumbnail, 1 }, - { "PDF_arcn", _wrap_PDF_arcn, 1 }, - { "PDF_end_template", _wrap_PDF_end_template, 1 }, - { "PDF_begin_template", _wrap_PDF_begin_template, 1 }, - { "PDF_end_pattern", _wrap_PDF_end_pattern, 1 }, - { "PDF_begin_pattern", _wrap_PDF_begin_pattern, 1 }, - { "PDF_setcolor", _wrap_PDF_setcolor, 1 }, - { "PDF_makespotcolor", _wrap_PDF_makespotcolor, 1 }, - { "PDF_get_pdi_value", _wrap_PDF_get_pdi_value, 1 }, - { "PDF_get_pdi_parameter", _wrap_PDF_get_pdi_parameter, 1 }, - { "PDF_close_pdi_page", _wrap_PDF_close_pdi_page, 1 }, - { "PDF_place_pdi_page", _wrap_PDF_place_pdi_page, 1 }, - { "PDF_open_pdi_page", _wrap_PDF_open_pdi_page, 1 }, - { "PDF_close_pdi", _wrap_PDF_close_pdi, 1 }, - { "PDF_open_pdi", _wrap_PDF_open_pdi, 1 }, - { "PDF_begin_font", _wrap_PDF_begin_font, 1 }, - { "PDF_end_font", _wrap_PDF_end_font, 1 }, - { "PDF_begin_glyph", _wrap_PDF_begin_glyph, 1 }, - { "PDF_end_glyph", _wrap_PDF_end_glyph, 1 }, - { "PDF_encoding_set_char", _wrap_PDF_encoding_set_char, 1 }, - { "PDF_set_gstate", _wrap_PDF_set_gstate, 1 }, - - { "PDF_fill_imageblock", _wrap_PDF_fill_imageblock, 1 }, - { "PDF_fill_pdfblock", _wrap_PDF_fill_pdfblock, 1 }, - { "PDF_fill_textblock", _wrap_PDF_fill_textblock, 1 }, - { "PDF_load_font", _wrap_PDF_load_font, 1 }, - { "PDF_setdashpattern", _wrap_PDF_setdashpattern, 1 }, - { "PDF_add_nameddest", _wrap_PDF_add_nameddest, 1 }, - { "PDF_load_iccprofile", _wrap_PDF_load_iccprofile, 1 }, - { "PDF_fit_image", _wrap_PDF_fit_image, 1 }, - { "PDF_load_image", _wrap_PDF_load_image, 1 }, - { "PDF_fit_pdi_page", _wrap_PDF_fit_pdi_page, 1 }, - { "PDF_process_pdi", _wrap_PDF_process_pdi, 1 }, - { "PDF_create_pvf", _wrap_PDF_create_pvf, 1 }, - { "PDF_delete_pvf", _wrap_PDF_delete_pvf, 1 }, - { "PDF_shading", _wrap_PDF_shading, 1 }, - { "PDF_shading_pattern", _wrap_PDF_shading_pattern, 1 }, - { "PDF_shfill", _wrap_PDF_shfill, 1 }, - { "PDF_fit_textline", _wrap_PDF_fit_textline, 1 }, - { "PDF_create_gstate", _wrap_PDF_create_gstate, 1 }, - - { "PDF_get_errmsg", _wrap_PDF_get_errmsg, 1 }, - { "PDF_get_apiname", _wrap_PDF_get_apiname, 1 }, - { "PDF_get_errnum", _wrap_PDF_get_errnum, 1 }, - - { NULL, NULL } -}; -static PyObject *SWIG_globals; -#ifdef __cplusplus -extern "C" -#endif -SWIGEXPORT(void,initpdflib_py)() { - PyObject *m, *d; - SWIG_globals = SWIG_newvarlink(); - m = Py_InitModule("pdflib_py", pdflibMethods); - d = PyModule_GetDict(m); - - /* Boot the PDFlib core */ - PDF_boot(); -/* - * These are the pointer type-equivalency mappings. - * (Used by the SWIG pointer type-checker). - */ - SWIG_RegisterMapping("_signed_long","_long",0); - SWIG_RegisterMapping("_struct_PDF_s","_PDF",0); - SWIG_RegisterMapping("_long","_unsigned_long",0); - SWIG_RegisterMapping("_long","_signed_long",0); - SWIG_RegisterMapping("_PDF","_struct_PDF_s",0); - SWIG_RegisterMapping("_unsigned_long","_long",0); - SWIG_RegisterMapping("_signed_int","_int",0); - SWIG_RegisterMapping("_unsigned_short","_short",0); - SWIG_RegisterMapping("_signed_short","_short",0); - SWIG_RegisterMapping("_unsigned_int","_int",0); - SWIG_RegisterMapping("_short","_unsigned_short",0); - SWIG_RegisterMapping("_short","_signed_short",0); - SWIG_RegisterMapping("_int","_unsigned_int",0); - SWIG_RegisterMapping("_int","_signed_int",0); -} diff --git a/src/libs/pdflib/bind/pdflib/python/quickreference.py b/src/libs/pdflib/bind/pdflib/python/quickreference.py deleted file mode 100644 index b6bf26eb82..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/quickreference.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/python -# $Id: quickreference.py 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib/PDI client: mini imposition demo -# - -from sys import * -from pdflib_py import * - -maxrow = 2 -maxcol = 2 -startpage = 1 -endpage = 4 -width = 500.0 -height = 770.0 - -infile = "reference.pdf" -searchpath = "../data" - -p = PDF_new() - -if PDF_open_file(p, "quickreference.pdf") == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -PDF_set_parameter(p, "SearchPath", searchpath) - -# This line is required to avoid problems on Japanese systems -PDF_set_parameter(p, "hypertextencoding", "winansi") - -PDF_set_info(p, "Creator", "quickreference.py") -PDF_set_info(p, "Author", "Thomas Merz") -PDF_set_info(p, "Title", "mini imposition demo (Python)") - -manual = PDF_open_pdi(p, infile, "", 0) - -if manual == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - -row = 0 -col = 0 - -PDF_set_parameter(p, "topdown", "true") - -for pageno in range(startpage, endpage+1): - if row == 0 and col == 0: - PDF_begin_page(p, width, height) - font = PDF_load_font(p, "Helvetica-Bold", "winansi", "") - PDF_setfont(p, font, 18) - PDF_set_text_pos(p, 24, 24) - PDF_show(p, "PDFlib 4.0 Quick Reference") - - page = PDF_open_pdi_page(p, manual, pageno, "") - - if page == -1: - print "Error: " + PDF_get_errmsg(p) + "\n" - exit(2) - - optlist = "scale " + repr(1.0/maxrow) - - PDF_fit_pdi_page(p, page, - width/maxcol*col, (row + 1) * height/maxrow, optlist) - PDF_close_pdi_page(p, page) - - col = col+1 - if col == maxcol: - col = 0 - row = row+1 - - if row == maxrow: - row = 0 - PDF_end_page(p) - -# finish the last partial page -if row != 0 or col != 0: - PDF_end_page(p) - -PDF_close(p) -PDF_close_pdi(p, manual) -PDF_delete(p) diff --git a/src/libs/pdflib/bind/pdflib/python/readme.txt b/src/libs/pdflib/bind/pdflib/python/readme.txt deleted file mode 100644 index bab4726af9..0000000000 --- a/src/libs/pdflib/bind/pdflib/python/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -Python binding on Mac OS X -========================== - -The build process creates pdflib_py.dylib (as usual on Mac OS X), but Python -wants to have pdflib_py.so. Therefore you must rename pdflib_py.dylib to -pdflib_py.so before you can use the binaries. diff --git a/src/libs/pdflib/bind/pdflib/tcl/Makefile b/src/libs/pdflib/bind/pdflib/tcl/Makefile deleted file mode 100644 index 0b669220c4..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Makefile for PDFlib's Tcl binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc - -INCLUDES = $(PDFLIBINC) $(TCLINCLUDE) - -LANG_LIBDIR = $(TCLPACKAGEDIR) - -LIBNAME = pdflib_tcl$(LA) -OBJ = pdflib_tcl$(LO) -SRC = pdflib_tcl.c - - -include $(top_builddir)/config/mkbind.inc - -test:: all - @cp pkgIndex.tcl .libs - -$(LIBTOOL_EXE) $(TCLBIN) hello.tcl - -$(LIBTOOL_EXE) $(TCLBIN) image.tcl - -$(LIBTOOL_EXE) $(TCLBIN) pdfclock.tcl - -$(LIBTOOL_EXE) $(TCLBIN) chartab.tcl - -$(LIBTOOL_EXE) $(TCLBIN) invoice.tcl - -$(LIBTOOL_EXE) $(TCLBIN) businesscard.tcl - -$(LIBTOOL_EXE) $(TCLBIN) quickreference.tcl - -smoke:: test - -install:: $(LIBNAME) - if test ! -d $(LANG_LIBDIR) ; then \ - mkdir -p $(LANG_LIBDIR); \ - chmod 755 $(LANG_LIBDIR); \ - fi - $(INSTALL_DATA) pkgIndex.tcl $(LANG_LIBDIR) - @-if test -f .libs/libpdflib_tcl.dylib; then \ - $(INSTALL_DATA) .libs/pdflib_tcl.dylib $(LANG_LIBDIR); \ - else \ - $(LIBTOOL) --mode=install $(INSTALL_DATA) \ - $(LIBNAME) $(LANG_LIBDIR); \ - fi - -uninstall:: - @-if test -f .libs/libpdflib_tcl.dylib; then \ - $(LIBTOOL) --mode=uninstall $(RM) \ - $(LANG_LIBDIR)/pdflib_tcl.dylib \ - $(LANG_LIBDIR)/pkgIndex.tcl; \ - else \ - $(LIBTOOL) --mode=uninstall $(RM) \ - $(LANG_LIBDIR)/$(LIBNAME) \ - $(LANG_LIBDIR)/pkgIndex.tcl; \ - fi - $(RM) $(LANG_LIBDIR) - -clean:: - $(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf - $(RM) businesscard.pdf quickreference.pdf - - -# Automatically generated dependencies diff --git a/src/libs/pdflib/bind/pdflib/tcl/Tcl.dsp b/src/libs/pdflib/bind/pdflib/tcl/Tcl.dsp deleted file mode 100644 index 7e9cc006cf..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/Tcl.dsp +++ /dev/null @@ -1,109 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Tcl" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=Tcl - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Tcl.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Tcl.mak" CFG="Tcl - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Tcl - Win32 Release mtDLL" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "Tcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Tcl - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "..\..\..\libs\pdflib" /I "c:\programme\tcl\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "..\..\..\libs\pdflib" /I "c:\programme\tcl\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib /nologo /base:"0x55350000" /dll /pdb:none /machine:I386 /out:"pdflib_tcl.dll" /libpath:"c:\programme\tcl\lib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub84.lib pdflib.lib /nologo /base:"0x55350000" /dll /pdb:none /machine:I386 /out:"pdflib_tcl.dll" /libpath:"..\..\..\libs\pdflib\Release_mtDLL" /libpath:"c:\programme\tcl\lib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "Tcl - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Tcl___Win32_Release" -# PROP BASE Intermediate_Dir "Tcl___Win32_Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /O2 /I "..\..\..\libs\pdflib" /I "c:\programme\tcl\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "..\..\..\libs\pdflib" /I "c:\programme\tcl\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /x -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub84.lib pdflib.lib /nologo /base:"0x55350000" /dll /pdb:none /machine:I386 /out:"pdflib_tcl.dll" /libpath:"..\..\..\libs\pdflib\Release_mtDLL" /libpath:"c:\programme\tcl\lib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub84.lib pdflib.lib /nologo /base:"0x55350000" /dll /pdb:none /machine:I386 /out:"pdflib_tcl.dll" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"c:\programme\tcl\lib" -# SUBTRACT LINK32 /debug - -!ENDIF - -# Begin Target - -# Name "Tcl - Win32 Release mtDLL" -# Name "Tcl - Win32 Release" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=pdflib_tcl.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/tcl/businesscard.tcl b/src/libs/pdflib/bind/pdflib/tcl/businesscard.tcl deleted file mode 100644 index 730cda8599..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/businesscard.tcl +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# $Id: businesscard.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: block processing example in tcl -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -set infile "boilerplate.pdf" - -global blockName blockValue - -proc block_add {id name value} { - global blockName blockValue - set blockName($id) $name - set blockValue($id) $value -} - -block_add 0 "name" "Victor Kraxi" -block_add 1 "business.title" "Chief Paper Officer" -block_add 2 "business.address.line1" "17, Aviation Road" -block_add 3 "business.address.city" "Paperfield" -block_add 4 "business.telephone.voice" "phone +1 234 567-89" -block_add 5 "business.telephone.fax" "fax +1 234 567-98" -block_add 6 "business.email" "victor@kraxi.com" -block_add 7 "business.homepage" "www.kraxi.com" - -set BLOCKCOUNT 8 - -set p [PDF_new] - -# This is where font/image/PDF input files live. Adjust as necessary. -# -# Note that this directory must also contain the LuciduxSans font outline -# and metrics files. -# -PDF_set_parameter $p "SearchPath" "../data" - -if {[PDF_open_file $p "businesscard.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -PDF_set_info $p "Creator" "businesscard.tcl" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "PDFlib block processing sample (Tcl)" - -set blockcontainer [PDF_open_pdi $p $infile "" 0] -if {$blockcontainer == -1} { - puts stderr "Error: % [PDF_get_errmsg $p]" - exit -} - -set page [PDF_open_pdi_page $p $blockcontainer 1 ""] -if {$page == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -# dummy page size -PDF_begin_page $p 20 20 - -# This will adjust the page size to the block container's size. -PDF_fit_pdi_page $p $page 0 0 "adjustpage" - -# Fill all text blocks with dynamic data -for { set i 0} {$i < $BLOCKCOUNT} {set i [expr $i + 1]} { - if {[PDF_fill_textblock $p $page $blockName($i) $blockValue($i) \ - "embedding encoding=winansi"] == -1} { - puts stderr "Warning: [PDF_get_errmsg $p]" - } -} - -# close page -PDF_end_page $p -PDF_close_pdi_page $p $page - -# close PDF document -PDF_close $p -PDF_close_pdi $p $blockcontainer - -# delete the PDFlib object -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/chartab.tcl b/src/libs/pdflib/bind/pdflib/tcl/chartab.tcl deleted file mode 100644 index 71d7008be7..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/chartab.tcl +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -# $Id: chartab.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: character table example in Tcl -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -# Adjust as you need. -set fontname "LuciduxSans-Oblique" -set searchpath "../data" -set encnames "iso8859-1 iso8859-2 iso8859-15" -set embedflag "embedding" -set embednote "embedded" -set fontsize 16 -set top 700 -set left 50 -set xincr [expr {2 * $fontsize}] -set yincr [expr {2 * $fontsize}] - -# create a new PDFlib object -set p [PDF_new] - -# open new PDF file -if {[PDF_open_file $p "chartab.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -if { [catch { - - PDF_set_info $p "Creator" "chartab.tcl" - PDF_set_info $p "Author" "Thomas Merz" - PDF_set_info $p "Title" "Character table (Tcl)" - - PDF_set_parameter $p "openaction" "fitpage" - PDF_set_parameter $p "fontwarning" "true" - PDF_set_parameter $p "SearchPath" $searchpath - - foreach encoding $encnames { - - # start a new page - PDF_begin_page $p 595 842 - - set font [PDF_load_font $p "Helvetica" "winansi" ""] - PDF_setfont $p $font $fontsize - - # title and bookmark - set text "$fontname ($encoding) $embednote" - PDF_show_xy $p $text [expr {$left - $xincr}] [expr {$top + 3 * $yincr}] - PDF_add_bookmark $p $text 0 0 - - # print the row and column captions - PDF_setfont $p $font [expr {2 * $fontsize / 3}] - - # character code labels - for {set row 0} {$row < 16} {incr row} { - - set text [format "x%X" $row] - PDF_show_xy $p $text \ - [expr {$left + $row * $xincr}] [expr {$top + $yincr}] - - set text [format "%Xx" $row] - PDF_show_xy $p $text \ - [expr {$left - $xincr}] [expr {$top - $row * $yincr}] - } - - # print the character table - set font [PDF_load_font $p $fontname $encoding $embedflag] - PDF_setfont $p $font $fontsize - - set x $left - set y $top - for {set row 0} {$row < 16} {incr row} { - for {set col 0} {$col < 16} {incr col} { - set text [format "%c" [expr {int(16*$row + $col)}]] - PDF_show_xy $p $text $x $y - incr x $xincr - } - set x $left - incr y -$yincr - } - - PDF_end_page $p - } - - # close PDF document - PDF_close $p - -} result] } { - puts stderr "$result" -} - -# delete the PDFlib object -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/hello.tcl b/src/libs/pdflib/bind/pdflib/tcl/hello.tcl deleted file mode 100644 index 767d07f441..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/hello.tcl +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -# $Id: hello.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: hello example in Tcl -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -# create a new PDFlib object -set p [PDF_new] - -# open new PDF file -if {[PDF_open_file $p "hello.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -PDF_set_info $p "Creator" "hello.tcl" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "Hello world (Tcl)" - -# start a new page -PDF_begin_page $p 595 842 - -set font [PDF_load_font $p "Helvetica-Bold" "winansi" ""] - -PDF_setfont $p $font 24.0 -PDF_set_text_pos $p 50 700 -PDF_show $p "Hello world!" -PDF_continue_text $p "(says Tcl)" -# close page -PDF_end_page $p - -# close PDF document -PDF_close $p - -# delete the PDFlib object -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/image.tcl b/src/libs/pdflib/bind/pdflib/tcl/image.tcl deleted file mode 100644 index 0de2eacb67..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/image.tcl +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# $Id: image.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: image example in Tcl -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -set p [PDF_new] -set imagefile "nesrin.jpg" - -# This is where font/image/PDF input files live. Adjust as necessary. -set searchpath "../data" - -if {[PDF_open_file $p "image.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -PDF_set_parameter $p "SearchPath" $searchpath - -PDF_set_info $p "Creator" "image.tcl" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "image sample (Tcl)" - -set image [PDF_load_image $p "auto" $imagefile ""] - -if {$image == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -# We generate a page with arbitrary dimensions -PDF_begin_page $p 10 10 -PDF_fit_image $p $image 0 0 "adjustpage" -PDF_close_image $p $image -PDF_end_page $p - -PDF_close $p - -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/invoice.tcl b/src/libs/pdflib/bind/pdflib/tcl/invoice.tcl deleted file mode 100644 index 0db36d5383..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/invoice.tcl +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/sh -# $Id: invoice.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: invoice generation demo -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -set infile "stationery.pdf" -set searchpath "../data" -set col1 55.0 -set col2 100.0 -set col3 330.0 -set col4 430.0 -set col5 530.0 -set fontsize 12.0 -set pagewidth 595.0 -set pageheight 842.0 - -set closingtext \ -"30 days warranty starting at the day of sale. \ -This warranty covers defects in workmanship only. \ -Kraxi Systems, Inc. will, at its option, repair or replace the \ -product under the warranty. This warranty is not transferable. \ -No returns or exchanges will be accepted for wet products." - -global articleName articlePrice articleQuantity - -proc article_add {id name price quantity} { - global articleName articlePrice articleQuantity - set articleName($id) $name - set articlePrice($id) $price - set articleQuantity($id) $quantity -} - -article_add 0 "Super Kite" 20 2 -article_add 1 "Turbo Flyer" 40 5 -article_add 2 "Giga Trash" 180 1 -article_add 3 "Bare Bone Kit" 50 3 -article_add 4 "Nitty Gritty" 20 10 -article_add 5 "Pretty Dark Flyer" 75 1 -article_add 6 "Free Gift" 0 1 - -set ARTICLECOUNT 7 - -# create a new PDFlib object -set p [PDF_new] - -# open new PDF file -if {[PDF_open_file $p "invoice.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -PDF_set_parameter $p "SearchPath" $searchpath - -PDF_set_info $p "Creator" "invoice.c" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "PDFlib invoice generation demo (TCL)" - -set form [PDF_open_pdi $p $infile "" 0] -if {$form == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -set page [PDF_open_pdi_page $p $form 1 ""] -if {$page == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -set boldfont [PDF_load_font $p "Helvetica-Bold" "winansi" ""] -set regularfont [PDF_load_font $p "Helvetica" "winansi" ""] -set leading [expr $fontsize + 2] - -# Establish coordinates with the origin in the upper left corner. -PDF_set_parameter $p "topdown" "true" - -# A4 page -PDF_begin_page $p $pagewidth $pageheight - -PDF_fit_pdi_page $p $page 0 $pageheight "" -PDF_close_pdi_page $p $page - -PDF_setfont $p $regularfont $fontsize - -# Print the address -set y 170 -PDF_set_value $p "leading" $leading - -PDF_show_xy $p "John Q. Doe" $col1 $y -PDF_continue_text $p "255 Customer Lane" -PDF_continue_text $p "Suite B" -PDF_continue_text $p "12345 User Town" -PDF_continue_text $p "Everland" - -# Print the header and date - -PDF_setfont $p $boldfont $fontsize -set y 300 -PDF_show_xy $p "INVOICE" $col1 $y - -set buf [clock format [clock seconds] -format "%B %d, %Y"] -PDF_fit_textline $p $buf $col5 $y "position {100 0}" - -# Print the invoice header line -PDF_setfont $p $boldfont $fontsize - -# "position {0 0}" is left-aligned, "position {100 0}" right-aligned -set y 370 -PDF_fit_textline $p "ITEM" $col1 $y "position {0 0}" -PDF_fit_textline $p "DESCRIPTION" $col2 $y "position {0 0}" -PDF_fit_textline $p "QUANTITY" $col3 $y "position {100 0}" -PDF_fit_textline $p "PRICE" $col4 $y "position {100 0}" -PDF_fit_textline $p "AMOUNT" $col5 $y "position {100 0}" - -# Print the article list - -PDF_setfont $p $regularfont $fontsize -set y [expr $y + 2*$leading] -set total 0 - -for {set i 0} {$i < $ARTICLECOUNT} {set i [expr $i + 1]} { - PDF_show_xy $p [expr $i + 1] $col1 $y - - PDF_show_xy $p $articleName($i) $col2 $y - - PDF_fit_textline $p $articleName($i) $col3 $y "position {100 0}" - - set buf [format "%.2f" $articlePrice($i)] - PDF_fit_textline $p $buf $col4 $y "position {100 0}" - - set sum [ expr $articlePrice($i) * $articleQuantity($i)] - set buf [format "%.2f" $sum] - PDF_fit_textline $p $buf $col5 $y "position {100 0}" - - set y [expr $y + $leading] - set total [expr $total + $sum] -} - -set y [expr $y + $leading] -PDF_setfont $p $boldfont $fontsize -set buf [format "%.2f" $total] -PDF_fit_textline $p $buf $col5 $y "position {100 0}" - -# Print the closing text - -set y [expr $y + 5*$leading] -PDF_setfont $p $regularfont $fontsize -PDF_set_value $p "leading" $leading -PDF_show_boxed $p $closingtext \ - $col1 [expr $y + 4*$leading] [expr $col5-$col1] [expr 4*$leading]\ - "justify" "" - -PDF_end_page $p -PDF_close $p -PDF_close_pdi $p $form - -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/pdfclock.tcl b/src/libs/pdflib/bind/pdflib/tcl/pdfclock.tcl deleted file mode 100644 index 4c89bf8927..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/pdfclock.tcl +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/sh -# $Id: pdfclock.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib client: pdfclock example in Tcl -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -set RADIUS 200.0 -set MARGIN 20.0 - -set p [PDF_new] - -if {[PDF_open_file $p "pdfclock.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" -} - - -PDF_set_info $p "Creator" "pdfclock.tcl" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "PDF clock (Tcl)" - -PDF_begin_page $p [expr 2 * ($RADIUS + $MARGIN)] [expr 2 * ($RADIUS + $MARGIN)] - -PDF_translate $p [expr $RADIUS + $MARGIN] [expr $RADIUS + $MARGIN] -PDF_setcolor $p "fillstroke" "rgb" 0.0 0.0 1.0 0.0 -PDF_save $p - -# minute strokes -PDF_setlinewidth $p 2.0 -for {set alpha 0} {$alpha < 360} {set alpha [expr $alpha + 6]} { - PDF_rotate $p 6.0 - PDF_moveto $p $RADIUS 0.0 - PDF_lineto $p [expr $RADIUS-$MARGIN/3] 0.0 - PDF_stroke $p -} - -PDF_restore $p -PDF_save $p - -# 5 minute strokes -PDF_setlinewidth $p 3.0 -for {set alpha 0} {$alpha < 360} {set alpha [expr $alpha + 30]} { - PDF_rotate $p 30.0 - PDF_moveto $p $RADIUS 0.0 - PDF_lineto $p [expr $RADIUS-$MARGIN] 0.0 - PDF_stroke $p -} - -set tm_hour [ clock format [clock seconds] -format "%I" ] -set tm_min [ clock format [clock seconds] -format "%M" ] -set tm_sec [ clock format [clock seconds] -format "%S" ] - -# This is a Tcl-itis: when the clock returns "08" seconds, tm_sec -# won't be recognized as an integer. Therefore we "cast" it to integer. -# Note that this doesn't happen with, for example, the value "07" -# because this is a valid octal number... - -scan $tm_hour %d tm_hour -scan $tm_min %d tm_min -scan $tm_sec %d tm_sec - -# draw hour hand -PDF_save $p -PDF_rotate $p [expr -(($tm_min/60.0) + $tm_hour - 3.0) * 30.0] -PDF_moveto $p [expr -$RADIUS/10] [expr -$RADIUS/20] -PDF_lineto $p [expr $RADIUS/2] 0.0 -PDF_lineto $p [expr -$RADIUS/10] [expr $RADIUS/20] -PDF_closepath $p -PDF_fill $p -PDF_restore $p - -# draw minute hand -PDF_save $p -PDF_rotate $p [expr -(($tm_sec/60.0) + $tm_min - 15.0) * 6.0] -PDF_moveto $p [expr -$RADIUS/10] [expr -$RADIUS/20] -PDF_lineto $p [expr $RADIUS * 0.8] 0.0 -PDF_lineto $p [expr -$RADIUS/10] [expr $RADIUS/20] -PDF_closepath $p -PDF_fill $p -PDF_restore $p - -# draw second hand -PDF_setcolor $p "fillstroke" "rgb" 1.0 0.0 0.0 0.0 -PDF_setlinewidth $p 2 -PDF_save $p -PDF_rotate $p [expr -(($tm_sec - 15.0) * 6.0)] -PDF_moveto $p [expr -$RADIUS/5] 0.0 -PDF_lineto $p $RADIUS 0.0 -PDF_stroke $p -PDF_restore $p - -# draw little circle at center -PDF_circle $p 0 0 [expr $RADIUS/30] -PDF_fill $p - -PDF_restore $p - -PDF_end_page $p -PDF_close $p - -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/pdflib_tcl.c b/src/libs/pdflib/bind/pdflib/tcl/pdflib_tcl.c deleted file mode 100644 index 61a6f217ae..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/pdflib_tcl.c +++ /dev/null @@ -1,4333 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib_tcl.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * in sync with pdflib.h 1.151.2.22 - * - * Wrapper code for the PDFlib Tcl binding - * - */ - -/* - * Build with STUBS enabled - * - * if building with older TCL Versions than 8.2 you have to undef this - */ -#define USE_TCL_STUBS - -#include - -#include -#include - -#if defined(__WIN32__) -# define WIN32_LEAN_AND_MEAN -# include -# undef WIN32_LEAN_AND_MEAN - -# if defined(__WIN32__) && \ - (defined(_MSC_VER) || (defined(__GNUC__) && defined(__declspec))) -# define SWIGEXPORT(a,b) __declspec(dllexport) a b -# else -# if defined(__BORLANDC__) -# define SWIGEXPORT(a,b) a _export b -# else -# define SWIGEXPORT(a,b) a b -# endif -# endif -#else -# define SWIGEXPORT(a,b) a b -#endif - -#include - -#ifdef SWIG_GLOBAL -#ifdef __cplusplus -#define SWIGSTATIC extern "C" -#else -#define SWIGSTATIC -#endif -#endif - -#ifndef SWIGSTATIC -#define SWIGSTATIC static -#endif - -/* SWIG pointer structure */ - -typedef struct SwigPtrType { - char *name; /* Datatype name */ - int len; /* Length (used for optimization) */ - void *(*cast)(void *); /* Pointer casting function */ - struct SwigPtrType *next; /* Linked list pointer */ -} SwigPtrType; - -/* Pointer cache structure */ - -typedef struct { - int stat; /* Status (valid) bit */ - SwigPtrType *tp; /* Pointer to type structure */ - char name[256]; /* Given datatype name */ - char mapped[256]; /* Equivalent name */ -} SwigCacheType; - -/* Some variables */ - -static int SwigPtrMax = 64; /* Max entries that can be currently held */ - /* This value may be adjusted dynamically */ -static int SwigPtrN = 0; /* Current number of entries */ -static int SwigPtrSort = 0; /* Status flag indicating sort */ -static int SwigStart[256]; /* Starting positions of types */ - -/* Pointer table */ -static SwigPtrType *SwigPtrTable = 0; /* Table containing pointer equivalences */ - -/* Cached values */ - -#define SWIG_CACHESIZE 8 -#define SWIG_CACHEMASK 0x7 -static SwigCacheType SwigCache[SWIG_CACHESIZE]; -static int SwigCacheIndex = 0; -static int SwigLastCache = 0; - -/* Sort comparison function */ -static int swigsort(const void *data1, const void *data2) { - SwigPtrType *d1 = (SwigPtrType *) data1; - SwigPtrType *d2 = (SwigPtrType *) data2; - return strcmp(d1->name,d2->name); -} - -/* Binary Search function */ -static int swigcmp(const void *key, const void *data) { - char *k = (char *) key; - SwigPtrType *d = (SwigPtrType *) data; - return strncmp(k,d->name,d->len); -} - -/* Register a new datatype with the type-checker */ - -SWIGSTATIC -void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) { - - int i; - SwigPtrType *t = 0,*t1; - - /* Allocate the pointer table if necessary */ - - if (!SwigPtrTable) { - SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType)); - SwigPtrN = 0; - } - /* Grow the table */ - if (SwigPtrN >= SwigPtrMax) { - SwigPtrMax = 2*SwigPtrMax; - SwigPtrTable = (SwigPtrType *) realloc((char *) SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType)); - } - for (i = 0; i < SwigPtrN; i++) - if (strcmp(SwigPtrTable[i].name,origtype) == 0) { - t = &SwigPtrTable[i]; - break; - } - if (!t) { - t = &SwigPtrTable[SwigPtrN]; - t->name = origtype; - t->len = strlen(t->name); - t->cast = 0; - t->next = 0; - SwigPtrN++; - } - - /* Check for existing entry */ - - while (t->next) { - if ((strcmp(t->name,newtype) == 0)) { - if (cast) t->cast = cast; - return; - } - t = t->next; - } - - /* Now place entry (in sorted order) */ - - t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType)); - t1->name = newtype; - t1->len = strlen(t1->name); - t1->cast = cast; - t1->next = 0; - t->next = t1; - SwigPtrSort = 0; -} - -/* Make a pointer value string */ - -SWIGSTATIC -void SWIG_MakePtr(char *_c, const void *_ptr, char *type) { - static char _hex[16] = - {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f'}; - unsigned long _p, _s; - char _result[20], *_r; /* Note : a 64-bit hex number = 16 digits */ - _r = _result; - _p = (unsigned long) _ptr; - if (_p > 0) { - while (_p > 0) { - _s = _p & 0xf; - *(_r++) = _hex[_s]; - _p = _p >> 4; - } - *_r = '_'; - while (_r >= _result) - *(_c++) = *(_r--); - } else { - strcpy (_c, "NULL"); - } - if (_ptr) - strcpy (_c, type); -} - -/* Function for getting a pointer value */ - -SWIGSTATIC -char *SWIG_GetPtr(char *_c, void **ptr, char *_t) -{ - unsigned long _p; - char temp_type[256]; - char *name; - int i, len; - SwigPtrType *sp,*tp; - SwigCacheType *cache; - int start, end; - _p = 0; - - /* Pointer values must start with leading underscore */ - if (*_c == '_') { - _c++; - /* Extract hex value from pointer */ - while (*_c) { - if ((*_c >= '0') && (*_c <= '9')) - _p = (_p << 4) + (*_c - '0'); - else if ((*_c >= 'a') && (*_c <= 'f')) - _p = (_p << 4) + ((*_c - 'a') + 10); - else - break; - _c++; - } - - if (_t) { - if (strcmp(_t,_c)) { - if (!SwigPtrSort) { - qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); - for (i = 0; i < 256; i++) { - SwigStart[i] = SwigPtrN; - } - for (i = SwigPtrN-1; i >= 0; i--) { - SwigStart[(int) (SwigPtrTable[i].name[1])] = i; - } - for (i = 255; i >= 1; i--) { - if (SwigStart[i-1] > SwigStart[i]) - SwigStart[i-1] = SwigStart[i]; - } - SwigPtrSort = 1; - for (i = 0; i < SWIG_CACHESIZE; i++) - SwigCache[i].stat = 0; - } - - /* First check cache for matches. Uses last cache value as starting point */ - cache = &SwigCache[SwigLastCache]; - for (i = 0; i < SWIG_CACHESIZE; i++) { - if (cache->stat) { - if (strcmp(_t,cache->name) == 0) { - if (strcmp(_c,cache->mapped) == 0) { - cache->stat++; - *ptr = (void *) _p; - if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr); - return (char *) 0; - } - } - } - SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK; - if (!SwigLastCache) cache = SwigCache; - else cache++; - } - /* We have a type mismatch. Will have to look through our type - mapping table to figure out whether or not we can accept this datatype */ - - start = SwigStart[(int) _t[1]]; - end = SwigStart[(int) _t[1]+1]; - sp = &SwigPtrTable[start]; - while (start < end) { - if (swigcmp(_t,sp) == 0) break; - sp++; - start++; - } - if (start >= end) sp = 0; - /* Try to find a match for this */ - if (sp) { - while (swigcmp(_t,sp) == 0) { - name = sp->name; - len = sp->len; - tp = sp->next; - /* Try to find entry for our given datatype */ - while(tp) { - if (tp->len >= 255) { - return _c; - } - strcpy(temp_type,tp->name); - strncat(temp_type,_t+len,255-tp->len); - if (strcmp(_c,temp_type) == 0) { - - strcpy(SwigCache[SwigCacheIndex].mapped,_c); - strcpy(SwigCache[SwigCacheIndex].name,_t); - SwigCache[SwigCacheIndex].stat = 1; - SwigCache[SwigCacheIndex].tp = tp; - SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK; - - /* Get pointer value */ - *ptr = (void *) _p; - if (tp->cast) *ptr = (*(tp->cast))(*ptr); - return (char *) 0; - } - tp = tp->next; - } - sp++; - /* Hmmm. Didn't find it this time */ - } - } - /* Didn't find any sort of match for this data. - Get the pointer value and return the received type */ - *ptr = (void *) _p; - return _c; - } else { - /* Found a match on the first try. Return pointer value */ - *ptr = (void *) _p; - return (char *) 0; - } - } else { - /* No type specified. Good luck */ - *ptr = (void *) _p; - return (char *) 0; - } - } else { - if (strcmp (_c, "NULL") == 0) { - *ptr = (void *) 0; - return (char *) 0; - } - *ptr = (void *) 0; - return _c; - } -} - -#ifdef __cplusplus -extern "C" { -#endif -#ifdef MAC_TCL -#pragma export on -#endif -SWIGEXPORT(int,Pdflib_Init)(Tcl_Interp *); -SWIGEXPORT(int,Pdflib_SafeInit)(Tcl_Interp *); -SWIGEXPORT(int,Pdflib_tcl_SafeInit)(Tcl_Interp *); -SWIGEXPORT(int,Pdflib_tcl_Init)(Tcl_Interp *); -SWIGEXPORT(int,Pdf_tcl_Init)(Tcl_Interp *); -SWIGEXPORT(int,Pdf_tcl_SafeInit)(Tcl_Interp *); -#ifdef MAC_TCL -#pragma export off -#endif -#ifdef __cplusplus -} -#endif - -#include - -#include "pdflib.h" - -/* Exception handling */ - -#define try PDF_TRY(p) -#define catch PDF_CATCH(p) {\ - char errmsg[1024];\ - sprintf(errmsg, "PDFlib Error [%d] %s: %s", PDF_get_errnum(p),\ - PDF_get_apiname(p), PDF_get_errmsg(p));\ - Tcl_SetResult(interp, errmsg, TCL_STATIC);\ - return TCL_ERROR; \ - } - -/* Unicode support is only available in Tcl 8.2 and higher */ - -#if 10 * TCL_MAJOR_VERSION + TCL_MINOR_VERSION >= 82 - -/* - * Unicode strings for page description text and hyper text strings - */ - -static char * -GetStringUnicodePDFChars(PDF *p, Tcl_Interp *interp, Tcl_Obj *objPtr, int *lenP) -{ - Tcl_UniChar *unistring = NULL; - size_t len = 0; - - if (objPtr) { - unistring = Tcl_GetUnicode(objPtr); - if (unistring) { - len = (size_t) Tcl_UniCharLen(unistring); - } - } - - *lenP = (int) (2 * len); - return (char *) unistring; -} - - -#else /* Tcl version older than 8.2 */ - -/* The cheap version doesn't know about Unicode strings */ - -#define GetStringUnicodePDFChars(p, interp, objPtr, lenP) \ - Tcl_GetStringFromObj(objPtr, NULL) - -#endif /* Tcl version older than 8.2 */ - -/* export the PDFlib routines to the shared library */ -#ifdef __MWERKS__ -#pragma export on -#endif - -/* p_annots.c */ - -static int -_wrap_PDF_add_launchlink(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char *_arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_launchlink p llx lly urx ury filename ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_launchlink. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = argv[6]; - - try { PDF_add_launchlink(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_add_locallink(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int _arg5; - char *_arg6; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_locallink p llx lly urx ury page optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_locallink. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - if (Tcl_GetInt(interp, argv[6], &_arg5) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 6 of PDF_add_locallink.", TCL_STATIC); - return TCL_ERROR; - } - _arg6 = argv[7]; - - try { PDF_add_locallink(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_add_note(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - double llx; - double lly; - double urx; - double ury; - char *contents; - char *title; - char *icon; - int open; - char *res; - int len_cont; - int len_title; - - if (objc != 10) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_note p llx lly urx ury contents title icon open ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_note. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[2], &llx) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve llx in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[3], &lly) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve lly in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[4], &urx) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve urx in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[5], &ury) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve ury in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((contents = GetStringUnicodePDFChars(p, interp, objv[6], &len_cont)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve contents argument in PDF_add_note", TCL_STATIC); - return TCL_ERROR; - } - - if ((title = GetStringUnicodePDFChars(p, interp, objv[7], &len_title)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve title argument in PDF_add_note", TCL_STATIC); - return TCL_ERROR; - } - - if ((icon = Tcl_GetStringFromObj(objv[8], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve icon in PDF_add_note", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetIntFromObj(interp, objv[9], &open) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve open argument in PDF_add_note", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_add_note2(p, (float) llx, (float) lly, (float) urx, - (float) ury,contents,len_cont,title,len_title,icon,open); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_add_pdflink(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char *_arg5; - int _arg6; - char *_arg7; - - if (argc != 9) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_pdflink p llx lly urx ury filename page optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_pdflink. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = argv[6]; - if (Tcl_GetInt(interp, argv[7], &_arg6) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 7 of PDF_add_pdflink.", TCL_STATIC); - return TCL_ERROR; - } - _arg7 = argv[8]; - - try { PDF_add_pdflink(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_add_weblink(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - char *_arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_weblink p llx lly urx ury url ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_weblink. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = argv[6]; - - try { PDF_add_weblink(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_attach_file(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - double llx; - double lly; - double urx; - double ury; - char *filename; - char *description; - char *author; - char *mimetype; - char *icon; - char *res; - int len_descr; - int len_autho; - - if (objc != 11) { - Tcl_SetResult(interp, "Wrong # args. PDF_attach_file p llx lly urx ury filename description author mimetype icon ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res,(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_attach_file. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[2], &llx) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve llx in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[3], &lly) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve lly in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[4], &urx) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve urx in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[5], &ury) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve ury in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((filename = Tcl_GetStringFromObj(objv[6], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve filename in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((description = GetStringUnicodePDFChars(p, interp, objv[7], &len_descr)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve description argument in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((author = GetStringUnicodePDFChars(p, interp, objv[8], &len_autho)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve author argument in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((mimetype = Tcl_GetStringFromObj(objv[9], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve mimetype in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - if ((icon = Tcl_GetStringFromObj(objv[10], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve icon in PDF_attach_file", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_attach_file2(p, (float) llx, (float) lly, - (float) urx, (float) ury,filename,0,description,len_descr, - author,len_autho,mimetype,icon); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_set_border_color(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_border_color p red green blue ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_border_color. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - - try { PDF_set_border_color(p,_arg1,_arg2,_arg3); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_set_border_dash(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_border_dash p b w ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_border_dash. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_set_border_dash(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_set_border_style(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *_arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_border_style p style width ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_border_style. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - _arg2 = (float) atof(argv[3]); - - try { PDF_set_border_style(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -/* p_basic.c */ - -static int -_wrap_PDF_begin_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_begin_page p width height ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_begin_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_begin_page(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_close(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_close p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_close. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_close(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_delete(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_delete p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_delete. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - PDF_delete(p); - - return TCL_OK; -} - -static int -_wrap_PDF_end_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_end_page p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_end_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_end_page(p); - } catch; - - return TCL_OK; -} - -static int _wrap_PDF_get_apiname(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - char volatile *_result = NULL; - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_apiname p",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_apiname. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { - _result = (char *)PDF_get_apiname(p); - Tcl_SetResult(interp, (char *) _result, TCL_VOLATILE); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_get_buffer(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - - const char volatile *buffer = NULL; - PDF *p; - Tcl_Obj *result; - char *res; - long size; - - if (objc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_buffer p", TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_get_buffer. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - try { - buffer = PDF_get_buffer(p, &size); - result = Tcl_GetObjResult(interp); - -/* ByteArrays appeared only in Tcl 8.1 */ -#if 10 * TCL_MAJOR_VERSION + TCL_MINOR_VERSION >= 81 - Tcl_SetByteArrayObj(result, (unsigned char *) buffer, (int) size); -#else /* Tcl 8.0 */ - Tcl_SetStringObj(result, (char *) buffer, (int) size); -#endif /* Tcl 8.0 */ - - } catch; - - return TCL_OK; -} - -static int _wrap_PDF_get_errmsg(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - char volatile *_result = NULL; - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_errmsg p",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_errmsg. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { - _result = (char *)PDF_get_errmsg(p); - Tcl_SetResult(interp, (char *) _result, TCL_VOLATILE); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_get_errnum(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_errnum p",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_errnum. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - try { - _result = (int)PDF_get_errnum(p); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_new(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char versionbuf[32]; - - if (argc != 1) { - Tcl_SetResult(interp, "Wrong # args. PDF_new ",TCL_STATIC); - return TCL_ERROR; - } - - p = (PDF *)PDF_new(); - - if (p) { - -/* The GetVersion API appeared in Tcl 8.1 */ -#if 10 * TCL_MAJOR_VERSION + TCL_MINOR_VERSION >= 81 - int major, minor, type, patchlevel; - Tcl_GetVersion(&major, &minor, &patchlevel, &type); - sprintf(versionbuf, "Tcl %d.%d%c%d", major, minor, "ab."[type], patchlevel); -#else -#ifdef TCL_PATCH_LEVEL - sprintf(versionbuf, "Tcl %s", TCL_PATCH_LEVEL); -#else - sprintf(versionbuf, "Tcl (unknown)"); -#endif -#endif - PDF_set_parameter(p, "binding", versionbuf); - PDF_set_parameter(p, "textformat", "auto2"); - PDF_set_parameter(p, "hypertextformat", "auto2"); - PDF_set_parameter(p, "hypertextencoding", ""); - } - /* TODO: else show some error */ - - SWIG_MakePtr(interp->result, (void *) p,"_PDF_p"); - return TCL_OK; -} - -static int -_wrap_PDF_open_file(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_file p filename ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_file. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - - try { _result = (int)PDF_open_file(p,_arg1); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -/* p_block.c */ - -static int -_wrap_PDF_fill_imageblock(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - int len = 0; - int page; - char *blockname; - int image; - char *optlist; - int error; - - if (objc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fill_imageblock p page blockname image optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_fill_imageblock. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[2], &page)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve page argument in PDF_fill_imageblock", TCL_STATIC); - return TCL_ERROR; - } - - if ((blockname = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve blockname argument in PDF_fill_imageblock", TCL_STATIC); - return TCL_ERROR; - } - if ((error = Tcl_GetIntFromObj(interp, objv[4], &image)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve image argument in PDF_fill_imageblock", TCL_STATIC); - return TCL_ERROR; - } - - if ((optlist = Tcl_GetStringFromObj(objv[5], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_fill_imageblock", TCL_STATIC); - return TCL_ERROR; - } - - - try { - _result = (int)PDF_fill_imageblock(p, page, blockname, image, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_fill_pdfblock(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - int len = 0; - int page; - char * blockname; - int contents; - char * optlist; - int error; - - if (objc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fill_pdfblock p page blockname contents optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_fill_pdfblock. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[2], &page)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve page argument in PDF_fill_pdfblock", TCL_STATIC); - return TCL_ERROR; - } - - if ((blockname = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve blockname argument in PDF_fill_pdfblock", TCL_STATIC); - return TCL_ERROR; - } - if ((error = Tcl_GetIntFromObj(interp, objv[4], &contents)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve contents argument in PDF_fill_pdfblock", TCL_STATIC); - return TCL_ERROR; - } - - if ((optlist = Tcl_GetStringFromObj(objv[5], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_fill_pdfblock", TCL_STATIC); - return TCL_ERROR; - } - - - try { - _result = (int)PDF_fill_pdfblock(p, page, blockname, contents, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_fill_textblock(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - int len = 0; - int page; - char * blockname; - char *text; - int text_len = 0; - char * optlist; - int error; - - if (objc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fill_textblock p page blockname text optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_fill_textblock. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[2], &page)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve page argument in PDF_fill_textblock", TCL_STATIC); - return TCL_ERROR; - } - - if ((blockname = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve blockname argument in PDF_fill_textblock", TCL_STATIC); - return TCL_ERROR; - } - if ((text = GetStringUnicodePDFChars(p, interp, objv[4], &text_len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_fill_textblock", TCL_STATIC); - return TCL_ERROR; - } - - - if ((optlist = Tcl_GetStringFromObj(objv[5], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_fill_textblock", TCL_STATIC); - return TCL_ERROR; - } - - - try { - _result = (int)PDF_fill_textblock(p, page, blockname, text, text_len, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -/* p_color.c */ - -static int -_wrap_PDF_makespotcolor(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *spotname; - int reserved = 0; - - if (argc != 4 && argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_makespotcolor p spotname",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_makespotcolor. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - spotname = argv[2]; - /* ignore "reserved" argument was a bug in V4 wrapper */ - /* reserved = (int) atol(argv[3]); */ - - try { _result = (int)PDF_makespotcolor(p, spotname, reserved); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_setcolor(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *_arg1; - char *_arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_setcolor p fstype colorspace c1 c2 c3 c4 ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setcolor. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = argv[2]; - _arg2 = argv[3]; - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - _arg6 = (float) atof(argv[7]); - - try { PDF_setcolor(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setgray(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setgray p g ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setgray. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_setcolor(p, "fillstroke", "gray", _arg1, 0, 0, 0); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setgray_fill(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setgray_fill p g ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setgray_fill. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_setcolor(p, "fill", "gray", _arg1, 0, 0, 0); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setgray_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setgray_stroke p g ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setgray_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_setcolor(p, "stroke", "gray", _arg1, 0, 0, 0); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setrgbcolor(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_setrgbcolor p red green blue ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setrgbcolor. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - - try { PDF_setcolor(p, "fillstroke", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setrgbcolor_fill(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_setrgbcolor_fill p red green blue ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setrgbcolor_fill. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - - try { PDF_setcolor(p, "fill", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setrgbcolor_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_setrgbcolor_stroke p red green blue ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setrgbcolor_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - - try { PDF_setcolor(p, "stroke", "rgb", _arg1, _arg2, _arg3, 0); - } catch; - - return TCL_OK; -} - -/* p_draw.c */ - -static int -_wrap_PDF_arc(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_arc p x y r alpha beata ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_arc. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - - try { PDF_arc(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_arcn(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_arcn p x y r alpha beta ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_arcn. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - - try { PDF_arcn(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_circle(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_circle p x y r ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_circle. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - - try { PDF_circle(p,_arg1,_arg2,_arg3); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_clip(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_clip p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_clip. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_clip(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_closepath(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_closepath p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_closepath. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_closepath(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_closepath_fill_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_closepath_fill_stroke p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_closepath_fill_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_closepath_fill_stroke(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_closepath_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_closepath_stroke p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_closepath_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_closepath_stroke(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_curveto(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_curveto p x1 y1 x2 y2 x3 y3 ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_curveto. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - _arg6 = (float) atof(argv[7]); - - try { PDF_curveto(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_endpath(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_endpath p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_endpath. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_endpath(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_fill(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_fill p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_fill. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_fill(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_fill_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_fill_stroke p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_fill_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_fill_stroke(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_lineto(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_lineto p x y ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_lineto. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_lineto(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_moveto(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_moveto p x y ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_moveto. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_moveto(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_rect(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_rect p x y width height ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_rect. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - - try { PDF_rect(p,_arg1,_arg2,_arg3,_arg4); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_stroke(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_stroke p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_stroke. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_stroke(p); - } catch; - - return TCL_OK; -} - -/* p_encoding.c */ - -static int -_wrap_PDF_encoding_set_char(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *encoding; - int slot; - char *glyphname; - int uv; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_encoding_set_char p encoding slot glyphname uv ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_encoding_set_char. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - encoding = argv[2]; - slot = (int) atol(argv[3]); - glyphname = argv[4]; - uv = (int) atol(argv[5]); - - try { PDF_encoding_set_char(p, encoding, slot, glyphname, uv); - } catch; - - return TCL_OK; -} - -/* p_font.c */ - -static int -_wrap_PDF_findfont(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - char *_arg2; - int _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_findfont p fontname encoding embed ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_findfont. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - _arg2 = argv[3]; - - if (Tcl_GetInt(interp, argv[4], &_arg3) != TCL_OK) { - Tcl_SetResult(interp, "Type error in argument 4 of PDF_findfont: ", - TCL_STATIC); - Tcl_AppendResult(interp, argv[4], (char *) NULL); - return TCL_ERROR; - } - - try { _result = (int)PDF_findfont(p,_arg1,_arg2,_arg3); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_load_font(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - int len = 0; - int len1; - char *fontname; - char *encoding; - char *optlist; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_load_font p fontname encoding optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_load_font. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((fontname = GetStringUnicodePDFChars(p, interp, objv[2], &len1)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve fontname argument in PDF_load_font", TCL_STATIC); - return TCL_ERROR; - } - if ((encoding = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve encoding argument in PDF_load_font", TCL_STATIC); - return TCL_ERROR; - } - if ((optlist = Tcl_GetStringFromObj(objv[4], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_load_font", TCL_STATIC); - return TCL_ERROR; - } - - - try { - _result = (int)PDF_load_font(p, fontname, len1, encoding, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_setfont(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_setfont p font fontsize ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setfont. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &_arg1) != TCL_OK) { - Tcl_SetResult(interp, "Type error in argument 2 of PDF_setfont: ", - TCL_STATIC); - Tcl_AppendResult(interp, argv[2], (char *) NULL); - return TCL_ERROR; - } - _arg2 = (float) atof(argv[3]); - - try { PDF_setfont(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -/* p_gstate.c */ - -static int -_wrap_PDF_concat(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - - if (argc != 8) { - Tcl_SetResult(interp, - "Wrong # args. PDF_concat p a b c d e f ", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_concat. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - _arg6 = (float) atof(argv[7]); - - try { PDF_concat(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_initgraphics(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_initgraphics p ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_initgraphics. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_initgraphics(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_restore(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_restore p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_restore. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_restore(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_rotate(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_rotate p phi ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_rotate. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_rotate(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_save(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_save p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_save. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_save(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_scale(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_scale p sx sy ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_scale. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_scale(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setdash(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_setdash p b w ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setdash. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_setdash(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setdashpattern(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *optlist; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setdashpattern p optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setdashpattern. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - optlist = argv[2]; - - try { PDF_setdashpattern(p, optlist); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setflat(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setflat p flatness ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setflat. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - - try { PDF_setflat(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setlinecap(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setlinecap p linecap ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setlinecap. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &_arg1) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 2 of PDF_setlinecap.", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_setlinecap(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setlinejoin(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setlinejoin p linejoin ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setlinejoin. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &_arg1) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 2 of PDF_setlinejoin.", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_setlinejoin(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setlinewidth(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setlinewidth p width ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setlinewidth. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_setlinewidth(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setmatrix(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - float _arg6; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_setmatrix p a b c d e f ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setmatrix. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - _arg6 = (float) atof(argv[7]); - - try { PDF_setmatrix(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setmiterlimit(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_setmiterlimit p miter ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_setmiterlimit. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - - try { PDF_setmiterlimit(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_setpolydash(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - float carray[MAX_DASH_LENGTH]; - double dval; - int length, i; - Tcl_Obj *val; - char *res; - - if (objc != 3) { - Tcl_SetResult(interp, - "Wrong # args. PDF_setpolydash p darray length ", TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_setpolydash. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_ListObjLength(interp, objv[2], &length) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve array length in PDF_setpolydash", TCL_STATIC); - return TCL_ERROR; - } - if (length > MAX_DASH_LENGTH) - length = MAX_DASH_LENGTH; - - for (i = 0; i < length; i++) { - if (Tcl_ListObjIndex(interp, objv[2], i, &val) != TCL_OK || - Tcl_GetDoubleFromObj(interp, val, &dval) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve array value in PDF_setpolydash", TCL_STATIC); - return TCL_ERROR; - } - carray[i] = (float) dval; - } - - try { PDF_setpolydash(p, carray, length); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_skew(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_skew p alpha beta ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_skew. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_skew(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_translate(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_translate p tx ty ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_translate. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_translate(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -/* p_hyper.c */ - -static int -_wrap_PDF_add_bookmark(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - int _arg2; - int _arg3; - char *res; - int error; - int len; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_bookmark p text parent open ", TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer in PDF_add_bookmark", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_bookmark. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_add_bookmark", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[3], &_arg2)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve parent argument in PDF_add_bookmark", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[4], &_arg3)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve open argument in PDF_add_bookmark", TCL_STATIC); - return TCL_ERROR; - } - - try { _result = (int)PDF_add_bookmark2(p,_arg1,len,_arg2,_arg3); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_add_nameddest(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *name; - char *optlist; - char *res; - int len; - - if (objc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_nameddest p name optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_nameddest. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((name = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve name argument in PDF_add_nameddest", TCL_STATIC); - return TCL_ERROR; - } - - if ((optlist = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve optlist argument in PDF_add_nameddest", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_add_nameddest(p, name, 0, optlist); - } catch; - - return TCL_OK; -} - - -static int -_wrap_PDF_set_info(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *_arg1; - char *_arg2; - char *res; - int len; - - if (objc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_info p key value ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_info. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve key argument in PDF_set_info", TCL_STATIC); - return TCL_ERROR; - } - - if ((_arg2 = GetStringUnicodePDFChars(p, interp, objv[3], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve value argument in PDF_set_info", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_set_info2(p,_arg1,_arg2,len); - } catch; - - return TCL_OK; -} - -/* p_icc.c */ - -static int -_wrap_PDF_load_iccprofile(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *profilename; - char *optlist; - char *res; - int len; - - if (objc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_load_iccprofile p profilename optlist", TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer in PDF_load_iccprofile", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_load_iccprofile. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((profilename = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve profilename argument in PDF_load_iccprofile", TCL_STATIC); - return TCL_ERROR; - } - if ((optlist = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve optlist argument in PDF_load_iccprofile", TCL_STATIC); - return TCL_ERROR; - } - - try { _result = (int)PDF_load_iccprofile(p, profilename, 0, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - - -/* p_image.c */ - -static int -_wrap_PDF_add_thumbnail(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_add_thumbnail p image ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_add_thumbnail. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (int) atol(argv[2]); - - try { PDF_add_thumbnail(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_close_image(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_close_image p image ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_close_image. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &_arg1) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 2 of PDF_close_image.", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_close_image(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_fit_image(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int image; - float x; - float y; - char *optlist; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fit_image p image x y optlist",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_fit_image. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &image) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument image of PDF_fit_image.", TCL_STATIC); - return TCL_ERROR; - } - x = (float) atof(argv[3]); - y = (float) atof(argv[4]); - optlist = argv[5]; - - try { PDF_fit_image(p, image, x, y, optlist); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_load_image(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - char *imagetype; - char *filename; - char *optlist; - int len = 0; - int fnam_len = 0; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_load_image p imagetype filename optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_load_image. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((imagetype = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve imagetype argument in PDF_load_image", TCL_STATIC); - return TCL_ERROR; - } - if ((filename = Tcl_GetStringFromObj(objv[3], &fnam_len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve filename argument in PDF_load_image", TCL_STATIC); - return TCL_ERROR; - } - - if ((optlist = Tcl_GetStringFromObj(objv[4], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_load_image", TCL_STATIC); - return TCL_ERROR; - } - - - try { - _result = (int)PDF_load_image(p, imagetype, filename, 0, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - - -static int -_wrap_PDF_open_CCITT(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - int _arg2; - int _arg3; - int _arg4; - int _arg5; - int _arg6; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_CCITT p filename width height BitReverse K BlackIs1 ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_CCITT. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - if (Tcl_GetInt(interp, argv[3], &_arg2) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 3 of PDF_open_CCITT.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[4], &_arg3) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 4 of PDF_open_CCITT.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[5], &_arg4) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 5 of PDF_open_CCITT.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[6], &_arg5) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 6 of PDF_open_CCITT.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[7], &_arg6) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 7 of PDF_open_CCITT.", TCL_STATIC); - return TCL_ERROR; - } - - try { _result = (int)PDF_open_CCITT(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_open_image(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - - int volatile _result = -1; - PDF *p; - char *_arg1; - char *_arg2; - char *_arg3; - long _arg4; - int _arg5; - int _arg6; - int _arg7; - int _arg8; - char *_arg9; - int len = 0; - char *res; - - if (objc != 11) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_image p imagetype source data length width height components bpc params", TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer in PDF_open_image", - TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_image. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve imagetype argument in PDF_open_image", TCL_STATIC); - return TCL_ERROR; - } - if ((_arg2 = Tcl_GetStringFromObj(objv[3], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve source argument in PDF_open_image", TCL_STATIC); - return TCL_ERROR; - } - -/* ByteArrays appeared only in Tcl 8.1 */ - -#if 10 * TCL_MAJOR_VERSION + TCL_MINOR_VERSION >= 81 - - if ((_arg3 = (char *) Tcl_GetByteArrayFromObj(objv[4], &len)) == NULL) { - -#else /* Tcl 8.0 */ - - if ((_arg3 = (char *) Tcl_GetStringFromObj(objv[4], &len)) == NULL) { -#endif /* Tcl 8.0 */ - - Tcl_SetResult(interp, - "Couldn't retrieve data argument in PDF_open_image", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetLongFromObj(interp, objv[5], &_arg4) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 5 of PDF_open_image.", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetIntFromObj(interp, objv[6], &_arg5) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 6 of PDF_open_image.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetIntFromObj(interp, objv[7], &_arg6) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 7 of PDF_open_image.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetIntFromObj(interp, objv[8], &_arg7) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 8 of PDF_open_image.", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetIntFromObj(interp, objv[9], &_arg8) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 9 of PDF_open_image.", TCL_STATIC); - return TCL_ERROR; - } - if ((_arg9 = Tcl_GetStringFromObj(objv[10], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve argument 10 in PDF_open_image", TCL_STATIC); - return TCL_ERROR; - } - - try { - _result = (int)PDF_open_image(p,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_open_image_file(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - char *_arg2; - char *_arg3; - int _arg4; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_image_file p imagetype filename stringparam intparam ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_image_file. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - _arg2 = argv[3]; - _arg3 = argv[4]; - if (Tcl_GetInt(interp, argv[5], &_arg4) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 5 of PDF_open_image_file.", TCL_STATIC); - return TCL_ERROR; - } - - try { _result = (int)PDF_open_image_file(p,_arg1,_arg2,_arg3,_arg4); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_place_image(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - float _arg2; - float _arg3; - float _arg4; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_place_image p image x y scale ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_place_image. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - if (Tcl_GetInt(interp, argv[2], &_arg1) != TCL_OK) { - Tcl_SetResult(interp, - "Type error in argument 2 of PDF_place_image.", TCL_STATIC); - return TCL_ERROR; - } - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - - try { PDF_place_image(p,_arg1,_arg2,_arg3,_arg4); - } catch; - - return TCL_OK; -} - -/* p_params.c */ - - -static int _wrap_PDF_get_parameter(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - char volatile *_result = NULL; - PDF *p; - char *_arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_parameter p key modifier ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_parameter. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = argv[2]; - _arg2 = (float) atof(argv[3]); - - try { - _result = (char *)PDF_get_parameter(p,_arg1,_arg2); - Tcl_SetResult(interp, (char *) _result, TCL_VOLATILE); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_get_value(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - float volatile _result = 0; - PDF *p; - char *_arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_value p key modifier ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - p = NULL; - } - _arg1 = argv[2]; - _arg2 = (float) atof(argv[3]); - - if (p != NULL) { - try { _result = (float)PDF_get_value(p,_arg1,_arg2); - } catch; - } else { - _result = (float)PDF_get_value(p,_arg1,_arg2); - } - - Tcl_PrintDouble(interp,(double) _result, interp->result); - return TCL_OK; -} - -static int -_wrap_PDF_set_parameter(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *_arg1; - char *_arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_parameter p key value ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_parameter. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - _arg2 = argv[3]; - - try { - PDF_set_parameter(p, _arg1, _arg2); - - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_set_value(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - char *_arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_value p key value ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_value. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = argv[2]; - _arg2 = (float) atof(argv[3]); - - try { PDF_set_value(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -/* p_pattern.c */ - -static int -_wrap_PDF_begin_pattern(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - float _arg1; - float _arg2; - float _arg3; - float _arg4; - int _arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_begin_pattern p width height xstep ystep painttype ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_begin_pattern. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (int) atol(argv[6]); - - try { _result = (int)PDF_begin_pattern(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_end_pattern(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_end_pattern p ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_end_pattern. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_end_pattern(p); - } catch; - - return TCL_OK; -} - -/* p_pdi.c */ - -static int -_wrap_PDF_close_pdi(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_close_pdi p doc ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_close_pdi. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (int) atol(argv[2]); - - try { PDF_close_pdi(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_close_pdi_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_close_pdi_page p page ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_close_pdi_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (int) atol(argv[2]); - - try { PDF_close_pdi_page(p,_arg1); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_fit_pdi_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int page; - float x; - float y; - char *optlist; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fit_pdi_page p page x y optlist",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_fit_pdi_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - page = (int) atol(argv[2]); - x = (float) atof(argv[3]); - y = (float) atof(argv[4]); - optlist = argv[5]; - - try { PDF_fit_pdi_page(p, page, x, y, optlist); - } catch; - - return TCL_OK; -} - - -static int -_wrap_PDF_get_pdi_parameter(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - char volatile * _result = NULL; - PDF *p; - char *_arg1; - int _arg2; - int _arg3; - int _arg4; - int len; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_pdi_parameter p key doc page reserved ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_pdi_parameter. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = argv[2]; - _arg2 = (int) atol(argv[3]); - _arg3 = (int) atol(argv[4]); - _arg4 = (int) atol(argv[5]); - - try { - _result = (char *)PDF_get_pdi_parameter(p,_arg1,_arg2,_arg3,_arg4, &len); - /* TODO: return a string object */ - Tcl_SetResult(interp, (char *) _result, TCL_VOLATILE); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_get_pdi_value(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - float volatile _result = -1; - PDF *p; - char *_arg1; - int _arg2; - int _arg3; - int _arg4; - - if (argc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_get_pdi_value p key doc page reserved ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_get_pdi_value. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = argv[2]; - _arg2 = (int) atol(argv[3]); - _arg3 = (int) atol(argv[4]); - _arg4 = (int) atol(argv[5]); - - try { _result = (float)PDF_get_pdi_value(p,_arg1,_arg2,_arg3,_arg4); - } catch; - - Tcl_PrintDouble(interp,(double) _result, interp->result); - return TCL_OK; -} - -static int -_wrap_PDF_open_pdi(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *_arg1; - char *_arg2; - int _arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_pdi p filename stringparam reserved ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_pdi. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = argv[2]; - _arg2 = argv[3]; - _arg3 = (int) atol(argv[4]); - - try { _result = (int)PDF_open_pdi(p,_arg1,_arg2,_arg3); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_open_pdi_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - int _arg1; - int _arg2; - char *_arg3; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_open_pdi_page p doc pagenumber optlist ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_open_pdi_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (int) atol(argv[2]); - _arg2 = (int) atol(argv[3]); - _arg3 = argv[4]; - - try { _result = (int)PDF_open_pdi_page(p,_arg1,_arg2,_arg3); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_place_pdi_page(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int _arg1; - float _arg2; - float _arg3; - float _arg4; - float _arg5; - - if (argc != 7) { - Tcl_SetResult(interp, "Wrong # args. PDF_place_pdi_page p page x y sx sy",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_place_pdi_page. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (int) atol(argv[2]); - _arg2 = (float) atof(argv[3]); - _arg3 = (float) atof(argv[4]); - _arg4 = (float) atof(argv[5]); - _arg5 = (float) atof(argv[6]); - - try { PDF_place_pdi_page(p,_arg1,_arg2,_arg3,_arg4,_arg5); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_process_pdi(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - int doc; - int page; - char *optlist; - - if (argc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_process_pdi p doc page optlist ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_process_pdi. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - doc = (int) atol(argv[2]); - page = (int) atol(argv[3]); - optlist = argv[4]; - - try { _result = (int)PDF_process_pdi(p, doc, page, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - - -/* p_resource.c */ - -static int -_wrap_PDF_create_pvf(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *filename; - char *data; - char *optlist; - int len = 0; - int dlen = 0; - char *res; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_create_pvf p filename data optlist ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_create_pvf. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((filename = Tcl_GetStringFromObj(objv[2], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve filename argument in PDF_create_pvf", TCL_STATIC); - return TCL_ERROR; - } - - if ((data = Tcl_GetStringFromObj(objv[3], &dlen)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve data argument in PDF_create_pvf", TCL_STATIC); - return TCL_ERROR; - } - if ((optlist = Tcl_GetStringFromObj(objv[4], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_create_pvf", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_create_pvf(p, filename, 0, (void *)data, (size_t)dlen, optlist); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_delete_pvf(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - int volatile _result = -1; - PDF *p; - char *filename; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_delete_pvf p filename ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_delete_pvf. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - filename = argv[2]; - - try { _result = (int)PDF_delete_pvf(p, filename, 0); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - - -/* p_shading.c */ - -static int -_wrap_PDF_shading(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - int volatile _result = -1; - PDF *p; - char *shtype; - float x0; - float y0; - float x1; - float y1; - float c1; - float c2; - float c3; - float c4; - char *optlist; - - if (argc != 12) { - Tcl_SetResult(interp, "Wrong # args. PDF_shading p shtype x0 y0 x1 y1 c1 c2 c3 c4 optlist",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_shading. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - shtype = argv[2]; - x0 = (float) atof(argv[3]); - y0 = (float) atof(argv[4]); - x1 = (float) atof(argv[5]); - y1 = (float) atof(argv[6]); - c1 = (float) atof(argv[7]); - c2 = (float) atof(argv[8]); - c3 = (float) atof(argv[9]); - c4 = (float) atof(argv[10]); - optlist = argv[11]; - - try { _result = (int)PDF_shading(p, shtype, x0, y0, x1, y1, c1, c2, c3, c4, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_shading_pattern(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - int volatile _result = -1; - PDF *p; - int shading; - char *optlist; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_shading_pattern p shading optlist",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_shading_pattern. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - shading = (int) atol(argv[2]); - optlist = argv[3]; - - try { _result = (int)PDF_shading_pattern(p, shading, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_shfill(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - int shading; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_shfill p shading ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_shfill. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - shading = (int) atol(argv[2]); - - try { PDF_shfill(p, shading); - } catch; - - return TCL_OK; -} - -/* p_template.c */ - -static int -_wrap_PDF_begin_template(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - int volatile _result = -1; - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_begin_template p width height ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_begin_template. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { _result = (int)PDF_begin_template(p,_arg1,_arg2); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_end_template(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_end_template p ",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_end_template. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_end_template(p); - } catch; - - return TCL_OK; -} - -/* p_text.c */ - -static int -_wrap_PDF_continue_text(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *_arg1; - int len = 0; - char *res; - - if (objc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_continue_text p text ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_continue_text. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_continue_text", TCL_STATIC); - return TCL_ERROR; - } - - try { - PDF_continue_text2(p, _arg1, len); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_fit_textline(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *text; - double x; - double y; - char *optlist; - int textlen = 0; - int len = 0; - char *res; - - if (objc != 6) { - Tcl_SetResult(interp, "Wrong # args. PDF_fit_textline p text x y optlist",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_fit_textline. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((text = GetStringUnicodePDFChars(p, interp, objv[2], &textlen)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_fit_textline", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[3], &x) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve x argument in PDF_fit_textline", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetDoubleFromObj(interp, objv[4], &y) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve y argument in PDF_fit_textline", TCL_STATIC); - return TCL_ERROR; - } - if ((optlist = Tcl_GetStringFromObj(objv[5], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve optlist argument in PDF_fit_textline", TCL_STATIC); - return TCL_ERROR; - } - - try { - PDF_fit_textline(p, text, textlen, (float) x, (float) y, optlist); - } catch; - - return TCL_OK; -} - - -static int -_wrap_PDF_set_text_pos(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - float _arg1; - float _arg2; - - if (argc != 4) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_text_pos p x y ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_text_pos. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - _arg1 = (float) atof(argv[2]); - _arg2 = (float) atof(argv[3]); - - try { PDF_set_text_pos(p,_arg1,_arg2); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_show(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *_arg1; - int len = 0; - char *res; - - if (objc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_show p text ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_show. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_show", TCL_STATIC); - return TCL_ERROR; - } - - try { PDF_show2(p, _arg1, len); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_show_boxed(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - int volatile _result = -1; - PDF *p; - char *res; - int len1 = 0; - int len = 0; - char *_arg1; - double _arg2; - double _arg3; - double _arg4; - double _arg5; - char *_arg6; - char *_arg7; - - if (objc != 9) { - Tcl_SetResult(interp, "Wrong # args. PDF_show_boxed p text left top width height hmode feature ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, - "Type error in argument 1 of PDF_show_boxed. Expected _PDF_p, received ", - TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len1)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - - if (Tcl_GetDoubleFromObj(interp, objv[3], &_arg2) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve x argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetDoubleFromObj(interp, objv[4], &_arg3) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve y argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetDoubleFromObj(interp, objv[5], &_arg4) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve width argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - if (Tcl_GetDoubleFromObj(interp, objv[6], &_arg5) != TCL_OK) { - Tcl_SetResult(interp, - "Couldn't retrieve height argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - - if ((_arg6 = Tcl_GetStringFromObj(objv[7], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve mode argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - - if ((_arg7 = Tcl_GetStringFromObj(objv[8], &len)) == NULL) { - Tcl_SetResult(interp, - "Couldn't retrieve mode argument in PDF_show_boxed", TCL_STATIC); - return TCL_ERROR; - } - - try { - _result = (int)PDF_show_boxed2(p, _arg1, len1, (float)_arg2, (float)_arg3, (float)_arg4, (float)_arg5,_arg6,_arg7); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - -static int -_wrap_PDF_show_xy(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - PDF *p; - char *_arg1; - double _arg2; - double _arg3; - int len = 0, error; - char *res; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_show_xy p text x y ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p, "_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_show_xy. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_show_xy", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetDoubleFromObj(interp, objv[3], &_arg2)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve x argument in PDF_show_xy", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetDoubleFromObj(interp, objv[4], &_arg3)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve y argument in PDF_show_xy", TCL_STATIC); - return TCL_ERROR; - } - - try { - PDF_show_xy2(p, _arg1, len, (float) _arg2, (float) _arg3); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_stringwidth(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - float volatile _result = -1; - PDF *p; - char *_arg1; - int _arg2; - double _arg3; - int len = 0, error; - char *res; - Tcl_Obj *resultPtr; - - if (objc != 5) { - Tcl_SetResult(interp, "Wrong # args. PDF_stringwidth p text font fontsize ",TCL_STATIC); - return TCL_ERROR; - } - - if ((res = Tcl_GetStringFromObj(objv[1], NULL)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve PDF pointer in PDF_stringwidth", TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(res, (void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_stringwidth. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, res, (char *) NULL); - return TCL_ERROR; - } - - if ((_arg1 = GetStringUnicodePDFChars(p, interp, objv[2], &len)) == NULL) { - Tcl_SetResult(interp, "Couldn't retrieve text argument in PDF_stringwidth", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetIntFromObj(interp, objv[3], &_arg2)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve font argument in PDF_stringwidth", TCL_STATIC); - return TCL_ERROR; - } - - if ((error = Tcl_GetDoubleFromObj(interp, objv[4], &_arg3)) != TCL_OK) { - Tcl_SetResult(interp, "Couldn't retrieve fontsize argument in PDF_stringwidth", TCL_STATIC); - return TCL_ERROR; - } - - try { - _result = (float) PDF_stringwidth2(p, _arg1, len, _arg2, (float) _arg3); - } catch; - - resultPtr = Tcl_GetObjResult(interp); - Tcl_SetDoubleObj(resultPtr, (double) _result); - - return TCL_OK; -} - -/* p_type3.c */ - -static int -_wrap_PDF_begin_font(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *fontname; - float a, b, c, d, e, f; - char *optlist; - - if (argc != 10) { - Tcl_SetResult(interp, "Wrong # args. PDF_begin_font p fontname a b c d e f optlist",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_begin_font. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - fontname = argv[2]; - a = (float) atof(argv[3]); - b = (float) atof(argv[4]); - c = (float) atof(argv[5]); - d = (float) atof(argv[6]); - e = (float) atof(argv[7]); - f = (float) atof(argv[8]); - optlist = argv[9]; - - try { PDF_begin_font(p, fontname, 0, a, b, c, d, e, f, optlist); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_begin_glyph(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - char *name; - float wx, llx, lly, urx, ury; - - if (argc != 8) { - Tcl_SetResult(interp, "Wrong # args. PDF_begin_glyph p glyphname flag value ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_begin_glyph. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - name = argv[2]; - wx = (float) atof(argv[3]); - llx = (float) atof(argv[4]); - lly = (float) atof(argv[5]); - urx = (float) atof(argv[6]); - ury = (float) atof(argv[7]); - - try { PDF_begin_glyph(p, name, wx, llx, lly, urx, ury); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_end_font(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_end_font p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_end_font. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_end_font(p); - } catch; - - return TCL_OK; -} - -static int -_wrap_PDF_end_glyph(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - - if (argc != 2) { - Tcl_SetResult(interp, "Wrong # args. PDF_end_glyph p ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_end_glyph. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - - try { PDF_end_glyph(p); - } catch; - - return TCL_OK; -} - -/* p_xgstate.c */ - -static int -_wrap_PDF_create_gstate(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - - int volatile _result = -1; - PDF *p; - char *optlist; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_create_gstate p optlist",TCL_STATIC); - return TCL_ERROR; - } - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_create_gstate. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - optlist = argv[2]; - - try { _result = (int)PDF_create_gstate(p, optlist); - } catch; - - sprintf(interp->result,"%ld", (long) _result); - return TCL_OK; -} - - -static int -_wrap_PDF_set_gstate(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { - PDF *p; - int handle; - - if (argc != 3) { - Tcl_SetResult(interp, "Wrong # args. PDF_set_gstate p gstate ",TCL_STATIC); - return TCL_ERROR; - } - - if (SWIG_GetPtr(argv[1],(void **) &p,"_PDF_p")) { - Tcl_SetResult(interp, "Type error in argument 1 of PDF_set_gstate. Expected _PDF_p, received ", TCL_STATIC); - Tcl_AppendResult(interp, argv[1], (char *) NULL); - return TCL_ERROR; - } - handle = (int) atol(argv[2]); - - try { PDF_set_gstate(p, handle); - } catch; - - return TCL_OK; -} - - - -/* This is required to make our extension work with safe Tcl interpreters */ -SWIGEXPORT(int,Pdflib_SafeInit)(Tcl_Interp *interp) -{ - return TCL_OK; -} - -/* This is required to satisfy pkg_mkIndex */ -SWIGEXPORT(int,Pdflib_tcl_SafeInit)(Tcl_Interp *interp) -{ - return Pdflib_SafeInit(interp); -} - -/* This is required to satisfy pkg_mkIndex */ -SWIGEXPORT(int,Pdflib_tcl_Init)(Tcl_Interp *interp) -{ - return Pdflib_Init(interp); -} - -/* This is required to satisfy pkg_mkIndex */ -SWIGEXPORT(int,Pdf_tcl_Init)(Tcl_Interp *interp) -{ - return Pdflib_Init(interp); -} - -/* This is required to satisfy pkg_mkIndex */ -SWIGEXPORT(int,Pdf_tcl_SafeInit)(Tcl_Interp *interp) -{ - return Pdflib_SafeInit(interp); -} - -SWIGEXPORT(int,Pdflib_Init)(Tcl_Interp *interp) -{ - if (interp == 0) - return TCL_ERROR; - -#ifdef USE_TCL_STUBS - if (Tcl_InitStubs(interp, "8.2", 0) == NULL) { - return TCL_ERROR; - } -#else - if (Tcl_PkgRequire(interp, "Tcl", TCL_VERSION, 1) == NULL) { - return TCL_ERROR; - } -#endif - - /* Boot the PDFlib core */ - PDF_boot(); - - /* Tell Tcl which package we are going to define */ - Tcl_PkgProvide(interp, "pdflib", PDFLIB_VERSIONSTRING); - - Tcl_CreateCommand(interp, "PDF_add_launchlink", (Tcl_CmdProc*) _wrap_PDF_add_launchlink, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_add_locallink", (Tcl_CmdProc*) _wrap_PDF_add_locallink, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_add_note", (Tcl_ObjCmdProc*) _wrap_PDF_add_note, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_add_pdflink", (Tcl_CmdProc*) _wrap_PDF_add_pdflink, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_add_weblink", (Tcl_CmdProc*) _wrap_PDF_add_weblink, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_attach_file", (Tcl_ObjCmdProc*) _wrap_PDF_attach_file, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_border_color", (Tcl_CmdProc*) _wrap_PDF_set_border_color, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_border_dash", (Tcl_CmdProc*) _wrap_PDF_set_border_dash, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_border_style", (Tcl_CmdProc*) _wrap_PDF_set_border_style, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_begin_page", (Tcl_CmdProc*) _wrap_PDF_begin_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_close", (Tcl_CmdProc*) _wrap_PDF_close, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_delete", (Tcl_CmdProc*) _wrap_PDF_delete, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_end_page", (Tcl_CmdProc*) _wrap_PDF_end_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_get_buffer", (Tcl_ObjCmdProc*) _wrap_PDF_get_buffer, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_new", (Tcl_CmdProc*) _wrap_PDF_new, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_open_file", (Tcl_CmdProc*) _wrap_PDF_open_file, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateObjCommand(interp, "PDF_fill_imageblock", (Tcl_ObjCmdProc*) _wrap_PDF_fill_imageblock, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_fill_pdfblock", (Tcl_ObjCmdProc*) _wrap_PDF_fill_pdfblock, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_fill_textblock", (Tcl_ObjCmdProc*) _wrap_PDF_fill_textblock, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_makespotcolor", (Tcl_CmdProc*) _wrap_PDF_makespotcolor, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setcolor", (Tcl_CmdProc*) _wrap_PDF_setcolor, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setgray", (Tcl_CmdProc*) _wrap_PDF_setgray, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setgray_fill", (Tcl_CmdProc*) _wrap_PDF_setgray_fill, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setgray_stroke", (Tcl_CmdProc*) _wrap_PDF_setgray_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setrgbcolor", (Tcl_CmdProc*) _wrap_PDF_setrgbcolor, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setrgbcolor_fill", (Tcl_CmdProc*) _wrap_PDF_setrgbcolor_fill, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setrgbcolor_stroke", (Tcl_CmdProc*) _wrap_PDF_setrgbcolor_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_arc", (Tcl_CmdProc*) _wrap_PDF_arc, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_arcn", (Tcl_CmdProc*) _wrap_PDF_arcn, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_circle", (Tcl_CmdProc*) _wrap_PDF_circle, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_clip", (Tcl_CmdProc*) _wrap_PDF_clip, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_closepath", (Tcl_CmdProc*) _wrap_PDF_closepath, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_closepath_fill_stroke", (Tcl_CmdProc*) _wrap_PDF_closepath_fill_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_closepath_stroke", (Tcl_CmdProc*) _wrap_PDF_closepath_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_curveto", (Tcl_CmdProc*) _wrap_PDF_curveto, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_endpath", (Tcl_CmdProc*) _wrap_PDF_endpath, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_fill", (Tcl_CmdProc*) _wrap_PDF_fill, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_fill_stroke", (Tcl_CmdProc*) _wrap_PDF_fill_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_lineto", (Tcl_CmdProc*) _wrap_PDF_lineto, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_moveto", (Tcl_CmdProc*) _wrap_PDF_moveto, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_rect", (Tcl_CmdProc*) _wrap_PDF_rect, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_stroke", (Tcl_CmdProc*) _wrap_PDF_stroke, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_encoding_set_char", (Tcl_CmdProc*) _wrap_PDF_encoding_set_char, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_findfont", (Tcl_CmdProc*) _wrap_PDF_findfont, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_load_font", (Tcl_ObjCmdProc*) _wrap_PDF_load_font, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setfont", (Tcl_CmdProc*) _wrap_PDF_setfont, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_concat", (Tcl_CmdProc*) _wrap_PDF_concat, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_initgraphics", (Tcl_CmdProc*) _wrap_PDF_initgraphics, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_restore", (Tcl_CmdProc*) _wrap_PDF_restore, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_rotate", (Tcl_CmdProc*) _wrap_PDF_rotate, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_save", (Tcl_CmdProc*) _wrap_PDF_save, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_scale", (Tcl_CmdProc*) _wrap_PDF_scale, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setdash", (Tcl_CmdProc*) _wrap_PDF_setdash, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setdashpattern", (Tcl_CmdProc*) _wrap_PDF_setdashpattern, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setflat", (Tcl_CmdProc*) _wrap_PDF_setflat, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setlinecap", (Tcl_CmdProc*) _wrap_PDF_setlinecap, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setlinejoin", (Tcl_CmdProc*) _wrap_PDF_setlinejoin, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setlinewidth", (Tcl_CmdProc*) _wrap_PDF_setlinewidth, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setmatrix", (Tcl_CmdProc*) _wrap_PDF_setmatrix, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_setmiterlimit", (Tcl_CmdProc*) _wrap_PDF_setmiterlimit, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_setpolydash", (Tcl_ObjCmdProc*) _wrap_PDF_setpolydash, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_skew", (Tcl_CmdProc*) _wrap_PDF_skew, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_translate", (Tcl_CmdProc*) _wrap_PDF_translate, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateObjCommand(interp, "PDF_add_bookmark", (Tcl_ObjCmdProc*) _wrap_PDF_add_bookmark, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_add_nameddest", (Tcl_ObjCmdProc*) _wrap_PDF_add_nameddest, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_set_info", (Tcl_ObjCmdProc*) _wrap_PDF_set_info, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateObjCommand(interp, "PDF_load_iccprofile", (Tcl_ObjCmdProc*) _wrap_PDF_load_iccprofile, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_add_thumbnail", (Tcl_CmdProc*) _wrap_PDF_add_thumbnail, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_close_image", (Tcl_CmdProc*) _wrap_PDF_close_image, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_fit_image", (Tcl_CmdProc*) _wrap_PDF_fit_image, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_load_image", (Tcl_ObjCmdProc*) _wrap_PDF_load_image, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_open_CCITT", (Tcl_CmdProc*) _wrap_PDF_open_CCITT, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_open_image", (Tcl_ObjCmdProc*) _wrap_PDF_open_image, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_open_image_file", (Tcl_CmdProc*) _wrap_PDF_open_image_file, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_place_image", (Tcl_CmdProc*) _wrap_PDF_place_image, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_get_parameter", (Tcl_CmdProc*) _wrap_PDF_get_parameter, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_get_value", (Tcl_CmdProc*) _wrap_PDF_get_value, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_parameter", (Tcl_CmdProc*) _wrap_PDF_set_parameter, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_value", (Tcl_CmdProc*) _wrap_PDF_set_value, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_begin_pattern", (Tcl_CmdProc*) _wrap_PDF_begin_pattern, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_end_pattern", (Tcl_CmdProc*) _wrap_PDF_end_pattern, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_close_pdi", (Tcl_CmdProc*) _wrap_PDF_close_pdi, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_close_pdi_page", (Tcl_CmdProc*) _wrap_PDF_close_pdi_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_fit_pdi_page", (Tcl_CmdProc*) _wrap_PDF_fit_pdi_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_get_pdi_parameter", (Tcl_CmdProc*) _wrap_PDF_get_pdi_parameter, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_get_pdi_value", (Tcl_CmdProc*) _wrap_PDF_get_pdi_value, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_open_pdi", (Tcl_CmdProc*) _wrap_PDF_open_pdi, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_open_pdi_page", (Tcl_CmdProc*) _wrap_PDF_open_pdi_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_place_pdi_page", (Tcl_CmdProc*) _wrap_PDF_place_pdi_page, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_process_pdi", (Tcl_CmdProc*) _wrap_PDF_process_pdi, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateObjCommand(interp, "PDF_create_pvf", (Tcl_ObjCmdProc*) _wrap_PDF_create_pvf, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_delete_pvf", (Tcl_CmdProc*) _wrap_PDF_delete_pvf, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_shading", (Tcl_CmdProc*) _wrap_PDF_shading, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_shading_pattern", (Tcl_CmdProc*) _wrap_PDF_shading_pattern, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_shfill", (Tcl_CmdProc*) _wrap_PDF_shfill, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_begin_template", (Tcl_CmdProc*) _wrap_PDF_begin_template, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_end_template", (Tcl_CmdProc*) _wrap_PDF_end_template, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateObjCommand(interp, "PDF_continue_text", (Tcl_ObjCmdProc*) _wrap_PDF_continue_text, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_fit_textline", (Tcl_ObjCmdProc*) _wrap_PDF_fit_textline, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_text_pos", (Tcl_CmdProc*) _wrap_PDF_set_text_pos, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_show", (Tcl_ObjCmdProc*) _wrap_PDF_show, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_show_boxed", (Tcl_ObjCmdProc*) _wrap_PDF_show_boxed, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_show_xy", (Tcl_ObjCmdProc*) _wrap_PDF_show_xy, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "PDF_stringwidth", (Tcl_ObjCmdProc*) _wrap_PDF_stringwidth, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_begin_font", (Tcl_CmdProc*) _wrap_PDF_begin_font, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_begin_glyph", (Tcl_CmdProc*) _wrap_PDF_begin_glyph, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_end_font", (Tcl_CmdProc*) _wrap_PDF_end_font, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_end_glyph", (Tcl_CmdProc*) _wrap_PDF_end_glyph, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_create_gstate", (Tcl_CmdProc*) _wrap_PDF_create_gstate, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_set_gstate", (Tcl_CmdProc*) _wrap_PDF_set_gstate, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - - Tcl_CreateCommand(interp, "PDF_get_errmsg", (Tcl_CmdProc*) _wrap_PDF_get_errmsg, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_get_errnum", (Tcl_CmdProc*) _wrap_PDF_get_errnum, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "PDF_get_apiname", (Tcl_CmdProc*) _wrap_PDF_get_apiname, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - -/* - * These are the pointer type-equivalency mappings. - * (Used by the SWIG pointer type-checker). - */ - SWIG_RegisterMapping("_signed_long","_long",0); - SWIG_RegisterMapping("_struct_PDF_s","_PDF",0); - SWIG_RegisterMapping("_long","_unsigned_long",0); - SWIG_RegisterMapping("_long","_signed_long",0); - SWIG_RegisterMapping("_PDF","_struct_PDF_s",0); - SWIG_RegisterMapping("_unsigned_long","_long",0); - SWIG_RegisterMapping("_signed_int","_int",0); - SWIG_RegisterMapping("_unsigned_short","_short",0); - SWIG_RegisterMapping("_signed_short","_short",0); - SWIG_RegisterMapping("_unsigned_int","_int",0); - SWIG_RegisterMapping("_short","_unsigned_short",0); - SWIG_RegisterMapping("_short","_signed_short",0); - SWIG_RegisterMapping("_int","_unsigned_int",0); - SWIG_RegisterMapping("_int","_signed_int",0); - return TCL_OK; -} diff --git a/src/libs/pdflib/bind/pdflib/tcl/pkgIndex.tcl b/src/libs/pdflib/bind/pdflib/tcl/pkgIndex.tcl deleted file mode 100644 index 48ce0184e2..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/pkgIndex.tcl +++ /dev/null @@ -1,11 +0,0 @@ -# Tcl package index file, version 1.1 -# This file is generated by the "pkg_mkIndex" command -# and sourced either when an application starts up or -# by a "package unknown" script. It invokes the -# "package ifneeded" command to set up package-related -# information so that packages will be loaded automatically -# in response to "package require" commands. When this -# script is sourced, the variable $dir must contain the -# full path name of this file's directory. - -package ifneeded pdflib 5.0 [list load [file join $dir pdflib_tcl[info sharedlibextension]]] diff --git a/src/libs/pdflib/bind/pdflib/tcl/quickreference.tcl b/src/libs/pdflib/bind/pdflib/tcl/quickreference.tcl deleted file mode 100644 index cbe3564e49..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/quickreference.tcl +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# $Id: quickreference.tcl 14574 2005-10-29 16:27:43Z bonefish $ -# -# PDFlib/PDI client: mini imposition demo -# - -# Hide the exec to Tcl but not to the shell by appending a backslash\ -exec tclsh "$0" ${1+"$@"} - -# The lappend line is unnecessary if PDFlib has been installed -# in the Tcl package directory -set auto_path [linsert $auto_path 0 .libs .] - -package require pdflib 5.0 - -set maxrow 2 -set maxcol 2 -set startpage 1 -set endpage 4 -set width 500.0 -set height 770.0 -set infile "reference.pdf" -# This is where font/image/PDF input files live. Adjust as necessary. -set searchpath "../data" - -set p [PDF_new] - -if {[PDF_open_file $p "quickreference.pdf"] == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -PDF_set_parameter $p "SearchPath" $searchpath - -PDF_set_info $p "Creator" "quickreference.tcl" -PDF_set_info $p "Author" "Thomas Merz" -PDF_set_info $p "Title" "Mini Imposition Demo (Tcl)" - -set manual [PDF_open_pdi $p $infile "" 0] -if {$manual == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit -} - -set row 0 -set col 0 - -PDF_set_parameter $p "topdown" "true" - -for {set pageno $startpage} {$pageno <= $endpage} \ - {set pageno [expr $pageno + 1]} { - if {$row == 0 && $col == 0} { - PDF_begin_page $p $width $height - set font [PDF_load_font $p "Helvetica-Bold" "winansi" ""] - PDF_setfont $p $font 18 - PDF_set_text_pos $p 24 [expr 24] - PDF_show $p "PDFlib Quick Reference" - } - - set page [PDF_open_pdi_page $p $manual $pageno ""] - - if {$page == -1} { - puts stderr "Error: [PDF_get_errmsg $p]" - exit - } - - set scale [expr {1.0/$maxrow}] - PDF_fit_pdi_page $p $page [expr $width/$maxcol*$col] \ - [expr ($row + 1) * $height/$maxrow] "scale $scale" - PDF_close_pdi_page $p $page - - set col [expr $col + 1] - if {$col == $maxcol} { - set col 0 - set row [expr $row + 1] - } - if {$row == $maxrow} { - set row 0 - PDF_end_page $p - } -} - -# finish the last partial page -if {$row != 0 || $col != 0} { - PDF_end_page $p -} -PDF_close $p -PDF_close_pdi $p $manual -PDF_delete $p diff --git a/src/libs/pdflib/bind/pdflib/tcl/readme.txt b/src/libs/pdflib/bind/pdflib/tcl/readme.txt deleted file mode 100644 index bc6c7f0c7a..0000000000 --- a/src/libs/pdflib/bind/pdflib/tcl/readme.txt +++ /dev/null @@ -1,53 +0,0 @@ -Notes on the PDFlib Tcl binding -=============================== - -Unix -==== - -- You may have to change the name of the tclsh binary in the - example scripts if you want to run them directly. Alternatively, - you may want to create a symbolic link pointing to the installed - version of tclsh. - - -Mac OS X -======== - -- The default build procedure for the PDFlib Tcl wrapper does not - work for Tcl 8.3 and above on Mac OS X. - - These Tcl versions need a "Mach-O dynamically linked shared library ppc", - whereas our build process creates a "Mach-O bundle ppc" - - You can build a PDFlib extension for Tcl by applying the following changes: - - - remove the "-module" option for the linking step (you find this in - ~/config/mkbind.inc) - - Note: Undo this change to build other PDFlib language bindings. - - - now libtool only accepts libraries starting with "lib", therefore: - -> apply the following change in bind/pdflib/tcl/Makefile: - LIBNAME = pdflib_tcl$(LA) - to - LIBNAME = libpdf_tcl$(LA) - - - change in pkgIndex.tcl: - pdflib_tcl -> libpdf_tcl - -Alternatively, you can request a precompiled binary for Tcl on OS X from -bindings@pdflib.com. Note that this service is only available for users -with a commercial PDFlib license, and not PDFlib Lite. - - -How to build the PDFlib wrapper for Tcl 8.0 or 8.1 -================================================== - -The precompiled versions of the PDFlib wrapper for Tcl require Tcl 8.2 or -above. The wrapper code can also be compiled with Tcl 8.0 or 8.1, although -is is not supported by the configure and Makefile process. -Do the following for building PDFlib with Tcl 8.0 or 8.1: - -- #undef USE_TCL_STUBS in pdflib_tcl.c - -- Add -ltcl to the linker command, and an appropriate -L option. diff --git a/src/libs/pdflib/config/aclocal.m4 b/src/libs/pdflib/config/aclocal.m4 deleted file mode 100644 index 49a3273d57..0000000000 --- a/src/libs/pdflib/config/aclocal.m4 +++ /dev/null @@ -1,3583 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- -## Copyright 1996, 1997, 1998, 1999, 2000, 2001 -## Free Software Foundation, Inc. -## Originally by Gordon Matzigkeit , 1996 -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -## -## As a special exception to the GNU General Public License, if you -## distribute this file as part of a program that contains a -## configuration script generated by Autoconf, you may include it under -## the same distribution terms that you use for the rest of that program. - -# serial 46 AC_PROG_LIBTOOL - -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -]) - -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.13)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -_LT_AC_PROG_ECHO_BACKSLASH -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE(libtool-lock, - [ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_SAVE - AC_LANG_C - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_RESTORE]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one - AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, - [AC_TRY_LINK([], - [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); - DllMain (0, 0, 0);], - [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) - - case $host/$CC in - *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) - # old mingw systems require "-dll" to link a DLL, while more recent ones - # require "-mdll" - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -mdll" - AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, - [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) - CFLAGS="$SAVE_CFLAGS" ;; - *-*-cygwin* | *-*-pw32*) - # cygwin systems need to pass --dll to the linker, and not link - # crt.o which will require a WinMain@16 definition. - lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; - esac - ;; - ]) -esac - -_LT_AC_LTCONFIG_HACK - -]) - -# AC_LIBTOOL_HEADER_ASSERT -# ------------------------ -AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT], -[AC_CACHE_CHECK([whether $CC supports assert without backlinking], - [lt_cv_func_assert_works], - [case $host in - *-*-solaris*) - if test "$GCC" = yes && test "$with_gnu_ld" != yes; then - case `$CC --version 2>/dev/null` in - [[12]].*) lt_cv_func_assert_works=no ;; - *) lt_cv_func_assert_works=yes ;; - esac - fi - ;; - esac]) - -if test "x$lt_cv_func_assert_works" = xyes; then - AC_CHECK_HEADERS(assert.h) -fi -])# AC_LIBTOOL_HEADER_ASSERT - -# _LT_AC_CHECK_DLFCN -# -------------------- -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h) -])# _LT_AC_CHECK_DLFCN - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform the above into a raw symbol and a C symbol. -symxfrm='\1 \2\3 \3' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -irix*) - symcode='[[BCDEGRST]]' - ;; -solaris* | sysv5*) - symcode='[[BDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $host_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then - symcode='[[ABCDGISTW]]' -fi - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Write the raw and C identifiers. -lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if egrep ' nm_test_var$' "$nlist" >/dev/null; then - if egrep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr address; -} -lt_preloaded_symbols[[]] = -{ -EOF - sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$no_builtin_flag" - if AC_TRY_EVAL(ac_link) && test -s conftest; then - pipe_works=yes - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AC_FD_CC - fi - else - echo "cannot find nm_test_var in $nlist" >&AC_FD_CC - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC - fi - else - echo "$progname: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" -if test -z "$lt_cv_sys_global_symbol_pipe"; then - global_symbol_to_cdecl= - global_symbol_to_c_name_address= -else - global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" - global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" -fi -if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; -then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - -# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR -# --------------------------------- -AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], -[# Find the correct PATH separator. Usually this is `:', but -# DJGPP uses `;' like DOS. -if test "X${PATH_SEPARATOR+set}" != Xset; then - UNAME=${UNAME-`uname 2>/dev/null`} - case X$UNAME in - *-DOS) lt_cv_sys_path_separator=';' ;; - *) lt_cv_sys_path_separator=':' ;; - esac - PATH_SEPARATOR=$lt_cv_sys_path_separator -fi -])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null && - echo_test_string="`eval $cmd`" && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -AC_DIVERT_POP -])# _LT_AC_PROG_ECHO_BACKSLASH - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ------------------------------------------------------------------ -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[if test "$cross_compiling" = yes; then : - [$4] -else - AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_unknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - -# AC_LIBTOOL_DLOPEN_SELF -# ------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - cygwin* | mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - LDFLAGS="$LDFLAGS $link_static_flag" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - -AC_DEFUN([_LT_AC_LTCONFIG_HACK], -[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except M$VC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" -need_locks="$enable_libtool_lock" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -if test x"$host" != x"$build"; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi - -# Transform linux* to *-*-linux-gnu*, to support old configure scripts. -case $host_os in -linux-gnu*) ;; -linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` -esac - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" - ;; - *) - old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -# Allow CC to be a program name with arguments. -set dummy $CC -compiler="[$]2" - -## FIXME: this should be a separate macro -## -AC_MSG_CHECKING([for objdir]) -rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - objdir=_libs -fi -rmdir .libs 2>/dev/null -AC_MSG_RESULT($objdir) -## -## END FIXME - - -## FIXME: this should be a separate macro -## -AC_ARG_WITH(pic, -[ --with-pic try to use only PIC/non-PIC objects [default=use both]], -pic_mode="$withval", pic_mode=default) -test -z "$pic_mode" && pic_mode=default - -# We assume here that the value for lt_cv_prog_cc_pic will not be cached -# in isolation, and that seeing it set (from the cache) indicates that -# the associated values are set (in the cache) correctly too. -AC_MSG_CHECKING([for $compiler option to produce PIC]) -AC_CACHE_VAL(lt_cv_prog_cc_pic, -[ lt_cv_prog_cc_pic= - lt_cv_prog_cc_shlib= - lt_cv_prog_cc_wl= - lt_cv_prog_cc_static= - lt_cv_prog_cc_no_builtin= - lt_cv_prog_cc_can_build_shared=$can_build_shared - - if test "$GCC" = yes; then - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-static' - - case $host_os in - aix*) - # Below there is a dirty hack to force normal static linking with -ldl - # The problem is because libdl dynamically linked with both libc and - # libC (AIX C++ library), which obviously doesn't included in libraries - # list by gcc. This cause undefined symbols with -static flags. - # This hack allows C programs to be linked with "-static -ldl", but - # not sure about C++ programs. - lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_cv_prog_cc_pic='-fno-common' - ;; - cygwin* | mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_cv_prog_cc_pic=-Kconform_pic - fi - ;; - *) - lt_cv_prog_cc_pic='-fPIC' - ;; - esac - else - # PORTME Check for PIC flags for the system compiler. - case $host_os in - aix3* | aix4* | aix5*) - lt_cv_prog_cc_wl='-Wl,' - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_cv_prog_cc_static='-Bstatic' - else - lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - # PDFlib added - i370*) - lt_cv_prog_cc_wl='-Wl,dll' - lt_cv_prog_cc_pic='-W c,expo,dll -Wc,"GONUM"' - ;; - hpux9* | hpux10* | hpux11*) - # Is there a better lt_cv_prog_cc_static that works with the bundled CC? - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" - lt_cv_prog_cc_pic='+Z' - ;; - - irix5* | irix6*) - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-non_shared' - # PIC (with -KPIC) is the default. - ;; - - cygwin* | mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - - newsos6) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - ;; - - osf3* | osf4* | osf5*) - # All OSF/1 code is PIC. - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-non_shared' - ;; - - sco3.2v5*) - lt_cv_prog_cc_pic='-Kpic' - lt_cv_prog_cc_static='-dn' - lt_cv_prog_cc_shlib='-belf' - ;; - - solaris*) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - lt_cv_prog_cc_wl='-Wl,' - ;; - - sunos4*) - lt_cv_prog_cc_pic='-PIC' - lt_cv_prog_cc_static='-Bstatic' - lt_cv_prog_cc_wl='-Qoption ld ' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - if test "x$host_vendor" = xsni; then - lt_cv_prog_cc_wl='-LD' - else - lt_cv_prog_cc_wl='-Wl,' - fi - ;; - - uts4*) - lt_cv_prog_cc_pic='-pic' - lt_cv_prog_cc_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_cv_prog_cc_pic='-Kconform_pic' - lt_cv_prog_cc_static='-Bstatic' - fi - ;; - - *) - lt_cv_prog_cc_can_build_shared=no - ;; - esac - fi -]) -if test -z "$lt_cv_prog_cc_pic"; then - AC_MSG_RESULT([none]) -else - AC_MSG_RESULT([$lt_cv_prog_cc_pic]) - - # Check to make sure the pic_flag actually works. - AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works]) - AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" - AC_TRY_COMPILE([], [], [dnl - case $host_os in - hpux9* | hpux10* | hpux11*) - # On HP-UX, both CC and GCC only warn that PIC is supported... then - # they create non-PIC objects. So, if there were any warnings, we - # assume that PIC is not supported. - if test -s conftest.err; then - lt_cv_prog_cc_pic_works=no - else - lt_cv_prog_cc_pic_works=yes - fi - ;; - *) - lt_cv_prog_cc_pic_works=yes - ;; - esac - ], [dnl - lt_cv_prog_cc_pic_works=no - ]) - CFLAGS="$save_CFLAGS" - ]) - - if test "X$lt_cv_prog_cc_pic_works" = Xno; then - lt_cv_prog_cc_pic= - lt_cv_prog_cc_can_build_shared=no - else - lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" - fi - - AC_MSG_RESULT([$lt_cv_prog_cc_pic_works]) -fi -## -## END FIXME - -# Check for any special shared library compilation flags. -if test -n "$lt_cv_prog_cc_shlib"; then - AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries]) - if echo "$old_CC $old_CFLAGS " | egrep -e "[[ ]]$lt_cv_prog_cc_shlib[[ ]]" >/dev/null; then : - else - AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure]) - lt_cv_prog_cc_can_build_shared=no - fi -fi - -## FIXME: this should be a separate macro -## -AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works]) -AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl - lt_cv_prog_cc_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" - AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes]) - LDFLAGS="$save_LDFLAGS" -]) - -# Belt *and* braces to stop my trousers falling down: -test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= -AC_MSG_RESULT([$lt_cv_prog_cc_static_works]) - -pic_flag="$lt_cv_prog_cc_pic" -special_shlib_compile_flags="$lt_cv_prog_cc_shlib" -wl="$lt_cv_prog_cc_wl" -link_static_flag="$lt_cv_prog_cc_static" -no_builtin_flag="$lt_cv_prog_cc_no_builtin" -can_build_shared="$lt_cv_prog_cc_can_build_shared" -## -## END FIXME - - -## FIXME: this should be a separate macro -## -# Check to see if options -o and -c are simultaneously supported by compiler -AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext]) -AC_CACHE_VAL([lt_cv_compiler_c_o], [ -$rm -r conftest 2>/dev/null -mkdir conftest -cd conftest -echo "int some_variable = 0;" > conftest.$ac_ext -mkdir out -# According to Tom Tromey, Ian Lance Taylor reported there are C compilers -# that will create temporary files in the current directory regardless of -# the output directory. Thus, making CWD read-only will cause this test -# to fail, enabling locking or at least warning the user not to do parallel -# builds. -# PDFlib GmbH: we don't do this it wows on AIX -#chmod -w . -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" -compiler_c_o=no -if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s out/conftest.err; then - lt_cv_compiler_c_o=no - else - lt_cv_compiler_c_o=yes - fi -else - # Append any errors to the config.log. - cat out/conftest.err 1>&AC_FD_CC - lt_cv_compiler_c_o=no -fi -CFLAGS="$save_CFLAGS" -chmod u+w . -$rm conftest* out/* -rmdir out -cd .. -rmdir conftest -$rm -r conftest 2>/dev/null -]) -compiler_c_o=$lt_cv_compiler_c_o -AC_MSG_RESULT([$compiler_c_o]) - -if test x"$compiler_c_o" = x"yes"; then - # Check to see if we can write to a .lo - AC_MSG_CHECKING([if $compiler supports -c -o file.lo]) - AC_CACHE_VAL([lt_cv_compiler_o_lo], [ - lt_cv_compiler_o_lo=no - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -c -o conftest.lo" - save_objext="$ac_objext" - ac_objext=lo - AC_TRY_COMPILE([], [int some_variable = 0;], [dnl - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - lt_cv_compiler_o_lo=no - else - lt_cv_compiler_o_lo=yes - fi - ]) - ac_objext="$save_objext" - CFLAGS="$save_CFLAGS" - ]) - compiler_o_lo=$lt_cv_compiler_o_lo - AC_MSG_RESULT([$compiler_o_lo]) -else - compiler_o_lo=no -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Check to see if we can do hard links to lock some files if needed -hard_links="nottested" -if test "$compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -if test "$GCC" = yes; then - # Check to see if options -fno-rtti -fno-exceptions are supported by compiler - AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions]) - echo "int some_variable = 0;" > conftest.$ac_ext - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" - compiler_rtti_exceptions=no - AC_TRY_COMPILE([], [int some_variable = 0;], [dnl - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - compiler_rtti_exceptions=no - else - compiler_rtti_exceptions=yes - fi - ]) - CFLAGS="$save_CFLAGS" - AC_MSG_RESULT([$compiler_rtti_exceptions]) - - if test "$compiler_rtti_exceptions" = "yes"; then - no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' - else - no_builtin_flag=' -fno-builtin' - fi -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -# See if the linker supports building shared libraries. -AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries]) - -allow_undefined_flag= -no_undefined_flag= -need_lib_prefix=unknown -need_version=unknown -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -archive_cmds= -archive_expsym_cmds= -old_archive_from_new_cmds= -old_archive_from_expsyms_cmds= -export_dynamic_flag_spec= -whole_archive_flag_spec= -thread_safe_flag_spec= -hardcode_into_libs=no -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no -hardcode_shlibpath_var=unsupported -runpath_var= -link_all_deplibs=unknown -always_export_symbols=no -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' -# include_expsyms should be a list of space-separated symbols to be *always* -# included in the symbol list -include_expsyms= -# exclude_expsyms can be an egrep regular expression of symbols to exclude -# it will be wrapped by ` (' and `)$', so one must not match beginning or -# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', -# as well as any symbol that contains `d'. -exclude_expsyms="_GLOBAL_OFFSET_TABLE_" -# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out -# platforms (ab)use it in PIC code, but their linkers get confused if -# the symbol is explicitly referenced. Since portable code cannot -# rely on this symbol name, it's probably fine to never include it in -# preloaded symbol tables. -extract_expsyms_cmds= - -case $host_os in -cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; -openbsd*) - with_gnu_ld=no - ;; -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX, the GNU linker is very broken - # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=yes - - extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ - sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ - test -f $output_objdir/impgen.exe || (cd $output_objdir && \ - if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ - else $CC -o impgen impgen.c ; fi)~ - $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' - - old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' - - # cygwin and mingw dlls have different entry points and sets of symbols - # to exclude. - # FIXME: what about values for MSVC? - dll_entry=__cygwin_dll_entry@12 - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ - case $host_os in - mingw*) - # mingw values - dll_entry=_DllMainCRTStartup@12 - dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ - ;; - esac - - # mingw and cygwin differ, and it's simplest to just exclude the union - # of the two symbol sets. - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one (in ltdll.c) - if test "x$lt_cv_need_dllmain" = "xyes"; then - ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " - ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ - test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' - else - ltdll_obj= - ltdll_cmds= - fi - - # Extract the symbol export list from an `--export-all' def file, - # then regenerate the def file from the symbol export list, so that - # the compiled dll only exports the symbol export list. - # Be careful not to strip the DATA tag left be newer dlltools. - export_symbols_cmds="$ltdll_cmds"' - $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ - sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' - - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is. - # If DATA tags from a recent dlltool are present, honour them! - archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname-def; - else - echo EXPORTS > $output_objdir/$soname-def; - _lt_hint=1; - cat $export_symbols | while read symbol; do - set dummy \$symbol; - case \[$]# in - 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; - *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;; - esac; - _lt_hint=`expr 1 + \$_lt_hint`; - done; - fi~ - '"$ltdll_cmds"' - $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ - $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ - $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = yes; then - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - case $host_os in - cygwin* | mingw* | pw32*) - # dlltool doesn't understand --whole-archive et. al. - whole_archive_flag_spec= - ;; - *) - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - ;; - esac - fi -else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - hardcode_direct=yes - archive_cmds='' - hardcode_libdir_separator=':' - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - esac - - shared_flag='-shared' - else - # not using gcc - if test "$host_cpu" = ia64; then - shared_flag='${wl}-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall can do strange things, so it is better to - # generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='${wl}-berok' - # This is a bit strange, but is similar to how AIX traditionally builds - # it's shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - ;; - - darwin* | rhapsody*) - case "$host_os" in - rhapsody* | darwin1.[[012]]) - allow_undefined_flag='-undefined suppress' - ;; - *) # Darwin 1.3 on - allow_undefined_flag='-flat_namespace -undefined suppress' - ;; - esac - # FIXME: Relying on posixy $() will cause problems for - # cross-compilation, but unfortunately the echo tests do not - # yet detect zsh echo's removal of \ escapes. - archive_cmds='$nonopt $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags $(test .$module = .yes || echo -install_name $rpath/$soname $verstring)' - # We need to add '_' to the symbols in $export_symbols first - #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' - hardcode_direct=yes - hardcode_shlibpath_var=no - whole_archive_flag_spec='-all_load $convenience' - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9* | hpux10* | hpux11*) - case $host_os in - hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; - *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; - esac - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_minus_L=yes # Not in the search PATH, but as the default - # location of the library. - export_dynamic_flag_spec='${wl}-E' - ;; - - irix5* | irix6*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case "$host_os" in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' - - #Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - sco3.2v5*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - export_dynamic_flag_spec='${wl}-Bexport' - ;; - - solaris*) - # gcc --version < 3.0 without binutils cannot create self contained - # shared libraries reliably, requiring libgcc.a to resolve some of - # the object symbols generated in some cases. Libraries that use - # assert need libgcc.a to resolve __eprintf, for example. Linking - # a copy of libgcc.a into every shared library to guarantee resolving - # such symbols causes other problems: According to Tim Van Holder - # , C++ libraries end up with a separate - # (to the application) exception stack for one thing. - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - case `$CC --version 2>/dev/null` in - [[12]].*) - cat <&2 - -*** Warning: Releases of GCC earlier than version 3.0 cannot reliably -*** create self contained shared libraries on Solaris systems, without -*** introducing a dependency on libgcc.a. Therefore, libtool is disabling -*** -no-undefined support, which will at least allow you to build shared -*** libraries. However, you may find that when you link such libraries -*** into an application without using GCC, you have to manually add -*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to -*** upgrade to a newer version of GCC. Another option is to rebuild your -*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. - -EOF - no_undefined_flag= - ;; - esac - fi - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - if test "x$host_vendor" = xsno; then - archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - else - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv5*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec= - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4.2uw2*) - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=no - hardcode_shlibpath_var=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - sysv5uw7* | unixware7*) - no_undefined_flag='${wl}-z ${wl}text' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac -fi -AC_MSG_RESULT([$ld_shlibs]) -test "$ld_shlibs" = no && can_build_shared=no -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Check hardcoding attributes. -AC_MSG_CHECKING([how to hardcode library paths into programs]) -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var"; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$hardcode_shlibpath_var" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -AC_MSG_RESULT([$hardcode_action]) -## -## END FIXME - -## FIXME: this should be a separate macro -## -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) -fi -## -## END FIXME - -reload_cmds='$LD$reload_flag -o $output$reload_objs' -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -## FIXME: this should be a separate macro -## -# PORTME Fill in your ld.so characteristics -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}.so$major' - ;; - -aix4* | aix5*) - version_type=linux - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can - # not hardcode correct soname into executable. Probably we can - # add versioning support to collect2, so additional links can - # be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}.so$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}.so' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi4*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - export_dynamic_flag_spec=-rdynamic - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - need_version=no - need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin*) - library_names_spec='$libname.dll.a' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' - postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog .libs/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - ;; - yes,mingw*) - library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` - ;; - yes,pw32*) - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' - ;; - *) - library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - # FIXME: Relying on posixy $() will cause problems for - # cross-compilation, but unfortunately the echo tests do not - # yet detect zsh echo's removal of \ escapes. - - #PDFlib changed: we need .dylib even with -module - #library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' - #soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' - library_names_spec='${libname}${release}${versuffix}.dylib ${libname}${release}${major}.dylib ${libname}.dylib' - soname_spec='${libname}${release}${major}.dylib' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd*) - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - *) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - dynamic_linker="$host_os dld.sl" - version_type=sunos - need_lib_prefix=no - need_version=no - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' - soname_spec='${libname}${release}.sl$major' - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6*) - version_type=irix - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' - case $host_os in - irix5*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux-gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' - soname_spec='${libname}${release}.so$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case "$host_os" in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -os2*) - libname_spec='$name' - need_lib_prefix=no - library_names_spec='$libname.dll $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_version=no - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' - soname_spec='$libname.so.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Report the final consequences. -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) -## -## END FIXME - -## FIXME: this should be a separate macro -## -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case "$host_os" in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) -## -## END FIXME - -## FIXME: this should be a separate macro -## -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) -## -## END FIXME - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -AC_LIBTOOL_DLOPEN_SELF - -## FIXME: this should be a separate macro -## -if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - AC_CACHE_VAL([lt_cv_archive_cmds_need_lc], - [$rm conftest* - echo 'static int dummy;' > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile); then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_cv_prog_cc_wl - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi]) - AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc]) - ;; - esac -fi -need_lc=${lt_cv_archive_cmds_need_lc-yes} -## -## END FIXME - -## FIXME: this should be a separate macro -## -# The second clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - : -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - test -f Makefile && make "$ltmain" -fi - -if test -f "$ltmain"; then - trap "$rm \"${ofile}T\"; exit 1" 1 2 15 - $rm -f "${ofile}T" - - echo creating $ofile - - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS \ - AR AR_FLAGS CC LD LN_S NM SHELL \ - reload_flag reload_cmds wl \ - pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ - thread_safe_flag_spec whole_archive_flag_spec libname_spec \ - library_names_spec soname_spec \ - RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ - old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ - postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ - old_striplib striplib file_magic_cmd export_symbols_cmds \ - deplibs_check_method allow_undefined_flag no_undefined_flag \ - finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ - global_symbol_to_c_name_address \ - hardcode_libdir_flag_spec hardcode_libdir_separator \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do - - case $var in - reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ - extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - cat <<__EOF__ > "${ofile}T" -#! $SHELL - -# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996-2000 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="sed -e s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$need_lc - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# The default C compiler. -CC=$lt_CC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_pic_flag -pic_mode=$pic_mode - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_compiler_c_o - -# Can we write directly to a .lo ? -compiler_o_lo=$lt_compiler_o_lo - -# Must we lock files when doing compilation ? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_link_static_flag - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - case $host_os in - aix3*) - cat <<\EOF >> "${ofile}T" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - case $host_os in - cygwin* | mingw* | pw32* | os2*) - cat <<'EOF' >> "${ofile}T" - # This is a source program that is used to create dlls on Windows - # Don't remove nor modify the starting and closing comments -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ - # This is a source program that is used to create import libraries - # on Windows for dlls which lack them. Don't remove nor modify the - # starting and closing comments -# /* impgen.c starts here */ -# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. -# -# This file is part of GNU libtool. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# */ -# -# #include /* for printf() */ -# #include /* for open(), lseek(), read() */ -# #include /* for O_RDONLY, O_BINARY */ -# #include /* for strdup() */ -# -# /* O_BINARY isn't required (or even defined sometimes) under Unix */ -# #ifndef O_BINARY -# #define O_BINARY 0 -# #endif -# -# static unsigned int -# pe_get16 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[2]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 2); -# return b[0] + (b[1]<<8); -# } -# -# static unsigned int -# pe_get32 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[4]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 4); -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# static unsigned int -# pe_as32 (ptr) -# void *ptr; -# { -# unsigned char *b = ptr; -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# int -# main (argc, argv) -# int argc; -# char *argv[]; -# { -# int dll; -# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; -# unsigned long export_rva, export_size, nsections, secptr, expptr; -# unsigned long name_rvas, nexp; -# unsigned char *expdata, *erva; -# char *filename, *dll_name; -# -# filename = argv[1]; -# -# dll = open(filename, O_RDONLY|O_BINARY); -# if (dll < 1) -# return 1; -# -# dll_name = filename; -# -# for (i=0; filename[i]; i++) -# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') -# dll_name = filename + i +1; -# -# pe_header_offset = pe_get32 (dll, 0x3c); -# opthdr_ofs = pe_header_offset + 4 + 20; -# num_entries = pe_get32 (dll, opthdr_ofs + 92); -# -# if (num_entries < 1) /* no exports */ -# return 1; -# -# export_rva = pe_get32 (dll, opthdr_ofs + 96); -# export_size = pe_get32 (dll, opthdr_ofs + 100); -# nsections = pe_get16 (dll, pe_header_offset + 4 +2); -# secptr = (pe_header_offset + 4 + 20 + -# pe_get16 (dll, pe_header_offset + 4 + 16)); -# -# expptr = 0; -# for (i = 0; i < nsections; i++) -# { -# char sname[8]; -# unsigned long secptr1 = secptr + 40 * i; -# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); -# unsigned long vsize = pe_get32 (dll, secptr1 + 16); -# unsigned long fptr = pe_get32 (dll, secptr1 + 20); -# lseek(dll, secptr1, SEEK_SET); -# read(dll, sname, 8); -# if (vaddr <= export_rva && vaddr+vsize > export_rva) -# { -# expptr = fptr + (export_rva - vaddr); -# if (export_rva + export_size > vaddr + vsize) -# export_size = vsize - (export_rva - vaddr); -# break; -# } -# } -# -# expdata = (unsigned char*)malloc(export_size); -# lseek (dll, expptr, SEEK_SET); -# read (dll, expdata, export_size); -# erva = expdata - export_rva; -# -# nexp = pe_as32 (expdata+24); -# name_rvas = pe_as32 (expdata+32); -# -# printf ("EXPORTS\n"); -# for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) - - mv -f "${ofile}T" "$ofile" || \ - (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") - chmod +x "$ofile" -fi -## -## END FIXME - -])# _LT_AC_LTCONFIG_HACK - -# AC_LIBTOOL_DLOPEN - enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) - -# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) - -# AC_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AC_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(shared, -changequote(<<, >>)dnl -<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case $enableval in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl -]) - -# AC_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no)]) - -# AC_ENABLE_STATIC - implement the --enable-static flag -# Usage: AC_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(static, -changequote(<<, >>)dnl -<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case $enableval in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_static=AC_ENABLE_STATIC_DEFAULT)dnl -]) - -# AC_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no)]) - - -# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag -# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(fast-install, -changequote(<<, >>)dnl -<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case $enableval in -yes) enable_fast_install=yes ;; -no) enable_fast_install=no ;; -*) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl -]) - -# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no)]) - -# AC_LIBTOOL_PICMODE - implement the --with-pic flag -# Usage: AC_LIBTOOL_PICMODE[(MODE)] -# Where MODE is either `yes' or `no'. If omitted, it defaults to -# `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default)]) - - -# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in - /*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; - ?:/*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC_CMD="$MAGIC_CMD" - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC_CMD="$ac_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -]) - - -# AC_PATH_MAGIC - find a file program which can recognise a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl -AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH) - else - MAGIC_CMD=: - fi -fi -]) - - -# AC_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH(gnu-ld, -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], -test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | [[A-Za-z]]:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$lt_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_PROG_LD_GNU -]) - -# AC_PROG_LD_GNU - -AC_DEFUN([AC_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - lt_cv_prog_gnu_ld=yes -else - lt_cv_prog_gnu_ld=no -fi]) -with_gnu_ld=$lt_cv_prog_gnu_ld -]) - -# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. -AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], -[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, -[lt_cv_ld_reload_flag='-r']) -reload_flag=$lt_cv_ld_reload_flag -test -n "$reload_flag" && reload_flag=" $reload_flag" -]) - -# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], -[AC_CACHE_CHECK([how to recognise dependant libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given egrep regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi4*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin* | mingw* | pw32*) - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' - lt_cv_file_magic_cmd='/usr/bin/file -L' - case "$host_os" in - rhapsody* | darwin1.[[012]]) - lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` - ;; - *) # Darwin 1.3 on - lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' - ;; - esac - ;; - -freebsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20*|hpux11*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - -irix5* | irix6*) - case $host_os in - irix5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" - ;; - *) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" - ;; - esac - lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux-gnu*) - case $host_cpu in - alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) - lt_cv_deplibs_check_method=pass_all ;; - *) - # glibc up to 2.1.1 does not perform some relocations on ARM - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; - esac - lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -openbsd*) - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' - else - lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' - fi - ;; - -osf3* | osf4* | osf5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' - lt_cv_file_magic_test_file=/shlib/libc.so - lt_cv_deplibs_check_method=pass_all - ;; - -sco3.2v5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - lt_cv_file_magic_test_file=/lib/libc.so - ;; - -sysv5uw[[78]]* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - esac - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -]) - - -# AC_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl -AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/${ac_tool_prefix}nm - if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then - lt_cv_path_NM="$tmp_nm -B" - break - elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - lt_cv_path_NM="$tmp_nm -p" - break - else - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -AC_MSG_RESULT([$NM]) -]) - -# AC_CHECK_LIBM - check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32*) - # These system don't have libm - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, main, LIBM="-lm") - ;; -esac -]) - -# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl convenience library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-convenience to the -# configure arguments. Note that LIBLTDL and INCLTDL are not -# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not -# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed -# with '${top_builddir}/' and INCLTDL will be prefixed with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) -]) - -# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl installable library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-install to the configure -# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is -# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed -# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will -# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed -# with '${top_srcdir}/' (note the single quotes!). If your package is -# not flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, main, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - INCLTDL= - fi -]) - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) diff --git a/src/libs/pdflib/config/config.guess b/src/libs/pdflib/config/config.guess deleted file mode 100755 index dff9e481b7..0000000000 --- a/src/libs/pdflib/config/config.guess +++ /dev/null @@ -1,1317 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2001-09-04' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Written by Per Bothner . -# Please send patches to . -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c ; - for c in cc gcc c89 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; - if test $? = 0 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - rm -f $dummy.c $dummy.o $dummy.rel ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # Netbsd (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-unknown ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - *) machine=${UNAME_MACHINE}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE}" in - i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - cat <$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - eval $set_cc_for_build - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 2-1307) - UNAME_MACHINE="alphaev68" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - arc64:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hkmips:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - sparc*:NetBSD:*) - echo `uname -p`-unknown-netbsd${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - case "${HPUX_REV}" in - 11.[0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - esac ;; - esac - fi ;; - esac - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy - fi ;; - esac - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i386-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in - big) echo mips-unknown-linux-gnu && exit 0 ;; - little) echo mipsel-unknown-linux-gnu && exit 0 ;; - esac - ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - ld_supported_targets=`cd /; ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-pc-linux-gnu\n", argv[1]); -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-pc-linux-gnuaout\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:[78]*) - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then - UNAME_MACHINE=pc - fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-[KW]:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -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` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/libs/pdflib/config/config.sub b/src/libs/pdflib/config/config.sub deleted file mode 100755 index 393f13d373..0000000000 --- a/src/libs/pdflib/config/config.sub +++ /dev/null @@ -1,1411 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2001-09-07' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | c4x | clipper \ - | d10v | d30v | dsp16xx \ - | fr30 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | m32r | m68000 | m68k | m88k | mcore \ - | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el | mips64vr4300 \ - | mips64vr4300el | mips64vr5000 | mips64vr5000el \ - | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ - | mipsisa32 \ - | mn10200 | mn10300 \ - | ns16k | ns32k \ - | openrisc \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | s390 | s390x \ - | sh | sh[34] | sh[34]eb | shbe | shle \ - | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ - | stormy16 | strongarm \ - | tahoe | thumb | tic80 | tron \ - | v850 \ - | we32k \ - | x86 | xscale \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alphapca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armv*-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c54x-* \ - | clipper-* | cray2-* | cydra-* \ - | d10v-* | d30v-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | m32r-* \ - | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ - | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ - | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | s390-* | s390x-* \ - | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ - | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ - | v850-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [cjt]90) - basic_machine=${basic_machine}-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon) - basic_machine=i686-pc - ;; - pentiumii | pentium2) - basic_machine=i686-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sparclite-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=t3e-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - windows32) - basic_machine=i386-pc - os=-windows32-msvcrt - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4 | sh3eb | sh4eb) - basic_machine=sh-unknown - ;; - sparc | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto*) - os=-nto-qnx - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -vxsim* | -vxworks*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/libs/pdflib/config/install-sh b/src/libs/pdflib/config/install-sh deleted file mode 100755 index e9de23842d..0000000000 --- a/src/libs/pdflib/config/install-sh +++ /dev/null @@ -1,251 +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=: - chmodcmd="" - 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/src/libs/pdflib/config/ltmain.sh b/src/libs/pdflib/config/ltmain.sh deleted file mode 100644 index b6d6777766..0000000000 --- a/src/libs/pdflib/config/ltmain.sh +++ /dev/null @@ -1,5031 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" - -# Parse our command line options once, thoroughly. -while test $# -gt 0 -do - arg="$1" - shift - - case $arg in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - execute_dlfiles) - execute_dlfiles="$execute_dlfiles $arg" - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case $arg in - --help) - show_help=yes - ;; - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - exit 0 - ;; - - --config) - sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 - exit 0 - ;; - - --debug) - echo "$progname: enabling shell trace mode" - set -x - ;; - - --dry-run | -n) - run=: - ;; - - --features) - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - exit 0 - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --quiet | --silent) - show=: - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 -fi - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - case $nonopt in - *cc | *++ | gcc* | *-gcc*) - mode=link - for arg - do - case $arg in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case $mode in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - prev= - lastarg= - srcfile="$nonopt" - suppress_output= - - user_target=no - for arg - do - case $prev in - "") ;; - xcompiler) - # Aesthetically quote the previous argument. - prev= - lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - - case $arg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - continue - ;; - esac - - # Accept any command-line options. - case $arg in - -o) - if test "$user_target" != "no"; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi - user_target=next - ;; - - -static) - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - lastarg="$lastarg $arg" - done - IFS="$save_ifs" - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - continue - ;; - esac - - case $user_target in - next) - # The next one is the -o target name - user_target=yes - continue - ;; - yes) - # We got the output file - user_target=set - libobj="$arg" - continue - ;; - esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. - - # Backslashify any backslashes, double quotes, and dollar signs. - # These are the only characters that are still specially - # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $lastarg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - done - - case $user_target in - set) - ;; - no) - # Get the name of the library object. - libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; - *) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSfmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case $libobj in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; - *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit 1 - ;; - esac - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $libobj" - else - removelist="$libobj" - fi - - $run $rm $removelist - trap "$run $rm $removelist; exit 1" 1 2 15 - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2*) - pic_mode=default - ;; - esac - if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit 1" 1 2 15 - else - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $run ln "$0" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - echo "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - echo $srcfile > "$lockfile" - fi - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - # PDFlib add $srcfile as last argument - if test "$pic_mode" != no; then - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $pic_flag -DPIC" - else - # Don't build PIC code - command="$base_compile" - fi - if test "$build_old_libs" = yes; then - lo_libobj="$libobj" - dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$libobj"; then - dir="$objdir" - else - dir="$dir/$objdir" - fi - libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - - if test -d "$dir"; then - $show "$rm $libobj" - $run $rm $libobj - else - $show "$mkdir $dir" - $run $mkdir $dir - status=$? - if test $status -ne 0 && test ! -d $dir; then - exit $status - fi - fi - fi - if test "$compiler_o_lo" = yes; then - output_obj="$libobj" - command="$command -o $output_obj $srcfile" - elif test "$compiler_c_o" = yes; then - output_obj="$obj" - command="$command -o $output_obj $srcfile" - fi - - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - test -n "$output_obj" && $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then - echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed, then go on to compile the next one - if test x"$output_obj" != x"$libobj"; then - $show "$mv $output_obj $libobj" - if $run $mv $output_obj $libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # If we have no pic_flag, then copy the object into place and finish. - if (test -z "$pic_flag" || test "$pic_mode" != default) && - test "$build_old_libs" = yes; then - # Rename the .lo from within objdir to obj - if test -f $obj; then - $show $rm $obj - $run $rm $obj - fi - - $show "$mv $libobj $obj" - if $run $mv $libobj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` - libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - # Now arrange that obj and lo_libobj become the same file - $show "(cd $xdir && $LN_S $baseobj $libobj)" - if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $run $rm "$lockfile" - fi - exit 0 - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # PDFlib add $srcfile as last argument - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile" - else - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $pic_flag -DPIC" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj $srcfile" - output_obj="$obj" - else - command="$command $srcfile" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then - echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed - if test x"$output_obj" != x"$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Create an invalid libtool object if no PIC, so that we do not - # accidentally link it into a program. - if test "$build_libtool_libs" != yes; then - $show "echo timestamp > $libobj" - $run eval "echo timestamp > \$libobj" || exit $? - else - # Move the .lo from within objdir - $show "$mv $libobj $lo_libobj" - if $run $mv $libobj $lo_libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - fi - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $run $rm "$lockfile" - fi - - exit 0 - ;; - - # libtool link mode - link | relink) - modename="$modename: link" - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invokation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args="$nonopt" - compile_command="$nonopt" - finalize_command="$nonopt" - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - # PDFlib added - linkopts= - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -all-static | -static) - if test "X$arg" = "X-all-static"; then - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - else - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - fi - build_libtool_libs=no - build_old_libs=yes - prefer_static_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test $# -gt 0; do - arg="$1" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit 1 - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - # PDFlib added - framework) - linkopts="$linkopts -framework $arg" - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n $prev - - prevarg="$arg" - - case $arg in - # PDFlib added - -framework) - prev=framework - continue - ;; - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: more than one -exported-symbols argument is not allowed" - exit 1 - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; - esac - continue - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - exit 1 - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - case :$dllsearchpath: in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-pw32* | *-*-beos*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-mingw* | *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -o) prev=output ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - - *.lo | *.$objext) - # A library or standard object. - if test "$prev" = dlfiles; then - # This file was specified with -dlopen. - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $arg" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` - prev= - else - case $arg in - *.lo) libobjs="$libobjs $arg" ;; - *) objs="$objs $arg" ;; - esac - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done # argument parsing loop - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. - if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi - - # Determine the type of output - case $output in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - libs="$libs $deplib" - done - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - case $linkmode in - lib) - passes="conv link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 - exit 1 - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - for pass in $passes; do - if test $linkmode = prog; then - # Determine which files to process - case $pass in - dlopen) - libs="$dlfiles" - save_deplibs="$deplibs" # Collect dlpreopened libraries - deplibs= - ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) - if test $linkmode = oldlib && test $linkmode = obj; then - $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 - continue - fi - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do - # Search the libtool library - lib="$searchdir/lib${name}.la" - if test -f "$lib"; then - found=yes - break - fi - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test $pass = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test $pass = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test $pass = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - if test "$deplibs_check_method" != pass_all; then - echo - echo "*** Warning: This library needs some functionality provided by $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - else - echo - echo "*** Warning: Linking the shared library $output against the" - echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue - ;; - prog) - if test $pass != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - if test $found = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. - if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variable installed. - installed=yes - - # Read the .la file - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test $linkmode = oldlib && test $linkmode = obj; }; then - # Add dl[pre]opened files of deplib - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test $pass = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit 1 - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - elif test $linkmode != prog && test $linkmode != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi - continue - fi # $pass = conv - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit 1 - fi - - # This library was specified with -dlopen. - if test $pass = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. - dlprefiles="$dlprefiles $lib" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" - fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi # $installed = yes - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. - if test $pass = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test $linkmode = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" - fi - continue - fi - - if test $linkmode = prog && test $pass != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test $linkalldeplibs = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - link_static=no # Whether the deplib will be linked statically - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - # Link against this shared library - - if test "$linkmode,$pass" = "prog,link" || - { test $linkmode = lib && test $hardcode_into_libs = yes; }; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - if test $linkmode = prog; then - # We need to hardcode the library path - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - esac - fi - fi - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin*) - major=`expr $current - $age` - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - soname=`echo $soroot | sed -e 's/^.*\///'` - newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - save_ifs="$IFS"; IFS='~' - eval cmds=\"$extract_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - save_ifs="$IFS"; IFS='~' - eval cmds=\"$old_archive_from_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n $old_archive_from_expsyms_cmds - - if test $linkmode = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit 1 - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test $linkmode = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test $linkmode = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - add="-l$name" - fi - - if test $linkmode = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test $linkmode = prog; then - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - - # Try to link the static library - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - echo "*** Warning: This library needs some functionality provided by $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** Therefore, libtool will create a static module, that should work " - echo "*** as long as the dlopening application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test $linkmode = lib; then - if test -n "$dependency_libs" && - { test $hardcode_into_libs != yes || test $build_old_libs = yes || - test $link_static = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - - if test $link_all_deplibs != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in - -L*) path="$deplib" ;; - *.la) - dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$deplib" && dir="." - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - fi - ;; - esac - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - if test "$absdir" != "$libdir"; then - $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 - fi - path="-L$absdir" - fi - ;; - *) continue ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$deplibs $path" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test $pass = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test $pass != dlopen; then - test $pass != scan && dependency_libs="$newdependency_libs" - if test $pass != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - *) - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - if test "$pass" = "conv" && - { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then - libs="$deplibs" # reset libs - deplibs= - fi - done # for pass - if test $linkmode = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 - fi - - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 - fi - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval libname=\"$libname_spec\" - ;; - *) - if test "$module" = no; then - $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - eval libname=\"$libname_spec\" - else - libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 - exit 1 - else - echo - echo "*** Warning: Linking the shared library $output against the non-libtool" - echo "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - if test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 - fi - - set dummy $rpath - if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - libext=al - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 - fi - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - IFS="$save_ifs" - - if test -n "$8"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - current="$2" - revision="$3" - age="$4" - - # Check that each of the things are valid numbers. - case $current in - 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; - *) - $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case $revision in - 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; - *) - $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case $age in - 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; - *) - $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - minor_current=`expr $current + 1` - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - - irix) - major=`expr $current - $age + 1` - verstring="sgi$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test $loop != 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` - verstring="sgi$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - ;; - - osf) - major=`expr $current - $age` - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - major=`expr $current - $age` - versuffix="-$major" - ;; - - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - verstring="0.0" - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring="" - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - fi - - if test "$mode" != relink; then - # Remove our outputs. - $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" - $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - for path in $notinst_path; do - lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` - deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` - dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test $hardcode_into_libs != yes || test $build_old_libs = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs -framework System" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test $build_libtool_need_lc = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behaviour. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $rm conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null \ - | grep " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | sed 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ - | sed 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - for a_deplib in $deplibs; do - name="`expr $a_deplib : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. - if test -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - if eval echo \"$potent_lib\" 2>/dev/null \ - | sed 10q \ - | egrep "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ - -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | - grep . >/dev/null; then - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - echo "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test $allow_undefined = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test $hardcode_into_libs = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval library_names=\"$library_names_spec\" - set dummy $library_names - realname="$2" - shift; shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - test -z "$dlname" && dlname=$soname - - lib="$output_objdir/$realname" - for link - do - linknames="$linknames $link" - done - - # Ensure that we have .o objects for linkers which dislike .lo - # (e.g. aix) in case we are running --disable-static - for obj in $libobjs; do - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - if test ! -f $xdir/$oldobj; then - $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" - $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? - fi - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - eval cmds=\"$export_symbols_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then - $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" - $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - $show "$mv \"${export_symbols}T\" \"$export_symbols\"" - $run eval '$mv "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' - fi - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case $xlib in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval cmds=\"$archive_expsym_cmds\" - else - # PDFlib GmbH: remove duplicate libraries here - case $host in - *-*-rhapsody* | *-*-darwin*) - # On Rhapsody avoid duplicate libs - for i in $deplibs; do - case $i in - *.al) ;; - *) temp_deplibs="$temp_deplibs $i";; - esac - done - deplibs=$temp_deplibs - ;; - esac - eval cmds=\"$archive_cmds $linkopts\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? - exit 0 - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 - fi - - case $output in - *.lo) - if test -n "$objs$old_deplibs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit 1 - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e "$lo2o"` - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $run $rm $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case $xlib in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - eval cmds=\"$reload_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - $show "echo timestamp > $libobj" - $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - eval cmds=\"$reload_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - else - # Just create a symlink. - $show $rm $libobj - $run $rm $libobj - xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$libobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - $show "(cd $xdir && $LN_S $oldobj $baseobj)" - $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - ;; - - prog) - case $host in - *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 - fi - - if test "$preload" = yes; then - if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && - test "$dlopen_self_static" = unknown; then - $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." - fi - fi - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - case :$dllsearchpath: in - *":$libdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${outputname}S.c" - else - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - fi - fi - - if test -n "$dlsyms"; then - case $dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${outputname}.nm" - - $show "$rm $nlist ${nlist}S ${nlist}T" - $run $rm "$nlist" "${nlist}S" "${nlist}T" - - # Parse the name list into a source file. - $show "creating $output_objdir/$dlsyms" - - test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - $show "generating symbol list for \`$output'" - - test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for arg in $progfiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - if test -n "$export_symbols_regex"; then - $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols - $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else - $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi - fi - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - name=`echo "$arg" | sed -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -z "$run"; then - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $mv "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$dlsyms" - fi - - $echo >> "$output_objdir/$dlsyms" "\ - -#undef lt_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr address; -} -lt_preloaded_symbols[] = -{\ -" - - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" - - $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - fi - - pic_flag_for_symtable= - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" - $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" - - # Transform the symbol file into the correct name. - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - ;; - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit 1 - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test $need_relink = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # PDFlib added $linkopts - link_command="$compile_command$linkopts$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - $show "$link_command" - $run eval "$link_command" - status=$? - - # Delete the generated files. - if test -n "$dlsyms"; then - $show "$rm $output_objdir/${outputname}S.${objext}" - $run $rm "$output_objdir/${outputname}S.${objext}" - fi - - exit $status - fi - - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) - # Absolute path. - rpath="$rpath$dir:" - ;; - *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" - ;; - esac - done - temp_rpath="$rpath" - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - # PDFlib added $linkopts - link_command="$compile_var$compile_command$linkopts$compile_rpath" - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $run $rm $output - # Link the executable and exit - $show "$link_command" - $run eval "$link_command" || exit $? - exit 0 - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - # PDFlib added $linkopts - link_command="$compile_var$compile_command$linkopts$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 - $echo "$modename: \`$output' will be relinked during installation" 1>&2 - else - if test "$fast_install" != no; then - # PDFlib added $linkopts - link_command="$finalize_var$compile_command$linkopts$finalize_rpath" - if test "$fast_install" = yes; then - # PDFlib added $linkopts - relink_command=`$echo "X$compile_var$compile_command$linkopts$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - # PDFlib added $linkopts - link_command="$compile_var$compile_command$linkopts$compile_rpath" - relink_command="$finalize_var$finalize_command$linkopts$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname - - $show "$link_command" - $run eval "$link_command" || exit $? - - # Now create the wrapper script. - $show "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - relink_command="cd `pwd`; $relink_command" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $echo for shipping. - if test "X$echo" = "X$SHELL $0 --fallback-echo"; then - case $0 in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; - *) qecho="$SHELL `pwd`/$0 --fallback-echo";; - esac - qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) output=`echo $output|sed 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) exeext=.exe ;; - *) exeext= ;; - esac - $rm $output - trap "$rm $output; exit 1" 1 2 15 - - $echo > $output "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variable: - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - echo=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$echo works! - : - else - # Restart under the correct shell, and then maybe \$echo will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $echo >> $output "\ - - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - echo >> $output "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $mkdir \"\$progdir\" - else - $rm \"\$progdir/\$file\" - fi" - - echo >> $output "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $echo \"\$relink_command_output\" >&2 - $rm \"\$progdir/\$file\" - exit 1 - fi - fi - - $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $rm \"\$progdir/\$program\"; - $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $rm \"\$progdir/\$file\" - fi" - else - echo >> $output "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - echo >> $output "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $echo >> $output "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # win32 systems need to use the prog path for dll - # lookup to work - *-*-cygwin* | *-*-pw32*) - $echo >> $output "\ - exec \$progdir/\$program \${1+\"\$@\"} -" - ;; - - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2*) - $echo >> $output "\ - exec \$progdir\\\\\$program \${1+\"\$@\"} -" - ;; - - *) - $echo >> $output "\ - # Export the path to the program. - PATH=\"\$progdir:\$PATH\" - export PATH - - exec \$program \${1+\"\$@\"} -" - ;; - esac - $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" - exit 1 - fi - else - # The program doesn't exist. - \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 - \$echo \"This script is just a wrapper for \$program.\" 1>&2 - echo \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" - chmod +x $output - fi - exit 0 - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - # Add in members from convenience archives. - for xlib in $addlibs; do - # Extract the objects. - case $xlib in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` - done - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else - # Ensure that we have .o objects in place in case we decided - # not to build a shared library, and have fallen back to building - # static libs even though --disable-static was passed! - for oldobj in $oldobjs; do - if test ! -f $oldobj; then - xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$oldobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` - obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - $show "(cd $xdir && ${LN_S} $obj $baseobj)" - $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? - fi - done - - eval cmds=\"$old_archive_cmds\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$generated"; then - $show "${rm}r$generated" - $run ${rm}r$generated - fi - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - $show "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. - if test -z "$run"; then - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlfiles="$newdlfiles $libdir/$name" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlprefiles="$newdlprefiles $libdir/$name" - done - dlprefiles="$newdlprefiles" - fi - $rm $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $echo > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test $need_relink = yes; then - $echo >> $output "\ -relink_command=\"$relink_command\"" - fi - done - fi - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" - $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? - ;; - esac - exit 0 - ;; - - # libtool install mode - install) - modename="$modename: install" - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg="$nonopt" - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest="$arg" - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) prev="-f" ;; - -g) prev="-g" ;; - -m) prev="-m" ;; - -o) prev="-o" ;; - -s) - stripme=" -s" - continue - ;; - -*) ;; - - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest="$arg" - continue - fi - ;; - esac - - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit 1 - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - library_names= - old_library= - relink_command= - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - if test -n "$relink_command"; then - $echo "$modename: warning: relinking \`$file'" 1>&2 - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - continue - fi - fi - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$srcname $destdir/$realname" - $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? - if test -n "$stripme" && test -n "$striplib"; then - $show "$striplib $destdir/$realname" - $run eval "$striplib $destdir/$realname" || exit $? - fi - - if test $# -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do - if test "$linkname" != "$realname"; then - $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - fi - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - eval cmds=\"$postinstall_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - instname="$dir/$name"i - $show "$install_prog $instname $destdir/$name" - $run eval "$install_prog $instname $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` - - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit 0 - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then - $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - relink_command= - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - if test "$finalize" = yes && test -z "$run"; then - tmpdir="/tmp" - test -n "$TMPDIR" && tmpdir="$TMPDIR" - tmpdir="$tmpdir/libtool-$$" - if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : - else - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi - file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - ${rm}r "$tmpdir" - continue - fi - file="$outputname" - else - $echo "$modename: warning: cannot relink \`$file'" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in - /usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - destfile=`echo $destfile | sed -e 's,.exe$,,'` - ;; - esac - ;; - esac - $show "$install_prog$stripme $file $destfile" - $run eval "$install_prog\$stripme \$file \$destfile" || exit $? - test -n "$outputname" && ${rm}r "$tmpdir" - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? - - if test -n "$stripme" && test -n "$striplib"; then - $show "$old_striplib $oldlib" - $run eval "$old_striplib $oldlib" || exit $? - fi - - # Do each command in the postinstall commands. - eval cmds=\"$old_postinstall_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $0 --finish$current_libdirs' - else - exit 0 - fi - ;; - - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - eval cmds=\"$finish_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || admincmds="$admincmds - $cmd" - done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - test "$show" = ":" && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - echo " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - echo " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - echo " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - echo "See any operating system documentation about shared libraries for" - echo "more information, such as the ld(1) and ld.so(8) manual pages." - echo "----------------------------------------------------------------------" - exit 0 - ;; - - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit 1 - fi - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test ! -f "$file"; then - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Read the libtool library. - dlname= - library_names= - - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit 1 - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; - - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done - - if test -z "$run"; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved enviroment variables - if test "${save_LC_ALL+set}" = set; then - LC_ALL="$save_LC_ALL"; export LC_ALL - fi - if test "${save_LANG+set}" = set; then - LANG="$save_LANG"; export LANG - fi - - # Now prepare to actually exec the command. - exec_cmd='"$cmd"$args' - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - fi - $echo "$cmd$args" - exit 0 - fi - ;; - - # libtool clean and uninstall mode - clean | uninstall) - modename="$modename: $mode" - rm="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) rm="$rm $arg"; rmforce=yes ;; - -*) rm="$rm $arg" ;; - *) files="$files $arg" ;; - esac - done - - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - rmdirs= - - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$file"; then - dir=. - objdir="$objdir" - else - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - test $mode = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test $mode = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if (test -L "$file") >/dev/null 2>&1 \ - || (test -h "$file") >/dev/null 2>&1 \ - || test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - - if test $mode = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - eval cmds=\"$old_postuninstall_cmds\" - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" - fi - # FIXME: should reinstall the best remaining shared library. - fi - fi - ;; - - *.lo) - if test "$build_old_libs" = yes; then - oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` - rmfiles="$rmfiles $dir/$oldobj" - fi - ;; - - *) - # Do a test to see if this is a libtool program. - if test $mode = clean && - (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - fi - ;; - esac - $show "$rm $rmfiles" - $run $rm $rmfiles || exit_status=1 - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - $show "rmdir $dir" - $run rmdir $dir >/dev/null 2>&1 - fi - done - - exit $exit_status - ;; - - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 - ;; - esac - - if test -z "$exec_cmd"; then - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 - fi -fi # test -z "$show_help" - -if test -n "$exec_cmd"; then - eval "exec \$cmd$args" - exit 1 -fi - -# We need to display help for each of the modes. -case $mode in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - - --config show all configuration variables - --debug enable verbose shell tracing --n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --version print version information - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE." - exit 0 - ;; - -clean) - $echo \ -"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - -compile) - $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -static always build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - -execute) - $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - -finish) - $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - -install) - $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - -uninstall) - $echo \ -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; -esac - -echo -$echo "Try \`$modename --help' for more information about other modes." - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/src/libs/pdflib/config/mkbind.inc.in b/src/libs/pdflib/config/mkbind.inc.in deleted file mode 100644 index b33c2bca14..0000000000 --- a/src/libs/pdflib/config/mkbind.inc.in +++ /dev/null @@ -1,43 +0,0 @@ -# Template to be included from every makefile that creates bindings -# $Id: mkbind.inc.in 14574 2005-10-29 16:27:43Z bonefish $ -# - -all:: $(BASEPROGS) $(LIBNAME) - -# The actual shared library for the language support -$(LIBNAME):: $(CONVENIENT) $(OBJ) - $(RM) $(LIBNAME) - $(LIBTOOL_LD) $(CC) -o $@ $(OBJ) -module -rpath $(LANG_LIBDIR) \ - $(CONVENIENT) $(BINDEXTERNALLIBS) $(EXTERNALLIBS) - @-if test -f .libs/libpdf_java.dylib; then \ - ln .libs/libpdf_java.dylib .libs/libpdf_java.jnilib; \ - fi - -clean:: - -$(RM) *.$(OBJ) *$(LO) *$(LA) $(LIBNAME) *.bak .libs *.pdf - -distclean:: clean - -$(RM) m.out ms.out - -depend:: .dummy - cp Makefile Makefile.bak - sed '/^# Automatically generated dependencies/q' Makefile.bak >Makefile - $(CC) $(CFLAGS) -MM $(SRC) | sed 's/\.o:/$$(LO):/g' >>Makefile - -ctags:: - -install:: - -uninstall:: - -.PHONY: clean - -.dummy: - -.SUFFIXES: .c .$(OBJ) $(LO) - -.c$(LO): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< - -.c.$(OBJ): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< diff --git a/src/libs/pdflib/config/mkcommon.inc.in b/src/libs/pdflib/config/mkcommon.inc.in deleted file mode 100644 index 5a4ce10bd1..0000000000 --- a/src/libs/pdflib/config/mkcommon.inc.in +++ /dev/null @@ -1,120 +0,0 @@ -# Template to be included from every makefile that creates libs/progs -# $Id: mkcommon.inc.in 14574 2005-10-29 16:27:43Z bonefish $ -# -# -# The Makefile that uses this template has to set -# top_builddir = ... -# before including $(top_builddir)/config/mkcommon.inc -# -# if PEDANTIC don't work in this Makefile use: -# CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES) -# after including this template -# - -srcdir = . - -# general stuff (configure) -VPATH = $srcdir -VERSION = @VERSION@ -SHELL = @SHELL@ -INSTALL = $(top_builddir)/config/install-sh -c -INSTALL_DATA = ${INSTALL} -m 644 -EXE = @EXEEXT@ -OBJ = @OBJEXT@ -CC = @CC@ -CXX = @CXX@ -STDCPP = @STDCPP@ -RM = @RM@ -BINDINGS = @BINDINGS@ -PSPBINDINGS = @PSPBINDINGS@ -LIBTARGETS = @LIBTARGETS@ -BINDTARGETS = @BINDTARGETS@ -PROGTARGETS = @PROGTARGETS@ -PTFDIR = @PTFDIR@ - -# build related stuff (configure) -PDFPEDANTIC = @PDFPEDANTIC@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ - -# libtool specific -LA = .la -LO = .lo -WITH_SHARED = @WITH_SHARED@ -RPATH = @RPATH@ - -LIBTOOL = $(top_builddir)/libtool --silent -LIBTOOL_CC = $(LIBTOOL) --mode=compile -LIBTOOL_LD = $(LIBTOOL) --mode=link -LIBTOOL_EXE = $(LIBTOOL) --mode=execute -dlopen $(LIBNAME) - - -# Perl -PERLLIBDIR = @PERLLIBDIR@ -PERLINCLUDE = @PERLINCLUDE@ -PERLLINK = @PERLLINK@ -PERL = @PERL@ -PERLBOOLDEF = @PERLBOOLDEF@ - -PYTHONLIBDIR = @PYTHONLIBDIR@ -PYINCLUDE = @PYINCLUDE@ - -RUBYINCLUDE = @RUBYINCLUDE@ - -TCLINCLUDE = @TCLINCLUDE@ -TCLPACKAGEDIR = @TCLPACKAGEDIR@ -TCLBIN = @TCLBIN@ - -CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES) $(PDFPEDANTIC) $(MYCFLAGS) - -# PDFlib includes -PDFLIBINC = @PDFLIBINC@ -TIFFLIBINC = @TIFFLIBINC@ -JPEGLIBINC = @JPEGLIBINC@ -ZLIBINC = @FLATELIBINC@ -FLATELIBINC = @FLATELIBINC@ -PNGLIBINC = @PNGLIBINC@ -PDCORELIBINC = @PDCORELIBINC@ -PDILIBINC = @PDILIBINC@ -PDPAGELIBINC = @PDPAGELIBINC@ -PDULIBINC = @PDULIBINC@ -TETLIBINC = @TETLIBINC@ -PSPLIBINC = @PSPLIBINC@ -JAVAINCLUDE = @JAVAINCLUDE@ - -# libs stuff -MATHLIB = @MATHLIB@ -INTERNALLIBS = @INTERNALLIBS@ -EXTERNALLIBS = @EXTERNALLIBS@ -PDFLIBNAME = @PDFLIBNAME@ -LTVERSIONINFO = @LTVERSIONINFO@ -PDFLIBCONVENIENT= @PDFLIBCONVENIENT@ -CONVENIENT = $(PDFLIBCONVENIENT) - -# libs -PDFLIBLINK = @PDFLIBLINK@ -PDFLIB_LINK = @PDFLIB_LINK@ -TIFFLIBLINK = @TIFFLIBLINK@ -JPEGLIBLINK = @JPEGLIBLINK@ -FLATELIBLINK = @FLATELIBLINK@ -PNGLIBLINK = @PNGLIBLINK@ -PDCORELIBLINK = @PDCORELIBLINK@ -PDILIBLINK = @PDILIBLINK@ -PDPAGELIBLINK = @PDPAGELIBLINK@ - -# TET libs -TETLIBLINK = @TETLIBLINK@ -TETLIB_LINK = @TETLIB_LINK@ - -# PSP libs -PSPLIBLINK = @PSPLIBLINK@ -PSPLIB_LINK = @PSPLIB_LINK@ - -PDULIBLINK = @PDULIBLINK@ - -# installation directories (configure) -prefix = @prefix@ -exec_prefix = @exec_prefix@ -libdir = @libdir@ -includedir = @includedir@ -bindir = @bindir@ diff --git a/src/libs/pdflib/config/mklibs.inc.in b/src/libs/pdflib/config/mklibs.inc.in deleted file mode 100644 index 0855b21387..0000000000 --- a/src/libs/pdflib/config/mklibs.inc.in +++ /dev/null @@ -1,40 +0,0 @@ -# Template to be included from every makefile that creates libs -# $Id: mklibs.inc.in 14574 2005-10-29 16:27:43Z bonefish $ -# - -all:: $(LIBNAME) - -$(LIBNAME): $(OBJS) - $(LIBTOOL_LD) $(CC) -o $@ $(OBJS) $(LIBTOOL_LDOPT) - -clean:: - -$(RM) *.$(OBJ) *$(LO) *$(LA) *.bak .libs - -distclean:: clean - -$(RM) m.out ms.out - -depend:: .dummy - cp Makefile Makefile.bak - sed '/^# Automatically generated dependencies/q' Makefile.bak >Makefile - $(CC) $(CFLAGS) -MM $(SRC) | sed 's/\.o:/$$(LO):/g' >>Makefile - -install:: - -uninstall:: - -test:: - -smoke:: - -.PHONY: clean - -.dummy: - -# suffixes -.SUFFIXES: .c .$(OBJ) $(LO) - -.c$(LO): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< - -.c.$(OBJ): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< diff --git a/src/libs/pdflib/config/mkmainlib.inc b/src/libs/pdflib/config/mkmainlib.inc deleted file mode 100644 index 849ebe1f25..0000000000 --- a/src/libs/pdflib/config/mkmainlib.inc +++ /dev/null @@ -1,46 +0,0 @@ -# Template to be included from every makefile that creates libs -# $Id: mkmainlib.inc 14574 2005-10-29 16:27:43Z bonefish $ -# - -LIBLINKSELF = $(RPATH) $(MAINOBJ) $(INTERNALLIBS) $(EXTERNALLIBS) - -all:: $(MAINLIBNAME) - -$(MAINLIBNAME): $(MAINOBJ) $(INTERNALLIBS) - $(LIBTOOL_LD) $(CC) $(LDFLAGS) -o $@ $(LIBLINKSELF) -export-dynamic - -clean:: - -$(RM) $(MAINLIBNAME) - -depend:: - $(CC) $(CFLAGS) -MM $(MAINSRC) | sed 's/\.o:/$$(LO):/g' >>Makefile - -install:: $(MAINLIBNAME) - if test ! -d $(libdir) ; then \ - mkdir -p $(libdir); \ - chmod 755 $(libdir); \ - fi - if test ! -d $(includedir) ; then \ - mkdir -p $(includedir); \ - chmod 755 $(includedir); \ - fi - $(INSTALL_DATA) $(MAININC) $(includedir) - @-if test "$(WITH_SHARED)" = "no"; then \ - cp .libs/$(MAINLIBNAME) .libs/$(MAINLIBNAME)i;\ - fi - $(LIBTOOL) $(INSTALL_DATA) $(MAINLIBNAME) $(libdir); - @-if test "$(WITH_SHARED)" = "yes"; then \ - $(LIBTOOL) -n --finish $(libdir);\ - else\ - rm -f .libs/$(MAINLIBNAME)i;\ - fi - -uninstall:: .dummy - $(RM) $(includedir)/$(MAININC) - -$(LIBTOOL) --mode=uninstall $(RM) $(libdir)/$(MAINLIBNAME) - -test:: - -smoke:: - -.PHONY: clean diff --git a/src/libs/pdflib/config/mkprogs.inc.in b/src/libs/pdflib/config/mkprogs.inc.in deleted file mode 100644 index db1b74b25e..0000000000 --- a/src/libs/pdflib/config/mkprogs.inc.in +++ /dev/null @@ -1,47 +0,0 @@ -# Template to be included from every makefile that creates progs -# $Id: mkprogs.inc.in 14574 2005-10-29 16:27:43Z bonefish $ -# - -PROGS_BUILD = $(LIBTOOL_LD) $(CC) -static $(FLAGS) -o $@ \ - $@.c $(EXTRA_SOURCES) $(LIBS) -CXXPROGS_BUILD = $(LIBTOOL_LD) $(CXX) -static $(CXXFLAGS) -o $@ \ - $@.cpp $(EXTRA_SOURCES) $(LIBS) - -all:: $(PROGS) - -clean:: - -$(RM) *.$(OBJ) *$(LO) *$(LA) $(PROGS) *.bak .libs - -distclean:: clean - -$(RM) m.out ms.out - -depend:: - -ctags:: - -install:: - -uninstall:: - -test:: - -smoke:: - -.PHONY: clean - -.dummy: - - -.SUFFIXES: .$(OBJ) $(LO) - -.c$(LO): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< - -.c.$(OBJ): - $(LIBTOOL_CC) $(CC) -c $(CPPFLAGS) $(CFLAGS) $< - -.cpp$(LO): - $(LIBTOOL_CC) $(CXX) -c $(CXXFLAGS) $< - -.cpp.$(OBJ): - $(LIBTOOL_CC) $(CXX) -c $(CXXFLAGS) $< diff --git a/src/libs/pdflib/config/mksubdirs.inc.in b/src/libs/pdflib/config/mksubdirs.inc.in deleted file mode 100644 index 13f967c84b..0000000000 --- a/src/libs/pdflib/config/mksubdirs.inc.in +++ /dev/null @@ -1,79 +0,0 @@ -# Template to be included from every makefile that handles subdirs -# $Id: mksubdirs.inc.in 14574 2005-10-29 16:27:43Z bonefish $ -# -# -# The Makefile that uses this template has to set -# SUB_DIRS = ... -# -# additional actions may be done by using any of the makelabels with -# two colons. -# -# i.e. -# install:: .dummy -# $(INSTALL) pdflib-config $(bindir) - -# ------------------------- default target ------------------------------- -all:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) all);\ - done - -# --------------------------- test --------------------------------- -test:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) test);\ - done - -# --------------------------- pditest --------------------------------- -smoke:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) smoke);\ - done - -# --------------------------- install --------------------------------- -install:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) install);\ - done - -# --------------------------- uninstall --------------------------------- -uninstall:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) uninstall);\ - done - -# --------------------------- clean --------------------------------- -clean:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) clean);\ - done - -# ----------------------- distclean --------------------------------- -distclean:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) distclean);\ - done - rm -rf m.out ms.out - -# --------------------------- depend -------------------------------- -depend:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) depend);\ - done - -# --------------------------- ctags --------------------------------- -ctags:: .dummy - @for i in $(SUB_DIRS);\ - do\ - (cd $$i && $(MAKE) $(MAKEOPT) ctags);\ - done - -.dummy: diff --git a/src/libs/pdflib/configure b/src/libs/pdflib/configure deleted file mode 100755 index ea8da27a95..0000000000 --- a/src/libs/pdflib/configure +++ /dev/null @@ -1,9174 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by Autoconf 2.52. -# -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Find the correct PATH separator. Usually this is `:', but -# DJGPP uses `;' like DOS. -if test "X${PATH_SEPARATOR+set}" != Xset; then - UNAME=${UNAME-`uname 2>/dev/null`} - case X$UNAME in - *-DOS) lt_cv_sys_path_separator=';' ;; - *) lt_cv_sys_path_separator=':' ;; - esac - PATH_SEPARATOR=$lt_cv_sys_path_separator -fi - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null && - echo_test_string="`eval $cmd`" && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - -# 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 - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi - -# Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } - -# 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` - -exec 6>&1 - -# -# Initializations. -# -ac_default_prefix=/usr/local -cross_compiling=no -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -ac_unique_file="libs/pdcore/pc_config.h" - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# 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. -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_prev= -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 - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_option in - - -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 | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "enable_$ac_feature='$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 ;; - - -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 ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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) - 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 ;; - - -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_$ac_package='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=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 ;; - - -*) { 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 && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - 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'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: should be removed in autoconf 3.0. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - 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 - -# 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 its parent. - ac_prog=$0 - ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP -ac_env_CXX_set=${CXX+set} -ac_env_CXX_value=$CXX -ac_cv_env_CXX_set=${CXX+set} -ac_cv_env_CXX_value=$CXX -ac_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_env_CXXFLAGS_value=$CXXFLAGS -ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_cv_env_CXXFLAGS_value=$CXXFLAGS - -# -# 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 < if you have libraries in a - nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -EOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue - cd $ac_subdir - # A "../" for each directory in /$ac_subdir. - ac_dots=`echo $ac_subdir | - sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` - - case $srcdir in - .) # No --srcdir option. We are building in place. - ac_sub_srcdir=$srcdir ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_sub_srcdir=$srcdir/$ac_subdir ;; - *) # Relative path. - ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; - esac - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_sub_srcdir/configure.gnu; then - echo - $SHELL $ac_sub_srcdir/configure.gnu --help=recursive - elif test -f $ac_sub_srcdir/configure; then - echo - $SHELL $ac_sub_srcdir/configure --help=recursive - elif test -f $ac_sub_srcdir/configure.ac || - test -f $ac_sub_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 - fi - cd $ac_popdir - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\EOF - -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -EOF - exit 0 -fi -exec 5>config.log -cat >&5 </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` -hostinfo = `(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` - -PATH = $PATH - -_ASUNAME -} >&5 - -cat >&5 <\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - ac_sep=" " ;; - *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" - ac_sep=" " ;; - esac - # Get rid of the leading space. -done - -# 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. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - echo >&5 - echo "## ----------------- ##" >&5 - echo "## Cache variables. ##" >&5 - echo "## ----------------- ##" >&5 - echo >&5 - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} >&5 - sed "/^$/d" confdefs.h >conftest.log - if test -s conftest.log; then - echo >&5 - echo "## ------------ ##" >&5 - echo "## confdefs.h. ##" >&5 - echo "## ------------ ##" >&5 - echo >&5 - cat conftest.log >&5 - fi - (echo; echo) >&5 - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" >&5 - echo "$as_me: exit $exit_status" >&5 - rm -rf conftest* confdefs* core core.* *.core 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 -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:1021: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - cat "$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 - { echo "$as_me:1032: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi -else - { echo "$as_me:1040: creating cache $cache_file" >&5 -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 `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) - { echo "$as_me:1056: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:1060: error: \`$ac_var' was not set in the previous run" >&5 -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 - { echo "$as_me:1066: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:1068: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:1070: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. It doesn't matter if - # we pass some twice (in addition to the command line arguments). - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" - ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:1089: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:1091: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -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 - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac -echo "#! $SHELL" >conftest.sh -echo "exit 0" >>conftest.sh -chmod +x conftest.sh -if { (echo "$as_me:1111: PATH=\".;.\"; conftest.sh") >&5 - (PATH=".;."; conftest.sh) 2>&5 - ac_status=$? - echo "$as_me:1114: \$? = $ac_status" >&5 - (exit $ac_status); }; then - ac_path_separator=';' -else - ac_path_separator=: -fi -PATH_SEPARATOR="$ac_path_separator" -rm -f conftest.sh - -VERSION="5.0.3" -PDFLIB_MAJOR=5 -PDFLIB_MINOR=0 -PDFLIB_REVISION=3 - -PDFLIB_LTCURRENT=4 -PDFLIB_LTREVISION=1 -PDFLIB_LTAGE=2 - -LTVERSIONINFO="$PDFLIB_LTCURRENT:$PDFLIB_LTREVISION:$PDFLIB_LTAGE" - -PDFPWD=`pwd` - -PDFLIBNAME=pdf -MATHLIB="-lm" - -# Check whether --with-pdflibname or --without-pdflibname was given. -if test "${with_pdflibname+set}" = set; then - withval="$with_pdflibname" - PDFLIBNAME="$withval" -fi; - -# Check whether --with-libm or --without-libm was given. -if test "${with_libm+set}" = set; then - withval="$with_libm" - MATHLIB="$withval" -fi; - -ac_aux_dir= -for ac_dir in config $srcdir/config; 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 - { { echo "$as_me:1168: error: cannot find install-sh or install.sh in config $srcdir/config" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in config $srcdir/config" >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - -# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- -## Copyright 1996, 1997, 1998, 1999, 2000, 2001 -## Free Software Foundation, Inc. -## Originally by Gordon Matzigkeit , 1996 -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -## -## As a special exception to the GNU General Public License, if you -## distribute this file as part of a program that contains a -## configuration script generated by Autoconf, you may include it under -## the same distribution terms that you use for the rest of that program. - -# serial 46 AC_PROG_LIBTOOL - -# AC_LIBTOOL_HEADER_ASSERT -# ------------------------ -# AC_LIBTOOL_HEADER_ASSERT - -# _LT_AC_CHECK_DLFCN -# -------------------- -# _LT_AC_CHECK_DLFCN - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- - # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - -# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR -# --------------------------------- -# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -# _LT_AC_PROG_ECHO_BACKSLASH - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ------------------------------------------------------------------ -# _LT_AC_TRY_DLOPEN_SELF - -# AC_LIBTOOL_DLOPEN_SELF -# ------------------- -# AC_LIBTOOL_DLOPEN_SELF - -# _LT_AC_LTCONFIG_HACK - -# AC_LIBTOOL_DLOPEN - enable checks for dlopen support - -# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's - -# AC_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AC_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. - -# AC_DISABLE_SHARED - set the default shared flag to --disable-shared - -# AC_ENABLE_STATIC - implement the --enable-static flag -# Usage: AC_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. - -# AC_DISABLE_STATIC - set the default static flag to --disable-static - -# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag -# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. - -# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install - -# AC_LIBTOOL_PICMODE - implement the --with-pic flag -# Usage: AC_LIBTOOL_PICMODE[(MODE)] -# Where MODE is either `yes' or `no'. If omitted, it defaults to -# `both'. - -# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library - -# AC_PATH_MAGIC - find a file program which can recognise a shared library - -# AC_PROG_LD - find the path to the GNU or non-GNU linker - -# AC_PROG_LD_GNU - - -# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. - -# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics - -# AC_PROG_NM - find the path to a BSD-compatible name lister - -# AC_CHECK_LIBM - check for math library - -# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl convenience library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-convenience to the -# configure arguments. Note that LIBLTDL and INCLTDL are not -# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not -# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed -# with '${top_builddir}/' and INCLTDL will be prefixed with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. - -# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl installable library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-install to the configure -# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is -# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed -# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will -# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed -# with '${top_srcdir}/' (note the single quotes!). If your package is -# not flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. - -# old names - -# This is just to silence aclocal about the macro not being used - -# Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:1312: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:1316: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:1325: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:1329: error: $ac_config_sub $ac_cv_build_alias failed." >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:1334: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 -build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -echo "$as_me:1341: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:1350: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:1355: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 -host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -echo "$as_me:1362: checking MACHDEP" >&5 -echo $ECHO_N "checking MACHDEP... $ECHO_C" >&6 -if test -z "$MACHDEP" -then - if test -f /usr/lib/NextStep/software_version; then - set X `hostinfo | grep 'NeXT Mach.*:' | \ - sed -e 's/://' -e 's/\./_/'` && \ - ac_sys_system=next && ac_sys_release=$4 - MACHDEP="$ac_sys_system$ac_sys_release$ac_sys_cpu" - else - ac_sys_system=`uname -s` - if test "$ac_sys_system" = "AIX" ; then - ac_sys_release=`uname -v` - else - ac_sys_release=`uname -r` - fi - ac_md_system=`echo $ac_sys_system | - tr -d '/ ' | tr '[A-Z]' '[a-z]'` - ac_md_release=`echo $ac_sys_release | - tr -d '/ ' | sed 's/\..*//'` - MACHDEP="$ac_md_system$ac_md_release" - fi - case MACHDEP in - '') MACHDEP=unknown;; - esac -fi - -echo "$as_me:1389: result: $MACHDEP" >&5 -echo "${ECHO_T}$MACHDEP" >&6 - -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 -echo "$as_me:1400: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="${ac_tool_prefix}gcc" -echo "$as_me:1415: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:1423: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:1426: result: no" >&5 -echo "${ECHO_T}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 -echo "$as_me:1435: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="gcc" -echo "$as_me:1450: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:1458: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:1461: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -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 -echo "$as_me:1474: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="${ac_tool_prefix}cc" -echo "$as_me:1489: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:1497: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:1500: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:1509: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="cc" -echo "$as_me:1524: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:1532: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:1535: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -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 -echo "$as_me:1548: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue -fi -ac_cv_prog_CC="cc" -echo "$as_me:1568: found $ac_dir/$ac_word" >&5 -break -done - -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 - set dummy "$ac_dir/$ac_word" ${1+"$@"} - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:1590: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:1593: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl - 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 -echo "$as_me:1604: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -echo "$as_me:1619: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:1627: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:1630: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:1643: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="$ac_prog" -echo "$as_me:1658: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:1666: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:1669: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CC" && break -done - - CC=$ac_ct_CC -fi - -fi - -test -z "$CC" && { { echo "$as_me:1681: error: no acceptable cc found in \$PATH" >&5 -echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:1686:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1689: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:1692: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:1694: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:1697: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:1699: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:1702: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -#line 1706 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe" -# 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. -echo "$as_me:1722: checking for C compiler default output" >&5 -echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:1725: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:1728: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. -for ac_file in `ls a.exe conftest.exe 2>/dev/null; - ls a.out conftest 2>/dev/null; - ls a.* conftest.* 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; - a.out ) # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool --akim. - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1751: error: C compiler cannot create executables" >&5 -echo "$as_me: error: C compiler cannot create executables" >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext -echo "$as_me:1757: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:1762: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&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' - { (eval echo "$as_me:1768: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:1771: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:1778: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:1786: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext -ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:1793: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:1795: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:1798: checking for executable suffix" >&5 -echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 -if { (eval echo "$as_me:1800: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:1803: \$? = $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 `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - { { echo "$as_me:1819: error: cannot compute EXEEXT: cannot compile and link" >&5 -echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:1825: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -echo "$as_me:1831: checking for object suffix" >&5 -echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 1837 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (eval echo "$as_me:1849: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:1852: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1864: error: cannot compute OBJEXT: cannot compile" >&5 -echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -echo "$as_me:1871: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -echo "$as_me:1875: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 1881 "configure" -#include "confdefs.h" - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1896: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:1899: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1902: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:1905: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_compiler_gnu=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:1917: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:1923: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 1929 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1941: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:1944: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1947: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:1950: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_prog_cc_g=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:1960: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$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 -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1987: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:1990: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1993: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:1996: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - ''\ - '#include ' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -#line 2008 "configure" -#include "confdefs.h" -#include -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:2021: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:2024: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2027: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:2030: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -continue -fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 2040 "configure" -#include "confdefs.h" -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:2052: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:2055: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2058: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:2061: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -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 -echo "$as_me:2093: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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 - echo $ECHO_N "(cached) $ECHO_C" >&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. - # 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 -#line 2114 "configure" -#include "confdefs.h" -#include - Syntax error -_ACEOF -if { (eval echo "$as_me:2119: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:2125: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 - cat 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 non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -#line 2148 "configure" -#include "confdefs.h" -#include -_ACEOF -if { (eval echo "$as_me:2152: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:2158: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 - cat 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 -echo "$as_me:2195: result: $CPP" >&5 -echo "${ECHO_T}$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. - # 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 -#line 2205 "configure" -#include "confdefs.h" -#include - Syntax error -_ACEOF -if { (eval echo "$as_me:2210: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:2216: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 - cat 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 non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -#line 2239 "configure" -#include "confdefs.h" -#include -_ACEOF -if { (eval echo "$as_me:2243: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:2249: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 - cat 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 - { { echo "$as_me:2277: error: C preprocessor \"$CPP\" fails sanity check" >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&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 - -# 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" -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:2300: checking for a BSD compatible install" >&5 -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_IFS=$IFS; IFS=$ac_path_separator - for ac_dir in $PATH; do - IFS=$ac_save_IFS - # Account for people who put trailing slashes in PATH elements. - case $ac_dir/ in - / | ./ | .// | /cC/* \ - | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ - | /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 - if $as_executable_p "$ac_dir/$ac_prog"; then - if test $ac_prog = install && - grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - -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. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL=$ac_install_sh - fi -fi -echo "$as_me:2349: result: $INSTALL" >&5 -echo "${ECHO_T}$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' - -SHELL="/bin/sh" -RM="rm -rf" - -INCLUDES= - -PLATFORM_ID=$ac_sys_system -PLATFORM="-DPDF_PLATFORM=\\\"\"$ac_sys_system\"\\\"" - -case $ac_sys_system in - aix*|AIX*) - DEFINES="$DEFINES -DAIX";; - - cyg*|CYG*) DEFINES="$DEFINES -U_WIN32 -UWIN32 -U__WIN32__ -U_Windows";; - - hp*|HP*) - if test "$GCC" = ""; then - DEFINES="$DEFINES -Ae" - fi;; - - osf1*|OSF1*) - if test "$GCC" = ""; then - DEFINES="$DEFINES -pthread" - fi;; - - SunOS*) - ac_sys_arch=`uname -p` - if test "$ac_sys_arch" = "i386" ; then - PLATFORM_ID="SunOS-i386" - PLATFORM="-DPDF_PLATFORM=\\\"\"sunOS\"\\\"" - fi - - if test "$GCC" = ""; then - DEFINES="$DEFINES -xmemalign" - fi - ;; - - rhapsody|Rhapsody*) - PLATFORM="-DPDF_PLATFORM=\\\"\"Mac OS X Server\"\\\"" - with_gnu_ld=yes - MATHLIB="";; - - darwin|Darwin*) - PLATFORM="-DPDF_PLATFORM=\\\"\"Mac OS X\"\\\"" - PLATFORM_ID="MacOSX" - with_gnu_ld=yes - MATHLIB="";; - - linux|Linux*) - ac_sys_arch=`uname -m` - if test "$ac_sys_arch" = "s390" ; then - PLATFORM_ID="zSeries-Linux" - PLATFORM="-DPDF_PLATFORM=\\\"\"ZSeries Linux\"\\\"" - fi - if test "$ac_sys_arch" = "ppc" ; then - PLATFORM_ID="ppc-Linux" - PLATFORM="-DPDF_PLATFORM=\\\"\"ppc Linux\"\\\"" - fi - # neccesary to be compatible with glibc 2.3.2 on RH 9 - if test "$ac_sys_arch" = "i686" ; then - DEFINES="$DEFINES -D__NO_CTYPE" - fi - if test "$ac_sys_arch" = "ia64" ; then - PLATFORM_ID="Linux-ia64" - PLATFORM="-DPDF_PLATFORM=\\\"\"Linux-ia64\"\\\"" - fi - ;; - - FreeBSD) - tmp_vers=`uname -r` - case $tmp_vers in - 5.*) - PLATFORM="-DPDF_PLATFORM=\\\"\"FreeBSD5\"\\\"" ;; - esac - ;; - - OpenBSD) - tmp_vers=`uname -r` - if test "$tmp_vers" = "3.4" ; then - PLATFORM="-DPDF_PLATFORM=\\\"\"OpenBSD34\"\\\"" - fi - ;; - - *OS/390*) - DEFINES="$DEFINES -DOS390" - CC=c89 - LD=c89 - PLATFORM_ID=OS390 - PLATFORM="-DPDF_PLATFORM=\\\"\"zSeries USS\"\\\"" - # add special compile options for java2 on s390 - set X `java -version 2>&1 | grep '1.3.'` && \ - DEFINES="$DEFINES -W \"c,langlvl(extended)\" -W \"c,float(ieee)\"" - ;; - - *) ;; -esac - -GENERATED_FILES="" - -WITH_DEBUG=no - -WITH_XPLINK=no -# Check whether --enable-xplink or --disable-xplink was given. -if test "${enable_xplink+set}" = set; then - enableval="$enable_xplink" - if test "$enableval" = "yes" ; then - WITH_XPLINK=yes -fi -fi; - -if test "$WITH_XPLINK" = "yes"; then - case $ac_sys_system in - *OS/390*) - DEFINES="-W \"c,xplink\" -W \"l,xplink\" -1 -W c,expo,dll -W c,GONUM $DEFINES" - ;; - *) ;; - esac -fi - -WITH_SHARED=yes - -WITH_PROFILE=no - -# Check whether --enable-debug or --disable-debug was given. -if test "${enable_debug+set}" = set; then - enableval="$enable_debug" - if test "$enableval" = "yes" ; then - WITH_DEBUG=yes -fi -fi; - -# Check whether --enable-profile or --disable-profile was given. -if test "${enable_profile+set}" = set; then - enableval="$enable_profile" - if test "$enableval" = "yes" ; then - WITH_PROFILE=yes -fi -fi; - -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} -case $enableval in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_shared=yes -fi; -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} -case $enableval in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_static=yes -fi; -# Check whether --enable-fast-install or --disable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval="$enable_fast_install" - p=${PACKAGE-default} -case $enableval in -yes) enable_fast_install=yes ;; -no) enable_fast_install=no ;; -*) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_fast_install=yes -fi; -# Find the correct PATH separator. Usually this is `:', but -# DJGPP uses `;' like DOS. -if test "X${PATH_SEPARATOR+set}" != Xset; then - UNAME=${UNAME-`uname 2>/dev/null`} - case X$UNAME in - *-DOS) lt_cv_sys_path_separator=';' ;; - *) lt_cv_sys_path_separator=':' ;; - esac - PATH_SEPARATOR=$lt_cv_sys_path_separator -fi - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi; -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:2585: checking for ld used by GCC" >&5 -echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo "$as_me:2615: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -else - echo "$as_me:2618: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - echo "$as_me:2648: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 -else - echo "$as_me:2651: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -test -z "$LD" && { { echo "$as_me:2654: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:2657: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - lt_cv_prog_gnu_ld=yes -else - lt_cv_prog_gnu_ld=no -fi -fi -echo "$as_me:2669: result: $lt_cv_prog_gnu_ld" >&5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -with_gnu_ld=$lt_cv_prog_gnu_ld - -echo "$as_me:2673: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -echo "$as_me:2680: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 -reload_flag=$lt_cv_ld_reload_flag -test -n "$reload_flag" && reload_flag=" $reload_flag" - -echo "$as_me:2685: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/${ac_tool_prefix}nm - if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then - lt_cv_path_NM="$tmp_nm -B" - break - elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - lt_cv_path_NM="$tmp_nm -p" - break - else - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi -fi - -NM="$lt_cv_path_NM" -echo "$as_me:2721: result: $NM" >&5 -echo "${ECHO_T}$NM" >&6 - -echo "$as_me:2724: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - echo "$as_me:2728: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else - echo "$as_me:2731: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 -fi - -echo "$as_me:2735: checking how to recognise dependant libraries" >&5 -echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given egrep regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi4*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin* | mingw* | pw32*) - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' - lt_cv_file_magic_cmd='/usr/bin/file -L' - case "$host_os" in - rhapsody* | darwin1.[012]) - lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` - ;; - *) # Darwin 1.3 on - lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' - ;; - esac - ;; - -freebsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20*|hpux11*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - -irix5* | irix6*) - case $host_os in - irix5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" - ;; - *) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" - ;; - esac - lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux-gnu*) - case $host_cpu in - alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) - lt_cv_deplibs_check_method=pass_all ;; - *) - # glibc up to 2.1.1 does not perform some relocations on ARM - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; - esac - lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -openbsd*) - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' - else - lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' - fi - ;; - -osf3* | osf4* | osf5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' - lt_cv_file_magic_test_file=/shlib/libc.so - lt_cv_deplibs_check_method=pass_all - ;; - -sco3.2v5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - lt_cv_file_magic_test_file=/lib/libc.so - ;; - -sysv5uw[78]* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - esac - ;; -esac - -fi -echo "$as_me:2913: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method - -# Check for command to grab the raw symbol name followed by C symbol from nm. -echo "$as_me:2919: checking command to parse $NM output" >&5 -echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6 -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform the above into a raw symbol and a C symbol. -symxfrm='\1 \2\3 \3' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -irix*) - symcode='[BCDEGRST]' - ;; -solaris* | sysv5*) - symcode='[BDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $host_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then - symcode='[ABCDGISTW]' -fi - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Write the raw and C identifiers. -lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:3003: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:3007: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:3010: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if egrep ' nm_test_var$' "$nlist" >/dev/null; then - if egrep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr address; -} -lt_preloaded_symbols[] = -{ -EOF - sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo "$as_me:3062: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:3065: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest; then - pipe_works=yes - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" -if test -z "$lt_cv_sys_global_symbol_pipe"; then - global_symbol_to_cdecl= - global_symbol_to_c_name_address= -else - global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" - global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" -fi -if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; -then - echo "$as_me:3106: result: failed" >&5 -echo "${ECHO_T}failed" >&6 -else - echo "$as_me:3109: result: ok" >&5 -echo "${ECHO_T}ok" >&6 -fi - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:3116: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 3122 "configure" -#include "confdefs.h" -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:3126: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:3132: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:3151: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in - /*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; - ?:/*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC_CMD="$MAGIC_CMD" - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin:$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC_CMD="$ac_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - echo "$as_me:3220: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 -else - echo "$as_me:3223: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - echo "$as_me:3229: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in - /*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; - ?:/*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC_CMD="$MAGIC_CMD" - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin:$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC_CMD="$ac_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - echo "$as_me:3284: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 -else - echo "$as_me:3287: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -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 -echo "$as_me:3303: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -echo "$as_me:3318: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - echo "$as_me:3326: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 -else - echo "$as_me:3329: result: no" >&5 -echo "${ECHO_T}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 -echo "$as_me:3338: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_RANLIB="ranlib" -echo "$as_me:3353: found $ac_dir/$ac_word" >&5 -break -done - - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - echo "$as_me:3362: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 -else - echo "$as_me:3365: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - RANLIB=$ac_ct_RANLIB -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:3377: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_STRIP="${ac_tool_prefix}strip" -echo "$as_me:3392: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:3400: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:3403: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:3412: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_STRIP="strip" -echo "$as_me:3427: found $ac_dir/$ac_word" >&5 -break -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:3436: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:3439: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -enable_dlopen=yes -enable_win32_dll=yes - -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" - -fi; -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 3463 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:3464: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:3467: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - echo "$as_me:3488: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -#line 3501 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3513: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:3516: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3519: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:3522: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -lt_cv_cc_needs_belf=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -echo "$as_me:3538: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - -*-*-cygwin* | *-*-mingw* | *-*-pw32*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -echo "$as_me:3550: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" -echo "$as_me:3565: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - echo "$as_me:3573: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6 -else - echo "$as_me:3576: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -echo "$as_me:3585: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_DLLTOOL="dlltool" -echo "$as_me:3600: found $ac_dir/$ac_word" >&5 -break -done - - test -z "$ac_cv_prog_ac_ct_DLLTOOL" && ac_cv_prog_ac_ct_DLLTOOL="false" -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - echo "$as_me:3609: result: $ac_ct_DLLTOOL" >&5 -echo "${ECHO_T}$ac_ct_DLLTOOL" >&6 -else - echo "$as_me:3612: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - DLLTOOL=$ac_ct_DLLTOOL -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -echo "$as_me:3624: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_AS="${ac_tool_prefix}as" -echo "$as_me:3639: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - echo "$as_me:3647: result: $AS" >&5 -echo "${ECHO_T}$AS" >&6 -else - echo "$as_me:3650: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -echo "$as_me:3659: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_AS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_AS="as" -echo "$as_me:3674: found $ac_dir/$ac_word" >&5 -break -done - - test -z "$ac_cv_prog_ac_ct_AS" && ac_cv_prog_ac_ct_AS="false" -fi -fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - echo "$as_me:3683: result: $ac_ct_AS" >&5 -echo "${ECHO_T}$ac_ct_AS" >&6 -else - echo "$as_me:3686: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - AS=$ac_ct_AS -else - AS="$ac_cv_prog_AS" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -echo "$as_me:3698: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_OBJDUMP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" -echo "$as_me:3713: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - echo "$as_me:3721: result: $OBJDUMP" >&5 -echo "${ECHO_T}$OBJDUMP" >&6 -else - echo "$as_me:3724: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -echo "$as_me:3733: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_OBJDUMP="objdump" -echo "$as_me:3748: found $ac_dir/$ac_word" >&5 -break -done - - test -z "$ac_cv_prog_ac_ct_OBJDUMP" && ac_cv_prog_ac_ct_OBJDUMP="false" -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - echo "$as_me:3757: result: $ac_ct_OBJDUMP" >&5 -echo "${ECHO_T}$ac_ct_OBJDUMP" >&6 -else - echo "$as_me:3760: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - OBJDUMP=$ac_ct_OBJDUMP -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one - echo "$as_me:3771: checking if libtool should supply DllMain function" >&5 -echo $ECHO_N "checking if libtool should supply DllMain function... $ECHO_C" >&6 -if test "${lt_cv_need_dllmain+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 3777 "configure" -#include "confdefs.h" - -int -main () -{ -extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); - DllMain (0, 0, 0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3790: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:3793: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3796: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:3799: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - lt_cv_need_dllmain=no -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -lt_cv_need_dllmain=yes -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:3809: result: $lt_cv_need_dllmain" >&5 -echo "${ECHO_T}$lt_cv_need_dllmain" >&6 - - case $host/$CC in - *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) - # old mingw systems require "-dll" to link a DLL, while more recent ones - # require "-mdll" - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -mdll" - echo "$as_me:3818: checking how to link DLLs" >&5 -echo $ECHO_N "checking how to link DLLs... $ECHO_C" >&6 -if test "${lt_cv_cc_dll_switch+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 3824 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3836: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:3839: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3842: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:3845: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - lt_cv_cc_dll_switch=-mdll -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -lt_cv_cc_dll_switch=-dll -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:3855: result: $lt_cv_cc_dll_switch" >&5 -echo "${ECHO_T}$lt_cv_cc_dll_switch" >&6 - CFLAGS="$SAVE_CFLAGS" ;; - *-*-cygwin* | *-*-pw32*) - # cygwin systems need to pass --dll to the linker, and not link - # crt.o which will require a WinMain@16 definition. - lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; - esac - ;; - -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except M$VC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" -need_locks="$enable_libtool_lock" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -if test x"$host" != x"$build"; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi - -# Transform linux* to *-*-linux-gnu*, to support old configure scripts. -case $host_os in -linux-gnu*) ;; -linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` -esac - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" - ;; - *) - old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -# Allow CC to be a program name with arguments. -set dummy $CC -compiler="$2" - -## FIXME: this should be a separate macro -## -echo "$as_me:3959: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6 -rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - objdir=_libs -fi -rmdir .libs 2>/dev/null -echo "$as_me:3970: result: $objdir" >&5 -echo "${ECHO_T}$objdir" >&6 -## -## END FIXME - -## FIXME: this should be a separate macro -## - -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" -else - pic_mode=default -fi; -test -z "$pic_mode" && pic_mode=default - -# We assume here that the value for lt_cv_prog_cc_pic will not be cached -# in isolation, and that seeing it set (from the cache) indicates that -# the associated values are set (in the cache) correctly too. -echo "$as_me:3990: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 -if test "${lt_cv_prog_cc_pic+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_cc_pic= - lt_cv_prog_cc_shlib= - lt_cv_prog_cc_wl= - lt_cv_prog_cc_static= - lt_cv_prog_cc_no_builtin= - lt_cv_prog_cc_can_build_shared=$can_build_shared - - if test "$GCC" = yes; then - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-static' - - case $host_os in - aix*) - # Below there is a dirty hack to force normal static linking with -ldl - # The problem is because libdl dynamically linked with both libc and - # libC (AIX C++ library), which obviously doesn't included in libraries - # list by gcc. This cause undefined symbols with -static flags. - # This hack allows C programs to be linked with "-static -ldl", but - # not sure about C++ programs. - lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_cv_prog_cc_pic='-fno-common' - ;; - cygwin* | mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_cv_prog_cc_pic=-Kconform_pic - fi - ;; - *) - lt_cv_prog_cc_pic='-fPIC' - ;; - esac - else - # PORTME Check for PIC flags for the system compiler. - case $host_os in - aix3* | aix4* | aix5*) - lt_cv_prog_cc_wl='-Wl,' - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_cv_prog_cc_static='-Bstatic' - else - lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - # PDFlib added - i370*) - lt_cv_prog_cc_wl='-Wl,dll' - lt_cv_prog_cc_pic='-W c,expo,dll -Wc,"GONUM"' - ;; - hpux9* | hpux10* | hpux11*) - # Is there a better lt_cv_prog_cc_static that works with the bundled CC? - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" - lt_cv_prog_cc_pic='+Z' - ;; - - irix5* | irix6*) - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-non_shared' - # PIC (with -KPIC) is the default. - ;; - - cygwin* | mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - - newsos6) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - ;; - - osf3* | osf4* | osf5*) - # All OSF/1 code is PIC. - lt_cv_prog_cc_wl='-Wl,' - lt_cv_prog_cc_static='-non_shared' - ;; - - sco3.2v5*) - lt_cv_prog_cc_pic='-Kpic' - lt_cv_prog_cc_static='-dn' - lt_cv_prog_cc_shlib='-belf' - ;; - - solaris*) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - lt_cv_prog_cc_wl='-Wl,' - ;; - - sunos4*) - lt_cv_prog_cc_pic='-PIC' - lt_cv_prog_cc_static='-Bstatic' - lt_cv_prog_cc_wl='-Qoption ld ' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - lt_cv_prog_cc_pic='-KPIC' - lt_cv_prog_cc_static='-Bstatic' - if test "x$host_vendor" = xsni; then - lt_cv_prog_cc_wl='-LD' - else - lt_cv_prog_cc_wl='-Wl,' - fi - ;; - - uts4*) - lt_cv_prog_cc_pic='-pic' - lt_cv_prog_cc_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_cv_prog_cc_pic='-Kconform_pic' - lt_cv_prog_cc_static='-Bstatic' - fi - ;; - - *) - lt_cv_prog_cc_can_build_shared=no - ;; - esac - fi - -fi - -if test -z "$lt_cv_prog_cc_pic"; then - echo "$as_me:4142: result: none" >&5 -echo "${ECHO_T}none" >&6 -else - echo "$as_me:4145: result: $lt_cv_prog_cc_pic" >&5 -echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6 - - # Check to make sure the pic_flag actually works. - echo "$as_me:4149: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6 - if test "${lt_cv_prog_cc_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" - cat >conftest.$ac_ext <<_ACEOF -#line 4157 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4169: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:4172: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4175: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:4178: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - case $host_os in - hpux9* | hpux10* | hpux11*) - # On HP-UX, both CC and GCC only warn that PIC is supported... then - # they create non-PIC objects. So, if there were any warnings, we - # assume that PIC is not supported. - if test -s conftest.err; then - lt_cv_prog_cc_pic_works=no - else - lt_cv_prog_cc_pic_works=yes - fi - ;; - *) - lt_cv_prog_cc_pic_works=yes - ;; - esac - -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - lt_cv_prog_cc_pic_works=no - -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - -fi - - if test "X$lt_cv_prog_cc_pic_works" = Xno; then - lt_cv_prog_cc_pic= - lt_cv_prog_cc_can_build_shared=no - else - lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" - fi - - echo "$as_me:4214: result: $lt_cv_prog_cc_pic_works" >&5 -echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6 -fi -## -## END FIXME - -# Check for any special shared library compilation flags. -if test -n "$lt_cv_prog_cc_shlib"; then - { echo "$as_me:4222: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5 -echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;} - if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : - else - { echo "$as_me:4226: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 -echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} - lt_cv_prog_cc_can_build_shared=no - fi -fi - -## FIXME: this should be a separate macro -## -echo "$as_me:4234: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6 -if test "${lt_cv_prog_cc_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_cc_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" - cat >conftest.$ac_ext <<_ACEOF -#line 4243 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4255: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:4258: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:4261: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:4264: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - lt_cv_prog_cc_static_works=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi - -# Belt *and* braces to stop my trousers falling down: -test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= -echo "$as_me:4278: result: $lt_cv_prog_cc_static_works" >&5 -echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6 - -pic_flag="$lt_cv_prog_cc_pic" -special_shlib_compile_flags="$lt_cv_prog_cc_shlib" -wl="$lt_cv_prog_cc_wl" -link_static_flag="$lt_cv_prog_cc_static" -no_builtin_flag="$lt_cv_prog_cc_no_builtin" -can_build_shared="$lt_cv_prog_cc_can_build_shared" -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Check to see if options -o and -c are simultaneously supported by compiler -echo "$as_me:4293: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -$rm -r conftest 2>/dev/null -mkdir conftest -cd conftest -echo "int some_variable = 0;" > conftest.$ac_ext -mkdir out -# According to Tom Tromey, Ian Lance Taylor reported there are C compilers -# that will create temporary files in the current directory regardless of -# the output directory. Thus, making CWD read-only will cause this test -# to fail, enabling locking or at least warning the user not to do parallel -# builds. -# PDFlib GmbH: we don't do this it wows on AIX -#chmod -w . -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" -compiler_c_o=no -if { (eval echo configure:4314: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s out/conftest.err; then - lt_cv_compiler_c_o=no - else - lt_cv_compiler_c_o=yes - fi -else - # Append any errors to the config.log. - cat out/conftest.err 1>&5 - lt_cv_compiler_c_o=no -fi -CFLAGS="$save_CFLAGS" -chmod u+w . -$rm conftest* out/* -rmdir out -cd .. -rmdir conftest -$rm -r conftest 2>/dev/null - -fi - -compiler_c_o=$lt_cv_compiler_c_o -echo "$as_me:4338: result: $compiler_c_o" >&5 -echo "${ECHO_T}$compiler_c_o" >&6 - -if test x"$compiler_c_o" = x"yes"; then - # Check to see if we can write to a .lo - echo "$as_me:4343: checking if $compiler supports -c -o file.lo" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6 - if test "${lt_cv_compiler_o_lo+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - lt_cv_compiler_o_lo=no - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -c -o conftest.lo" - save_objext="$ac_objext" - ac_objext=lo - cat >conftest.$ac_ext <<_ACEOF -#line 4355 "configure" -#include "confdefs.h" - -int -main () -{ -int some_variable = 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4367: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:4370: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4373: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:4376: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - lt_cv_compiler_o_lo=no - else - lt_cv_compiler_o_lo=yes - fi - -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext - ac_objext="$save_objext" - CFLAGS="$save_CFLAGS" - -fi - - compiler_o_lo=$lt_cv_compiler_o_lo - echo "$as_me:4397: result: $compiler_o_lo" >&5 -echo "${ECHO_T}$compiler_o_lo" >&6 -else - compiler_o_lo=no -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Check to see if we can do hard links to lock some files if needed -hard_links="nottested" -if test "$compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:4411: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:4419: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:4422: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -if test "$GCC" = yes; then - # Check to see if options -fno-rtti -fno-exceptions are supported by compiler - echo "$as_me:4436: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 - echo "int some_variable = 0;" > conftest.$ac_ext - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" - compiler_rtti_exceptions=no - cat >conftest.$ac_ext <<_ACEOF -#line 4443 "configure" -#include "confdefs.h" - -int -main () -{ -int some_variable = 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4455: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:4458: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4461: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:4464: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - compiler_rtti_exceptions=no - else - compiler_rtti_exceptions=yes - fi - -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - echo "$as_me:4480: result: $compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$compiler_rtti_exceptions" >&6 - - if test "$compiler_rtti_exceptions" = "yes"; then - no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' - else - no_builtin_flag=' -fno-builtin' - fi -fi -## -## END FIXME - -## FIXME: this should be a separate macro -## -# See if the linker supports building shared libraries. -echo "$as_me:4495: checking whether the linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6 - -allow_undefined_flag= -no_undefined_flag= -need_lib_prefix=unknown -need_version=unknown -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -archive_cmds= -archive_expsym_cmds= -old_archive_from_new_cmds= -old_archive_from_expsyms_cmds= -export_dynamic_flag_spec= -whole_archive_flag_spec= -thread_safe_flag_spec= -hardcode_into_libs=no -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no -hardcode_shlibpath_var=unsupported -runpath_var= -link_all_deplibs=unknown -always_export_symbols=no -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' -# include_expsyms should be a list of space-separated symbols to be *always* -# included in the symbol list -include_expsyms= -# exclude_expsyms can be an egrep regular expression of symbols to exclude -# it will be wrapped by ` (' and `)$', so one must not match beginning or -# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', -# as well as any symbol that contains `d'. -exclude_expsyms="_GLOBAL_OFFSET_TABLE_" -# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out -# platforms (ab)use it in PIC code, but their linkers get confused if -# the symbol is explicitly referenced. Since portable code cannot -# rely on this symbol name, it's probably fine to never include it in -# preloaded symbol tables. -extract_expsyms_cmds= - -case $host_os in -cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; -openbsd*) - with_gnu_ld=no - ;; -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX, the GNU linker is very broken - # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=yes - - extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ - sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ - test -f $output_objdir/impgen.exe || (cd $output_objdir && \ - if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ - else $CC -o impgen impgen.c ; fi)~ - $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' - - old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' - - # cygwin and mingw dlls have different entry points and sets of symbols - # to exclude. - # FIXME: what about values for MSVC? - dll_entry=__cygwin_dll_entry@12 - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ - case $host_os in - mingw*) - # mingw values - dll_entry=_DllMainCRTStartup@12 - dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ - ;; - esac - - # mingw and cygwin differ, and it's simplest to just exclude the union - # of the two symbol sets. - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one (in ltdll.c) - if test "x$lt_cv_need_dllmain" = "xyes"; then - ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " - ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ - test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' - else - ltdll_obj= - ltdll_cmds= - fi - - # Extract the symbol export list from an `--export-all' def file, - # then regenerate the def file from the symbol export list, so that - # the compiled dll only exports the symbol export list. - # Be careful not to strip the DATA tag left be newer dlltools. - export_symbols_cmds="$ltdll_cmds"' - $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ - sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' - - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is. - # If DATA tags from a recent dlltool are present, honour them! - archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname-def; - else - echo EXPORTS > $output_objdir/$soname-def; - _lt_hint=1; - cat $export_symbols | while read symbol; do - set dummy \$symbol; - case \$# in - 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; - *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; - esac; - _lt_hint=`expr 1 + \$_lt_hint`; - done; - fi~ - '"$ltdll_cmds"' - $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ - $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ - $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = yes; then - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - case $host_os in - cygwin* | mingw* | pw32*) - # dlltool doesn't understand --whole-archive et. al. - whole_archive_flag_spec= - ;; - *) - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - ;; - esac - fi -else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - hardcode_direct=yes - archive_cmds='' - hardcode_libdir_separator=':' - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - esac - - shared_flag='-shared' - else - # not using gcc - if test "$host_cpu" = ia64; then - shared_flag='${wl}-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall can do strange things, so it is better to - # generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='${wl}-berok' - # This is a bit strange, but is similar to how AIX traditionally builds - # it's shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - ;; - - darwin* | rhapsody*) - case "$host_os" in - rhapsody* | darwin1.[012]) - allow_undefined_flag='-undefined suppress' - ;; - *) # Darwin 1.3 on - allow_undefined_flag='-flat_namespace -undefined suppress' - ;; - esac - # FIXME: Relying on posixy $() will cause problems for - # cross-compilation, but unfortunately the echo tests do not - # yet detect zsh echo's removal of \ escapes. - archive_cmds='$nonopt $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags $(test .$module = .yes || echo -install_name $rpath/$soname $verstring)' - # We need to add '_' to the symbols in $export_symbols first - #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' - hardcode_direct=yes - hardcode_shlibpath_var=no - whole_archive_flag_spec='-all_load $convenience' - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9* | hpux10* | hpux11*) - case $host_os in - hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; - *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; - esac - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_minus_L=yes # Not in the search PATH, but as the default - # location of the library. - export_dynamic_flag_spec='${wl}-E' - ;; - - irix5* | irix6*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case "$host_os" in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' - - #Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - sco3.2v5*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - export_dynamic_flag_spec='${wl}-Bexport' - ;; - - solaris*) - # gcc --version < 3.0 without binutils cannot create self contained - # shared libraries reliably, requiring libgcc.a to resolve some of - # the object symbols generated in some cases. Libraries that use - # assert need libgcc.a to resolve __eprintf, for example. Linking - # a copy of libgcc.a into every shared library to guarantee resolving - # such symbols causes other problems: According to Tim Van Holder - # , C++ libraries end up with a separate - # (to the application) exception stack for one thing. - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - case `$CC --version 2>/dev/null` in - [12].*) - cat <&2 - -*** Warning: Releases of GCC earlier than version 3.0 cannot reliably -*** create self contained shared libraries on Solaris systems, without -*** introducing a dependency on libgcc.a. Therefore, libtool is disabling -*** -no-undefined support, which will at least allow you to build shared -*** libraries. However, you may find that when you link such libraries -*** into an application without using GCC, you have to manually add -*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to -*** upgrade to a newer version of GCC. Another option is to rebuild your -*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. - -EOF - no_undefined_flag= - ;; - esac - fi - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - if test "x$host_vendor" = xsno; then - archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - else - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv5*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec= - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4.2uw2*) - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=no - hardcode_shlibpath_var=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - sysv5uw7* | unixware7*) - no_undefined_flag='${wl}-z ${wl}text' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac -fi -echo "$as_me:5175: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 -test "$ld_shlibs" = no && can_build_shared=no -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Check hardcoding attributes. -echo "$as_me:5184: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var"; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$hardcode_shlibpath_var" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -echo "$as_me:5208: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 -## -## END FIXME - -## FIXME: this should be a separate macro -## -striplib= -old_striplib= -echo "$as_me:5217: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:5222: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else - echo "$as_me:5225: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -## -## END FIXME - -reload_cmds='$LD$reload_flag -o $output$reload_objs' -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -## FIXME: this should be a separate macro -## -# PORTME Fill in your ld.so characteristics -echo "$as_me:5237: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}.so$major' - ;; - -aix4* | aix5*) - version_type=linux - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can - # not hardcode correct soname into executable. Probably we can - # add versioning support to collect2, so additional links can - # be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}.so$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}.so' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi4*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - export_dynamic_flag_spec=-rdynamic - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - need_version=no - need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin*) - library_names_spec='$libname.dll.a' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' - postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog .libs/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - ;; - yes,mingw*) - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` - ;; - yes,pw32*) - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll' - ;; - *) - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - # FIXME: Relying on posixy $() will cause problems for - # cross-compilation, but unfortunately the echo tests do not - # yet detect zsh echo's removal of \ escapes. - - #PDFlib changed: we need .dylib even with -module - #library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' - #soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' - library_names_spec='${libname}${release}${versuffix}.dylib ${libname}${release}${major}.dylib ${libname}.dylib' - soname_spec='${libname}${release}${major}.dylib' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd*) - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - *) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - dynamic_linker="$host_os dld.sl" - version_type=sunos - need_lib_prefix=no - need_version=no - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' - soname_spec='${libname}${release}.sl$major' - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6*) - version_type=irix - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' - case $host_os in - irix5*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux-gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' - soname_spec='${libname}${release}.so$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case "$host_os" in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -os2*) - libname_spec='$name' - need_lib_prefix=no - library_names_spec='$libname.dll $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_version=no - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' - soname_spec='$libname.so.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:5634: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no -## -## END FIXME - -## FIXME: this should be a separate macro -## -# Report the final consequences. -echo "$as_me:5643: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:5645: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 -## -## END FIXME - -## FIXME: this should be a separate macro -## -echo "$as_me:5652: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case "$host_os" in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -echo "$as_me:5673: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 -## -## END FIXME - -## FIXME: this should be a separate macro -## -echo "$as_me:5680: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -echo "$as_me:5684: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 -## -## END FIXME - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - cygwin* | mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - *) - echo "$as_me:5724: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 5730 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -char (*f) (); - -int -main () -{ -/* 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_shl_load) || defined (__stub___shl_load) -choke me -#else -f = shl_load; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5761: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:5764: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5767: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5770: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_shl_load=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:5780: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - echo "$as_me:5785: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 5793 "configure" -#include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main () -{ -shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5812: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:5815: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5818: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5821: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dld_shl_load=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:5832: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - echo "$as_me:5837: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 5843 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -char (*f) (); - -int -main () -{ -/* 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_dlopen) || defined (__stub___dlopen) -choke me -#else -f = dlopen; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5874: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:5877: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5880: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5883: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_dlopen=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:5893: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - echo "$as_me:5898: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 5906 "configure" -#include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5925: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:5928: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5931: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5934: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:5945: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$as_me:5950: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 5958 "configure" -#include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5977: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:5980: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5983: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5986: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_svld_dlopen=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:5997: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - echo "$as_me:6002: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 6010 "configure" -#include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dld_link (); -int -main () -{ -dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6029: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6032: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6035: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6038: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dld_dld_link=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:6049: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - -fi - -fi - -fi - -fi - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo "$as_me:6085: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:6157: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6160: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - -fi -echo "$as_me:6177: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 - - if test "x$lt_cv_dlopen_self" = xyes; then - LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:6182: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:6254: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6257: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - -fi -echo "$as_me:6274: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - -## FIXME: this should be a separate macro -## -if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:6306: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - if test "${lt_cv_archive_cmds_need_lc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - $rm conftest* - echo 'static int dummy;' > conftest.$ac_ext - - if { (eval echo "$as_me:6314: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:6317: \$? = $ac_status" >&5 - (exit $ac_status); }; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_cv_prog_cc_wl - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:6331: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:6334: \$? = $ac_status" >&5 - (exit $ac_status); } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi -fi - - echo "$as_me:6347: result: $lt_cv_archive_cmds_need_lc" >&5 -echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6 - ;; - esac -fi -need_lc=${lt_cv_archive_cmds_need_lc-yes} -## -## END FIXME - -## FIXME: this should be a separate macro -## -# The second clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - : -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - test -f Makefile && make "$ltmain" -fi - -if test -f "$ltmain"; then - trap "$rm \"${ofile}T\"; exit 1" 1 2 15 - $rm -f "${ofile}T" - - echo creating $ofile - - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS \ - AR AR_FLAGS CC LD LN_S NM SHELL \ - reload_flag reload_cmds wl \ - pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ - thread_safe_flag_spec whole_archive_flag_spec libname_spec \ - library_names_spec soname_spec \ - RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ - old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ - postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ - old_striplib striplib file_magic_cmd export_symbols_cmds \ - deplibs_check_method allow_undefined_flag no_undefined_flag \ - finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ - global_symbol_to_c_name_address \ - hardcode_libdir_flag_spec hardcode_libdir_separator \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do - - case $var in - reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ - extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - cat <<__EOF__ > "${ofile}T" -#! $SHELL - -# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996-2000 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="sed -e s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$need_lc - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# The default C compiler. -CC=$lt_CC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_pic_flag -pic_mode=$pic_mode - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_compiler_c_o - -# Can we write directly to a .lo ? -compiler_o_lo=$lt_compiler_o_lo - -# Must we lock files when doing compilation ? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_link_static_flag - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - case $host_os in - aix3*) - cat <<\EOF >> "${ofile}T" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - case $host_os in - cygwin* | mingw* | pw32* | os2*) - cat <<'EOF' >> "${ofile}T" - # This is a source program that is used to create dlls on Windows - # Don't remove nor modify the starting and closing comments -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ - # This is a source program that is used to create import libraries - # on Windows for dlls which lack them. Don't remove nor modify the - # starting and closing comments -# /* impgen.c starts here */ -# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. -# -# This file is part of GNU libtool. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# */ -# -# #include /* for printf() */ -# #include /* for open(), lseek(), read() */ -# #include /* for O_RDONLY, O_BINARY */ -# #include /* for strdup() */ -# -# /* O_BINARY isn't required (or even defined sometimes) under Unix */ -# #ifndef O_BINARY -# #define O_BINARY 0 -# #endif -# -# static unsigned int -# pe_get16 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[2]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 2); -# return b[0] + (b[1]<<8); -# } -# -# static unsigned int -# pe_get32 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[4]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 4); -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# static unsigned int -# pe_as32 (ptr) -# void *ptr; -# { -# unsigned char *b = ptr; -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# int -# main (argc, argv) -# int argc; -# char *argv[]; -# { -# int dll; -# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; -# unsigned long export_rva, export_size, nsections, secptr, expptr; -# unsigned long name_rvas, nexp; -# unsigned char *expdata, *erva; -# char *filename, *dll_name; -# -# filename = argv[1]; -# -# dll = open(filename, O_RDONLY|O_BINARY); -# if (dll < 1) -# return 1; -# -# dll_name = filename; -# -# for (i=0; filename[i]; i++) -# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') -# dll_name = filename + i +1; -# -# pe_header_offset = pe_get32 (dll, 0x3c); -# opthdr_ofs = pe_header_offset + 4 + 20; -# num_entries = pe_get32 (dll, opthdr_ofs + 92); -# -# if (num_entries < 1) /* no exports */ -# return 1; -# -# export_rva = pe_get32 (dll, opthdr_ofs + 96); -# export_size = pe_get32 (dll, opthdr_ofs + 100); -# nsections = pe_get16 (dll, pe_header_offset + 4 +2); -# secptr = (pe_header_offset + 4 + 20 + -# pe_get16 (dll, pe_header_offset + 4 + 16)); -# -# expptr = 0; -# for (i = 0; i < nsections; i++) -# { -# char sname[8]; -# unsigned long secptr1 = secptr + 40 * i; -# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); -# unsigned long vsize = pe_get32 (dll, secptr1 + 16); -# unsigned long fptr = pe_get32 (dll, secptr1 + 20); -# lseek(dll, secptr1, SEEK_SET); -# read(dll, sname, 8); -# if (vaddr <= export_rva && vaddr+vsize > export_rva) -# { -# expptr = fptr + (export_rva - vaddr); -# if (export_rva + export_size > vaddr + vsize) -# export_size = vsize - (export_rva - vaddr); -# break; -# } -# } -# -# expdata = (unsigned char*)malloc(export_size); -# lseek (dll, expptr, SEEK_SET); -# read (dll, expdata, export_size); -# erva = expdata - export_rva; -# -# nexp = pe_as32 (expdata+24); -# name_rvas = pe_as32 (expdata+32); -# -# printf ("EXPORTS\n"); -# for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) - - mv -f "${ofile}T" "$ofile" || \ - (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") - chmod +x "$ofile" -fi -## -## END FIXME - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - -# -------------------------------------------------------------------- -# PDFlib Java binding (JNI) -# -------------------------------------------------------------------- - -WITH_JAVA=yes -JAVAINCLUDE="" -JAVAPACKAGE="" - -# Check whether --with-java or --without-java was given. -if test "${with_java+set}" = set; then - withval="$with_java" - -case $withval in - no) WITH_JAVA=no ;; - yes) WITH_JAVA=yes ;; - *) JAVAPACKAGE=$withval - ;; -esac - -fi; - -if test "$WITH_JAVA" != "no" ; then - WITH_JAVA=no - echo "$as_me:6941: checking for Java header files" >&5 -echo $ECHO_N "checking for Java header files... $ECHO_C" >&6 - - # try without any precautions - cat >conftest.$ac_ext <<_ACEOF -#line 6946 "configure" -#include "confdefs.h" -#include -_ACEOF -if { (eval echo "$as_me:6950: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:6956: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - WITH_JAVA=yes -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - dirs="$prefix /usr/lib/java /usr/java /usr/java/jdk1.4 /usr/lib/jdk1.4 /opt/java1.4 /usr/lpp/java/J1.4 /usr/java/jdk1.4 /usr/lib/jdk1.4 /usr/jdk14 /jdk1.4 /usr/java/jdk1.3 /usr/include/java /usr/local/java /usr/local/include/kaffe /usr/lib/jdk1.3 /opt/java1.3 /usr/lpp/java/J1.3 /usr/java/jdk1.2 /usr/lib/jdk1.2.2 /usr/lib/jdk1.2.1 /usr/jdk122 /usr/lib/jdk122 /usr/lib/jdk1.2.1 /opt/java1.2 /usr/lpp/java/J1.2 /usr/lib/jdk1.1.8 /usr/jdk118 /usr/lib/jdk118 /usr/lpp/java/J1.1 /opt/java1.1 /usr /opt/local /jdk1.3 /jdk1.2.3 /jdk1.2.2 /jdk1.2.1 /System/Library/Frameworks/JavaVM.framework/Headers /usr/jdk_base/include" - - if test "$JAVAPACKAGE" != ""; then - dirs="$JAVAPACKAGE $dirs" - fi - - # now try to find jni.h - for i in $dirs ; do - if test -r $i/jni.h; then - JAVAINCLUDE="$i" - break - elif test -r $i/include/jni.h; then - JAVAINCLUDE="$i/include" - break - fi - done - -fi -rm -f conftest.err conftest.$ac_ext - - # now try with an include path - if test "$JAVAINCLUDE" != ""; then - OCPPFLAGS="$CPPFLAGS" - CPPFLAGS="-I$JAVAINCLUDE $OCPPFLAGS" - cat >conftest.$ac_ext <<_ACEOF -#line 6996 "configure" -#include "confdefs.h" -#include -_ACEOF -if { (eval echo "$as_me:7000: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:7006: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - - WITH_JAVA=yes - JAVAINCLUDE="-I$JAVAINCLUDE" - -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_ext - CPPFLAGS="$OCPPFLAGS" - fi - - # if the above didn't work probably jni_md.h is missing - if test "WITH_JAVA" != "yes" ; then - if test "$JAVAINCLUDE" != ""; then - subdirs="$JAVAINCLUDE $JAVAINCLUDE/$MACHDEP $JAVAINCLUDE/$ac_md_system $JAVAINCLUDE/solaris $JAVAINCLUDE/genunix $JAVAINCLUDE/alpha $JAVAINCLUDE/win32 $JAVAINCLUDE/mvs $JAVAINCLUDE/irix" - for i in $subdirs ; do - if test -r $i/jni_md.h; then - JAVAINCLUDE="-I$JAVAINCLUDE -I$i" - WITH_JAVA=yes - break - fi - done - fi - fi - - if test "$WITH_JAVA" = "no"; then - echo "$as_me:7045: result: not found" >&5 -echo "${ECHO_T}not found" >&6 - else - echo "$as_me:7048: result: $JAVAINCLUDE" >&5 -echo "${ECHO_T}$JAVAINCLUDE" >&6 - - fi - -fi - -# ---------------------------------------------------------------- -# PDFlib Perl binding -# ---------------------------------------------------------------- - -WITH_PERL=yes -PERLBIN=nope -PERLINCLUDE=nope - -# Check whether --with-perl or --without-perl was given. -if test "${with_perl+set}" = set; then - withval="$with_perl" - PERLBIN="$withval" -else - PERLBIN=nope -fi; - -if test "$PERLBIN" = "no" ; then - WITH_PERL=no -fi - -# Check whether --with-perlincl or --without-perlincl was given. -if test "${with_perlincl+set}" = set; then - withval="$with_perlincl" - PERLINCLUDE="$withval" -else - PERLINCLUDE=nope -fi; - -if test "$WITH_PERL" = "yes" ; then - - WITH_PERL=no - if test "$PERLBIN" = "nope"; then - for ac_prog in perl perl5.7.0 perl5.6.0 perl5.005 perl5.004 perl5.003 perl5.002 perl5.001 perl5 -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:7091: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_PERL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$PERL"; then - ac_cv_prog_PERL="$PERL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_PERL="$ac_prog" -echo "$as_me:7106: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -PERL=$ac_cv_prog_PERL -if test -n "$PERL"; then - echo "$as_me:7114: result: $PERL" >&5 -echo "${ECHO_T}$PERL" >&6 -else - echo "$as_me:7117: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$PERL" && break -done -test -n "$PERL" || PERL="nope" - - else - PERL="$PERLBIN" - fi - echo "$as_me:7128: checking for Perl header file" >&5 -echo $ECHO_N "checking for Perl header file... $ECHO_C" >&6 - if test "$PERL" != "nope"; then - PERL5DIR=`($PERL -e 'use Config; print $Config{archlib};') 2>/dev/null` - if test "$PERL5DIR" != ""; then - if test "$PERLINCLUDE" = "nope"; then - if test -r "$PERL5DIR/perl.h"; then - echo "$as_me:7135: result: PERL5DIR/perl.h" >&5 -echo "${ECHO_T}PERL5DIR/perl.h" >&6 - WITH_PERL=yes - PERLINCLUDE="$PERL5DIR" - elif test -r "$PERL5DIR/CORE/perl.h"; then - echo "$as_me:7140: result: $PERL5DIR/CORE/perl.h" >&5 -echo "${ECHO_T}$PERL5DIR/CORE/perl.h" >&6 - WITH_PERL=yes - PERLINCLUDE="$PERL5DIR/CORE" - fi - else - WITH_PERL=yes - echo "$as_me:7147: result: $PERLINCLUDE" >&5 -echo "${ECHO_T}$PERLINCLUDE" >&6 - fi - if test "$PERLINCLUDE" = "nope"; then - echo "$as_me:7151: result: could not locate perl.h..." >&5 -echo "${ECHO_T}could not locate perl.h..." >&6 - WITH_PERL=no - fi - else - echo "$as_me:7156: result: unable to determine Perl configuration" >&5 -echo "${ECHO_T}unable to determine Perl configuration" >&6 - WITH_PERL=no - fi - - PERLLIBDIR=`($PERL -e 'use Config; print $Config{sitearchexp};') 2>/dev/null` - if test -z "$PERLLIBDIR" -o ! -d "$PERLLIBDIR"; then - echo "$as_me:7163: result: unable to determine perl shared library directory" >&5 -echo "${ECHO_T}unable to determine perl shared library directory" >&6 - fi - - else - echo "$as_me:7168: result: could not figure out how to run perl" >&5 -echo "${ECHO_T}could not figure out how to run perl" >&6 - PERLINCLUDE="/usr/local/lib/perl5/5.6.0/archname/CORE" - fi - - case $ac_sys_system in - NeXT|next) PERLBOOLDEF="";; - *) PERLBOOLDEF="-Dbool=char -DHAS_BOOL";; - esac - - case $ac_sys_system/$ac_sys_release in - hp*|HP*) PERLLINK="";; - cyg*|CYG*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - aix*|AIX*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - osf1*|OSF1*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - darwin|Darwin*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - *) ;; - esac - - PERLINCLUDE="-I$PERLINCLUDE" - -fi - -# ---------------------------------------------------------------- -# PDFlib Python binding -# ---------------------------------------------------------------- - -WITH_PYTHON=yes -PYINCLUDE=nope -PYPACKAGE=nope - -# Check whether --with-py or --without-py was given. -if test "${with_py+set}" = set; then - withval="$with_py" - PYPACKAGE="$withval" -else - PYPACKAGE=nope -fi; - -if test "$PYPACKAGE" = "no" ; then - WITH_PYTHON=no -fi - -# Check whether --with-pyincl or --without-pyincl was given. -if test "${with_pyincl+set}" = set; then - withval="$with_pyincl" - PYINCLUDE="$withval" -else - PYINCLUDE=nope -fi; - -if test "$PYINCLUDE" = "nope" -a "$PYPACKAGE" != "no"; then - PYINCLUDE="$PYPACKAGE/include" -fi - -if test "$WITH_PYTHON" != "no" ; then - WITH_PYTHON=no - echo "$as_me:7225: checking for Python header files" >&5 -echo $ECHO_N "checking for Python header files... $ECHO_C" >&6 - - dirs="$PYINCLUDE \ - $PYINCLUDE/python2.3 \ - $prefix/include/python2.3 \ - /usr/local/include/python2.3 \ - /usr/include/python2.3 \ - $prefix/include/python2.3 \ - $PYINCLUDE/python2.2 \ - $prefix/include/python2.2 \ - /usr/local/include/python2.2 \ - /usr/include/python2.2 \ - $prefix/include/python2.2 \ - $PYINCLUDE/python2.1 \ - $prefix/include/python2.1 \ - /usr/local/include/python2.1 \ - /usr/include/python2.1 \ - $prefix/include/python2.1 \ - $PYINCLUDE/python2.0 \ - $prefix/include/python2.0 \ - /usr/local/include/python2.0 \ - /usr/include/python2.0 \ - $prefix/include/python2.0 \ - $PYINCLUDE/python1.6 \ - $prefix/include/python1.6 \ - /usr/local/include/python1.6 \ - /usr/include/python1.6 \ - $prefix/include/python1.6 \ - $PYINCLUDE/python1.5 \ - $prefix/include/python1.5 \ - /usr/local/include/python1.5 \ - /usr/include/python1.5 \ - $prefix/include/python1.5 \ - $PYINCLUDE/python1.4 \ - $prefix/include/python1.4 \ - /usr/local/include/python1.4 \ - /usr/include/python1.4 \ - $prefix/include/python1.4" - for i in $dirs ; do - if test -r $i/Python.h; then - echo "$as_me:7266: result: $i" >&5 -echo "${ECHO_T}$i" >&6 - PYINCLUDE="-I$i" - WITH_PYTHON=yes - break - fi - done - if test "$PYINCLUDE" = "nope" -o "$PYINCLUDE" = "$PYPACKAGE/include"; then - echo "$as_me:7274: result: not found" >&5 -echo "${ECHO_T}not found" >&6 - WITH_PYTHON=no - fi - - for ac_prog in python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:7283: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_PYTHONBIN+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$PYTHONBIN"; then - ac_cv_prog_PYTHONBIN="$PYTHONBIN" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_PYTHONBIN="$ac_prog" -echo "$as_me:7298: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -PYTHONBIN=$ac_cv_prog_PYTHONBIN -if test -n "$PYTHONBIN"; then - echo "$as_me:7306: result: $PYTHONBIN" >&5 -echo "${ECHO_T}$PYTHONBIN" >&6 -else - echo "$as_me:7309: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$PYTHONBIN" && break -done -test -n "$PYTHONBIN" || PYTHONBIN="nope" - - if test "$PYTHONBIN" = "nope" ; then - WITH_PYTHON=no - fi - - if test "$WITH_PYTHON" = "yes" ; then - echo "$as_me:7322: checking for Python shared library path" >&5 -echo $ECHO_N "checking for Python shared library path... $ECHO_C" >&6 - - if test "$PYTHONBIN" = "nope" ; then - WITH_PYTHON=no - else - PYTHONLIBDIR=`cat << EOF | python -import sys -import string -print string.join(filter(lambda x: -1 != string.find(x, 'dynload'), sys.path)) -EOF -` - if test "$PYTHONLIBDIR" = "" ; then - PYTHONLIBDIR=/usr/lib - fi - - fi - - echo "$as_me:7340: result: $PYTHONLIBDIR" >&5 -echo "${ECHO_T}$PYTHONLIBDIR" >&6 - fi -fi - -# -------------------------------------------------------------------- -# PDFlib Tcl binding -# -------------------------------------------------------------------- - -WITH_TCL=yes -TCLINCLUDE=nope -TCLPACKAGEDIR=nope -TCLBIN=nope - -# Check whether --with-tcl or --without-tcl was given. -if test "${with_tcl+set}" = set; then - withval="$with_tcl" - TCLBIN="$withval" -fi; - -if test "$TCLBIN" = "no" ; then - WITH_TCL=no -fi - -# Check whether --with-tclpkg or --without-tclpkg was given. -if test "${with_tclpkg+set}" = set; then - withval="$with_tclpkg" - TCLPACKAGEDIR="$withval" -else - TCLPACKAGEDIR=nope -fi; - -# Check whether --with-tclincl or --without-tclincl was given. -if test "${with_tclincl+set}" = set; then - withval="$with_tclincl" - TCLINCLUDE="$withval" -else - TCLINCLUDE=nope -fi; - -if test "$WITH_TCL" = "yes" ; then - WITH_TCL=no - echo "$as_me:7382: checking for Tcl header files" >&5 -echo $ECHO_N "checking for Tcl header files... $ECHO_C" >&6 - - if test "$TCLINCLUDE" = "nope"; then - cat >conftest.$ac_ext <<_ACEOF -#line 7387 "configure" -#include "confdefs.h" -#include -_ACEOF -if { (eval echo "$as_me:7391: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:7397: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - TCLINCLUDE="nope" -fi -rm -f conftest.err conftest.$ac_ext - if test "$TCLINCLUDE" = "nope"; then - dirs="$prefix/include /usr/local/include /usr/include /opt/local/include /home/sci/local/include /usr/pkg/include /System/Library/Frameworks/Tcl.framework/Versions/8.3/Headers /System/Library/Frameworks/Tcl.framework/Versions/8.2/Headers" - for i in $dirs ; do - if test -r $i/tcl.h; then - echo "$as_me:7419: result: $i" >&5 -echo "${ECHO_T}$i" >&6 - TCLINCLUDE="$i" - WITH_TCL=yes - break - fi - done - fi - - if test "$TCLINCLUDE" = "nope"; then - echo "$as_me:7429: result: not found" >&5 -echo "${ECHO_T}not found" >&6 - WITH_TCL=no - fi - else - echo "$as_me:7434: result: $TCLINCLUDE" >&5 -echo "${ECHO_T}$TCLINCLUDE" >&6 - fi - - if test "$TCLINCLUDE" != "nope" -a "$TCLBIN" = "nope"; then - for ac_prog in tclsh tclsh8.4 tclsh8.3 tclsh8.2 tclsh8.1 tclsh8.0 -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:7443: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_TCL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$TCL"; then - ac_cv_prog_TCL="$TCL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_TCL="$ac_prog" -echo "$as_me:7458: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -TCL=$ac_cv_prog_TCL -if test -n "$TCL"; then - echo "$as_me:7466: result: $TCL" >&5 -echo "${ECHO_T}$TCL" >&6 -else - echo "$as_me:7469: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$TCL" && break -done -test -n "$TCL" || TCL="nope" - - TCLBIN=$TCL - fi - - if test "$TCLINCLUDE" = "nope" -o "$TCLBIN" = "nope"; then - WITH_TCL=no - else - TCLVERSION=`echo "puts [info tclversion]" | $TCLBIN` - if test "$TCLVERSION" = "7.6" -o "$TCLVERSION" = "7.5" -o "$TCLVERSION" = "7.4" -o "$TCLVERSION" = "7.3" -o "$TCLVERSION" = "7.1" -o "$TCLVERSION" = "7.0"; then - echo "$as_me:7485: result: Tcl version 8.0 or newer is required for PDFlib." >&5 -echo "${ECHO_T} Tcl version 8.0 or newer is required for PDFlib." >&6 - echo "$as_me:7487: result: PDFlib support for Tcl will not be built." >&5 -echo "${ECHO_T} PDFlib support for Tcl will not be built." >&6 - WITH_TCL=no - else - if test "$TCLVERSION" = "8.0" -o "$TCLVERSION" = "8.1"; then - echo "$as_me:7492: result: The PDFlib build process requires Tcl 8.2 or above. Please read" >&5 -echo "${ECHO_T} The PDFlib build process requires Tcl 8.2 or above. Please read" >&6 - echo "$as_me:7494: result: bind/tcl/readme.txt for instructions on manually building PDFlib" >&5 -echo "${ECHO_T} bind/tcl/readme.txt for instructions on manually building PDFlib" >&6 - echo "$as_me:7496: result: for Tcl 8.0 or 8.1." >&5 -echo "${ECHO_T} for Tcl 8.0 or 8.1." >&6 - fi - - if test "$TCLPACKAGEDIR" = "nope"; then - TCLPACKAGEDIR=`(echo "puts \\$auto_path" | "$TCLBIN" | awk '{print $1}') 2>/dev/null` - fi - - if test "$TCLPACKAGEDIR" = "nope" -o -z "$TCLPACKAGEDIR" -o ! -d "$TCLPACKAGEDIR"; then - echo "$as_me:7505: result: unable to determine Tcl package directory" >&5 -echo "${ECHO_T}unable to determine Tcl package directory" >&6 - WITH_TCL=no - - else - - TCLPACKAGEDIR=$TCLPACKAGEDIR/pdflib - WITH_TCL=yes - fi - fi - fi -fi - -TCLINCLUDE="-I$TCLINCLUDE" - -# ---------------------------------------------------------------- -# PDFlib/PSP auxiliary libraries: -# We support only our own copy of tifflib, libpng and zlib -# pdcore is needed in all configurations -# ---------------------------------------------------------------- - -# The list of Makefile targets for our internal libraries -# pdcore is always needed -PHP_PDFLIBS="$PDFPWD/libs/pdflib/p_basic.lo" - -PDCORELIBINC="-I\$(top_builddir)/libs/pdcore" -PDCORELIBLINK="\$(top_builddir)/libs/pdcore/libpdcore\$(LA)" -PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdcore/libpdcore.la" -LIBTARGETS="$LIBTARGETS pdcore" -BINDTARGETS="" -PROGTARGETS="" - -# zlib -if test -d libs/flate ; then - FLATELIBINC="-I\$(top_builddir)/libs/flate" - FLATELIBLINK="\$(top_builddir)/libs/flate/libz\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/flate/libz.la" - LIBTARGETS="$LIBTARGETS flate" -else - FLATELIBINC="" - FLATELIBLINK="" -fi - -# pnglib -if test -d libs/png ; then - PNGLIBINC="-I\$(top_builddir)/libs/png" - PNGLIBLINK="\$(top_builddir)/libs/png/libpng\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/png/libpng.la" - LIBTARGETS="$LIBTARGETS png" -else - PNGLIBINC="" - PNGLIBLINK="" -fi - -# tifflib -if test -d libs/tiff ; then - echo "$as_me:7561: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_c_bigendian=unknown -# See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -#line 7569 "configure" -#include "confdefs.h" -#include -#include - -int -main () -{ -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:7586: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:7589: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7592: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7595: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -#line 7599 "configure" -#include "confdefs.h" -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:7616: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:7619: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7622: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7625: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_c_bigendian=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_c_bigendian = unknown; then -if test "$cross_compiling" = yes; then - { { echo "$as_me:7641: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -#line 7646 "configure" -#include "confdefs.h" -int -main () -{ - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:7662: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:7665: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:7667: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7670: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_c_bigendian=yes -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:7683: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6 -if test $ac_cv_c_bigendian = yes; then - -cat >>confdefs.h <<\EOF -#define WORDS_BIGENDIAN 1 -EOF - -fi - - TIFFLIBINC="-I\$(top_builddir)/libs/tiff" - TIFFLIBLINK="\$(top_builddir)/libs/tiff/libtiff\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/tiff/libtiff.la" - LIBTARGETS="$LIBTARGETS tiff" -else - TIFFLIBINC="" - TIFFLIBLINK="" -fi - -# jpeglib -#if test -d libs/jpeg6 ; then -# AC_C_BIGENDIAN() -# JPEGLIBINC="-I\$(top_builddir)/libs/jpeg6" -# JPEGLIBLINK="\$(top_builddir)/libs/jpeg6/libjpeg\$(LA)" -# PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/jpeg6/libjpeg6.la" -# LIBTARGETS="$LIBTARGETS jpeg6" -#else - JPEGLIBINC="" - JPEGLIBLINK="" -#fi - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDI (PDF import library) -# ---------------------------------------------------------------- - -WITH_PDI=no - -echo "$as_me:7720: checking for PDF import library PDI" >&5 -echo $ECHO_N "checking for PDF import library PDI... $ECHO_C" >&6 - -if test -d libs/pdi ; then - WITH_PDI=yes - PDILIBINC="-I\$(top_builddir)/libs/pdi" - PDILIBLINK="\$(top_builddir)/libs/pdi/libpdi\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdi/libpdi.la" - - LIBTARGETS="$LIBTARGETS pdi" - PROGTARGETS="$PROGTARGETS pdi" - echo "$as_me:7731: result: found" >&5 -echo "${ECHO_T}found" >&6 -else - PDILIBINC="" - PDILIBLINK="" - echo "$as_me:7736: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib main library: not needed for PSP -# ---------------------------------------------------------------- - -EXTERNALLIBS="$MATHLIB" - -WITH_PDFLIB=no - -echo "$as_me:7748: checking for PDFlib base library pdflib" >&5 -echo $ECHO_N "checking for PDFlib base library pdflib... $ECHO_C" >&6 - -if test -d libs/pdflib ; then - WITH_PDFLIB=yes - PDFLIBINC="-I\$(top_builddir)/libs/pdflib" - PDFLIBLINK="\$(top_builddir)/libs/pdflib/lib$PDFLIBNAME\$(LA)" - PDFLIB_LINK="\$(top_builddir)/libs/pdflib/libpdf_\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdflib/libpdf_.la" - LIBTARGETS="$LIBTARGETS pdflib" - BINDTARGETS="$BINDTARGETS pdflib" - PROGTARGETS="$PROGTARGETS pdflib" - echo "$as_me:7760: result: found" >&5 -echo "${ECHO_T}found" >&6 -else - PDFLIBINC="" - PDFLIBLINK="" - PDFLIB_LINK="" - PDFLIBCONVENIENT="" - echo "$as_me:7767: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PSP (Pretty Safe PDF) -# ---------------------------------------------------------------- - -WITH_PSP=no -PSPLIBINC="" -PSPLIBLINK="" -PSPLIB_LINK="" - -echo "$as_me:7780: checking for PDFlib PSP (Pretty Safe PDF)" >&5 -echo $ECHO_N "checking for PDFlib PSP (Pretty Safe PDF)... $ECHO_C" >&6 - -if test -d libs/psp ; then - WITH_PSP=yes - -# Check whether --with-PSP or --without-PSP was given. -if test "${with_PSP+set}" = set; then - withval="$with_PSP" - WITH_PSP="$withval" -fi; - if test "$WITH_PSP" = "yes"; then - LIBTARGETS="$LIBTARGETS psp" - BINDTARGETS="$BINDTARGETS psp" - PROGTARGETS="$PROGTARGETS psp" - PSPLIBINC="-I\$(top_builddir)/libs/psp" - PSPLIBLINK="\$(top_builddir)/libs/psp/libpsp\$(LA)" - PSPLIB_LINK="\$(top_builddir)/libs/psp/libpsp_\$(LA)" - echo "$as_me:7798: result: found" >&5 -echo "${ECHO_T}found" >&6 - else - echo "$as_me:7801: result: not used" >&5 -echo "${ECHO_T}not used" >&6 - fi -else - echo "$as_me:7805: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: TET -# ---------------------------------------------------------------- - -WITH_TET=no -TETLIBINC="" -TETLIBLINK="" -TETLIB_LINK="" - -echo "$as_me:7818: checking for PDFlib TET" >&5 -echo $ECHO_N "checking for PDFlib TET... $ECHO_C" >&6 - -if test -d libs/tet ; then - WITH_TET=yes - -# Check whether --with-TET or --without-TET was given. -if test "${with_TET+set}" = set; then - withval="$with_TET" - WITH_TET="$withval" -fi; - if test "$WITH_TET" = "yes"; then - LIBTARGETS="$LIBTARGETS tet" - PROGTARGETS="$PROGTARGETS tet" - TETLIBINC="-I\$(top_builddir)/libs/tet" - TETLIBLINK="\$(top_builddir)/libs/tet/libtet\$(LA)" - TETLIB_LINK="\$(top_builddir)/libs/tet/libtet_\$(LA)" - echo "$as_me:7835: result: found" >&5 -echo "${ECHO_T}found" >&6 - else - echo "$as_me:7838: result: not used" >&5 -echo "${ECHO_T}not used" >&6 - fi -else - echo "$as_me:7842: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDU -# ---------------------------------------------------------------- -# -WITH_PDU=no -PDULIBINC="" -PDULIBLINK="" - -echo "$as_me:7854: checking for PDFlib PDU" >&5 -echo $ECHO_N "checking for PDFlib PDU... $ECHO_C" >&6 - -if test -d libs/pdu ; then - WITH_PDU=yes - -# Check whether --with-PDU or --without-PDU was given. -if test "${with_PDU+set}" = set; then - withval="$with_PDU" - WITH_PDU="$withval" -fi; - if test "$WITH_PDU" = "yes"; then - LIBTARGETS="$LIBTARGETS pdu" - PROGTARGETS="$PROGTARGETS pdu" - PDULIBINC="-I\$(top_builddir)/libs/pdu" - PDULIBLINK="\$(top_builddir)/libs/pdu/libpdu\$(LA)" - echo "$as_me:7870: result: found" >&5 -echo "${ECHO_T}found" >&6 - else - echo "$as_me:7873: result: not used" >&5 -echo "${ECHO_T}not used" >&6 - fi -else - echo "$as_me:7877: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDPAGE -# ---------------------------------------------------------------- - -WITH_PDPAGE=no - -echo "$as_me:7887: checking for PDFlib PDPAGE" >&5 -echo $ECHO_N "checking for PDFlib PDPAGE... $ECHO_C" >&6 - -if test -d libs/pdpage ; then - if test "$WITH_TET" = "yes" ; then - WITH_PDPAGE=yes - fi -fi -if test "$WITH_PDPAGE" = "yes" ; then - LIBTARGETS="$LIBTARGETS pdpage" - PDPAGELIBINC="-I\$(top_builddir)/libs/pdpage" - PDPAGELIBLINK="\$(top_builddir)/libs/pdpage/libpdpage\$(LA)" - echo "$as_me:7899: result: found" >&5 -echo "${ECHO_T}found" >&6 -else - PDPAGELIBINC="" - PDPAGELIBLINK="" - echo "$as_me:7904: result: not found" >&5 -echo "${ECHO_T}not found" >&6 -fi - -# ---------------------------------------------------------------- -# PDFlib/PSP PHP binding -# ---------------------------------------------------------------- - -if test -f bind/pdflib/php/Makefile.frag.in ; then - GENERATED_FILES="$GENERATED_FILES bind/pdflib/php/Makefile.frag" -fi -if test -f bind/psp/php/Makefile.frag.in ; then - GENERATED_FILES="$GENERATED_FILES bind/psp/php/Makefile.frag" -fi - -# -------------------------------------------------------------------- -# PDFlib C++ language binding -# -------------------------------------------------------------------- - -WITH_CXX=yes - -STDCPP="" - -# Check whether --enable-cxx or --disable-cxx was given. -if test "${enable_cxx+set}" = set; then - enableval="$enable_cxx" - WITH_CXX=$enableval -fi; - -if test "$WITH_CXX" = "yes"; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - ac_ext=cc -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 -n "$ac_tool_prefix"; then - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 -echo "$as_me:7950: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" -echo "$as_me:7965: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - echo "$as_me:7973: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6 -else - echo "$as_me:7976: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 -echo "$as_me:7989: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CXX="$ac_prog" -echo "$as_me:8004: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - echo "$as_me:8012: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6 -else - echo "$as_me:8015: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CXX" && break -done -test -n "$ac_ct_CXX" || ac_ct_CXX="g++" - - CXX=$ac_ct_CXX -fi - -# Provide some information about the compiler. -echo "$as_me:8027:" \ - "checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:8030: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:8033: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:8035: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:8038: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:8040: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:8043: \$? = $ac_status" >&5 - (exit $ac_status); } - -echo "$as_me:8046: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 8052 "configure" -#include "confdefs.h" - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8067: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:8070: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8073: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:8076: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_compiler_gnu=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:8088: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -CXXFLAGS="-g" -echo "$as_me:8094: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 8100 "configure" -#include "confdefs.h" - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8112: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:8115: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8118: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:8121: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_prog_cxx_g=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:8131: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$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 -for ac_declaration in \ - ''\ - '#include ' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -#line 8158 "configure" -#include "confdefs.h" -#include -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8171: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:8174: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8177: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:8180: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -continue -fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 8190 "configure" -#include "confdefs.h" -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8202: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:8205: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8208: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:8211: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -ac_ext=cc -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 - - echo "$as_me:8233: checking whether the previously found C++ compiler works" >&5 -echo $ECHO_N "checking whether the previously found C++ compiler works... $ECHO_C" >&6 - -cat >conftest.$ac_ext <<_ACEOF -#line 8237 "configure" -#include "confdefs.h" - -int -main () -{ -class a { int b; } - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8249: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:8252: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8255: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:8258: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - WITH_CXX=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -WITH_CXX=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - case $ac_sys_system/$ac_sys_release in - osf1*|OSF1*) STDCPP="";; - - *) ;; - esac - - if test "x$GCC" != "x"; then - STDCPP="-lstdc++" - fi - - if test "$WITH_CXX" = "yes"; then - - echo "$as_me:8285: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:8288: result: no" >&5 -echo "${ECHO_T}no" >&6 - fi -fi - -# ---------------------------------------------------------------- -# PDFlib wrapup -# ---------------------------------------------------------------- - -if test "$PLATFORM_ID" = "MacOSX"; then - INCLUDES="$INCLUDES -I/Developer/Headers/FlatCarbon" - LDFLAGS="$LDFLAGS -framework CoreServices -framework ApplicationServices" -fi - -WITHPEDANTIC=no -# Check whether --enable-pedantic or --disable-pedantic was given. -if test "${enable_pedantic+set}" = set; then - enableval="$enable_pedantic" - WITHPEDANTIC=$enableval -fi; -if test "$WITHPEDANTIC" = "yes"; then - if test "x$GCC" != "x"; then - PDFPEDANTIC="-Wall -pedantic -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wshadow -Wpointer-arith" - - fi -fi - -BINDINGS="c" -PSPBINDINGS="c" - -if ${CONFIG_SHELL-/bin/sh} ./libtool --features | grep "disable shared" >/dev/null; then - WITH_SHARED=no -fi - -if test "$WITH_SHARED" = "no"; then - WITH_JAVA=no - WITH_PERL=no - WITH_PYTHON=no - WITH_TCL=no -fi - -if test "$WITH_CXX" = "yes" ; then - BINDINGS="$BINDINGS cpp" -fi -if test "$WITH_JAVA" = "yes" ; then - BINDINGS="$BINDINGS java" - PSPBINDINGS="$PSPBINDINGS java" -fi -if test "$WITH_PERL" = "yes" ; then - BINDINGS="$BINDINGS perl" -fi -if test "$WITH_PYTHON" = "yes" ; then - BINDINGS="$BINDINGS python" -fi -if test "$WITH_TCL" = "yes" ; then - BINDINGS="$BINDINGS tcl" -fi - -if test -f ptf/Makefile ; then - PTFDIR="ptf" - GENERATED_FILES="$GENERATED_FILES ptf/src/dot/dot.pl" -fi - -if test "$WITH_DEBUG" = "yes"; then - CFLAGS="$CFLAGS -DDEBUG" -fi - -if test "$WITH_PROFILE" = "yes"; then - CFLAGS="$CFLAGS -pg" - LDFLAGS="$LDFLAGS -pg" -fi - -DEFINES="$CFLAGS $DEFINES $INCLUDES $PLATFORM" - -EXTERNALLIBS="$LDFLAGS $EXTERNALLIBS" - -PDFLIBCONVENIENT="$PDFLIB_LINK \$(top_builddir)/libs/pdflib/p_basic\$(LO) $PDCORELIBLINK $PNGLIBLINK $FLATELIBLINK $TIFFLIBLINK $PDILIBLINK $JPEGLIBLINK" - -if test "$WITH_SHARED" = "no"; then - RPATH="" -else - RPATH="-rpath \$(libdir) -version-info $LTVERSIONINFO" - -fi - -GENERATED_FILES="$GENERATED_FILES config/mkcommon.inc config/mkprogs.inc config/mklibs.inc config/mksubdirs.inc config/mkbind.inc pdflib-config" - -ac_config_files="$ac_config_files $GENERATED_FILES" -ac_config_commands="$ac_config_commands default" -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 overriden 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, don't put newlines in cache variables' values. -# 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. -{ - (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *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 \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if cmp -s $cache_file confcache; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - 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}' - -# 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 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\EOF -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g -t quote -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g -t quote -d -: quote -s,[ `~#$^&*(){}\\|;'"<>?],\\&,g -s,\[,\\&,g -s,\],\\&,g -s,\$,$$,g -p -EOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:8486: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated automatically by configure. -# 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 -SHELL=\${CONFIG_SHELL-$SHELL} -ac_cs_invocation="\$0 \$@" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi - -# Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } - -exec 6>&1 - -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\EOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -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 - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to ." -EOF - -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - shift - set dummy "$ac_option" "$ac_optarg" ${1+"$@"} - shift - ;; - -*);; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_need_defaults=false;; - esac - - case $1 in - # Handling of the options. -EOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:8657: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - shift - CONFIG_FILES="$CONFIG_FILES $1" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - shift - CONFIG_HEADERS="$CONFIG_HEADERS $1" - ac_need_defaults=false;; - - # This is an error. - -*) { { echo "$as_me:8676: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -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" ;; - - esac - shift -done - -exec 5>>config.log -cat >&5 << _ACEOF - -## ----------------------- ## -## Running config.status. ## -## ----------------------- ## - -This file was extended by $as_me 2.52, executed with - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - > $ac_cs_invocation -on `(hostname || uname -n) 2>/dev/null | sed 1q` - -_ACEOF -EOF - -cat >>$CONFIG_STATUS <<\EOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "$GENERATED_FILES" ) CONFIG_FILES="$CONFIG_FILES $GENERATED_FILES" ;; - "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - *) { { echo "$as_me:8713: error: invalid argument: $ac_config_target" >&5 -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_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. -: ${TMPDIR=/tmp} -{ - tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=$TMPDIR/cs$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in $TMPDIR" >&2 - { (exit 1); exit 1; } -} - -EOF - -cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@DEFS@,$DEFS,;t t -s,@LIBS@,$LIBS,;t t -s,@PDFLIB_MAJOR@,$PDFLIB_MAJOR,;t t -s,@PDFLIB_MINOR@,$PDFLIB_MINOR,;t t -s,@PDFLIB_REVISION@,$PDFLIB_REVISION,;t t -s,@LTVERSIONINFO@,$LTVERSIONINFO,;t t -s,@PDFLIB_LTCURRENT@,$PDFLIB_LTCURRENT,;t t -s,@PDFLIB_LTREVISION@,$PDFLIB_LTREVISION,;t t -s,@PDFLIB_LTAGE@,$PDFLIB_LTAGE,;t t -s,@PDFLIBNAME@,$PDFLIBNAME,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@CPP@,$CPP,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@LN_S@,$LN_S,;t t -s,@ECHO@,$ECHO,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@DLLTOOL@,$DLLTOOL,;t t -s,@ac_ct_DLLTOOL@,$ac_ct_DLLTOOL,;t t -s,@AS@,$AS,;t t -s,@ac_ct_AS@,$ac_ct_AS,;t t -s,@OBJDUMP@,$OBJDUMP,;t t -s,@ac_ct_OBJDUMP@,$ac_ct_OBJDUMP,;t t -s,@LIBTOOL@,$LIBTOOL,;t t -s,@PLATFORM_ID@,$PLATFORM_ID,;t t -s,@VERSION@,$VERSION,;t t -s,@RM@,$RM,;t t -s,@JAVAINCLUDE@,$JAVAINCLUDE,;t t -s,@PERL@,$PERL,;t t -s,@PERLINCLUDE@,$PERLINCLUDE,;t t -s,@PERLLIBDIR@,$PERLLIBDIR,;t t -s,@PERLBOOLDEF@,$PERLBOOLDEF,;t t -s,@PERLLINK@,$PERLLINK,;t t -s,@PYINCLUDE@,$PYINCLUDE,;t t -s,@PYTHONBIN@,$PYTHONBIN,;t t -s,@PYTHONLIBDIR@,$PYTHONLIBDIR,;t t -s,@TCL@,$TCL,;t t -s,@TCLINCLUDE@,$TCLINCLUDE,;t t -s,@TCLPACKAGEDIR@,$TCLPACKAGEDIR,;t t -s,@TCLBIN@,$TCLBIN,;t t -s,@PDCORELIBINC@,$PDCORELIBINC,;t t -s,@PDCORELIBLINK@,$PDCORELIBLINK,;t t -s,@FLATELIBLINK@,$FLATELIBLINK,;t t -s,@FLATELIBINC@,$FLATELIBINC,;t t -s,@PNGLIBINC@,$PNGLIBINC,;t t -s,@PNGLIBLINK@,$PNGLIBLINK,;t t -s,@TIFFLIBINC@,$TIFFLIBINC,;t t -s,@TIFFLIBLINK@,$TIFFLIBLINK,;t t -s,@JPEGLIBINC@,$JPEGLIBINC,;t t -s,@JPEGLIBLINK@,$JPEGLIBLINK,;t t -s,@PDILIBINC@,$PDILIBINC,;t t -s,@PDILIBLINK@,$PDILIBLINK,;t t -s,@PDFLIBCONVENIENT@,$PDFLIBCONVENIENT,;t t -s,@PDFLIBINC@,$PDFLIBINC,;t t -s,@PDFLIBLINK@,$PDFLIBLINK,;t t -s,@PDFLIB_LINK@,$PDFLIB_LINK,;t t -s,@PSPLIBINC@,$PSPLIBINC,;t t -s,@PSPLIBLINK@,$PSPLIBLINK,;t t -s,@PSPLIB_LINK@,$PSPLIB_LINK,;t t -s,@TETLIBINC@,$TETLIBINC,;t t -s,@TETLIBLINK@,$TETLIBLINK,;t t -s,@TETLIB_LINK@,$TETLIB_LINK,;t t -s,@PDULIBINC@,$PDULIBINC,;t t -s,@PDULIBLINK@,$PDULIBLINK,;t t -s,@PDPAGELIBINC@,$PDPAGELIBINC,;t t -s,@PDPAGELIBLINK@,$PDPAGELIBLINK,;t t -s,@CXX@,$CXX,;t t -s,@CXXFLAGS@,$CXXFLAGS,;t t -s,@ac_ct_CXX@,$ac_ct_CXX,;t t -s,@STDCPP@,$STDCPP,;t t -s,@PDFPEDANTIC@,$PDFPEDANTIC,;t t -s,@PHP_PDFLIBS@,$PHP_PDFLIBS,;t t -s,@LIBTARGETS@,$LIBTARGETS,;t t -s,@BINDTARGETS@,$BINDTARGETS,;t t -s,@PROGTARGETS@,$PROGTARGETS,;t t -s,@BINDINGS@,$BINDINGS,;t t -s,@PSPBINDINGS@,$PSPBINDINGS,;t t -s,@PTFDIR@,$PTFDIR,;t t -s,@WITH_PDI@,$WITH_PDI,;t t -s,@EXTERNALLIBS@,$EXTERNALLIBS,;t t -s,@RPATH@,$RPATH,;t t -s,@MATHLIB@,$MATHLIB,;t t -s,@INCLUDES@,$INCLUDES,;t t -s,@DEFINES@,$DEFINES,;t t -s,@WITH_SHARED@,$WITH_SHARED,;t t -CEOF - -EOF - - cat >>$CONFIG_STATUS <<\EOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -EOF -cat >>$CONFIG_STATUS <<\EOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - { case "$ac_dir" in - [\\/]* | ?:[\\/]* ) as_incr_dir=;; - *) as_incr_dir=.;; -esac -as_dummy="$ac_dir" -for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do - case $as_mkdir_dir in - # Skip DOS drivespec - ?:) as_incr_dir=$as_mkdir_dir ;; - *) - as_incr_dir=$as_incr_dir/$as_mkdir_dir - test -d "$as_incr_dir" || mkdir "$as_incr_dir" - ;; - esac -done; } - - ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` - else - ac_dir_suffix= ac_dots= - fi - - case $srcdir in - .) ac_srcdir=. - if test -z "$ac_dots"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_dots$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_dots$srcdir ;; - esac - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_dots$INSTALL ;; - esac - - if test x"$ac_file" != x-; then - { echo "$as_me:9009: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # 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 automatically by config.status. */ - configure_input="Generated automatically from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:9027: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo $f;; - *) # Relative - if test -f "$f"; then - # Build tree - echo $f - elif test -f "$srcdir/$f"; then - # Source tree - echo $srcdir/$f - else - # /dev/null tree - { { echo "$as_me:9040: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } -EOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -EOF -cat >>$CONFIG_STATUS <<\EOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - - case $ac_dest in - default ) - chmod +x pdflib-config - ;; - esac -done -EOF - -cat >>$CONFIG_STATUS <<\EOF - -{ (exit 0); exit 0; } -EOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - -# 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=: - exec 5>/dev/null - $SHELL $CONFIG_STATUS || 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 "$WITH_SHARED" = "no" ; then - { echo "$as_me:9112: WARNING: Can't create shared PDFlib libraries on this platform." >&5 -echo "$as_me: WARNING: Can't create shared PDFlib libraries on this platform." >&2;} - { echo "$as_me:9114: WARNING: PDFlib will work when linked to a C or C++ program," >&5 -echo "$as_me: WARNING: PDFlib will work when linked to a C or C++ program," >&2;} - { echo "$as_me:9116: WARNING: but other language bindings will be unavailable." >&5 -echo "$as_me: WARNING: but other language bindings will be unavailable." >&2;} -fi - -if test "$WITH_PSP" = "yes" ; then -echo "$as_me:9121: result: _____________________________________________________________" >&5 -echo "${ECHO_T}_____________________________________________________________" >&6 -echo "$as_me:9123: result: For your convenience, here's a summary of configure's results:" >&5 -echo "${ECHO_T}For your convenience, here's a summary of configure's results:" >&6 -echo "$as_me:9125: result: Java language binding for PSP: $WITH_JAVA" >&5 -echo "${ECHO_T}Java language binding for PSP: $WITH_JAVA" >&6 -echo "$as_me:9127: result: PHP language binding for PSP: no, see bind/psp/php/readme.txt" >&5 -echo "${ECHO_T}PHP language binding for PSP: no, see bind/psp/php/readme.txt" >&6 -fi - -if test "$WITH_PDFLIB" = "yes" ; then -echo "$as_me:9132: result: _____________________________________________________________" >&5 -echo "${ECHO_T}_____________________________________________________________" >&6 -echo "$as_me:9134: result: For your convenience, here's a summary of configure's results:" >&5 -echo "${ECHO_T}For your convenience, here's a summary of configure's results:" >&6 -echo "$as_me:9136: result: " >&5 -echo "${ECHO_T}" >&6 -echo "$as_me:9138: result: Support for shared libraries: $WITH_SHARED" >&5 -echo "${ECHO_T}Support for shared libraries: $WITH_SHARED" >&6 -echo "$as_me:9140: result: C++ language binding for PDFlib: $WITH_CXX" >&5 -echo "${ECHO_T}C++ language binding for PDFlib: $WITH_CXX" >&6 -echo "$as_me:9142: result: Java language binding for PDFlib: $WITH_JAVA" >&5 -echo "${ECHO_T}Java language binding for PDFlib: $WITH_JAVA" >&6 -echo "$as_me:9144: result: Perl language binding for PDFlib: $WITH_PERL" >&5 -echo "${ECHO_T}Perl language binding for PDFlib: $WITH_PERL" >&6 -echo "$as_me:9146: result: Python language binding for PDFlib: $WITH_PYTHON" >&5 -echo "${ECHO_T}Python language binding for PDFlib: $WITH_PYTHON" >&6 -echo "$as_me:9148: result: Tcl language binding for PDFlib: $WITH_TCL" >&5 -echo "${ECHO_T}Tcl language binding for PDFlib: $WITH_TCL" >&6 -echo "$as_me:9150: result: PHP language binding for PDFlib: no, see bind/pdflib/php/readme.txt" >&5 -echo "${ECHO_T}PHP language binding for PDFlib: no, see bind/pdflib/php/readme.txt" >&6 - -echo "$as_me:9153: result: PDF import library (PDI): $WITH_PDI" >&5 -echo "${ECHO_T}PDF import library (PDI): $WITH_PDI" >&6 -if test "$WITH_PDI" = "no" ; then - echo "$as_me:9156: result: Note: if you purchase the additional PDF import library (PDI)" >&5 -echo "${ECHO_T} Note: if you purchase the additional PDF import library (PDI)" >&6 - echo "$as_me:9158: result: you can also manipulate existing PDF documents with PDFlib." >&5 -echo "${ECHO_T} you can also manipulate existing PDF documents with PDFlib." >&6 - echo "$as_me:9160: result: The additional block feature can be used to personalize PDF." >&5 -echo "${ECHO_T} The additional block feature can be used to personalize PDF." >&6 - echo "$as_me:9162: result: See http://www.pdflib.com for details." >&5 -echo "${ECHO_T} See http://www.pdflib.com for details." >&6 -fi -fi - -echo "$as_me:9167: result: " >&5 -echo "${ECHO_T}" >&6 -echo "$as_me:9169: result: Please observe the licensing terms for commercial PDFlib usage." >&5 -echo "${ECHO_T}Please observe the licensing terms for commercial PDFlib usage." >&6 -echo "$as_me:9171: result: PDFlib license agreement and purchase order can be found in the doc directory." >&5 -echo "${ECHO_T}PDFlib license agreement and purchase order can be found in the doc directory." >&6 -echo "$as_me:9173: result: " >&5 -echo "${ECHO_T}" >&6 diff --git a/src/libs/pdflib/configure.in b/src/libs/pdflib/configure.in deleted file mode 100644 index d5f4b57d53..0000000000 --- a/src/libs/pdflib/configure.in +++ /dev/null @@ -1,1095 +0,0 @@ -dnl ---------------------------------------------------------------------------* -dnl PDFlib - A library for generating PDF on the fly | -dnl ---------------------------------------------------------------------------+ -dnl Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | -dnl ---------------------------------------------------------------------------+ -dnl | -dnl This software is subject to the PDFlib license. It is NOT in the | -dnl public domain. Extended versions and commercial licenses are | -dnl available, please check http://www.pdflib.com. | -dnl | -dnl --------------------------------------------------------------------------*/ - -dnl $Id: configure.in 14574 2005-10-29 16:27:43Z bonefish $ -dnl -dnl Process this file with autoconf to produce a configure script. -dnl - -# -------------------------------------------------------------------- -# PDFlib general setup -# -------------------------------------------------------------------- - -dnl source directory sanity check using an arbitrary source file -AC_INIT(libs/pdcore/pc_config.h) - -dnl do not change this (version.sh will do it for you :) -VERSION="5.0.3" -PDFLIB_MAJOR=5 -PDFLIB_MINOR=0 -PDFLIB_REVISION=3 - -AC_SUBST(PDFLIB_MAJOR) -AC_SUBST(PDFLIB_MINOR) -AC_SUBST(PDFLIB_REVISION) - -dnl Important: Interface numbers are completely independent of release -dnl or version numbers! See doc/readme-source-unix.txt for details. - -PDFLIB_LTCURRENT=4 -PDFLIB_LTREVISION=1 -PDFLIB_LTAGE=2 - -LTVERSIONINFO="$PDFLIB_LTCURRENT:$PDFLIB_LTREVISION:$PDFLIB_LTAGE" - -AC_SUBST(LTVERSIONINFO) -AC_SUBST(PDFLIB_LTCURRENT) -AC_SUBST(PDFLIB_LTREVISION) -AC_SUBST(PDFLIB_LTAGE) - -dnl Get the current directory, needed to feed absolut paths to linkers -dnl even if called outside of our build environment (i.e. PHP). Might cause some -dnl problems on exotic platforms, but we are not yet aware of problems, -dnl so we use $PDFWD like $top_builddir if abspath is needed. -PDFPWD=`pwd` - -dnl The name of the library should only be changed in very rare cases, -dnl such as Digital Unix where a (completely different) libpdf already exists. -dnl Note: do not include any file name suffix here. - -PDFLIBNAME=pdf -MATHLIB="-lm" - -AC_ARG_WITH(pdflibname,[ --with-pdflibname=name set file name of generated library [default=pdf]],[PDFLIBNAME="$withval"]) - -AC_ARG_WITH(libm,[ --with-libm=name set math library option [default=-lm]],[MATHLIB="$withval"]) - -AC_SUBST(PDFLIBNAME) - -dnl install-sh will be searched (and found) here -AC_CONFIG_AUX_DIR(config) - -builtin(include, config/aclocal.m4) - -dnl Check the system name -AC_CANONICAL_HOST - -AC_MSG_CHECKING(MACHDEP) -if test -z "$MACHDEP" -then - if test -f /usr/lib/NextStep/software_version; then - set X `hostinfo | grep 'NeXT Mach.*:' | \ - sed -e 's/://' -e 's/\./_/'` && \ - ac_sys_system=next && ac_sys_release=$4 - MACHDEP="$ac_sys_system$ac_sys_release$ac_sys_cpu" - else - ac_sys_system=`uname -s` - if test "$ac_sys_system" = "AIX" ; then - ac_sys_release=`uname -v` - else - ac_sys_release=`uname -r` - fi - ac_md_system=`echo $ac_sys_system | - tr -d '[/ ]' | tr '[[A-Z]]' '[[a-z]]'` - ac_md_release=`echo $ac_sys_release | - tr -d '[/ ]' | sed 's/\..*//'` - MACHDEP="$ac_md_system$ac_md_release" - fi - case MACHDEP in - '') MACHDEP=unknown;; - esac -fi - -AC_MSG_RESULT($MACHDEP) - -dnl choose compiler -AC_PROG_CC -AC_PROG_CPP -AC_PROG_INSTALL -dnl common stuff, unlikely to be changed -SHELL="/bin/sh" -RM="rm -rf" - -dnl Default defines -- some systems may need special handling here -dnl We also map some system names to a more user-friendly and well-known version - -INCLUDES= - -PLATFORM_ID=$ac_sys_system -PLATFORM="-DPDF_PLATFORM=\\\"\"$ac_sys_system\"\\\"" - -case $ac_sys_system in - dnl TODO: check if this is still true - dnl Our TIFF code currently requires special handling on AIX - aix*|AIX*) - DEFINES="$DEFINES -DAIX";; - - cyg*|CYG*) DEFINES="$DEFINES -U_WIN32 -UWIN32 -U__WIN32__ -U_Windows";; - - dnl HP needs option for ANSI mode if the HP compiler is used instead of gcc - hp*|HP*) - if test "$GCC" = ""; then - DEFINES="$DEFINES -Ae" - fi;; - - dnl The OSF JNI requires libraries to be built thread-safe, which is true - dnl for PDFlib - osf1*|OSF1*) - if test "$GCC" = ""; then - DEFINES="$DEFINES -pthread" - fi;; - - SunOS*) - ac_sys_arch=`uname -p` - if test "$ac_sys_arch" = "i386" ; then - PLATFORM_ID="SunOS-i386" - PLATFORM="-DPDF_PLATFORM=\\\"\"sunOS\"\\\"" - fi - - if test "$GCC" = ""; then - DEFINES="$DEFINES -xmemalign" - fi - ;; - - dnl MacOS X doesn't seem to like -lm, and doesn't actually need it; - dnl libtool only works if --with-gnu-ld=yes is supplied, so we try - dnl to set it here already. - rhapsody|Rhapsody*) - PLATFORM="-DPDF_PLATFORM=\\\"\"Mac OS X Server\"\\\"" - with_gnu_ld=yes - MATHLIB="";; - - darwin|Darwin*) - PLATFORM="-DPDF_PLATFORM=\\\"\"Mac OS X\"\\\"" - PLATFORM_ID="MacOSX" - with_gnu_ld=yes - MATHLIB="";; - - dnl TODO: add sparc, ... - linux|Linux*) - ac_sys_arch=`uname -m` - if test "$ac_sys_arch" = "s390" ; then - PLATFORM_ID="zSeries-Linux" - PLATFORM="-DPDF_PLATFORM=\\\"\"ZSeries Linux\"\\\"" - fi - if test "$ac_sys_arch" = "ppc" ; then - PLATFORM_ID="ppc-Linux" - PLATFORM="-DPDF_PLATFORM=\\\"\"ppc Linux\"\\\"" - fi - # neccesary to be compatible with glibc 2.3.2 on RH 9 - if test "$ac_sys_arch" = "i686" ; then - DEFINES="$DEFINES -D__NO_CTYPE" - fi - if test "$ac_sys_arch" = "ia64" ; then - PLATFORM_ID="Linux-ia64" - PLATFORM="-DPDF_PLATFORM=\\\"\"Linux-ia64\"\\\"" - fi - ;; - - - FreeBSD) - tmp_vers=`uname -r` - case $tmp_vers in - 5.*) - PLATFORM="-DPDF_PLATFORM=\\\"\"FreeBSD5\"\\\"" ;; - esac - ;; - - OpenBSD) - tmp_vers=`uname -r` - if test "$tmp_vers" = "3.4" ; then - PLATFORM="-DPDF_PLATFORM=\\\"\"OpenBSD34\"\\\"" - fi - ;; - - dnl OS/390 specials - *OS/390*) - DEFINES="$DEFINES -DOS390" - CC=c89 - LD=c89 - PLATFORM_ID=OS390 - PLATFORM="-DPDF_PLATFORM=\\\"\"zSeries USS\"\\\"" - # add special compile options for java2 on s390 - set X `java -version 2>&1 | grep '1.3.'` && \ - DEFINES="$DEFINES -W \"c,langlvl(extended)\" -W \"c,float(ieee)\"" - ;; - - *) ;; -esac - -GENERATED_FILES="" - -dnl select debugging configuration -WITH_DEBUG=no - -dnl add special compileoptions for xplink -WITH_XPLINK=no -AC_ARG_ENABLE(xplink, [ --enable-xplink turn on xplink linking], -if test "$enableval" = "yes" ; then - WITH_XPLINK=yes -fi) - -if test "$WITH_XPLINK" = "yes"; then - case $ac_sys_system in - *OS/390*) - DEFINES="-W \"c,xplink\" -W \"l,xplink\" -1 -W c,expo,dll -W c,GONUM $DEFINES" - ;; - *) ;; - esac -fi - -dnl We hope to build shared libraries on this platform -WITH_SHARED=yes - -WITH_PROFILE=no - -AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging], -if test "$enableval" = "yes" ; then - WITH_DEBUG=yes -fi) - -AC_ARG_ENABLE(profile, [ --enable-profile turn on profiling], -if test "$enableval" = "yes" ; then - WITH_PROFILE=yes -fi) - -AC_EXEEXT -AC_OBJEXT - -dnl Prepare libtool -dnl Required for dlopening our libraries, as done in the language interpreters. - -AC_LIBTOOL_DLOPEN -AC_LIBTOOL_WIN32_DLL -AC_PROG_LIBTOOL - -AC_SUBST(PLATFORM_ID) -AC_SUBST(SHELL) -AC_SUBST(EXEEXT) -AC_SUBST(OBJEXT) -AC_SUBST(VERSION) -AC_SUBST(CC) -AC_SUBST(RM) - -# -------------------------------------------------------------------- -# PDFlib Java binding (JNI) -# -------------------------------------------------------------------- - -WITH_JAVA=yes -JAVAINCLUDE="" -JAVAPACKAGE="" - -AC_ARG_WITH(java,[ --with-java=path full path of Java Developers Kit, or no],[ -case $withval in - no) WITH_JAVA=no ;; - yes) WITH_JAVA=yes ;; - *) JAVAPACKAGE=$withval - ;; -esac -]) - -if test "$WITH_JAVA" != "no" ; then - WITH_JAVA=no - AC_MSG_CHECKING(for Java header files) - - # try without any precautions - AC_TRY_CPP([#include ], WITH_JAVA=yes, - [ dirs="$prefix /usr/lib/java /usr/java /usr/java/jdk1.4 /usr/lib/jdk1.4 /opt/java1.4 /usr/lpp/java/J1.4 /usr/java/jdk1.4 /usr/lib/jdk1.4 /usr/jdk14 /jdk1.4 /usr/java/jdk1.3 /usr/include/java /usr/local/java /usr/local/include/kaffe /usr/lib/jdk1.3 /opt/java1.3 /usr/lpp/java/J1.3 /usr/java/jdk1.2 /usr/lib/jdk1.2.2 /usr/lib/jdk1.2.1 /usr/jdk122 /usr/lib/jdk122 /usr/lib/jdk1.2.1 /opt/java1.2 /usr/lpp/java/J1.2 /usr/lib/jdk1.1.8 /usr/jdk118 /usr/lib/jdk118 /usr/lpp/java/J1.1 /opt/java1.1 /usr /opt/local /jdk1.3 /jdk1.2.3 /jdk1.2.2 /jdk1.2.1 /System/Library/Frameworks/JavaVM.framework/Headers /usr/jdk_base/include" - - if test "$JAVAPACKAGE" != ""; then - dirs="$JAVAPACKAGE $dirs" - fi - - # now try to find jni.h - for i in $dirs ; do - if test -r $i/jni.h; then - JAVAINCLUDE="$i" - break - elif test -r $i/include/jni.h; then - JAVAINCLUDE="$i/include" - break - fi - done - ]) - - # now try with an include path - if test "$JAVAINCLUDE" != ""; then - OCPPFLAGS="$CPPFLAGS" - CPPFLAGS="-I$JAVAINCLUDE $OCPPFLAGS" - AC_TRY_CPP([#include ], [ - WITH_JAVA=yes - JAVAINCLUDE="-I$JAVAINCLUDE" - ],) - CPPFLAGS="$OCPPFLAGS" - fi - - # if the above didn't work probably jni_md.h is missing - if test "WITH_JAVA" != "yes" ; then - if test "$JAVAINCLUDE" != ""; then - subdirs="$JAVAINCLUDE $JAVAINCLUDE/$MACHDEP $JAVAINCLUDE/$ac_md_system $JAVAINCLUDE/solaris $JAVAINCLUDE/genunix $JAVAINCLUDE/alpha $JAVAINCLUDE/win32 $JAVAINCLUDE/mvs $JAVAINCLUDE/irix" - for i in $subdirs ; do - if test -r $i/jni_md.h; then - JAVAINCLUDE="-I$JAVAINCLUDE -I$i" - WITH_JAVA=yes - break - fi - done - fi - fi - - if test "$WITH_JAVA" = "no"; then - AC_MSG_RESULT(not found) - else - AC_MSG_RESULT($JAVAINCLUDE) - AC_SUBST(JAVAINCLUDE) - fi - -fi - -# ---------------------------------------------------------------- -# PDFlib Perl binding -# ---------------------------------------------------------------- - -WITH_PERL=yes -PERLBIN=nope -PERLINCLUDE=nope - -AC_ARG_WITH(perl,[ --with-perl=path full path of Perl executable, or no],[PERLBIN="$withval"],[PERLBIN=nope]) - -if test "$PERLBIN" = "no" ; then - WITH_PERL=no -fi - -AC_ARG_WITH(perlincl,[ --with-perlincl=path full path of Perl include directory],[PERLINCLUDE="$withval"],[PERLINCLUDE=nope]) - -if test "$WITH_PERL" = "yes" ; then - - WITH_PERL=no - dnl First figure out what the name of Perl is - if test "$PERLBIN" = "nope"; then - AC_CHECK_PROGS(PERL, perl perl5.7.0 perl5.6.0 perl5.005 perl5.004 perl5.003 perl5.002 perl5.001 perl5, nope) - else - PERL="$PERLBIN" - fi - AC_MSG_CHECKING(for Perl header file) - if test "$PERL" != "nope"; then - PERL5DIR=`($PERL -e 'use Config; print $Config{archlib};') 2>/dev/null` - if test "$PERL5DIR" != ""; then - if test "$PERLINCLUDE" = "nope"; then - if test -r "$PERL5DIR/perl.h"; then - AC_MSG_RESULT(PERL5DIR/perl.h) - WITH_PERL=yes - PERLINCLUDE="$PERL5DIR" - elif test -r "$PERL5DIR/CORE/perl.h"; then - AC_MSG_RESULT($PERL5DIR/CORE/perl.h) - WITH_PERL=yes - PERLINCLUDE="$PERL5DIR/CORE" - fi - else - WITH_PERL=yes - AC_MSG_RESULT($PERLINCLUDE) - fi - if test "$PERLINCLUDE" = "nope"; then - AC_MSG_RESULT(could not locate perl.h...) - WITH_PERL=no - fi - else - AC_MSG_RESULT(unable to determine Perl configuration) - WITH_PERL=no - fi - - PERLLIBDIR=`($PERL -e 'use Config; print $Config{sitearchexp};') 2>/dev/null` - if test -z "$PERLLIBDIR" -o ! -d "$PERLLIBDIR"; then - AC_MSG_RESULT( unable to determine perl shared library directory) - fi - - else - AC_MSG_RESULT(could not figure out how to run perl) - PERLINCLUDE="/usr/local/lib/perl5/5.6.0/archname/CORE" - fi - - dnl The Perl include files contain special handling for the bool type - dnl on NeXT (sigh). We'll run into trouble if we don't work around this. - - case $ac_sys_system in - NeXT|next) PERLBOOLDEF="";; - *) PERLBOOLDEF="-Dbool=char -DHAS_BOOL";; - esac - - dnl Some platforms require linking the perl library directly. - dnl We use $PERLINCLUDE for this since it both contains the Perl library - dnl _and_ the include files. Other systems don't explicitly link the - dnl Perl library. - dnl $MATHLIB comes from EXTERNALLIBS if needed - - case $ac_sys_system/$ac_sys_release in - hp*|HP*) PERLLINK="";; - cyg*|CYG*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - aix*|AIX*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - osf1*|OSF1*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - darwin|Darwin*) PERLLINK="-L$PERLINCLUDE -lperl $PERLLINK";; - *) ;; - esac - - PERLINCLUDE="-I$PERLINCLUDE" - AC_SUBST(PERLINCLUDE) - AC_SUBST(PERLLIBDIR) - AC_SUBST(PERLBOOLDEF) - AC_SUBST(PERLLINK) - AC_SUBST(PERL) -fi - -# ---------------------------------------------------------------- -# PDFlib Python binding -# ---------------------------------------------------------------- - -WITH_PYTHON=yes -PYINCLUDE=nope -PYPACKAGE=nope - -AC_ARG_WITH(py,[ --with-py=path full path of Python root directory, or no],[PYPACKAGE="$withval"], [PYPACKAGE=nope]) - -if test "$PYPACKAGE" = "no" ; then - WITH_PYTHON=no -fi - -AC_ARG_WITH(pyincl,[ --with-pyincl=path full path of Python include directory],[PYINCLUDE="$withval"], [PYINCLUDE=nope]) - -if test "$PYINCLUDE" = "nope" -a "$PYPACKAGE" != "no"; then - PYINCLUDE="$PYPACKAGE/include" -fi - -if test "$WITH_PYTHON" != "no" ; then - WITH_PYTHON=no - AC_MSG_CHECKING(for Python header files) - - dirs="$PYINCLUDE \ - $PYINCLUDE/python2.3 \ - $prefix/include/python2.3 \ - /usr/local/include/python2.3 \ - /usr/include/python2.3 \ - $prefix/include/python2.3 \ - $PYINCLUDE/python2.2 \ - $prefix/include/python2.2 \ - /usr/local/include/python2.2 \ - /usr/include/python2.2 \ - $prefix/include/python2.2 \ - $PYINCLUDE/python2.1 \ - $prefix/include/python2.1 \ - /usr/local/include/python2.1 \ - /usr/include/python2.1 \ - $prefix/include/python2.1 \ - $PYINCLUDE/python2.0 \ - $prefix/include/python2.0 \ - /usr/local/include/python2.0 \ - /usr/include/python2.0 \ - $prefix/include/python2.0 \ - $PYINCLUDE/python1.6 \ - $prefix/include/python1.6 \ - /usr/local/include/python1.6 \ - /usr/include/python1.6 \ - $prefix/include/python1.6 \ - $PYINCLUDE/python1.5 \ - $prefix/include/python1.5 \ - /usr/local/include/python1.5 \ - /usr/include/python1.5 \ - $prefix/include/python1.5 \ - $PYINCLUDE/python1.4 \ - $prefix/include/python1.4 \ - /usr/local/include/python1.4 \ - /usr/include/python1.4 \ - $prefix/include/python1.4" - for i in $dirs ; do - if test -r $i/Python.h; then - AC_MSG_RESULT($i) - PYINCLUDE="-I$i" - WITH_PYTHON=yes - break - fi - done - if test "$PYINCLUDE" = "nope" -o "$PYINCLUDE" = "$PYPACKAGE/include"; then - AC_MSG_RESULT(not found) - WITH_PYTHON=no - fi - - AC_SUBST(PYINCLUDE) - - AC_CHECK_PROGS(PYTHONBIN, python, nope) - - if test "$PYTHONBIN" = "nope" ; then - WITH_PYTHON=no - fi - - if test "$WITH_PYTHON" = "yes" ; then - AC_MSG_CHECKING(for Python shared library path) - - if test "$PYTHONBIN" = "nope" ; then - WITH_PYTHON=no - else - PYTHONLIBDIR=`cat << EOF | python -import sys -import string -print string.join(filter(lambda x: -1 != string.find(x, 'dynload'), sys.path)) -EOF -` - if test "$PYTHONLIBDIR" = "" ; then - PYTHONLIBDIR=/usr/lib - fi - AC_SUBST(PYTHONLIBDIR) - - fi - - AC_MSG_RESULT($PYTHONLIBDIR) - fi -fi - -# -------------------------------------------------------------------- -# PDFlib Tcl binding -# -------------------------------------------------------------------- - -WITH_TCL=yes -TCLINCLUDE=nope -TCLPACKAGEDIR=nope -TCLBIN=nope - -AC_ARG_WITH(tcl,[ --with-tcl=path full path of Tcl executable, or no],[TCLBIN="$withval"]) - -if test "$TCLBIN" = "no" ; then - WITH_TCL=no -fi - -AC_ARG_WITH(tclpkg,[ --with-tclpkg=path full path of Tcl package install directory],[TCLPACKAGEDIR="$withval"],[TCLPACKAGEDIR=nope]) - -AC_ARG_WITH(tclincl,[ --with-tclincl=path full path of Tcl include directory],[TCLINCLUDE="$withval"],[TCLINCLUDE=nope]) - -if test "$WITH_TCL" = "yes" ; then - WITH_TCL=no - AC_MSG_CHECKING(for Tcl header files) - - if test "$TCLINCLUDE" = "nope"; then - AC_TRY_CPP([#include ], , TCLINCLUDE="nope") - if test "$TCLINCLUDE" = "nope"; then - dirs="$prefix/include /usr/local/include /usr/include /opt/local/include /home/sci/local/include /usr/pkg/include /System/Library/Frameworks/Tcl.framework/Versions/8.3/Headers /System/Library/Frameworks/Tcl.framework/Versions/8.2/Headers" - for i in $dirs ; do - if test -r $i/tcl.h; then - AC_MSG_RESULT($i) - TCLINCLUDE="$i" - WITH_TCL=yes - break - fi - done - fi - - if test "$TCLINCLUDE" = "nope"; then - AC_MSG_RESULT(not found) - WITH_TCL=no - fi - else - AC_MSG_RESULT($TCLINCLUDE) - fi - - dnl We need at least Tcl 8.0 because of its support for binary strings - dnl and the object interface. - - if test "$TCLINCLUDE" != "nope" -a "$TCLBIN" = "nope"; then - AC_CHECK_PROGS(TCL, tclsh tclsh8.4 tclsh8.3 tclsh8.2 tclsh8.1 tclsh8.0, nope) - TCLBIN=$TCL - fi - - if test "$TCLINCLUDE" = "nope" -o "$TCLBIN" = "nope"; then - WITH_TCL=no - else - dnl Check the installed Tcl version -- must be 8.0 or higher - TCLVERSION=`echo "puts [[info tclversion]]" | $TCLBIN` - if test "$TCLVERSION" = "7.6" -o "$TCLVERSION" = "7.5" -o "$TCLVERSION" = "7.4" -o "$TCLVERSION" = "7.3" -o "$TCLVERSION" = "7.1" -o "$TCLVERSION" = "7.0"; then - AC_MSG_RESULT([ Tcl version 8.0 or newer is required for PDFlib.]) - AC_MSG_RESULT([ PDFlib support for Tcl will not be built.]) - WITH_TCL=no - else - if test "$TCLVERSION" = "8.0" -o "$TCLVERSION" = "8.1"; then - AC_MSG_RESULT([ The PDFlib build process requires Tcl 8.2 or above. Please read]) - AC_MSG_RESULT([ bind/tcl/readme.txt for instructions on manually building PDFlib]) - AC_MSG_RESULT([ for Tcl 8.0 or 8.1.]) - fi - - if test "$TCLPACKAGEDIR" = "nope"; then - dnl Let tcl decide where to install the package - TCLPACKAGEDIR=`(echo "puts \\$auto_path" | "$TCLBIN" | awk '{print $1}') 2>/dev/null` - fi - - if test "$TCLPACKAGEDIR" = "nope" -o -z "$TCLPACKAGEDIR" -o ! -d "$TCLPACKAGEDIR"; then - AC_MSG_RESULT(unable to determine Tcl package directory) - WITH_TCL=no - - else - - TCLPACKAGEDIR=$TCLPACKAGEDIR/pdflib - WITH_TCL=yes - fi - fi - fi -fi - -TCLINCLUDE="-I$TCLINCLUDE" -AC_SUBST(TCLINCLUDE) -AC_SUBST(TCLPACKAGEDIR) -AC_SUBST(TCLBIN) - -# ---------------------------------------------------------------- -# PDFlib/PSP auxiliary libraries: -# We support only our own copy of tifflib, libpng and zlib -# pdcore is needed in all configurations -# ---------------------------------------------------------------- - -# The list of Makefile targets for our internal libraries -# pdcore is always needed -PHP_PDFLIBS="$PDFPWD/libs/pdflib/p_basic.lo" - -PDCORELIBINC="-I\$(top_builddir)/libs/pdcore" -PDCORELIBLINK="\$(top_builddir)/libs/pdcore/libpdcore\$(LA)" -PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdcore/libpdcore.la" -LIBTARGETS="$LIBTARGETS pdcore" -BINDTARGETS="" -PROGTARGETS="" - -AC_SUBST(PDCORELIBINC) -AC_SUBST(PDCORELIBLINK) - -# zlib -if test -d libs/flate ; then - FLATELIBINC="-I\$(top_builddir)/libs/flate" - FLATELIBLINK="\$(top_builddir)/libs/flate/libz\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/flate/libz.la" - LIBTARGETS="$LIBTARGETS flate" -else - FLATELIBINC="" - FLATELIBLINK="" -fi -AC_SUBST(FLATELIBLINK) -AC_SUBST(FLATELIBINC) - -# pnglib -if test -d libs/png ; then - PNGLIBINC="-I\$(top_builddir)/libs/png" - PNGLIBLINK="\$(top_builddir)/libs/png/libpng\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/png/libpng.la" - LIBTARGETS="$LIBTARGETS png" -else - PNGLIBINC="" - PNGLIBLINK="" -fi -AC_SUBST(PNGLIBINC) -AC_SUBST(PNGLIBLINK) - -# tifflib -if test -d libs/tiff ; then - AC_C_BIGENDIAN() - TIFFLIBINC="-I\$(top_builddir)/libs/tiff" - TIFFLIBLINK="\$(top_builddir)/libs/tiff/libtiff\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/tiff/libtiff.la" - LIBTARGETS="$LIBTARGETS tiff" -else - TIFFLIBINC="" - TIFFLIBLINK="" -fi -AC_SUBST(TIFFLIBINC) -AC_SUBST(TIFFLIBLINK) - -# jpeglib -#if test -d libs/jpeg6 ; then -# AC_C_BIGENDIAN() -# JPEGLIBINC="-I\$(top_builddir)/libs/jpeg6" -# JPEGLIBLINK="\$(top_builddir)/libs/jpeg6/libjpeg\$(LA)" -# PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/jpeg6/libjpeg6.la" -# LIBTARGETS="$LIBTARGETS jpeg6" -#else - JPEGLIBINC="" - JPEGLIBLINK="" -#fi -AC_SUBST(JPEGLIBINC) -AC_SUBST(JPEGLIBLINK) - - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDI (PDF import library) -# ---------------------------------------------------------------- - -WITH_PDI=no - -AC_MSG_CHECKING(for PDF import library PDI) - -if test -d libs/pdi ; then - WITH_PDI=yes - dnl PDI must be in front because it needs zlib and pdcore - PDILIBINC="-I\$(top_builddir)/libs/pdi" - PDILIBLINK="\$(top_builddir)/libs/pdi/libpdi\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdi/libpdi.la" - - LIBTARGETS="$LIBTARGETS pdi" - PROGTARGETS="$PROGTARGETS pdi" - AC_MSG_RESULT(found) -else - PDILIBINC="" - PDILIBLINK="" - AC_MSG_RESULT(not found) -fi -AC_SUBST(PDILIBINC) -AC_SUBST(PDILIBLINK) - -# ---------------------------------------------------------------- -# PDFlib main library: not needed for PSP -# ---------------------------------------------------------------- - -dnl PDFLIBCONVENIENT contains all convenient libs to build shared libs -dnl like PDFlib, and the wrapper libraries. -dnl PDFLIBLINK contains the files needed to link a program against PDFlib -dnl PDFLIB_LINK contains the files convenient lib -dnl PHP_PDFLIBS contains all libs needed for linking PHP (with ABS paths) -dnl EXTERNALLIBS contains extra libs to be added (i.e. -lm) - -EXTERNALLIBS="$MATHLIB" - -WITH_PDFLIB=no - -AC_MSG_CHECKING(for PDFlib base library pdflib) - -if test -d libs/pdflib ; then - WITH_PDFLIB=yes - PDFLIBINC="-I\$(top_builddir)/libs/pdflib" - PDFLIBLINK="\$(top_builddir)/libs/pdflib/lib$PDFLIBNAME\$(LA)" - PDFLIB_LINK="\$(top_builddir)/libs/pdflib/libpdf_\$(LA)" - PHP_PDFLIBS="$PHP_PDFLIBS $PDFPWD/libs/pdflib/libpdf_.la" - LIBTARGETS="$LIBTARGETS pdflib" - BINDTARGETS="$BINDTARGETS pdflib" - PROGTARGETS="$PROGTARGETS pdflib" - AC_MSG_RESULT(found) -else - PDFLIBINC="" - PDFLIBLINK="" - PDFLIB_LINK="" - PDFLIBCONVENIENT="" - AC_MSG_RESULT(not found) -fi - -AC_SUBST(PDFLIBCONVENIENT) -AC_SUBST(PDFLIBINC) -AC_SUBST(PDFLIBLINK) -AC_SUBST(PDFLIB_LINK) - - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PSP (Pretty Safe PDF) -# ---------------------------------------------------------------- - -WITH_PSP=no -PSPLIBINC="" -PSPLIBLINK="" -PSPLIB_LINK="" - -AC_MSG_CHECKING(for PDFlib PSP (Pretty Safe PDF)) - -if test -d libs/psp ; then - WITH_PSP=yes - AC_ARG_WITH(PSP,[ --without-PSP don't include PSP (Pretty Safe PDF)],[WITH_PSP="$withval"]) - if test "$WITH_PSP" = "yes"; then - LIBTARGETS="$LIBTARGETS psp" - BINDTARGETS="$BINDTARGETS psp" - PROGTARGETS="$PROGTARGETS psp" - PSPLIBINC="-I\$(top_builddir)/libs/psp" - PSPLIBLINK="\$(top_builddir)/libs/psp/libpsp\$(LA)" - PSPLIB_LINK="\$(top_builddir)/libs/psp/libpsp_\$(LA)" - AC_MSG_RESULT(found) - else - AC_MSG_RESULT(not used) - fi -else - AC_MSG_RESULT(not found) -fi -AC_SUBST(PSPLIBINC) -AC_SUBST(PSPLIBLINK) -AC_SUBST(PSPLIB_LINK) - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: TET -# ---------------------------------------------------------------- - -WITH_TET=no -TETLIBINC="" -TETLIBLINK="" -TETLIB_LINK="" - -AC_MSG_CHECKING(for PDFlib TET) - -if test -d libs/tet ; then - WITH_TET=yes - AC_ARG_WITH(TET,[ --without-TET don't include TET],[WITH_TET="$withval"]) - if test "$WITH_TET" = "yes"; then - LIBTARGETS="$LIBTARGETS tet" - PROGTARGETS="$PROGTARGETS tet" - TETLIBINC="-I\$(top_builddir)/libs/tet" - TETLIBLINK="\$(top_builddir)/libs/tet/libtet\$(LA)" - TETLIB_LINK="\$(top_builddir)/libs/tet/libtet_\$(LA)" - AC_MSG_RESULT(found) - else - AC_MSG_RESULT(not used) - fi -else - AC_MSG_RESULT(not found) -fi -AC_SUBST(TETLIBINC) -AC_SUBST(TETLIBLINK) -AC_SUBST(TETLIB_LINK) - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDU -# ---------------------------------------------------------------- -# -WITH_PDU=no -PDULIBINC="" -PDULIBLINK="" - -AC_MSG_CHECKING(for PDFlib PDU) - -if test -d libs/pdu ; then - WITH_PDU=yes - AC_ARG_WITH(PDU,[ --without-PDU don't include PDU],[WITH_PDU="$withval"]) - if test "$WITH_PDU" = "yes"; then - LIBTARGETS="$LIBTARGETS pdu" - PROGTARGETS="$PROGTARGETS pdu" - PDULIBINC="-I\$(top_builddir)/libs/pdu" - PDULIBLINK="\$(top_builddir)/libs/pdu/libpdu\$(LA)" - AC_MSG_RESULT(found) - else - AC_MSG_RESULT(not used) - fi -else - AC_MSG_RESULT(not found) -fi -AC_SUBST(PDULIBINC) -AC_SUBST(PDULIBLINK) - -# ---------------------------------------------------------------- -# PDFlib auxiliary library: PDPAGE -# ---------------------------------------------------------------- - -WITH_PDPAGE=no - -AC_MSG_CHECKING(for PDFlib PDPAGE) - -if test -d libs/pdpage ; then - if test "$WITH_TET" = "yes" ; then - WITH_PDPAGE=yes - fi -fi -if test "$WITH_PDPAGE" = "yes" ; then - LIBTARGETS="$LIBTARGETS pdpage" - PDPAGELIBINC="-I\$(top_builddir)/libs/pdpage" - PDPAGELIBLINK="\$(top_builddir)/libs/pdpage/libpdpage\$(LA)" - AC_MSG_RESULT(found) -else - PDPAGELIBINC="" - PDPAGELIBLINK="" - AC_MSG_RESULT(not found) -fi -AC_SUBST(PDPAGELIBINC) -AC_SUBST(PDPAGELIBLINK) - -# ---------------------------------------------------------------- -# PDFlib/PSP PHP binding -# ---------------------------------------------------------------- - -if test -f bind/pdflib/php/Makefile.frag.in ; then - GENERATED_FILES="$GENERATED_FILES bind/pdflib/php/Makefile.frag" -fi -if test -f bind/psp/php/Makefile.frag.in ; then - GENERATED_FILES="$GENERATED_FILES bind/psp/php/Makefile.frag" -fi - -# -------------------------------------------------------------------- -# PDFlib C++ language binding -# -------------------------------------------------------------------- - -WITH_CXX=yes - -STDCPP="" - -AC_ARG_ENABLE(cxx,[ --enable-cxx enable C++ language binding [default=no]], WITH_CXX=$enableval) - -if test "$WITH_CXX" = "yes"; then - AC_LANG_CPLUSPLUS - AC_PROG_CXX - AC_MSG_CHECKING(whether the previously found C++ compiler works) - AC_TRY_COMPILE(, [class a { int b; } ], WITH_CXX=yes, WITH_CXX=no) - AC_LANG_C - - case $ac_sys_system/$ac_sys_release in - osf1*|OSF1*) STDCPP="";; - - *) dnl don't change $WITH_CXX - ;; - esac - - dnl If working with gcc add the name of the stdc++ library - if test "x$GCC" != "x"; then - STDCPP="-lstdc++" - fi - - if test "$WITH_CXX" = "yes"; then - AC_SUBST(STDCPP) - AC_SUBST(CXX) - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -fi - -# ---------------------------------------------------------------- -# PDFlib wrapup -# ---------------------------------------------------------------- - -dnl The following variables are used to tell the Makefile what to -dnl actually do, depending on the available language bindings. -dnl PDFlib itself will be built and installed by default, regardless -dnl of the settings below. - -dnl PDI must be in front because it needs zlib and pdcore -if test "$PLATFORM_ID" = "MacOSX"; then - INCLUDES="$INCLUDES -I/Developer/Headers/FlatCarbon" - LDFLAGS="$LDFLAGS -framework CoreServices -framework ApplicationServices" -fi - -dnl pedantic warnings ?? -WITHPEDANTIC=no -AC_ARG_ENABLE(pedantic,[ --enable-pedantic enable pedantic warnings (gcc only)]], WITHPEDANTIC=$enableval) -if test "$WITHPEDANTIC" = "yes"; then - dnl If working with gcc and we want pedantic - if test "x$GCC" != "x"; then - PDFPEDANTIC="-Wall -pedantic -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wshadow -Wpointer-arith" - AC_SUBST(PDFPEDANTIC) - fi -fi - -BINDINGS="c" -PSPBINDINGS="c" - -if ${CONFIG_SHELL-/bin/sh} ./libtool --features | grep "disable shared" >/dev/null; then - WITH_SHARED=no -fi - -dnl Building the language wrappers based on a shared PDFlib is no longer supported! -if test "$WITH_SHARED" = "no"; then - WITH_JAVA=no - WITH_PERL=no - WITH_PYTHON=no - WITH_TCL=no -fi - -if test "$WITH_CXX" = "yes" ; then - BINDINGS="$BINDINGS cpp" -fi -if test "$WITH_JAVA" = "yes" ; then - BINDINGS="$BINDINGS java" - PSPBINDINGS="$PSPBINDINGS java" -fi -if test "$WITH_PERL" = "yes" ; then - BINDINGS="$BINDINGS perl" -fi -if test "$WITH_PYTHON" = "yes" ; then - BINDINGS="$BINDINGS python" -fi -if test "$WITH_TCL" = "yes" ; then - BINDINGS="$BINDINGS tcl" -fi - -if test -f ptf/Makefile ; then - PTFDIR="ptf" - GENERATED_FILES="$GENERATED_FILES ptf/src/dot/dot.pl" -fi - -if test "$WITH_DEBUG" = "yes"; then - CFLAGS="$CFLAGS -DDEBUG" -fi - -if test "$WITH_PROFILE" = "yes"; then - CFLAGS="$CFLAGS -pg" - LDFLAGS="$LDFLAGS -pg" -fi - -DEFINES="$CFLAGS $DEFINES $INCLUDES $PLATFORM" - -dnl EXTERNALLIBS contains extra libs to be added (i.e. -lm) -EXTERNALLIBS="$LDFLAGS $EXTERNALLIBS" - -PDFLIBCONVENIENT="$PDFLIB_LINK \$(top_builddir)/libs/pdflib/p_basic\$(LO) $PDCORELIBLINK $PNGLIBLINK $FLATELIBLINK $TIFFLIBLINK $PDILIBLINK $JPEGLIBLINK" - -if test "$WITH_SHARED" = "no"; then - dnl We can generate a static lib only, but not a shared - RPATH="" -else - dnl we generate both static and shared libs - RPATH="-rpath \$(libdir) -version-info $LTVERSIONINFO" - -fi - -AC_SUBST(PHP_PDFLIBS) -AC_SUBST(LIBTARGETS) -AC_SUBST(BINDTARGETS) -AC_SUBST(PROGTARGETS) -AC_SUBST(BINDINGS) -AC_SUBST(PSPBINDINGS) -AC_SUBST(PTFDIR) -AC_SUBST(WITH_PDI) -AC_SUBST(LDFLAGS) -AC_SUBST(EXTERNALLIBS) -AC_SUBST(RPATH) -AC_SUBST(MATHLIB) -AC_SUBST(INCLUDES) -AC_SUBST(DEFINES) -AC_SUBST(DEFS) -AC_SUBST(WITH_SHARED) - -dnl ---------- Generate the Makefiles - -GENERATED_FILES="$GENERATED_FILES config/mkcommon.inc config/mkprogs.inc config/mklibs.inc config/mksubdirs.inc config/mkbind.inc pdflib-config" - -AC_OUTPUT([$GENERATED_FILES],[ - chmod +x pdflib-config -]) - -if test "$WITH_SHARED" = "no" ; then - AC_MSG_WARN([Can't create shared PDFlib libraries on this platform.]) - AC_MSG_WARN([PDFlib will work when linked to a C or C++ program,]) - AC_MSG_WARN([but other language bindings will be unavailable.]) -fi - -if test "$WITH_PSP" = "yes" ; then -AC_MSG_RESULT([_____________________________________________________________]) -AC_MSG_RESULT([For your convenience, here's a summary of configure's results:]) -AC_MSG_RESULT([Java language binding for PSP: $WITH_JAVA]) -AC_MSG_RESULT([PHP language binding for PSP: no, see bind/psp/php/readme.txt]) -fi - -if test "$WITH_PDFLIB" = "yes" ; then -AC_MSG_RESULT([_____________________________________________________________]) -AC_MSG_RESULT([For your convenience, here's a summary of configure's results:]) -AC_MSG_RESULT([]) -AC_MSG_RESULT([Support for shared libraries: $WITH_SHARED]) -AC_MSG_RESULT([C++ language binding for PDFlib: $WITH_CXX]) -AC_MSG_RESULT([Java language binding for PDFlib: $WITH_JAVA]) -AC_MSG_RESULT([Perl language binding for PDFlib: $WITH_PERL]) -AC_MSG_RESULT([Python language binding for PDFlib: $WITH_PYTHON]) -AC_MSG_RESULT([Tcl language binding for PDFlib: $WITH_TCL]) -AC_MSG_RESULT([PHP language binding for PDFlib: no, see bind/pdflib/php/readme.txt]) - -AC_MSG_RESULT([PDF import library (PDI): $WITH_PDI]) -if test "$WITH_PDI" = "no" ; then - AC_MSG_RESULT([ Note: if you purchase the additional PDF import library (PDI)]) - AC_MSG_RESULT([ you can also manipulate existing PDF documents with PDFlib.]) - AC_MSG_RESULT([ The additional block feature can be used to personalize PDF.]) - AC_MSG_RESULT([ See http://www.pdflib.com for details.]) -fi -fi - -AC_MSG_RESULT([]) -AC_MSG_RESULT([Please observe the licensing terms for commercial PDFlib usage.]) -AC_MSG_RESULT([PDFlib license agreement and purchase order can be found in the doc directory.]) -AC_MSG_RESULT([]) diff --git a/src/libs/pdflib/doc/PDFlib-license.pdf b/src/libs/pdflib/doc/PDFlib-license.pdf deleted file mode 100644 index f7ec4a8c9910ebb21f0c947e2490792d426339fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30955 zcmb?@2UHYG^RFbyIZ0kXqQJ83E=xvokem@w7FaSYISP^lMUWf?B}x)eKtah-f*=_s zCqZ%)L_puH=y&zr`~Uv$o%1+n4>LW}Rn=XgXMWW+Tsn%%f)F7XDcAhMyCG5{7!)K7 zLR&h3q@=(a_AV%-yS+ck8Uz7rfS|(Sa5z{S1Vez8KoEo&0tVIsLBR&V1!0&NSQTUj z5=V%FM4-avGBTtn7i)kFDd-=6q(r{%D4QRgpfFM*;h%pHQP7Vgkjt+&h=}k%+JrG2 z{(c`6F8!_K!AE_&@Fw1BCwj zePVFYf3_jS{xLRjh$#GTeIX(+xY$41#DxFZCNBKap|AmJr z9QqF)qM{-qf0soR0r@8nF_FKI4I(Q354}MU!tj6Ghk(HUt|JIS1ojWU2&m{kM|oqcABq6$q0yco7+?<| zJ+PXK4H|@z4|A+&CM68B6h^|KA`pm;u&6i^DsC-?v=Oz2S|Y5V)*=Xqj1&SP4n?8F zgstE(1PTSSwnT^`MJ>gJ;Z{~62vN9|4925~JUo%^o@dS@OiIMXrKGJ)O7w?+0bT`| z3&wvj?u&A<^|S*)pkiQUdnZqnJ6PEX>4{QAS)r{_7#D^^0j~zs0QfWn7=k`XOjJh3 z!_yswbOxMs+|t6r!p6d)%i02IVG;1A=}qvto0lOJi(;LwFRk94KOZs0)HMHOrML3n zON61xQyKRVESAd#99TiTHWoS-vnY!=*P=nhm+4*Q<2<~r^Ysc7S~t?(@xJcFdeW2< z((J+$M|V!5{er58uyC8^`9XIQlJ%0yS7Sohz3}5~uq_>f&*7Z=^p*7zDG?A$ev0)o zs{EMfvr+0GZBZT|7@$#Lwza)Hoq(X_0TKl)8aOxbb47s_ke)~;p7v-LGZ!m=h&mPZfQPEI=m}eFz`|rk4!x_bb@{ zpmRq2$IN3mfR$VTd$V`31;NjBB9HVy{kR~ns-+;Oa>>9BrH^#+5Y%x(+PeU=@9yEL zV25-EK}EnC$e+g$F~B^%EIl#m#88HS4bX-z_83D3!Ot8GLlT&BD|dTWPqaG-e&&kC z_ST+u9%dpCF_4Iu@c;OO3PS-uhW@w?2fSWHL<|Il0`~*|G5s*B1QgIcOiTnY3Sj7f z0m6U?4#%7W^8g3NhB+1iqW{0~5raYj8gLLM^1#J_V}uwm)xgAyii1Rfexl+4A5jrt z%;G=#!+>ZhCMFI-2%ph|i@^Rv7Y@h?2Ubf_@iTeFfeH9Go_}wHivThLD+de;$N|U+ z2UZLypl>)3ap4F!z#kZ|s3>3z0A1i%3;~P_XomwK1=A1ngTmoJV1t982!IxF4F;@O zK?5CH#u{C}6_|M?tvEct)#^I!D+-)O;sRr9}H|Hn1xU%J6u1N#5={PV-1 z{%4oKL~A|pA1)y;|H~!h(N5O?-7Q2Q|Fc`1#jd}*#aaCNzjTX#3>6q26f<1F6naCknU}#{6KwL(ebzB7n>MI)?ppk6-6- zDCB2fj5(i~h$z4tb6p&8$zS*VxBnQ|f&(s$G3y^@4uJt?j%fqV0W-(A#DDq&$6~+_ z(+&q7N-+H}zaMS^JoG>@?t*b~;K3Ck{&QTyBEOphCIg44Cwn95QBf)llu68IFuq(>l9&HWi z0_=}+M}yHWD6ppw8tiH3jzWQLfaL&eWABXud)WJeJy7022NZ@D*acWG0YXk_7mz3n zjPwM{f#typU`4PJSQ)GWRt2kp)j-D{d#KPA8aiLNu-Ij2=d%?CW* zxJt>6nqZT>E)^PecyiTu)%9T9vVSwYzv#*Bjx@S{ukSMnSD7DI&q!RPN=NNq$x!#C z^%8u|U5|WPaZ};ygHE>U{FpW;@eYC+s=|!1_3Ep7uXP=@s^X&@-TA!vXqxzlg$zFt z5N+mJ>k#pBJ|k(<+pHN1^)ytg#S4kd^c18U9E|mBT9{>-;&yz;-rv8#vEbxa64pBL z^mNhh&Iwl|Hpw~Y+w^Fne|aRsJfr_P{lG#4|CjmyGh!+Hp$-Fk0~%YpvfS6TjJL5< z@Qz-L(=Fp1v`b%tt&U3a}#%hs`@M_8^DNI^FYxQVW9)(GK8(T zspygoFW8Wn8b)f~v@;c6?jtTg;4;oOmO z(Y(Z=Oq7#dlPNK0z}`wv{zcbS^T!9@?^5LZ61*ZrDpTrnQ+n`Fl5vMarw23R+A>3TtY{j>S{qDYMyRoaj z3aY;tcxf-5t9!p9XgvI(9RA>d=e=t}u}NcHk{X(t`kInFAGFoeho$_M7UQ}smTXci zjI0j&*JJ$R{Br!5tlq4nO47bx^}T9sYH+n%Kw9vgz?$H#ba_p;Hcpb4P!m}R`Om}> zbWfVqaP$L{C>e6@CZG5@>l(y0W;U+}X!F&C!SW_*6q) zJG1<9?Uhd?xFzDxapnuw2xIIoyUfDvufXw`Oo6|bBu1y~Q)kOH*KtDqk?zju{`{G{ zLA#OzysAN$r^A_v8X~L@u$I0IYOtClR5vAHGxR@EE*!Gs_kzQdli~2!>ZI>TmJSG0 z>aF+6h4(LUO@>r*SZT-Q(wFqN&>7E-&q!Uy+iN<(d9svplB}c;M%yMSliVBrD1E3B zT(^-!#TCiWt>(&{a~aK*xt%i*v}X^F3*uope4Osunr$(7rDbX?Y1S65YG$@ZuDsjc zG4oJ0Qj+Q0hq4QVUm4P4kjFCjmei#SY{Bs48H4Fss#-2FiBajeH|eTsN_;^VrpZx< zAhS%p1zs+JCpMAQFU!Q*8CLL9GlJIjN$`E<-a1csROZ!y>+(_X&pd0%S)_zaDgJHQ z35NwCvY(~;wB}yOyXJ32FCd zg~6YF=bL_`J8lv*uJai8-b>QWO{TFtrSVOLNa)c`AN#qZ@+cu*Bv)EJ&VAbq_kf%o zcBgf&iRo5x$|poJw#bZSD{EtXp2)5F{SF0N@+@8%8RDgD>nvDIA3s#&hS?rrjr&@} zLR9X$)tqzQCVCq9gsQsj;4_oX&ONecJ=J)x#M}3!R!?49SrV za35@xy5)I3g#U~N&u)FrlmK3zqGQB~c zCo5CFnvv7wO>cGQ|Bf<0dJi(+scL* z9T!jJ(e2zJbya%$53CNp6Uw3>&#(uMiyOCOzcx6}u4sN&n#VSd(h4!mH5=!iY$3X5 z0{NPtSUs#&Q($DAGq+==HpoU+aylfp9caXpc1ptFGwl<{g0oeN#inN!dHa<>O*Ssg z1x{ADP&94268`3BD_9-V-jIYj&8hIKL-qo}a@602dv>a(3P%W@!iZ*4ov$twT zS-qg@TxEIiMgI#<>3sr)L^0=`oOj}#IWadz8MXLj_t#Q(G(5h=ZI7JuTZp+3P5)t% z-QH$0;&gsCGf<@&XMMtgN=y{-ajU+a?UsNv1A|e8;a$_cenKm^JTV-?4hS2jBZ zOY{eXw9?er-}a&ypk0>gkBf}ihS48oo@PIAq4(xRBE;^d1svVBoWx`Qcweaa z5gnV>LO8T)r{%@`Rfu3jX8!|QJ(57zY$or6s5I(<(MT@Wb40bzDZJ&?zzvkkO;6}m zZj6z>mW>*2x$=_!MxZB4h-BPM%u#k8gGm~K*FgFr({*C1=SxRvq-HPe7j{5gHXM;; zxuw(==dZTh-^|gcANRAn5z6JMWhpP0L`4tw<$LN3(g-3u(UxWDw4=Q3f5-UxR^;oq zgk@l*Hb^PNnCD5WvCcBg&FfNKi%~}NUc@fs!Cii$QH>;x?exUpG%-PS#4ime`ax1d2iDr@A1V+s^&n0rkIS~V5G<^q=`k$ z=Ll7*UZ}rKq&jsz5^9)#ax#5?DyuVUkAfpK6P=KIKcI2m=m=3T(R^@>HI)Y105BLl0soR-hR`0_y3^qqF}Go*V&=}(@_Crk+#=(mr+mAvN1vXECy z8WazLC1b``%PH>RFL4tT?2t7!P%cHeTyqHUZ;+PN?pbH!=C{nflIKQDU(4x1$JO#; zYd}7JZ56lrSxkn)bB$(8`I7qlPc&hz?+G+)k3J~DCz~k9Um{Bm-K_TG+?L(n+c5`p z#~>TB3c@BG^?Ou4FHPQ(Q}E~`>p;} z-k=1tOI7U6ObCj%s%g!)9ja)T4;ULQ$Y_f4V@X-kqIyeI!}$CwL|rzt89T)&!LzYLn%$IwzTSQp{tRSsUD*m(snf z3th~u@zuqWiI)bSu&`k=dXo)=)>KRsIpu`e^61T{(@i zp+?e3vK^CBw(Eu1+=FW?29uOwLzTwQ5?&+@+4YToCSK52zof@tqJFA!s4nZ;K|Uk; z@<>5=`kmuxd*%aU&E*+RZysg!ytYmOw@(O=#PK7?cirv}-gh4>qHeCYrFol05iEw^ ze1z8`Iabar^}c0y&H6M`32be>d-cub+dVTv!m7+VqJ{}cxmwMYP7i6X-hEQb9CE9C zt!3l9k+~}G#gb0zcq)GTLf1=?u?w}|g2fR}W8j&3-P({7mI@h@@94Ck2V)XMuS_Tg zT+`2sSdiRsshrv-doK5|b<^Uo)l0LNOL+{enrZp-hu{3NYR3F&# zbjdy#7q8XvZQ7HY7F!=3LaOHX=;^5^w127}aqL%FH*zdb?V$B{ z!4sCgBd#LtATeVWpvNcMyzQuK2>wF0KND^~RaY9DgLfm@@L|>TmLu%;bDq;77-=Lt zGS;vHPer@Pq0M5-=ew8LLHaP`LE-g9xs1&v7nBG`iVF{f zDOb!|u@#ALkwn~T;g}_DwCoRHzH*C-aqqcG+tIfPddV&F7b^ZDg)uLyZZy%YeGKWH z$trao7!{^9RKjm-Oq4E6ls65MeCjfAZe6(RBF02C3wa%H13|uE!eS=d$W?Ms)QukDjb!n2TER6;)L=O^qULXZzxE zw2ga*ZGUD-du(1`pI%V-qb@SBthDND-@nB9G z_~-5gONy%L&~yP=Iy0Cxc7-?(WwxCdR!E#0i1n^ieE6(rdK_!Eg`mXcG>V41=id?L z#9Z0F>FdIudALWg?n}bwd+i}*6Pm`v=}Wguv+|>7Bugg^i!zs<*P_Ey!?U)#`Mgx} zI=hPc!;)}!J7UA8@Db%!Ix|*rdctJ^*@sJWs_64m1=Fq)@&02o1YSGDhoY2MM~g=5 zySRA1Yc0!t03lGpg)Fz1bUn0UK9W5eKgcGJE0fNMTH<)8!U~G;Yiu!ihFT}G+Yi~Y zeI!8i3U6q3Y7@OBGjasNe!w=z_i((`bYDB0_uH*QZSy6zk6BLg1KFE)6yh<Ie4j)eO6SgO{?M`1qkHkCy-t%j z#}lj;A7(~I&CwMuddO?93G8{boS%!4Jn)&w_q!!NQuOxClG61w;WbK<5oYBYD*p!V z_mZsvB~ef81P9=nyEMuz^F0dX-jEa13YorLvaMZSVc+xhIHItcyv%d6cgM{bU0&QQ zjuVBfV&w|(HNe!Oai<+qo^?`J)W*N!mE!1H-b>r<-iRK|(t%|eKBNuXmaAs1oivrf zy>$?LgL{iMrRz=xYd(?4&_TgH9FP0tl{#cjQ->!P#2#jC@VMUZZ}#%qyXdx^mG8H^pEKXtAgT`h?9-CVe)h znJ}Vq&u{3E=n>B~{7v z+t(#1Zh>;#kD>Y04WOfd>1;lV?2%_|M!`{O_vl%6RklK9L$=k;?ndn}6mbVfjxoKQ zBB4>;M&#_WhY^2skyJ*7>7r10s3*zo3mm&ue&g$8lKli_Y6QakBG`BFb`q*UZvHlE ze&;Xwa3;ZdlE3)$ug{~tjCrMO>FrY}vu@XzhDI70t4VL;*m zlkfyVfYhq_kBgYp7Wm(DFHT5XAY%m9_e41xfy4o988}eIBsvw4uBt!aLLhS?4mSCD z3>Ov#%XwhXIS>L02V=4?m}5a8djM7ga&GokaxS(`nA8;}p#x--c+YT6unvG2+5%`H z2BSm+nBf^lsR#g$P5^dj3BZod0Pv^*V2UmPZYT$!hd<%ZA3&%zSRFtT{eGaEX9(yI z!1D*h`2#NffeZow_C=XL#uktn*Jy@i#ow7lVGDT?J4|?_ap;4{Y=dJ5>Yw z1IVX5fNlPXLjHC7LqG+vApn5>1#W_k!CC;E>c;n1rVId=|Iq6Hf&;^U3G)l&75~4* zcR`|XupFSZUyv@KDX`iPJohJ-D+1QTWPaiQ4bBBYgvI_RI2Qx~k`R8sekHc8#D9}NJDgX@oWJgTfxSX=jmqEaq>TP!FXS(nH>&yfqY-j+6Z9bqL_Trdc zal3v(DyqE;2|Ty6O8T|=x`ju#j7+g>oy1`b=Qy689i#Ajp4`CA$twtsI~K>KSuSL9 z9RV*xdBQ5!U|;*LQ#hoH>ZBUt*!6y|wtjQpqr6e#k*jUSVEpiefP;jp@srYQ_*#l* z^QqD&Fwv+|Ki67JZpL;$+9PEqKIED@vyK$sv+T~eQI@Qp$m3vKb`S&vA z5{URsXod`)6$#sSkpbcM>#U(|^tn%PadQlW zdBHn)xgc^sg3i8Z?E6InayrNh1Xy@C<>$?CDHSO^-ST)Ddt&7BY73YI5w+ZgQE{{O z2bV`gcRkjOzSkU19#3uEJd`X{YZ;FMsSS$Teb}AN&Ng)v88qTqa}VABP+Vzj&11XT z5&Ebbo3GZSN1wZdQ)RS9_?`I^#}z)sZ1Wfvf#>+A`RD0t>F`52y54b$;;xY%b(E#Q zvLC-wm$cF)4y`J-A1^Tb{PkK{>Z3>1k)v_d5J@Nxr=VdiBh^ zHmrT=OcBc|$0j-9HDA*2AtMP9;&MEYxA#A{(cvy$L#3)3fUm1?aX2I*p?>0vEg?A_ zGqvD)mu&`xFcl>QGY#v;QDaub!@ZRf}%Z>*lc=GLg{ zL@M}8-4&^?4k;~X93Y4&roT&ysb0Im_w3?+C=M5*G{h@;Y9O*bjMHOn%1-R=-0ZnI zl5w0K+jqQzY6%wX*YX8PQp@}E*uNuOL)8|2gxx5v@%lA8vpOwHze(p1tK7DQk|u7? zaN;_O>lz#JoO5$*t$6m{#P~F2mng3a-}Gx!u|C%_o(TzA*eti(mWBnM)eH>O>Earu zLBacq)_XUb?2Fof05`&%CqwY#i;t1rWD>W;j$0MdK*Ns&_@1WHH8_<4fw;C=HP_1RW1ic$)FD`Jz%*qn$aoIK>am@rplNk|K} z(q0|=Tm2N`VCEd!^U$%B(KSf!axN@Q1!Klsc5#t z%XR+m=|`*zt<*!}13FSsH{ilWsR11dW3;nQAkeK(Ru1>xM4PbN?##jt8NNm;r{5d9 z!v_A)lfo>0^(tr6$v3&QCl|`%$gd{WGzn~eaORs3lw)-ichBE1+J4PtU))wNP?m^} zRuBs1OFE&4e+_nfgP71p%YKw{-PgU*c)rbaN{myud_2bOnc}Dnvx=Cxu>($PiOU_D< zdn~zxJyGhGN*Td2tb1;`;bwD#EQ|2?=Mnv%2S#4lTe6Q2JbwA~)ExUu<1L)~-OxAb z!AXy9(hy|?7g`5%)~(+@xx;qP$$b}AH98Z>*ZnBZ|6+nt1F@m{Mg&P+glc>u^iBKs ztvcil){(cFl(nHrEsMFnw$RG*p<&bhb?ym?oK6jv=M#wrNjgc}5FOv%VHuT&v*A=Y z_d1wm?)hDs81*!GVeH8t^fbCOx>U_yGS?j&9pQM%mpJyAR@-A1(E+}0?%qE6p(KQc z?oK%VCl=NQ$y-?_Wd+(Vr=$nj_p?NvB$Ei7&(*{o7y5Mn^hgceQ15!vYtFOTXai!JK-ay;Q5smOU-AU|nwyN9 zLDO|XMK5*dA7(_%ehcV?Cupjd-#xFQK3%{%n#1X0+p`y);*9;Z_cHDISstI|(5WG` zS%b7-G6bK5>wyRCwodPHKCY0N{U?8%gQ+prTc=(--_VLrbF$g;jZe`uE)I8?TVa=p z$q(kX`dMth@CP>Igx$bzdbBxJ{;86>#V9RJ+^mMlwEYZM!i|F?uUF(ROx4nWI!Mv&({W$T}w^ z!Dkb9;m!onrOkJhom$@|Ht1QF7x)}mm{!*7JYQ)py?H6{q~I{TOJ@6y-6!-DC%Y2s zD?PERY4(;?T9mE2jg}GUx2+*uBR5+rhp)CUi?evJFrfF6zj8er$If|Lyv>{v!`#D- zB>;-dl)1In-PCm&B9OtsM>2r-@_k@#G6-?!({$R)ZP#=GOLXm%^76d;RO$U|ifbdC zmU6w{od`^&oValJd}1lp)X~pPIxI=q=8Rs=q7+iOPP9UWE!vg>zh}qM97q;;zQ6Cb zGhQwEaEOXa^LEw?D(i;q4m=b!xk|YvNy-%klYQ#xN18I0KsB*dZUL6c>c;rRm)EHYRNWVVtmMfP3naYrfMOW=q^>Y;kL}PI3?s;lYf!a&d z#r6tRe(TUjdWiF{#s&NxhiFxVA22(!y_xQ&FIm_vP@~$%D;{HIiD;&nA%VFTIaj9HnpJc`1N7)#>q-o?Dya9kq??W6gr%Dk*3=Z{=&$1 zW$9V^dHgEG(*68bPyLHt!4FkA%}xwVsMw4%n?R+p<{RRRB#+2Hs97!y%ID^Jp^i;s zUIW#MOHO_vpJH5icOncW|_1GdcD<{3TRX}4d((ZoMmMh-E zqc;KEecKDVPdRSghzc)h)zrx++*kSR>u#zkmg`w?jW$s6TS`jjrjGZeiA<1E^b>;Z zYdXZu3E8u&gJcRgjSHGB`b&?oI6rZ@2@V>Jp zV__wkr57Hql}bwcf|aYaZ{V4HxL_bor^{U$cSD5;;)-h+L$pL%>T2kB!r(}NUc70i zy?S3jCcC0RS}JW|jjX}aS~K`f=+_>doO>J)=}c?_>q&RKc=iY0% z8W`QaZjN=IHV}ntwy?BxurgELfUW!(Bof9?9LRtA?%er}$3y@6a`V^D)&FcR{cFSL z??A}UeY}4HA;3mh00*uu{ZUr1ob)fsZ4_Y1aA1Aq}%02HH@&0R7kZ)8DayaO0kYiB8J8cgFkA z=UC)@Wp7q^(_Y<(V1dkidufx(WgGL^l8N9qSlcjPNlho(jztfGwiS|XgVJ%IUuE0Geo^!%<`7@7&broLD%C*>qFRr|(xo6`21W$*@P<`?wvSUbs9 zrsZB#?3GD#?wL7!PZeJc-K%E#x{|?hz0G zdS>9a#o3+4u_vE*iJd3BTB+-$NJ+@uIUg$WLa(cLGFUTnKKfb2>3N` zE#0}MHpq3FsopYudFirhQ(oG7e!qsSe|I;c{c2UZHYH7l*MrxEUo4Mc0*&QwRq9Ps zPUhxX!QLM-j~I}Kaqt)9JBDwGV_Lp2du$q&rH6al$8soil7}<6G8E>Nua|#Mm^Vzg zXfJ^8BUfp1xQc)#WD*TO+<|in9M8!;IYNMw1of2R3Q7C4@h;C$MMz`u;=yYm2E0T+uO2 zdkw3Od0HyMk8a*P&w2YWo~;Av+Z#Zy#IGy0F;`bI&#OL|kv?v&O+__|b$^NZjb}^G z1KT%bN0fA1WknQ^YJ!CpQ!Htf-ix`I4^>!M8ED>CGodiaS&Me98Lq53hv2#TBEU$< z0PMQt+%a(VcHOY6;jom>>~}6dmJMPY>$hK@lHIzzyUx|eF(}e2lpWQMU7i(jl0L*v zs8i(NY)p>YAh>iXHZ<5C_Sj4#npDeZenMIL1vJ=Lv(|ChA*8#*jd*0R6~_z#>!NP( zAE(~WdCZaP`T4!e6E?!J>Dr?8ub8ySwJXtlm>_;MFhTT$>E1c?_{O z+#JyxF5njiP;CaB=1j+=4uP8lS-3^Z61llpyDub4lUr*FX79;NKO$rD<+>`;gP=W% z`06T^)2rF=^^+0FKH1-RM5JO*4^-Mm~xTpnLDADWzZu4%#Zx_{?(=>6WZBfpGZEaztX zK$}_>N3DH&2TmiT7+=3#GqUOaYKBdsJQeT$U2>uezMJfeFR2BBL-Q0;9;Y(iL}G`h z47*-3reX56U;?!+bWHm@3Yc}g6l+`at|CL0WkYxG5c1mEHYLfCMiWE!?1^wbre9>9 z6jT$^KDTB}WJbJ<&j1q8=VdHLB1oy|Jtp%G6p*^JH>3~D#pU-0KYihZIWB12yHAbA zTH5;JOK{v^yhpv}r$f45d39aSg36&-!Enp3MN&Rr*b(~$bPUY%RqD&mx9T(+TUxWN zwpG_jwXbV_Ozl*(*bA<%tGsfm7h+2E++_)h2@D1a;+I44n`ZFj7(YWsdDBnbtkX>}*1oo?RPD12|R~@XY>&xN= zNnmB;f^}ElV<8Exppxm5Ek>KL>C8XuLJ!> zl$#`WXUc#cdt50*qqp4lP|2Y+ewj<%=%uTkyltCxK-D?2bER#C)|Z_*fn9MguHKBu z^DVeOrb1FWvAzShP+}yl11@aygj_BjGav&O?oW0`KzIt9+hCYEGHB%j>rf8$OvnqCdg? zN-5KPZ@**5=fwRv!rAD-f=0}<=dv>?F`t|pKQ64$Q&G$<@ORYchCSfnDvW%2Ls9;Q z&hm@vy|yYn-WL~Dr;2*W@4suy#aozt(G?a~&rr!GogOlaSN`Q3>GiuWT|jU68F2ch z9;C&a-C%I$zj7yZf%@aM3QG>@=WK&chE`HlF22yF^VNxtzAHr#(lW8Nj;~uZ)H;tY z_W3!fo!m`oC|Xm2B{!co^xdyY?FQDXOl(r9SJ-Hb`^SedMLH{b1I0oQQb8{& z$gpwIQl-8$%Q41gg_c4!e`eh;HToFEJ$(T=gy?=eeE-@rt$pL^Ft*}qSHA;T-i#|% zsn`?(NA(KXdPfp3X<~JM+viKoKJa480>)h~%Ht&7}(!A!dOJyDKp8*#gRV-XGkO+STbVNNnzrDPSXJgJUl^?mckXeUQ{tHQ(@3tD)MQaKC12 zypwgOqv*;5Yl+Y?(s@YtxEM@^CwR{$A?Z}7l}yG?c<-kpm1wxU1L_Yfv!uFC zLhJEdvh{nxc$3(<*Zt879X|Q_7V8 zZP#Xd^b>hQ;G3Pz$D)<41M3~$mbD?wwJmP!U%Rdm71Ty~8ml7WzxBAv8^88JGn{*V zc`h@wXIVajT2}46?BF$HMIpsjT{7ZG$;%&z)vs^ywT!H4*;Z1>Syc2k4nH)t*GASS zETtVKR^(_SYVTleIBVuz4KXAOa)Pr3ql}&4k8Z~X?@4W~=!MW#;%5b&Jdfkm=Jv+p zt>jm_iNK0KqV;%Q#KEXenuJs0$v&IUFxE_Dd`)lLF zztMxkL;$&eRA6ID7@BAF&r0de@0n?w&AS*J_8;}075|;7_pIdihdzLcw*QP3QyTxD zxrBp^k?!tD7f(MB(#0C2@8#->cK=i9e}OW;MtnA!pGrrF1KiJ){`(}tg&-gul)DYu z-5Cj#yn)a*AWu6K2q-$Xbw@h?G0MMiiGO7v1_2oSm`2QpA^wtF2ntxMvprC*{KKv= z;w##FSOGQ0&VNqhj{%=~*e?dZPoD?`Ci2T9&PH~|>}P%X5AT2hChUY!kKgZ-12uxb z{Ncap2L=@p{iPtpZ$6DU^To5dJ5$OT=ii+N3IZyBhp6tMr{JwHhOF{~f*=wWv0 z0A3Gp75k-_-@OM4C`Jvawgc+$tUSE{`vX)0>^T7p;5SeIA=-bT4OABY(#fB+G2#N# z1Vj)e7h9n25UBkF>cTO)0gT?p-uleu?f=H@zsCWHF#MO#{v6?%Q=LuUnNx{?6m$#) zErG&w>;J^C-^cThsPN}p0pGp&HCJa;&lGW{tTPT!ArZhmEP=QH1W3%FekcFWsPMaw z0L7%gd_?rjDbEIQ=B#Jr;Q;x+T+tRNln0_dV9%H!^!GUYm)Xg=xS&0O;&+T+03Qkf z@K9iafel_~euAl`|Ns8Efgkhp*FuD0eP$>>Aln}Tf%O2>GJ`;YDT9lP1D`Q~!9;{a zFv|l3Kxm;th@Y)+F(DX2TwKf?ERS}#M!Em^>;bTc?f2#6*ESa5OEr#vam5I6#uc*} z?*H>A4*o;?=MEbf6!;F#KX=&tiC|9LU#OuB+$x{V!>xknZu)Bor%eeYSOhy;u)f>_ znN?{j(koOHjvYnabk{PBuUOwq&kji`CN_N{u{=Cicq3?RRao})^T(AT`m!qj53(b= z=0z87op6?x7V#RGDtgfst`^*i8kw`FR&h%xPMxAYRdx8hd$6yv{elp2_r9lV(~GEt zrr8W!{z)3S&`0(L_zrEcRPPRIMs?|mU?*ceXzd3AG5lGNO%6Xodl`9dKakbZLwsKb zXHAvdkk2S0M|ghtR?@=prFJS^_+FGn8fnaTs!@~qU^7$U+Y)&u8t4d}HD1y_WC&=) zvFV);0q(m~M=4DOFr6=?K9Ibbd%AO!LqRVhoH0zXgH3>T-PG<7;>lO24%NGN> z57)*E?=4LVHrl;T&C}&^x`Mxem5Qy4V0V6D+}mH`J!#I%#r5*8j-9QE&T%{o{>b*2 z@(U`h5P=I?cOPh-FRKW1*l2bSFLKZ1P9ApKqe#c;ezh`ueF=xzu2nyFgj%Dklv*QV zlhMe{053jwHTRh^yec*=SGZClwmUZe;&NApFgbZ&M-bfAgvY=h05*2}cO~f~Oxb#_{)5?TpR^WaYWWeb0`Adxy zj8_!}%|?S%S7eG*Ww8gH-YIjVDXz{@hMK#0GJpAw2a%O{5%7dXyp|7-?d$N-c&w=ro=zBSx)YXS#Gtut5@#_u2*h$z*4JSQDGHt0)VSTFOu~Iw z60RhsL!H0%ImXxRV7VGEi>WUi^Kb`YAk70`-C5kBm`%CyyD-g$gUqrPeCb6 z)1H8yQg*`746|AhTwW(YTrw>>hCslt1<)o>VaCdeLap$nOd^p9p{p?j{?1J@ooW0g5yj# z@8FK)s+zVBEVZA;kF80x=6hs3#HW8>NL^}78_hFTZ~B-gKrCXBsn5f+)j<_6A1Bee zwS5=FI8M)}X&#?}Q%yas#y84@aOj4t;Bz=>%Dz8^3lQkPBVeL)WaBR0GcXLkrY952 zX{vwiL9y+;H@nt~e7xOICMLcWA@(8?zl9xjLBoY z;hh?Ai620oUou zWJvEtdWx29x{F?9CT^S|-|l{i=cBT=tY&dJnHypA5;e1Q?aX}@e$#teT)C4yI%Bs| zDu8s|(YF81aDSBTO1lV+!12@UG<$Yjad;e+t%2>O(3P1Yqy8^y;Opy$;UpW= zNX_O?C7YIJ^7dfK+6|rYu9@_u4z4q%EIH}_i0xl+3w1_?B zy+RTMy%pcxXS8e+28jVglu6D5+gI z2c2p*d!)rF;XxmfyBFIDeQ+Zfe;km46}D4fIjfX8UMq%FS8-kGxSEKJ&LG5K&?xwG^dZzB0y zN`iXT@i>F+p;X+&#`S`v7u+Hzs*@gV?ZreZw?cKVI%pgTzIDL9Ezn+{Km`j={$f^< zWh{(eob_(CGOL)?;@tMjoBBK-^5UA*;IA`UUVC_b z>dEV&5FEDDxa@>P!@=~ZV_nBqfo$jbd7lh+vT4;N@9uW&OGg3xs+9Yj&$-R7vCTNi zy%>PA+J0UPdCS+hvGTSo=6YyCH}%W)`>rmMY$d1PFMuChtd6-rwBipjGdC&WPKJVv~KYX6OpYPt!+H39SnZ4Iq zd#xq=m6-eOhViN|6sRHX5)Ji<1ZJeCg;9Yx;Z1vttlaY8&`&2zE*&0FYD*@m<(`SN ze3V1DUpRL`;pL2F^$#oD*YBw`e3dp*)|c%*UDasx&?}QoYEtHUtqO(ZDP*+j@X-+y zo2GMHE_TW3vV2-Mb1Sc{ImSZe#s|+3ul|J>xwI-HzJ$YoW!h|7!ab{eyjFRcB;30F zyiVYTHL*vPH)iO|RCkMowOr7x;r$hU!(sdL8BXmw`qp(+-2Q#+`5miaMRz%YBW0oB z2>%XP$e(eSn@^-1f>odT@=#rEI&W}V;q~;r@hKHz-u8w**UAT6dd1#G(~V+U-xQQR z_Qyo!JSc}B>)D`$?r82=oqT;kkXP=_QEyYvT8a3?2Z-KfwQ;exIXcSA-}azBGW59e zhNr78JxVf}E7daF-dXk-{g1G25?V*jr@{GFv&Qqv(&j5J$M?=|f9L|w)yWGpn0>>1 z?X1t@IrHGzqWow@he^W@t<&ruXJ-Z`hEV7se-ss;CRMeOP!e{M~U0=(BCI=Tkq z8@$-iEx+3=VSSTB>x%cp<^zToW4@qTUd%5+MqROa!<5*1vgLsKz7o^OlB=aEzxWjH zQoe~~wr$3hbzMa{)(q+GTI=ic_Onfr#DD_ znF~Kf#mOv*w23I8sCp!pE1qds8P~HoYzN&E6&GhnO)MrH-+g9S>q7c#hxVmUOf^b| z=I0WO6qQ~}MIGt7eB~}Tr|3!gwlasOR7K}I%#3^&Z9nD9VX2?d%`9BVK7%8_EDET0 zBvohj+|`NL8f*0N%|eAzS(@W596Z7#?0ykY*}vTymPe_co)=|xG@ua69?#5%SN)osF_esw?e6{lFa9LGu=8$wA z)?`++Z-tgYl3~E71N{;nJayNZL%K7Ew(feWI;eK%E7GIZSluq9YjyFTo5kDoOU+#k zO9|^=%UTnZErwae(nzJ9uWTIU0M58b$V&&}WXmY%-9auc(y zOG*8aTYY_Q(oF5y?BP;}4K(I{dnwz-X*2E)4yvZw%(O}i9Z4^>@oz%CDt@`8-et#u zb=7P4Nh(XP9a&YJ-R~L~sMl0{=tP?DDT(8kT?dpt4i1GZcFaH5`J7angN(zOUx2d$IDnP5Zw1YMNh{dk#CxlT)MdB;#0^kJsIv z)YeM%7#1tW6NcMox%937^J5W%WqX2`c{nX0oRCs`^7BhGnR6Lg_7VrL zE2^wgn%+-JlWEyu!133nsQ9u;>hZg-^DH);Ylercx1*-G;f6l$_)8r5A_i@1>5;fM z4Cgg)M~Tebfm(kk-@ka%;<952tq(8Hq~}U>r4IY7AO}aDEp?ZX)`3r_-o6oK zz3E|Q#!!87MD8m+*;&WLF6@P^kz(&$?mX00@!-N~xxU?vH_=5pJzdWC=NnsLQ#v%V zY71ocUpw&D&H4fJmZJ{+X5H1KtT)?=Lh#ONnHG(<@ABHjGy-p0b%YP2r9$*RDeN}d zm~Cpnsmnz8-@z2JqlynavXk09x($(ARD~@o9bC9Sc}u(t zv*y$#moIg>d(tcT$olAJ4fpsB>CbLIyHZ(JoSeCivz#c8I^Jj0dTe%+_ejsKORP`o z=hvRCtypqr(a;)=-Iu9{e$9-)c+@1^b^kiNNi0VFgXZ^a9phTKZ>lPRo{Xs_wOr>pkW9UQo@+51Q5yW@0CVT4#4e=BwPM!Y0&hunn_|$OyPHE!5KE$ zyU&K?ho)+;jN7iRs9)Y(SqIPb7PA?M=xnJzFpbjF+uK`}{GpN^tV({;M-EiI*udD- zVrP9g4k(Ng96asLq}8SC?2#|1^kW3K|J9*Q%6>#%7=bzb$iQF!rn_$ue#Pk*^S@fM zPS<>u>sPOmP+!^jPDW$Ru=@(c`OgJk^P4lw?6hcA*`K%ycv5(*YO<#BrVkBe+jx0$ z)623{Ms+`H+o3jX*kjK=bSvQE`!5dml#ck5HdO87a&nOc$M4b1pPvRNz03w8Bw&v2 z#lc6DNL`QSG1KX1<2OfN^`4cO5TSLsRP{u!cKW41t_6>n1*-1^^t?hAfUl6s6 zO%yzpYDzQrYsYsIE&QVrsc&Gadq>=Q&4*U@_BU@hnB)95x8lCH?(QdwJ&a`wj<$Jc z$X_io+ARBWp42k$W4TJ^y{%pw)2gEj0wS()b??ZAdkr{s+IQcUhiMJ0(htJhg7qmnui5 z-#I9km0yiIWd<)-*HM2_YRi4!|t+Jv8#oG%$( zx$pM~X<`lPiE_bnW5UCeHSTpY%x7@LlEwYhAAju8+hL|~q$^o^gZGxCRUI^|->i5c zw(F(0dOi!RQL*o)`RR2K51$`RJF)abgLKYj<$GC&s#m;+R~82N_#!s8>Frb1{&Qt3 zl5i$xh~AQEdQ)z>mZjuL{QYV|;)&}vIN}oQuY=Y)tutF|pEaF78gVb^nR|BQGsSGq z%{Lzw6;)X*aqdV>z+XTv@p(Z`c-S237~=hym{^x4>->k9^1{r;eibUWG;OQj*B;Y6 zlJKw*AML&|Rm-Rl6`bjPU}gW~ebh~ijXOuv(^Af7(nsz&H$2iZFD%O2<0h4dU*ow& zyTvLk&{`3hxAxjn%?8%5k5l)3tlE9j_hSE_m*SZZB3>KytF^^mTwvi9R~tI#QoZJ? z*wmI&g{HwguRRwB<=MXP^;gJ+2gX=f(#7st&G?{!^s;drX|LNPD=p@n7bO4Us3cd8 zyfo>4x*@|#0-TvWT&EcNk3vy~+E;l$6A2iU5RFajA%4lPq za`E00vL^OJLIV+A)3{Ciw$F=fxJFo;MIdF1)x+B_XY2nV|2aGZml;DWqK`%ep z0s>1|-%G9S16!o$3#qGAJD>K2Kh3%M-pS%j_|VsLLGBN`t9@PLLh<(bFvx-m1#E{3d}Abtu5LiB8;0|QegW~7&VUR@(gcBANAfq`H1s=M? zx60$jDBxSRKzLRD9moz1Laaj9W>^%KLL?)gknm$gUf zV0UJDh9dBSaX_8pDR_zyPC|{@z7Zgv!dQP)9Eb!h1YiMx@jEbVAwYOs2w;W6B0!*J z!6goX7Yx-3g-77|!*m7N6@Ym<6cQ`|;}H{N&lj{{y0fPuU4WM=t(c@M*Q8XFEp%z7tThpeX!5k7rL!%dx&SyOuq8tzc#lsZ^kFWTQ zo%y`_JMj1d&DeQT&rl$2(VoXwTq0l`FkXv-$6rO!5rR1|1wH;|PC)|~7?HmDZ;X&1 zV*%#J7=i<_y+zSKmLm=r^hMDVRPZZ-MFbN!r5e5HHiUbe@T@*Y~ijxFG z2A?8P@b{&N1;L}qfLEgEiDI0lyGs^lo2I4vgUmyjznc7@I|h zuO(VyEQ5?Zeb_4_LOg9FR@*Tne3?`h+(2Ja&%gsD%<)9>Jc5v3{B#|mFc46Ou5M(r z%0%4&r2o+4(Rltr{vh=PjOXtc5K80G;ruoE zqN1=!EPffx3wT#~asxwrVOSIi4)qzr@}k)on~e1cN_4mnhZ96Yqq$rzii<}DhIpf~ z;O7|)4t(KoNPs|whJ%o#JY+zq26!N!61L;FW&xonK2azTng`8xL}O7H^tUGg-wl3( z2H=wggP!cc2n^%U;bCEH7R?LKz+pXc1SA8)!XgP21{F!cut-QR3<#?UBEpj>46^Wf zK@;el^gwU}JP{8#0j_8kp5b7ytWY|9%z;thpW`XG3tXF6VNA~uI^2*M63Fo2d(?2C z5ab~+5()!6p|sbsK^7x!C<3mphlc2#K);ZA6RQ44LjrRDJ`ceS0TW^1ie?0|vw-{- zc0jarxCtaqOAlW_Fd2mb%mDz9;e_oKZVb|N(BWV`NI+t+NF3GW;`}sh$Jiy zk7bdOI0}`DBzTg^NGh4>g=FAB)*LbeL-wFz;OKu_N-X9#ii5&J{P=GN3!K;#xM76? zL16*OEGCWb+6bn$hrn4B@EL4E$aXXwWfT==n}cZufb5#UXS^N=jT zIZC+xVV9=`!+6WY<69z&`^2oLxWJ^^Z94kH9}?*Z(he zfjx|H=L7Qe(cxUMulY`<7=C6%!OjdUR-rYhwlNJ_s$xJWNpKvA1XigCkk<|@bit}= z>^`(e1-B_!pkV~-Q^eTmp&zY|#@YvlXir`vL+26%tA6btE&5%At9};*0&N(^@d2HT zJqB7aA<)8Ig|K#PQ!&Bge=J8M$kQauWeTMe1)(^JV22G-pF$-JKZB}h?o0{>(%3?O z-|~@yF+&OhkvbftSDjRc1DUG8_FAM4%FZTQN1=dy?_?Z-FeL{l4kU9EeJ+kb1*x?} z+7dC4Zgz5iL<~rUC0YmMH??jm%^*?Tl;;wm%zC2z;W1NjcxZnwLJNK>4~PUvZyQEQpnRU+dQqG862v&IZz$RTWqDVB-JVHh(+A=5;u5XEkpkQ@uO zNj2rPDoSAus}^C=I26fYGEU$7GIo{!Z}B6I-8K}^$};!h{jG|l}z>0~pq7uB0Awr7u6 z2%Sdu3=lh(9@%D`(rYFWH`bByYZj3u2sm=dVcnB0S4onx45$6>CQsTdrY2@Pjn&n< zliUs-zn1ZSY=m=*zA!pEH0#Pp}|xeybi$>y~W*OC-I8U*&!<78uahPc2vR#igPW)VXX zImO$GAD26J(DzUyd4N!6-s)u=mS@T0cS3?8KjYT)Zq|}NqgaPx>M{30|AeB!4hxZh z*bETv3Ihgv^0~Y=Njkyaq6vnV#q%OP{2{f_A*g|TzTyBYGa+*`(|~CU5D{lRhF>Rr z`r#c^NB$?p*DQ|&kIhVdCfh&G3zshOQqrHGWpNu;EmOS{5(0T-wzci`{6g^4h&y_FS zdmFW@O*U%j_O=#-tWc{lR)p0wE6QpOWUUnhBFZu8o{UuI%B~mT87@>z!eU~oKv+OG zL2SQ5g-O!nT!RhO7hy?|Kv>SNd5l{N!=FT0Kt&+Lukg^s9^p$^fwvppZm*VPir_bY z1x<-f(A2LG`argVU&Hb+xxEq_St6`t2{8#Pf~tusENe}c5-T!sQPhNft z;u6?{6V?(Qn&g}0!?HxOcCy4+S0r{x93=pR1@t>8R^AEGGTZ-oK6Kx5ZzF3xD^)^T z;vm7-#21#eHcJ^G*0VD91mfmD37+=$wqF=&JZwEs@teboaejQ_==}`bwP;>Pbmzj% z@Fed_odRt%nnQFu_$K;wDsTSonTm>zncv#lbI%=!ZYd+T&qm;)j2qkBqMtA*GaD5iC&k%9dfR89-o{lx-avc(Ugy%rgn}}Q%|Q3 zamQaf3piyZ8KzQkNOP%-u&4KMdSPR(X)Gij0E{HV*(!t*oj3reKM!|ypE0GSr86i4 z4s^;ubCYtG^)gJ;Vv&2(u7Q(a!UkQ_P9seLY$Qo@wg{m?cO5{}-++_Um@X z$cd^Tf6)IBz43gnb1Jg5Gt&AE?qOs0Tx=a-KBg=0U0Xsg@4LAN)a`Re{V`;JjA7OA zo0;tS!V0V>HiPP(@Do2N>dMr(&jlH2eGFO%n(uqJGw1w+{x~pUoLHV;seC&j#Xuwa zEm1(J$WO6X$+BGrK{n37TnPP=noqb7DkWUn{=6((Q}%TsVhvynrVtT_;`$pOS>cML z7~cR7%ed&hxt1!JB0_4HSIlp$YQ|1G;$yv zfm({t4&)FjgXTpJLFg?JHe_##CxLp*O$+E_^|1&&44NdSX-W;G18yO1V61mQ01Q4b zkP7tmg?%8d3zr2Mp&BeMyEsrx(~TL%Bg8y-2gJ}uSrYF&*{mRbwuj#>w%TCK0tF7Gy%mDj|5lJ}9j<>d7> zHZWD`CJN-xv!e8oAhYi2hD0~q-tIG1j*tZCW4Rbb5j#meg^ycSHZshU$VLyjqOy|S z@d!!$JKd^d8}>;mDbz(l&O*_9lg=O&L$TW)0MeIvMeJ&Ku82wq3!_jkqB{pYZn*}oYV?}hZImx z@(nZ1B+Qb^p-iZQ0#w2BEaD78nTcRt0tgx$FNwE??1k)>+#*?OW^dNS`S!6cvm6=^ zJ*c3n;CnXnOr|nZftd;r5%6k>YAc8-L|t-|Iypb5}JVDD`AnQj$HX@ydF zmOMfIi$*#08_9!bneA&Gv7^@NaNE>m2rZa~azF9@g|Daod)TdEsYVKD6OLiAYQ%b8+ex3tb(BK{QlDXX091Em1@>G3t zeX@0mbx(7j!voAi4Zt=b4MY3yb=~5;uj_x_9~4dtr@7L$xu?3XPg71)0j#FKw)pYX zRlCL>TH1&D(_Q6}QCs91DGQ;fgu@!;+=vTBwDybFEZR@)42!?ufAyfdVM2!UL~n)c z)Xh6Fg4ZVZx6cTM=kn$Y@AUtO&5)~$|B3%B>Pp$Tg}E(Yu@_S=diHtudB1n_+T!{f zh17j~M_fJ*?ot~gUY`+G7j?yso(z}>TZwI=LR29xT`m+oold(2s$2@7a@V;xxHlXJ zFoRnRYycw~#Mma=W~SWWdda5ZMpNfXuMKDnY7A~Nur@f=klc`Ln_`=_rW-x$Af_l7p$0y^M+_ne+F%*z-!*nIDXUy~3-9+B4+-mFi*M*jdz z(RHvb;QYecFw6I2K&bvwxfY}Bl60ZfBt-wDVT(ukKa1G%W5C~;7-~uD z{$0e3ONO6)ce>|LB_XG|E`1Iq7qG^Vk;L6r5a=NqOSs#eOWRY>4cW`4)>?O>o z;!(@pjX50)VKetS`n&l3^BL{Y)XKo^^>?Q^KCW`J_vUxkH;+cYooCGOA}rsS*JCu= zZ||$&d^3#kZ@+C*Gd5N6VUj}aj2*^wl=bL*!w-01SL3yPNA0Lg&v5aX^j^L|ztSxF z=e1VQOFw6_@cMYwEc+v|aB*_1s{H;V@$m1-&s4Ma7wdb!!F5cVek(p5s`Eat=B0eK zymlNUEw>FO;4HH>0$Kf@0z-s zz>bgjH{xu4jNZhRn$)>^qv+?SYL19+6u+vkq4&N$;*RE46`Aj4bV6K$UcdCL_SBAB z7xxMvLSOaNS47yvg$I3p*;C!49k(H_QD%osRN2W9^?{Ylo{(cfpRpFCsUMCXdUYzh zLB^sj^Pu-!H15wy)>aLpT{HO~^GC8@WS1rW@#zD5v|^MVWz}h+o>&%HI_BGDVVIZ@ zNk0+IHRdy3y=iy&l&8N}$|>yFw6((V+nh6;m|%9eh_r1le#p1>uiqd=&B6F&3&pM&I&#p7%6e9 z`{k&SUu36f)Er}G+Ap$*wooe=<@2fGt$9O{Go+HaH^Tz&XhB5LvBGldld>YY`<`}w zWBG}^t-&Y!D-ZK(1CA?wc+;jEg)@D7{7{Kf@XIN2)S*;8f%a9o`(0(J+00sjRrHKN zbmj%;u52r;6*j~I?1h1=)3+|?8`BT9qqzJ#?X#yjEDnT3d;2sb+HxfME;0v5-5db3 zPs_B<2U5D09MA@u$C1}&OheMHF}5+ban1vF3CQNGNb!I}HejY{?69#8xztDRZ`Bvn z|JL8q-$HI751@z8^lc1%&^WV?&++CzcJ%v@E^~Hqb}@b!q7BjL;5X@uy~2S)9?6Jr z!EUJOFDS_oxVG~h?^K%K@5-K;GOWKw?(iybcfQf~d&Kp@yH5yZ2@x`nsFew?%kK9F z8A@;T?UZVoJQZ0fnDRZ|=0ZbV9aZs8_^It#K$t5(11koa^l9mJ7YKm0H*ZxCwe`Yx z`5DHSIf{(y71T`dzN5A8mSR`|7H^Pau$S!sm_0kwHXle4o$`2$pXTo~K9##^4xI;V z6T_SlYmg1t($MR+1q}_uT65v|Izrp`vK;}-ZYXHj&vW8A`8fIHYZq#_Y-^nkm(9hM z{M;T`nSayCxd6!Y97uafIUFm7EhE7o&%lE1NHQ*|nMibQh}hqjU%a1WO3DWEJ#)r| zp^D_K-my!l73eULIl}&n{;PZ z9lO}8ZXkBpq8#3qx*+=6wfE1}G7aj;qD*74n7?Ei%m)7pnf^~XCMeTDBB-}A$wV#I z4_9QFsMTraBDHeuf7WR|ExpA&Qx6NS^zSbg^i-$eCbV{lWc>!Q1im=uTOeP6?_t8J?Xix?M^&hQjq9QX~>FgGJ1uX*FBMQ zabX8gek-y8HU*=WQEoWsUTW8K3)R zTVM!X6SfF#16?hKS9ZBm{1Id%tRf&%C59vt27j&m@eU*u)=teLp7kp`y+Uif3O#Jb6r$$|9Wd{l;Yny0G2 zyLiwN)t^e+my-i`3@B)z+U+Q^IXL^gxmh`vpZeBI;5(?8>u24@kJIV+fT8%qrk|!~ z!dfofhIL%3g7wi^wjOy9yUaY6U3Z?+Nsp7sB1}?#LsLHqTrUKpH7ittChI#8NK^2GL(rhU^R2mD*)}6s;xKwQKdiJi zRiGQ67^cDYl`WrqvAyDgRS){2t~v2lTiICI^#s4;t*yRwIau%N_R&KnLyqOA_rEgq zh#fdyWb61d&a1DgF6Lsj5TafISlwTKVF?~wSfX6Slz>5z?J?j>f*8g6ml1jAzb>uF7JVtKwQ+`BfBehTncU5~b%^!h9>L9f=_fY~F#}H^F8i~?&S6f;AToz~`_gk#Hg5}N? zWmll~iW1Y@8wk9G1GcT{ObNsXhESIKVwwcc5HjeZX-W1ECDSQhp1TQDfA5u<@!!|* zuX=I_Sg2(H7Yie%X-)ACaa+1&7V~!p1PXjUZ~*Rr#gCO)HYj&1ZzEGrx~D(Y2P{wf z0LAE~>h#}9`7s*#h?o`vjTHkg+0q|E2aDClB90)0oGuCrh%)$x2>gpfYXckllGD*! z&7m+D;F06Yaavm7_P^v%81$-fy1-AkYMhQ9@N<0Si`7{*pEgPdc(VCwoGxaSuQm#^ z>TKE=@Db=sUu`r{j`)hhqR{`rR}c72zVyYSv{tQ))z)3*i$!Bst)YWOulB`guiBpu zcJ&%My1Kys&M)_(0}T9|qtiSo{$v{Xe%TRx4*=W-nna-Xj}Qhn2P&10SbBg0ZkZ6e VCyl;%!|0;*P-4o;d+p4{{s&IKsVx8i diff --git a/src/libs/pdflib/doc/pdflib/PDFlib-Lite-license.pdf b/src/libs/pdflib/doc/pdflib/PDFlib-Lite-license.pdf deleted file mode 100644 index 418cb111b2608b271c90055392f27629828e4a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28761 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

~ET?Eq`& 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«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 z zW;b3XB`QW2A^CF4zLuRCmUu^`!+2m2@yf%`y)QJ|o>x)+ofHXUbp=U>(;c_1wAuPM z z&A`~yld^Kn?M(%!U2Qrs>3D8C!0h01c3R?`sAvlVl~uEOk!A)NA zyz(dMBcXj7JpGzMm{Ih$b|%1w6x_B9+A|upc6W&7 z5BTBS(3)k+MgTsT2EZJE%<&XvTj$xB-LRKX5;UC^ZxC;{KsrBf*unx$7q|ywQ4Zrx zhZ#`x2=(9vbxyx#$Hx1l$W)|dN+WLwNL)+_WI4E_XTbFu8Riv`;e(U@c=8geOCwh3 zg(1jZ*)8JD`Gzq^M`@we3o~z2VtO|NPf8>mxT5xmF+hN4YMP}s6EDwFpQ-&OIMf%; z8Q>_{-!JSd_-d^-93vrM}S!_BuR&&fgafS?sH9~xNuK29w7+*A6 zpzXO&?^ob0Q|P38#~o;C57F#SRDi7imdKx|h2y58E6s*MO7)|3$hrt zK*@wJygxX)p{@AajB4*U9hrcJZhNA`s?Z+*$EH8F0s)I^ECFy!DZUwNl2_%<#gWkt z6rU9i*1YGRHN7JNd9q^Xe~JBm8ymPNZ4HWx!oC(z04J#wnivuwcm5-We}#B2h4X3f z-qjB5Ne>Jh7;69uQ!uZO7FTD4k_|g9h>B_FTUm^fi&KWE;$>-edJ`R=l0H9Fw4q#0 zG_o5qKy@lcn<0Hi1XdT+bz@aHm^vLcP35QH=t>L?La#DGM#<1QRAkdG5d=#ndH-^1 zY~2k#aF}gyF4Z`#-eZ@336pJnn7K1NY5tvhnsBx8I)C#NR?C7m;MwrS$7xWgs(Z;Q zV0IQL3w3~4B{YbVo0sspHm4NX&-nbepN1$=`9c5zZMT_eu%~w;qS4wKR&@EYrs>QE z)pNQqLx=qcyCn;`fs>6q0ONEklKJ=+Cr{d(P>HgDb0;ChQW?j zUoxn~=0VsiI>#*G#-3=g=shQ7;stFcr$Rq#Aua|P0b)rNmwZ|8(E__uV}7mu^zO5+ ztC7(i>C{PctXCyQ4}fqjT(q@giCu&Ou+MZKQXZTO_Yg~kE*9`;$!`nR!t7yEf-alH zJ-OIDT21wa4gl;$@D+NOk+kAg7?T`Y?^ysfaTEi%alEq6EUuMaJ@J6ps24_wDi*ug z-LKKDsF1{)NHM$LA=(gC{In^SKN&cwOOJlYF&nzau*GaZ=aw4B4#p?r=#lFsss*nF zoF$gM;;p8H9Y@9yHjB?y<$B>q6y!G(V3Ujjc@DU@6ioEf6W$dvX=9Pap1_mJ-q<3h zDkJg(KF*?tJasG#bsy;KM)QaA)-PM1s_8=1h&_}9o^796jo*8EGdtfN7S||_-uOU( z4Peh9X4aN=%)P;sc)MkaHjYEP0K`#05ysg*fh~5e3kzB8ZRd@BGSJ^DsHpuqu*SDB zcN=s567qIVUFbKLsDv{Z57iX*0$2T*L|F+`5jx-*Z&1rx9z8t#Ov`UK0pYuHh zC!FhfTSa^Q6ZwHo1;?#lud!pOmMsgugZoe%Z2xr@b8FndhXTz&_DZ#v{nNSJ}BB;Brq+vGGu z=zgt;$wep#HEv{w&{~4s=fj$jBqKNuV+5!gu*hLH1O1-k8}tnxOP;eft6^ym6GKhU z9G}(-KaUWId^1wV<)Os7sztO6bGS+4i*)F{@00^mbMv~*6zCqXxudhQ{~iKF;el+h z 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

Z8yf44Y5;-Tj5yLPoS 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%0D|98} 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�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%0Dt~*n@$-QxzX7mX(I7~ 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

hqd#xoDOH3spsQb{4tq;cgEF^eKtZ z)GVgXHWeX0eMnEpH^;`Iep)NZJ^haIBdhj~4pckz84(Kxbav;1&L;)C)|v`+u0gnN z(;|0zHgiH^Eq9y++p+D=t$Fu>=4P}Y=S^7RU5s&vB1aIKE4^nUk>sF{rVfhn4VxM9 z2DEH`74=i$@|6n3dIiC{B=L--Fk@?nhCYnuv4$1a8@wfoTLM^8hbXTf1}%PS_2Gn` zM5@Pa+Is5L@}JOs%)-(UT zjQtBP_6KqdK<@gJq{hMo2;KZW>5Z8k!2bdu`~E&N?KkC+nURy_-=_%v_Ido9b7toJ z16B$Uuzw>o{t9dZq_q8!YxrwLzYvZ8Ca~@I;{O<72!L_^dB6Nm5gS0Y`!llgS4P~Q zGBO(-03P~F-~F|u|0E-`{3C1aw>$6Oo%vs>bO4$5Pf{WqAcXRl_w5(Q_4gRff4J=b zh+6yocK`e0Obh_c9*`UfxH!xJPAcHc2>`zfAZ7!O08$EnW&iyr`TU<;cfa5EznA{M z(~AEeIS_t-z<*!JpSm$4C){i6keeP@02DkF_IdOf_1@Vv<1i#VF%Ldaz z6H`z`)u&4orWT$ZZd|n7!;4Be?t(nmLv2pMUaYn_oiC*SK*))1y`Wnkqo=DOHktKy zNqF)o26;KakGKkw2`RIq9eCU)Qn<$mzz2;`x#1q&pTPLGETX$V$aT#(@$PXo^Rms4 zA*OOnBUDqf~oX)cyDRNB=3AUvmlDx4iISOyo!K;Eqo<5&^3G2AKKP~Rn=^r1mt z2{TEuVT&B=?k#WePWP0&)!IX0I8OIiT$9o+)$q-Zekvr4w*@_5q+p}JNBZScjkL?2 zs4rXiEf{@8zHYhO$^N+&`zmHwDCb)lhx7{vyK?}?V3BdkMcrq~`cZj9;voU>d-!dm z^uDKkR;)~Tv%1kJv-C*>-GqqYAL2}R>H`DhX4ylSj@x--TM07BqQ2G>D=7VsC!UqO zlQ;P?{`!&=IVKJ9y*HIIS?$$>84Eu_uPQu+f?bUPzk-<1Y3{Ua$I>o!P*QQV zR6a$umT>+6Q@eZvMG+twUzpFaxI%{wgZhAK;x~Zv>0P0`rU>KY<5IY$-kc>JQxt1e zMIXCq?dne%n&2aS&U=xn_Q%gxmY231Eo%DrV(O`HY8~JTd(}HO%uz37BtvA__s?RR z%yqtVY&dhXMV6}8Pwg-B@43y=ukDoQb?YOi`^TDV-#{SBHN5?A>Uh7kdaSzEClKu6 zM=9B?)Kj16(*B^OPg$p#{aIgrVelcxFIbxD9#g)4E0|5&*Hb(GSqKz16t|lZhSB;* zZD6y#=As`PK1pzD>5C)$#9^=6u6*uT8^&UA>v2om0nR=+%f15uId# z!4Kb^GE?{L&1VuR<3B5Z;Fl!pOsHsfKFh&r)X%>Sq6)nUog@VM{?pclFhUmF%wXFL zNg?AQB@f$3d;{&orNvotKOato%rR8qY*V{sP7fQgQ=R_pnA$K93m4U}6JgFLx+siM z?7o)nNB9L=V>z1=v4{v1W>UWatcJS( z@zoceOofD!JZGa4*f>Jme2}*?zUwRCi#Vp8y9u`!w7Jj_Iy-lfsVs@Ok~P$q7TUGE zNO33kz88Fwr_3Q5YQ+b+)0bjfQI_~B+wdFp)CP%D)g1Y%J^k(|@sa%)3c3s9hn9VZ zxl(q!P%Ukp8jni!k@yL|*86cS`8P*`tbD3RzmwL#7y;&0n=1VB8~E7HLpY3KG&2#n9$G_O$*jIFs?H2`bDG z#z)-{V($ee<+*%Q&1b zN3Vg(GYO=G@HCaL2;d4F3h16wvFlV+qxOeT*z!92WaNberLfo>k#K4ZLsOrt)9{ty&Yn)5`0 zS#GVxz*e?8bEsQ9f=rn2)Kas{kO${Z^{!YJ_7Xv!l^BZ+WospPqgVA41k-S<>z7Nb z-R4^n<>h&PFJlB6)e=s62iojB5d;y{kXe-Gg9RUUPUA|t4+S6fNAK3)hWyPdsq_;; zWREvnR14Gitoz!S$`XW;K>R82qIlhRrZ+*`?ug!|l~Jsa^Za>f&yA4BLvv&nnhXsF(FACs zA5p_ejq@E{P@vj;`*^c=M|Os=b_MXb^^la+J@T|-8v)of6{TiiHeWtqO5)vcWV!@r z=}>23g+P>OsY%#$nHnmN{Sbvsi8P+A=vC?X2+;K4ggi`#*a8`XeVoW0bE((@{ht)Z zZg}Og=a68?3ZGVvDgpy(g^S0d>2eMwEh*+k5WeCmNA9?Q*#Pr%NWgLEeEHJXo?K$# zk`c8JF|6YsY@P2$J1@|hnyiJICA6`S>`|*vOplvS{xYD5X78F`nTy>0QIs^e20Q4g`iF#DN!LpFN6kon%_vHB}VYAIGLV56ovgfcS z=P-&^Xq9)j<1+nd^EnMykh$4GKWh8+CCK5FJDZx4#KaUojecNnBxy%` ziO#ycy@&?Jw0Ozn?N`3&R>mBiUAA?+kfe8{d|Er8MW&mXou=NYcx-VIf_)gwV)HeoF_D6!Sy2Cs4GKbU7p5G_6Nn;)GD$sanhO(ABs(UAWS=jenx%GK^2V?2>Drb{+$?v!ZQKDYkX{sE7>FX#HG1UdD}9+}s9S}m zhENVAad}g%NY1B0RN}GZEbu7wR*{wM)AE_OvEe#w0@7Q;bSsS;z6>ZN@%ISR!#PdmzA{ba6@Zo<>43Wq|yjV@xnIUNOxDG zNPN*{vG#P5c1h-wFyP~2PfCJSkOcGQiQw-KsFp{jGE*QRov4HP_dp{|q;U;Kdemx% zG%-~%@BT&WaQb9EIeT=cBK+3@uLmiyk4aZ6cc+;rgT(IZD#{g~GNvCdoH#p1e+o=g z--Nu>4#tJxa%{n$A!r}1E+xs^#h#}XIpM_bAwE}>73Dec!Jy@P0OEl3T?{P z0^LY_xdpYn&SW8t!O*n3j1~C|wqOneK4#3N+)P(Nr2XnlY%7beWC15kz*@o7D3qv zK#K_T6I=kQKYnD#F+nZ0|9ugTJw5u_e9ezl7g)slI#o6{L16M5hiTMzKVKz|Y76c~ z0ePG(^`MTt?%wzLO_3EG*fTf{D4-0u*c$9n!Lx>rx~2s)uO03_`TMz!zISKawxoye zT`T@NEu&Xxr{)qlXzfR?=s*h;T^BsDBdKTZ5Ho?!E!QZW_S}RT zlh$Zs@xu{pAB#NRB}hF9sc1$ulCynPKGFxBgq_&9uxwVvH1MC`yZX;`PZ6_^%myd| z-_H+`e~E@S8)J%9$y)ABZ%GiofJpp-2Hf4Qqf&}AnN92b${;V0hMJ@(cp2~ASvssW z6#6Do@57rP4vda7Z{;*v4t91&EhyVOCJG05A}y67AXe>zX=@weOi#6AOJ}p9ILdsu zO!oca^isEL7V1e0{2OTJ}{hqn(g{?_dG)@_sw)to?$QUhT5 z%sx%E^}G0`;>7Jg5{LWnP8}U4>qzGhO(zLWhO%zY@5TrX`#cJ}%l1&Fxjk_YY+8lV z6;{BArA4zS%BKd|6jR2|%IJ{xhqCtD(7GmzBoXa;W2E7pfLsn4!#U^DcXb6B ze8n)(zoZq99L8`L8uM`av4|zS%q`x+tl3@FeV_#HTFNZkuC$%pn9+Nl1A;$jCGJUb zO^;Zm>?ipgZat~VTm>OcTZR2;Rq;w|efqZOny&9h32={!5qOjN+=QmO94<5^m#75l zEQ)`JLzRJ}N|Zi@D8p4{naBJm-V^X7e6xqqeCsj`UbN%sqVo<{8@B@4Dw6$s@>HVm zg{5f)1C3}~Gb<_1TBeY@d8LJyHMxZrObDe-fwR378Q(*z9fs!2k5h;9L{3(T4dTMZ z%&ks@hwDqzPwRfiquM-^r;AzKL#8}K1Moy60V+BLJogDMzIO?JYpkQ9YD|me=9BT} zE<@O`eTr(Y+(7kC3b=nKYyw8_{!6I(FJJ^GV2<;DS)lxFWbZG5l9S;tef2*{H-C-x z{Xdgy{u&nk6PU#LAAw0<)ieNd4WjQt&EjVuV?`w|dk;{-fadBIP~KHdS^QOkNx|W0 zQbp3EW{ZUP_4MpLN+}0COJLpe^V3oG!SPYK@86NEmF4J6la5rnKr^ez6LR{Zdnddp zs$YVKhtwhmt(!9Ko6_A^541z9o3dv0;*zw;Z*}CKr>Ckh9uj&N8&9ClA;w9gI~}XF z<-6}vOPR3It04+8Tp8UuCN;Ld*`F_s0kbPV91Q-nY+{pXOj-)zoc>ge!L1QX9nk;* zjU+;#-uxw)&|gP=;e2K31dt*xnTw()QM@y`5TTDtzWN#JrH&}O5-tE18>GyKR|;{U z4*xh*z+v1ahu~8uhjecKL^$H~!2zT*MJQ;weD1A6pFhy)unI!qDH5o|rWI@GR!xLH zmenCk8mA>zNa_^6^+qCzj>bpT@9^oAdk{GW;3PZEv1tzBrVd}Q5=G<psR5_w|Mk$H`YEwK|z7fj)m6<&}%yC0H<27i*4_3(Aa5 zrwZr9@IiqsHQe7KL5$%M_P@s!A|e!{?T56Ncyxs2*nfwQ;R5#UiivVyc5VS4qg1|a z5jDWqBp>2_@wWu3h8lxMBO5G@)xWVLsh5dVF|+GAqFK!kqrsMv8XQsmNDvnosuD(E z0oBv&RTO+mcB@cd5N%7TP@!p;k2@3noWPYyA8+{e1-1hO^_qvekfVEqg;ii^Ns4 znTaK13*5YfYw=Qq^UpL$eUlA~ivbd^nkoNip|qBuebRfB#i8Z_*N9(ag(FYm&i_rj z>z*Gm^b7)<`mi7-aQ;W3^SgWct5F=x65&%S!J_#OH&`CCE`we?HW}zd-kLO1M0#?e z;nigNSn}8R!I{aTodnWGxa?94Mc{8p8270gv7X+T7A~pVvfS;z<{I zSG3Xx@AFU0N69uT7Add#RvDx`#piHqSf(gwE5pjK_Ilu|32>s0*m^PiAJ|uc)(ikLiR>4flWl!f`i5Ixs%lGO6%nfSF`TmxKZKD{l*>roxhB#6 zw2F5oI?pcafqkj&Dun@FT%PYO64938xl)@Rlo3Ct(uuZ*OO>SxdGNTMMgx2g` zbcRpXl#aE~D%Mux&gs$vCU*vLNpoGp{Z~5D8z9*Xcu}~8o?^AUHcIrIc1%+`kylAK zF$SivZ0lw2$2F^~4WNAznXi9;&+`{8`7if8ztOh;o22Y-{P4ft^ZYvS&ve!Q6EiGM zhQEl&KkjWfSeX9{6BVy2CAabkq5WBHG(T2nD9y`t;e=`%=*F!`(tZW>`)~jPh@U*9 zSIK)@4R<~AK!1T$d!E|)an&NY?? z5O(prn8?rKB^*g9ppxo43}ly<(-aqiWvJfO=`a<3BdG^-LmylkOeVNm0P(<7t#`9;&+-6Yhu)WQ)o6W z4Me01mC4#eBdda%DcQ&pHtpe&WOe0Y#0e)oYsfFV*;@*qGD#K-)yJ!Va3e`{A^O0; zrN4wAYSP1_&FWfzO{uuDX|`rLRCeC<1$Oz%gosebh!_r>+5|vpqLD?%=dBXFpbu)zZpGJ0c1lF6kbtMisc_^ux5P0@5$fjrAMbPK*v@NL0Wk zMtx19Tk4}v_|QL%*n54zsw<*=qZeyFv)EMMHuind@&Oi&Nh^4))S@r^^t=`l4BgSK zaU@0>tj>Y=C2K1-)yeWX^Xr=~luCd_S6bCbNm3M`!;?TT*O7SUz2C@ zvO276UTZyC?%t8!M~Nmm!i9l0BQ2*^f@@$4+da1LODy$vI>IT3`|4|3ut$!zV&v!3 zzC~UcddJ za@Oy1_^@a?YNK)#Trc_ea=ySoT!Eik{(kfMOJMegG7&K3@au7lfRpiesW>Mf`x5Z` zzfO!W{`S1|zqmOu{+m?%_nLm+oc?`)0TA5!M`9rh2NPgq0x+Y&PVg)A6)?U4cyeR` zOm;8=^oPvtAjKbN2MmG$&IuSJ0A!#7 zvh4oD>16=kzjPd|zp_OcrHx&Tt>~EO00FXA<_2`q`ZlJ{`liNog61|xfJ{fnf3EM> z8}#?}0d#tQDA$<)5r_btJO7B0 z{UxDOvNJX`*SGqWBI{@l2%P*aMb?qd#MS|D$iUX>p9}r#>HfbxR{ysTF0{tdGBlstO_ ziahQo((Ta-Byyx0yVdveRh9Wa_{|2Dh#I!pnMU%xyz-<-sB3&#mpvdMZ1|^EgzI%~lKozO@hC2HA=kX}EaQLY)Zv5J!cybAHb#7t@3 z9!))@Ne*)QriUvwV{C(Q_<{<5?dl9voqD5L4VlMc)d3?1ELW{`p#yYJYv&2yYo|7un~BCK$V*qk+h3p$_Fy$1YlJvS1Ip z)|PW(TL3(k41>$p^t7M>xY3%axL2E_MK8Hrb16#Ry%S+Q6%f`6i%k{wtz;q!0hf>F07eNw2M)L_*%PxZ-|IoYl#>grCXtC5$|yw5lRg4> zJ#1ZEXH8Q)oWQvg+#r^}bGE9SVM)?M-nE;rvK} zl=0yAahj25b|xse*UmL6SkY5hS*MA*B^K=ti9cb*#c+3SDR(i-nE58B$c+>{14Tb{ zV8UhMlH$o=r#1*4vf<5>t8Pu+rtf^!DyYQTed-*c%|7>4J#cGQfrG1hC|Bm%MMimp zm2E07e%3ubKW-1s~IgGpXOS?8{Pl1Io!LYV#b4A+-XV!1TkD2%)qt5_dfv z2a$z)8Hc7Ac@hQ;U1REp7@HQ+0@#F=Lbm!S?0Yxqf9#jeCPY&wHz`x|ZjS)wEfn5v z2$YPgFok~#K*uf@eq$BVZx6{vmBS|yyV_`TM3J)xzs%1>9L>$w;dDn;A_{Y! zZ)ZEzsGJ4nwxa^+BEfZ5T1Cah44pmUb?I81&H7wJYR$U$-J~W`h)*oF5`#3qj zq6@Qz88PRAf@?n~PGo8TXTQC=(i=BO&W!)=@i3; zoDmE71iPTVs36h0B=FnvuARW0XCmmOhn`-F}Fev5g;Gc5lng!KRUcv2JN=_hT zYd)c?;}mhiX~W$WP#rep@YTQiO39Q-$GghO4|i=^hLsCWqR^7BRdaL@QL$?=M%Th; zt-ev&)Nf|Ad6#?P6YOr<{SzHlgG=QTK_ja8fP zDIG|Gvste=z_0+43z*@SLrk@aU=_m=Gp*EE`*|s7ny}pZ+pH;{{c{k{W`2^Y+sq_@ zkF^(~KZmMThMVxpQbUFq*9|~nv?wBy22?NZP)S|pG83W~DlK6$^=nAiWbGnl;`J!m zjHAmrODv08@lK=Cd~*1~ov)JOZpjHe+te@`8fvZAT$NE!>6FqPDQy~ISM7{n+vUml@f}QpVRM3{=jt?ORY;|UoCxm_?w^~Qct7eiK3k2s#D$^_&e@MuW*)#q@Um^qR)Tqu72uR z`?8sbU<8;MXV1L z1QOWYuc{r#@8FPVqJn^jRD-HIFrJk8^L92J^a2_WbwE#9nD)GYCT&miPBEAA#2o}N z)3d`)J-VL#CN*eUAjPps0BaMy588l|j6!O;A|IibYq4DLwlGeCwdar#lJ?|~R9}6e znJfOv_+D|p*-mIVh7n2wZkYZRv~`sUV^t}effgJZ=OH#lZL^;EVV&rnBbK{obATc8 z_hEY7v(tv=q=p7YaidEqZZ#78EZ#wCvw{9}W|zD`F>Jn1Rcs{Ymb1Gl49SQ&)T%`f zbAoH#`t=AXkKkWiTJ#v+AMPP?`^BHX?L=+vq`394j10TuZI+8JYPMC0NA9T_uLwxKeGmTg{Y zU?*6(CLz1ZiBvy|ZEb*PxyIa*jNuPx!`TZcsoFI(nXfLa2f)u`+Sfzg?Q|MJ=QU^)Zx>T`Xa(`qU&olBonQBy9=3Bd*hp=1AbjoEs# z8loVz1}uxp;r^kW33w~soDbGUY>wf2UB3UNR8v|})e6)y~ zV_@K3?o}YsOdQ#l+83gSGd+V~BDs}2$o@I<293V>k^Z>>3Ssptzs@qkiQ?+Sgke=+ z1FD}Vo@Ot$0f{!(jsuQUSQ@8_kby2P=q;-%%=~t!YH&2RA9R&vq|!^~gkm)9e){f8 z!+kk+!6Om2+V|sCr}iC}=h}+W_eAX*TKp-=?M30cvcgo7dz4~tiuJ?e{jNXEe zi#n~_LR9vdbZU~QBZVA$L?VN#s3MGcR$@L|?}OyK2h+UF(6I<+J?Ps4r{ky6a&l4H z8@}vrI?fJmy!9K%O;U8udsvb>SsO#BI|V%6j-(5gE9SgOBQp0~acPAE5*B*_l@e;4-c;4uWdV`V?Su_D2uX5abC%|MhqJ2@ydoNi?E7^V2Vo&<3M$Kg!-Sf~Iz-xPP+FdWAayK(REWC@Yo#uD;=7vx=dn_# zvBf7GB^=lcu!Q9+mWRM$t6$44730_5be%JE5JcKkKd0qh6hAcFu>Tm->cMNXI}v36 zxy_E%+I!sJum{{7933VCp3BsRWA(eWBJrb>)RrV;qW@?>WIMKK_g*rC_RnznZgVkh z-H`=i1xV4HiV#C&WAvG4QRf*^B(S856=NB9kphP!=l$$5EYHiyhH9Rh@HOp&M$U2qqAw(=9Bw;xVK@Q|b zLCZVpenEP6@-6+SW19Iq6ptP}5T{;|mYHvfV+eR`{MBH25bsto+h4!(^WFVis6WcL zI(~xhJfPwjK`T7h;fZN~h8t(85N_;(1Nuqi3?-KzFNOi;#rD zUz?n8)R}GC9Z%?2L;5!)!o>swuE~NAJL}FjL;)Ej>RUmRXB8#M2YJ z167M0^pOrFq)*!Jow_H1obOo*&1A#%RE^8sw7l!JN{1*31QAVfL;T6sz-y()w0E?L zb^?xi#}KG$lSdgOtzUsXaZ}9h2Lqlcps#noG#A#?SC~nqmhUgVDC;8uB07+Sm+JT=N%2v z#|j@BC(D)3x0O$?y(p$>?Yv=V!d@9{?#o~Xz8=fd)(%3RH(J)*CCE@qn?ecIcg{Xo z=7EZ=*P9y3H9%i~){xpP1Sv=0$EiDXHm(~P0^D2Rv8zq3sb#~e45Al!u7cisFL zxkE%&g&wvTtm7Sm$na*=qcK`ieJG0if-f#xclM=$oO{!XmOEOk%FVQ(f=Mm)smLl< zIH}Fhq0Kri9a`gkaJghAD^O1ZU!>#?t-4fSTSrIFqHW^{y}`1MBXMi7`2*(N`H!)V zRsxl-ZT!U~!eBhOggaC@)K_RAEpB(VtrfX9VOWcLX7 zzzkWwsfhddf~+3Xbyyk4t6Z&ha^*<7NGH_fyOoO5)P4|mAxBWYW-5XcYf-+bm^YTH zNqE0*==H8BxxY08C9anKSkGTaOrG%}uk>koDVXEwrF2#Z>Ok(heRXk2zk;LSpkUvQ zD+_h+j;XXT51h0(oE#>DQL10a=maLCQ6vUuexjHiC#Mx+lHq;{sAC;bPDBWYU@o*s zl&EP6cyb14u6-4RX%C@1EtVbTVyfS0tQoRZY{E|woBKnnxibDwri&fJ9FCC&Gj)4v z(spiq%C#bp?!NrvLvh3rR)gs_6hw}nt&o^<6GEjQFL?9>O;|2a(>V=aYNmrdnw4=z%`&bXA=FzFXn;6O`mOkO?+T~1vay481MeEHk zg|@pTF$Q5cZ;NcxA%*5aB5CyYb$-`PV2O7k-P1zg$p^?kT0j49!C!!9*Pp=Q|A4>0 z%Lh3D80zmJ@bB_LPR2jvgG_&b!%TmG!@oOR5pe#Vnewk7G1LF{)DA!w2q^Ji7%axW zh_rtPiGMkyG5>-**$5ba>HB^+ECXoU2p9pvzF#`8|KwE0%*p~Vnp4&{Ft)NXHZXQ@ zG&FNCH*xxP#L5`(&*+5po%HFP-0X}U>CA2DoXm{rto}rA4gM>7`xo!_?^Uxfu+RZ4 z+J4E=ep#RXA&>h7DKq`L767*WpG1i=zf9KHIGC8&{seEC8JX$CjBS2HY;8<`0nKy( zBW!1DV;d(&IwNxjV?!q^w_jHvV{C2f;P%fr?q4k4zn9F&!AQsY%aIQNeFLlk|M0~7 zB_d@1T}b)Yh5S9@{J&T9Urfip7tIVXcm;smziI~f1^!wb05`+Gx(u-S`wvRM-`fmO zO9Gtteuwax0m9Wk?N(?7TKpScnyR=}t2chgE% zR)#;@39#7vb3wBL$dX?gU_b zdK@CYI6O9cbn+|2(#ODoG4Q@_ygCmY@1KqZQ7m3-B$JH^#P!;zdXc(|+X2;^5qL#F0xwhv3OfH>IPhMjzL~Bc;z6xZ8ZA#C7x;+!juzJX=+jq2hV> zym~riaJ!_WtWS~R+Lp>3-trkQvzX1!6ON^mngyfhE4r4Ody~g~*`bs>RE;ND?z`bz z8usaqi-;gjlY|p)$8b9@+6K4|-l2`Jn#XoXPpr4fC8*5wVSX%>XMB6~d-7L886%;a zy*Y;|7^oVXyLqBfovAckE(lEV=6pVJs)e@)rIe}~o@T~OEO0T^2zsM5+NCQ}po*!< zCtmqJm(4^Gz50_{sJXXn#K`l-{Vv$sL#sTvS?MuQkzdbSxnn-Oxpd`3lXkRMOtunc zSmBFFtZasd1grWAY-xWwAW_}maA)1QQZObAN@PD`txHu&)?sg85MUw*|oN5V01imI7# ztaop`hau%RDp1CzAc6i9Ji;$nN1?uj;&RG`iQEh^ke~B@EPt}fUa+Xjrn&gOo)2t+ zP#vSKtz)EnjzAWUmScs4tK7nW6t8Fld^5a>azSKEvZwojmM!RIrMp+!kxuY2n{k$y zwbdsN+OJD$80YwN+(SGP3bHBZ$lK(51?+9SG(S&FAkBK5Nb+%b(jMv^XRaajwna(1 zvQO@@qkCJK<}oz5pnB&fFkGix&$>FIO!msotfROq9g3Lgf+_O~_;q^)aGOyxc#W!P8O0k~^eae**UL<8P6pF7&%_&`vj}9XSYa#(AKmv(>Ba85zqQD3T+I}>$k5}=!3^QT zU5>(gQ0)nja&9WBV_+F!;YsgC1A+S%RZxE|SEPT8kUWbu-+&tLcyHAVmpD7%_nSPH z!y->?y&v*L-VgXZEhdzSf7fi zg%O5f-^B{7^K{eCx8m2jtUeV7K8<5_BE9Z^0TYoUVVaj;(y`;?OvNkCwEwA)fv=si z_)$0!VS0*jPv37n;{@@?S0u5v(_Xe4-c#D{RYb?)5E2*#5(;u18Wwx7w2Y_q?p3i{ ziF;>Ql;(mU$+-z^CE{l#YV|xM;PnVXviva#&vw=jqmt4w_itR}llH{KgPLmWvonay zaY!!-49rO%9*4w>V+&PJp0-my7=Dq^AE4B~3sfE#IxFfF`*ycaPhDEl^OBHYr%xa9 zgFw31qzeUGaUw8R3r1QJ4+7JK8+g$|+A1sGg}&;Zi97F3e!~t1dUPGRTdW(!fgljc zJmxU%DV;R9eFXT%y-!i=yo&~#4%#-|u7Ool#3KGa-U4kE8e}3Qz=#F%n>ok24TxAC zzT~=VtTSGbQ0Vt*-flN#qUlPq9pa=AD@A+~#^ZXE23O25TB+GxE)Lx`t;=+ewkH2K z)p=Q*`!FIww6G6W&-APO76QK9O^cVCLZ#4sfmFULWUSIyEGsMn0pwf$U0+*tZDhF ziAhS{-Xo=FD_I0-q8C{xiFw#~Pwc2^UdWK9GTgS^3UX*f{l{U*!E6v15sL5}R5RFQ zVkb-bBHg)+&KAnd$d}r}LKs6pAbNHPjiq^~wKLzLt?W68b=_;RGOd6#o_xC24(d4O z=w&GplfJgqq8l+qOnc7SW4E=pu~fvbMS8L!z@~OOKH$tkJ-p;df=mri*?%}&PKLHV zjeC2x*n}+gu3_`m=9-!-#&GEOm+t2;Jdg&eRq2SnQ+*c|(ygErqk+xmaWB?`ZE$X{ zW{Cx*P?ZK5~hNx)m%)YK&BzZobMpu+L6l-Ms zvB0+U+^<0g50OJnYl#-(XjrAky>6CM))tR#sV;})=EX$gej9|+qE>BmL`SFUgX1!M zTO`R?VT1Gc=8p%1+~j_8LhsW(wDmxIR>n0Lv$&Py*g_O7IH{~zbohBn?YR?kP^&tB`_Qc6fKlWhRJ?o{bjbQ8PDamh^nh^p zkX`CgQD3P#ehJx7|LT2^K54zaisa)vDqUZM^#x^2iYTZ+3n<26Cgb*v#Ro`=u-N1n z3RsCg*`Egsqgm;WC1FwGIW6c*WBrLm&lKxg&f{viLrri++I^^R-S^uyTCGhyc8fM( zJfngKANL1&w7|cjICtZYIndfPsjxMNpLZKNW^pcldkhJ>v8%3g^b^%liQ3yqqtt#J zf=#A}@Sm)kH>ZSZ%w7Rj6`n+vxsqRxz)`*Yu033%GvMJGJhnQ;$P5LsEP3)?>EEs4~#*4=BKP=t_u0fv3jWz`pFeIL}Hl1 zi=#{B!s2_$TV`5SozC&qmgMppUpaqKWzo=KxdZqOgypqB+CuS%vNQFSuNKlcdhLg6 zJKk|32rx$Z-D{SO@d3M%hC`9NdW<{F2kbmsGQ3Q*(@PMczH6Vd37p88?BbUOO*ui8 zJ@rn#I)JvI=vsZ`zjvaTRerN#p^oCd)V8_&9;N&fNk)aXMj2X&mqYaY^04%SAG;tW zw_7x;e0DipG38zdY0+1-OA5;m^ zClR}8$Ig2$;6sQ5NDH^VkVh6HRG_TgLJIbM!$KpicADfn7v4m;Y%>O*>>(q_4eul{ z@v5fSzq4DY<+ zO3v;$H2Sr|F39MGcvKlIsME6cM*C&Iys0qaj zd8gAUc6PK`Oa<*O`axfiSOLlUoa)ni^=bB9sx`PA?s`h6Fe4{|(Y3Um38x&_yKSWJ z!v&=4AtOalCoSsSq2tbs7UU2IGm}?>eqR-D>0NkT2>fc9{Oa9fkR&v?^@Q)39?icX zNq4*P5Yr5fr>oLa-+m=;$%0PHxu3gwJ^j*p z4AyDX8rDZcFGcyf!oUDJU;EH9B8oFDGacH@$$P+vCm(Ax-xl)6ZpJk;b}-mcxGZHAPfeabA!#>wtTSB1P+?z3 ztzsK2!zJKmNUY||WH1KX%{i|#f9k8dAz7PzoU94H4bWthlx!Z>s)Z!T<|p6-(i2#x zQ%u}Sc_k!QBfmnyj-Q#{4k-(7r@-%zHv;vSOV_w4I2@>1wGx{OT=#vc`u#NNn60nn zGxOx)hWX^-%9^gZM6f|8u&3_!@RDq-f!)zi> z3>xcVxU7M>?im?$EIS8rF2{b|o|jCMsMELbI0^pSKYtd@C}>mX*AP5OXPynW7EK0t zzIcwYSR*r!sj)L{wAN33_iU%!K)#5sFl{OQFkufC^CNCorX&TN6~(c4;-2nRQTWaqW#+YG7tY2eTxFNEhk%m#clo79nl#PQIrgv*!a>&g8{kc`s6 zIKg%hDNatur4H4>*0lxZr#gc1Q39MulGD-eUqR_bijqskE%{@ZKl4n3=RNt)Nak3% zk@*?HO6r#v95M}@h&~0N(X@l&J^rvIe7^Hd+WX;=+Vw0qVvyTN%deIdS?yL}(l!;C zo!0;if=HMf#=GYZ0)Y!#$ss<{GHagYtSPGlyGKx{Lo7bi;&j=jW7vB9!>ofZseVMe z)F|=e47b`4j8*W$2~zwiygX|zQEIK$StpR1H;<%{ zkGRmrbaWsA8*j;n9bu9bBSP>>DM47$lPei_WNaSUwnMtW)%UEz^*~Puc?wIBeI*&+ zJ#w=2d!Xfd7fMaDtcOqwM9|%U947DUp-|-MS5uTm0$@C93rFKz1>&Qr<#a$fD6}xGv>k@MWW6Z znHbyJ=1#p>Whi2P6E?Do-W}UVTifuHj^(>a5ryK$U^jM@hRrh4Kwv5l8Fl!h5vo^s zswCgE9A1YZBP`=34wN)sK-97pW3!P7_A$Dt^W;ygawS|AI9h&NX)Pd?T$E>1+q4;v zZ5!tsQKZlHQ_dMG1p#x%gd8hnnrAl+s8yqIh2}N`g{y7lQtiCf^^p}N12t51z=vna z1(8dl<2jA?s@2WoBXTZCsKc61xdeh?Yv0!ASU&8sH0TyS4+dONv8PXXLD8fSP;QV9 z6b9;M@Gf72+Mf+h)y}8l*A{Qdaaeg4Dzk9~<6>mG<_y<|f$R^khmgX)(xJT$s=wr8 z7Zi!C3nd4|uqe64hNSQKr@Oo#4hmGEpcKN!sV1@0+9ATFBOXUO<}LF`xY^f2`;eK@ ztOBu^lz=d5n%ES5M2bY|Z80OA$zE4nBiQ>uY3o^xrVRPc%t}05bq5V$&U)`qDTb@o za&2R!gq4bXxpc!ICgii|vZ%tohH^%Z*d{JQ9~-Tojd!L$AqKtW5K_a&b=b1YWE&k{ z)%anj6z=%oB5@W!Yo8Q#HgJUdU6Dwg4s*r$WY+d)*Xon>6TU zPW**jOF>d=KkPs?6q9~*S*|N`fF3GRf%xm)6|t|1=nk<7q{3CEgx^U?74wY%wJ%0- zvv6c$S`bVVc;M1THoSx_RQVSL(6={3!=35gy6;C-Sg2;WaJ!&3rZhE%cwQ)7DD8sb zkreu~90_?w@;auYxP@iwPdH9uYcQUv_Ch#2vst|Xc}>X^LL1V&!!3xVKCmKN5EQk{ z0(qpL?5xRVRiqzOCkQT;Wc8@qK{4{ReOc$oQ{bB0-<6a+%#&E6K@B?&q zl_dOJ6#KaI*gZu5)win1;Gmdp;3PB9o1LM2wz8CTLVbVUp>Q_Yz`UFJAysO%r_6ek z9exT*m8J2=d&;;hm%Zj)Mh2v^_@K`9cAv|j<*QMz^!<3ltq-JgCJ1EhX_K&CXZ@7R z+Ty4P6Jnq8$j$SJvf;@~N#H18@Yfa*rr_i5Vtj=W-$WWcIZQc_5KuFysgOj(X(I03 ztyEA`C~$uCvGW$2{@_)iUkLwP8^)q}IqBFp&%Fr-$@dW>-XhOrw{H|=M08 zoYs`u<2I49nCk*f+bI+MFg3Fh*z*kL;BuZy232tr1>mvGsz z4@EtEpD(S&Wi@0;<3*$}+lAyV?WxCfNEqn7HA0E&D~c+-%#(j8PhV;xN3}v3q()8l%#e`2?(sNy3hS@)bdcoW$=9OMwkZ^2f%tY<%G3lL{BkVPa z%4#pH;0&CDeih%Vj?=|Kuq|F(XL_Be7Ew0N9y~>I3 z>XospCK#H_U)#%Lhe?k9<3oWaeREct4+ALNA8^%)8vb zUtj>|G_UWhSy9n+&o;g1_Vc?K(An>M{^$;;vc=L%>n9$NYt8o*Cx-{P6mwm|F19%e z2gDBADUeT@GUU|&Lj}c=_umai8n$@EeiU-}sJhQR5j_i0%wOmA?(Qq7m9}lu;Sl;} zqZtvmzUvcQtnwq~)Dpvg)+LkDZE+EzJNGFQX*;q2Yc%y}m+j*mnJa!O)8pu{>`Gbh7p zz{$~qAmazbjf_a{|`R|u^pW7-b0F9|<2{YiO&U&6xGe|{UrHM9~pzNYL15?xay z{98tz=`RZVPez{UHzxl7VAg-*;{O-rS4_W={{O7^=V6d`%siHAn=!Y(f&0twThL0o?`A0F}qh^~%l#slgHY$RhtmF&N z0WTSXh}Jq^?T-WyTcsd)NHplOPtbk@Q0elS*INVq$blGp-Mtb!5(-8ruS&{s;#>`^ zO1DvUOq3a$y^mHbX;Q|I+&rowhCm(8&D?0g2bFk{Y17(Xrj;)9$P1Ow`Y2SmYE71sj$d0qN&8S7qkjKlO}}Fwt=k! z^0myyr;v(OStQc!am-G$9MiwMkrC_JdFPMaju+}zz%tS28x+$P(=3X!j%btUZ5|`n!?`3b*fnFNT8jZu^z#rH%;8RXy?Ktmd zfz-!*FA8duVB*A1KIy$uX(b4)IWg5i6@REKB??7Xj!A%AL28L)-hr6iI=tbK`LVX!vm{Dt`=YEzrcCqA1~KWU5wb5u9z1;)It-Db`#?X1YHr&YrgE`2N4Xrbm0 z!9A`{96>EVxLvWk)Fv$My-W)~b2aS?$jyC=A+2P5_h0x~VUR(A&am}h1J;+c95nEl zO@3r)iGNC4-w{X?QZ_8oQg}am%nf{u8dpyH@uT6cgvP4*CA8Oa(OuD}Q9PB$Q;d}$ zP@AqH5cMF4^KSoW-pT%sGpkyrGW>)#8PI9%7~YNJk=R>nUJF{qZ3#}wtuhV#Fe>_z z;Q979K5$r4sM98r(NQKm=F?OdA29uh@_RPbeA4!1;5Q{UQaiPkZ0AqyM_Gd7)O@4X z=9Ev_x$OhU(_hDHu-*uo+hl~5j~vT&<1w8+sNVY4bRK7O?&KVQnXc&j`H{P-B)#Vr ziQEO^XWhh*JR|?qIcaY<9gvRRNA`F|*fQ}CR$5isFtsW}r@SED$al0WdgRrAq? z_7kVTw|Tox4(#8+Jxw07eLIN$Fe+Xv?q9*dUcp|Foo|9OBTf&@$|T#E^jH(KL`-pP z!8dAI>o^r=)ldqr6-R1_WSrnIZ(+l*&p#OyWjuARLRZ~h3a_EI$U@I8{BDKgR^YwK z;7NXit`DYoBEMZc6e%_rf_uxoYVz*jtRE}*_Qhk4>e_n)9!u#x;rz!#sxo1%s6D+= zl!k)ImwX2^aZw&@p?Nf^0_T zvl>m?4+&dao9E&R^icbcLN!%1+0oR%D2_l#S-%TFdOX0Y7dwtbO`pa_eH-Q?W$L0x z=u`$Ob7x|m1~S(@=3aB%NT5qUa4qfPGcVH_XwbP-cJhcReJ-Qto}xNma)GUcB$AOe zSo+t$qdrXs)^m*iIrBmeAmE=$HjtH@E;hWEO98M-2 zTEvgUOQMG|YVe#v<55*O7@Y-rTeBXXbY8Y#ZO3CQ%uWA5mk}~dEwXh+24-@$L`h)C za@P&{;@=sCClxU~(cHy^E>AuX4TEI|3D#Op%(sROk0?@TOmZ#L#uXwe^tXX&F&q?`Qze zT6uw8l#!qx+u@~!^zClNl#DcM>LZDd;gqe~_RcrjV^O6jn~hmHB129aadX(VOb)YC zw-*z_SC7I-F8^hClFjmn$Q_(PZJrp;q59C_SGT1Krv&x-6R07~lH#L+F8m5f!0@|R z26yl#ZdlC>{^vIX&G%q$GiB*ZNbVU|SCe`LgNK!D{HYU-Vkow*Z?&1XDUCulN{d2Q z40K{%>MZp~)}q$03OMR4#8aKeF3$#?sf;O$kphjMx;dQ;!637LEHs)iffVYnmuIqc zv)5~sjKjG-S1DMvm;VGer30T%AvXZyjI!_Ec5`6K#yiF{oJlWjVRwIVBzps)()pP% zSVM=rc0Cm#yg{YZ;<3rf5$#{Ea#C1hq7GbQBi7v=OvP_PW+}Dov+)zJK?XpA@ zb~5R%f}S7OVg}L4Mlov}C-5yckYCi$o|NY5&`*ot>v`aL)6d)X4ak>smSH(WR&k0w zMPH(jT~eZVK6~pq3{dB=j~eJAYw?*_bI*a&Vkv~na9Wc| zw=eVDfWANsNd%M)e!lTb?E8_3K=5p62lC_#royf5r@r)r#%XlC<8fIG;NYpvd6}(j`lH#PyOu#EgknG^Q)RM#J7P!8SIbAfiyo*RI+xf z#}}=iKKfk{ac{a1nAc*inP&&>tbA1K6iBobcbEFCAKf~=dz0w2IiH_7sw6vrhcQ2o zFF=xCh#DfiNK`13TVr7YUsism+@D7=kZ6Hwh_$1{QAVuIytsBt(l;Z>2J|YUph1jf zzD=Cq>#sfn#|-I4`1Y(da#AtrDC5gbym#liLJ|OX0|ZjUe0>}He0Xh2#Rt8+nd~%h z(yK<*1N;#sZsOgpijD!+7i^=WDnkYQrSFr>JzCCPL#rOenp<%kcBa6gvqLa$elf7e zGDVLW2}+(6MQRK@S$9wnV)m!jfz(B(9(yq!PU`o#xm6jDq1`JsZZymEFQ&loCVRd@ zIy1~eVD;=Qr^e<*pN%f3S?Dk!Kg4{@tyw@)!}>IRT@f4`KK_L^OG3!#^=fZs5RK(Y z6m3fAn-a!p4F{{`rXQ%mIsFt;+2@ zBU*{15PaH&5>`(eto^Qjy-J%bn}pwrcxH=oQFD;Yaq4x6Uh3sCc~8Fz?;a@wUb zKNa|8`c)?~PBFFcwqwrDO@p&tFFMbnuaoXpZZ~UNP-C4;#EhqkfZXPd+K+3sjE3I5~ zc~su9sof9WGLNP{uygoIwPuWEFvr&{%%uS;S+k)9sAQX6G8KOTpDCXC-rzxVSP9Hl z7QtBjehdN(jCoa>$&NI0^;sWwZ%Elql|y5 z`nT;tQe>y>ig^h^4vz&XeXc~TZjQk96k~)^GCAK&-P`J;w!XKUTT0g-t-bMMKS!sq z#lqq)S0NBn>UA$TK1X|3MtXf_YQlY-v%^vR`dk>4zU-5F@QE!s?0Hj0+vp}&h_T(O z5#@$xt(-&6N#oSky+v~mhhAZZxeUF=ucx`sW+GaF*n`bx!mCF|ZCXW4GYn%9)84C> zvZcn0ZQP$cA2-wD#P<>DGn)sk79XZb_K7()S$&Hih+M}Nr)LEGr}3}Qa_zBo61lRb z(@^u}B>x|8Zy6lNwq@&z!4@-E%uFR_W@fOM(L#%vnVH#QmMmtrz+z^W#Vkv@WuJYZ zyZ7#M&aKdGQFU?ctZijv#Nhf!*jR(1y2E`nS!#`{?@I6=3)1$Jj4w(1I*>D zD}8aTeWAbVb42F#I@-Wg=RKrCboz**CcAv?4F(QeH7}Yw`Vvz0rKg+}UZq5UuoflDSePD2F0!X2O~- zM&|xCN&kL8y^)xqVW;Bax%GW{YLmlQoxmXvoro=RL!}C72FWuf9@Y?y^~K}g zGjm^Eo_HF;B!!i)B*BlIDF|VEal(?dD141PDD%|*ERCbceFUd%caji%H#LTrSQ&_$ zG{kV1jx9=x<|_M# z%v@t!oGaHa4^DBP`NZn!q z=BxjfQ-03?u>UsxGXw3;EWm?|tpAG|%kMS&i+Wk8$U(n%&)?SO?{W|a`@f53ulSc}cBJ=uA#t$ctE< zilw1>2lDqiJ~k*u+$xgGDYHj6$fOF8U+^%bkM;Y}RF6Q6=u403G>~~Mv=O5YT*;89 zjzLVPRkC1*4e1}(^C!U0Ohx%GyucQmwq_Hi9)6|VA+t?xx22KrYHtU=0hm{F)r!y1 zS~eul%buuioImxgYUE+bnOB!_nx(o#=6hIl{e9ed@ifi(OFz7>$N9*}eTt{d_LuPY zCgh8c1sSuhm*)ZO(Z!nsim}ndWCZr{fj_T?gu<0%=pf-*DUlGo`vbwRu=@b#KhTRh*4G;!XU5>8?WuvVm1m7KCsr7HBV!+w#{-4o$EO)t z2g$&Uax3JM^M@FQVxpi6d0Gy@UeU@V-e$)(YMkE+uu&l&UMVG3u zp>XjkZ<>x$GvfBk(AeIZcj=ayUu$YGVsFB?85(;0_5ge?8ZJ+A&5bF#)h}49oV?pe z@e%z_ET>i6F`Ehrv17hnAQSWWWLb$@bO%oxbOE01SoDYVBo($l4!Gq>7PI1QrDelf zq}CiuGS3kra;)r=PQ?}df+~85tfn!USl$8a?QAaQD0WJGAk)h z0*&y?i%2*d$E!;P7og$PARX%XI|rxxuqq2WbhHp<%kyg?*UQaEpHqEX(%nE3Ka8Jv zopWwKr8pbDK=E6Lgin>*VerH`-F%ymvzPT%#LnPSpzNI7cmo?U2?ycw#IWSyQ0mh) zeF%Dox}ovogO`E}Sh6dG^!Ri;I<8aSJR#)m=;M)JI$6E#mZL<+4dwCBhRXEi3U~*Q zr5}}MrRX=R7LfA3Zz-@|^2SopHzbLYX8JCs60Ez-wgH}*Vr3qWh@z&6Z2*em=9zfI zR$JXuC&E@ZdQ+ALII)0JjR8SM!ihs|Dm3-SkBAD4~LAesk@IelF4QdQgnh_Wo`1l7+HXt9A0pw_kGGr|gU4J{k;Tk2M{BKx{7LOhScQ*b z8@f%CE8x;R%U3(#O8TjPSlt)XxA<%qY**b`ZpD%6zCvQ6_7E~a`@8Ev#h3Kpx-#^W z3CeN`UWNzr5*H|AKr=Xa-6xrNqT5y`TFAnA(JB(_<4zhH$W8ArO?&*ak&ecP?pq-A za_Vd*ct5(=KBq%r-+JU5g_PRi0n#3BV3^aGx_PeZ{p?A&z7@5mdFCeJz>T+nFU)tt zD5PmQ2lZhBUpO@ckUJ(XCVjFQuu6 z$rtFlZ>MhY$;qVZmDBNESjW1MMEn&6d`ic<6^2)>lVhD^B-{%j)oIy>9yJeXMUrhX zE$mlcFA_G6h%)?hSc9fg1r0&$TQ&rf1Tjj6IPBB%TAl_mix2k2PHNzxVD+A%j>N!J zJ^Bu&UNt`Bk^mqw1}PF;`rG+0<|1+hEwNpFzQg_mi*D`uJRKzR)7>)tKE3EE*@|4v zGV5ggUON`ld{~0DNlwN09I%^5z&*}bj^|>DfY3LL1x@H2NhjTi^Epr~<7ye@5`>H% zb5EFaxaY$wjI!?O+SDAExwF|a(P#8LNS=ONasH`Tg06R|O~N=| zh$r`?fLTPT<;$CbOS39x6>E3|P(Kqm`ArTcHGqhMSq~7Zh{8KKxAj-I<+T>@@%bKm z(noj9dZc5j$)=C%PB8N44udJbi`5N zt_Szrg~UfQ+OT8sa9?-Quy%mOBSp0&4IOp2pt6T`3oYB+va{{Be-um?X8$4 zhqKWyVs9N+3&lCYz>-D8Rp~6oTZxp}NIDAYFpgfTPG0XT9qeBP_)!pMpHmCOs&SuD zn|_;n@KINzF*i4BPBCxY6d#)2&9FMiVCTzF1K4?xHjM(ei>Z6AJIah`vZMh-phf{$@pv$MHHX!A9Og zM#T91@I>cZ*TU?4%d6M+4nzC?>b3Yi8`Cu725x=*b&x2Q=!*i1U2<2wMa@D)4$ZnD z?I(g8Pr!C1`p)QQBFAg(Z?Uy+?QiUhcaZ4#x2yWpsa|g{xIk_ei^c4xq%Z1pJI{R% zahqp55lAT_4Dn#tFe91J42O0F7*;4@+lr*2HHpt=C<-XXUvN9BjFG+;?yjMHLrt^y zb8;s}9c&26$R#a2Z%G>TlwkRuVLRr8Jc0GV* zkU<0fJyZP5yq9vR%Y-B)3>|0vNdkMzBma7y*c8;(5xSIIl>!Z(=h!sCPLVfEWfDGv zzdtscFrYgO)(2n!Q!^)M<@+PZ4cC81(#j|hsS{9FADCTM8%~>;J%!OXXt)Z{uKf*Y@GS#M3>9`$R^ybyQ{}D91PB02p|5H#6*J|XxzE|CX+=;L z1s-XFyf-tdQQuVAevAdnF6r9M@FH33sIR0LG{@C@^Y0+lbA9g+u4ZD5;wcNpo{|4x z@`XVVfVRXkaaq}EgV318@WSku#ox{$W@ho!MIU{YYR9QL{U+_+c-jOjGVRr6m^{@= z=}W-zQPr!ovMw~;1(OP=ucf%I$G<1~8T}>3Tga#Cp4GKGuI_M<&9sFv#c>i`%v!tq zqPdalv!7h0)r5G|XtS95nl2vuX<8n<7MB6OV|~g3GyJYR=je5ng@UzsFxPcv!Vr;{ z-jtP}`Q`=Z2BfL9OT-|YO9Yj4)XcQuF*?~h1gWvp1h5MRqr)KgMkroYsAvdrkYZLD zCgh)oP6eV!hH&tMNHl2eR|{Ea)gFP)_T5=!#J6rgVl(1ZItSMPnRcSc zbi9L52Tu48WatQ3^Q3B25@JPQQ&{MUI7yIW=Mr9In2KYa9f|gb_vajY(BecgwPU`a zQ+au$XJwYuH6UMc+k0BfC{jQsoxFNq8M${!nZW_Z+4-*Y%YIuVwO8Pp&>^9b$Z0RcD4)mb0Yo}0UdWg|fptJQRsPej_8G3iZ4AN{@F@v9y?Khq-`70$UM zzI>c8?8fW;@{Z+!2Obx$NbKm~14Qw5(Rw6`Y9we;V{7dX7zllM&nhi6IV2Y- zM38TiA#e*D{LU{Hj*FurNpWFQkr9Mv$Ae$yR#qmj%I{Upa{bAUF?;iLydi{e@12QO zUkKtFJ|ou3Y`2|clY>wb1>@JMjeDKj!L+lt8y6gv-UfSx0Xiz3d!R)_msHUyv^0+J zlBg8dN*X@$OUi zM%haM_^~fJ$rp(Fl`#6MM72mKnLLq?c*1jTOqui~Gy^@ag=emc?&<*`Wanb70F12hG;TtMhgRW3!JuI7v7kyl_E z4MQ-IZ&46?$cAwsR)TUjX?L_Y=%N3@b_UCQu?WBT0k7<@>5sBAAxK#v^v&tT`i-oa zm=A9#Pe~9@Jk?Io4{1KlO+=@kjVU*iwrHv!yCk?sC$9kRUP-V1!TR_g9;|8<*Ne`q zJA^aN?+$SbEH*0BW(zJquLB3n%^`!h*i^tC+%5w#?&|$SZ@lfgsfo#1K9O>42Za^R zmpqvx6ob+?@%E{W@;FfDA!vb0#n+LvnDBj74>0^2!20*0?>`q+enAvi0YGTM z-#s?K>1q03susPBg^h*NUyq#sUcf)sczyv6*w}!Y6aW~<{g13>08rlfn8(uMJ_D!i|C^fs>HYc73&{k8 zI57TNNMOV>J5VwM4(|hjB}{DW^qhaBTmR!q{(2$*hpPUkf#^S1{X32NSJg~}Y`+4j ze^vd9B+dB;9)S%2#C`yUHURUV7X53upAGnK_P+!R{Qf%p`CVoNq61if{0JaAfP;`3 zNHAdfz2*L;kpHje{A(PTBK&caSb^9QW+q19CH?8Se{U^zPN1jk z@8AU%W*~M0xMwVEfr2f)vYVrmiOpZ{pWi;ut zdiDSB#mPUXVE@1P)_(ua{Rg3vm4)%&`PMSkrQ>%7k=O32EHzWHk`*5Mv_^1ZjA?eU zJ+$%$8jQdoB1nx<3PEd*_L!xuX9!=EzAg0XA`qE)oK}k^_-5#&z)Hl4o8_ul1 zT)v)_-^WdDdwZpn@u2d(UdAvEtD=Mvsu~=cZF~D1M10Gt_S7rc?rhh-;h+4RV^Ri2 z)UGmc#jTuCd|{Y0mgVYGHde*u3R`7q7gws%v@UeQsHkPh(EUThpw=PPQ|SM7R1q>pg^8UyuElF464JFx;g&xecxNL8MS1yf%qD4cSC zYD3xQmq2YT5=NHfq+*$)aeRQpj)cpnRkG*6?CUyfDD5AhpHRux#Uq=Tp3Lt|-|e%5 z*LkryriD|z;hxZECRkuGP_{vl;rPaIJNz2Nt!{BZYB&JvR~65;p0l zK4>7{LweC1`HXz{MX}BR+SkT(`=F!9HMqSefN4I^`%41}9%qLwKG|Y@ao>Als}nXk z4Y=QrmQ7~R)-UyYCIz!U`qP>&Og7Nez}U7CM_}sIa)efLdZ+gUD47s616ZL{$N##37xUib9&CsEJYX8IT8dHRHpB z#QcVxbEG{-$eK2uKLHva2E9X-woeEUX|7MSabIf}u^63pt8g-;_+%l+w|IuCu8NBk zP{Zcw2?vc2szhtGRM)}UMC0jo3e~VIe^R*|!ufzWkO}>4Zr$W^716=2se@6lw_f)MWshu-x#L0+5Z z;At))$$^aqvGc73(40gQE723GH$ZymLhLT9Bf#z|e#gD>|NJ(_`l|7GDiH) z+ujEU6Q4{U2VE$6a%$Ke>>$WCm+GQ0$nZqn2^EFI;W@7{gux|-*=VX5G{pSRz} z3;8q=f7NmWs=C04dwN9O^HA8}8f!$IvyMXkNELGs&Q7DZfLE<+U!_n}B+e)dPUp!! z(GLjv*lTJ+pwhT_UwpH(8C2(HhUfW`Xxoh z^{YF3?ZlxT##tL;(SuYoAIpzj0OO0I{v0wfbDLI&2=-)ob$+tYA{PkPs@6(8tugv4 zRW2pX3+wq05PU{0upiIq%)5{jgum7jvh>%0AYr#qNOvB4fBuCwLRT*c)hkKwB365{(mo@S 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ÿK(-c~YJ>sE&pg$)|=A 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

wB#3t#~K#$T@gzcFn8{!;yQS-*hjFABx} zKMw_T5`RAY&xi6K*wpXu)*oyCCpN`K$jHd}H=Ii^Yin(wU}&#FFDocauW0COuSGB9 zY%iiJ3(2tl8acJ3hq<35cls%~LnGW1A&kOx zRh!1G7th+WLScK-eX(@>!;2zrYyX%-F)V$T^$8a56z4Tz>FVNLHBW}inW}w$l8J*? zd4txB^8w-7r_uR&wnb<3Qnl0PqYZi|FZaf<&1JTn(AwT8yFBm*m?wrGUWf9lCu)S@ zP(BPdTWR28iT7e$F!O{kn@xQB9zQF*r8@Mw{XNe!`O=f~y))nlp)Oj$pAKU1x8jd{`WZ8yDx!0*R^7mWN^l&UV4;m9(Hj?ji*bgCcF>H1;DGRCp@Y7tUInL zRNVs`5yO;89w8?9EtkhCr1 z6f{x)vr^&^Hbp>?Xn?@BB%!V5C$bBF4sV)u@$3&*D$#J}COCBv)(pL{;Jg!iaPx0? z8t}0t{BZhD^9oC(^(bbR3Ql1W^ybj;-Z`uc3g_H>JW7np|2RkN4t^W#N>fsd7WXbL zhpsH310gG5bbXe)HbnoT+KqZs6}VX`~>L`DPrf#42T zY#vPX)bZe(RYv^M)2OeG_{UC%Xdi8BXH*Wk7Wm5riTq z5pw&|wRCf@j?lyfr5*z5s=&7s+3+I8$ogJ-yNe;9r=pw|6;F#{sQ#o#Ood2@bsrkM z&i9QYnF}GtlUkIlQ-cF!X9)e|Xf~TJO!8@;J0E=Sy$}Z7HM84yZhF}ruHUa{I18s7 z@IP#-0ivFbR?rBp38t%y5Vkp5X_pDeDAX)VTvcYEzd?&fJVNYFHHmW;eaoE`v9s;; z`iiJJ+qZ-If#96Wck6DseEQ(Od7Y6_Z5z9AwSV{-*EJ^Uy{vO9mzEq7JE|P^ZVYZYSFYpJelOb zh^$dPAVbK-LA_HDX9Cz*Ntb;eH7ob@&IoqxV`_dr6VC_}D9-KA<0JGwNzvx_cP*~C zp-&Kr5hO1`k>GQd>K7f$uk#iSo)$#Sg$zcl5%>KRRGn`g{4<|DDXD^5L&>6HBtT(> z&{k7ujzDx}tdAEgn8E-Cn`9@l~Kr@kgr!Ti%6Zsva;y9|H(8tgO zho~l4k?oO@=#Ovts=~WS1sk}*zHFTRRH*ZiU-FHivOP&(3G;?Hbw(BOgW06uwBplvz@Fk$ET`+<>H6u# z{HR~J8pA%^_sbjOfCwM-(eTBt0v!3n4YAM$dm(qdJAU;F41XBeXS9Btqpg|p7B#_Q z9HR+NEzf3od~dOgL%-GpPp?gF%7%`0&&OSGshZ~^q+xmx7{Ecx?j+N)bSPS|f^lR< zFu?rKLysKS7h^2HZ9C-WH$+8vYgmBgVY=+$aqU4H`wWW-GUlNfwx#l!VPZa4d)cmkwq;p`^FGoj zD$ebm(&+*fo0bB+KrVX<$~YIOx6|D zoK9@PHFzaf-bzEc0;JCOVvRrWhS;vp=nppkj1xp43egn(Z1d(w{hg1dqfGS-3nk(N ziLj_HeQ0%AexruxJu0|Vyw3V{nEP{34cv0!; z>{)QJL^<$k49e>KaU~+J&7>c

1|X0N;_j1x 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

~pX^#nuq#HiHQDD#~WJ{s@s5x$o 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 z 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 diff --git a/src/libs/pdflib/doc/pdflib/PDFlib-purchase-order.pdf b/src/libs/pdflib/doc/pdflib/PDFlib-purchase-order.pdf deleted file mode 100644 index 4a3f656fb33783cd10086020b3aef23c8081242c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86814 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 QqKCkt6lcyTYAI3tA4tS8EdT%j diff --git a/src/libs/pdflib/doc/pdflib/changes.txt b/src/libs/pdflib/doc/pdflib/changes.txt deleted file mode 100644 index 4349691012..0000000000 --- a/src/libs/pdflib/doc/pdflib/changes.txt +++ /dev/null @@ -1,779 +0,0 @@ -=============================== -PDFlib 5.0.3 (January 21, 2004) -=============================== - -Bug fixes and minor improvements -================================ - -- Autmatically changes the encoding to "builtin" for the combination of - fontname=Symbol and encoding=winansi, since this combination cannot - reasonably be used. - -- Improves using the "page" option of PDF_load_image() for image formats - which do not support multiple images within a file. Instead of ignoring - the option we now expect page=1, and call will fail for larger numbers. - This facilitates common code for a mixture of single- and multi-page - image files in various formats. - -- Implements the "spotcolorlookup" parameter as a workaround for inaccurate - CMYK alternate colors in third-party software. - -- Ignores the "monospace" option if the font is embedded since Acrobat does - not apply modified metrics to embedded fonts. - -- No longer raises the warnings "OpenType font x does not contain glyph name y" - and "Encoding x was adapted to font y" for OpenType fonts since they are - not really relevant to users, but instead force them to disable font warnings - completely. - -- Added support for abbreviated PFMs for monospaced fonts which do not - contain any ExtentTable. - -- Issue a warning "codepage x not supported" if encoding or hypertextencoding - was set to "auto" on a Windows system, and the current system locale is a - multi-byte non-Unicode codepage (e.g. 932, Japanese). In order to resolve - this the user must explicitly set the encoding (e.g. "unicode"), and supply - text in the corresponding format to PDFlib. Only C, Perl, Python and PHP are - affected; Unicode-aware language bindings are not affected. - -- PDF_show_boxed() did not allow strings with more than 8191 characters - when called from Unicode capable language bindings (COM, Java, .NET, Tcl). - -- The checks for valid handles were not strict enough. Invalid handles for - fonts, PDI documents and pages, color spaces, images, patterns, and - shadings would be accepted if the value was one larger than the largest - valid handle. As a result, PDFlib would not complain about the client's - error, and generate invalid PDF instead. Clients which used only unmodified - handles as returned by PDFlib functions are not at all affected. Also, - the checks for valid handles in option lists were not affected. - -- PDF_fill_imageblock() and PDF_fill_pdfblock() could crash when called - with a block name that did not exist on the page. - -- Incorrect ToUnicode CMaps were generated under very specific conditions, - resulting in a message "Attempt to release an unlocked object" with the - find feature in Acrobat 5. In Acrobat 6 the message didn't appear, but - the find and text select features were unavailable. The problem appears - in the following two situations: - - - TrueType fonts with subsetting enabled, autocidfont=false, an encoding - which contains at least one glyph outside of Adobe's Standard Latin - list, and less than ca. 90 different characters are used in the document. - - - TrueType fonts with subsetting enabled, autocidfont=true (which is the - default), and the number of different characters used in the document - is less than one third of the number of glyph IDs in the font. - -- PDI didn't accept PDFs with the entry "/Count 0 /Kids []" in a /Pages - node, although these are generated by some PDF creators, and are not - explicitly prohibited by the PDF reference. Now such nodes are ignored. - -- Reject BMP, JPEG, PNG, and TIFF images with more than one color component - when the "mask" option is supplied (since masks must be 1-channel images), - and allow GIFs as soft masks for compatibility with PDF 1.4 and above. - -- Changing the "wordspacing" parameter didn't work correctly when the - "topdown" parameter was set to true. - -- The space glyph could be missing from a generated font subset if glyphs - which are not present in the font were substituted with a space, and - the subset didn't yet contain any space character. - -- Implements the "preserveoldpantonenames" parameter which preserves - old-style Pantone spot color names instead of converting them to the - equivalent new names. - -- Introduces a compile-time switch (PDF_WIN98) which allows building a - version for Windows systems without full Unicode support (Windows 95/98/ME). - This affects only the host font feature, and replaces the Unicode- - compatible font name scheme with an ASCII-only scheme. Therefore, - Japanese host font names are not supported with such a special build. - -- Images with wrong color spaces for PDF/X didn't obey the "imagewarning" - parameter or option, i.e. they always triggered an exception instead of - returning -1. - -- Ignoring embedded ICC profiles in JPEG images with the "nohonoriccprofile" - option didn't work, i.e. an ICCBased color space was generated nevertheless. - -- JPEG images with an APP2 marker other than ICC (e.g. FlashPix) could - result in damaged PDF output since JPEG markers of the embedded - thumbnail image could get confused with markers of the full image. In - particular, this affected the width and height entries, resulting in - bad pixel size entries in the generated PDF. - -- The "spot" color space for the fillcolor and strokecolor options of the - PDF_fill_*block() functions didn't work properly. - -- The PDF_fill_*block() functions didn't place the block border and background - correctly when "topdown" was true. - -- Exceptions thrown by functions which optionally return -1 in case of - failure would erroneously be logged as -1 (instead of the real exception - number) in the PDFlib trace. - -- Fixes a buglet in the pdfimage.c sample program. - -- Use internal printf() replacement for the trace feature to avoid problems - with NULL string arguments. Otherwise in rare cases the trace feature could - cause a crash in some environments, particularly with non-GCC compilers. - -- Modified generation of font name prefixes for subset fonts to ensure - identical behavior on all platforms (only relevant for comparing files, - but not relevant to users). - -- Removed inappropriate EBCDIC conversion of the Trapped DocInfo key. - -- On Windows PostScript Type 1 host fonts can be used with "iso8859-1" and - "unicode" encoding in addition to "winansi". - -- PostScript Type 1 host fonts couldn't be embedded on Windows. This situation - even resulted in an empty error message string and a bad -1 exception number. - The exception was issued within PDF_close(), and not within PDF_load_font(). - -- Works around an error message issued by Acrobat in a very rare font-related - situations. All of the following conditions must be true to trigger the - error message: - - Acrobat 6 (but not any earlier versions) - - OpenType font with PostScript outlines - - subsetting enabled - - 8-bit encoding - - character code maps to Unicode (via the font's cmap), but the CFF - table does not map the code to a glyph name, so that the font's .notdef - character (=glyph id 0) will be displayed - - To solve this PDFlib now always includes glyph id 0 for TrueType and - OpenType subsets. - -- On EBCDIC platforms the "userpassword" and "masterpassword" parameters and - option weren't properly converted to ASCII before applying them. - -- Fixed a glitch related to freeing TrueType font names on EBCDIC platforms. - - -Bindings -======== - -- C, Perl, Python, PHP - - Explicitly set the "hypertextencoding" parameter in the samples - in order to avoid problems with winansi-encoded text for PDF_set_info() - on Japanese systems. - -- C - - Changed the silent/verbose handling in the pdflibdl.c module so that - error messages can be disabled from the compiler command line by - supplying -DPDF_SILENT. - - - Reworked the DLL loading mechanism since it couldn't be used with - PDF_TRY/PDF_CATCH, and fixed a bug which went unnoticed (storing the - DLL handle in the read-only API structure). - -- C++ - - Changed the throw statements in pdflib.hpp to the stricter - PDFlib::Exception instead of Exception. - - - Added a version test to the C++ wrapper to check for the PDFlib version - loaded from an external library. This means that an external PDFlib - DLL/shared library must provide an exact match of major/minor/revision - number. Otherwise the C++ wrapper will refuse to work. - - - Fixed a wrong throw statement in the C++ wrapper. - -- COM - - Changed the GUID because functions have been removed. As a result, - applications should be re-compiled against the new version provided - early binding is used. - -- Java - - PDF_get_parameter() and PDF_get_pdi_parameter() didn't apply proper - EBCDIC processing to the returned strings. - -- Tcl - - Adds instructions on how to build a binary for Tcl 8.3 and above on - Mac OS X. This also involved a minor extension in the Tcl wrapper code. - -- Python - - The Python wrapper for PDF_create_pvf() incorrectly assumed simple strings - for the data argument instead of binary strings. - - -Build system, packaging and platforms -===================================== - -- The host encoding feature (pulling encoding via the iconv() facility - was disabled on MVS due to a glitch in the preprocessor statements. - -- Adds documentation on how to build PDFlib from source code with MS Visual - Studio .NET. This also involved a few changes in the structure of the - VS 6 project files on which the build process with VS .NET is based. - -- Minor changes for IA64/Itanium compatibility. - -- Minor tweaks for OpenVMS compatibility. - -- Fixed a few warning is libs/tiff and bind/pdflib/tcl for gcc 3.3 on - Mac OS X. - -- Reworked the build system to facilitate the use of makefiles on platforms - where the configure script is not available, such as OpenVMS, or Windows - with a command-line compiler. - -- Various minor bugfixes for EBCDIC systems. - -- "make install" didn't work with PDFlib Lite and PDFlib source code packages - on Unix systems due to a minor glitch in the main Makefile. - - - -================================= -PDFlib 5.0.2 (September 16, 2003) -================================= - -New features -============ - -- Font names can be supplied as Unicode to PDF_load_font() in the C, C++, - COM, Java, and .NET bindings. This is useful when access to localized - host fonts on Windows is required, such as on Japanese localized systems. - In the C interface the len parameter must be supplied to trigger this - new Unicode feature. - -- Extends the font machinery so that fonts with non-English names can be - found as host fonts on localized Windows systems, which is especially - useful for using Japanese host fonts on Japanese systems: Unicode font - names can be supplied in UTF-8 format with BOM to PDF_load_font() and - the second part of a HostFont configuration line. The font name will be - converted to UTF-16 LE, and host fonts with this name will be found. - This scheme also works for TTC font files. - -- Implements the "vdp/blockcount" key for PDF_get_pdi_value(). - -- Facilitates the detection of bad font options supplied by the client as - follows: when the fontstyle or monospace options in PDF_load_font() were - supplied for fonts which don't allow it, the function raised an exception - (if the fontwarning option or parameter was true), or silently ignored the - option (if fontwarning was false). In both cases it was impossible for the - client to find out the cause _and_ continue generating his PDF output, - possibly with a different font. Now PDF_load_font() returns with a -1 error - code in this situation when fontwarning is false. Thanks to the new support - for requesting message strings after a failed function call the client can - find out the reason of the failure. - -- When an API function fails with a -1 error return code the message string - containing the reason and the error number (which would be visible in an - exception if the various warning parameters are set) can now be retrieved - with PDF_get_errmsg(), PDF_get_errnum(), and PDF_get_apiname(). All - examples demonstrate how to use this feature, which results in much more - useful error messages. - -- Makes the trace feature public (parameters "trace", "tracefile", and - "tracemsg"). - -- Implements the "monospace" option for PDF_load_font() to facilitate - metrics calculations with CJK fonts for applications which do not - require sophisticated typography. - -- Re-implements "pdistrict" as a global parameter and option for PDF_open_pdi(), - PDF_open_pdi_callback(), PDF_open_pdi_page(), and PDF_process_pdi(). If - true, certain flavors of malformed PDF which may result in non-conforming - PDF output are rejected upon import. This affects only certain very rare - flavors of illegal PDF. Default is false. - - -Workarounds for Acrobat 6 problems -================================== - -- Link borders didn't display properly since optional keys in the border style - dictionary are apparently required by Acrobat 6. - - -Bug fixes and minor improvements -================================ - -- PDF_stringwidth() incorrectly took wordspacing into account even in - situations where it doesn't apply, such as unicode, glyphid, non-AGL - encodings, or subsetting. - -- The "colorize" feature didn't work for GIF images, palettized PNG, palettized - TIFF, and palettized BMP images (for images with a color palette it is only - reasonable for pure grayscale images anyway). - -- When using hypertext functions with PDFlib Lite on localized CJK Windows - systems in a non-Unicode capable language (including C, C++) resulted in - an exception "Unicode ... not supported in this configuration". - -- Allows "builtin" encoding for TrueType and OpenType fonts even if - the entries in the OS/2 table of the font are incompatible with its - cmap table. - -- Disables font subsetting for TrueType and OpenType fonts if the font has - been subset already, as determined by a "+" sign at byte 6 (zero-based) - in the font name. This is a precaution against problems with double- - subsetting fonts. - -- Fine-tuning and bugfixing in the Unicode handling: - - - UniJIS-UCS2-HW-H/V are now implemented as UCS-compatible CMaps which means - they can now be used in Unicode-capable bindings, and BOMs will be - properly processed. While PDF_stringwidth() still returns a width of 0, - the monospace, charspacing, and wordspacing options will be honored so - that the length of text can be calculated where all glyphs have a width - of 500 or 1000. - - - UTF-8 BOMs will be detected in text and hypertext strings if - [hyper]textformat = auto and hypertextencoding is not an 8-bit encoding. - - - Fixed an obscure bug in the UTF-8 string conversion code which resulted - in erroneous "illegal UTF-8 sequence" exceptions. - - - If hypertextformat = utf16* and hypertextencoding != 8-bit encoding - (i.e. empty or "unicode") hypertext strings were converted wrongly. - - - If hypertextformat = bytes and hypertextencoding = 8-bit encoding hypertext - strings were not converted into the supplied encoding at all. Hypertext - containing non-Latin-1 characters was converted wrongly. - - - In Unicode-capable bindings hypertext was converted wrongly for - hypertextencoding = 8-bit encoding if it contained Latin-1 characters. - -- The "fontname" parameter now returns the internal name of a TrueType - or OpenType host font, and not the font name supplied to PDF_load_font(). - -- The "font" and "fontsize" options of PDF_fill_textblock() could only - be provided in tandem. However, it also makes sense to provide only - a font handle in the option list, and take the fontsize property from - the block definition. - -- Improved PDF/X-3 generation for compatibility with validation tools: - - Creates the /Info key in the OutputIntents dictionary. This key is - optional according to the PDF reference, but PDF/X-3 Inspector and - Acrobat 6 Preflight apparently require it (possibly caused by the - older Adobe Technical Note 5413 which says it is required). - - The /RegistryName key was misspelled as /Registry. - -- Removed the check of the supplied PostScript font name against the one - found in the PFM or AFM file. This allows the client to use an arbitrary - alias name for a PostScript font instead of the exact internal font name, - which is often hard to determine. - -- The length of strings passed to PDF_stringwidth() is no longer limited. - -- Disallows "." and ".." as file names. - -- Fixes bugs in the coordinate handling when the "topdown" parameter was true: - - - Positive charspacing values moved characters to the left instead of to - the right. - - - PDF_fit_textline() and PDF_fit_image() could place text or images in - wrong positions for certain combinations of the "position" and "fitmethod" - options. - -- EBCDIC-conversion and sorting of destination names was carried out - in the wrong order, which may have resulted in an unsorted list on - EBCDIC platforms. - -- Silently ignore duplicate destination names supplied to PDF_add_nameddest() - instead of throwing an exception. - -- Detect and reject JPEG images with multiple scans per frame since these - are not supported in Acrobat ("missing data for an image" in Acrobat 6, - wrong colors in earlier versions). - -- Added a validity check to detect malformed UTF-16 strings, and throws an - exception for UTF-16 strings containing an odd number of characters. - -- PDFlib Lite crashed when a UCS2 CMap was supplied for one of the standard - CJK fonts. - -- PDFlib could crash when invalid syntax was supplied for a color option - in one of the PDF_fill_*block() functions. - -- PDF_arc() and PDF_arcn() generated incorrect output for certain angles - when the topdown parameter was set to true. - -- Ignores leading @ character (Windows notation for vertical fonts) when - searching for host fonts on Windows. - -- Disallows applying the "fontstyle" option to PDF core fonts. - -- Improves PDF_add_nameddest(): - - Parameter checking for the "name" parameter was missing. - - - Due to a typo writing the /Limits entry for destination names could result - in a crash, depending on the length of the first and last (alphabetically) - destination names. - -- PDI erroneously converted Unicode document info strings on EBCDIC platforms, - which could result in wrong strings returned by PDF_get_pdi_parameter(). - -- PDF_open_pdi_callback() couldn't open encrypted documents even if the - proper master password was supplied. - -- Fixed a crash which could happen in very rare situations: a TrueType or - OpenType font was loaded as a virtual file, but didn't contain the - requested font. In this case PDFlib would crash while trying to raise - an exception. This is highly unlikely to occur in real-world applications, - though. - -- On Mac OS the Carbon build of PDFlib Lite didn't link because of a missing - helper function (FSPathMakeFSSpec). - -- Improves the logic for finding the "proper" internal name of TrueType and - OpenType fonts. Previously certain Japanese fonts (like those contained in - dfjhsmw3.ttc) couldn't be processed because PDFlib expected the internal - PostScript name which is usually not known to the user. For OpenType fonts - this also fixed the bug that the /FontName key in the PDF name didn't - contain the font's PostScript name, but rather its TrueType name. However, - Acrobat accepted these font dictionaries nevertheless. - -- Using textformat utf8 could potentially result in a crash. - -- Due to a missing initialization palette entries for PNG, TIFF, or BMP images - could be wrong in rare circumstances when many similar palettes were used. - -- On Windows unknown encoding names with more than four characters have - not been rejected, but instead interpreted as the system code page. - -- Added code for detecting EFAX TIFF files (*.jfx) which have a directory - count of 0. - -- PDF_load_image() could crash with the option "reftype url" and parameter - imagetype = raw. - -- Using CID fonts on EBCDIC platforms resulted in bad PDF output because - the /Registry and /Ordering strings haven't been converted to ASCII. - -- In rare cases PDI would seek one byte beyond EOF when using the - PDF_open_pdi_callback() interface. - -- The "filename" option in "bookmarkdest" parameters and option lists didn't - get proper EBCDIC treatment. - -- The "scale" option for PDF_fit_image() and PDF_fit_pdi_page() didn't allow - negative scaling factors. - -- The left margin for PDF_continue_text() has been reset by underlined text. - -- Text positioning could be wrong (text placed at (0, 0)) when a text output - sequence was interrupted by save/restore. - -- PDI could not read PDFs with indirect objects in the OutputIntents array. - Ironically, this affected PDF/X files generated with PDFlib. - -- Some glyphs in a TrueType or OpenType font could get missing or wrong widths - in a PDF output, resulting in overlapping text or bad character spacing. - This occurred only in a very rare combination of conditions including - active font subsetting, several contiguous glyphs having a width of 0, and - some interaction with parameters of the space-saving algorithm for generating - the glyph widths array. - -- The timezone entry in the document info could be off by one minute in - some cases due to a rounding/truncation problem. - -- Kerning pairs and values were wrong for encoding "glyphid" in TrueType - and OpenType fonts. - -- Some kerning pairs in TrueType and OpenType fonts could get lost. This - happened when at least one of the kerned characters used a glyph id - which was mapped to multiple Unicode values in the font. Most importantly, - a glyph which was mapped both to space and no-break space characters - wouldn't kern. - - -Bindings -======== - -- All - - Added wrappers for the PDF_get_errmsg(), PDF_get_errnum(), and - PDF_get_apiname() functions. - -- C++ - - A systematic bug in the C++ wrapper resulted in excessive memory usage. - Although the memory was not leaked, memory requirements could be - considerably higher than in other bindings. - -- Cobol - - Adds the PDF_get_buffer() wrapper function. - -- COM - - Removed the wrappers for the deprecated functions PDF_setgray*() and - PDF_setrgbcolor*() in order to reduce the total number of API functions - in the COM wrapper. - -- .NET - - Adds an alternate DLL edition of the PDFlib .NET binding in order to - work around the .NET framework bug which thwarts use of the standard - PDFlib .NET edition with ASP.NET. - - - The reason for failed file operations (access denied, file not found, - etc.) could be wrong in an unpredictable manner due to different - implementations of the Windows GetLastError() function in managed vs. - unmanaged code. - - -Samples -======= - -- All samples in all language bindings: - Use new method of retrieving detailed error information after a PDFlib - function call failed even when no exception was thrown. - -- C samples: - - removes a few stray references to stderr. - -- C clients: pdfimpose - - Added the -v option for specifying the PDF output version number - -- C++ - - Replaced the deprecated overloaded PDFlib method open() with the standard - open_file() in the samples. - -- COM - Added exception handling to the VBS/ASP and VB samples. - - -Build system, packaging and platforms -===================================== - -- Introduces disk images (.dmg) for Mac OS. - -- Adds a configure option for building xplinked binaries on zSeries. - -- The C++ binding is enabled for PDFlib Lite by default in the configure - script. It can still be disabled by using "configure --disable-cpp" in - case of problems with the local C++ compiler. - -- Always uses config/install-sh for installing files instead of a system- - supplied install tool which may be present. - -- Adds a version for OpenVMS. - -- Adds a workaround for an incompatibility between older and newer versions - of glibc. Most prominently, the problem was present on RedHat 9 systems - which was the first Linux distribution to use the newer glibc version - by default. - -- Switches the iSeries build to Terraspace malloc to work around the 16MB - restriction of the standard malloc (requires V4R5 or above). - -- Updated the project files to CodeWarrior 8. - -- Mac OS X - Added code for dynamically loading the PDFlib shared library at runtime. - -- The grid.pdf helper file was missing from all packages. - - -=========================== -PDFlib 5.0.1 (May 27, 2003) -=========================== - -New features -============ - -- Special handling for ZapfDingbats font in block definitions: for this - font encoding "builtin" is always used. - -- Support for EUDC fonts created with Microsoft's eudcedit.exe tool (*.tte - fonts). This involved minor modifications to the TrueType name table - entry selection logic. - -- Implements the "glyphwarning" parameter which controls PDFlib's behavior - for characters which are missing from a font. - -- Additions to block processing: - - Implements block property overrides through the option lists of - all PDF_fill_*block() functions. In addition "font" can be used - to supply a font handle instead of a font name via "fontname". - - - Implements the "auto" keyword for the "fitmethod" property. - - - Implements the "fontstyle" property in PDF_fill_textblock(). - - - Implements the "fontwarning" option in PDF_fill_textblock(). - - - Implements the "imagewarning" option in PDF_fill_imageblock(). - -- Implements the new keyword "auto" for the "fitmethod" option - of PDF_fit_image(), PDF_fit_textline(), and PDF_fit_pdi_page(). - -- Implements the "color", "fontstyle", and "filename" options for the - bookmarkdest parameter. - -- Implements the "fontstyle" option in PDF_load_font() for artificial - bold and italic styles with TrueType and OpenType fonts. - -- Accepts the following spot color name suffixes in Pantone color names - for compatibility with previous versions of the Pantone libraries: - CV, CVC, CVP, CVU, CVV. - This allows for better spot color name compatibility with old applications - which implement the old Pantone names, such as Adobe Illustrator 8. - - -Bug fixes -========= - -- Two glyph IDs from the MingLiu TrueType font cannot be used. Instead of - complaining about "corrupt TrueType font" PDFlib now issues a warning, - and replaces the problematic glyphs with glyph ID 0. - -- Type 1 text fonts with a PFM file cannot be used with "builtin" encoding, - so this encoding is changed to "winansi". However, if the same font/encoding - combination is requested again later it won't be found in the cache due to - the adjusted encoding. This behavior has been changed so that the font will - now be found, instead of allocating a new font and (potentially) embedding - the same font multiply. - -- Jumping out of a page description sequence could result in a wrong error - message "Compression error (deflateEnd) ". This could be provoked in C, - but mainly affected Java clients when a Java exception was thrown by - the client, and PDF_delete() called upon cleanup. - -- Encryption didn't work properly on 64-bit architectures with 32-bit integers. - -- Due to a triple error working with default gray/RGB/CMYK color spaces - was not possible in PDF/X-3 mode: PDFlib wrongly complained about missing - default color spaces even if they were set. - -- Fixed a memory leak in PDI when a page was used multiply. - -- CID fonts (including the standard CJK fonts) generated corrupt PDF output - when encryption was used. - -- Fixed a typo in the CJK metrics data array which had nasty consequences: - - - PDF output for MSungStd-Light-Acro had two /W arrays, which may result - in wrong glyph widths. - - - PDF output for STSongStd-Light-Acro didn't include any /W array, resulting - in wrong glyph widths. - -- The "kerning" property didn't work in PDF_fill_textblock(). - -- The option list parser could erroneously complain "option Y not supported - for PDF version 1.X" although the option actually should be supported. - -- Fixed a scaling bug with multi-strip TIFF images: the scaling factors - of the first and last strip were exchanged. As a result the height of - the top-most strip was reduced, and the height of the bottom-most strip - was increased, which in turn shifted all image strips to the top. - -- Fonts contained in TrueType collection (.ttc) files didn't work as host - fonts on Windows due to a bug in a Windows GDI function (confirmed by - Microsoft). A workaround suggested by Microsoft technical support now - allows proper access of TTC fonts as host fonts. Previously these triggered - a message "Corrupt font file". - -- Fine-tuned the TrueType cmap selection logic in order to properly - process some unusual barcode fonts, and fix an obscure bug: - - - Fonts which only contained a (1, 0) (= Mac) cmap could not be used with - "glyphid" or "unicode" encoding. - - - Fonts with an empty (3, 1) (=Windows) cmap and a (1, 0) (=Mac) cmap - could not be used with "macroman" encoding. - -- The encoding entries for Type 3 fonts used the names of predefined - encodings (such as WinAnsi), which triggers a bug in Acrobat. We now - always write the encoding vector explicitly to work around the Acrobat bug. - -- The sample upr file distributed with all packages didn't list all - possible resource categories at the beginning, leading to problems - when it was extended for more category sections. - -- An incorrect exception "Corrupt TrueType font file" was thrown when - all of the following conditions were true: - - A TrueType font had a certain format 4 cmap property (idRangeOffset = 65535) - - Encoding "unicode" or "glyphid" was requested - - Character code 65535 was supplied. - -- The positioning of contents placed with any of the PDF_fill*() functions - was wrong for block PDFs with either a /Rotate key other than 0, or a - CropBox or MediaBox with an origin other than (0, 0); - -- The "pdiusebox" parameter and option were not implemented (PDI). - -- The font names for TTC fonts can be specified with space characters as - well as with hyphen characters as separators for the name parts - (e.g., "MS-Mincho" as well as "MS Mincho"). - -- PDF_stringwidth() returned the wrong widths (i.e., not the width of the - space character) for characters in a Type 1 font when both of the following - conditions were true: - - - Encoding "unicode" has been supplied to PDF_load_font(). - - - The glyph name resulting from mapping the Unicode value via AGL is - not contained in the font, or AGL does not contain any entry for this - Unicode value. - -- Fixed a bug in the timezone generation for the ModDate and CreationDate - entries which occured for rare combinations of time zone and date. - - -Bindings -======== - -- All Unicode-capable bindings: COM, Java, .NET, Tcl - - - Setting the "Trapped" document info key didn't work because of a - wrong check for allowed values. - - - Using the UniJIS-UCS2-HW-H/V CMaps resulted in a wrong error message - "Using 'UCS-2' encoding instead of 'UniJIS-UCS2-HW-V' for font" - although these CMaps are actually UCS-2 compatible. - - - Characters outside of Latin-1 did not work with show_boxed(), but were - replaced with space or .notdef characters. Since show_boxed() does not - support Unicode strings this has been cured by a new Unicode-capable - function PDF_show_boxed2() in the core. All Unicode-capable wrappers - use this new function. - - - Carriage return and linefeed characters did not work in show_boxed(). - - -- .NET - - - The "SearchPath" feature didn't work due to a dysfunctional Windows - .NET API method. - - -- PHP - - Exception strings included the error number and API name twice. - - - Synchronized ext/pdf/pdf.c with the current PHP CVS version (1.112.2.5). - - - PDF_get_value(p, "font", 0) returned an incorrect value for the font - handle because the handle adjustment code was missing. - - -Packaging -========= - -- COM and .NET installer - - Added the registry template pdflib.reg. - - -Samples -======= - -- businesscard: changed the value of the "fitmethod" option to "auto" - wich is more appropriate for this kind of application. - -- businesscard: added the "pdiwarning" option to facilitate problem analysis - when fonts are missing. - - -============================= -PDFlib 5.0.0 (March 31, 2003) -============================= - -New features, Changes, and Bug Fixes -==================================== - -- Too numerous to list here, see the manual for a list of new features - in PDFlib 5. - -- Major changes in the build environment, and a complete rework of the - source code tree. diff --git a/src/libs/pdflib/doc/pdflib/changes4.txt b/src/libs/pdflib/doc/pdflib/changes4.txt deleted file mode 100644 index abd392746d..0000000000 --- a/src/libs/pdflib/doc/pdflib/changes4.txt +++ /dev/null @@ -1,3589 +0,0 @@ -This file documents changes up to PDFlib 4.0.3. -Changes in later versions are documented in a separate file. - - -V4.0.3 (June 20, 2002) -====================== - -Bug fixes and enhancements -========================== - -- PDF_show_boxed() erroneously applied user-defined wordspacing if - another show function had been called before PDF_show_boxed(). This - could result in text running beyond the right margin of the box - (p_text.c). - -- Annotations erroneously were colored black instead of the selected - color when PDF_set_border_color() was called with (0, 0, 0) arguments - near the end of a page; similarly with PDF_set_border_style() (p_annots.c.). - -- Implemented parameter checks for negative values of linejoin - or linecap (p_gstate.c). - -- Implements a workaround for bad entries in PFM metrics files which - otherwise would result in an Acrobat error message (p_pfm.c). - -- Additions to the parameter handling (p_params.c, p_params.h): - - - Implemented the "pagewidth" and "pageheight" parameters for PDF_get_value(). - - - Implemented the "scope" parameter for PDF_get_parameter(). - - - Relaxes the scope of the currentx/currenty parameters to also include - scope path (p_params.h). - -- Implements the "colorize" parameter for GIF images. Although this - works for all GIFs it is really only meaningful for grayscale GIFs - in which the palette index equals the gray value for all elements - of the colormap (p_gif.c, p_image.c). - -- Avoids problems with duplicate spot color definitions: PDFlib didn't - catch multiple definitions of the same spot color name with different - color definitions. Now the same handle is returned for any subsequent - attempt at defining the same color name with PDF_makespotcolor() - (p_color.c). - -- Added the Acrobat 5 CJK fonts to the list of known CJK fonts (p_cid.h). - -- Finetuning in the TrueType engine (p_truetype.c, p_truetype.h): - - - Detect and properly reject Apple bitmap TrueType fonts. - - - Accept TrueType fonts with a format 65535 name table. This format is not - documented in the specs but is nevertheless used by some Apple fonts. - - - Amends the TrueType parser so that the OS/2 table is no longer required. - If it is missing the required information is pulled from other tables. - This was necessary to accommodate some Apple fonts which do not contain - any OS/2 table. Fonts with an OS/2 table but zero entries in it are - now detected and correctly handled. - - - TrueType fonts with a format 6 cmap with more than 256 entries were - incorrectly rejected. This was caused by the new cmap 6 code introduced - in PDFlib 4.0.2 which incorrectly assumed that cmaps with format 6 - never contain more than 256 entries. Previously this kind of cmaps - wasn't read at all (p_truetype.c, p_truetype.h). - - - Fixed a memory leak in the TrueType handling. This bug has actually - already been fixed before the 4.0.2 release, but the entry was omitted - from the change log (p_truetype.c). - -- Avoids the Acrobat message "Unable to find or create the font. Some - characters may not display or print correctly" for fonts which are - not embedded and use macroman or ebcdic encoding (p_font.c). - -- 1-bit uncompressed TIFF images with PHOTOMETRIC_MINISWHITE - erroneously got inverted (bug introduced in PDFlib 4.0.2 with - the compression fix for uncompressed TIFF images). - -- TIFF images which didn't contain the required StripByteCounts Tag could - provoke an out-of-memory situation. This was caused by a bug in TIFFlib - which failed to calculate the proper file size in an attempt at - estimating the missing StripByteCounts value (tiff/tif_unix.c). - -- Fixed a few bugs on EBCDIC platforms: - - spot color names were treated incorrectly (p_color.c). - - - Added several EBCDIC conversions for hypertext items as a convenience - for EBCDIC developers (p_annots.c). - - - Added EBCDIC conversion of fileref and url for PDF_open_image() - (p_image.c). - -- Fixed a problem with spot colors: setting "both" colors or "stroke" - color to the same as the current "fill" color didn't actually - generate the required color values due to some bad optimization (p_color.c). - -- The value of the /Subtype key for embedded files (PDF_attach_file()) - had been written as a string instead of as a quoted name. This went - unnoticed because Acrobat doesn't actually use this value (p_annots.c). - -- Slightly modified the zlib sources to improve portability (flate/*). - -- Fixed a bug related to custom memory management functions in TIFFlib. - This bug resulted in a crash when PDFlib was used with PHP on OS X - and possibly other environments, too (tiff/tif_open.c). - -- The tests for the values of CropBox and the other *Box entries were - too strict, and allowed only positive values (p_params.c). - -- Rewrites the code for setting the Mac file type and creator to be Carbon- - compatible, and enables it under OS X (p_basic.c). - -- Adds support for Mac-style resource-based PostScript Type 1 fonts, - also known as LWFN fonts (p_font.c). - -- Adds host font support on the Mac using the Carbon API, currently - only for TrueType and OpenType fonts (p_font.c). - -- URLs and filenames used in PDF_add_weblink(), PDF_add_launchlink(), - PDF_add_pdflink(), and PDF_attach_file() didn't get quoted correctly. - This could result in bad PDF output in rare occassions, e.g., when - unbalanced parentheses occurred in an URL (p_annots.c). - -- 13 #defines for renaming PNG functions were missing, which resulted - in an incompatibility when PDFlib was linked against a program which - another instance of libpng, version 1.2.1 (png/pngconf.h). - -- PDF_add_pdflink() generated wrong output for the destination page - (a local object reference instead of a page number). This resulted - in incorrect PDF output (which Acrobat happily digested nevertheless), - and the target PDF always being opened on the first page (p_annots.c). - -- PDF_add_pdflink(), PDF_add_launchlink(), and PDF_attach_file() resulted - in a file specification with the wrong /FileSpec key instead of /Filespec. - This went undetected for a long time since Acrobat accepts both flavors, - although only /Filespec is correct according to the reference (p_annots.c). - - -Bindings -======== - -- C: - - Introduces auxiliary functions and modules for using PDFlib as a DLL, - and loading it dynamically at runtime (explicit linkage): - - PDF_get_api() function for retrieving function pointers (pdflib.h, - p_basic.c). - - - A module for loading the PDFlib DLL at runtime, and retrieving - API function pointers in a structure (bind/c/pdflibdl.c/h). - -- Java: - - Searches for JDK 1.4 (configure.in). - - - Removes the EBCDIC conversion of Unicode strings supplied by the - client (pdflib_java.c). - - - p.add_note with Unicode contents resulted in a core dump due to a - missing conditional in GetStringUnicodePDFChars() (pdflib_java.c). - - - No longer exit() if the PDFlib DLL cannot be loaded, but rethrow - the UnsatisfiedLinkError. In addition, the value of the java.library.path - property is printed (pdflib.java). - - - Finetunes the Java context pointer and cleanup machinery (pdflib.java, - pdflib_java.c): - - - Calling the delete() method multiply resulted in a crash. - - - Now it is allowed to call delete() multiply. - - - Attempting to call methods other than delete() after a call to delete() - will raise an exception. - - - Increased the supported maximum number of Java threads on the AS/400. - - - The wrapper functions for get_buffer() and setpolydash() crashed - on the AS/400 because a required macro was missing (pdflib_java.c). - - - The wrapper function for get_parameter() was missing a call to - ReleaseStringPDFChars() (pdflib_java.c). - -- PHP: - - PDF_open_image() didn't work with a "memory" parameter (pdf.c). - - - Minor modifications for PHP 4.2 (pdf.c). - - - PDF_get_value() and PDF_get_parameter() can be called without a PDF - object for the parameters minor/major/revision/version/pdi (pdf.c). - - -Build process and platform support -================================== - -- Fixes a bug which resulted in garbage data being read for certain - data files (fonts and images) (p_config.h, p_util.c). - -- Fixed a buglet related to installing pdflib-config to a non-existing - bin directory (Makefile.in). - -- Fine-tuned the #defines for MVS and OS390 (png/pngconf.h, p_intern.h, - p_config.h, p_util.c, p_font.c). - -- Renamed tiff/tif_aux.c for better compatibility with our internal - processes for MVS (tiff/tif_auxx.c). - -- Added support for building PDFlib as a shared library on the Mac (pdflib.h). - -- The configure script didn't work on Mac OS X (configure.in) - -- Added "all" targets to the CodeWarrior project files (*.mcp). - -- The CodeWarrior test project file contained a few wrong output paths for - the Mac projects (PDFlib-test.mcp). - -- Changed all CodeWarrior Mac targets to use the Carbon library. This - is mainly useful for the Mac host font feature, and will ease the - transition to CW 7 (*.mcp). - -- Reworked the handling of platform-specific preprocessor symbols on the Mac. - - -V4.0.2 (February 01, 2002) -========================== - -Bug fixes and enhancements -========================== - -- The color of attachment icons wasn't written to the output file. This - was especially evident in Acrobat 5 since the default color has been - changed from blue to gray (p_annots.c). - -- Long link targets with the functions PDF_add_pdflink, PDF_add_launchlink(), - PDF_add_weblink(), and PDF_attach_file() could result in a buffer overflow - due to incorrect use of pdf_printf() (p_annots.c). - -- Added special handling for the /Trapped info key (p_hyper.c). - -- Improves CMap support (p_cid.h): - - - Adds several new CMaps for use with Acrobat 5 (GBKp-EUC-H/V, GBK2K-H/V, - HKscs-B5-H/V). - - - Introduces PDF version checking for CMaps since not all CMaps - are supported in all Acrobat versions. - -- Adds an MD5 digest for the /ID string in the PDF output (p_md5.h, p_md5.c). - -- The resolution values returned for PNG images were wrong, since PDFlib - failed to convert the values returned by libpng from pixels per meter - to pixels per inch. Similarly, aspect ratios weren't returned correctly - for PNG images (p_png.c). - -- CCITT-compressed images could result in bad PDF output on big-endian - machines due to a missing cast. The problem did not affect page display - in Acrobat, but PostScript printing (p_image.c). - -- Resets all graphics state parameters to their default values before - placing templates if the new "inheritgstate" parameter is set to - "false". Note: this will be the dafault behavior in future versions - (p_image.c, p_gstate.c). - -- Optimizes content streams by eliminating redundant graphic state - parameters. Setting a parameter to its current value is now a no-op - (p_gstate.c, p_color.c). - -- Relaxes the scope of PDF_makespotcolor() and PDF_setcolor() to also - include document scope (p_color.c, p_basic.c). - -- Fine-tunes transparency and image masking support (p_image.c, p_tiff.c, - p_jpeg.c, p_png.c, p_color.c): - - - Implements the "colorize" parameter for images. - - - Supports the "mask" parameter for TIFF images. - - - Implements the placing of images which have been opened with the - "mask" parameter (as opposed to using them as a mask for another - image). The image will have the current fill color applied to it. - -- Add the /Type key for form XObjects. This key is optional according to - the PDF reference, but is actually required by some brain-damaged - PDF-capable RIPs (p_template.c). - -- PFM processing (p_pfm.c): - - The PFM reader accepts PFM files with a bad length entry in the - header since such files actually exist. - - - The name of the offending file is included in the error message when - a bad PFM file is rejected. - -- Removed a redundant comment line with a superfluous version number - which was written to the PDF output in PDF 1.4. compatibility mode - (p_basic.c). - -- Implements and documents strict scope checking for all parameters - (p_params.h). - -- In rare cases pdf_printf() could produce "-0" output for very small - negative values, which didn't cause any harm but was redundant (p_stream.c). - -- Enhancements in the code page tables (fonts/*): - - - Removed some garbage at the end of code page 1252. Accidentally winansi - encoding has been suffixed to the 1252 codepage file, but this data - has been ignored anyway (fonts/cp1252.cpg). - - - Adds code page definitions for ISO 8859-13, -14, and -16. Note that - ISO 8859-14 doesn't completely work in Acrobat since it uses characters - outside the Adobe Glyph List AGL (iso8859-13.cpg etc.). - - - Changes positions 0xA1 and 0xA2 in the ISO 8859-7 code page to the - correct left and right quotation characters (iso8859-7.cpg). - - - Changes position 0xF0 in ISO 8859-2 code page from U+00F0 = eth to - U+0111 = dcroat (iso8859-2.cpg, iso8859-2.enc). - - - Adds U+200E and U+200F at positions 0xFD and 0xFE in the ISO 8859-8 - code page (iso5589-8.cpg). - -- Reads resolution information from JPEG images generated by Adobe Photoshop - (p_jpeg.c). - -- Changes and improvements in TrueType/OpenType handling (p_truetype.c): - - - Accepts fonts where the names[6] entry in the name table is missing, - and substitutes names[4] instead. - - - Supports OpenType fonts with PostScript outlines (OTF, aka CFF fonts). - - - Supports cmap table format 6 which is used for the Mac encoding of - Adobe OpenType fonts. - - - The quoting functions for PDF names didn't correctly quote the special - characters (, ), /, <, >, [, ], {, }, %, and #, which may occur as part - of spot color names or (in rather obscure cases) as part of TrueType font - names (p_util.c). - -- Changes and bug fixes in the text engine (p_text.c): - - - Fine-tunes the behavior of PDF_stringwidth() (p_text.c): - - - Increased the number of encodings which can be used simultaneously - in PDFlib in order to facilitate testing (p_intern.h). - - - Extends the scope of PDF_stringwidth() to path and document. - - - Includes the last character's charspacing amount in the calculation - of the complete stringwidth. - - - Removes the projected text rise adjustment from the stringwidth - calculation, since it only affects the position of the rendered - text, not its length. - - - The textrise, horizscaling, charspacing, and wordspacing can now - be set in document scope, and will be reset at the end of pages. - - - PDF_show_xy(p, text, 0, 0) didn't work if the previous text position - was different from (0, 0). - - - PDF_show2() didn't correctly implement overline mode. - - - Fixed a bug in PDF_show_boxed() where initial characters could get - lost (p_text.c). - - - Fixed a bug in PDF_show_boxed() which could result in an exception - with the message "floating point value too large in pdf_ftoa" (p_text.c). - - - Implements an unsupported PDF_encoding_get_char() function for - querying glyph names from an encoding vector (p_font.c, pdflib.h). - -- Changes and improvements in the TIFF engine (p_tiff.c): - - - Uncompressed TIFF images have been passed through directly without any - compression applied, resulting in output file bloat. - - - Fixed a bug in the TIFF code which resulted in illegal memory access. - The bug was triggered by uncompressed CMYK TIFF images. - -- Eliminates some informational messages which zlib emitted in debug - mode (flate/zutil.h). - -- Allows PDF_get_parameter() and PDF_get_value() to be called with a NULL - argument for the PDF *. Affected parameters are "major", "minor", - "revision" (for PDF_get_value()) and "version", "pdi" (for - PDF_get_parameter()) (p_params.c). - - -Build process and platform support -================================== - -- Updates the CodeWarrior project files to CW 6 (*.mcp). - -- Minor configuration changes for Mac OS X 10.1 (config/aclocal.m4). - -- Switches to libtool 1.4 (config/*). - -- Modifies type names in the TIFF library in order to avoid non-ANSI C - problems on some platforms (tiff/*.c, tiff/*.h). - -- Improved support for building PDFlib on AIX. - -- More MVS modifications (*.c). - -- Changes for Windows CE compatibility. - - -Documentation -============= - -- Enhances the PDFlib manual with the help of the FrameMaker-to-Acrobat - TimeSavers (see www.microtype.com): - - - Fixes several broken links at the end of the manual. - - - Reduces file size be several hundred KB due to eliminated named dests. - - - Open document with first-level bookmarks expanded for better overview. - - - Highlight first-level bookmarks with bold text (visible only in Acrobat 5). - -- Introduces a separate manual edition for IBM eServer iSeries and - zSeries (PDFlib-manual-ibm.pdf). - - -Bindings -======== - -- C++: - - Renames the PDF class to PDFlib. This is transparent to clients since - a mapping is provided through preprocessor macros (pdflib.hpp). - - - Implements a new scheme for exception handling which is more suitable - for use with C++ than the previous scheme which was still based on a - user-supplied errorhandler callback function. For compatibility reasons - the old scheme is still the default, and the new one can be activated - by #defining PDF_THROWS_CPP_EXCEPTIONS (pdflib.cpp, pdflib.hpp, - except.h, except.c). - -- Java: - - Added "@deprecated" Javadoc comments to the the setgray* and setrgbcolor* - functions (pdflib.java). - - - Added JSP and servlet versions of all standard examples (jsp/*, - servlet/*). - - - Removed obsolete declarations for the following native functions from the - Java interface file (pdflib.java): - PDF_get_image_width, PDF_get_image_height - - - Removed the following functions from the C wrapper, and maps them to - the new PDF_color() interface in the Java interface file (pdflib.java, - pdflib_java.c): - - PDF_setgray_fill - PDF_setgray_stroke - PDF_setgray - PDF_setrgbcolor_fill - PDF_setrgbcolor_stroke - PDF_setrgbcolor - - - Out-of-memory situations in PDF_new() could result in a crash, caused - by a bug in the Java wrapper (pdflib_java.c). - - - Exposes the delete() method which may be useful to explicitly free - PDFlib resources in case the GC fails to call the supplied finalizer - (pdflib.java). - - - Fixes a bug in the Unicode handling of the Java wrapper which could - cause characters to get lost when native Chinese or Japanese - encodings were used for the Java source (pdflib_java.c). - -- Perl: - - Removed the "unknown" entry in the Perl version string since the - respective version #define is no longer available in Perl >= 5.6 - (pdflib_pl.c). - -- PHP: - - Supports PHP 4.1.x - - - Major rewrite of the PHP build and support machinery: - - new mega build script for PHP modules for internal use (buildphp.pl). - - added several support files (bind/php/ext/pdf/*) - - removed several unneeded files (*.mk, *.stub) - - - PDF_get_value() didn't work correctly for the capheight, ascender, and - descender parameters because the wrapper code failed to adjust the - supplied font handle by PDFLIB_FONT_OFFSET (pdf.c). - - - Synchronizes the wrapper code with the PHP CVS version (ext/pdf/pdf.c): - - added PDFlib 3 compatibility (imagewarning parameter) - - several enhancements for the PHP build process - - comments for vi folding - - added warning_undef_function for unsupported functions - -- RPG: - - Fine-tunes the RPG binding. - - -V4.0.1 (May 18, 2001) -===================== - -Bug fixes and enhancements -========================== - -- Removed the time-bomb feature of the beta versions which accidentally - was still present in the release version of PDFlib 4.0.0 (p_basic.c). - -- PDF_show_boxed() erroneously returned the value 1 if the text completely - fit in the box, and the last character was a newline (p_text.c). - -- Fixed a bug in the image mask handling which had some interaction with - the total number of images, and the fact whether or not images had - been closed and therefore image handles reused (p_image.c). - -- Non-interlaced PNG images were erroneously rejected when used as a - mask (p_image.c). - -- Individual strips of separate multi-strip TIFF images could get mixed - up under certain circumstances when the first image had already been - closed before placing subsequent images (p_image.c, p_image.h, p_intern.h, - p_basic.c). - -- The values of ascender and descender were wrong for TrueType fonts since - we picked tab_hhea->ascender instead of tab_OS_2->sTypoAscender - (p_truetype.c). - -- The scope check in PDF_stringwidth2() was too strict (p_text.c). - -- /FontName was garbled on EBCDIC platforms, but it's unused anyway (p_font.c). - -- Due to a bug in pdf_make_quoted_name() quoted characters in spot color names - could appear with wrong hex codes (p_util.c). - -- Creating and deleting a PDFlib object without any documents created - resulted in a wrong exception (p_stream.c) - -- Implements host encoding support for AS/400 and S/390 (p_util.c, p_font.c, - p_intern.h) - -- Using a CID font caused a crash due to inappropriately freeing static strings - (p_cid.h) - -- EBCDIC and CID encoding were rejected in PDF_show_boxed() even when no box - justification was requested (width=0 and height=0) (p_text.c). - - -Build process and platform support -================================== - -- Minor modifications for AIX compatibility (configure.in, tiff/tiff.h). - -- AS/400 fine-tuning (p_config.h, several *.c). - -- Fixed MVS-related macros (p_config.h) - -- Removed unnecessary PHP make targets which caused an error (Makefile.in, - configure.in) - - -Bindings -======== - -- C: - - Replaced the deprecated function setrgbcolor() with PDF_setcolor() - in the pdfclock sample. - -- C++: - - Replaced the deprecated function setrgbcolor() with PDF_setcolor() - in the pdfclock sample. - -- Java: - - Replaced the deprecated function setrgbcolor() with PDF_setcolor() - in the pdfclock sample. - - - A few mainframe-related fixes in the wrapper code (pdflib_java.c). - - - Clear pending exceptions if any of the JNI functions in the initialization - fails since JNI doesn't allow more than one pending exception. - (pdflib_java.c). - - - Makes the private functions PDF_new() and PDF_delete() in the PDFlib - Java object synchronized (pdflib.java). - - - Modified the internal version of the Java wrapper for use on the - AS/400 (pdflib_java.c). - -- Perl: - - Replaced the deprecated function PDF_setrgbcolor() with PDF_setcolor(). - in the pdfclock sample. - -- PHP: - - Replaced the deprecated function PDF_setrgbcolor() with PDF_setcolor(). - in the pdfclock sample. - - - A required image handle conversion was missing in the wrapper code for - PDF_open_image_file(), resulting in erroneous error messages when - trying to mask images (pdf.c). - -- Python: - - Replaced the deprecated function PDF_setrgbcolor() with PDF_setcolor(). - in the pdfclock sample. - -- Tcl: - - Replaced the deprecated function PDF_setrgbcolor() with PDF_setcolor(). - in the pdfclock sample. - -- RPG - - Introduced a new binding for ILE-RPG on the AS/400 (bind/rpg/*). - - -V4.0.0 (April 18, 2001) -======================= - -Bug fixes and enhancements -========================== - -- Implements a check in PDF_delete() in order to make sure that the caller - acutally fetched the last chunk of PDF data via PDF_get_buffer() - (p_intern.h, p_basic.c, p_stream.c). - -- Several modifications in the TrueType module (p_truetype.c): - - Allow TrueType symbol fonts (such as Webdings and Wingdings) to be used - with "builtin" encoding. - - - When font warnings are enabled (default) issue a concise error message - when a TrueType font file can't be opened or read, or is empty. - - - The TrueType module didn't always correctly distinguish between - exception and error return when a problem with a font was detected. - -- Fine-tuned the trace debug facility (several *.c). - -- Optimize the underline/overline/strikeout functions for empty text - strings (p_text.c). - -- PDF_continue_text2() didn't correctly deal with a NULL text argument - under certain conditions, and failed to enter a text block and set - the text parameters (p_text.c). - -- Throw an exception in PDF_show_boxed() if the current font uses CID - or EBCDIC encoding (p_text.c). - -- Change the scope back to object if fopen() fails in PDF_open_file(). - This guards against clients which fail to check the return value of - PDF_open_file() (p_basic.c). - -- PDF_open_image() didn't set the use_raw flag for JPEG- and CCITT- - compressed images, resulting in bad output filters (p_image.c). - -- Implements hooks for fetching encoding definitions from the host system - (p_font.c, p_util.c). - -- Modifies the error handling machinery so that the error handler is never - called with a NULL PDF pointer, even when the initial PDF allocation in - PDF_new2() goes wrong. This way error handlers installed by the client - are guaranteed to have access to thread- or object-specific data in all - cases (p_basic.c). - - -Build process and platform support -================================== - -- Adjusts more language bindings to Mac OS X (see below). - -- Disable the PHP binding if an external library was configured (configure.in). - -- Moves an inherited LDFLAGS variable to the front of EXTERNALLIBS in order - to make external -L paths work (configure.in). - -- Installs the pdflib-config script to make it more useful (Makefile.in). - -- Extends the pdflib-config script to include auxiliary information such - as PDFlib's install path, binding information, PDI existence, and a summary - (pdflib-config.in). - -- AS/400 portability mods and support for more compile-time code pages - (p_stream.c, p_config.h). - -- More MVS portability fixes (p_config.h tiff/port.h). - -- Change the libtool version number to 2:0:1 in order to somehow fix the bug - in 3.03 which incorrectly increased the age entry (configure.in). - - -Bindings -======== - -- Perl: - - Always call PDF_delete() in the error handler since the PDF pointer is now - guaranteed to be different from NULL (pdflib_pl.c). - - - Removed -lm for $PERLLINK on HP-UX (configure.in). - -- PHP: - - Cleans up the configure machinery which no longer must check for the - presence of any auxiliary library (config.m4). - -- Python: - - Always call PDF_delete() in the error handler since the PDF pointer is now - guaranteed to be different from NULL (pdflib_py.c). - - - Introduces a hack for renaming the Python wrapper library on Mac OS X from - libpdflib_py.dylib to pdflib_py.so(!), which apparently is what Python - expects (Makefile.in). - -- Tcl: - - Removed the pkgIndex.tcl Makefile target and rule because we no longer - must build the index file dynamically (Makefile.in). - - - Introduces a hack for renaming the Tcl wrapper library on Mac OS X from - libpdflib_tcl.dylib to pdflib_tcl.dylib (Makefile.in). - - - -V4.0.0beta3 quick fix (April 9, 2001) -===================================== - -Bug fixes and enhancements -========================== - -- Add /Matrix and /FormType entries to the form xobjects dictionary. - Although these are not required according to the PDF reference (new edition), - they _are_ required according to the PDF reference (old edition) and -- more - importantly -- by several PDF consumers such as Ghostscript, some - Adobe RIPs, and the PostScript output of Acrobat 4.0 (but not 4.05). - (p_template.c, pdi.c). - - - -V4.0.0beta3 (April 5, 2001) -=========================== - -Bug fixes and enhancements -========================== - -- Consistently use the Windows API name for TrueType fonts, regardless of - whether they have been read from file or retrieved from the host system - (p_truetype.c). - -- TrueType symbol fonts couldn't be used (p_truetype.c). - -- Implements support for flate-compressed TIFF images (p_tiff.c, tiff/*.c). - -- Start a new text block when a font set if we are not currently in a text - block. This seems to be required by some Adobe RIPs and some third-party - PDF consumers, although explicitly allowed in the PDF reference (p_font.c). - -- Throws an exception when the PDF document is empty (p_basic.c). - -- Fixed a memory overwrite in XObjects handling (p_image.c). - -- Fixed several memory leaks in the PNG module, and dropped support - for libpng versions older than 0.88 (p_png.c). - -- Changes the PNG handler so that we can process simple PNG images even - without libpng attached (p_png.c). - -- Resources were dropped between documents, meaning that for example - fonts had to be configured again and again for multiple output documents - with the same PDFlib instance (p_basic.c). - -- Reworked parameter handling, and introduced a new table for important - parameter properties such as the scope (p_params.c, p_params.h). - -- Updated the utility for converting font metrics to a C header file - (util/compile_metrics.c). - -- Regenerated the built-in metrics for the core fonts with the following - changes (p_metrics.h): - - Uses the new Adobe AFMs as input which have minor changes. - - Correctly use the width of the space character for all undefined - characters instead of the fixed value 250. - - Uses the current encoding definitions, which had a few updates. - - Generate more tense output. - -- Modified the getopt() stuff for easier building the demo clients on - Windows (clients/*.c). - -- Fixed a memory leak in the GIF reader when the requested file couldn't - be opened (p_gif.c). - -- Fixed memory leaks in the font engine, related to TrueType fonts and - the builtin core fonts (p_font.c, p_truetype.c). - -- The default for floating point output accuracy (3) was too small, - as evidenced by the pdfclock example. Increased to 4 (p_basic.c). - -- Fixed a nasty bug in pdf_compress_init(): due to missing initialization - importing PDF pages on an otherwise empty page could result in a crash - on some platforms (p_stream.c). - - -Build process and platform support -================================== - -- Changes a few details for better MVS support. - -- Updates the Mac project files including support for the language - bindings (*.mcp). - -- Updated the project files for Borland C++ Builder (*.brp, *.bpf). - -- Consolidated the predefined encodings into a single header file - (p_encoding.h). - -- Improved portability in code and build process for a number of Unix - platforms. - -- Replaced the GIF test image with a new one (test/machine.gif). - -- Statically links all C samples and demo programs (*/Makefile.in, - configure.in). - - -Bindings -======== - -- C: - - Changes all clients to return 0 from the main program (*.c). - - - Runs the tests without libtool since we link statically (Makefile.in). - -- C++: - - Adds typedefs to support the notion that all functions which are - passed to PDFlib must be pure C (as opposed to C++) functions (pdflib.h, - pdflib.hpp, pdflib.cpp). - - - Runs the tests without libtool since we link statically (Makefile.in). - - - Drops support for the Watcom compiler (pdflib.hpp, pdflib.cpp). - - - Changes namespace handling for non-gcc compilers (configure.in). - - - Adds casts to pacify the Sun compiler (image.cpp, personalize.cpp). - -- Java: - - Adds a hack for Mac OS X to help the test and install process run even - though OS X has its own idea of JNI library naming conventions - (Makefile.in). - -- Perl: - - Runs the tests without libtool since we supply -I options (Makefile.in). - - - Adds -lm (or equivalent) to the list of libraries against which the - Perl wrapper is linked. This is required, for example, for some builds - of Perl on Solaris (configure.in). - -- PHP: - - Fixed a crash which was caused by a typo in the PDI memory functions. - - - Adds documentation on the PHP/PDFlib build process (readme.txt). - -- Python: - - Fixes a systematic bug in all wrappers for the new 4.0 functions - (pdflib_py.c, pdflib/pdflib.i). - - - Adds PDI examples (personalize.py, quickreference.py). - -- Tcl: - - Renames the Tcl/PDFlib wrapper library on the Mac to pdflib_tcl.shlb, - which is the name returned by Tcl's [info sharedlibextension] command - (*.mcp). - - -V4.0.0 beta2 (March 23, 2001) -============================= - -Bug fixes and enhancements -========================== - -- Removes all attempts to "repair" the file if API calls are incomplete, - or in bad order. This greatly simplifies cleanup in case of errors. - -- Fully implements a scoping system which enforces the scoping rules - documented in the manual. This may break clients which do not adhere - to the scoping rules, but got away with the old implementation, - potentially producing bad PDF output (pdflib/*.c, p_intern.h). - -- The "imagewidth" and "imageheight" parameters are now supported for - templates, too (p_template.c). - -- Implements custom memory handlers for libpng and tifflib (png/pngmem.c, - pdflib/p_png.c, pdflib/p_tiff.c). - -- Relaxed the encoding check for AFM files since so many AFM files - out there are just plain wrong (mostly those generated by Fontographer - (p_afm.c). - -- Improves the Unicode bookmark samples so that they work correctly on - EBCDIC platforms (pdftest.c). - -- Implements pdf_vsprintf() which does the "right thing" for all kinds - of formatted PDF output. In addition, we finally get rid of cursed NLS - (pdflib/*.c, pdi/*.c). - -- Moved the PDI dummy functions to p_template.c, and removed p_pdi.c from - the distribution fileset. - -- Delays resource cleanup until PDF_delete() (instead of PDF_close()) in - order to keep configuration information across PDF output documents - (p_basic.c). - -- Implements a real tree structure for the /Pages tree instead of a linear - array. This greatly improves Acrobat's performance when navigating - _very_ large documents (p_basic.c, p_intern.h). - -- Fixes a problem related to TrueType font names which resulted in - bad font cache misses due to internal name mismatches. We cured this - by storing the PostScript name of a TrueType font separately (name - table entry 6. The fullName field is used for this since fullName was - unused anyway (p_font.h, p_font.c, p_truetype.c, p_afm.c, p_pfm.c, - p_metrics.h, util/compile_metrics.c). - -- pdflib.upr was loaded to early. This especially affected host fonts - where no upr file is required, but an exception was thrown nevertheless - (p_util.c). - -- Added "CharacterSet" to the list of recognized AFM keywords (p_afm.c). - -- Modifies the TrueType parser to gracefully deal with Unicode-based - Mac fonts, although these are not yet supported (p_truetype.c). - -- Replaces the core 14 AFM files with newer versions which cover the - ExtendedRoman character set (315 instead of 229 glyphs), and are therefore - better suited for PDFlib's powerful encoding machinery (fonts/*.afm). - -- Changed the accuracy of imagewidth and imageheight from int to float - to account for imported PDF pages and templates (p_image.h, p_tiff.c, - p_ccitt.c, p_jpeg.c, p_gif.c, p_image.c, p_template.c). - - -Build process and platform support -================================== - -- Supports local (uninstalled) static versions of the auxiliary libraries - via the LDFLAGS environment variable (configure.in). - -- A variety of portability fixes in the auxiliary libraries (tiff/*, - png/*, flate/*) plus a few more in PDFlib (pdflib/*). - -- Modifies the MSVC++ project files for the new library structure (*.dsw, - *.dsp). - -- Brings the CodeWarrior project file for Mac up to date (PDFlib.mcp). - -- Several bug fixes and improvements in the configure machinery - (configure.in, pdflib-config.in, */Makefile.in). - - -Bindings -======== - -Java: - - show_boxed didn't correctly retrieve its text argument as a - Unicode string, resulting in wrong output for non-Latin-1 characters - (pdflib_java.c). - - - stringwidth() didn't retrieve its text argument as a Unicode string - (pdflib_java.c). - -Tcl: - - Fully implements the use of Tcl's stub feature which allows us to - use a single library with different Tcl versions (pdflib_tcl.c). - - - Modifies the index file so that it no longer requires the library - name and the list of function names (pkgIndex.tcl). - - - PDF_show_boxed didn't correctly retrieve its text argument as a - Unicode string, resulting in wrong output for non-ASCII characters - (pdflib_tcl.c). - - - PDF_stringwidth() didn't retrieve its text argument as a Unicode string - (pdflib_tcl.c). - - -V4.0.0 beta1 (March 02, 2001) -============================= - -New features -============ - -- Implements support for the pattern color space (p_pattern.c, p_intern.h, - p_basic.c, pdflib.h). - -- Adds support for spot color (p_color.c, p_intern.h, pdflib.h). - -- Adds a hook for attaching the PDF import library PDI (p_pdi.c). - -- Adds Unicode handling for TrueType and PostScript fonts (p_unicode.c, - p_font.c, p_truetype.c). - -- Implements new parameters: - major/minor/revision/version - pdi - pdiwarning - CropBox/llx/lly/urx/ury - BleedBox/llx/lly/urx/ury - TrimBox/llx/lly/urx/ury - ArtBox/llx/lly/urx/ury - - -Bug fixes and enhancements -========================== - -- Major restructuring in order to better localize data types and - related functions (most *.c and *.h). - -- Fixed a bug in the MacRoman encoding table: guilsinglleft and guilsinglright - had a letter missing in their name. Since we never write MacRomanEncoding - explicitly, the characters were available, but their widths were retrieved - wrongly from an AFM file (e_macroman.h). - -- Added the missing Euro glyph to the cp1250 encoding table (cp1250.enc). - - -Build process and platform support -================================== - -- Changes the library file name suffix for Mac OS X server (Rhapsody) - from .so to .dylib (config/ltconfig). - -- Integrated zlib into the PDFlib distribution, configure, and make process, - including a libtool-based Makefile. Similarly for parts of libpng and - libtiff (configure.in, */Makefile.in, tiff/*, png/*, flate/*). - -- The search for Python's shared lib path could result in multi-line - output under certain circumstances. We work around this with more - sophisticated filtering of Python's sys.path, contributed by a user - (configure.in). - - -Distribution -============ - -- Adds the Lucidux Sans PostScript font as a sample (fonts/lcdxsr.*). - -- Adds code page definitions for all ISO 8859 flavors and Windows 125X - code pages (fonts/*.cpg). - -- Adds a PDI demo client in C (pdfimpose.c), and the quick reference - and personalize demos for all supported language bindings. - -- Adds a few user-contributed improvements to the image client (pdfimage.c). - -- Removes config/pdflib.m4 since it is no longer required. - - -Bindings -======== - -PHP: - - Adds a supported language binding for PHP (bind/php/*). - -Java: - - Introduces PDF_VOLATILE in order to prevent scores of compiler - warnings when building the wrapper (pdflib_java.c). - -Perl: - - Introduces PDF_VOLATILE in order to prevent scores of compiler - warnings when building the wrapper (pdflib_pl.c). - -Python: - - Introduces PDF_VOLATILE in order to prevent scores of compiler - warnings when building the wrapper (pdflib_py.c). - -Tcl: - - Implements an initialization function to make the PDFlib extension - work with safe builds of the Tcl interpreter (pdflib_tcl.c). - - - Introduces PDF_VOLATILE in order to prevent scores of compiler - warnings when building the wrapper (pdflib_tcl.c). - - -V3.5.0 (February 01, 2001) -========================== - -This version has only been released to a few customers. - - -New features -============ - -- Makes the CMYK functions supported API members (p_color.c). - -- Makes PDF_arcn() a supported API function (p_draw.c). - -- Makes PDF_add_thumbnail() a supported API function (p_draw.c). - -- Implements the template feature (p_image.c, p_template.c, p_intern.h, - p_basic.c, p_text.c, pdflib.h, Makefile.in). - -- Implements TrueType font support (p_font.c, p_afm.c, p_pfm.c, p_font.h, - p_util.c, p_basic.c, p_truetype.c, p_truetype.h, p_intern.h, p_cid.h, - p_metrics.h, Makefile.in). - - -Bug fixes and enhancements -========================== - -- PDF_open_mem() didn't work due to a typo (p_basic.c). - -- PDF_set_parameter(p, "flush", "none") didn't work due to a typo (p_basic.c). - - -Build process, distribution, and platform support -================================================= - -- Improvements for Mac OS X: - - Makes libtool generate shared libraries (.dylib) on Mac OS X (ltconfig, - ltmain.sh). - - -Distribution -============ - -- Introduces the new major.minor.revision version numbering scheme - (many files). - - -Bindings -======== - -Java: - - Makes the Java wrapper compatible with Mac OS X (pdflib_java.c). - - -Tcl: - - Configure now finds the Tcl header on Mac OS X (configure.in). - - -V3.03 (December 22, 2000) -========================= - -Bug fixes and enhancements -========================== - -- Contrary to the documentation, a == sequence in the UPR file didn't - guarantee absolute file names (no directory prefix applied) if a - prefix has been set using PDF_set_parameter(). This especially affected - the ActiveX edition where the wrapper always set a prefix, and - absolute resource names couldn't effecitvely be used. Similarly, - the "==" syntax now works with when resources are set dynamically via - PDF_set_parameter(). (p_util.c, p_basic.c). - -- Makes the JPEG reader more robust against damaged files (p_jpeg.c). - -- Implements an option in the image converter for printing details - for damaged image files (clients/pdfimage.c). - -- Implements PDF_get_value() for the following parameters: - leading, textrise, horizscaling, textrendering, charspacing, wordspacing. - Implements PDF_get_parameter() for the following parameters: - overline, underline, strikeout. - -- Reworks implementation and documentation of PDF_arc(), and fine-tunes - several other graphics functions in the process (p_draw.c): - - Re-implements the algorithm for cutting down arcs into smaller - segments. This fixes a number of subtle bugs with certain parameter - combinations, and introduces clearer documentation for all cases, - including degenerate ones. - - - Defines the magic arc variable for the PDF_circle() algorithm - with 8 instead of 4 decimal places in order to increase the - accuracy (p_draw.c). - - - Introduces clear semantics for the behaviour of PDF_arc() and - other functions when a current point is available, and when no - current point has previously been set. - - - Introduces a (currently unsupported) PDF_arcn() function for - drawing arcs in clockwise direction. - -- Removes the clearing loop for debug flags in PDF_new2() since the - memset() for the PDF structure clears those anyway (p_basic.c). - -- Fixes subtle bugs in the text handling (p_text.c): - - The combination of word or character spacing != 0 and underline/ - overline/strikeout text resulted in wrong text positioning. - - - After PDF_show_boxed() the call PDF_get_value("texty",0) returned - a vertical position which was one line too high under the same - circumstances as above. - -- Allows the external and internal data types for floating point - calculations to be redefined via a #define. This is intended for - applications which require improved accuracy, and not supported in the - general case due to platform and binary compatibility issues (pdflib.h). - -- Implements a check to make sure that PDF_save() and PDF_restore() calls - are balanced at the end of a page (p_basic.). - -- Removed the SWIG preprocessor conditionals since we don't use SWIG - any more (pdflib.h). - -- Fixes a bug in PDFlib's object machinery, related to PDF page object - numbers. Fortunately, the bug occurred only under very rare and subtle - circumstances, but was severe nevertheless because it resulted in - damaged PDF output, and erroneous "allocated but not used" messages - (p_basic.c). - -- Changes the output accuracy of floating point numbers from four to - six decimal places. This slightly affects output file size, but was - necessary to defeat some accuracy problems. For example, stitching - individual stripes of striped TIFF images could lead to visual - artifacts in Acrobat (p_util.c). - -- Corrected a typo in the error message for bad page sizes with Acrobat - 4 compatibility (p_basic.c). - -- Implements support for setting the document's base URI (p_intern.h, - p_basic.c). - -- Changes the PNG error handling in order to make it source- and binary- - compatible with libpng 1.08. and 1.1 (p_png.c). - -- Fixes two problems in PDF_show_boxed() (p_text.c): - - Certain forced line breaks could cause a single character to disappear. - - Forced line breaks could cause the preceding line to be ragged even - in "justify" or "fulljustify" mode. - -- Improves TIFF handling: - - Does no longer throw an exception if the imagewarning parameter is - set to true, and the requested image number in a multi-page TIFF can - not be retrieved (p_tiff.c). - - - Moves an increment operator outside a function call because the - variable has been used as function parameter twice. This is not - portable because the order of parameter evaluation is platform- - dependent. The Compaq True64 compiler correctly spotted this (p_tiff.c). - - - Rejects TIFF images with a color depth other than 1, 2, 4, or 8 bits - per sample since other values are not supported by PDF (p_tiff.c). - - - Changed the parameter handling for CCITT G3-compressed TIFF images, - preventing "Read less image data than expected" messages in Acrobat - (p_tiff.c). - - - Failure of the TIFF library to read an image file could result in a - crash (p_tiff.c). - -- Made the AFM parser stricter in checking the 'StartCharMetrics' entry - against the actual number of character entries in the file. This - makes PDFlib more robust in case of bad AFMs, but may result in - AFMs being rejected which previously have been accepted (p_afm.c). - -- Implements support for an arbitrary number of user-defined document - information fields (p_hyper.c, p_intern.h). - -- The allowed range in the encoding parser was wrong, and must be 0-255 - instead of 1-256 (p_util.c). - -- Changed two entries in the Latin 2 encoding file since Adobe fonts - use the character names T/tcommaaccent instead of T/tcedilla - (fonts/iso8859-2.enc). - -- Adds unsupported code for generating the Crop, Bleed, Trim, and - Art boxes in addition to the MediaBox. Later these will be adjustable - by the client (p_intern.h, p_basic.c). - -- Prevents multiple PDF_open_*() calls without a matching PDF_close() - (p_basic.c). - -- Referenced images were lacking an endobj token at the end of their - (empty) data section (p_image.c). - -- Prevents the use of flush points from language bindings other than - C or C++ (p_basic.c). - -- Two format strings for error messages were wrong in PDF_get_parameter() - (p_basic.c). - -- Issue a NonfatalError when the obsolete function PDF_endpath() is - called (p_draw.c). - -- Calling PDF_get_parameter(p, "resy", image) with an invalid image - parameter resulted in a crash. Ironically, the crash occurred due to - a malformed argument when the error message was formatted (p_basic.c). - -- The test program accidentally set the embedding parameter in several - samples to 1 instead of 0 (pdftest.c). - -- Implements the "fontwarning" parameter. The default value is "true"; - setting it to "false" makes PDF_findfont() return -1 instead of throwing - an exception (p_basic.c, p_font.c, p_util.c, p_intern.h). - -- Using PDF_findfont() before a document has been opened now results - in a RuntimeError (p_font.c). - -- Implements a thumbnail hook for a customer. However, this hook is - not available in the general version, and not yet supported in - language bindings other than C (p_image.c). - -- Allows the base 14 fonts to be embedded (p_fonts.c). - -- Documents and implements the fact that /Producer and /CreationDate - are not allowed as user-defined info keys (p_hyper.c). - -- Ensures that PDF_setfont() and PDF_stringwidth()/PDF_stringwidth2() - cannot be called outside of page descriptions (p_text.c, p_font.c). - -- Safeguards against internal attempts at malloc()'ing 0 bytes (p_basic.c). - -- Fixes a number of EBCDIC-related bugs: - - The description and author fields in PDF_attach_file() haven't been - properly converted to PDFDocEncoding (p_annots.c). - - - PFA font files were treated wrongly (p_font.c). - - - PFM metrics file handling didn't work (p_pfm.c). - - - The "ebcdic" value of the encoding enum was wrong. This resulted in the - compiled-in metrics not being found on native EBCDIC platforms - (p_intern.h). - - - The debug array in the PDF struct was too small for use with - control characters from the EBCDIC character set (p_intern.h). - - - The test for compilation on EBCDIC platforms didn't work reliably - (p_config.h). - - - Introduces a flavor of the poem text where German special characters - are encoded for EBCDIC (pdftest.c). - - - The Unicode sample for document info entries was defined too ASCII- - centric in the demo program, and produced bad results (pdftest.c). - -- Fixes a typo in the unsupported CMYK functions (p_color.c). - -- Fixes the compile_metrics utility which was broken (util/compile_metrics.c). - -- Font metrics read in from a PFM file caused a memory leak. The function - pdf_cleanup_font_struct() now works with all types of fonts, and is - also called for fonts read in from PFM files (p_font.c, p_afm.c, p_intern.h). - - -Build process, distribution, and platform support -================================================= - -- Fixes a few configure buglets, and adds a new option (configure.in): - - The --disable-cxx and --enable-cxx=no options didn't work; - - - The --disable-shared-pdflib and --enable-shared-pdflib=no options - didn't work; - - - Implements --enable-profile. - -- Modifies "make install" in the pdflib subdirectory to do different - things with the static vs. shared library (pdflib/Makefile.in). - -- Added an encoding file for Windows code page 1250 (central european) - (fonts/cp1250.enc, fonts/pdflib.upr), and changes T/tcedilla to - T/tcommaaccent in order to match Adobe conventions (fonts/iso8859-2.enc). - -- Enhancements for MacOS X server/Rhapsody 5.6/Darwin (configure.in). - Set with_gnu_ld=yes which is required for GNU libtool (not to be - confused with Apple's libtool). - -- S/390 enhancements: - - Adds a new branch for shared library/DLL options on the S/390 in - the libtool database (ltconfig). - - - Patches the libtool input for EBCDIC compatibility, and moves the - source file names in compiler commands to the end for c89 (ltmain.sh). - - - Introduces a dedicated distribution kit for S/390, which has all - text files converted to EBCDIC already (Makefile.in). - - - Uses compress instead of gzip for the S/390 distribution (Makefile.in). - - - Removes the PDF_PLATFORM since it is now supplied by the configure - script (p_config.h). - - - Adds -DOS390 to the compiler options if appropriate, and sets the CC - and LD variables (configure.in). - - - Changes a test for OS/2 in order to not catch S/390 (pdflib.h). - - - Introduces a compile-time switch to distinguish between Unix System - Services and MVS on the S/390 (p_config.h, p_util.c). - -- Installing the static C library didn't work due to a typo - (pdflib/Makefile.in). - - -Bindings -======== - -- Added a call to PDF_close_image() in the image samples for all language - bindings (bind/*/image.*). - -- C++: - - Implements unsupported wrapper functions for the CMYK functions - (pdflib.hpp, pdflib.cpp). - -- Java: - - Adds information on building the Java wrapper on S/390 (readme.txt). - - - Adds information about Apple WebObjects (readme.txt). - - - Adds information about J2EE and Apache JServ deployment (readme.txt). - - - Adds the JNI header path for MacOS X server (configure.in). - - - Adds the JNI header path for S/390 (configure.in). - - - Searches $JAVAINCLUDE/mvs for machine-dependent JNI headers (configure.in). - - - Makes the Java wrapper EBCDIC-safe, and implements changes required - for the JNI on S/390 (pdflib_java.c). - -- Perl: - - Searches for Perl 5.7.0 (configure.in). - - - Sets the standard output to binary mode in the CGI sample - (pdfclock.pl.cgi). - -- Python: - - Includes an "oldpython" configuration to build the PDFlib extension - for Python < 2.0 on Windows (Python.dsp). PDFlib binaries for Python - 1.x and 2.0 are included in the Windows binary distribution. - - - Updates the configure script for Python 2.0 (configure.in). - -- Tcl: - - Searches for Tcl 8.4 (configure.in). - - -Documentation -============= - -- Splits the manual in an ActiveX edition and another one for all - other language bindings (doc/PDFlib-manual.pdf). - -- Improved the form fields in the PDFlib order form (PDFlib-purchase-order.pdf). - -- Documents a workaround for problems when viewing the PDFlib purchase - order form with Acrobat Reader on Unix/Linux (doc/readme_unix.txt). - -- Adds ColdFusion examples and documentation to the ActiveX edition. - - - -V3.02 (August 22, 2000) -======================= - - -Bug fixes and enhancements -========================== - -- Added state checks to the text functions (p_text.c). - -- Refined the error handling in PDF_open_image (p_basic.c, p_image.c). - -- Deactivated the default prefix entry in the UPR file because it could - cause confusion with the ActiveX edition (pdflib.upr). - -- Multi-strip TIFF images didn't work correctly when placed with a scaling - factor != 1 (p_image.c). - -- Implements a macro which aids in overcoming differences in libpng - versions when it comes to accessing the setjmp buffer (p_png.c). - -- Fine-tuned the OS/2 test in p_config.h. - -- Allow negative box width and height in PDF_show_boxed() (p_text.c). - -- Added the debug version of the C runtime library to the debug configuration - of the MSVC test and pdflib projects (test/test.dsp, pdflib/pdflib.dsp). - -- Under certain circumstances the GIF reader didn't work correctly due to - missing variable initialization (p_gif.c). - -- pdftest.c couldn't be compiled in strict ANSI mode by some compilers due to - two misplaced statements (which actually only serve as warning preventers) - (pdftest.c). - -- Added an #if conditional because the Intel version of the Metrowerks compiler - doesn't have setmode() (p_basic.c). - -- PDF_open_fp() resulted in a crash or PDFlib exception because the file pointer - got overwritten due to wrong initialization order (p_basic.c). - - -Build process, distribution, and platform support -================================================= - -- Adds more AS/400 relevant information (doc/readme_ebcdic.txt). - -- Includes the files in the fonts directory in the binary distributions. - -- Extended the CodeWarrior project file for dual use on both Mac and - Windows, and updated to CodeWarrior Pro 5 (PDFlib.mcp). - -- Fine-tuned support for S/390 (p_config.h, p_util.c). - -- Removed an obsolete file (pdflib/makefile.bcc). - - -Bindings -======== - -- C: - - PDF_delete() was missing from two C samples (hello.c, image.c) and - a demo client (clients/text2pdf.c); - -- Java: - - No longer calls PDF_delete() in the Java exception generating mechanism - since this may lead to multiple calls due to interference with PDFlib's - finalize() method. This should fix long-standing problems with - exceptions in some Java environments, especially Servlet engines - (pdflib_java.c). - - - Adds a classFinalize() method (pdflib.java). - - - Adds throws clauses to all PDFlib Java and native methods. This change - required the addition of an import statement (pdflib.java). - - - Adds throws clauses to all examples. - - - Renames the Java servlet example to PDFlibServlet.java. - - - Adds notes on using PDFlib with IBM WebSphere Application server - and Allaire JRun (bind/java/readme.txt). - - -Documentation -============= - -- Marks PDF_endpath() as deprecated (pdflib.h). - -- Replaced the order form with an interactive version - (doc/PDFlib-purchase-order.pdf). - - -V3.01 (July 1, 2000) -===================== - -New features and API -==================== - -This release is binary-compatible to 3.0, but adds a few new features -which are accessible through additional parameters to existing functions: - -- Implements the "fontencoding" parameter for retrieving the encoding of the - current font (p_basic.c, p_font.c). - -- Implements "blind" mode in PDF_show_boxed() in order to check whether or not a - string fits in a given box (p_text.c). - -- Adds support for multipage TIFF images via the "page" parameter - of PDF_open_image_file() (p_tiff.c). - -- Implements pass-through mode for a variety of TIFF compression schemes. - Compressed image data is no longer decompressed and recompressed, resulting - in much faster TIFF procecessing. Correctly dealing with multi-strip images - required rewriting parts of the image machinery (p_tiff.c, p_image.c, - p_intern.h). - -- Adds support for CMYK TIFF images (p_tiff.c). - -- Implements pass-through mode in the GIF handler. This results in much faster - GIF processing, but unfortunately restricts the number of supported GIF flavors - to 8-bit, non-interlaced. As a side effect, this decreases the memory footprint - of each PDF instance by more than 64 KB (p_gif.c, p_intern.h). - -- Implements the "openmode" parameter for setting the initial - display of bookmarks, thumbnails, or fullscreen mode (p_intern.h, - p_basic.c, p_hyper.c). - -- Implements the "bookmarkdest" parameter which allows changing the - destination view of individual bookmarks (p_intern.h, p_hyper.c, - p_basic.c). - -- Implements the "imagewarning" parameter which allows the client to get more - detailed information about why PDF_open_image_file() or PDF_open_CCITT() failed - (p_basic.c, p_jpeg.c, p_gif.c, p_tiff.c, p_png.c, p_ccitt.c). - - -Bug fixes and enhancements -========================== - -- Outputs \r and \n in strings with a preceding backslash which seems to be - required for proper handling of linebreaks in annotations (p_text.c). - -- Eliminate the exception caused by unknown category entries in the resource - files. - This behavior caused unnecessary exception when UPR files were created with the - makepsres utility (p_util.c). - -- Implements an unsupported "memory32" mode for 32-bit aligned memory images in - PDF_open_image() (p_image.c). - -- Negative horizontal scaling was taken into account for the underline/overline/ - strikeout distance from the baseline including its sign, which is wrong - (p_text.c). - -- Increased several of the initial allocation chunk sizes since we saved 64K by - the rewrite of the GIF module (p_intern.h). - -- Uses pdf_end_path() more efficiently in PDF_endpath() (p_draw.c). - -- After an image was rejected the next image could suffer from left-over - information from the rejected image since proper initialization was missing - (p_image.c). - -- Allows the compression level to be changed within a page description - (p_basic.c). - -- Removed the warning about page sizes which are incompatible to Acrobat 3 - which was issued by default when a page was too large or too small. Now - a RuntimeError is generated only in Acrobat 3 compatibility mode (p_basic.c). - -- PDF_close() closed the file handle even if it was provided by the client - through PDF_open_fp() which is a bad attitude towards clients (p_basic.c). - -- PDF_open_mem() was broken: it provoked a wrong error message due to missing - initialization (p_basic.). - -- Removed a number of obsolete functions which were no longer supported in - PDFlib 3.0 but still available (p_jpeg.c, p_gif.c, p_tiff.c, p_gstate.c, - p_text.c, p_hyper.c, pdflib.h, p_intern.h, p_basic.c, - bind/[perl|tcl|python]/pdflib_*.c). - -- PDF_add_note interprets an empty icon parameter equivalent to a NULL value - (p_annots.c). - -- Setting the transition parameter to an empty string is now equivalent to - a NULL string value, and resets the transition to default (p_hyper.c). - -- Replaces the GIF test image with a non-interlaced version (test/pdflib.gif). - -- Eliminates a superfluous moveto in PDF_arc() when the current point and the - starting point of the arc coincide. The redundant moveto broke subsequent - closepath and fill behaviors (p_draw.c). - -- Changed several hex characters in strings to octal notation (pdftest.c). - -- Added a few casts to satisfy C++ compilers (p_font.c, p_pfm.c). - -- Re-implements PDF_set_text_matrix(), which is currently neither documented in - the manual nor supported (p_text.c, pdflib.h). - -- Adds the "nativeunicode" parameter to Unicode-aware language wrappers in order - to disable native Unicode processing. The default value is false (p_basic.c). - -- The "defined" preprocessor instruction was missing for the __BORLANDC__ - identifier (p_config.h). - -- Safeguards the interpretation of encoding and UPR files on Unix from - Windows-style lineends (p_util.c). - -- An infinite loop could result when trying to attach a non-existent - file with PDF_attach_file (p_basic.c). - -- The return type of PDF_get_buffer() was missing a const qualifier - (pdflib.h, p_basic.c). - -- Separates the generation of a multi-threaded test program from the - WIN32 environment in order to simplify building non-threaded tests - with non-MS compilers (test/pdftest.c). - -- Removes several warnings about redundant variable assignments which - were uncovered by the Borland compiler (p_afm.c, p_basic.c, p_draw.c, - p_filter.c, p_font.c, p_jpeg.c, p_pfm.c, p_util.c, test/pdftest.c). - -- PDF_get_value() could crash when called with bad parameters. Ironically, - the crash was not caused by the bad parameters but by a bug in the - error message complaining about the bad parameters (p_basic.c). - -- PDF_setfont() and PDF_stringwidth2() now accept negative font sizes. - The horizontal scaling factor may now also be negative. - The underline/overline/strikeout functions use the absolute value - of the calculated line width to ensure that the line width will be - positive (p_font.c, p_text.c). - -- Changed the name of the "byte" typedef to "pdf_byte" (p_intern.h, many *.c). - -- Changed the default encoding in text2pdf.c from "winansi" to "host", - and adds a command line option for the text encoding (pdftest.c). - -- The formula for calculating Bezier control points for the arc - approximation gave wrong results due to a missing cast (!) in the - C expression, resulting in ugly circle segments for certain parameter - combinations (p_draw.c). - -- The vertical start position of the text line could be reset to 0 if graphics - operators were issued between the PDF_show_xy and PDF_continue_text() - calls (p_text.c). - -- Text output could be positioned one line too high if the character - or word spacing was set != 0 because the leading value was not - set correctly in PDF_show() and PDF_show_xy(). This bug also affected - the horizontal positioning of PDF_show_boxed() (p_text.c). - -- PDF_continue_text now honors empty strings, i.e., moves to the start - of the next line if the supplied string is empty (p_text.c). - -- The ISO 8859-2 encoding file had typos in the Zacute and Racute - entries (iso8859-2.enc). - -- CMYK JPEG images resulted in corrupt PDF output due to a typo (p_image.c). - -- Fixed a non-portable construct involving the increment operator which - resulted in wrong code when optimizing on True64 Unix (test/pdftest.c). - - -Build process, distribution, and platform support -================================================= - -- Introduced a new configuration "no auxiliary libs" for MSVC for building - PDFlib without any auxiliary library present (*.dsp). - -- Changes the sample projects for MSVC++ from pdfclock to hello because this - is better suited as the first example (c.dsp, cpp.dsp). - -- Makes the math library linker option (usually -lm) configurable via an option. - This is only rarely required. The option is empty on MacOS X/Darwin - (configure.in). - -- On Windows, switches to static versions of libpng, tifflib, and libz, and - renamed libpng_static.lib to libpng.lib (*.dsp). - -- Adds support files for Borland C++ Builder 5.0 (*.bpf, *.bpr). - -- Adds -pthreads to the compiler options on OSF1 (configure.in). - -- Libtool output was sent to /dev/null in the bind Makefiles, which is - a bad idea, and was changed (bind/*/Makefile.in). - -- By default the C++ binding is no longer enabled, since few people seem to - actually use it and inconsistent handling of the standard C++ library causes - frequent configuration trouble on several systems. It can be enabled with the - --enable-cxx configure option (configure.in). - -- Changed the name of the C++ configure option from --with-cxx to the more - appropriate --enable-cxx (configure.in). - -- Removes -ljpeg and -lz from the TIFFlib tests in the configure script, since - these are't always required for libtiff, and missing additional libraries may - cause linker error messages on some platforms if not installed. Platforms - which require auxiliary libraries for TIFFlib can configure those with the - new --with-tiffauxlib option (configure.in). - -- Changes the shared library mechanism in order to avoid problems with - multiple dependent shared libs on platforms which don't support inter- - library dependencies, or when the user doesn't have root privilege for - installing the PDFlib shared library, for example on an ISP's server - (configure.in, pdflib-config.in, all Makefile.in): - - - PDFlib is built as a libtool convenience library by default. - - - C/C++ language clients which prefer a shared PDFlib can request this via - the --enable-shared-pdflib configure option. Other language bindings - will not be available when this option is used. - - - Using non-installed versions of the auxiliary libraries now works as - expected, but requires them to be built as static libs. Problems may - arise if a local library directory contains a shared version of some - auxiliary lib. The configure script will warn about this situation. - - - The PDFlib library will only be installed if it was built as a shared - object. "make install" will install pdflib.h always, however. - - - All language wrapper libraries are still shared, but pull in the PDFlib core - into the respective shared library. - -- Removes the dependencies from the client Makefile (clients/Makefile.in, configure.in). - -- The client and util Makefiles didn't use the configure-supplied macro for the - name of the PDFlib core library (clients/Makefile.in, util/Makefile.in). - -- Switches to libtool 1.3.5 (config/*). - -- Removed all space characters after the -I compiler options since some - compilers don't like this (configure.in). - -- Includes an encoding definition file for ISO 8859-9/Turkish, also - known as Latin Alphabet No 5 (!) with additional character entries - for Windows codepage 1254, and includes a corresponding - entry in the UPR file (fonts/iso8859-9.enc, fonts/pdflib.upr). - -- Removes an obsolete file (test/graphdata). - -- The "clean" target didn't check whether or not a certain language - binding actually had been built, resulting in errors for a global - "make clean" (configure.in, Makefile.in). - -- Sets the LANG variable to empty string before calling the date - command. Otherwise %p depends on the LANG setting, and may not - work (Makefile.in). - -- Adds the list of dependent libraries (PDFLIBLINK) when linking the - PDFlib shared library via libtool. Some platforms such as AIX require - the names of all dependent libraries to be coded into the shared library - file (pdflib/Makefile.in). - -- Fixed a number of EBCDIC-related bugs: - - Bookmarks and annotation text didn't get converted to ASCII (p_hyper.c). - - User-defined document information field names got converted to - ASCII just one time too often, resulting in bad output (p_hyper.c). - - The open mode for fopen() must be set to binary ("rb" and "wb"), - otherwise PDF output will be screwed up, and images don't work - (p_config.h). - -- Removed all occurrences of "-lc" in configure.in. - -- When searching for the TIFF library configure didn't check the lib - subdirectory of any directory supplied via the --with-tifflib= option, - contrary to the search applied for zlib and libpng, and the TIFFlib - header files (configure.in). - -- Implements config/pdflib.m4 for use with the configure process of other - packages which need to test for the availability of PDFlib. - -- Includes pdflib-config as an aid in configuring other packages which - want to use PDFlib (configure.in, pdflib-config.in). - -- Fixed a typo in the SUFFIXES line which adversely affected some - non-GNU makes (pdflib/Makefile.in). - -- Added a precompiler test for the EMX compiler on OS/2 (p_config.h). - - -Bindings -======== - -- C: - - Includes an image sample (image.c). - - - The improved libtool scheme revealed a bug in the ordering of - object files in the Makefile (Makefile.in). - -- C++: - - Changed the name of the preprocessor define BROKEN_BOOL to PDF_BROKEN_BOOL - (pdflib.hpp, pdflib.cpp). - - - Changed the C++ test files to return 0 (hello.cpp, image.cpp, pdfclock.cpp). - - - Added several casts to properly deal with the size method of C++ - strings (pdflib.cpp). - - - get_parameter() was accidentally missing from the wrapper code - (pdflib.hpp, pdflib.cpp). - - - Adjusted the return type of PDF_get_buffer() (pdflib.hpp, pdflib.cpp). - - - Includes an image sample (image.cpp). - - - The improved libtool scheme revealed a bug in the ordering of - objects in the Makefile (Makefile.in). - - - Changed the preprocessor conditionals for name space handling (pdflib.hpp). - - - Separates out the name of the standard C++ library, and sets it from - the configure script. Determining whether it is required is however - not yet finally implemented (configure.in, Makefile.in). - -- Java: - - Adds /jdk1.2.[123] to the list of directories to be searched for the Java - header files for the benefit of Cygwin users (configure.in). - - - Adds /usr/local/java and /usr/local/java/alpha to the list of - directories to be searched for the Java header files (configure.in). - - - Implements the "nativeunicode" parameter (pdflib_java.c). - - - Includes a servlet sample (hello_servlet.java). - - - Makes the exception handling in the Java wrapper thread-safe, which was - the last step to a completely thread-safe Java binding (pdflib_java.c). - - - Adds some notes on using PDFLib with Borland/Inprise JBuilder (readme.txt). - - - The error message for a bad PDFlib version used only a single significant - digit (pdflib_java.c). - - - PDF_concat() had accidentally been declared public instead of private - (pdflib.java). - - - Includes an image sample (image.java). - - - Implements several changes which are necessary for the AS/400 JNI - implementation where jlong is a struct (pdflib_java.c): - - - Removes an unneccesary jlong initializer in the wrapper code of - PDF_new(). - - - Casts NULL to jbyteArray in the wrapper of PDF_get_buffer(). - - - Adds a cast to the (jbyte *) argument of ReleaseByteArrayElements(). - - - Conditionally uses a JNI-supplied macro for the assignment of - jlong to long. - - - Made changes to the configure script in order to support the Kaffe - VM which doesn't use the common jni_md.h in its JNI implementation - (configure.in). - - - Relaxed javadoc generation since Kaffe doesn't have a javadoc - implementation (Makefile.in). - - - The Unicode converter didn't report back the correct string length - if the string was empty (pdflib_java.c). - - - libtool versioning information was missing (Makefile.in). - -- Perl: - - Links the Perl wrapper against the Perl library on AIX, Cygwin, and - OSF/1 (configure.in). - - - Removed a number of obsolete functions which were no longer supported in - PDFlib 3.0 but still available (see doc/compatibility.txt for details). - - - PDF_concat still didn't work due to a glitch in the module file and a - missing newXS entry (pdflib_pl.pm, pdflib_pl.c). - - - Adds a CGI variant of the pdfclock sample (pdfclock.pl.cgi). - - - Adjusted the return type of PDF_get_buffer() (pdflib_perl.c). - - - Includes an image sample (image.pl). - - - Cleaned up a few of the many warnings produced by the SWIG-generated - wrapper code (pdflib_pl.c). - - - Implements a number of changes to make the wrapper compatible with - Perl 5.6, mostly required by the discontinued use of PERL_OBJECT in - the ActivePerl build: - - - Introduced another configuration called "oldperl" for building the - wrapper for older ActivePerl versions (perl.dsp). - - - Added the XS macro to the export declaration of boot_pdflib_pl - (pdflib_pl.c). - - - Searches for perl5.6.0 in the configure script (configure.in). - - - Changed the include and lib paths for Perl 5.6.0 on Windows (Perl.dsp). - - - Changed the include path in the VC project file to the Perl/lib/CORE - directory (Perl.dsp). - - - Removed the /Tp option in the VC project file (no longer use C++ mode). - (Perl.dsp). - - - Removed the PERL_OBJECT #define on Windows (pdflib_pl.c). - - - Changed all occurrences of CPerl to CPerlObj, and removed the respective - macro definition (pdflib_pl.c). - - - Changed a preprocessor directive to make the wrapper code compatible - with Perl 5.6 on Unix (pdflib_pl.c). - - - libtool versioning information was missing (Makefile.in). - -- Python: - - Includes an image sample (image.py). - - - Changed the include and lib paths for Python 1.5.2 on Windows (Python.dsp). - - - Removed some dead code from the wrapper code (pdflib_py.c). - - - "make test" tried to make a hard link to a symbolic link, which - doesn't work on all platforms (bind/python/Makefile.in). - - - libtool versioning information was missing (Makefile.in). - -- Tcl: - - Implements the "nativeunicode" parameter (pdflib_tcl.c). - - - Removed a number of obsolete functions which were no longer supported in - PDFlib 3.0 but still available (see doc/compatibility.txt for details). - - - Makes the exception handling in the Tcl wrapper thread-safe, which was - the last step to a completely thread-safe Tcl binding (pdflib_tcl.c). - - - Adjusted the return type of PDF_get_buffer() (pdflib_tcl.c). - - - Includes an image sample (image.tcl). - - - Changed the include and lib paths for Tcl 8.3.1 on Windows (Tcl.dsp). - - - The wrapper now requires Tcl 8.2 or higher. - - - If appropriate, calls Tcl_InitStubs() for Tcl Stubs support - (pdflib_tcl.c). - - - Queries the version number of the Tcl interpreter instead of - relying on the static version number in the Tcl header used - for compiling the wrapper (pdflib_tcl.c). - - - Added some preprocessor directives necessary for the mingw - environment under Windows (pdflib_tcl.c). - - - Removed the DllMain function from the wrapper since it wasn't actually - required but could cause trouble with some wrong precompiler settings - (pdflib_tcl.c). - - - PDF_get_value and PDF_set_value were not properly reported to the - Tcl interpreter, and were therefore unavailable (pdflib_tcl.c). - - - The Unicode converter didn't report back the correct string length - if the string was empty (pdflib_tcl.c). - - -Documentation -============= - -- Adds many clarifications to the manual, as well as some basic text and - graphics handling algorithms (PDFlib-manual.pdf). - -- Includes a PDF with point grid measures for common page sizes (grid.pdf). - -- Updated the Web locations of the png and zlib libraries (readme.txt, - PDFlib-manual.pdf). - -- Added some information on forcing a certain compiler, or certain compiler - flags (doc/readme_unix.txt). - -- Updated the PDFlib license (PDFlib-license.pdf). - -- Included the PDFlib order form (PDFlib-purchase-order.pdf). - - -V3.0 (March 1, 2000) -==================== - -New features and API -==================== - -- Implements the "invert" parameter for PDF_open_image() in order to - work around problems with certain 1-bit TIFF images (p_tiff.c). - -- Implements ascender, descender, and capheight parameters for get_value() - (p_basic.c). - - -Bug fixes and enhancements -========================== - -- Fixed a bad memory leak for all TIFFs which couldn't be handled - in pass-through mode (p_tiff.c). - -- Track the text position even if the supplied string is NULL or - empty (p_text.c). - -- PDFlib attempted to load the UPR resource file too early, even if - the resource query could have been satisfied with dynamically loaded - resources (p_util.c). - -- Empty resource file names (e.g. produced by an empty, but existing - environment variable) were not handled correctly (p_util.c). - -- The y position calculations for PDF_show, PDF_show_xy, and - PDF_continue_text were wrong for nonzero word spacing values. - This also affected PDF_show_boxed (p_text.c). - -- Re-enabled the #ifdef'ed /EncodedByteAlign code (p_tiff.c). - -- Change the cleanup_...() functions in order to make them multiply - callable. This was not the case for certain rare situations when an - exception occured during cleanup (p_annots.c, p_basic.c, p_font.c, - p_hyper.c, p_util.c, p_image.c). - -- The handling of font files with DOS line ends was broken on Unix - systems (p_font.c). - -- The error machinery didn't recognize a certain recursive error situation - related to the handling of corrupt font files (p_basic.c). - -- The font machinery now treats the AFM entry "StandardEncoding" like - "AdobeStandardEncoding" since some AFMs use the former (wrong) - variation (p_font.c). - -- The UPR resource names didn't work in PDF_set_parameter() due to - a typo (p_basic.c). - -- CCITT-compressed TIFFs with multiple strips haven't been handled - properly, and resulted in corrupt output. As a quick fix we revert - to uncompressing and recompressing with Flate (p_tiff.c). - -- The PDF properties sheet in Windows explorer doesn't work when the - Info dictionary keys are not followed by space characters. (This - should be considered an Acrobat bug!) We therefore removed this - optimization in order to work around this misfeature (p_hyper.c). - -- PDF_stringwidth2() didn't take the length argument into account (p_text.c). - - -Build process, distribution, and platform support -================================================= - -- configure improvements (configure.in): - - configure failed to include -I in the include paths for the auxiliary libs. - - configure failed to accept library paths supplied on the command line. - - Unified the handling of the -I option for the various language - include directories. - - Adds -lm to the libpng tests. - - The --disable-shared option didn't work. - -- Changed the install target so that it creates the install directories - for library and header files if they don't exist. This was a problem - especially on RedHat systems where /usr/local/include doesn't exist - (pdflib/Makefile.in). - -- Removed the FORCE: target in the main Makefile (Makefile.in). - -- Added some preprocessor lines for Cygwin support (p_config.h, p_basic.c). - -- Switched to a static version of the PNG library due to problems with - libpng.dll when used with static C runtime (*.dsp). - - -Bindings -======== - -- Java: - - get_value didn't work because of a missing comment terminator (pdflib.java). - - - An exception in get_parameter could result in an access violation in - Windows due to a bug in the wrapper code (pdflib_java.c). - - - Relaxed the compiler setting "strict ANSI" in the CodeWarrior project - for the Java binding on the Mac, since the Apple-supplied Java - headers for MRJ 2.2 do no longer compile in strict mode (pdflib.mcp). - -- Perl: - - PDF_concat didn't work due to a glitch in pdflib_pm.pl. - -- Python: - - PDF_open_image_file() was missing from the set of registered functions, - and was therefore unavailable (pdflib_py.c). - -- Tcl: - - Changed the Windows project file for Tcl 8.3 paths (tcl.dsp). - - - The Tcl install target didn't check whether the install directory - already existed (Makefile.in). - - -Documentation -============= - -- Switched to version 8 of the Aladdin license (aladdin-license.txt). - - -V2.30 (February 15, 2000) -========================= - -New features and API -==================== - -- Implements the ignoremask parameter for PDF_open_image_file() to - allow the user to disable PDFlib's automatic transparency support. - -- Reactivates the disabled PDF_open_mem/writeproc interface for installing - a callback to fetch the PDF data (p_basic.c, p_annots.c, p_image.c, - p_font.c, p_stream.c, pdflib.h, p_intern.h). - -- Removes PDF_set_text_matrix() which has bad interactions with - internal functions and properties of PDF, and doesn't offer any - advantage to the client (p_text.c). - -- Path segment functions no longer reset the text position and matrix - (p_text.c). - -- Implements PDF_get_value() and PDF_set_value() which (along with - PDF_set_parameter()) replace the following functions (p_basic.c): - - get_font - get_fontsize - get_image_height - get_image_width - - set_fillrule - set_leading - set_text_rise - set_horiz_scaling - set_text_rendering - set_char_spacing - set_word_spacing - set_duration - set_transition - - In bindings other than Java and ActiveX these are still available, however. - -- Interprets the image resolution in the image converter client, and - adjusts both page size and scaling factors accordingly (pdfimage.c). - -- Reads the resolution or aspect ratio values from all image formats - which support it, and passes the values to the client (p_jpeg.c, p_png.c, - p_tiff.c, p_gif.c); - -- Implements and documents PDF_concat() (p_gstate.c). - -- Makes the default zoom factor (open action for the first page) user- - settable through PDF_set_parameter() (p_basic.c). - - -Bug fixes and enhancements -========================== - -- PDF_delete() didn't PDF_close() if called from the error handler (p_basic.c). - -- PDF_arc() didn't handle movetos correctly (p_draw.c). - -- Due to a subtle bug in the exception handling machinery non-fatal - errors could cause recursive errors (p_basic.c). - -- PDF_show_boxed() didn't fully justify the second but last line under - certain circumstances, and didn't get forced newlines right - sometimes (p_text.c). - -- PDF_show_boxed() didn't take the text matrix into account correctly - (p_text.c). - -- End the text object if the text render mode is set to one of the - clipping modes (p_text.c). - -- Added an endpath operator to the clip operators to save the client from - doing so (p_draw.c). - -- PDF_open_image() didn't check for a valid params pointer for one- - component images (p_image.c). - -- Non-fatal errors could result in corrupt output due to a glitch - in the error handling machinery (p_basic.c). - -- Implements data pass-through for CCITT-compressed TIFF images. This - decreases the PDF output, and accelerates image processing (p_tiff.c, - p_image.c, p_intern.h). - -- Changed the key of the duration setting from /D to /Dur. The former - is only correct within a transition dictionary (p_basic.c). - -- Implements a complete text and graphics state tracking machinery, - including save/restore (p_intern.h, p_gstate.c, p_draw.c, p_text.c, - p_basic.c). - -- Disallows the use of the null character in user-defined encodings - (p_util.c), and documents the fact. - -- Implemented a stricter state checking machinery for switching - between path objects, text objects, image objects, and the general - page description state (p_text.c, p_draw.c, p_gstate.c, p_image.c, - p_intern.h). - -- The parameter checks in the text output functions were too strict, - and erroneously rejected strings starting with a character code < 256 - in Unicode mode (p_text.c). - -- Removed several remains of an obsolete filename in comments - and a project file (p_intern.h, pdflib_static.dsp). - -- Checks for a degenerate matrix in PDF_set_text_matrix() (p_text.c). - -- Renamed pdf_concat() to pdf_concat_raw() (p_gstate.c). - -- Simplifies the old and new stringwidth/show/show_xy/continue_text - functions pairs such that the old simply relay to the new functions. - A zero length parameter for the new functions is interpreted to - mean C-style text (p_text.c). - -- Fixes the underline/overline/strikeout handling (p_text.c). - -- Made the prefix parameter public (p_basic.c.). - -- Relaxed the handling of metrics files where the font name has been - changed, and doesn't match the user-supplied font name (p_afm.c, - p_pfm.c). - -- The AFM and PFM modules threw NonfatalErrors even in severe cases - (p_afm.c, p_pfm.c). - -- Added an omitted pdf_begin_text() call which resulted in bad PostScript - output when the PDF was printed (p_text.c, p_font.c, p_intern.h). - -- An erroneous byte was output in the header section (p_basic.c). - - -Build process, distribution, and platform support -================================================= - -- Puts double quotes around all variables used in test statements - in the configure script. This will make the script more resistant - against test complaining when a variable happens to be empty (configure.in). - -- Moves the test for EBCDIC from configure to p_config.h. - -- Switches the language bindings on Windows to static C runtime - libraries in order to avoid the dreaded problems with multiple - versions of msvcrt.dll (*.dsp). - -- Added solaris as a subdirectory name in looking for jni_md.h, since - it doesn't seem to be picked up via $ac_md_system (configure.in). - -- Added -lm -lc at a few places in order to help configure find the - auxiliary libraries (configure.in). - -- Changed the handling of the PDF magic number to protect it from - EBCDIC compilers (p_basic.c). - -- Introduces a binary distribution for Windows, generated with a - JScript program run in Windows Script Host (shell programming a la - Microsoft, oh my...). - -- Added "-ljpeg" to TIFFLIBLINK (configure.in). - -- Added "-lz -lm" to the TIFF library check (configure.in). - - -Bindings -======== - -- C++: - - The C++ Makefile failed to set the CXX variable correctly (Makefile.in). - - - Implemented concat() (pdflib.hpp, pdflib.cpp). - - - show_boxed() didn't return a value (pdflib.cpp). - -- Java: - - Reworked and fixed the exception handling (pdflib_java.c). - - - Changed the string extraction routines so that they handle empty - strings gracefully (pdflib_java.c). - - - Implemented concat() (pdflib_java.c, pdflib.java). - - - Calls java and javadoc after compiling the Windows DLL (Java.dsp). - -- Perl: - - Removed the export-dynamic option for libtool (Makefile.in). - - - Implemented PDF_concat() (pdflib_pl.c, pdflib_pl.pm). - -- Python: - - Removed the export-dynamic option for libtool (Makefile.in). - - - Implemented PDF_concat() (pdflib_py.c). - -- Tcl: - - PDF_open_image_file() was missing from the set of exported functions - in the wrapper code (pdflib_tcl.c). - - - Conditionally compiles the wrapper in order to avoid the use of - binary strings when compiling against Tcl 8.0 (pdflib_tcl.c). - - - Implemented PDF_concat() (pdflib_tcl.c, pkgIndex.tcl). - - -Documentation -============= - -- Documents the libtool library versioning scheme (readme_unix.txt). - - - -V2.20 (January 24, 2000) -========================= - -New features and API -==================== - -- Implements PDF_concat(), currently only for the C binding - (pdflib.h, p_gstate.c). - -- Implements PDF_show_boxed(), the basis of which has been contributed - by Leonard Rosenthol (pdflib.h, p_text.c, bind/*/*.c, pdflib_pl.pm, - pkgIndex.tcl, pdflib.hpp, pdflib.cpp, pdflib.java). - -- Implements overline and strikethrough text, as suggested and contributed - by Leonard Rosenthol. API, implementation and behavior parallel underlined - text (p_intern.h, p_basic.c, p_text.c). - -- Implements PDF_get_buffer() for fetching the PDF output from memory - for all language bindings. - - -Bug fixes and enhancements -========================== - -- Fixed three bugs in the AS/400 codepage conversion table (p_stream.c). - -- Fixed a bug in the EBCDIC-safe handling of document info entries - (p_hyper.c). - -- #ifdef'ed all code for dealing with the now obsolete flush parameter. - -- pdf_ebcdic2ascii() didn't return the correct string. Changed the caller - such that the return isn't needed anyway (p_stream.c). - -- The binary PDF magic number was inadvertently written using pdf_puts() - instead of pdf_write() which is wrong on EBCDIC machines (p_basic.c). - -- The debug and nodebug parameters are no longer documented nor supported. - Nonfatal exceptions can be suppressed with the new warning parameter - (p_basic.c). - -- Changes the error handling and memory management such that one pair of - PDF_new()/PDF_delete() can accomodate multiple pairs of PDF_open_*()/ - PDF_close() without leaking memory (p_stream.c, p_basic.c). - -- Fixed a possible crash under rare circumstances, related to an - exception being thrown when no real work has been done (p_stream.c). - -- Changes the underline/overline/strikeout calculations such that the - width of the line is no longer taken into account for calculating - the distance from the baseline (p_text.c). - -- Fixes problems related to setting the current text position via - PDF_set_text_matrix() and PDF_set_text_position() (p_text.c). - -- Removes the transition settings from all clock samples since these - may significantly slow down PDF the screen presentation, especially - when served via the Web (bind/pdfclock.*). - -- Removes the dynamic TIFFlib attachment on Windows, and directly - links to TIFFlib. The TIFFlib DLL will also be included in the - binary distributions (p_basic.c, p_tiff.c, p_intern.h). - -- Changes the TIFF code to use the PDFlib-supplied malloc/free - routines instead of the TIFFlib-supplied ones. This makes the code - for attaching the TIFFlib Windows DLL at runtime compatible with - the generally available DLL (p_tiff.c, p_basic.c, p_intern.h). - -- Changes PDF_findfont() such that an exception is raised when the - requested font can't be set, instead of returning -1 (p_font.c, - bind/*/hello.*, test/pdftest.c). - -- An error message had a wrong printf format (p_state.c). - -- Accepts the image file type parameter of PDF_open_image_file() in - both lower and upper case, although this will not be documented - (p_image.c). - -- Removed the optimization which tried to keep track of redundant - font changes (p_font.c). - -- "builtin" encodings no longer worked after the great encoding rehaul, - but required only a simple fix (p_font.c). - -- Implements a safeguard against recursive I/O errors which may occur - in rare situations when flushing the output raises an exception while - being called from the exception handler already (p_intern.h, p_basic.c, - p_stream.c). - -- The stream machinery didn't get initialized in PDF_open_fp(), resulting - in an infinite recursion (well, a finite one...) when opening a PDF - with a preexisting FILE pointer (p_basic.c). - -- Changes several places where #includes had filenames in "..." instead - of <...>, resulting in bad dependencies in the Makefiles (pdflib/p_intern.h, - util/compile_metrics.c, pdflib_pl.c, pdflib_py.c, pdflib_tcl.c). - -- The compile_metrics utility was not yet adapted to the new encoding - include file logic (util/compile_metrics.c). - - -Build process, distribution, and platform support -================================================= - -- Under Windows switched all language bindings other than C and C++ - from a DLL to a static PDFlib library (bind/*/*.dsp). - -- Improves and simplifies the searching mechanism for Perl, Tcl, Python, - and Java in configure (configure.in). - -- Simplifies and streamlines the configure code for detecting the - TIFF, Zlib, and PNG libraries (configure.in). - -- Switches to libtool 1.3.4, and back to 1.3.c due to problems with - the former (config/*). - -- Fixes many glitches in the configure and build machinery. - -- Makes the name of the core PDFlib library file configurable via - the --with-libname configure option in order to work around a name - clash on Digital Unix 4. The bindings are set up such that changing - the core library name is transparent to the language binding - (configure.in, all Makefile.in). - -- Includes an encoding file for ISO 8859-15 in the distribution - (fonts/iso8859-15.enc), and changed the Latin 2 encoding file name - (fonts/iso8859-2.enc). - -- Changed the ordering of libpng and zlib when linking programs against - PDFlib since older linkers require this ordering (Makefile.in). - -- Moved the .PHONY targets in the Makefiles below the all target for - combatibility with non-GNU makes. - -- Implements a suitable mechanism for patching the version number into - numerous source files, and splits it from the distribution (version.pl). - -- Fixes a number of Makefile bugs which resulted in wrong dependencies - (*/Makefile.in). - - -Bindings -======== - -- C++: - - Changes the data parameter of open_image() from String to const char * - which is more appropriate (pdflib.hpp, pdflib.cpp). - -- Java: - - Implements Unicode support for page descriptions (pdflib_java.c). - - - Changes the data parameter of open_image() from String to byte[] - which is more appropriate (pdflib.java, pdflib_java.c). - - - Correctly implements setpolydash() (pdflib_java.c). - - - Includes javadoc comments and Makefile targets for generating Java - documentation in HTML (pdflib.java, Makefile.in). - - - Implements package support for PDFlib, and generates a .jar file - (*.java, *.c, Makefile.in). - - - Changes the version mechanism for the Java wrapper to use version - number querying instead of matching version numbers in the name of - the wrapper library (pdflib_java.c, Makefile.in, Java.dsp, pdflib.h). - -- Perl: - - Correctly implements PDF_setpolydash() (pdflib_pl.c). - -- Python: - - Correctly implements setpolydash() (pdflib_py.c). - -- Tcl: - - Implements Unicode support for page descriptions (pdflib_tcl.c). - - - Searches for tclsh8.3 in configure (configure.in). - - - Correctly implements PDF_open_image() (pdflib_tcl.c). - - - Correctly implements PDF_setpolydash() (pdflib_tcl.c). - - - Changed all occurrences of atol() in the wrapper code to Tcl_GetInt() - or Tcl_GetLongFromObj() with appropriate error handling (pdflib_tcl.c). - - - Implemented suitable conditionals to allow for compiling the Tcl - wrapper with different versions of Tcl. This was necessary because of - the Unicode support which is only available in Tcl 8.2 (pdflib_tcl.c). - - -Documentation -============= - -- Addes a description of the PDFlib commercial license to the distribution - (PDFlib-license.pdf). - -- Introduces javadoc comments. - - -V2.10 (December 13, 1999) -========================= - -New features and API -==================== - -- Makes the page dimensions adjustable after starting a page, using - PDF_set_parameter (p_basic.c). - -- Made a variety of changes to make PDFlib work when compiled on - EBCDIC-based systems (most *.c, p_intern.h). - -- Made the Zlib compression level configurable (p_basic.c, p_stream.c). - -- Switched to in-core PDF generation through the new pdf_streams - interface. This also allows us to compress page content streams - and to simplify handling of compressed data streams (all *.c, p_intern.h). - -- Implements transparency support (masking by position or color) (p_gif.c, - p_png.c, p_image.c, p_intern.h). - -- Implements a PNG handler (p_png.c, pdflib.h, p_intern.h). - -- Font handling: - - - Implemented support for null characters in text strings for all - language bindings (p_text.c, bind/*/*.c). - - - Implemented support for CID fonts and CMap encodings (p_font.c, p_cid.h). - - - Implemented underlined text (except for CID fonts) (p_text.c). - - - Implements support for user-defined encodings, and includes - a sample encoding file (p_fonts.c, fonts/pdflib.upr, fonts/latin-2.enc). - - - Implements EBCDIC encoding (p_font.c, e_ebcdic.h, p_intern.h, - p_metrics.h, util/compile_metrics.c). - - - Implements support for PFB PostScript font files (p_font.c). - - - Implements support for PFM PostScript font metrics files (p_pfm.c). - -- Updates to the AFM parser (p_afmparse.c, p_afmparse.h): - - - The FONTBBOX is read as float which is required by the 4.1 spec. - - - Recognizes Multiple Master fonts by FamilyName ending in " MM". - - - Allows the WEIGHT entry to contain more than one word. - -- Implements limited Multiple Master handling for an in-house - application (p_font.c): - - - As in PostScript, MM handling is transparent at the API level. All - MM handling is done by extracting the parameters from the font name. - - - All instances of an MM font are required to have the same metrics - (i.e., no support for /Width axis). - - - The required AFM file is that for the master. - -- Implements PDF_skew() in order to provide for a full set of coordinate - transformation functions (p_gstate.c). - -- Reactivates ASCII85 encoding which lay dormant in previous releases - (p_intern.h, p_filter.c). - - -Bug fixes and enhancements -========================== - -- Fixed a bug where PDF_moveto() wouldn't set the text position - correctly (p_text.c). - -- Corrects a small glitch where pdf_float() would return the - correct result string, but fails to use the supplied buffer (p_util.c). - -- Makes the PDF compatibility user-settable (again). The reasoning - behind this is not obvious, and discussed in the manual. If the - compatibility level is set to PDF 1.2, asking PDFlib to generate - any Acrobat 4 feature will result in a RuntimeError (*.c). - -- Adds a little PostScript utility for finding all glyph names in - a font (fonts/print_glyphs.ps). - -- Implements support for dynamically loading TIFFlib at - runtime (p_basic.c, p_tiff.c, p_intern.h). - -- Removed all references to PDFDocEncoding since it isn't required - for hypertext elements, and can't be used for text fonts (e_pdfdoc.h). - -- PDF_arc() implicitly moves to the beginning of the arc segment in - order to avoid unwanted connecting lines from the current point to - the beginning of the arc segment (p_draw.c). - -- All public PDFlib functions perform a simple sanity check on their - p argument before accessing any structure member. This reduces the - chances for a crash due to client-supplied NULL or rogue pointers (*.c). - -- Include the names of the language binding and the platform in the - /Producer entry (p_basic.c, p_intern.h, p_hyper.c, bind/*/*.c). - -- Added the width of the Euro character to the supplied internal and - external metrics tables (*.afm, p_metrics.h). - -- Replaced the AFM files with newer versions, and used the additional - data in the internal metrics tables. The kerning information - has been stripped for size and performance reasons (fonts/*.afm). - -- When user-requested encoding and font-supplied encoding didn't match, - PDFlib could try to reencode Symbol fonts with not adequate encodings - (like Symbol with Winansi) -- despite issuing a warning message - (p_font.c). - -- PDF_stringwidth() now takes the text state parameters into account, - and protects itself from empty strings (p_text.c). - -- Removed the pdf_begin_text() calls in all functions that set the - text state (p_font.c, p_text.c). - -- Do not set the leading parameter in PDF_setfont() since it may - override a leading value set by the user (p_font.c). - -- Changed the name of the pseudo encoding vector from "default" to - "host" (p_font.c, most bind/*/hello.*). - -- Checks the scale parameter of PDF_set_horiz_scaling() to be positive - (p_text.c). - -- Write the colormap for an image also in compressed or ASCII format - if requested (was previously the case only for the actual image - data, but not the colormap) (p_image.c). - -- The 'w' debug parameter for enabling or disabling warning messages - was erroneously implemented as 'e' instead. Now it works according - to the documentation (p_basic.c). - -- Adds (void) casts to several fputc() and fputs() calls. - -- Changes the PDF output to avoid unnecessary blanks aside self-delimiting - tokens in many places (most *.c). - -- Checks current font and font size in PDF_setfont() in order to eliminate - redundant setting. This requires initializing the current font to an - invalid value of -1 in PDF_begin_page() (p_font.c, p_basic.c). - -- Image handling: - - - When the error handler popped in for memory images with bad length it - would try to free not yet allocated memory. We guard against this by - prematurely setting the image file name to NULL (p_image.c). - - - The parameter checking code in PDF_open_image() and the documentation - didn't account for images with other than 8 bits per component - (p_image.c). - - - The test for the length of the image data in memory for PDF_open_image() - could still be wrong when bpc was smaller than 8 (p_image.c). - - - GIF images with a local colormap ended up with a colormap with all - black entries in the PDF because the local colormap was read when the - (wrong) global colormap was already written to the PDF (p_image.c). - - - Detect and correctly handle transparent colormap entries in GIF - images (p_image.c, p_gif.c, p_intern.h). - -- Changes the PATHSEP definition for VMS and moves HAVE_GETOPT to the - top of the include file (p_config.h). - -- The pdfgraph.c and pdfimage.c sample clients incorrectly advertised - a binary option in their usage messages although the option is no longer - available. - -- Check the parameters of PDF_scale() for zero values (p_gstate.c). - -- Introduce parenthesis in a set of critical macro definitions (p_gif.c). - -- Changed the text2pdf client to PDF_findfont/PDF_setfont instead of - the obsolete PDF_set_font(). - -- Unified the names of the encoding files to e_*.h (formerly *_e.h). - -- Removed the obsolete compatibility function PDF_set_font (p_font.c, - pdflib.h, bind/*/*.c, bind/perl/*.pm). - - -Build process, distribution, and platform support -================================================= - -- Removed the sample CGI script (bind/cgi). - -- Removed the pdfgraph demo program (clients directory). - -- Removed the optional getopt module (util directory, Makefile.in). - -- Adds support for the DJGPP compiler (p_config.h). - -- Adds support for libtool in order to cleanly deal with the gazillion - kinds of shared library support (configure.in, Makefile.in, test/Makefile.in, - pdflib/Makefile.in). - -- Introduces the new config directory for libtool and installation support - scripts. - -- Added the ANSI option for native HP compilers (configure.in). - -- Properly implements all configure switches for disabling the language - bindings (configure.in). - -- Starts adding support for OS/2 and VMS systems. - -- Adds support for EBCDIC-based systems, including source code changes - and an EBCDIC test in the configure script (configure.in). - - -Bindings -======== - -- SWIG: - - No longer automatically generates the wrapper file with SWIG due to - the necessary amount of manual changes in the wrapper files - (bind/*/Makefile.in). - -- C: - - The arguments to PDF_begin_page() were incorrectly cast to the wrong - type instead of float. Incidentally, a particular compiler incorrectly - produced zero values, thereby disclosing the bug in the source code by - a compiler bug (pdfclock.c). - -- C++: - - Implements support for strings containing null characters. - - - Added PDF_shutdown() to the PDF destructor (pdflib.cpp). - - - PDF_close_image() was missing from the C++ interface due to an - oversight (pdflib.hpp, pdflib.cpp). - - - Added -lstdc++ to the Makefile. - -- Java: - - On Windows separates the wrapper DLL from the PDFlib core DLL. - - - Implements support for strings containing null characters. - - - configure now looks in an additional subdirectory for the machine- - dependent JNI include file. Formerly it used $MACHDEP only, but - on some systems the subdirectory doesn't use the system version number - (configure.in). - - - Rewrote the wrapper code so that it does the right thing with Unicode - strings (pdflib_java.c). - - - Switched to a more object-oriented notation, and dropped the PDF_ - prefix from the names of the PDFlib Java methods (pdflib_java.c, *.java). - -- Perl: - - On Windows separates the wrapper DLL from the PDFlib core DLL. - - - Removed the unused and unsupported Makefile.PL. - - - Implements support for strings containing null characters. - - - Removed PDF_boot() and PDF_shutdown() which have accidentally been - included in the wrapper code (pdflib_pl.c, pdflib.pm). - - - Integrated wrapper code changes in order to make the PDFlib wrapper - compatible to versions of Perl newer thant 5.005_54 (pdflib_pl.c). - - - Added an export list to the pdflib Perl module. This makes it easier - to use our module along with other modules. Clients need no longer - write "package pdflib" at the beginning since all functions are - exported (pdflib.pm, hello.pl, pdfclock.pl). - -- Python: - - On Windows separates the wrapper DLL from the PDFlib core DLL. - - - Due to a necessary change in the name of the library, script must - now use "from pdflib_py import *" (instead of "pdflib"). - - - Implements support for strings containing null characters. - - - Removed PDF_boot() and PDF_shutdown() which have accidentally been - included in the wrapper code (pdflib_py.c). - - - Searches for the lib-dynload directory where to install the shared - library for Python (configure.in). - -- Tcl: - - On Windows separates the wrapper DLL from the PDFlib core DLL. - - - Changed the name of the wrapper library from pdflib.so to pdflib_tcl.so - (pkgIndex.tcl). - - - Rewrote the wrapper code so that it does the right thing with Unicode - strings (pdflib_tcl.c). - - - Implements support for strings containing null characters. - - - Tcl 8.0 is now required because of the support for binary strings - (configure.in). - - - Removed PDF_boot() and PDF_shutdown() which have accidentally been - included in the wrapper code (pdflib_tcl.c, pkgIndex.tcl). - -- Visual Basic: - - Removed the Visual Basic binding since VB is much better covered by the - new PDFlib ActiveX control (bind/vb/*). - - -Documentation -============= - -- Added platform-specific readme files (doc/readme_.txt). - -- Added an appendix dealing with shared libraries to the manual. - -- Removed the redundant list of configure options from doc/install.txt. - -- Changed all occurrences of PDFlib's WWW address to www.pdflib.com. - - -V2.01 (August 3, 1999) -===================== - -New features and API -==================== - -- Extends the JPEG reader to allow for progressive JPEG images which are - supported in PDF 1.3/Acrobat 4 (p_jpeg.c). -- Applies a workaround for Photoshop-generated CMYK JPEG images. The - algorithm is taken from my jpeg2ps utility: detect the Adobe marker, - and write a suitable /Decode array to invert the 4 color planes (p_image.c). -- Introduces the concept of a "default" encoding which evaluates to - macroman or winansi according to the current platform. This facilitates - writing identical test programs for all platforms. All samples except - those for Visual Basic (which is Windows-only) have been adjusted to use - the default encoding. -- Streamlines the image file interface in several ways: (pdflib.h, p_intern.h, - p_image.c, p_gif.c, p_tiff.c, p_jpeg.c, p_ccitt.c, p_basic.c, - bind/vb/pdflib_vb.idl, bind/vb/pdflib_vb.def, clients/pdfimage.c, - bind/cpp/pdflib.[h|c]pp, test/pdftest.c). - - Removes PDF_place_inline_image() since it doesn't seem to bring any - real advantage to PDFlib clients. - - Removes PDF_put_image() since the image data is "parked" in the ouput - immediately on PDF_open_*(). The /Name key is no longer in Xobjects - since it was only required by PDF 1.0. - - Removes PDF_execute_image(). Instead, PDF_place_image() can now be - called multiple times for re-using image data. - - Consolidates all pdf_close_*() functions in PDF_close_image. All - image-specific stuff is now done at the end of PDF_open_*(). - - PDF_open_*() (along with the newly implied pdf_put_image()) is now - allowed outside of page descriptions. This requires pdf_put_image() - to do a pdf_begin_contents_section() in some cases. -- Adds several symbolic names for new destination zoom values in - PDF_add_pdflink() and PDF_add_locallink() (p_annots.c). -- Added an undocumented hook for placing existing images as thumbnail - for the current page. This is for a specialized application and is - not supported at the scripting layer (p_image.c, p_image.c, p_intern.h). -- Changed PDF_open_memory_image() to PDF_open_image(). This makes memory - images accessible from the scripting languages, and adds support for - file and url references as placeholders for the actual image data - (pdflib.h, p_image.h, p_intern.h, bind/vb/pdflib_vb.idl, bind/cpp/pdflib.hpp, - bind/cpp/pdflib.cpp). - - -Bug fixes and enhancements -========================== - -- A static resource configuration file (pdflib.upr) was always opened - when the client dynamically added resources. We skipped the file open - step since it's well reasonable to work with dynamic configuration - exclusively (p_util.c). -- Fixes a crash due to an uninitialized member of the PDF struct - (resourcefile_loaded). The bug showed up when trying to use non-standard - fonts (p_basic.c). -- Added a number of casts to avoid assignments to variables which are - never used. This basically affected the contents of comment and notice - lines in AFM files, which are not being used (p_afmparse.c). -- Merged the metrics files for macroman and winansi core metrics - (p_metrics_win.h, p_metrics_mac.h) to a single file (p_metrics.h, - p_font.c, Makefile.in, pdflib/Makefile.in, PDFlib.hqx, *.dsp) -- Makes DLLMain only visible when PDFLIB_EXPORTS is defined (p_basic.c). -- Changed the default page transition duration to 0 in order to avoid - unnecessarily writing the duration key to all page dictionaries (p_hyper.c). -- Changes to example path prefix in pdflib.upr to make it clearer that - the upr file has to be adjusted before it can be used (fonts/pdflib.upr). -- The debug flags didn't work due to a typo (p_basic.c). -- Debug flag 'u' (don't unlink PDF file on error) was implemented the wrong - way, and didn't match the documentation (p_basic.c). -- Improves the memory management by avoiding "semi-allocated" aggregated - objects. This involves subtle changes around the realloc() calls, - and cleaner initialization of the reallocated data. The benefit of this - shows up in memory-out situations when the error handler pops in and tries - to free memory blocks which are not completely initialized. This may - especially happen in multi-threaded environments (p_intern.h, p_basic.c, - p_font.c, p_images.c, p_hyper.c). -- Fixes some inconsistencies related to link border style, color, and - destination zoom (p_annots.c). -- Removed the beveled, inset, and underlined link border styles since they - don't work as advertised in the PDF specification (p_annots.c, pdftest.c). -- Improves the handling of XObject resources: formerly all Xobjects used - in the document up to the current page had been placed in the page's - resource list, potentially cluttering up the print stream generated for - the PDF. Now we only list the XObjects which are actually used on the - current page. This change will not affect Acrobat's viewing behavior. -- The bpc and components values of TIFF image weren't always properly - reported by TIFFlib. We improved this by using TIFFGetFieldDefaulted() - instead of TIFFGetField() for retrieving these (p_tiff.c). - - -Build process, distribution, and platform support -================================================= - -- Several improvements in the configure machinery (configure.in, Makefile.in): - - Added a --without-cxx option to the configure script in order to make - life easier on systems where the C++ is not correctly recognized. - - The include and lib paths for perl/zlib/tifflib shown with - "configure --help" had some differences from the actual spelling of - the supported options. - - Included a number of changes to the configure script required to make - the shared library versioning work on NetBSD systems. - - The --with-perlincl option for configure didn't work. - - Added a number of conditionals for the Cygwin environment. - - Always puts the version number in the file names of the shared and - static PDFlib libraries. Previously the static library ended up without - a version number in its name, possibly leading to mismatches with later - versions. - - Introduces configure variables for the names of the shared and static - libraries. This allows us to easily build the "other" library (as opposed - to the one specified when configure was run) as well. -- Removes the -g option from all Makefiles (pdflib/Makefile.in, - clients/Makefile.in, util/Makefile.in, bind/c/Makefile.in, - bind/cpp/Makefile.in, test/Makefile.in) -- The util Makefile is no longer called by default since the utility programs - are currently not needed by ordinary library users (Makefile.in). -- Notes that the util Makefile needs an installed PDFlib library - (util/Makefile.in). -- Assorted changes suggested for supporting the Cygwin32 development - environment. These involved several Makefile.in files, configure.in, and - C source modules which make use of getopt(). Most of the changes enhanced - the configuration machinery for other systems, too. -- Removes the install targets for the C and C++ bindings in the main - Makefile since those targets weren't used anyway (Makefile.in). -- Changes the $@.$(OBJ) construct in all Makefiles to the actual name of - the object (we don't want to use $< since it doesn't work everywhere) - (*/Makefile.in, bind/Makefile.in). -- Removed a leftover text file (util/readme.txt). -- Cleaned up the configuration information in the MSVC project files. - Most projects now only support a "Release" configuration; only pdflib - and test have "Debug" configurations, too (pdflib.dsp, bind/*/*.dsp). -- Includes a separate project for building PDFlib as a static library - with MSVC. -- Better supports the Mac distribution (Makefile.in): - - Changes the CodeWarrior project file name suffix from the odd mu - character to the more Unix-friendly .mcp. Since the project file - doesn't contain a resource fork, there's no need to use binhex (.hqx) - encoding. - - Convert the lineends in all relevant text files to the Mac convention. - - Implements a procedure for setting the correct file types for all - relevant files (uses a utility program on the Mac). - - Makes a self-extracting distribution fileset for the Mac. - - Changes the Mac build of the shared library to link static C runtime - libraries (instead of the previously used DLLs). This avoids the need - for certain Metrowerks libraries at runtime (PDFlib.hqx). - - Expands the Macintosh project file with support for the Java/MRJ, Python, - Perl, and Tcl bindings. - - -Bindings -======== - -- C: - - One of the test programs didn't check the return value of PDF_open() - (pdfclock.c). - - Corrected a typo in the clean target of the makefile (Makefile.in). - -- C++ - - Changes the C++ wrapper such that setting the define BROKEN_STRINGS - reverts from ANSI C++ string handling to plain old C char pointers. - As it turned out, ANSI C++ strings are badly supported by many - compilers. Besides, there was a typo in the old construct (pdflib.hpp, - pdflib.cpp). - -- All SWIG bindings - - Introduces export pragma for exporting PDFlib routines for the SWIG - bindings on the Mac (pdflib/pdflib.i, bind/*/pdflib_*.c) - -- Java: - - Makes the Java binding work with the Macintosh Runtime for Java (MRJ) - 2.1 (PDFlib.mcp). - - The pdflib Java initialization sleeps some time if the shared library - cannot be loaded. This is a benefit on systems where the Java console - immediately disappears on exit. - - The MSVC project file for the Java binding used file names with the - path of a beta version for all source files (Java.dsp). - -- Perl: - - The DEFINES variable was missing in the definition of CFLAGS - (bind/perl/Makefile.in). - - Makes the Perl binding work on the Macintosh (PDFlib.mcp). - - Includes a first version of a MakeMaker-compatible Perl script for - generating a Makefile which more closely fits the Perl environment. - The Perl-generated Makefile can be used instead of the configure- - generated one in bind/perl. Note that the Perl script itself must be - generated by the configure script. - - Notes how to build the PDFlib Perl binding with recent versions of - Perl, e.g. 5.005_57 (bind/perl/readme.txt). - -- Python: - - The DEFINES variable was missing in the definition of CFLAGS - (bind/python/Makefile.in). - - Makes the Python binding work on the Macintosh (PDFlib.mcp). - - Makes the test programs exit cleanly in case of error (hello.py, - pdfclock.py). - -- Tcl: - - The Tcl package index file didn't get updated properly due to - the LD_LIBRARY_PATH variable not being properly exported - (bind/tcl/Makefile.in). - - Fixed a typo in the hello test program. Apparently it worked correctly - anyway because of some particular circumstances and missing type - checking in the SWIG-generated code (hello_tcl.pdf). - - Makes the Tcl binding work on the Macintosh (PDFlib.mcp). - -- Visual Basic: - - The return value of all image open functions was erroneously declared - void instead of int. We had to change the GUID after this correction, - but the 2.01 API lost some image functions anyway (pdflib_vb.idl). - - -Documentation: -- Slightly expands the comments in pdflib.upr. -- Adds several clarifications and minor additions to the manual, and cuts - down the size of the PDF manual by optimizing font and image handling. -- Adds information to the manual about configuring the shared libraries - for scripting under Unix, Windows, and Mac. -- Adds descriptions of the few new features to the manual. -- Removes the bind/*/pdflib_*.doc text files since they don't add any - real value to the big PDFlib manual which is supplied in PDF format. -- Brings the sections in pdflib.h in sync with the sections in the main - manual (although the SWIG-generated doc files are no longer distributed). - - -V2.0 (June 30, 1999) -===================== - -Bug fixes and enhancements: -- Implements a better scheme for making sure the ordering constraints - for PDF page descriptions are obeyed while not bothering library - clients with most of the details (p_gstate.c, p_draw.c, p_text.c). - The remaining constraints are documented in the manual. - - -Build process, distribution, and platform support: -- Further tweaks the support for shared libraries on OpenStep 4 (configure.in). - - -Bindings: -- All bindings: - - The shared libraries built for a specific language binding inadvertently - referred to a hard-coded path to the actual PDFlib library (../../pdflib). - In order to avoid this, the -L and -l options are used instead of - supplying the relative name of the library file for linking the - shared libraries or test programs (bind/*/Makefile.in, configure.in). - This means LD_LIBRARY_PATH has to be set for testing. - -- Java: - - Removes the pointless import statement from the Java samples - (hello.java, pdfclock.java). - -- Tcl: - - Added LD_LIBRARY_PATH when generating the Tcl package index file - in order to find the PDFlib shared library (bind/tcl/Makefile.in). - - -Documentation: -- Explains more of the PDF graphics model, and documents the - restrictions and interactions among graphics-related functions - (doc/PDFlib.pdf). - - -V1.92 (June 27, 1999) -===================== - -Bug fixes and enhancements: -- PDF_translate() erroneously used the same value for both coordinates - (p_gstate.c). -- A subtle "unreachable code" warning was issued by the Watcom - compiler, and he was right (p_util.c). -- Fixed a bug in the GIF code which caused a crash on the Mac due to - an improper variable initialization. The bug had been introduced - in the transition to thread-safe GIF handling in 1.91, and didn't - affect other platforms. -- Cleaned up several places which look like empty statements within - a conditional (p_gif.c). -- Slightly changes the PDF output. Although legal PDF, some properties - caused problems with PDFviewer, a non-Adobe PDF viewer for OpenStep - written by Detlev Droege: - - Don't count the newline character into the /Length key of colormap - objects because this leads to problems in the PostScript output - generated from the PDF (p_image.c). - - Don't compress inline images (p_image.c). -- A missing initialization caused a crash on Windows (p_hyper.c). - - -API: -- Implemented PDF_set_fillrule() for setting the area algorithm used - by PDF_fill(), PDF_fill_stroke(), PDF_closepath_fill_stroke(), and - PDF_clip() (pdflib.h, p_gstate.c, p_draw.c). This change was - requested and implemented by Evgeny Stambulchik - . -- Allows for dynamic font configuration by adding all UPR categories - to the list of supported parameters in PDF_set_parameter() (p_basic.c, - p_util.c). - - -Build process, distribution, and platform support: -- Added some compiler-dependent conditionals in order to make the - C++ binding work with non-ANSI compilers (bind/cpp/pdflib.hpp, pdflib.cpp). -- Improves compatibility with OpenStep 4.x: - - Added an include file required for getopt (util/compile_metrics.c). - - Enhanced configure for shared libraries on OpenStep 4.x (configure.in). - - Don't build the C++ binding (configure.in). -- Removed the additional Makefiles for MS VC++ and the complete port - subdirectory from the distribution (port/msvc/*). - - -Bindings: -- SWIG: - - Made PDF_boot() and PDF_shutdown public in order to avoid problems - with the SWIG wrapper files which may use them (pdflib.h). - - Made the exception jump buffers for the SWIG bindings static which - they should have been anyway (pdflib.i). - - Adds the define PDFLIB_STATIC to the project files for the SWIG - bindings on Windows because we don't want to export the core - PDFlib functions from the DLL in the SWIG case. - -- Java: - - Adds a MS VC++ project file for the Java binding (bind/java/Java.dsp). - -- Tcl - - Adds a MS VC++ project file for the Tcl binding (bind/tcl/Tcl.dsp). - -- Perl - - Adds a MS VC++ project file for the Perl binding (bind/perl/Perl.dsp). - - Introduces patches and quirks to support PDFlib with ActivePerl on - Win32. Although our configuration works for a certain software - combination, all issues are documented (pdflib/pdflib.i, perl/readme.txt). - - Changed the order in which Perl executable names are searched. The - more likely name "perl" now is searched first (configure.in). - - Don't map bool to char in the Perl module on NeXT, since the Perl - include files contain special handling for bool which breaks with our - usual defines (configure.in, bind/perl/Makefile.in). - -- Python - - Adds a MS VC++ project file for the Python binding (bind/python/Python.dsp). - - -Documentation: -- doc/compatibility.txt had some deprecated advice on the use of PDF_close(). -- Added several clarifications and corrections to the manual. -- Adds a table of tested version numbers for the language bindings to the - manual. -- Reduced the number of fonts used in the manual. -- Delivers the manual in PDF 1.2 format to avoid triggering a PostScript - error when printing PDF 1.3 files with color images from Acrobat 3. -- Changed the page size format of the manual in order to cut down the - total number of pages. - - -V1.91 (June 18, 1999) -===================== - -Bug fixes and enhancements: -- Fixed a typo involving a printf %s format in an error message (p_font.c). -- Fixed two NULL pointer accesses for AFMs without a Weight entry - (p_afmparse.c, p_font.c). -- Extends the AFM parser which was required for correctly processing certain - non-Adobe AFM files (p_afmparse.c): - - Added the new key "Characters" to the AFM parser. The value is ignored - since it is duplicated in "StartCharMetrics". - - Changes the handling of the "Version" key in AFMs such that arbitrary - strings are allowed after the keyword, not only single tokens. - - Changes the handling of the "Encoding" key in AFMs such that it is - optional, not required (p_afmparse.c). -- Allow blank lines and comment lines in upr files (p_util.c). -- Removed the remaining non-const globals in the GIF module, thus making - GIF processing thread-safe (p_gif.c, p_intern.h). -- Adds multithreading for Win32 to the test bed (test/pdftest.c). This - nicely demonstrates PDFlib's thread-safety. -- Changes the debug configuration and output machinery to a more flexible - system with control over individual debug facilities. -- Adds const to the PDF_set_font declaration and definition. -- Removed sys_errlist from makepsres in order to make it POSIX compliant. -- Added some cleanup code for places discovered with a purify session: - - The resource handling machinery didn't close the handle to the - resource file (p_util.c). - - The client-provided resource file name wasn't freed (p_basic.c). - - The base structure for ligatures in the AFM parser wasn't freed - (p_afmparse.c). -- Changed the cleanup routines to make sure the output file is closed - in case of error (p_basic.c). -- Two non-initalized members of the PDF struct caused a core dump at - clean-up time under rare circumstances (p_basic.c, p_image.c). -- Adjusted the output format of float values to the limits documented in - the PDF spec (p_util.c). -- The annotation border style and color were not correctly initialized - due to a typo (p_basic.c). -- The transition info didn't get properly initialized (p_hyper.c). - -API: -- (Again) bundles PDF_close_file() and PDF_close_fp() to PDF_close() since - clients should not be affected by the way in which the PDF had been - opened. -- Slightly rearranged some functions to other C modules in order to - make the API structure and manual clearer. -- Removed PDF_finalize() from the API and reworked PDF_delete() so - that it may be used for cleanup in case of error. -- Changed the error handler's signature to include PDF * to make it - easier for client-supplied handlers to do a PDF_delete(p) (p_basic.c, - p_intern.h, pdflib.i). -- Changed the first argument of the memory management procedures back - to PDF *, since the client can retrieve his own opaque pointer via - PDF_get_opaque(). - - -Build process, distribution, and platform support: -- Added several casts in order to pacify the CodeWarrior compiler. -- Added a Macintosh-encoded variant to the sample text in pdftest.c. -- The configure script set the TIFF include path even when no TIFF support - was installed/found (configure.in). -- Adds the AFM files to the distribution (again), and moves pdflib.upr to - the directory where the AFMs live (fonts/*.afm, fonts/*.upr). -- Adds a --with-debug option to the configure script which activates the - debugging facilities, and implies building PDFlib as a static library. -- Adds a test for the JPEG library to the configure script since the - JPEG library is needed by some versions of the TIFF library. -- Changes a couple of places for compilation with the Watcom compiler: - - Maps the __WATCOMC__ #define to WIN32 (p_config.h). - - Introduced a typedef for the first function argument of PDF_new2() - since the Watcom compiler issues a dubious warning otherwise (pdflib.h). - - Includes io.h for the unlink() declaration (p_basic.c). -- Changed the sample images included in the distribution (pdflib.gif, - tm.g3, acroweb_j.tif) -- Removed the makepsres program from the distribution. -- Adds compiler optimize flags by adding $CFLAGS to $DEFINES (configure.in). - - -Bindings: -- All SWIG bindings: - - The dist target in the main makefile called the version target, resulting - in updated access times for the SWIG-generated wrapper files. This in - turn resulted in SWIG being launched unnecessarily on the client system. - We now simply touch the wrapper files before preparing the tar file. - -- Java: - - PDF_boot() and PDF_shutdown need not be available to the Java API - since PDFlib booting is done automatically for the Java binding. - - The hello example didn't obey the new PDF_findfont() semantics - (bind/java/hello.java). - -- Perl: - - Fixed a typo (1 should be -1) in the font error handling line (hello.pl). - -- C: - - Moved hello.c and pdfclock.c to a separate directory bind/c. - - A bug in the configure.in script prevented the test rules for the C - and C++ bindings from being executed. - - The C hello example didn't obey the new/open_file semantics - (bind/c/hello.c). - -- C++: - - Renamed the bind/c++ directory to bind/cpp in order to avoid problems - with some older build environments (Makefile.in, PDFlib.dsw, configure.in). - - Reworks the C++ binding in order to make it work with the Watcom compiler: - - Don't use namespaces - - Special string handling, including conversion to chars. - - Adds a macro to change the conversion of C++ string to C chars since - Watcom doesn't support the ANSI conforming c_str() method. - - Removes the page loop and the sleep() call which had inadvertently - been left over. - - A bug in the configure.in script prevented the test rules for the C - and C++ bindings from being executed. - - Changed the PDF constructor in order to allow for client-supplied - error and memory management routines, and adds default NULL values for - these. - - -Documentation: -- Switches to version 7 of the Aladdin Free Public License, and includes - the license text as PDF (doc/license.pdf). -- Includes brief API documentation files for the SWIG-generated language - bindings (bind/*/*.doc). -- Includes the updated and reworked edition of the PDFlib manual - (doc/PDFlib.pdf). - - -V1.90 (June 2, 1999) -==================== - -New Features: -- Makes PDFlib thread-safe by removing the remaining few writable globals. -- Use magic numbers for image file formats (imagepdf.c) -- Supports Unix PostScript Resource files (*.upr) for describing the AFM - and font file names, and an environment variable pointing to the resource - file. -- User-defined document information field (in addition to Title, Author, etc.) -- Unicode-enables bookmarks, text annotations, and document info entries - (p_hyper.c, p_annots.c, p_text.c). -- Changed the encoding vectors according to PDF 1.3. The most relevant - change is the inclusion of /Euro in WinAnsi and PDFDoc encodings - (ansi_e.h, pdfdoc_e.h) -- File attachment, launch, link, weblink and text annotations (p_annots.c). -- Add file type and creator on the Mac (p_basic.c). -- Nested bookmarks (p_hyper.c). -- Changes the API name of the bookmark function from PDF_add_outline to - the more intuitive PDF_add_bookmark (p_hyper.c) -- Removes the limits on number of pages, page contents, and number of objects - and introduced dynamic reallocation (p_hyper.c, p_basic.c, p_annots.c). -- Generates a PDF-1.3 header (Acrobat 4 files). According to the PDF spec - this should work OK also for older viewers as long as no PDF 1.3 - specific feature is used in the PDF file. -- Introduces Zlib compression for images and file attachments. -- Completely reworked the font handling. Font metrics caching now avoids - many AFM lookups, which dramatically speeds up PDFlib (up to a factor of 20!). -- Implemented in-core font metrics data. This completely eliminates the - need for external AFM files. Using the supplied utility compile_metrics - arbitrary metrics files can be compiled into the PDFlib source code. -- Adjusted the page size validation to Acrobat 4's larger limits (p_basic.c). -- New functions to query current font name and size (p_font.c) -- Introduced version numbers for the shared library and versioning schemes - for the scripting API (except Python) -- Eliminated all enums at the API level and replaced them with string - arguments. -- Eliminated the individual PDF_close_[TIFF|GIF|JPEG|CCITT|memory_image] - since PDF_close_image handles it all. -- User-adjustable debug level. -- Introduced PDF_new(), PDF_new2(), and PDF_delete, as well as PDF_open_file() - and PDF_close_file() and PDF_open_fp() and PDF_close_fp(). -- Made the page size parameters float in order to accomodate PDF 1.3. - - -Bindings: -- Largely improved the Perl, Tcl, and Python bindings. -- Introduced the Java binding via JNI (bind/java). -- Introduced a C++ wrapper class for PDFlib (bind/cpp). -- Introduced versioning if the language supports it (currently - Perl and Tcl; the Java binding uses transparent shared library versioning). -- Binds the TIFFlib and zlib libraries into the shared library for - the PDFlib scripting bindings, thereby making the TIFF and compression - features available to all SWIG bindings. -- Improved the SWIG-generated documentation for the scripting APIs. -- Introduced language-specific exception handling as offered by SWIG. - Exception handling for Java is done outside of SWIG. -- Explicitly sets the "C" locale in order to avoid the Java VM messing up - our decimal separators by setting a bad locale. -- Introduced a Visual Basic binding with a specialized DLL and a type - library. - - -Other: - -- Restructured the distribution directory tree. -- Streamlined the API for better scripting support. -- Added a file which documents changes to the API. -- Introduced versioning also at the API level and in the shared object naming. -- Changed the error handler interface to a fixed string, as opposed to a - variable number of arguments. -- Introduced error/exception classes which replace the former - error types, and are passed through to the scripting API. -- Reworks and cuts down the AFM parser, and makes it re-entrant. -- Installs NULL error and warning handlers in TIFFlib in order to - avoid messages from opening corrupt TIFF files. The caller will be - notified via the return code. -- Introduced "const" for all char * arguments in the API. - - -V1.0 (February 1999) (not publicly released) -============================================ - -No new featues, only bug fixes and improved platform support. - -Platform support: - -- Changed all library clients so that main() is declared with return - type int. -- Many casts and other minor changes in order to get rid of - MS Visual C++ 6.0 warnings (*.c, *.h). -- Included project and workspace files for MS Visual C++ 6.0 in the fileset - (PDFlib.dsp, PDFlib.dsw). -- Removed Watcom makefile from the fileset (makefile.wat). -- Switch to autoconf support (configure, configure.in, Makefile.in) -- Added Mac build support and file type/creator entries (p_basic.c) - - -Bug fixes: - -- Extended close routine (p_gif.c, p_jpeg.c) -- Page height and width were exchanged in the interface of PDF_begin_page() - as well as in the manual. Funnily enough, the MediaBox was also written - with both in the wrong order, thereby correcting things. However, the - demo clients used the parameters in the intended order. This fix only - clarifies the meaning of width and height, but doesn't change the - behavior of clients. -- PDF output file is no longer closed in the library in order to - be consistent with the opening in the client. This INCOMPATIBLE - change means that all library clients now must close the PDF output - file themselves! -- Fixed a core dump bug in the TIFF handler (p_tiff.c) -- Fixes bug where a font could get written to the PDF with wrong - encoding information. - - -V0.7b2 (August 1998) (only for a single customer) -================================================= - -New features: - -- Added CCITT support for passing through G3 or G4 compressed - bitmap data (p_ccitt.c, pdf.h). -- Changes to the image interface (p_ccitt.c, p_jpeg.c, p_tiff.c, - p_gif.c, pdf.h) - -Bug fixes: - -- Changed the get_2bytes macro to a function since the macro - didn't guarantee the evaluation order, which lead to problems - when analyzing JPEGs on BeOS (p_jpeg.c). -- Added a check for Acrobat-compatible page size (1"-45", or - 72pt-3240pt) in PDF_begin_page(). This is necessary to work around - restrictions in Adobe's Acrobat implementation (p_basic.c). - -Minor enhancements: - -- Several makefile cleanups (makefile.gcc). - - -V0.6 (08 July 1998) -=================== - -New features: - -- Added SWIG support, as suggested and basically implemented by - Rainer Schaaf (Rainer.Schaaf@T-Online.de). SWIG support allows us - to use PDFlib routines from Tcl, Perl, and Python. - (makefile, pdflib.i, pdftcl_wrap.c pdfperl_wrap.c, pdfpython_wrap.c, - pdflib.pm). -- New directory structure: BINDINGS directory contains subdirectory - for several PDFlib language bindings. Currently these are - C, CGI, Perl, Tcl, Python (yes, I know that CGI is not a language). -- Included scripting samples (BINDINGS/*/pdfclock.[pl|tcl|py], - BINDINGS/*/hello.[pl|tcl|py]). -- Added new function PDF_setpolydash, suggested and implemented - by Evgeny Stambulchik - (p_gstate.c, pdf.h). - -Bug fixes and minor enhancements: - -- Fix trivial (but fatal) free/fclose bug (p_font.c) -- Slightly change syntax of pdfgraph sample program: fill and - stroke is denoted by 'F' instead of 'B' (pdfgraph.c) -- Shorten the version string (pdf.h) -- Add cast (p_basic.c) -- Conditionally typedef bool because of conflicts in VC++ (pdf.h and p_port.h) -- Add cast (p_font.c) -- Delete old BOOL typedef (pdf.h) -- Renamed function parseFile to pdf_parseFile in order to avoid name - clashes with other software packages. This change was requested - by Evgeny Stambulchik for the xmgr package. This package uses T1lib - which also includes a copy of Adobe's AFM parser. (afmparse.c, - afmparse.h, p_font.c). -- Fixed typo in the Goethe demo text (pdfdemo.c). -- Adjusted demo data to new setrgbcolor interface (test/graphdata). -- Add PDF_HAS_BOOL define. However, it doesn't really fix the multiple - boolean define/typedef/enum problem (p_port.h). -- Removed const from PDF_info struct members. This change is related - to SWIG support, although the necessity of the change is not yet - fully understood (pdf.h). -- Enhances the AFM parser to recognize AFM files according to the AFM 4.1 - specification, especially the "CharWidth" keyword. - - -V0.5 (25 February 98) -===================== -Portability aids, bug fixes and other improvements from several contributors: - -- JPEG images could be closed multiply (p_jpeg.c) -- Introduce Mac and Win32 porting defs (p_port.h) -- Use define for path separator which is needed for the Mac's ":" - (p_port.h, p_font.h) -- Rename structure member private to private_data for C++ compatibility - (pdf.h, p_font.c, p_gif.c, p_jpeg.c, p_tiff.c) -- NeXT portability: include libc.h (imagepdf.c, pdfclock.c, pdfgraph.c, - text2pdf.c) -- Don't use malloc.h (afmparse.c) -- Change variable handling in make build process (makefile) -- Fix bug in octal character representation (p_text.c) -- Introduce word and character spacing functions (p_text.c) -- Fix subtle bug in font embedding: fonts with additional data after - the zeros portion were not properly embedded (p_font.c) - -Environment bindings: -- Introduces BINDINGS directory which will collect several language and - environment bindings for PDFlib. -- Sample CGI script for the PDFclock example (BINDINGS/CGI/clock.cgi) - -Several bugfixes, due to Detlev Droege's comments after -testing with his PDFviewer: - -- Avoid empty /Filter arrays for uncompressed binary images (p_image.c). -- Change erroneous number of color components in demo page (pdfdemo.c). -- Implement consistency check for color components vs. color space - (p_image.c) -- Write binary magic number for all files (ASCII and binary) (p_basic.c). -- Change "Producer" to "Creator" in sample application (hello.c). -- AFM handler crashed in case the AFM parser gave up on certain AFMs (p_font.c). -- AFM parser didn't correctly handle newer version 4.0 AFMs (afmparse.c). -- Use AFM 4.0 key "StdVW" for a more accurate /StemV in font descriptor - (p_font.c). -- API CHANGE: Change RGB parameters from byte to float since - gray values are float parameters too (p_color.c). - - -V0.4 (8 September 97) -===================== -First public release. - -- Generating multiple PDFs with embedded images resulted in wrong - XObject numbers for the second and following PDFs. Use image_number - from the PDF structure instead of a static variable. - (p_image.c, p_basic.c) -- Makefile for Watcom C 10.6 included in the distribution, support - Windows build (makefile.wat). diff --git a/src/libs/pdflib/doc/pdflib/compatibility.txt b/src/libs/pdflib/doc/pdflib/compatibility.txt deleted file mode 100644 index c312739724..0000000000 --- a/src/libs/pdflib/doc/pdflib/compatibility.txt +++ /dev/null @@ -1,444 +0,0 @@ -API changes -=========== - -This file documents those API changes which affect -existing PDFlib client programs. Although we go to -some efforts in maintaining the existing API functions, -it is sometimes necessary to incorporate a few non-backward -compatible changes in order to streamline the API and -incorporate new or extended functions. - - -PDFlib 5.0.2 -============ -- COM: - - The functions PDF_setgray*() and PDF_setrgbcolor*() are no longer - available in the COM wrapper. These functions have been deprecated - since PDFlib 4. Workaround: use setcolor() instead. - - -PDFlib 5.0.1 -============ -- No changes which affect compatibility. - - -PDFlib 5.0.0 -============ - -- Several resource configuration mechanism are superseded by improved - mechanisms. However, the previous configuration scheme is still supported. - -- Introduced a dedicated PDFlibException class for Java. This may - require modifications to existing catch clauses. - -- The new C exception handling with PDF_TRY/PDF_CATCH makes old-style - error handlers obsolete. However, PDF_new2() will still accept error - handler callbacks. - -- The PDF_open_pdi_callback() has been slightly modified; this affects - only PDFlib customers who used this feature in a preliminary release. - -- Changed the default value of the "inheritgstate" parameter to false. - -- By default, PDFlib generates PDF 1.4 (Acrobat 5) output. This can be - modified with - - PDF_set_parameter(p, "compatibility", "1.3"); - -- The following features have been removed: - - PDF_set_parameter(p, "compatibility", "1.2"); - - Careful programming can still produce PDF 1.2 compatible documents, - albeit with a PDF 1.3 header entry. - -- The following functions have been removed: - - PDF_open_pdi_mem() (only implemented in custom versions of PDFlib+PDI) - Change existing calls to the following sequence: - - PDF_create_pvf(...); - PDF_open_pdi(...); - -- C++ binding: - Switches to new-style C++ exceptions by default (as opposed to installing - an old-style client-supplied error handler callback function). - -- PHP binding: - Those very old API functions have been removed from the wrapper which - stemmed from the prehistoric era before PDFlib GmbH officially supported - the PHP wrapper. These functions have never been documented in the PDFlib - manual, but have been kept in the PHP wrapper for compatibility reasons. - In order to facilitate maintenance we dropped these functions. - - The pdf_open_memory_image() API is not affected since it actually added - new functionality. Although PDFlib GmbH does not support this function it - still works. - - The virtual_dir support has also been dropped. This feature is rather - confusing since it is not supported on all platforms and configurations. - In addition, it conflicts with the new SearchPatch facility in PDFlib. - Finally, it didn't work when generating PDF files with PDF_open_file(). - - -PDFlib 4.0.2 and 4.0.3 -====================== - -- No new functions, but new features which do not affect the - binary interface (such as support for OpenType fonts). - - -PDFlib 4.0.1 -============ - -- No changes which affect compatibility. - - -PDFlib 4.0 -========== - -- The following functions have been added to the PDFlib API: - - PDF_open_pdi() - PDF_close_pdi() - PDF_open_pdi_page() - PDF_close_pdi_page() - PDF_get_pdi_parameter() - PDF_get_pdi_value() - - PDF_begin_pattern() - PDF_end_pattern() - - PDF_begin_template() - PDF_end_template() - - PDF_setcolor() - PDF_makespotcolor() - - PDF_arcn() - PDF_add_thumbnail() - - PDF_initgraphics() - PDF_setmatrix() - -- The following functions are now deprecated (use PDF_setcolor() instead): - PDF_setgray_fill - PDF_setgray_stroke - PDF_setgray - PDF_setrgbcolor_fill - PDF_setrgbcolor_stroke - PDF_setrgbcolor - -- PDF_endpath() has been re-implemented with slightly different semantics. - -- The FontTT resource category has been removed. TrueType fonts can now be - listed along with PostScript fonts in the FontOutline category. This - change affects only a few customers who had access to the TrueType - feature before PDFlib 4.0 was released. - - -PDFlib 3.03 -=========== - -- This release doesn't add nor remove any function, but introduces a - new parameter: "fontwarning" - -- The deprecated function PDF_endpath() raises a non-fatal exception - (which can be suppressed). - - -PDFlib 3.02 -=========== - -This release doesn't add nor remove any function. However, since PDFlib 3.01 -removed some obsolete and undocumented functions, 3.02 can be considered -incompatible to 3.0. For this reason, the libtool version number has -been increased such that PDFlib 3.02 is not binary compatible, although -for users of the documented PDFlib 3.0 API it is completely backward -compatible. - - -Changes in PDFlib 3.01 -====================== - -This is a maintenance release which is binary compatible with 3.0. -However, a few bug fixes may result in different behaviour when -compared to 3.0. These are not incompatibilities, rather 3.0 behaved -in the wrong way which is now fixed. See the change log for details. - -- The following functions, which were no longer supported nor documented in - PDFlib 3.0 (but were still available), have been removed from all language - bindings which still included them. Use the appropriate substitute functions - as outlined below: - - PDF_open_TIFF use PDF_open_image_file(p, "tiff", filename, "", 0) instead - PDF_open_JPEG use PDF_open_image_file(p, "jpeg", filename, "", 0) instead - PDF_open_GIF use PDF_open_image_file(p, "gif", filename, "", 0) instead - - PDF_get_font use PDF_get_value(p, "font", 0) instead - PDF_get_fontsize use PDF_get_value(p, "fontsize", 0) instead - PDF_get_fontname use PDF_get_parameter(p, "fontname", 0) instead - PDF_get_image_height use PDF_get_value(p, "imageheight", image) instead - PDF_get_image_width use PDF_get_value(p, "imagewidth", image) instead - - PDF_set_fillrule use PDF_set_parameter(p, "fillrule", fillrule) instead - PDF_set_leading use PDF_set_value(p, "leading", leading) instead - PDF_set_text_rise use PDF_set_value(p, "textrise", rise) instead - PDF_set_horiz_scaling use PDF_set_value(p, "horizscaling", scale) instead - PDF_set_text_rendering use PDF_set_value(p, "textrendering", mode) instead - PDF_set_char_spacing use PDF_set_value(p, "charspacing", spacing) instead - PDF_set_word_spacing use PDF_set_value(p, "wordspacing", spacing) instead - PDF_set_duration use PDF_set_value(p, "duration", t) instead - PDF_set_transition use PDF_set_value(p, "duration", t) instead - - -API changes for PDFlib 3.0 -========================== - -- PDF_set_text_matrix() is no longer supported. Use PDF_scale(), - PDF_translate(), PDF_rotate(), and PDF_skew() instead, or PDF_concat() - if you actually have to deal with matrices. - -- PDF_findfont() no longer returns -1 on error, but raises an exception - which seems more appropriate to font misconfigurations (or spelling - errors in the font or encoding names). Although existing code need - not necessarily be changed (assuming an error handler is already in - place), the following change is suggested: - Change - font = PDF_findfont(p, fontname, encoding, embed); - if (font == -1) { - ... - } - - -- to -- - - font = PDF_findfont(p, fontname, encoding, embed); - -- The name of the pseudo encoding for the platform character set changed: - Change - PDF_findfont(p, fontname, "default", embed); - -- to -- - PDF_findfont(p, fontname, "host", embed); - -- The image functions have been consolidated into a single API function; use - PDF_open_image_file() instead of PDF_open_*(): - Change - PDF_open_GIF(p, filename) - -- to -- - PDF_open_image_file(p, "gif", filename, "", 0) - - PDF_open_TIFF(p, filename) - -- to -- - PDF_open_image_file(p, "tiff", filename, "", 0) - - PDF_open_JPEG(p, filename) - -- to -- - PDF_open_image_file(p, "jpeg", filename, "", 0) - - The old image functions are still available, though. - - -Java binding: - -- In the course of reworking the Java API all functions marked as obsolete - in the manual have been removed. Use the appropriate substitutes instead: - - open_TIFF - open_JPEG - open_GIF - - get_font - get_fontsize - get_fontname - get_image_height - get_image_width - - set_fillrule - set_leading - set_text_rise - set_horiz_scaling - set_text_rendering - set_char_spacing - set_word_spacing - set_duration - set_transition - -- Implements package support. Add the following line at the beginning of - all PDFlib client programs: - - import com.PDFlib.pdflib; - -- Switch to an object-oriented approach, and dropped the PDF_ prefix - from all method names: Change - - long p; - int font; - p = pdflib.PDF_new(); - if (pdflib.PDF_open_file(p, "hello_java.pdf") == -1) { - - -- to -- - - pdflib p; - p = new pdflib(); - if (p.open_file("hello_java.pdf") == -1) { - -- PDF_boot() and PDF_shutdown are no longer available, but shouldn't - have been used anyway. - - -Perl binding: - -- The name of the shared library changed, requiring a small change in scripts: - Change - use pdflib 2.10 - -- to -- - use pdflib_pl 2.10 - -- "package pdflib" is no longer necessary at the beginning of the Perl script. - -- PDF_boot() and PDF_shutdown are no longer available, but shouldn't - have been used anyway. - - -Python binding: - -- The name of the shared library changed, requiring a small change in scripts: - Change - from pdflib import * - -- to -- - from pdflib_py import * - -- PDF_boot() and PDF_shutdown are no longer available, but shouldn't - have been used anyway. - - -Tcl binding: - -- PDF_boot() and PDF_shutdown are no longer available, but shouldn't - have been used anyway. - - -Visual Basic binding: - -- There is no longer a dedicated VB binding; it is replaced by the - much more versatile ActiveX binding. This requires VB clients to - adapt their syntax to the ActiveX component. - - -API changes in PDFlib V2.01 -=========================== -- PDF_place_inline_image() is no longer supported; use PDF_place_image() - instead (same interface): - Change - PDF_place_inline_image() - -- to -- - PDF_place_image() - -- PDF_put_image() is no longer required. Instead, the image data is - "parked" immediately on PDF_open_*(): - Delete - PDF_put_image() - -- PDF_execute_image() is no longer required. Instead, PDF_place_image() - can be called multiple times for a given PDF: - Change - PDF_execute_image() - -- to -- - PDF_place_image() - -- The interface and functionality of PDF_open_memory_image() changed: - Change - int PDF_open_memory_image(PDF *p, unsigned char *buffer, - int width, int height, int components, int bpc); - -- to -- - int PDF_open_image(PDF *p, "raw", "memory", const char *data, long len, - int width, int height, int components, int bpc, NULL); - - -API changes in PDFlib V2.0 -========================== - -- All API functions with parameters of type "char *" changed to "const char *". - -- change - PDF_data_source_from_buf() - -- to -- - int PDF_open_memory_image(PDF *p, unsigned char *buffer, - int width, int height, int components, int bpc) -- change - PDF_set_text_matrix(PDF *p, PDF_matrix m); - -- to -- - void PDF_set_text_matrix(PDF *p, - float a, float b, float c, float d, float e, float f); - -- change - PDF_add_outline(p, text); - -- to -- - PDF_add_bookmark(p, text, -1, 0); - -- change - PDF_info *PDF_get_info(void); - -- to -- - PDF_set_info(PDF *p, char *key, char *value); - (after PDF_new() and PDF_open_*()) - -- change - PDF_image->width and PDF_image->height - -- to -- - PDF_get_image_width(PDF *p, PDF_image *image) - -- and -- - PDF_get_image_height(PDF *p, PDF_image *image); - -- change - PDF_info->error_handler = handler; - -- to -- - PDF_new2(handler, ...); - Watch out for the changed signature of the error handler. - -- change - void PDF_data_source_from_buf(*p, *src, buffer, len); - -- to -- - PDF_image *PDF_open_memory_image(p, buffer, width, height, components, bpc); - void PDF_close_image(p, image); - -- change - a4.width to a4_width etc. - -- change - PDF_image image; /* for PDF_open_[GIF|JPEG|TIFF|memory_image] */ - -- to -- - int image; - -- change - PDF_close_[GIF|JPEG|TIFF|memory_image]; - -- to -- - PDF_close_image(); - -- change - PDF_transition(p, type); - -- to -- - PDF_transition(p, "type"); - -- change - PDF_set_font(p, fontname, size, encoding); - -- to -- - int PDF_findfont(p, fontname, encoding, embed); - if (font == -1) - /* handle unavailable font */ - PDF_setfont(p, font, size); - - Note: the old PDF_set_font() is still available for compatibility. - -- change - PDF_stringwidth(char *text); - -- to -- - PDF_stringwidth(text, PDF_get_font(p), PDF_get_fontsize(p)); - -- change - PDF_open(filename); - -- to -- - p = PDF_new(); - if (PDF_open_file(filename) == -1) { ... } - -- or -- - p = PDF_new(); - if (PDF_open_fp(fp) == -1) { ... } diff --git a/src/libs/pdflib/doc/pdflib/readme-binary.txt b/src/libs/pdflib/doc/pdflib/readme-binary.txt deleted file mode 100644 index 8394b90597..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme-binary.txt +++ /dev/null @@ -1,43 +0,0 @@ -========================== -PDFlib binary distribution -========================== - -This is a binary package containing PDFlib, PDFlib+PDI, and -PDFlib Personalization Server (PPS) in a single binary. -It requires a commercial license to use it. However, the -library is fully functional for evaluation purposes. - -Unless a valid license key has been applied the generated PDF -output will have a www.pdflib.com demo stamp across all pages. -See the PDFlib manual (chapter 0) to learn how to apply a -valid license key. - - -C and C++ language bindings ---------------------------- -The main PDFlib header file pdflib.h plus a PDFlib library -is contained in the distribution. - -- On Windows, the DLL pdflib.dll is supplied along with the - corresponding import library pdflib.lib. In order to build - and run the supplied C/C++ samples copy these files to the - bind/pdflib/c or bind/pdflib/cpp directories. - - If you are working with Borland C++ Builder you must first - generate a new import library pdflib.lib from pdflib.dll - since Borland tools don't work with the Microsoft .lib format. - To do so, use the following command: - coff2omf pdflib.lib pdflib.lib - -- On Unix systems a static library is supplied. - -The bind/c and bind/cpp directories contain sample applications -which you can use to test your installation. - - -Other language bindings ------------------------ -Additional files and sample code for various languages -can be found in the bind directory. Note that not all -binary libraries for all language bindings may be present; -see our Web site for additional packages. diff --git a/src/libs/pdflib/doc/pdflib/readme-source-as400.txt b/src/libs/pdflib/doc/pdflib/readme-source-as400.txt deleted file mode 100644 index df6ad00e86..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme-source-as400.txt +++ /dev/null @@ -1,42 +0,0 @@ -========================================= -PDFlib and PDFlib Lite source for iSeries -========================================= - -How to compile PDFlib on iSeries (AS/400): - -1. Copy all source files and directories from the "../libs" - directory to a mapped network drive on your iSeries. - - -2. If you are running on an OS400 version < V5R0M0 the compiler - wouldn't allow you to compile C source code directly from the - IFS. In this case you need to copy all IFS source files into an - iSeries source file/member. Make sure that you create these - source files with CCSID 37 (US/Canada). - - CRTLIB LIB(PDFLIBSRC) - - CRTSRCPF FILE(PDFLIBSRC/QCSRC) RCDLEN(200) CCSID(37) - - CRTSRCPF FILE(PDFLIBSRC/H) RCDLEN(200) CCSID(37) - - CPYFRMSTMF FROMSTMF('/[SRCDIR]/libs/flate/adler32.c') - TOMBR('/qsys.lib/pdflibsrc.lib/qcsrc.file/adler32.mbr') - - -3. Compile all modules into one library. Use the following options - for the CRTCMOD command: - - CRTCMOD SYSIFCOPT(*IFSIO) TERASPACE(*YES *TSIFC) STGMDL(*TERASPACE) - - - Warning: if you compile PDFlib without Teraspace support, you - might get unpredictable results. - - -4. Create the PDFlib Service Program with the following command: - - CRTLIB LIB(PDFLIB) - - CRTSRVPGM SRVPGM(PDFLIB/PDFLIB) MODULE(PDFLIBSRC/*ALL) EXPORT(*ALL) - STGMDL(*SNGLVL) diff --git a/src/libs/pdflib/doc/pdflib/readme-source-mac.txt b/src/libs/pdflib/doc/pdflib/readme-source-mac.txt deleted file mode 100644 index 983638c34e..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme-source-mac.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================== -PDFlib Lite Source for Mac OS 9 -=============================== - -Note: -please see readme-source-unix.txt for information on using PDFlib on Mac OS X. - -To compile PDFlib with Metrowerks CodeWarrior, open the supplied -project file PDFlib.mcp with the Metrowerks IDE. The project file -contains targets for building a static PPC library - -Separate project files for building various C and C++ sample programs -can be found in bind/pdflib/c/samples.mcp and bind/pdflib/cpp/samples.mcp. -These can be used to test the newly created library. The tests create simple -command-line programs without any fancy user interface. - -Note that not all tests will succeed because they -need features which require commercial PDFlib products. - -In order to build a shared PDFlib library you'll have to define the -PDFLIB_EXPORTS preprocessor symbol (preferably in a new prefix file). - -In order to make the C and C++ samples work on OS 9 you must change the -SearchPath to use a Mac volume name instead of a relative path name, e.g.: - -"../data" ==> "Classic:software:pdflib-5.0.x:bind:pdflib:data" - - -Note that on OS 9 only C and C++ are available; other language -wrappers are no longer supported. All language wrappers are fully -supported on Mac OS X, though. diff --git a/src/libs/pdflib/doc/pdflib/readme-source-unix.txt b/src/libs/pdflib/doc/pdflib/readme-source-unix.txt deleted file mode 100644 index 976db4a63b..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme-source-unix.txt +++ /dev/null @@ -1,203 +0,0 @@ -=========================== -PDFlib Lite Source for Unix -=========================== - -Building PDFlib Lite --------------------- - -To start the PDFlib Lite build process on Unix, type - -./configure -make - -Several options can be used with the configure script in order to -override some default configuration options, or to assist configure -in finding some software locations on your machine. Type - -./configure --help - -before the make command in order to see a list of available configure -options. - -IMPORTANT: make sure to use only absolute path names for all custom -directories. Also, wildcards should not be used. This requirement is -necessary because otherwise the paths won't work as include paths with -compiler calls. - -If you want to use PDFlib on another machine, do not simply copy -the PDFlib source tree over. Instead, copy the distribution fileset -and re-run the configure script. Otherwise compiler, shared library -and installation settings could erroneously be taken from the first -machine instead of from the actual one. - - -Testing and installing the library ----------------------------------- - -Optionally, to run sample PDFlib applications in several programming -environments (including the scripting languages which have been -detected by configure), type: - -make test - -Note that not all tests will succeed. The failing tests require features -which are only available in the binary PDFlib distributions. - -In order to install the library and the support files for all detected -scripting languages, type - -make install - -Note that installing will usually require root privileges. - -If you want to install only selected parts (e.g., only the PDFlib -C library or the Perl support), type "make install" in the -respective subdirectory (e.g, bind/pdflib/perl). - - -configure troubleshooting -------------------------- - -The configure script helps to keep PDFlib portable across a wide variety -of systems, and to keep track of many different configurations and -the availability of features. Generally the script does a good job. -Given the huge number of different systems, configure may occasionally -fail in one of several ways: - -- failing to detect installed software - -- failing to complete all tests due to errors during script execution - -In the first case, you can help configure by finding out the necessary -paths etc. yourself, and supplying any required --with-... option on -the configure command line. - -In the second case, you either also can try to supply --with-... options -in order to prevent the failing test from being called, or abandon -the feature if you don't need it by supplying the value "no" to the -respective configure option, e.g., --with-tcl=no. - -If you can determine the cause of a failing configure script, we will -be happy to hear from you. Please supply your system details, the -feature/option in question, and a workaround or improvement if possible. - -The configure script may fail under Cygwin when trying to probe for languages -if path names contain space characters. -It's safer to disable language probing using --with-perl=no etc. - - -Forcing a certain compiler or compiler flags --------------------------------------------- - -You can set several environment variables before running the configure -script. These variables will be used in the generated Makefiles. The more -important ones are: - -CC The C compiler to use -CXX The C++ compiler to use -CFLAGS C compiler flags -LDFLAGS linker flags, such as additional libraries - -For example, the following works well on Solaris (in a csh environment): - -setenv CC /opt/SUNWspro/bin/cc -setenv CXX /opt/SUNWspro/bin/CC -setenv CFLAGS '-fast -xO3 -xtarget=generic' -./configure - - -Shared library support ----------------------- - -Language bindings other than C/C++ require shared library support for -PDFlib to work. By default, the PDFlib core library will be built as both -a static and a shared library if possible. - -C or C++ language clients must deploy libtool for using PDFlib, or install -the generated PDFlib library using "make install". - -PDFlib relies on GNU libtool for shared library support. libtool -shadows the object files and libraries with a layer of .lo and .la -files. The actual library files are placed in a subdirectory called -".libs". The PDFlib Makefiles and libtool will take care of correctly -building, testing, and installing these libraries. If anything goes -wrong on your system, read the manual section on shared libraries, -take a look at the contents of the .libs subdirectory, and observe -what the supplied Makefiles do for compiling, linking, testing, and -installing. - - -Auxiliary libraries -------------------- - -PDFlib includes portions of the libtiff, zlib, and libpng auxiliary -libraries as part of the source code package. These libraries have been -modified for use with PDFlib in several ways: - -- all function names are prefixed with a PDFlib-private tag -- code which is not required for PDFlib has been removed -- a number of portability changes have been applied - -Our build process directly links these libraries into the PDFlib binary, -regardless of whether a shared or static PDFlib is generated. -External versions of these libraries are not supported. - -Due to the prefixed function names an application can link against both -PDFlib (including all auxiliary libraries) and standard -versions of these libs without any name conflicts. - - -Querying PDFlib configuration info ----------------------------------- - -In order to find out details about PDFlib's version, configuration, -and use, the pdflib-config shell script can be used. It is built during -the configure run, and returns all information you'll need for PDFlib -deployment. Running the script without any options lists the supported -command line options. - - -Library version numbers ------------------------ - -Libtool-generated libraries such as PDFlib number their interfaces -with integer interface numbers (no subversions!). In addition to the -interface number, a revision number can be used. A particular library -supports a range of interface numbers, where the range can have a length -of one or more. In particular, libtool defines the following: - -CURRENT The most recent interface number that this library implements. -REVISION The implementation number of the CURRENT interface. -AGE The length of the range of supported interfaces (i.e., CURRENT - numbers). - -The following table relates PDFlib version numbers to the C:R:A library -versioning scheme used by libtool. Note that these numbers will not show -up in the PDFlib shared library file name directly, but in some modified form -which is system-dependent: - -PDFlib C:R:A comments ------------------------------------------------------------------------------ -3.00 0:0:0 first release based on libtool -3.01 0:1:0 maintenance release (bug: should have increased C since - undocumented functions were removed) -3.02 1:0:0 cleans up the non-incrementing glitch in 3.01 -3.03 1:1:1 maintenance release (bug: should not have increased A) -4.0.0b 2:0:2 new API functions (inherits the 3.03 bug) -4.0.0 2:0:1 cleanup for major release: repairs the 3.03 "age" bug -4.0.1 2:1:1 maintenance release -4.0.2 2:2:1 maintenance release -4.0.3 2:3:1 maintenance release -5.0.0 3:0:2 new API functions (bug: should have been 3:0:0 since - PDF 1.2 compatibility has been dropped) -5.0.1 3:1:1 maintenance release (trying to fix the 5.0.0 bug) -5.0.2 4:0:2 maintenance release, but also a few minor new features -5.0.3 4:1:2 maintenance release - -When the PDFlib core is built as a static library version numbers will not -be visible. However, since language bindings other than C and C++ are always -built as shared libraries, they will have version numbers visible on most -systems. - -Many thanks to Evgeny Stambulchik for leading me on the right track -with respect to libtool and library versioning schemes! diff --git a/src/libs/pdflib/doc/pdflib/readme-source-windows.txt b/src/libs/pdflib/doc/pdflib/readme-source-windows.txt deleted file mode 100644 index d294d9a6af..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme-source-windows.txt +++ /dev/null @@ -1,89 +0,0 @@ -============================== -PDFlib Lite Source for Windows -============================== - -Building PDFlib with MS Visual Studio 6 ---------------------------------------- - -To compile PDFlib with MS Visual Studio 6, open the supplied workspace -file PDFlib.dsw which contains several projects for the core library -and language bindings. Select the "pdflib" project to build a static library -pdflib.lib. - -The "pdflib_dll" project can be used to build a DLL version pdflib.dll. - -This will set the PDFLIB_EXPORTS #define. Client programs must define -PDFLIB_DLL before including pdflib.h in order to use the DLL. - - -The following configurations are supported: -- "Debug" -- "Release" will include a static version of the C runtime. -- "Release mtDLL" (only for target pdflib) builds a static library for - use with applications which use a multithreaded DLL version of the - C runtime (msvcrt.dll). - - -Sample applications: - -The examples_c.dsw and examples_cpp.dsw contain targets for a few -C/C++ sample applications. - -Note that not all tests will succeed because they -need features which require commercial PDFlib products. - - -Building PDFlib with MS Visual Studio .NET ------------------------------------------- - -Although the PDFlib packages do not contain dedicated project files for use -with Visual Studio .NET (aka VS 7), the project files and workspaces supplied -for use with Visual Studio 6 can be used. Proceed as follows to compile PDFlib -with Visual Studio .NET: - -- Open the workspace PDFlib.dsw with Visual Studio .NET -- A dialog box will pop up and ask - "The project 'Java.dsp' must be converted to the current Visual C++ project - format. ... Convert and open this project?" - In this dialog click "Yes to All". -- Proceed as described above for Visual Studio 6 -- Save the project files (will be done automatically upon exiting VS .NET) - - - -Building PDFlib with Metrowerks CodeWarrior -------------------------------------------- - -To compile PDFlib with Metrowerks CodeWarrior, open the supplied -project file PDFlib.mcp with the Metrowerks IDE. The project file -contains targets for building a static PPC library - -Separate project files for building various C and C++ sample programs -can be found in bind/pdflib/c/samples.mcp and bind/pdflib/cpp/samples.mcp. -These can be used to test the newly created library. The tests create simple -command-line programs without any fancy user interface. - -Note that not all tests will succeed because they -need features which require commercial PDFlib products. - -In order to build a shared PDFlib library you'll have to define -the PDFLIB_EXPORTS preprocessor symbol (preferably in a new prefix -file). - - -Building PDFlib with other Windows compilers --------------------------------------------- - -In order to build PDFlib with other compilers, observe the above -notes and make sure to define the preprocessor symbol WIN32. - - -Compiling the language wrappers -------------------------------- - -In order to compile the C wrappers for the supported languages you -will have to install the relevant source code package -and adjust the include paths for these packages in the project files. -Since we supply prebuilt binaries for all supported languages this is -generally not required. Project files for the language wrappers are -only supplied for Microsoft Visual C++, but not any other compiler. diff --git a/src/libs/pdflib/doc/pdflib/readme.txt b/src/libs/pdflib/doc/pdflib/readme.txt deleted file mode 100644 index a8bb0981f7..0000000000 --- a/src/libs/pdflib/doc/pdflib/readme.txt +++ /dev/null @@ -1,189 +0,0 @@ -================================================ -PDFlib - A library for generating PDF on the fly -================================================ - -Portable C library for dynamically generating PDF ("Adobe Acrobat") files, -with support for many other programming languages. - -The PDFlib distribution is available from http://www.pdflib.com - -PDFlib is a library for generating PDF files. It offers an API with -support for text, vector graphics, raster image, and hypertext. Call PDFlib -routines from within your client program and voila: dynamic PDF files! - -PDFlib is available on a wide variety of operating system platforms, -and supports many programming languages and development environments: - -- C -- C++ -- Cobol -- COM (Visual Basic, ASP, Windows Script Host, Delphi, and many others) -- Java via the JNI, including servlets and JSP (but not EJB) -- .NET framework (VB.NET, ASP.NET, C# and others). -- Perl -- PHP Hypertext Processor -- Python -- RPG -- Tcl - -An overview of PDFlib features can be found in the PDFlib reference manual -in the PDF file PDFlib-manual.pdf. Documentation for the COM and .NET -editions is available separately. - - -PDFlib flavors -============== -The PDFlib software is available in different flavors (see the PDFlib -manual for a detailed comparison): - -- PDFlib Lite - Open-source edition for basic PDF generation, free for personal use. - PDFlib Lite does not support all languages, and is not available on - EBCDIC platforms. - -- PDFlib - The commercial edition adds various features for advanced PDF generation. - -- PDFlib+PDI - Includes PDFlib plus the PDF Import library PDI which can be used to - integrate pages from existing PDF documents in the generated output - -- PDFlib Personalization Server (PPS) - Includes PDFlib+PDI, plus advanced block processing functions for - easily personalizing PDF documents. PPS also includes the Block - plugin for Adobe Acrobat which can be used to create PDFlib blocks - interactively. The Block plugin is distributed in a separate installer. - - -First Steps with a binary Package -================================= -PDFlib, PDFlib+PDI, and PPS are available in binary form, and require -a commercial license. All of these products are available in a single -library, and can be evaluated without any restrictions without any -license. However, unless a valid license key is applied a demo stamp -will be generated across all pages. -The binary packages support C plus various other language bindings. -Instructions for using these packages can be found in doc/readme-binary.txt. - - -First Steps with the PDFlib Lite Source Package -=============================================== -PDFlib Lite is available in source form, and can be used for free under -certain conditions. Source code is also available for selected language -wrappers. If you are working with a source code package you need an ANSI C -compiler. Detailed instructions for building PDFlib from source code -can be found in doc/readme-source-*.txt - - -Quick Start and Documentation -============================= -For a jump-start, take a look at the PDFlib samples which are available -for all supported languages: - -- The following examples work with all editions of PDFlib: - The hello, pdfclock, and image samples generate PDF output with simple text, - vector graphics, and images. The chartab examples contains a more advanced - sample for using fonts and encodings in PDFlib. It can also be used to - create handy character set reference tables. - -- The invoice and quickreference examples require PDFlib+PDI, and demonstrate - how to deal with existing PDF documents. - -- The businesscard example requires the PDFlib Personalization Server (PPS), - and contains a simple personalization example. - -After reviewing these samples you should take a look at the main PDFlib -documentation: the "PDFlib Reference Manual" is included as PDF in all packages. -It is the definite reference for using PDFlib. The majority of questions -will be answered in this manual. - - -Other PDFlib resources -====================== -In addition to the PDFlib reference manual the following resources -are available: - -- The PDFlib FAQ collects information about known bugs, patches, - and workarounds: http://www.pdflib.com - -- The PDFlib mailing list discusses PDFlib deployment in a variety of - environments. You can access the mailing list archives over the Web, - and don't need to subscribe in order to use it: - http://groups.yahoo.com/group/pdflib - -- Commercial PDFlib licensees are eligible for professional product - support from PDFlib GmbH. Please send your inquiry along with your - PDFlib license number to support@pdflib.com. - - -Submitting Bug Reports -====================== -In case of trouble you should always check the PDFlib Web site -in order to see whether your problem is already known, or a patch exists. -If not so, please observe the following: - -If you have trouble with running PDFlib, please send the following -information to support@pdflib.com - -- a description of your problem -- the platform in use -- the PDFlib version number you are using -- the language binding you are using, along with relevant version numbers -- relevant code snippets for reproducing the problem, or a small PDF file - exhibiting the problem if you can't construct a code snippet easily -- sample data files if necessary (image files, for example) -- details of the PDF viewer (if relevant) where the problem occurs - -If you have trouble compiling the PDFlib Lite source code, please send the -following information to support@pdflib.com: - -- a description of your problem and the platform in use -- the PDFlib version number you are using -- the output of "./libtool --config" (Unix systems only) -- most welcome: suggested patches or solutions, other helpful information - - -A Shameless Plug -================ -My book contains a lot of information on PostScript, Fonts, and PDF -(currently only available in German): - -Die PostScript- & PDF-Bibel -Thomas Merz, Olaf Druemmer -654 Seiten, ISBN 3-935320-01-9, Euro 25,- -Kopublikation PDFlib GmbH/dpunkt Verlag -PDF available at http://www.pdflib.com -e-mail orders for the printed book: books@pdflib.com - - -Licensing and Copyright -======================= -THIS IS NOT PUBLIC DOMAIN OR FREEWARE SOFTWARE! - -PDFlib Lite can freely be used for non-profit personal use. -The license text can be found in the file PDFlib-Lite-license.pdf. - -PDFlib, PDFlib+PDI, and PPS can only be used under the terms of -a commercial license, and always require a license fee. Details -of the license can be found in the file PDFlib-license.pdf. -Licensing information is available in the file PDFlib-purchase-order.pdf, -and on our Web site www.pdflib.com. - - - -Please contact us if you're interested in obtaining a commercial PDFlib license: - -PDFlib GmbH -Tal 40, 80331 Munich, Germany -fax +49/89/29 16 46 86 - -License inquiries: sales@pdflib.com - -Support for PDFlib licensees: support@pdflib.com - - -Technical inquiries if you have not licensed PDFlib: -mailing list and archives at http://groups.yahoo.com/group/pdflib - -Copyright (c) 1997-2004 PDFlib GmbH and Thomas Merz. All rights reserved. -PDFlib and the PDFlib logo are registered trademarks of PDFlib GmbH. diff --git a/src/libs/pdflib/fonts/pdflib.upr b/src/libs/pdflib/fonts/pdflib.upr deleted file mode 100644 index 7e05429901..0000000000 --- a/src/libs/pdflib/fonts/pdflib.upr +++ /dev/null @@ -1,87 +0,0 @@ -PS-Resources-1.0 - -% This is a sample UPR file for use with PDFlib. The complete description -% of the UPR file format can be found in the PDFlib manual. -% All resources can also be set at runtime via PDF_set_parameter(). -% Some resources will also be search in the Windows registry. - - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% List of all resource categories which are specified in the file - -SearchPath -FontAFM -FontPFM -FontOutline -Encoding -ICCProfile -StandardOutputIntent -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The SearchPath section. -% PDFlib will search for any files (font, PDFs, ICC profiles, images) -% in all the directories listed here. Modify as appropriate. -% Do not mix SearchPath with the deprecated "prefix" feature. - -SearchPath -% /var/fonts -% C:/psfonts -% d:/myimagefolder -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The AFM font metrics section, one line per font in the format -% = -% Note that PostScript font names must not contain any blank character - -FontAFM -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The PFM font metrics section, one line per font in the format -% = -% Note that PostScript font names must not contain any blank character - -FontPFM -%Poetica-ChanceryI=Poetica-ChanceryI.pfm -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The PostScript, TrueType, and OpenType font outline section, one line per -% font in the format -% = -% Note that PostScript font names must not contain any blank character, -% but TrueType font names may contain blank characters (and often do). - -FontOutline -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The Encoding section, one line per encoding in the format -% = -% This will only rarely be required since PDFlib contains a lot of built-in -% encodings. - -Encoding -%cp0874=cp0874.cpg -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The ICCProfile section lists the names of known ICC color profiles in the -% format -% = - -ICCProfile -%highspeedprinter=cmykhighspeed.icc -. - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% The StandardOutputIntent section lists the names of known standard output -% intents for PDF/X. This will only be used when standard intent names other -% than those known to PDFlib internally will be used. -% format -% = - -StandardOutputIntent -. diff --git a/src/libs/pdflib/fonts/print_glyphs.ps b/src/libs/pdflib/fonts/print_glyphs.ps deleted file mode 100644 index 8bbf80e46a..0000000000 --- a/src/libs/pdflib/fonts/print_glyphs.ps +++ /dev/null @@ -1,129 +0,0 @@ -%!PS-Adobe -% print_glyphs.ps -% Copyright (C) Thomas Merz and PDFlib GmbH 1994-2004 -% -% This PostScript program prints all glyphs in a font along -% with their names in alphabetical ordering. -% It requires a PostScript Level 2 or PostScript 3 interpreter. -% It also works with Acrobat Distiller. -% -% Usage: -% - The font must either be resident in the printer, or be -% downloaded ahead of this program (as a single job). -% Alternatively, the font can be configure in Distiller. -% - At the end of this file, enter a line with the font name, e.g.: -% /Times-Roman ShowGlyphs -% (Omit the percent character, but leave the leading slash '/') - -/$sort 20 dict def - -/Insert { % node string ==> - - exch dup 0 get type (nulltype) eq { % ifelse - exch [ exch 1 array 1 array ] 0 exch put - }{ % else - aload pop aload pop 4 2 roll 2 copy gt { % ifelse - pop 3 -1 roll pop Insert - }{ %else - pop exch pop Insert - } ifelse - } ifelse -} def - -/PrefixWalk { - $sort begin - cvx /!bt exch def bpwalk - end -} def - -$sort begin -/bpwalk { - dup 0 get type /nulltype eq { pop }{ % ifelse - aload pop aload pop exch bpwalk exch !bt bpwalk - } ifelse -} bind def - -end % $sort - -/DictSort { % dict ==> array - dup length array /a exch def - $sort begin - /tree 1 array def - { pop 50 string cvs tree exch Insert } forall - /ndx 0 def - tree { a ndx 3 -1 roll put /ndx ndx 1 add def } PrefixWalk - a -} bind def - -/ShowGlyphs { % font name ==> - - /buffer 100 string def - /FontName 100 string def - /fs 20 def % font size - /ts 7 def % font size of caption - /ls fs 1.75 mul def % line spacing - - dup FontName cvs pop - findfont fs scalefont /F exch def - - clippath pathbbox - 20 sub /top exch def - 20 sub /right exch def - 20 add /bottom exch def - 40 add /left exch def - - /textfont /Helvetica-Narrow findfont ts scalefont def - /x left def - /y top fs sub def - - /Helvetica-Bold findfont fs scalefont setfont - x y moveto - /y y ls sub def - - % Check the interpreter's language level... - /languagelevel where { pop languagelevel }{ 1 } ifelse - - % ...and quit if Level 1 - 2 lt { - (Error: this program doesn't work on PostScript Level 1 printers!)show - showpage - stop -} if - - FontName show % print font name - - % Try to find the dictionary with the character names - F /CharStrings known { - F /CharStrings get - }{ - (: Couldn't find character names (CharStrings dictionary)!) show - showpage - quit - } ifelse - - DictSort % sort the character names - - { % forall - /GlyphName exch def % remember the character name - - x y moveto F setfont % the actual character... - GlyphName cvn glyphshow - - x y ts 2 mul sub moveto % ...and its glyph name - textfont setfont GlyphName buffer cvs show - - /x x fs 2 mul add def - x right gt { /x left def /y y fs 2 mul sub def } if - y bottom lt { - /y top fs sub def /x left def - showpage - x y moveto - /y y ls sub def - /Helvetica-Bold findfont fs scalefont setfont - FontName show % print font name - } if - } forall - y top ls sub ne x left ne or { showpage } if - -} bind def - -% Example: -%/Times-Roman ShowGlyphs diff --git a/src/libs/pdflib/libs/Jamfile b/src/libs/pdflib/libs/Jamfile deleted file mode 100644 index c99f24f4b5..0000000000 --- a/src/libs/pdflib/libs/Jamfile +++ /dev/null @@ -1,7 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs ; - -SubInclude HAIKU_TOP src libs pdflib libs flate ; -SubInclude HAIKU_TOP src libs pdflib libs pdcore ; -SubInclude HAIKU_TOP src libs pdflib libs pdflib ; -SubInclude HAIKU_TOP src libs pdflib libs png ; -SubInclude HAIKU_TOP src libs pdflib libs tiff ; diff --git a/src/libs/pdflib/libs/Makefile b/src/libs/pdflib/libs/Makefile deleted file mode 100644 index db69331ae7..0000000000 --- a/src/libs/pdflib/libs/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# Generated automatically from Makefile.in by configure. -# Main libs Makefile -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -# keep the order, some libs have to be build before others -# PDU not yet working => MAKEOPT -i -include ../config/mkcommon.inc - -MAKEOPT = -i -SUB_DIRS = $(LIBTARGETS) - -include ../config/mksubdirs.inc diff --git a/src/libs/pdflib/libs/PDFlib.mcp b/src/libs/pdflib/libs/PDFlib.mcp deleted file mode 100644 index 66a101ba57e00525b692ce722ed8c8afcb1764c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320148 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 diff --git a/src/libs/pdflib/libs/flate/Jamfile b/src/libs/pdflib/libs/flate/Jamfile deleted file mode 100644 index da9a5fa1a4..0000000000 --- a/src/libs/pdflib/libs/flate/Jamfile +++ /dev/null @@ -1,24 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs flate ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs pdcore ] ; - -UseLibraryHeaders pdflib ; - -StaticLibrary libpdf.a : - adler32.c - uncompr.c - infutil.c - compress.c - zutil.c - inffast.c - crc32.c - deflate.c - trees.c - inftrees.c - infblock.c - inflate.c - infcodes.c -; - diff --git a/src/libs/pdflib/libs/flate/Makefile b/src/libs/pdflib/libs/flate/Makefile deleted file mode 100644 index 0982c74882..0000000000 --- a/src/libs/pdflib/libs/flate/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# Makefile for zlib -# This generates a libtool convenience library -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -INCLUDES = $(PDCORELIBINC) - -LIBNAME = $(FLATELIBLINK) - -include ../../config/mkcommon.inc - -SRC = \ - $(srcdir)/adler32.c \ - $(srcdir)/compress.c \ - $(srcdir)/crc32.c \ - $(srcdir)/deflate.c \ - $(srcdir)/infblock.c \ - $(srcdir)/infcodes.c \ - $(srcdir)/inffast.c \ - $(srcdir)/inflate.c \ - $(srcdir)/inftrees.c \ - $(srcdir)/infutil.c \ - $(srcdir)/trees.c \ - $(srcdir)/uncompr.c \ - $(srcdir)/zutil.c - -OBJS = \ - $(srcdir)/adler32$(LO) \ - $(srcdir)/compress$(LO) \ - $(srcdir)/crc32$(LO) \ - $(srcdir)/deflate$(LO) \ - $(srcdir)/infblock$(LO) \ - $(srcdir)/infcodes$(LO) \ - $(srcdir)/inffast$(LO) \ - $(srcdir)/inflate$(LO) \ - $(srcdir)/inftrees$(LO) \ - $(srcdir)/infutil$(LO) \ - $(srcdir)/trees$(LO) \ - $(srcdir)/uncompr$(LO) \ - $(srcdir)/zutil$(LO) - -include ../../config/mklibs.inc - -# Automatically generated dependencies diff --git a/src/libs/pdflib/libs/flate/adler32.c b/src/libs/pdflib/libs/flate/adler32.c deleted file mode 100644 index 1fa4355c68..0000000000 --- a/src/libs/pdflib/libs/flate/adler32.c +++ /dev/null @@ -1,46 +0,0 @@ -/* adler32.c -- compute the Adler-32 checksum of a data stream - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: adler32.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: adler32.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zlib.h" - -#define BASE 65521L /* largest prime smaller than 65536 */ -#define NMAX 5552 -/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ - -#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} -#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); -#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); -#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); -#define DO16(buf) DO8(buf,0); DO8(buf,8); - -/* ========================================================================= */ -uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) -{ - unsigned long s1 = adler & 0xffff; - unsigned long s2 = (adler >> 16) & 0xffff; - int k; - - if (buf == Z_NULL) return 1L; - - while (len > 0) { - k = len < NMAX ? len : NMAX; - len -= k; - while (k >= 16) { - DO16(buf); - buf += 16; - k -= 16; - } - if (k != 0) do { - s1 += *buf++; - s2 += s1; - } while (--k); - s1 %= BASE; - s2 %= BASE; - } - return (s2 << 16) | s1; -} diff --git a/src/libs/pdflib/libs/flate/compress.c b/src/libs/pdflib/libs/flate/compress.c deleted file mode 100644 index 1173cd3efb..0000000000 --- a/src/libs/pdflib/libs/flate/compress.c +++ /dev/null @@ -1,69 +0,0 @@ -/* compress.c -- compress a memory buffer - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: compress.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: compress.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zlib.h" - -/* =========================================================================== - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least 0.1% larger than sourceLen plus - 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ -int ZEXPORT compress2 ( - Bytef *dest, - uLongf *destLen, - const Bytef *source, - uLong sourceLen, - int level) -{ - z_stream stream; - int err; - - stream.next_in = (Bytef*)source; - stream.avail_in = (uInt)sourceLen; -#ifdef MAXSEG_64K - /* Check for source > 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; -#endif - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; - - stream.zalloc = (alloc_func)0; - stream.zfree = (free_func)0; - stream.opaque = (voidpf)0; - - err = deflateInit(&stream, level); - if (err != Z_OK) return err; - - err = deflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - deflateEnd(&stream); - return err == Z_OK ? Z_BUF_ERROR : err; - } - *destLen = stream.total_out; - - err = deflateEnd(&stream); - return err; -} - -/* =========================================================================== - */ -int ZEXPORT compress ( - Bytef *dest, - uLongf *destLen, - const Bytef *source, - uLong sourceLen) -{ - return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); -} diff --git a/src/libs/pdflib/libs/flate/crc32.c b/src/libs/pdflib/libs/flate/crc32.c deleted file mode 100644 index 57ebe55d83..0000000000 --- a/src/libs/pdflib/libs/flate/crc32.c +++ /dev/null @@ -1,163 +0,0 @@ -/* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: crc32.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: crc32.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zlib.h" - -#define local static - -#ifdef DYNAMIC_CRC_TABLE - -local int crc_table_empty = 1; -local uLongf crc_table[256]; -local void make_crc_table OF((void)); - -/* - Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. - - Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials - is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the - polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - where a mod b means the remainder after dividing a by b. - - This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each - incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. - - The table is simply the CRC of all possible eight bit values. This is all - the information needed to generate CRC's on data a byte at a time for all - combinations of CRC register values and incoming bytes. -*/ -local void make_crc_table() -{ - uLong c; - int n, k; - uLong poly; /* polynomial exclusive-or pattern */ - /* terms of polynomial defining this crc (except x^32): */ - static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; - - /* make exclusive-or pattern from polynomial (0xedb88320L) */ - poly = 0L; - for (n = 0; n < sizeof(p)/sizeof(Byte); n++) - poly |= 1L << (31 - p[n]); - - for (n = 0; n < 256; n++) - { - c = (uLong)n; - for (k = 0; k < 8; k++) - c = c & 1 ? poly ^ (c >> 1) : c >> 1; - crc_table[n] = c; - } - crc_table_empty = 0; -} -#else -/* ======================================================================== - * Table of CRC-32's of all single-byte values (made by make_crc_table) - */ -local const uLongf crc_table[256] = { - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL -}; -#endif - -/* ========================================================================= - * This function can be used by asm versions of crc32() - */ -const uLongf * ZEXPORT get_crc_table() -{ -#ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) make_crc_table(); -#endif - return (const uLongf *)crc_table; -} - -/* ========================================================================= */ -#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); -#define DO2(buf) DO1(buf); DO1(buf); -#define DO4(buf) DO2(buf); DO2(buf); -#define DO8(buf) DO4(buf); DO4(buf); - -/* ========================================================================= */ -uLong ZEXPORT crc32( - uLong crc, - const Bytef *buf, - uInt len) -{ - if (buf == Z_NULL) return 0L; -#ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); -#endif - crc = crc ^ 0xffffffffL; - while (len >= 8) - { - DO8(buf); - len -= 8; - } - if (len) do { - DO1(buf); - } while (--len); - return crc ^ 0xffffffffL; -} diff --git a/src/libs/pdflib/libs/flate/deflate.c b/src/libs/pdflib/libs/flate/deflate.c deleted file mode 100644 index f0e1d0f8c3..0000000000 --- a/src/libs/pdflib/libs/flate/deflate.c +++ /dev/null @@ -1,1356 +0,0 @@ -/* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* - * ALGORITHM - * - * The "deflation" process depends on being able to identify portions - * of the input text which are identical to earlier input (within a - * sliding window trailing behind the input currently being processed). - * - * The most straightforward technique turns out to be the fastest for - * most input files: try all possible matches and select the longest. - * The key feature of this algorithm is that insertions into the string - * dictionary are very simple and thus fast, and deletions are avoided - * completely. Insertions are performed at each input character, whereas - * string matches are performed only when the previous match ends. So it - * is preferable to spend more time in matches to allow very fast string - * insertions and avoid deletions. The matching algorithm for small - * strings is inspired from that of Rabin & Karp. A brute force approach - * is used to find longer strings when a small match has been found. - * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze - * (by Leonid Broukhis). - * A previous version of this file used a more sophisticated algorithm - * (by Fiala and Greene) which is guaranteed to run in linear amortized - * time, but has a larger average cost, uses more memory and is patented. - * However the F&G algorithm may be faster for some highly redundant - * files if the parameter max_chain_length (described below) is too large. - * - * ACKNOWLEDGEMENTS - * - * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and - * I found it in 'freeze' written by Leonid Broukhis. - * Thanks to many people for bug reports and testing. - * - * REFERENCES - * - * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". - * Available in ftp://ds.internic.net/rfc/rfc1951.txt - * - * A description of the Rabin and Karp algorithm is given in the book - * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. - * - * Fiala,E.R., and Greene,D.H. - * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 - * - */ - -/* $Id: deflate.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: deflate.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "deflate.h" - -const char deflate_copyright[] = - " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly "; -/* - If you use the zlib library in a product, an acknowledgment is welcome - in the documentation of your product. If for some reason you cannot - include such an acknowledgment, I would appreciate that you keep this - copyright string in the executable of your product. - */ - -/* =========================================================================== - * Function prototypes. - */ -typedef enum { - need_more, /* block not completed, need more input or more output */ - block_done, /* block flush performed */ - finish_started, /* finish started, need only more output at next deflate */ - finish_done /* finish done, accept no more input or output */ -} block_state; - -typedef block_state (*compress_func) OF((deflate_state *s, int flush)); -/* Compression function. Returns the block state after the call. */ - -local void fill_window OF((deflate_state *s)); -local block_state deflate_stored OF((deflate_state *s, int flush)); -local block_state deflate_fast OF((deflate_state *s, int flush)); -local block_state deflate_slow OF((deflate_state *s, int flush)); -local void lm_init OF((deflate_state *s)); -local void putShortMSB OF((deflate_state *s, uInt b)); -local void flush_pending OF((z_streamp strm)); -local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifdef ASMV - void match_init OF((void)); /* asm code initialization */ - uInt longest_match OF((deflate_state *s, IPos cur_match)); -#else -local uInt longest_match OF((deflate_state *s, IPos cur_match)); -#endif - -#ifdef DEBUG -local void check_match OF((deflate_state *s, IPos start, IPos match, - int length)); -#endif - -/* =========================================================================== - * Local data - */ - -#define NIL 0 -/* Tail of hash chains */ - -#ifndef TOO_FAR -# define TOO_FAR 4096 -#endif -/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ - -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) -/* Minimum amount of lookahead, except at the end of the input file. - * See deflate.c for comments about the MIN_MATCH+1. - */ - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -typedef struct config_s { - ush good_length; /* reduce lazy search above this match length */ - ush max_lazy; /* do not perform lazy search above this match length */ - ush nice_length; /* quit search above this match length */ - ush max_chain; - compress_func func; -} config; - -local const config configuration_table[10] = { -/* good lazy nice chain */ -/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ -/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */ -/* 2 */ {4, 5, 16, 8, deflate_fast}, -/* 3 */ {4, 6, 32, 32, deflate_fast}, - -/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ -/* 5 */ {8, 16, 32, 32, deflate_slow}, -/* 6 */ {8, 16, 128, 128, deflate_slow}, -/* 7 */ {8, 32, 128, 256, deflate_slow}, -/* 8 */ {32, 128, 258, 1024, deflate_slow}, -/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */ - -/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 - * For deflate_fast() (levels <= 3) good is ignored and lazy has a different - * meaning. - */ - -#define EQUAL 0 -/* result of memcmp for equal strings */ - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct static_tree_desc_s {int dummy;}; */ /* for buggy compilers */ - -/* =========================================================================== - * Update a hash value with the given input byte - * IN assertion: all calls to to UPDATE_HASH are made with consecutive - * input characters, so that a running hash key can be computed from the - * previous key instead of complete recalculation each time. - */ -#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) - - -/* =========================================================================== - * Insert string str in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * If this file is compiled with -DFASTEST, the compression level is forced - * to 1, and no hash chains are maintained. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of str are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ -#ifdef FASTEST -#define INSERT_STRING(s, str, match_head) \ - (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ - match_head = s->head[s->ins_h], \ - s->head[s->ins_h] = (Pos)(str)) -#else -#define INSERT_STRING(s, str, match_head) \ - (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ - s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ - s->head[s->ins_h] = (Pos)(str)) -#endif - -/* =========================================================================== - * Initialize the hash table (avoiding 64K overflow for 16 bit systems). - * prev[] will be initialized on the fly. - */ -#define CLEAR_HASH(s) \ - s->head[s->hash_size-1] = NIL; \ - zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); - -/* ========================================================================= */ -int ZEXPORT deflateInit_( - z_streamp strm, - int level, - const char *version, - int stream_size) -{ - return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, - Z_DEFAULT_STRATEGY, version, stream_size); - /* To do: ignore strm->next_in if we use it as window */ -} - -/* ========================================================================= */ -int ZEXPORT deflateInit2_( - z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy, - const char *version, - int stream_size) -{ - deflate_state *s; - int noheader = 0; - static const char* my_version = ZLIB_VERSION; - - ushf *overlay; - /* We overlay pending_buf and d_buf+l_buf. This works since the average - * output size for (length,distance) codes is <= 24 bits. - */ - - if (version == Z_NULL || version[0] != my_version[0] || - stream_size != sizeof(z_stream)) { - return Z_VERSION_ERROR; - } - if (strm == Z_NULL) return Z_STREAM_ERROR; - - strm->msg = Z_NULL; - if (strm->zalloc == Z_NULL) { - strm->zalloc = zcalloc; - strm->opaque = (voidpf)0; - } - if (strm->zfree == Z_NULL) strm->zfree = zcfree; - - if (level == Z_DEFAULT_COMPRESSION) level = 6; -#ifdef FASTEST - level = 1; -#endif - - if (windowBits < 0) { /* undocumented feature: suppress zlib header */ - noheader = 1; - windowBits = -windowBits; - } - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || - windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_HUFFMAN_ONLY) { - return Z_STREAM_ERROR; - } - s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); - if (s == Z_NULL) return Z_MEM_ERROR; - strm->state = (struct internal_state FAR *)s; - s->data_type = Z_UNKNOWN; - s->strm = strm; - - s->noheader = noheader; - s->w_bits = windowBits; - s->w_size = 1 << s->w_bits; - s->w_mask = s->w_size - 1; - - s->hash_bits = memLevel + 7; - s->hash_size = 1 << s->hash_bits; - s->hash_mask = s->hash_size - 1; - s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); - - s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); - /* we don't use calloc -> to satisfy purify - * at least here memset is needed */ - memset((void *)s->window, 0, (size_t) s->w_size * 2*sizeof(Byte)); - - s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); - s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); - - s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - s->pending_buf = (uchf *) overlay; - s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); - - if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || - s->pending_buf == Z_NULL) { - strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); - deflateEnd (strm); - return Z_MEM_ERROR; - } - s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - - s->level = level; - s->strategy = strategy; - s->method = (Byte)method; - - return deflateReset(strm); -} - -/* ========================================================================= */ -int ZEXPORT deflateSetDictionary ( - z_streamp strm, - const Bytef *dictionary, - uInt dictLength) -{ - deflate_state *s; - uInt length = dictLength; - uInt n; - IPos hash_head = 0; - - if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || - strm->state->status != INIT_STATE) return Z_STREAM_ERROR; - - s = strm->state; - strm->adler = adler32(strm->adler, dictionary, dictLength); - - if (length < MIN_MATCH) return Z_OK; - if (length > MAX_DIST(s)) { - length = MAX_DIST(s); -#ifndef USE_DICT_HEAD - dictionary += dictLength - length; /* use the tail of the dictionary */ -#endif - } - zmemcpy(s->window, dictionary, length); - s->strstart = length; - s->block_start = (long)length; - - /* Insert all strings in the hash table (except for the last two bytes). - * s->lookahead stays null, so s->ins_h will be recomputed at the next - * call of fill_window. - */ - s->ins_h = s->window[0]; - UPDATE_HASH(s, s->ins_h, s->window[1]); - for (n = 0; n <= length - MIN_MATCH; n++) { - INSERT_STRING(s, n, hash_head); - } - if (hash_head) hash_head = 0; /* to make compiler happy */ - return Z_OK; -} - -/* ========================================================================= */ -int ZEXPORT deflateReset ( - z_streamp strm) -{ - deflate_state *s; - - if (strm == Z_NULL || strm->state == Z_NULL || - strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR; - - strm->total_in = strm->total_out = 0; - strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ - strm->data_type = Z_UNKNOWN; - - s = (deflate_state *)strm->state; - s->pending = 0; - s->pending_out = s->pending_buf; - - if (s->noheader < 0) { - s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ - } - s->status = s->noheader ? BUSY_STATE : INIT_STATE; - strm->adler = 1; - s->last_flush = Z_NO_FLUSH; - - _tr_init(s); - lm_init(s); - - return Z_OK; -} - -/* ========================================================================= */ -int ZEXPORT deflateParams( - z_streamp strm, - int level, - int strategy) -{ - deflate_state *s; - compress_func func; - int err = Z_OK; - - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; - s = strm->state; - - if (level == Z_DEFAULT_COMPRESSION) { - level = 6; - } - if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) { - return Z_STREAM_ERROR; - } - func = configuration_table[s->level].func; - - if (func != configuration_table[level].func && strm->total_in != 0) { - /* Flush the last buffer: */ - err = deflate(strm, Z_PARTIAL_FLUSH); - } - if (s->level != level) { - s->level = level; - s->max_lazy_match = configuration_table[level].max_lazy; - s->good_match = configuration_table[level].good_length; - s->nice_match = configuration_table[level].nice_length; - s->max_chain_length = configuration_table[level].max_chain; - } - s->strategy = strategy; - return err; -} - -/* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ -local void putShortMSB ( - deflate_state *s, - uInt b) -{ - put_byte(s, (Byte)(b >> 8)); - put_byte(s, (Byte)(b & 0xff)); -} - -/* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->next_out buffer and copying into it. - * (See also read_buf()). - */ -local void flush_pending( - z_streamp strm) -{ - unsigned len = strm->state->pending; - - if (len > strm->avail_out) len = strm->avail_out; - if (len == 0) return; - - zmemcpy(strm->next_out, strm->state->pending_out, len); - strm->next_out += len; - strm->state->pending_out += len; - strm->total_out += len; - strm->avail_out -= len; - strm->state->pending -= len; - if (strm->state->pending == 0) { - strm->state->pending_out = strm->state->pending_buf; - } -} - -/* ========================================================================= */ -int ZEXPORT deflate ( - z_streamp strm, - int flush) -{ - int old_flush; /* value of flush param for previous deflate call */ - deflate_state *s; - - if (strm == Z_NULL || strm->state == Z_NULL || - flush > Z_FINISH || flush < 0) { - return Z_STREAM_ERROR; - } - s = strm->state; - - if (strm->next_out == Z_NULL || - (strm->next_in == Z_NULL && strm->avail_in != 0) || - (s->status == FINISH_STATE && flush != Z_FINISH)) { - ERR_RETURN(strm, Z_STREAM_ERROR); - } - if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); - - s->strm = strm; /* just in case */ - old_flush = s->last_flush; - s->last_flush = flush; - - /* Write the zlib header */ - if (s->status == INIT_STATE) { - - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; - uInt level_flags = (s->level-1) >> 1; - - if (level_flags > 3) level_flags = 3; - header |= (level_flags << 6); - if (s->strstart != 0) header |= PRESET_DICT; - header += 31 - (header % 31); - - s->status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s->strstart != 0) { - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); - } - strm->adler = 1L; - } - - /* Flush as much pending output as possible */ - if (s->pending != 0) { - flush_pending(strm); - if (strm->avail_out == 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s->last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUFF_ERROR. - */ - } else if (strm->avail_in == 0 && flush <= old_flush && - flush != Z_FINISH) { - ERR_RETURN(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s->status == FINISH_STATE && strm->avail_in != 0) { - ERR_RETURN(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm->avail_in != 0 || s->lookahead != 0 || - (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { - block_state bstate; - - bstate = (*(configuration_table[s->level].func))(s, flush); - - if (bstate == finish_started || bstate == finish_done) { - s->status = FINISH_STATE; - } - if (bstate == need_more || bstate == finish_started) { - if (strm->avail_out == 0) { - s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate == block_done) { - if (flush == Z_PARTIAL_FLUSH) { - _tr_align(s); - } else { /* FULL_FLUSH or SYNC_FLUSH */ - _tr_stored_block(s, (char*)0, 0L, 0); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush == Z_FULL_FLUSH) { - CLEAR_HASH(s); /* forget history */ - } - } - flush_pending(strm); - if (strm->avail_out == 0) { - s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - Assert(strm->avail_out > 0, "bug2"); - - if (flush != Z_FINISH) return Z_OK; - if (s->noheader) return Z_STREAM_END; - - /* Write the zlib trailer (adler32) */ - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - s->noheader = -1; /* write the trailer only once! */ - return s->pending != 0 ? Z_OK : Z_STREAM_END; -} - -/* ========================================================================= */ -int ZEXPORT deflateEnd ( - z_streamp strm) -{ - int status; - - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; - - status = strm->state->status; - if (status != INIT_STATE && status != BUSY_STATE && - status != FINISH_STATE) { - return Z_STREAM_ERROR; - } - - /* Deallocate in reverse order of allocations: */ - TRY_FREE(strm, strm->state->pending_buf); - TRY_FREE(strm, strm->state->head); - TRY_FREE(strm, strm->state->prev); - TRY_FREE(strm, strm->state->window); - - ZFREE(strm, strm->state); - strm->state = Z_NULL; - - return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; -} - -/* ========================================================================= - * Copy the source state to the destination state. - * To simplify the source, this is not supported for 16-bit MSDOS (which - * doesn't have enough memory anyway to duplicate compression states). - */ -int ZEXPORT deflateCopy ( - z_streamp dest, - z_streamp source) -{ -#ifdef MAXSEG_64K - return Z_STREAM_ERROR; -#else - deflate_state *ds; - deflate_state *ss; - ushf *overlay; - - - if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { - return Z_STREAM_ERROR; - } - - ss = source->state; - - *dest = *source; - - ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); - if (ds == Z_NULL) return Z_MEM_ERROR; - dest->state = (struct internal_state FAR *) ds; - *ds = *ss; - ds->strm = dest; - - ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); - ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); - ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); - ds->pending_buf = (uchf *) overlay; - - if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || - ds->pending_buf == Z_NULL) { - deflateEnd (dest); - return Z_MEM_ERROR; - } - /* following zmemcpy do not work for 16-bit MSDOS */ - zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); - zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); - zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); - - ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); - ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); - ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; - - ds->l_desc.dyn_tree = ds->dyn_ltree; - ds->d_desc.dyn_tree = ds->dyn_dtree; - ds->bl_desc.dyn_tree = ds->bl_tree; - - return Z_OK; -#endif -} - -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->next_in buffer and copying from it. - * (See also flush_pending()). - */ -local int read_buf( - z_streamp strm, - Bytef *buf, - unsigned size) -{ - unsigned len = strm->avail_in; - - if (len > size) len = size; - if (len == 0) return 0; - - strm->avail_in -= len; - - if (!strm->state->noheader) { - strm->adler = adler32(strm->adler, strm->next_in, len); - } - zmemcpy(buf, strm->next_in, len); - strm->next_in += len; - strm->total_in += len; - - return (int)len; -} - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -local void lm_init ( - deflate_state *s) -{ - s->window_size = (ulg)2L*s->w_size; - - CLEAR_HASH(s); - - /* Set the default configuration parameters: - */ - s->max_lazy_match = configuration_table[s->level].max_lazy; - s->good_match = configuration_table[s->level].good_length; - s->nice_match = configuration_table[s->level].nice_length; - s->max_chain_length = configuration_table[s->level].max_chain; - - s->strstart = 0; - s->block_start = 0L; - s->lookahead = 0; - s->match_length = s->prev_length = MIN_MATCH-1; - s->match_available = 0; - s->ins_h = 0; -#ifdef ASMV - match_init(); /* initialize the asm code */ -#endif -} - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ -#ifndef ASMV -/* For 80x86 and 680x0, an optimized version will be provided in match.asm or - * match.S. The code will be functionally equivalent. - */ -#ifndef FASTEST -local uInt longest_match( - deflate_state *s, - IPos cur_match) /* current match */ -{ - unsigned chain_length = s->max_chain_length;/* max hash chain length */ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ - int best_len = s->prev_length; /* best match length so far */ - int nice_match = s->nice_match; /* stop if match long enough */ - IPos limit = s->strstart > (IPos)MAX_DIST(s) ? - s->strstart - (IPos)MAX_DIST(s) : NIL; - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - Posf *prev = s->prev; - uInt wmask = s->w_mask; - -#ifdef UNALIGNED_OK - /* Compare two bytes at a time. Note: this is not always beneficial. - * Try with and without -DUNALIGNED_OK to check. - */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; - register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); -#else - register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; - register Byte scan_end = scan[best_len]; -#endif - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s->prev_length >= s->good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; - - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - Assert(cur_match < s->strstart, "no future"); - match = s->window + cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ -#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) - /* This code assumes sizeof(unsigned short) == 2. Do not use - * UNALIGNED_OK if your compiler uses a different size. - */ - if (*(ushf*)(match+best_len-1) != scan_end || - *(ushf*)match != scan_start) continue; - - /* It is not necessary to compare scan[2] and match[2] since they are - * always equal when the other bytes match, given that the hash keys - * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at - * strstart+3, +5, ... up to strstart+257. We check for insufficient - * lookahead only every 4th comparison; the 128th check will be made - * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is - * necessary to put more guard bytes at the end of the window, or - * to check more often for insufficient lookahead. - */ - Assert(scan[2] == match[2], "scan[2]?"); - scan++, match++; - do { - } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - scan < strend); - /* The funny "do {}" generates better code on most compilers */ - - /* Here, scan <= window+strstart+257 */ - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - if (*scan == *match) scan++; - - len = (MAX_MATCH - 1) - (int)(strend-scan); - scan = strend - (MAX_MATCH-1); - -#else /* UNALIGNED_OK */ - - if (match[best_len] != scan_end || - match[best_len-1] != scan_end1 || - *match != *scan || - *++match != scan[1]) continue; - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2, match++; - Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (*++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - scan < strend); - - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (int)(strend - scan); - scan = strend - MAX_MATCH; - -#endif /* UNALIGNED_OK */ - - if (len > best_len) { - s->match_start = cur_match; - best_len = len; - if (len >= nice_match) break; -#ifdef UNALIGNED_OK - scan_end = *(ushf*)(scan+best_len-1); -#else - scan_end1 = scan[best_len-1]; - scan_end = scan[best_len]; -#endif - } - } while ((cur_match = prev[cur_match & wmask]) > limit - && --chain_length != 0); - - if ((uInt)best_len <= s->lookahead) return (uInt)best_len; - return s->lookahead; -} - -#else /* FASTEST */ -/* --------------------------------------------------------------------------- - * Optimized version for level == 1 only - */ -local uInt longest_match( - deflate_state *s, - IPos cur_match) /* current match */ -{ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - Assert(cur_match < s->strstart, "no future"); - - match = s->window + cur_match; - - /* Return failure if the match length is less than 2: - */ - if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2, match += 2; - Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while (*++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - scan < strend); - - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (int)(strend - scan); - - if (len < MIN_MATCH) return MIN_MATCH - 1; - - s->match_start = cur_match; - return len <= s->lookahead ? len : s->lookahead; -} -#endif /* FASTEST */ -#endif /* ASMV */ - -#ifdef DEBUG -/* =========================================================================== - * Check that the match at match_start is indeed a match. - */ -local void check_match( - deflate_state *s, - IPos start, IPos match, - int length) -{ - /* check that the match is indeed a match */ - if (zmemcmp(s->window + match, - s->window + start, length) != EQUAL) { - fprintf(stderr, " start %u, match %u, length %d\n", - start, match, length); - do { - fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); - } while (--length != 0); - z_error("invalid match"); - } - if (z_verbose > 1) { - fprintf(stderr,"\\[%d,%d]", start-match, length); - do { putc(s->window[start++], stderr); } while (--length != 0); - } -} -#else -# define check_match(s, start, match, length) -#endif - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -local void fill_window( - deflate_state *s) -{ - register unsigned n, m; - register Posf *p; - unsigned more; /* Amount of free space at the end of the window. */ - uInt wsize = s->w_size; - - do { - more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); - - /* Deal with !@#$% 64K limit: */ - if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - more = wsize; - - } else if (more == (unsigned)(-1)) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - } else if (s->strstart >= wsize+MAX_DIST(s)) { - - zmemcpy(s->window, s->window+wsize, (unsigned)wsize); - s->match_start -= wsize; - s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ - s->block_start -= (long) wsize; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - n = s->hash_size; - p = &s->head[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - } while (--n); - - n = wsize; -#ifndef FASTEST - p = &s->prev[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); -#endif - more += wsize; - } - if (s->strm->avail_in == 0) return; - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - Assert(more >= 2, "more < 2"); - - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); - s->lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s->lookahead >= MIN_MATCH) { - s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); -} - -/* =========================================================================== - * Flush the current block, with given end-of-file flag. - * IN assertion: strstart is set to the end of the current match. - */ -#define FLUSH_BLOCK_ONLY(s, eof) { \ - _tr_flush_block(s, (s->block_start >= 0L ? \ - (charf *)&s->window[(unsigned)s->block_start] : \ - (charf *)Z_NULL), \ - (ulg)((long)s->strstart - s->block_start), \ - (eof)); \ - s->block_start = s->strstart; \ - flush_pending(s->strm); \ - Tracev((stderr,"[FLUSH]")); \ -} - -/* Same but force premature exit if necessary. */ -#define FLUSH_BLOCK(s, eof) { \ - FLUSH_BLOCK_ONLY(s, eof); \ - if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ -} - -/* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ -local block_state deflate_stored( - deflate_state *s, - int flush) -{ - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - ulg max_block_size = 0xffff; - ulg max_start; - - if (max_block_size > s->pending_buf_size - 5) { - max_block_size = s->pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s->lookahead <= 1) { - - Assert(s->strstart < s->w_size+MAX_DIST(s) || - s->block_start >= (long)s->w_size, "slide too late"); - - fill_window(s); - if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; - - if (s->lookahead == 0) break; /* flush the current block */ - } - Assert(s->block_start >= 0L, "block gone"); - - s->strstart += s->lookahead; - s->lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - max_start = s->block_start + max_block_size; - if (s->strstart == 0 || (ulg)s->strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s->lookahead = (uInt)(s->strstart - max_start); - s->strstart = (uInt)max_start; - FLUSH_BLOCK(s, 0); - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { - FLUSH_BLOCK(s, 0); - } - } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; -} - -/* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -local block_state deflate_fast( - deflate_state *s, - int flush) -{ - IPos hash_head = NIL; /* head of the hash chain */ - int bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s->lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { - return need_more; - } - if (s->lookahead == 0) break; /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - if (s->lookahead >= MIN_MATCH) { - INSERT_STRING(s, s->strstart, hash_head); - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - if (s->strategy != Z_HUFFMAN_ONLY) { - s->match_length = longest_match (s, hash_head); - } - /* longest_match() sets match_start */ - } - if (s->match_length >= MIN_MATCH) { - check_match(s, s->strstart, s->match_start, s->match_length); - - _tr_tally_dist(s, s->strstart - s->match_start, - s->match_length - MIN_MATCH, bflush); - - s->lookahead -= s->match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ -#ifndef FASTEST - if (s->match_length <= s->max_insert_length && - s->lookahead >= MIN_MATCH) { - s->match_length--;/* string at strstart already in hash table */ - do { - s->strstart++; - INSERT_STRING(s, s->strstart, hash_head); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s->match_length != 0); - s->strstart++; - } else -#endif - { - s->strstart += s->match_length; - s->match_length = 0; - s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); - s->lookahead--; - s->strstart++; - } - if (bflush) FLUSH_BLOCK(s, 0); - } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -local block_state deflate_slow( - deflate_state *s, - int flush) -{ - IPos hash_head = NIL; /* head of hash chain */ - int bflush; /* set if current block must be flushed */ - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s->lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { - return need_more; - } - if (s->lookahead == 0) break; /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - if (s->lookahead >= MIN_MATCH) { - INSERT_STRING(s, s->strstart, hash_head); - } - - /* Find the longest match, discarding those <= prev_length. - */ - s->prev_length = s->match_length, s->prev_match = s->match_start; - s->match_length = MIN_MATCH-1; - - if (hash_head != NIL && s->prev_length < s->max_lazy_match && - s->strstart - hash_head <= MAX_DIST(s)) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - if (s->strategy != Z_HUFFMAN_ONLY) { - s->match_length = longest_match (s, hash_head); - } - /* longest_match() sets match_start */ - - if (s->match_length <= 5 && (s->strategy == Z_FILTERED || - (s->match_length == MIN_MATCH && - s->strstart - s->match_start > TOO_FAR))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s->match_length = MIN_MATCH-1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { - uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - check_match(s, s->strstart-1, s->prev_match, s->prev_length); - - _tr_tally_dist(s, s->strstart -1 - s->prev_match, - s->prev_length - MIN_MATCH, bflush); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s->lookahead -= s->prev_length-1; - s->prev_length -= 2; - do { - if (++s->strstart <= max_insert) { - INSERT_STRING(s, s->strstart, hash_head); - } - } while (--s->prev_length != 0); - s->match_available = 0; - s->match_length = MIN_MATCH-1; - s->strstart++; - - if (bflush) FLUSH_BLOCK(s, 0); - - } else if (s->match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); - if (bflush) { - FLUSH_BLOCK_ONLY(s, 0); - } - s->strstart++; - s->lookahead--; - if (s->strm->avail_out == 0) return need_more; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s->match_available = 1; - s->strstart++; - s->lookahead--; - } - } - Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s->match_available) { - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); - s->match_available = 0; - } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; -} diff --git a/src/libs/pdflib/libs/flate/deflate.h b/src/libs/pdflib/libs/flate/deflate.h deleted file mode 100644 index 98ccea1fe3..0000000000 --- a/src/libs/pdflib/libs/flate/deflate.h +++ /dev/null @@ -1,321 +0,0 @@ -/* deflate.h -- internal compression state - * Copyright (C) 1995-2002 Jean-loup Gailly - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: deflate.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* @(#) $Id: deflate.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#ifndef _DEFLATE_H -#define _DEFLATE_H - -#include "zutil.h" - -/* =========================================================================== - * Internal compression state. - */ - -#define LENGTH_CODES 29 -/* number of length codes, not counting the special END_BLOCK code */ - -#define LITERALS 256 -/* number of literal bytes 0..255 */ - -#define L_CODES (LITERALS+1+LENGTH_CODES) -/* number of Literal or Length codes, including the END_BLOCK code */ - -#define D_CODES 30 -/* number of distance codes */ - -#define BL_CODES 19 -/* number of codes used to transfer the bit lengths */ - -#define HEAP_SIZE (2*L_CODES+1) -/* maximum heap size */ - -#define MAX_BITS 15 -/* All codes must not exceed MAX_BITS bits */ - -#define INIT_STATE 42 -#define BUSY_STATE 113 -#define FINISH_STATE 666 -/* Stream status */ - - -/* Data structure describing a single value and its code string. */ -typedef struct ct_data_s { - union { - ush freq; /* frequency count */ - ush code; /* bit string */ - } fc; - union { - ush dad; /* father node in Huffman tree */ - ush len; /* length of bit string */ - } dl; -} FAR ct_data; - -#define Freq fc.freq -#define Code fc.code -#define Dad dl.dad -#define Len dl.len - -typedef struct static_tree_desc_s static_tree_desc; - -typedef struct tree_desc_s { - ct_data *dyn_tree; /* the dynamic tree */ - int max_code; /* largest code with non zero frequency */ - static_tree_desc *stat_desc; /* the corresponding static tree */ -} FAR tree_desc; - -typedef ush Pos; -typedef Pos FAR Posf; -typedef unsigned IPos; - -/* A Pos is an index in the character window. We use short instead of int to - * save space in the various tables. IPos is used only for parameter passing. - */ - -typedef struct internal_state { - z_streamp strm; /* pointer back to this zlib stream */ - int status; /* as the name implies */ - Bytef *pending_buf; /* output still pending */ - ulg pending_buf_size; /* size of pending_buf */ - Bytef *pending_out; /* next pending byte to output to the stream */ - int pending; /* nb of bytes in the pending buffer */ - int noheader; /* suppress zlib header and adler32 */ - Byte data_type; /* UNKNOWN, BINARY or ASCII */ - Byte method; /* STORED (for zip only) or DEFLATED */ - int last_flush; /* value of flush param for previous deflate call */ - - /* used by deflate.c: */ - - uInt w_size; /* LZ77 window size (32K by default) */ - uInt w_bits; /* log2(w_size) (8..16) */ - uInt w_mask; /* w_size - 1 */ - - Bytef *window; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. Also, it limits - * the window size to 64K, which is quite useful on MSDOS. - * To do: use the user input buffer as sliding window. - */ - - ulg window_size; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - Posf *prev; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - Posf *head; /* Heads of the hash chains or NIL. */ - - uInt ins_h; /* hash index of string to be inserted */ - uInt hash_size; /* number of elements in hash table */ - uInt hash_bits; /* log2(hash_size) */ - uInt hash_mask; /* hash_size-1 */ - - uInt hash_shift; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - long block_start; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - uInt match_length; /* length of best match */ - IPos prev_match; /* previous match */ - int match_available; /* set if previous match exists */ - uInt strstart; /* start of string to insert */ - uInt match_start; /* start of matching string */ - uInt lookahead; /* number of valid bytes ahead in window */ - - uInt prev_length; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - uInt max_chain_length; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - uInt max_lazy_match; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ -# define max_insert_length max_lazy_match - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - int level; /* compression level (1..9) */ - int strategy; /* favor or force Huffman coding*/ - - uInt good_match; - /* Use a faster search when the previous match is longer than this */ - - int nice_match; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - /* Didn't use ct_data typedef below to supress compiler warning */ - struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - struct tree_desc_s l_desc; /* desc. for literal tree */ - struct tree_desc_s d_desc; /* desc. for distance tree */ - struct tree_desc_s bl_desc; /* desc. for bit length tree */ - - ush bl_count[MAX_BITS+1]; - /* number of codes at each bit length for an optimal tree */ - - int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - int heap_len; /* number of elements in the heap */ - int heap_max; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - uch depth[2*L_CODES+1]; - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - uchf *l_buf; /* buffer for literals or lengths */ - - uInt lit_bufsize; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - uInt last_lit; /* running index in l_buf */ - - ushf *d_buf; - /* Buffer for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - ulg opt_len; /* bit length of current block with optimal trees */ - ulg static_len; /* bit length of current block with static trees */ - uInt matches; /* number of string matches in current block */ - int last_eob_len; /* bit length of EOB code for last block */ - -#ifdef DEBUG - ulg compressed_len; /* total bit length of compressed file mod 2^32 */ - ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ -#endif - - ush bi_buf; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - int bi_valid; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - -} FAR deflate_state; - -/* Output a byte on the stream. - * IN assertion: there is enough room in pending_buf. - */ -#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} - - -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) -/* Minimum amount of lookahead, except at the end of the input file. - * See deflate.c for comments about the MIN_MATCH+1. - */ - -#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) -/* In order to simplify the code, particularly on 16 bit machines, match - * distances are limited to MAX_DIST instead of WSIZE. - */ - - /* in trees.c */ -void _tr_init OF((deflate_state *s)); -int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); -void _tr_align OF((deflate_state *s)); -void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); - -#define d_code(dist) \ - ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) -/* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. _dist_code[256] and _dist_code[257] are never - * used. - */ - -#ifndef DEBUG -/* Inline versions of _tr_tally for speed: */ - -#if defined(GEN_TREES_H) || !defined(STDC) - extern uch _length_code[]; - extern uch _dist_code[]; -#else - extern const uch _length_code[]; - extern const uch _dist_code[]; -#endif - -# define _tr_tally_lit(s, c, flush) \ - { uch cc = (c); \ - s->d_buf[s->last_lit] = 0; \ - s->l_buf[s->last_lit++] = cc; \ - s->dyn_ltree[cc].Freq++; \ - flush = (s->last_lit == s->lit_bufsize-1); \ - } -# define _tr_tally_dist(s, distance, length, flush) \ - { uch len = (length); \ - ush dist = (distance); \ - s->d_buf[s->last_lit] = dist; \ - s->l_buf[s->last_lit++] = len; \ - dist--; \ - s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ - s->dyn_dtree[d_code(dist)].Freq++; \ - flush = (s->last_lit == s->lit_bufsize-1); \ - } -#else -# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) -# define _tr_tally_dist(s, distance, length, flush) \ - flush = _tr_tally(s, distance, length) -#endif - -#endif diff --git a/src/libs/pdflib/libs/flate/flate.dsp b/src/libs/pdflib/libs/flate/flate.dsp deleted file mode 100644 index bb32645bab..0000000000 --- a/src/libs/pdflib/libs/flate/flate.dsp +++ /dev/null @@ -1,340 +0,0 @@ -# Microsoft Developer Studio Project File - Name="flate" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=flate - Win32 Debug PSP DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "flate.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "flate.mak" CFG="flate - Win32 Debug PSP DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "flate - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Release PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Release mtDLL PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Debug PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Release DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Debug DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Release PSP DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "flate - Win32 Debug PSP DLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "flate - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "..\pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Release PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_PSP" -# PROP BASE Intermediate_Dir "Release_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_PSP" -# PROP Intermediate_Dir "Release_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Release mtDLL PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL_PSP" -# PROP BASE Intermediate_Dir "Release_mtDLL_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL_PSP" -# PROP Intermediate_Dir "Release_mtDLL_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Debug PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_PSP" -# PROP BASE Intermediate_Dir "Debug_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_PSP" -# PROP Intermediate_Dir "Debug_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Release PSP DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_PSP_DLL" -# PROP BASE Intermediate_Dir "Release_PSP_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_PSP_DLL" -# PROP Intermediate_Dir "Release_PSP_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ELSEIF "$(CFG)" == "flate - Win32 Debug PSP DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_PSP_DLL" -# PROP BASE Intermediate_Dir "Debug_PSP_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_PSP_DLL" -# PROP Intermediate_Dir "Debug_PSP_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"zlib.lib" -# ADD LIB32 /nologo /out:"zlib.lib" - -!ENDIF - -# Begin Target - -# Name "flate - Win32 Release" -# Name "flate - Win32 Debug" -# Name "flate - Win32 Release mtDLL" -# Name "flate - Win32 Release PSP" -# Name "flate - Win32 Release mtDLL PSP" -# Name "flate - Win32 Debug PSP" -# Name "flate - Win32 Release DLL" -# Name "flate - Win32 Debug DLL" -# Name "flate - Win32 Release PSP DLL" -# Name "flate - Win32 Debug PSP DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\adler32.c -# End Source File -# Begin Source File - -SOURCE=.\compress.c -# End Source File -# Begin Source File - -SOURCE=.\crc32.c -# End Source File -# Begin Source File - -SOURCE=.\deflate.c -# End Source File -# Begin Source File - -SOURCE=.\infblock.c -# End Source File -# Begin Source File - -SOURCE=.\infcodes.c -# End Source File -# Begin Source File - -SOURCE=.\inffast.c -# End Source File -# Begin Source File - -SOURCE=.\inflate.c -# End Source File -# Begin Source File - -SOURCE=.\inftrees.c -# End Source File -# Begin Source File - -SOURCE=.\infutil.c -# End Source File -# Begin Source File - -SOURCE=.\trees.c -# End Source File -# Begin Source File - -SOURCE=.\uncompr.c -# End Source File -# Begin Source File - -SOURCE=.\zutil.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/flate/infblock.c b/src/libs/pdflib/libs/flate/infblock.c deleted file mode 100644 index c011250efe..0000000000 --- a/src/libs/pdflib/libs/flate/infblock.c +++ /dev/null @@ -1,405 +0,0 @@ -/* infblock.c -- interpret and process block types to last block - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: infblock.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "infblock.h" -#include "inftrees.h" -#include "infcodes.h" -#include "infutil.h" - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct inflate_codes_state {int dummy;}; *//* for buggy compilers */ - -/* simplify the use of the inflate_huft type with some defines */ -#define exop word.what.Exop -#define bits word.what.Bits - -/* Table for deflate from PKZIP's appnote.txt. */ -local const uInt border[] = { /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - -/* - Notes beyond the 1.93a appnote.txt: - - 1. Distance pointers never point before the beginning of the output - stream. - 2. Distance pointers can point back across blocks, up to 32k away. - 3. There is an implied maximum of 7 bits for the bit length table and - 15 bits for the actual data. - 4. If only one code exists, then it is encoded using one bit. (Zero - would be more efficient, but perhaps a little confusing.) If two - codes exist, they are coded using one bit each (0 and 1). - 5. There is no way of sending zero distance codes--a dummy must be - sent if there are none. (History: a pre 2.0 version of PKZIP would - store blocks with no distance codes, but this was discovered to be - too harsh a criterion.) Valid only for 1.93a. 2.04c does allow - zero distance codes, which is sent as one code of zero bits in - length. - 6. There are up to 286 literal/length codes. Code 256 represents the - end-of-block. Note however that the static length tree defines - 288 codes just to fill out the Huffman codes. Codes 286 and 287 - cannot be used though, since there is no length base or extra bits - defined for them. Similarily, there are up to 30 distance codes. - However, static trees define 32 codes (all 5 bits) to fill out the - Huffman codes, but the last two had better not show up in the data. - 7. Unzip can check dynamic Huffman blocks for complete code sets. - The exception is that a single code would not be complete (see #4). - 8. The five bits following the block type is really the number of - literal codes sent minus 257. - 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits - (1+6+6). Therefore, to output three times the length, you output - three codes (1+1+1), whereas to output four times the same length, - you only need two codes (1+3). Hmm. - 10. In the tree reconstruction algorithm, Code = Code + Increment - only if BitLength(i) is not zero. (Pretty obvious.) - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) - 12. Note: length code 284 can represent 227-258, but length code 285 - really is 258. The last length deserves its own, short code - since it gets used a lot in very redundant files. The length - 258 is special since 258 - 3 (the min match length) is 255. - 13. The literal/length and distance code bit lengths are read as a - single stream of lengths. It is possible (and advantageous) for - a repeat code (16, 17, or 18) to go across the boundary between - the two sets of lengths. - */ - - -void inflate_blocks_reset( -inflate_blocks_statef *s, -z_streamp z, -uLongf *c) -{ - if (c != Z_NULL) - *c = s->check; - if (s->mode == BTREE || s->mode == DTREE) - ZFREE(z, s->sub.trees.blens); - if (s->mode == CODES) - inflate_codes_free(s->sub.decode.codes, z); - s->mode = TYPE; - s->bitk = 0; - s->bitb = 0; - s->read = s->write = s->window; - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0); - Tracev((stderr, "inflate: blocks reset\n")); -} - - -inflate_blocks_statef *inflate_blocks_new( -z_streamp z, -check_func c, -uInt w) -{ - inflate_blocks_statef *s; - - if ((s = (inflate_blocks_statef *)ZALLOC - (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL) - return s; - if ((s->hufts = - (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL) - { - ZFREE(z, s); - return Z_NULL; - } - if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL) - { - ZFREE(z, s->hufts); - ZFREE(z, s); - return Z_NULL; - } - s->end = s->window + w; - s->checkfn = c; - s->mode = TYPE; - Tracev((stderr, "inflate: blocks allocated\n")); - inflate_blocks_reset(s, z, Z_NULL); - return s; -} - - -int inflate_blocks( -inflate_blocks_statef *s, -z_streamp z, -int r) -{ - uInt t; /* temporary storage */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Bytef *p; /* input data pointer */ - uInt n; /* bytes available there */ - Bytef *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - - /* copy input/output information to locals (UPDATE macro restores) */ - LOAD - - /* process input based on current state */ - while (1) switch (s->mode) - { - case TYPE: - NEEDBITS(3) - t = (uInt)b & 7; - s->last = t & 1; - switch (t >> 1) - { - case 0: /* stored */ - Tracev((stderr, "inflate: stored block%s\n", - s->last ? " (last)" : "")); - DUMPBITS(3) - t = k & 7; /* go to byte boundary */ - DUMPBITS(t) - s->mode = LENS; /* get length of stored block */ - break; - case 1: /* fixed */ - Tracev((stderr, "inflate: fixed codes block%s\n", - s->last ? " (last)" : "")); - { - uInt bl, bd; - inflate_huft *tl, *td; - - inflate_trees_fixed(&bl, &bd, &tl, &td, z); - s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z); - if (s->sub.decode.codes == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - } - DUMPBITS(3) - s->mode = CODES; - break; - case 2: /* dynamic */ - Tracev((stderr, "inflate: dynamic codes block%s\n", - s->last ? " (last)" : "")); - DUMPBITS(3) - s->mode = TABLE; - break; - case 3: /* illegal */ - DUMPBITS(3) - s->mode = BAD; - z->msg = (char*)"invalid block type"; - r = Z_DATA_ERROR; - LEAVE - } - break; - case LENS: - NEEDBITS(32) - if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) - { - s->mode = BAD; - z->msg = (char*)"invalid stored block lengths"; - r = Z_DATA_ERROR; - LEAVE - } - s->sub.left = (uInt)b & 0xffff; - b = k = 0; /* dump bits */ - Tracev((stderr, "inflate: stored length %u\n", s->sub.left)); - s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE); - break; - case STORED: - if (n == 0) - LEAVE - NEEDOUT - t = s->sub.left; - if (t > n) t = n; - if (t > m) t = m; - zmemcpy(q, p, t); - p += t; n -= t; - q += t; m -= t; - if ((s->sub.left -= t) != 0) - break; - Tracev((stderr, "inflate: stored end, %lu total out\n", - z->total_out + (q >= s->read ? q - s->read : - (s->end - s->read) + (q - s->window)))); - s->mode = s->last ? DRY : TYPE; - break; - case TABLE: - NEEDBITS(14) - s->sub.trees.table = t = (uInt)b & 0x3fff; -#ifndef PKZIP_BUG_WORKAROUND - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) - { - s->mode = BAD; - z->msg = (char*)"too many length or distance symbols"; - r = Z_DATA_ERROR; - LEAVE - } -#endif - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); - if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - DUMPBITS(14) - s->sub.trees.index = 0; - Tracev((stderr, "inflate: table sizes ok\n")); - s->mode = BTREE; - case BTREE: - while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10)) - { - NEEDBITS(3) - s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7; - DUMPBITS(3) - } - while (s->sub.trees.index < 19) - s->sub.trees.blens[border[s->sub.trees.index++]] = 0; - s->sub.trees.bb = 7; - t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb, - &s->sub.trees.tb, s->hufts, z); - if (t != Z_OK) - { - r = t; - if (r == Z_DATA_ERROR) - { - ZFREE(z, s->sub.trees.blens); - s->mode = BAD; - } - LEAVE - } - s->sub.trees.index = 0; - Tracev((stderr, "inflate: bits tree ok\n")); - s->mode = DTREE; - case DTREE: - while (t = s->sub.trees.table, - s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) - { - inflate_huft *h; - uInt i, j, c; - - t = s->sub.trees.bb; - NEEDBITS(t) - h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]); - t = h->bits; - c = h->base; - if (c < 16) - { - DUMPBITS(t) - s->sub.trees.blens[s->sub.trees.index++] = c; - } - else /* c == 16..18 */ - { - i = c == 18 ? 7 : c - 14; - j = c == 18 ? 11 : 3; - NEEDBITS(t + i) - DUMPBITS(t) - j += (uInt)b & inflate_mask[i]; - DUMPBITS(i) - i = s->sub.trees.index; - t = s->sub.trees.table; - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || - (c == 16 && i < 1)) - { - ZFREE(z, s->sub.trees.blens); - s->mode = BAD; - z->msg = (char*)"invalid bit length repeat"; - r = Z_DATA_ERROR; - LEAVE - } - c = c == 16 ? s->sub.trees.blens[i - 1] : 0; - do { - s->sub.trees.blens[i++] = c; - } while (--j); - s->sub.trees.index = i; - } - } - s->sub.trees.tb = Z_NULL; - { - uInt bl, bd; - inflate_huft *tl, *td; - inflate_codes_statef *c; - - bl = 9; /* must be <= 9 for lookahead assumptions */ - bd = 6; /* must be <= 9 for lookahead assumptions */ - t = s->sub.trees.table; - t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), - s->sub.trees.blens, &bl, &bd, &tl, &td, - s->hufts, z); - if (t != Z_OK) - { - if (t == (uInt)Z_DATA_ERROR) - { - ZFREE(z, s->sub.trees.blens); - s->mode = BAD; - } - r = t; - LEAVE - } - Tracev((stderr, "inflate: trees ok\n")); - if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - s->sub.decode.codes = c; - } - ZFREE(z, s->sub.trees.blens); - s->mode = CODES; - case CODES: - UPDATE - if ((r = inflate_codes(s, z, r)) != Z_STREAM_END) - return inflate_flush(s, z, r); - r = Z_OK; - inflate_codes_free(s->sub.decode.codes, z); - LOAD - Tracev((stderr, "inflate: codes end, %lu total out\n", - z->total_out + (q >= s->read ? q - s->read : - (s->end - s->read) + (q - s->window)))); - if (!s->last) - { - s->mode = TYPE; - break; - } - s->mode = DRY; - case DRY: - FLUSH - if (s->read != s->write) - LEAVE - s->mode = DONE; - case DONE: - r = Z_STREAM_END; - LEAVE - case BAD: - r = Z_DATA_ERROR; - LEAVE - default: - r = Z_STREAM_ERROR; - LEAVE - } -} - - -int inflate_blocks_free( -inflate_blocks_statef *s, -z_streamp z) -{ - inflate_blocks_reset(s, z, Z_NULL); - ZFREE(z, s->window); - ZFREE(z, s->hufts); - ZFREE(z, s); - Tracev((stderr, "inflate: blocks freed\n")); - return Z_OK; -} - - -void inflate_set_dictionary( -inflate_blocks_statef *s, -const Bytef *d, -uInt n) -{ - zmemcpy(s->window, d, n); - s->read = s->write = s->window + n; -} - - -/* Returns true if inflate is currently at the end of a block generated - * by Z_SYNC_FLUSH or Z_FULL_FLUSH. - * IN assertion: s != Z_NULL - */ -int inflate_blocks_sync_point( -inflate_blocks_statef *s) -{ - return s->mode == LENS; -} diff --git a/src/libs/pdflib/libs/flate/infblock.h b/src/libs/pdflib/libs/flate/infblock.h deleted file mode 100644 index 0002c6b8f6..0000000000 --- a/src/libs/pdflib/libs/flate/infblock.h +++ /dev/null @@ -1,42 +0,0 @@ -/* infblock.h -- header to use infblock.c - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: infblock.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* struct inflate_blocks_state; */ -typedef struct inflate_blocks_state FAR inflate_blocks_statef; - -extern inflate_blocks_statef * inflate_blocks_new OF(( - z_streamp z, - check_func c, /* check function */ - uInt w)); /* window size */ - -extern int inflate_blocks OF(( - inflate_blocks_statef *, - z_streamp , - int)); /* initial return code */ - -extern void inflate_blocks_reset OF(( - inflate_blocks_statef *, - z_streamp , - uLongf *)); /* check value on output */ - -extern int inflate_blocks_free OF(( - inflate_blocks_statef *, - z_streamp)); - -extern void inflate_set_dictionary OF(( - inflate_blocks_statef *s, - const Bytef *d, /* dictionary */ - uInt n)); /* dictionary length */ - -extern int inflate_blocks_sync_point OF(( - inflate_blocks_statef *s)); diff --git a/src/libs/pdflib/libs/flate/infcodes.c b/src/libs/pdflib/libs/flate/infcodes.c deleted file mode 100644 index b9061bdfe9..0000000000 --- a/src/libs/pdflib/libs/flate/infcodes.c +++ /dev/null @@ -1,252 +0,0 @@ -/* infcodes.c -- process literals and length/distance pairs - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: infcodes.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "inftrees.h" -#include "infblock.h" -#include "infcodes.h" -#include "infutil.h" -#include "inffast.h" - -/* simplify the use of the inflate_huft type with some defines */ -#define exop word.what.Exop -#define bits word.what.Bits - -typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - START, /* x: set up for LEN */ - LEN, /* i: get length/literal/eob next */ - LENEXT, /* i: getting length extra (have base) */ - DIST, /* i: get distance next */ - DISTEXT, /* i: getting distance extra */ - COPY, /* o: copying bytes in window, waiting for space */ - LIT, /* o: got literal, waiting for output space */ - WASH, /* o: got eob, possibly still output waiting */ - END, /* x: got eob and all data flushed */ - BADCODE} /* x: got error */ -inflate_codes_mode; - -/* inflate codes private state */ -struct inflate_codes_state { - - /* mode */ - inflate_codes_mode mode; /* current inflate_codes mode */ - - /* mode dependent information */ - uInt len; - union { - struct { - inflate_huft *tree; /* pointer into tree */ - uInt need; /* bits needed */ - } code; /* if LEN or DIST, where in tree */ - uInt lit; /* if LIT, literal */ - struct { - uInt get; /* bits to get for extra */ - uInt dist; /* distance back to copy from */ - } copy; /* if EXT or COPY, where and how much */ - } sub; /* submode */ - - /* mode independent information */ - Byte lbits; /* ltree bits decoded per branch */ - Byte dbits; /* dtree bits decoder per branch */ - inflate_huft *ltree; /* literal/length/eob tree */ - inflate_huft *dtree; /* distance tree */ - -}; - - -inflate_codes_statef *inflate_codes_new( -uInt bl, uInt bd, -inflate_huft *tl, -inflate_huft *td, /* need separate declaration for Borland C++ */ -z_streamp z) -{ - inflate_codes_statef *c; - - if ((c = (inflate_codes_statef *) - ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL) - { - c->mode = START; - c->lbits = (Byte)bl; - c->dbits = (Byte)bd; - c->ltree = tl; - c->dtree = td; - Tracev((stderr, "inflate: codes new\n")); - } - return c; -} - - -int inflate_codes( -inflate_blocks_statef *s, -z_streamp z, -int r) -{ - uInt j; /* temporary storage */ - inflate_huft *t; /* temporary pointer */ - uInt e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Bytef *p; /* input data pointer */ - uInt n; /* bytes available there */ - Bytef *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - Bytef *f; /* pointer to copy strings from */ - inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ - - /* copy input/output information to locals (UPDATE macro restores) */ - LOAD - - /* process input and output based on current state */ - while (1) switch (c->mode) - { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - case START: /* x: set up for LEN */ -#ifndef SLOW - if (m >= 258 && n >= 10) - { - UPDATE - r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); - LOAD - if (r != Z_OK) - { - c->mode = r == Z_STREAM_END ? WASH : BADCODE; - break; - } - } -#endif /* !SLOW */ - c->sub.code.need = c->lbits; - c->sub.code.tree = c->ltree; - c->mode = LEN; - case LEN: /* i: get length/literal/eob next */ - j = c->sub.code.need; - NEEDBITS(j) - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); - DUMPBITS(t->bits) - e = (uInt)(t->exop); - if (e == 0) /* literal */ - { - c->sub.lit = t->base; - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", t->base)); - c->mode = LIT; - break; - } - if (e & 16) /* length */ - { - c->sub.copy.get = e & 15; - c->len = t->base; - c->mode = LENEXT; - break; - } - if ((e & 64) == 0) /* next table */ - { - c->sub.code.need = e; - c->sub.code.tree = t + t->base; - break; - } - if (e & 32) /* end of block */ - { - Tracevv((stderr, "inflate: end of block\n")); - c->mode = WASH; - break; - } - c->mode = BADCODE; /* invalid code */ - z->msg = (char*)"invalid literal/length code"; - r = Z_DATA_ERROR; - LEAVE - case LENEXT: /* i: getting length extra (have base) */ - j = c->sub.copy.get; - NEEDBITS(j) - c->len += (uInt)b & inflate_mask[j]; - DUMPBITS(j) - c->sub.code.need = c->dbits; - c->sub.code.tree = c->dtree; - Tracevv((stderr, "inflate: length %u\n", c->len)); - c->mode = DIST; - case DIST: /* i: get distance next */ - j = c->sub.code.need; - NEEDBITS(j) - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); - DUMPBITS(t->bits) - e = (uInt)(t->exop); - if (e & 16) /* distance */ - { - c->sub.copy.get = e & 15; - c->sub.copy.dist = t->base; - c->mode = DISTEXT; - break; - } - if ((e & 64) == 0) /* next table */ - { - c->sub.code.need = e; - c->sub.code.tree = t + t->base; - break; - } - c->mode = BADCODE; /* invalid code */ - z->msg = (char*)"invalid distance code"; - r = Z_DATA_ERROR; - LEAVE - case DISTEXT: /* i: getting distance extra */ - j = c->sub.copy.get; - NEEDBITS(j) - c->sub.copy.dist += (uInt)b & inflate_mask[j]; - DUMPBITS(j) - Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist)); - c->mode = COPY; - case COPY: /* o: copying bytes in window, waiting for space */ - f = q - c->sub.copy.dist; - while (f < s->window) /* modulo window size-"while" instead */ - f += s->end - s->window; /* of "if" handles invalid distances */ - while (c->len) - { - NEEDOUT - OUTBYTE(*f++) - if (f == s->end) - f = s->window; - c->len--; - } - c->mode = START; - break; - case LIT: /* o: got literal, waiting for output space */ - NEEDOUT - OUTBYTE(c->sub.lit) - c->mode = START; - break; - case WASH: /* o: got eob, possibly more output */ - if (k > 7) /* return unused byte, if any */ - { - Assert(k < 16, "inflate_codes grabbed too many bytes") - k -= 8; - n++; - p--; /* can always return one */ - } - FLUSH - if (s->read != s->write) - LEAVE - c->mode = END; - case END: - r = Z_STREAM_END; - LEAVE - case BADCODE: /* x: got error */ - r = Z_DATA_ERROR; - LEAVE - default: - r = Z_STREAM_ERROR; - LEAVE - } -#ifdef NEED_DUMMY_RETURN - return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ -#endif -} - - -void inflate_codes_free( -inflate_codes_statef *c, -z_streamp z) -{ - ZFREE(z, c); - Tracev((stderr, "inflate: codes free\n")); -} diff --git a/src/libs/pdflib/libs/flate/infcodes.h b/src/libs/pdflib/libs/flate/infcodes.h deleted file mode 100644 index afc2430262..0000000000 --- a/src/libs/pdflib/libs/flate/infcodes.h +++ /dev/null @@ -1,30 +0,0 @@ -/* infcodes.h -- header to use infcodes.c - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: infcodes.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -struct inflate_codes_state; -typedef struct inflate_codes_state FAR inflate_codes_statef; - -extern inflate_codes_statef *inflate_codes_new OF(( - uInt, uInt, - inflate_huft *, inflate_huft *, - z_streamp )); - -extern int inflate_codes OF(( - inflate_blocks_statef *, - z_streamp , - int)); - -extern void inflate_codes_free OF(( - inflate_codes_statef *, - z_streamp )); - diff --git a/src/libs/pdflib/libs/flate/inffast.c b/src/libs/pdflib/libs/flate/inffast.c deleted file mode 100644 index 13cab90cb9..0000000000 --- a/src/libs/pdflib/libs/flate/inffast.c +++ /dev/null @@ -1,185 +0,0 @@ -/* inffast.c -- process literals and length/distance pairs fast - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: inffast.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "inftrees.h" -#include "infblock.h" -#include "infcodes.h" -#include "infutil.h" -#include "inffast.h" - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct inflate_codes_state {int dummy;}; *//* for buggy compilers */ - -/* simplify the use of the inflate_huft type with some defines */ -#define exop word.what.Exop -#define bits word.what.Bits - -/* macros for bit input with no checking and for returning unused bytes */ -#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;} - -/* Called with number of bytes left to write in window at least 258 - (the maximum string length) and number of input bytes available - at least ten. The ten bytes are six bytes for the longest length/ - distance pair plus four bytes for overloading the bit buffer. */ - -int inflate_fast( -uInt bl, uInt bd, -inflate_huft *tl, -inflate_huft *td,/* need separate declaration for Borland C++ */ -inflate_blocks_statef *s, -z_streamp z) -{ - inflate_huft *t; /* temporary pointer */ - uInt e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Bytef *p; /* input data pointer */ - uInt n; /* bytes available there */ - Bytef *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - uInt ml; /* mask for literal/length tree */ - uInt md; /* mask for distance tree */ - uInt c; /* bytes to copy */ - uInt d; /* distance back to copy from */ - Bytef *r; /* copy source pointer */ - - /* load input, output, bit values */ - LOAD - - /* initialize masks */ - ml = inflate_mask[bl]; - md = inflate_mask[bd]; - - /* do until not enough input or output space for fast loop */ - do { /* assume called with m >= 258 && n >= 10 */ - /* get literal/length code */ - GRABBITS(20) /* max bits for literal/length code */ - if ((e = (t = tl + ((uInt)b & ml))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - continue; - } - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits for length */ - e &= 15; - c = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv((stderr, "inflate: * length %u\n", c)); - - /* decode distance base of block to copy */ - GRABBITS(15); /* max bits for distance code */ - e = (t = td + ((uInt)b & md))->exop; - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits to add to distance base */ - e &= 15; - GRABBITS(e) /* get extra bits (up to 13) */ - d = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv((stderr, "inflate: * distance %u\n", d)); - - /* do the copy */ - m -= c; - r = q - d; - if (r < s->window) /* wrap if needed */ - { - do { - r += s->end - s->window; /* force pointer in window */ - } while (r < s->window); /* covers invalid distances */ - e = s->end - r; - if (c > e) - { - c -= e; /* wrapped copy */ - do { - *q++ = *r++; - } while (--e); - r = s->window; - do { - *q++ = *r++; - } while (--c); - } - else /* normal copy */ - { - *q++ = *r++; c--; - *q++ = *r++; c--; - do { - *q++ = *r++; - } while (--c); - } - } - else /* normal copy */ - { - *q++ = *r++; c--; - *q++ = *r++; c--; - do { - *q++ = *r++; - } while (--c); - } - break; - } - else if ((e & 64) == 0) - { - t += t->base; - e = (t += ((uInt)b & inflate_mask[e]))->exop; - } - else - { - z->msg = (char*)"invalid distance code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - break; - } - if ((e & 64) == 0) - { - t += t->base; - if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - break; - } - } - else if (e & 32) - { - Tracevv((stderr, "inflate: * end of block\n")); - UNGRAB - UPDATE - return Z_STREAM_END; - } - else - { - z->msg = (char*)"invalid literal/length code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - } while (m >= 258 && n >= 10); - - /* not enough input or output--restore pointers and return */ - UNGRAB - UPDATE - return Z_OK; -} diff --git a/src/libs/pdflib/libs/flate/inffast.h b/src/libs/pdflib/libs/flate/inffast.h deleted file mode 100644 index acb552e00c..0000000000 --- a/src/libs/pdflib/libs/flate/inffast.h +++ /dev/null @@ -1,20 +0,0 @@ -/* inffast.h -- header to use inffast.c - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: inffast.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -extern int inflate_fast OF(( - uInt, - uInt, - inflate_huft *, - inflate_huft *, - inflate_blocks_statef *, - z_streamp )); diff --git a/src/libs/pdflib/libs/flate/inffixed.h b/src/libs/pdflib/libs/flate/inffixed.h deleted file mode 100644 index 7cc30e5637..0000000000 --- a/src/libs/pdflib/libs/flate/inffixed.h +++ /dev/null @@ -1,154 +0,0 @@ -/* inffixed.h -- table for decoding fixed codes - * Generated automatically by the maketree.c program - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: inffixed.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -local uInt fixed_bl = 9; -local uInt fixed_bd = 5; -local inflate_huft fixed_tl[] = { - {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, - {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192}, - {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160}, - {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224}, - {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144}, - {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208}, - {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176}, - {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240}, - {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, - {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200}, - {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168}, - {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232}, - {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152}, - {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216}, - {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184}, - {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248}, - {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, - {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196}, - {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164}, - {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228}, - {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148}, - {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212}, - {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180}, - {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244}, - {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204}, - {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172}, - {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236}, - {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156}, - {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220}, - {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188}, - {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252}, - {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, - {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194}, - {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162}, - {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226}, - {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146}, - {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210}, - {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178}, - {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242}, - {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, - {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202}, - {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170}, - {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234}, - {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154}, - {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218}, - {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186}, - {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250}, - {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, - {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198}, - {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166}, - {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230}, - {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150}, - {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214}, - {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182}, - {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246}, - {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206}, - {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174}, - {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238}, - {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158}, - {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222}, - {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190}, - {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254}, - {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, - {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193}, - {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161}, - {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225}, - {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145}, - {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209}, - {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177}, - {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241}, - {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, - {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201}, - {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169}, - {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233}, - {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153}, - {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217}, - {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185}, - {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249}, - {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, - {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197}, - {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165}, - {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229}, - {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149}, - {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213}, - {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181}, - {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245}, - {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205}, - {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173}, - {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237}, - {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157}, - {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221}, - {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189}, - {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253}, - {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, - {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195}, - {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163}, - {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227}, - {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147}, - {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211}, - {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179}, - {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243}, - {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, - {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203}, - {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171}, - {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235}, - {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155}, - {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219}, - {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187}, - {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251}, - {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, - {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199}, - {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167}, - {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231}, - {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151}, - {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215}, - {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183}, - {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247}, - {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207}, - {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175}, - {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239}, - {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159}, - {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223}, - {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191}, - {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255} - }; -local inflate_huft fixed_td[] = { - {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097}, - {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385}, - {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193}, - {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577}, - {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145}, - {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577}, - {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289}, - {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577} - }; diff --git a/src/libs/pdflib/libs/flate/inflate.c b/src/libs/pdflib/libs/flate/inflate.c deleted file mode 100644 index 059b96f9a5..0000000000 --- a/src/libs/pdflib/libs/flate/inflate.c +++ /dev/null @@ -1,368 +0,0 @@ -/* inflate.c -- zlib interface to inflate modules - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: inflate.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "infblock.h" - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct inflate_blocks_state {int dummy;}; *//* for buggy compilers */ - -typedef enum { - METHOD, /* waiting for method byte */ - FLAG, /* waiting for flag byte */ - DICT4, /* four dictionary check bytes to go */ - DICT3, /* three dictionary check bytes to go */ - DICT2, /* two dictionary check bytes to go */ - DICT1, /* one dictionary check byte to go */ - DICT0, /* waiting for inflateSetDictionary */ - BLOCKS, /* decompressing blocks */ - CHECK4, /* four check bytes to go */ - CHECK3, /* three check bytes to go */ - CHECK2, /* two check bytes to go */ - CHECK1, /* one check byte to go */ - DONE, /* finished check, done */ - BAD} /* got an error--stay here */ -inflate_mode; - -/* inflate private state */ -struct internal_state { - - /* mode */ - inflate_mode mode; /* current inflate mode */ - - /* mode dependent information */ - union { - uInt method; /* if FLAGS, method byte */ - struct { - uLong was; /* computed check value */ - uLong need; /* stream check value */ - } check; /* if CHECK, check values to compare */ - uInt marker; /* if BAD, inflateSync's marker bytes count */ - } sub; /* submode */ - - /* mode independent information */ - int nowrap; /* flag for no wrapper */ - uInt wbits; /* log2(window size) (8..15, defaults to 15) */ - inflate_blocks_statef - *blocks; /* current inflate_blocks state */ - -}; - - -int ZEXPORT inflateReset( -z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL) - return Z_STREAM_ERROR; - z->total_in = z->total_out = 0; - z->msg = Z_NULL; - z->state->mode = z->state->nowrap ? BLOCKS : METHOD; - inflate_blocks_reset(z->state->blocks, z, Z_NULL); - Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - - -int ZEXPORT inflateEnd( -z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) - return Z_STREAM_ERROR; - if (z->state->blocks != Z_NULL) - inflate_blocks_free(z->state->blocks, z); - ZFREE(z, z->state); - z->state = Z_NULL; - Tracev((stderr, "inflate: end\n")); - return Z_OK; -} - - -int ZEXPORT inflateInit2_( -z_streamp z, -int w, -const char *version, -int stream_size) -{ - if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || - stream_size != sizeof(z_stream)) - return Z_VERSION_ERROR; - - /* initialize state */ - if (z == Z_NULL) - return Z_STREAM_ERROR; - z->msg = Z_NULL; - if (z->zalloc == Z_NULL) - { - z->zalloc = zcalloc; - z->opaque = (voidpf)0; - } - if (z->zfree == Z_NULL) z->zfree = zcfree; - if ((z->state = (struct internal_state FAR *) - ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL) - return Z_MEM_ERROR; - z->state->blocks = Z_NULL; - - /* handle undocumented nowrap option (no zlib header or check) */ - z->state->nowrap = 0; - if (w < 0) - { - w = - w; - z->state->nowrap = 1; - } - - /* set window size */ - if (w < 8 || w > 15) - { - inflateEnd(z); - return Z_STREAM_ERROR; - } - z->state->wbits = (uInt)w; - - /* create inflate_blocks state */ - if ((z->state->blocks = - inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w)) - == Z_NULL) - { - inflateEnd(z); - return Z_MEM_ERROR; - } - Tracev((stderr, "inflate: allocated\n")); - - /* reset state */ - inflateReset(z); - return Z_OK; -} - - -int ZEXPORT inflateInit_( -z_streamp z, -const char *version, -int stream_size) -{ - return inflateInit2_(z, DEF_WBITS, version, stream_size); -} - - -#define NEEDBYTE {if(z->avail_in==0)return r;r=f;} -#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++) - -int ZEXPORT inflate( -z_streamp z, -int f) -{ - int r; - uInt b; - - if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL) - return Z_STREAM_ERROR; - f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; - r = Z_BUF_ERROR; - while (1) switch (z->state->mode) - { - case METHOD: - NEEDBYTE - if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED) - { - z->state->mode = BAD; - z->msg = (char*)"unknown compression method"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - if ((z->state->sub.method >> 4) + 8 > z->state->wbits) - { - z->state->mode = BAD; - z->msg = (char*)"invalid window size"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - z->state->mode = FLAG; - case FLAG: - NEEDBYTE - b = NEXTBYTE; - if (((z->state->sub.method << 8) + b) % 31) - { - z->state->mode = BAD; - z->msg = (char*)"incorrect header check"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - Tracev((stderr, "inflate: zlib header ok\n")); - if (!(b & PRESET_DICT)) - { - z->state->mode = BLOCKS; - break; - } - z->state->mode = DICT4; - case DICT4: - NEEDBYTE - z->state->sub.check.need = (uLong)NEXTBYTE << 24; - z->state->mode = DICT3; - case DICT3: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE << 16; - z->state->mode = DICT2; - case DICT2: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE << 8; - z->state->mode = DICT1; - case DICT1: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE; - z->adler = z->state->sub.check.need; - z->state->mode = DICT0; - return Z_NEED_DICT; - case DICT0: - z->state->mode = BAD; - z->msg = (char*)"need dictionary"; - z->state->sub.marker = 0; /* can try inflateSync */ - return Z_STREAM_ERROR; - case BLOCKS: - r = inflate_blocks(z->state->blocks, z, r); - if (r == Z_DATA_ERROR) - { - z->state->mode = BAD; - z->state->sub.marker = 0; /* can try inflateSync */ - break; - } - if (r == Z_OK) - r = f; - if (r != Z_STREAM_END) - return r; - r = f; - inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); - if (z->state->nowrap) - { - z->state->mode = DONE; - break; - } - z->state->mode = CHECK4; - case CHECK4: - NEEDBYTE - z->state->sub.check.need = (uLong)NEXTBYTE << 24; - z->state->mode = CHECK3; - case CHECK3: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE << 16; - z->state->mode = CHECK2; - case CHECK2: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE << 8; - z->state->mode = CHECK1; - case CHECK1: - NEEDBYTE - z->state->sub.check.need += (uLong)NEXTBYTE; - - if (z->state->sub.check.was != z->state->sub.check.need) - { - z->state->mode = BAD; - z->msg = (char*)"incorrect data check"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - Tracev((stderr, "inflate: zlib check ok\n")); - z->state->mode = DONE; - case DONE: - return Z_STREAM_END; - case BAD: - return Z_DATA_ERROR; - default: - return Z_STREAM_ERROR; - } -#ifdef NEED_DUMMY_RETURN - return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ -#endif -} - - -int ZEXPORT inflateSetDictionary( -z_streamp z, -const Bytef *dictionary, -uInt dictLength) -{ - uInt length = dictLength; - - if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0) - return Z_STREAM_ERROR; - - if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR; - z->adler = 1L; - - if (length >= ((uInt)1<state->wbits)) - { - length = (1<state->wbits)-1; - dictionary += dictLength - length; - } - inflate_set_dictionary(z->state->blocks, dictionary, length); - z->state->mode = BLOCKS; - return Z_OK; -} - - -int ZEXPORT inflateSync( -z_streamp z) -{ - uInt n; /* number of bytes to look at */ - Bytef *p; /* pointer to bytes */ - uInt m; /* number of marker bytes found in a row */ - uLong r, w; /* temporaries to save total_in and total_out */ - - /* set up */ - if (z == Z_NULL || z->state == Z_NULL) - return Z_STREAM_ERROR; - if (z->state->mode != BAD) - { - z->state->mode = BAD; - z->state->sub.marker = 0; - } - if ((n = z->avail_in) == 0) - return Z_BUF_ERROR; - p = z->next_in; - m = z->state->sub.marker; - - /* search */ - while (n && m < 4) - { - static const Byte mark[4] = {0, 0, 0xff, 0xff}; - if (*p == mark[m]) - m++; - else if (*p) - m = 0; - else - m = 4 - m; - p++, n--; - } - - /* restore */ - z->total_in += p - z->next_in; - z->next_in = p; - z->avail_in = n; - z->state->sub.marker = m; - - /* return no joy or set up to restart on a new block */ - if (m != 4) - return Z_DATA_ERROR; - r = z->total_in; w = z->total_out; - inflateReset(z); - z->total_in = r; z->total_out = w; - z->state->mode = BLOCKS; - return Z_OK; -} - - -/* Returns true if inflate is currently at the end of a block generated - * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH - * but removes the length bytes of the resulting empty stored block. When - * decompressing, PPP checks that at the end of input packet, inflate is - * waiting for these length bytes. - */ -int ZEXPORT inflateSyncPoint( -z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL) - return Z_STREAM_ERROR; - return inflate_blocks_sync_point(z->state->blocks); -} diff --git a/src/libs/pdflib/libs/flate/inftrees.c b/src/libs/pdflib/libs/flate/inftrees.c deleted file mode 100644 index 9177e1f079..0000000000 --- a/src/libs/pdflib/libs/flate/inftrees.c +++ /dev/null @@ -1,456 +0,0 @@ -/* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: inftrees.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "inftrees.h" - -#if !defined(BUILDFIXED) && !defined(STDC) -# define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */ -#endif - -const char inflate_copyright[] = - " inflate 1.1.4 Copyright 1995-2002 Mark Adler "; -/* - If you use the zlib library in a product, an acknowledgment is welcome - in the documentation of your product. If for some reason you cannot - include such an acknowledgment, I would appreciate that you keep this - copyright string in the executable of your product. - */ -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct internal_state {int dummy;}; *//* for buggy compilers */ - -/* simplify the use of the inflate_huft type with some defines */ -#define exop word.what.Exop -#define bits word.what.Bits - - -local int huft_build OF(( - uIntf *, /* code lengths in bits */ - uInt, /* number of codes */ - uInt, /* number of "simple" codes */ - const uIntf *, /* list of base values for non-simple codes */ - const uIntf *, /* list of extra bits for non-simple codes */ - inflate_huft * FAR*,/* result: starting table */ - uIntf *, /* maximum lookup bits (returns actual) */ - inflate_huft *, /* space for trees */ - uInt *, /* hufts used in space */ - uIntf * )); /* space for values */ - -/* Tables for deflate from PKZIP's appnote.txt. */ -local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* see note #13 above about 258 */ -local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */ -local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; -local const uInt cpdext[30] = { /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; - -/* - Huffman code decoding is performed using a multi-level table lookup. - The fastest way to decode is to simply build a lookup table whose - size is determined by the longest code. However, the time it takes - to build this table can also be a factor if the data being decoded - is not very long. The most common codes are necessarily the - shortest codes, so those codes dominate the decoding time, and hence - the speed. The idea is you can have a shorter table that decodes the - shorter, more probable codes, and then point to subsidiary tables for - the longer codes. The time it costs to decode the longer codes is - then traded against the time it takes to make longer tables. - - This results of this trade are in the variables lbits and dbits - below. lbits is the number of bits the first level table for literal/ - length codes can decode in one step, and dbits is the same thing for - the distance codes. Subsequent tables are also less than or equal to - those sizes. These values may be adjusted either when all of the - codes are shorter than that, in which case the longest code length in - bits is used, or when the shortest code is *longer* than the requested - table size, in which case the length of the shortest code in bits is - used. - - There are two different values for the two tables, since they code a - different number of possibilities each. The literal/length table - codes 286 possible values, or in a flat code, a little over eight - bits. The distance table codes 30 possible values, or a little less - than five bits, flat. The optimum values for speed end up being - about one bit more than those, so lbits is 8+1 and dbits is 5+1. - The optimum values may differ though from machine to machine, and - possibly even between compilers. Your mileage may vary. - */ - - -/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */ -#define BMAX 15 /* maximum bit length of any code */ - -local int huft_build( -uIntf *b, /* code lengths in bits (all assumed <= BMAX) */ -uInt n, /* number of codes (assumed <= 288) */ -uInt s, /* number of simple-valued codes (0..s-1) */ -const uIntf *d, /* list of base values for non-simple codes */ -const uIntf *e, /* list of extra bits for non-simple codes */ -inflate_huft * FAR *t, /* result: starting table */ -uIntf *m, /* maximum lookup bits, returns actual */ -inflate_huft *hp, /* space for trees */ -uInt *hn, /* hufts used in space */ -uIntf *v) /* working area: values in order of bit length */ -/* Given a list of code lengths and a maximum table size, make a set of - tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR - if the given code set is incomplete (the tables are still built in this - case), or Z_DATA_ERROR if the input is invalid. */ -{ - - uInt a; /* counter for codes of length k */ - uInt c[BMAX+1]; /* bit length count table */ - uInt f; /* i repeats in table every f entries */ - int g; /* maximum code length */ - int h; /* table level */ - register uInt i; /* counter, current code */ - register uInt j; /* counter */ - register int k; /* number of bits in current code */ - int l; /* bits per table (returned in m) */ - uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */ - register uIntf *p; /* pointer into c[], b[], or v[] */ - inflate_huft *q; /* points to current table */ - struct inflate_huft_s r; /* table entry for structure assignment */ - inflate_huft *u[BMAX]; /* table stack */ - register int w; /* bits before this table == (l * h) */ - uInt x[BMAX+1]; /* bit offsets, then code stack */ - uIntf *xp; /* pointer into x */ - int y; /* number of dummy codes added */ - uInt z; /* number of entries in current table */ - - - /* Generate counts for each bit length */ - p = c; -#define C0 *p++ = 0; -#define C2 C0 C0 C0 C0 -#define C4 C2 C2 C2 C2 - C4 /* clear c[]--assume BMAX+1 is 16 */ - p = b; i = n; - do { - c[*p++]++; /* assume all entries <= BMAX */ - } while (--i); - if (c[0] == n) /* null input--all zero length codes */ - { - *t = (inflate_huft *)Z_NULL; - *m = 0; - return Z_OK; - } - - - /* Find minimum and maximum length, bound *m by those */ - l = *m; - for (j = 1; j <= BMAX; j++) - if (c[j]) - break; - k = j; /* minimum code length */ - if ((uInt)l < j) - l = j; - for (i = BMAX; i; i--) - if (c[i]) - break; - g = i; /* maximum code length */ - if ((uInt)l > i) - l = i; - *m = l; - - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) - if ((y -= c[j]) < 0) - return Z_DATA_ERROR; - if ((y -= c[i]) < 0) - return Z_DATA_ERROR; - c[i] += y; - - - /* Generate starting offsets into the value table for each length */ - x[1] = j = 0; - p = c + 1; xp = x + 2; - while (--i) { /* note that i == g from above */ - *xp++ = (j += *p++); - } - - - /* Make a table of values in order of bit lengths */ - p = b; i = 0; - do { - if ((j = *p++) != 0) - v[x[j]++] = i; - } while (++i < n); - n = x[g]; /* set n to length of v */ - - - /* Generate the Huffman codes and for each, make the table entries */ - x[0] = i = 0; /* first Huffman code is zero */ - p = v; /* grab values in bit order */ - h = -1; /* no tables yet--level -1 */ - w = -l; /* bits decoded == (l * h) */ - u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */ - q = (inflate_huft *)Z_NULL; /* ditto */ - z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) - { - a = c[k]; - while (a--) - { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ - while (k > w + l) - { - h++; - w += l; /* previous table always l bits */ - - /* compute minimum size table less than or equal to l bits */ - z = g - w; - z = z > (uInt)l ? l : z; /* table size upper limit */ - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ - { /* too few codes for k-w bit table */ - f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; - if (j < z) - while (++j < z) /* try smaller tables up to z bits */ - { - if ((f <<= 1) <= *++xp) - break; /* enough codes to use up j bits */ - f -= *xp; /* else deduct codes from patterns */ - } - } - z = 1 << j; /* table entries for j-bit table */ - - /* allocate new table */ - if (*hn + z > MANY) /* (note: doesn't matter for fixed) */ - return Z_DATA_ERROR; /* overflow of MANY */ - u[h] = q = hp + *hn; - *hn += z; - - /* connect to last table, if there is one */ - if (h) - { - x[h] = i; /* save pattern for backing up */ - r.bits = (Byte)l; /* bits to dump before this table */ - r.exop = (Byte)j; /* bits in this table */ - j = i >> (w - l); - r.base = (uInt)(q - u[h-1] - j); /* offset to this table */ - u[h-1][j] = r; /* connect to last table */ - } - else - *t = q; /* first table is returned result */ - } - - /* set up table entry in r */ - r.bits = (Byte)(k - w); - if (p >= v + n) - r.exop = 128 + 64; /* out of values--invalid code */ - else if (*p < s) - { - r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */ - r.base = *p++; /* simple code is just the value */ - } - else - { - r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */ - r.base = d[*p++ - s]; - } - - /* fill code-like entries with r */ - f = 1 << (k - w); - for (j = i >> w; j < z; j += f) - q[j] = r; - - /* backwards increment the k-bit code i */ - for (j = 1 << (k - 1); i & j; j >>= 1) - i ^= j; - i ^= j; - - /* backup over finished tables */ - mask = (1 << w) - 1; /* needed on HP, cc -O bug */ - while ((i & mask) != x[h]) - { - h--; /* don't need to update q */ - w -= l; - mask = (1 << w) - 1; - } - } - } - - - /* Return Z_BUF_ERROR if we were given an incomplete table */ - return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; -} - - -int inflate_trees_bits( -uIntf *c, /* 19 code lengths */ -uIntf *bb, /* bits tree desired/actual depth */ -inflate_huft * FAR *tb, /* bits tree result */ -inflate_huft *hp, /* space for trees */ -z_streamp z) /* for messages */ -{ - int r; - uInt hn = 0; /* hufts used in space */ - uIntf *v; /* work area for huft_build */ - - if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL) - return Z_MEM_ERROR; - r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, - tb, bb, hp, &hn, v); - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed dynamic bit lengths tree"; - else if (r == Z_BUF_ERROR || *bb == 0) - { - z->msg = (char*)"incomplete dynamic bit lengths tree"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; -} - - -int inflate_trees_dynamic( -uInt nl, /* number of literal/length codes */ -uInt nd, /* number of distance codes */ -uIntf *c, /* that many (total) code lengths */ -uIntf *bl, /* literal desired/actual bit depth */ -uIntf *bd, /* distance desired/actual bit depth */ -inflate_huft * FAR *tl, /* literal/length tree result */ -inflate_huft * FAR *td, /* distance tree result */ -inflate_huft *hp, /* space for trees */ -z_streamp z) /* for messages */ -{ - int r; - uInt hn = 0; /* hufts used in space */ - uIntf *v; /* work area for huft_build */ - - /* allocate work area */ - if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) - return Z_MEM_ERROR; - - /* build literal/length tree */ - r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v); - if (r != Z_OK || *bl == 0) - { - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed literal/length tree"; - else if (r != Z_MEM_ERROR) - { - z->msg = (char*)"incomplete literal/length tree"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; - } - - /* build distance tree */ - r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v); - if (r != Z_OK || (*bd == 0 && nl > 257)) - { - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed distance tree"; - else if (r == Z_BUF_ERROR) { -#ifdef PKZIP_BUG_WORKAROUND - r = Z_OK; - } -#else - z->msg = (char*)"incomplete distance tree"; - r = Z_DATA_ERROR; - } - else if (r != Z_MEM_ERROR) - { - z->msg = (char*)"empty distance tree with lengths"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; -#endif - } - - /* done */ - ZFREE(z, v); - return Z_OK; -} - - -/* build fixed tables only once--keep them here */ -#ifdef BUILDFIXED -local int fixed_built = 0; -#define FIXEDH 544 /* number of hufts used by fixed tables */ -local inflate_huft fixed_mem[FIXEDH]; -local uInt fixed_bl; -local uInt fixed_bd; -local inflate_huft *fixed_tl; -local inflate_huft *fixed_td; -#else -#include "inffixed.h" -#endif - - -int inflate_trees_fixed( -uIntf *bl, /* literal desired/actual bit depth */ -uIntf *bd, /* distance desired/actual bit depth */ -inflate_huft * FAR *tl, /* literal/length tree result */ -inflate_huft * FAR *td, /* distance tree result */ -z_streamp z) /* for memory allocation */ -{ -#ifdef BUILDFIXED - /* build fixed tables if not already */ - if (!fixed_built) - { - int k; /* temporary variable */ - uInt f = 0; /* number of hufts used in fixed_mem */ - uIntf *c; /* length list for huft_build */ - uIntf *v; /* work area for huft_build */ - - /* allocate memory */ - if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) - return Z_MEM_ERROR; - if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) - { - ZFREE(z, c); - return Z_MEM_ERROR; - } - - /* literal table */ - for (k = 0; k < 144; k++) - c[k] = 8; - for (; k < 256; k++) - c[k] = 9; - for (; k < 280; k++) - c[k] = 7; - for (; k < 288; k++) - c[k] = 8; - fixed_bl = 9; - huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, - fixed_mem, &f, v); - - /* distance table */ - for (k = 0; k < 30; k++) - c[k] = 5; - fixed_bd = 5; - huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, - fixed_mem, &f, v); - - /* done */ - ZFREE(z, v); - ZFREE(z, c); - fixed_built = 1; - } -#endif - *bl = fixed_bl; - *bd = fixed_bd; - *tl = fixed_tl; - *td = fixed_td; - return Z_OK; -} diff --git a/src/libs/pdflib/libs/flate/inftrees.h b/src/libs/pdflib/libs/flate/inftrees.h deleted file mode 100644 index a57b7d3033..0000000000 --- a/src/libs/pdflib/libs/flate/inftrees.h +++ /dev/null @@ -1,61 +0,0 @@ -/* inftrees.h -- header to use inftrees.c - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - -/* Huffman code lookup table entry--this entry is four bytes for machines - that have 16-bit pointers (e.g. PC's in the small or medium model). */ - - -/* $Id: inftrees.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -typedef struct inflate_huft_s FAR inflate_huft; - -struct inflate_huft_s { - union { - struct { - Byte Exop; /* number of extra bits or operation */ - Byte Bits; /* number of bits in this code or subcode */ - } what; - uInt pad; /* pad structure to a power of 2 (4 bytes for */ - } word; /* 16-bit, 8 bytes for 32-bit int's) */ - uInt base; /* literal, length base, distance base, - or table offset */ -}; - -/* Maximum size of dynamic tree. The maximum found in a long but non- - exhaustive search was 1004 huft structures (850 for length/literals - and 154 for distances, the latter actually the result of an - exhaustive search). The actual maximum is not known, but the - value below is more than safe. */ -#define MANY 1440 - -extern int inflate_trees_bits OF(( - uIntf *, /* 19 code lengths */ - uIntf *, /* bits tree desired/actual depth */ - inflate_huft * FAR *, /* bits tree result */ - inflate_huft *, /* space for trees */ - z_streamp)); /* for messages */ - -extern int inflate_trees_dynamic OF(( - uInt, /* number of literal/length codes */ - uInt, /* number of distance codes */ - uIntf *, /* that many (total) code lengths */ - uIntf *, /* literal desired/actual bit depth */ - uIntf *, /* distance desired/actual bit depth */ - inflate_huft * FAR *, /* literal/length tree result */ - inflate_huft * FAR *, /* distance tree result */ - inflate_huft *, /* space for trees */ - z_streamp)); /* for messages */ - -extern int inflate_trees_fixed OF(( - uIntf *, /* literal desired/actual bit depth */ - uIntf *, /* distance desired/actual bit depth */ - inflate_huft * FAR *, /* literal/length tree result */ - inflate_huft * FAR *, /* distance tree result */ - z_streamp)); /* for memory allocation */ diff --git a/src/libs/pdflib/libs/flate/infutil.c b/src/libs/pdflib/libs/flate/infutil.c deleted file mode 100644 index a901aa6cfe..0000000000 --- a/src/libs/pdflib/libs/flate/infutil.c +++ /dev/null @@ -1,89 +0,0 @@ -/* inflate_util.c -- data and routines common to blocks and codes - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ -/* $Id: infutil.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" -#include "infblock.h" -#include "inftrees.h" -#include "infcodes.h" -#include "infutil.h" - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct inflate_codes_state {int dummy;}; *//* for buggy compilers */ - -/* And'ing with mask[n] masks the lower n bits */ -uInt inflate_mask[17] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff -}; - - -/* copy as much as possible from the sliding window to the output area */ -int inflate_flush( -inflate_blocks_statef *s, -z_streamp z, -int r) -{ - uInt n; - Bytef *p; - Bytef *q; - - /* local copies of source and destination pointers */ - p = z->next_out; - q = s->read; - - /* compute number of bytes to copy as far as end of window */ - n = (uInt)((q <= s->write ? s->write : s->end) - q); - if (n > z->avail_out) n = z->avail_out; - if (n && r == Z_BUF_ERROR) r = Z_OK; - - /* update counters */ - z->avail_out -= n; - z->total_out += n; - - /* update check information */ - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(s->check, q, n); - - /* copy as far as end of window */ - zmemcpy(p, q, n); - p += n; - q += n; - - /* see if more to copy at beginning of window */ - if (q == s->end) - { - /* wrap pointers */ - q = s->window; - if (s->write == s->end) - s->write = s->window; - - /* compute bytes to copy */ - n = (uInt)(s->write - q); - if (n > z->avail_out) n = z->avail_out; - if (n && r == Z_BUF_ERROR) r = Z_OK; - - /* update counters */ - z->avail_out -= n; - z->total_out += n; - - /* update check information */ - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(s->check, q, n); - - /* copy */ - zmemcpy(p, q, n); - p += n; - q += n; - } - - /* update pointers */ - z->next_out = p; - s->read = q; - - /* done */ - return r; -} diff --git a/src/libs/pdflib/libs/flate/infutil.h b/src/libs/pdflib/libs/flate/infutil.h deleted file mode 100644 index 0f88af75ff..0000000000 --- a/src/libs/pdflib/libs/flate/infutil.h +++ /dev/null @@ -1,102 +0,0 @@ -/* infutil.h -- types and macros common to blocks and codes - * Copyright (C) 1995-2002 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: infutil.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#ifndef _INFUTIL_H -#define _INFUTIL_H - -typedef enum { - TYPE, /* get type bits (3, including end bit) */ - LENS, /* get lengths for stored */ - STORED, /* processing stored block */ - TABLE, /* get table lengths */ - BTREE, /* get bit lengths tree for a dynamic block */ - DTREE, /* get length, distance trees for a dynamic block */ - CODES, /* processing fixed or dynamic block */ - DRY, /* output remaining window bytes */ - DONE, /* finished last block, done */ - BAD} /* got a data error--stuck here */ -inflate_block_mode; - -/* inflate blocks semi-private state */ -struct inflate_blocks_state { - - /* mode */ - inflate_block_mode mode; /* current inflate_block mode */ - - /* mode dependent information */ - union { - uInt left; /* if STORED, bytes left to copy */ - struct { - uInt table; /* table lengths (14 bits) */ - uInt index; /* index into blens (or border) */ - uIntf *blens; /* bit lengths of codes */ - uInt bb; /* bit length tree depth */ - inflate_huft *tb; /* bit length decoding tree */ - } trees; /* if DTREE, decoding info for trees */ - struct { - inflate_codes_statef - *codes; - } decode; /* if CODES, current state */ - } sub; /* submode */ - uInt last; /* true if this block is the last block */ - - /* mode independent information */ - uInt bitk; /* bits in bit buffer */ - uLong bitb; /* bit buffer */ - inflate_huft *hufts; /* single malloc for tree space */ - Bytef *window; /* sliding window */ - Bytef *end; /* one byte after sliding window */ - Bytef *read; /* window read pointer */ - Bytef *write; /* window write pointer */ - check_func checkfn; /* check function */ - uLong check; /* check on output */ - -}; - - -/* defines for inflate input/output */ -/* update pointers and return */ -#define UPDBITS {s->bitb=b;s->bitk=k;} -#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} -#define UPDOUT {s->write=q;} -#define UPDATE {UPDBITS UPDIN UPDOUT} -#define LEAVE {UPDATE return inflate_flush(s,z,r);} -/* get bytes and bits */ -#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} -#define NEEDBYTE {if(n)r=Z_OK;else LEAVE} -#define NEXTBYTE (n--,*p++) -#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<>=(j);k-=(j);} -/* output bytes */ -#define WAVAIL (uInt)(qread?s->read-q-1:s->end-q) -#define LOADOUT {q=s->write;m=(uInt)WAVAIL;} -#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} -#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} -#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} -#define OUTBYTE(a) {*q++=(Byte)(a);m--;} -/* load local pointers */ -#define LOAD {LOADIN LOADOUT} - -/* masks for lower bits (size given to avoid silly warnings with Visual C++) */ -extern uInt inflate_mask[17]; - -/* copy as much as possible from the sliding window to the output area */ -extern int inflate_flush OF(( - inflate_blocks_statef *, - z_streamp , - int)); - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct internal_state {int dummy;}; *//* for buggy compilers */ - -#endif diff --git a/src/libs/pdflib/libs/flate/trees.c b/src/libs/pdflib/libs/flate/trees.c deleted file mode 100644 index 12d359f97b..0000000000 --- a/src/libs/pdflib/libs/flate/trees.c +++ /dev/null @@ -1,1216 +0,0 @@ -/* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2002 Jean-loup Gailly - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* - * ALGORITHM - * - * The "deflation" process uses several Huffman trees. The more - * common source values are represented by shorter bit sequences. - * - * Each code tree is stored in a compressed form which is itself - * a Huffman encoding of the lengths of all the code strings (in - * ascending order by source values). The actual code strings are - * reconstructed from the lengths in the inflate process, as described - * in the deflate specification. - * - * REFERENCES - * - * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". - * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc - * - * Storer, James A. - * Data Compression: Methods and Theory, pp. 49-50. - * Computer Science Press, 1988. ISBN 0-7167-8156-5. - * - * Sedgewick, R. - * Algorithms, p290. - * Addison-Wesley, 1983. ISBN 0-201-06672-6. - */ - -/* $Id: trees.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: trees.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* #define GEN_TREES_H */ - -#include "deflate.h" - -#ifdef DEBUG -# include -#endif - -/* =========================================================================== - * Constants - */ - -#define MAX_BL_BITS 7 -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -#define END_BLOCK 256 -/* end of block literal code */ - -#define REP_3_6 16 -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -#define REPZ_3_10 17 -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -#define REPZ_11_138 18 -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ - = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; - -local const int extra_dbits[D_CODES] /* extra bits for each distance code */ - = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ - = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; - -local const uch bl_order[BL_CODES] - = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -#define Buf_size (8 * 2*sizeof(char)) -/* Number of bits used within bi_buf. (bi_buf might be implemented on - * more than 16 bits on some systems.) - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ - -#if defined(GEN_TREES_H) || !defined(STDC) -/* non ANSI compilers may not accept trees.h */ - -local ct_data static_ltree[L_CODES+2]; -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -local ct_data static_dtree[D_CODES]; -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -uch _dist_code[DIST_CODE_LEN]; -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -uch _length_code[MAX_MATCH-MIN_MATCH+1]; -/* length code for each normalized match length (0 == MIN_MATCH) */ - -local int base_length[LENGTH_CODES]; -/* First normalized length for each code (0 = MIN_MATCH) */ - -local int base_dist[D_CODES]; -/* First normalized distance for each code (0 = distance of 1) */ - -#else -# include "trees.h" -#endif /* GEN_TREES_H */ - -struct static_tree_desc_s { - const ct_data *static_tree; /* static tree or NULL */ - const intf *extra_bits; /* extra bits for each code or NULL */ - int extra_base; /* base index for extra_bits */ - int elems; /* max number of elements in the tree */ - int max_length; /* max bit length for the codes */ -}; - -local static_tree_desc static_l_desc = -{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; - -local static_tree_desc static_d_desc = -{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; - -local static_tree_desc static_bl_desc = -{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; - -/* =========================================================================== - * Local (static) routines in this file. - */ - -local void tr_static_init OF((void)); -local void init_block OF((deflate_state *s)); -local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); -local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); -local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); -local void build_tree OF((deflate_state *s, tree_desc *desc)); -local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local int build_bl_tree OF((deflate_state *s)); -local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, - int blcodes)); -local void compress_block OF((deflate_state *s, ct_data *ltree, - ct_data *dtree)); -local void set_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned value, int length)); -local void bi_windup OF((deflate_state *s)); -local void bi_flush OF((deflate_state *s)); -local void copy_block OF((deflate_state *s, charf *buf, unsigned len, - int header)); - -#ifdef GEN_TREES_H -local void gen_trees_header OF((void)); -#endif - -#ifndef DEBUG -# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) - /* Send a code of the given tree. c and tree must not have side effects */ - -#else /* DEBUG */ -# define send_code(s, c, tree) \ - { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ - send_bits(s, tree[c].Code, tree[c].Len); } -#endif - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -#define put_short(s, w) { \ - put_byte(s, (uch)((w) & 0xff)); \ - put_byte(s, (uch)((ush)(w) >> 8)); \ -} - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -#ifdef DEBUG -local void send_bits OF((deflate_state *s, int value, int length)); - -local void send_bits( - deflate_state *s, - int value, /* value to send */ - int length) /* number of bits */ -{ - Tracevv((stderr," l %2d v %4x ", length, value)); - Assert(length > 0 && length <= 15, "invalid length"); - s->bits_sent += (ulg)length; - - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (s->bi_valid > (int)Buf_size - length) { - s->bi_buf |= (value << s->bi_valid); - put_short(s, s->bi_buf); - s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); - s->bi_valid += length - Buf_size; - } else { - s->bi_buf |= value << s->bi_valid; - s->bi_valid += length; - } -} -#else /* !DEBUG */ - -#define send_bits(s, value, length) \ -{ int len = length;\ - if (s->bi_valid > (int)Buf_size - len) {\ - int val = value;\ - s->bi_buf |= (val << s->bi_valid);\ - put_short(s, s->bi_buf);\ - s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ - s->bi_valid += len - Buf_size;\ - } else {\ - s->bi_buf |= (value) << s->bi_valid;\ - s->bi_valid += len;\ - }\ -} -#endif /* DEBUG */ - - -#define MAX(a,b) (a >= b ? a : b) -/* the arguments must not have side effects */ - -/* =========================================================================== - * Initialize the various 'constant' tables. - */ -local void tr_static_init() -{ -#if defined(GEN_TREES_H) || !defined(STDC) - static int static_init_done = 0; - int n; /* iterates over tree elements */ - int bits; /* bit counter */ - int length; /* length value */ - int code; /* code value */ - int dist; /* distance index */ - ush bl_count[MAX_BITS+1]; - /* number of codes at each bit length for an optimal tree */ - - if (static_init_done) return; - - /* For some embedded targets, global variables are not initialized: */ - static_l_desc.static_tree = static_ltree; - static_l_desc.extra_bits = extra_lbits; - static_d_desc.static_tree = static_dtree; - static_d_desc.extra_bits = extra_dbits; - static_bl_desc.extra_bits = extra_blbits; - - /* Initialize the mapping length (0..255) -> length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES-1; code++) { - base_length[code] = length; - for (n = 0; n < (1< dist code (0..29) */ - dist = 0; - for (code = 0 ; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ - for ( ; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { - _dist_code[256 + dist++] = (uch)code; - } - } - Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; - n = 0; - while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; - while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; - while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; - while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n].Len = 5; - static_dtree[n].Code = bi_reverse((unsigned)n, 5); - } - static_init_done = 1; - -# ifdef GEN_TREES_H - gen_trees_header(); -# endif -#endif /* defined(GEN_TREES_H) || !defined(STDC) */ -} - -/* =========================================================================== - * Genererate the file trees.h describing the static trees. - */ -#ifdef GEN_TREES_H -# ifndef DEBUG -# include -# endif - -# define SEPARATOR(i, last, width) \ - ((i) == (last)? "\n};\n\n" : \ - ((i) % (width) == (width)-1 ? ",\n" : ", ")) - -void gen_trees_header() -{ - FILE *header = fopen("trees.h", "w"); - int i; - - Assert (header != NULL, "Can't open trees.h"); - fprintf(header, - "/* header created automatically with -DGEN_TREES_H */\n\n"); - - fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); - for (i = 0; i < L_CODES+2; i++) { - fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, - static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); - } - - fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); - for (i = 0; i < D_CODES; i++) { - fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, - static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); - } - - fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); - for (i = 0; i < DIST_CODE_LEN; i++) { - fprintf(header, "%2u%s", _dist_code[i], - SEPARATOR(i, DIST_CODE_LEN-1, 20)); - } - - fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); - for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { - fprintf(header, "%2u%s", _length_code[i], - SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); - } - - fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); - for (i = 0; i < LENGTH_CODES; i++) { - fprintf(header, "%1u%s", base_length[i], - SEPARATOR(i, LENGTH_CODES-1, 20)); - } - - fprintf(header, "local const int base_dist[D_CODES] = {\n"); - for (i = 0; i < D_CODES; i++) { - fprintf(header, "%5u%s", base_dist[i], - SEPARATOR(i, D_CODES-1, 10)); - } - - fclose(header); -} -#endif /* GEN_TREES_H */ - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -void _tr_init( - deflate_state *s) -{ - tr_static_init(); - - s->l_desc.dyn_tree = s->dyn_ltree; - s->l_desc.stat_desc = &static_l_desc; - - s->d_desc.dyn_tree = s->dyn_dtree; - s->d_desc.stat_desc = &static_d_desc; - - s->bl_desc.dyn_tree = s->bl_tree; - s->bl_desc.stat_desc = &static_bl_desc; - - s->bi_buf = 0; - s->bi_valid = 0; - s->last_eob_len = 8; /* enough lookahead for inflate */ -#ifdef DEBUG - s->compressed_len = 0L; - s->bits_sent = 0L; -#endif - - /* Initialize the first block of the first file: */ - init_block(s); -} - -/* =========================================================================== - * Initialize a new block. - */ -local void init_block( - deflate_state *s) -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; - - s->dyn_ltree[END_BLOCK].Freq = 1; - s->opt_len = s->static_len = 0L; - s->last_lit = s->matches = 0; -} - -#define SMALLEST 1 -/* Index within the heap array of least frequent node in the Huffman tree */ - - -/* =========================================================================== - * Remove the smallest element from the heap and recreate the heap with - * one less element. Updates heap and heap_len. - */ -#define pqremove(s, tree, top) \ -{\ - top = s->heap[SMALLEST]; \ - s->heap[SMALLEST] = s->heap[s->heap_len--]; \ - pqdownheap(s, tree, SMALLEST); \ -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -#define smaller(tree, n, m, depth) \ - (tree[n].Freq < tree[m].Freq || \ - (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -local void pqdownheap( - deflate_state *s, - ct_data *tree, /* the tree to restore */ - int k) /* node to move down */ -{ - int v = s->heap[k]; - int j = k << 1; /* left son of k */ - while (j <= s->heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s->heap_len && - smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s->heap[j], s->depth)) break; - - /* Exchange v with the smallest son */ - s->heap[k] = s->heap[j]; k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s->heap[k] = v; -} - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -local void gen_bitlen( - deflate_state *s, - tree_desc *desc) /* the tree descriptor */ -{ - ct_data *tree = desc->dyn_tree; - int max_code = desc->max_code; - const ct_data *stree = desc->stat_desc->static_tree; - const intf *extra = desc->stat_desc->extra_bits; - int base = desc->stat_desc->extra_base; - int max_length = desc->stat_desc->max_length; - int h; /* heap index */ - int n, m; /* iterate over the tree elements */ - int bits; /* bit length */ - int xbits; /* extra bits */ - ush f; /* frequency */ - int overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ - - for (h = s->heap_max+1; h < HEAP_SIZE; h++) { - n = s->heap[h]; - bits = tree[tree[n].Dad].Len + 1; - if (bits > max_length) bits = max_length, overflow++; - tree[n].Len = (ush)bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) continue; /* not a leaf node */ - - s->bl_count[bits]++; - xbits = 0; - if (n >= base) xbits = extra[n-base]; - f = tree[n].Freq; - s->opt_len += (ulg)f * (bits + xbits); - if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); - } - if (overflow == 0) return; - - Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length-1; - while (s->bl_count[bits] == 0) bits--; - s->bl_count[bits]--; /* move one leaf down the tree */ - s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ - s->bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = s->bl_count[bits]; - while (n != 0) { - m = s->heap[--h]; - if (m > max_code) continue; - if (tree[m].Len != (unsigned) bits) { - Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s->opt_len += ((long)bits - (long)tree[m].Len) - *(long)tree[m].Freq; - tree[m].Len = (ush)bits; - } - n--; - } - } -} - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes ( - ct_data *tree, /* the tree to decorate */ - int max_code, /* largest code with non zero frequency */ - ushf *bl_count) /* number of codes at each bit length */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits-1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; - const ct_data *stree = desc->stat_desc->static_tree; - int elems = desc->stat_desc->elems; - int n, m; /* iterate over heap elements */ - int max_code = -1; /* largest code with non zero frequency */ - int node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s->heap_len = 0, s->heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].Freq != 0) { - s->heap[++(s->heap_len)] = max_code = n; - s->depth[n] = 0; - } else { - tree[n].Len = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s->heap_len < 2) { - node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); - tree[node].Freq = 1; - s->depth[node] = 0; - s->opt_len--; if (stree) s->static_len -= stree[node].Len; - /* node is 0 or 1 so it does not have extra bits */ - } - desc->max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - pqremove(s, tree, n); /* n = node of least frequency */ - m = s->heap[SMALLEST]; /* m = node of next least frequency */ - - s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ - s->heap[--(s->heap_max)] = m; - - /* Create a new node father of n and m */ - tree[node].Freq = tree[n].Freq + tree[m].Freq; - s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1); - tree[n].Dad = tree[m].Dad = (ush)node; -#ifdef DUMP_BL_TREE - if (tree == s->bl_tree) { - fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", - node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); - } -#endif - /* and insert the new node in the heap */ - s->heap[SMALLEST] = node++; - pqdownheap(s, tree, SMALLEST); - - } while (s->heap_len >= 2); - - s->heap[--(s->heap_max)] = s->heap[SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, (tree_desc *)desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes ((ct_data *)tree, max_code, s->bl_count); -} - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -local void scan_tree ( - deflate_state *s, - ct_data *tree, /* the tree to be scanned */ - int max_code) /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - s->bl_tree[curlen].Freq += count; - } else if (curlen != 0) { - if (curlen != prevlen) s->bl_tree[curlen].Freq++; - s->bl_tree[REP_3_6].Freq++; - } else if (count <= 10) { - s->bl_tree[REPZ_3_10].Freq++; - } else { - s->bl_tree[REPZ_11_138].Freq++; - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -local void send_tree ( - deflate_state *s, - ct_data *tree, /* the tree to be scanned */ - int max_code) /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen == 0) max_count = 138, min_count = 3; - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { send_code(s, curlen, s->bl_tree); } while (--count != 0); - - } else if (curlen != 0) { - if (curlen != prevlen) { - send_code(s, curlen, s->bl_tree); count--; - } - Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); - - } else { - send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -local int build_bl_tree( - deflate_state *s) -{ - int max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); - scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, (tree_desc *)(&(s->bl_desc))); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { - if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*(max_blindex+1) + 5+5+4; - Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - s->opt_len, s->static_len)); - - return max_blindex; -} - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -local void send_all_trees( - deflate_state *s, - int lcodes, int dcodes, int blcodes) /* number of codes for each tree */ -{ - int rank; /* index in bl_order */ - - Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - "too many codes"); - Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes-1, 5); - send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); - } - Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ - Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ - Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - -/* =========================================================================== - * Send a stored block - */ -void _tr_stored_block( - deflate_state *s, - charf *buf, /* input block */ - ulg stored_len, /* length of input block */ - int eof) /* true if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ -#ifdef DEBUG - s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; - s->compressed_len += (stored_len + 4) << 3; -#endif - copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ -} - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - * The current inflate code requires 9 bits of lookahead. If the - * last two codes for the previous block (real code plus EOB) were coded - * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode - * the last real code. In this case we send two empty static blocks instead - * of one. (There are no problems if the previous block is stored or fixed.) - * To simplify the code, we assume the worst case of last real code encoded - * on one bit only. - */ -void _tr_align( - deflate_state *s) -{ - send_bits(s, STATIC_TREES<<1, 3); - send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG - s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ -#endif - bi_flush(s); - /* Of the 10 bits for the empty block, we have already sent - * (10 - bi_valid) bits. The lookahead for the last real code (before - * the EOB of the previous block) was thus at least one plus the length - * of the EOB plus what we have just sent of the empty static block. - */ - if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { - send_bits(s, STATIC_TREES<<1, 3); - send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG - s->compressed_len += 10L; -#endif - bi_flush(s); - } - s->last_eob_len = 7; -} - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -void _tr_flush_block( - deflate_state *s, - charf *buf, /* input block, or NULL if too old */ - ulg stored_len, /* length of input block */ - int eof) /* true if this is the last block for a file */ -{ - ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - int max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s->level > 0) { - - /* Check if the file is ascii or binary */ - if (s->data_type == Z_UNKNOWN) set_data_type(s); - - /* Construct the literal and distance trees */ - build_tree(s, (tree_desc *)(&(s->l_desc))); - Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - s->static_len)); - - build_tree(s, (tree_desc *)(&(s->d_desc))); - Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /*Determine the best encoding. Compute first the block length in bytes*/ - opt_lenb = (s->opt_len+3+7)>>3; - static_lenb = (s->static_len+3+7)>>3; - - Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - s->last_lit)); - - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; - - } else { - Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - -#ifdef FORCE_STORED - if (buf != (char*)0) { /* force stored block */ -#else - if (stored_len+4 <= opt_lenb && buf != (char*)0) { - /* 4: two words for the lengths */ -#endif - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, eof); - -#ifdef FORCE_STATIC - } else if (static_lenb >= 0) { /* force static trees */ -#else - } else if (static_lenb == opt_lenb) { -#endif - send_bits(s, (STATIC_TREES<<1)+eof, 3); - compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); -#ifdef DEBUG - s->compressed_len += 3 + s->static_len; -#endif - } else { - send_bits(s, (DYN_TREES<<1)+eof, 3); - send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, - max_blindex+1); - compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); -#ifdef DEBUG - s->compressed_len += 3 + s->opt_len; -#endif - } - Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (eof) { - bi_windup(s); -#ifdef DEBUG - s->compressed_len += 7; /* align on byte boundary */ -#endif - } - Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*eof)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -int _tr_tally ( - deflate_state *s, - unsigned dist, /* distance of matched string */ - unsigned lc) /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - s->d_buf[s->last_lit] = (ush)dist; - s->l_buf[s->last_lit++] = (uch)lc; - if (dist == 0) { - /* lc is the unmatched char */ - s->dyn_ltree[lc].Freq++; - } else { - s->matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - Assert((ush)dist < (ush)MAX_DIST(s) && - (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; - s->dyn_dtree[d_code(dist)].Freq++; - } - -#ifdef TRUNCATE_BLOCK - /* Try to guess if it is profitable to stop the current block here */ - if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { - /* Compute an upper bound for the compressed length */ - ulg out_length = (ulg)s->last_lit*8L; - ulg in_length = (ulg)((long)s->strstart - s->block_start); - int dcode; - for (dcode = 0; dcode < D_CODES; dcode++) { - out_length += (ulg)s->dyn_dtree[dcode].Freq * - (5L+extra_dbits[dcode]); - } - out_length >>= 3; - Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - s->last_lit, in_length, out_length, - 100L - out_length*100L/in_length)); - if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; - } -#endif - return (s->last_lit == s->lit_bufsize-1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block( - deflate_state *s, - ct_data *ltree, /* literal tree */ - ct_data *dtree) /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned lx = 0; /* running index in l_buf */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (s->last_lit != 0) do { - dist = s->d_buf[lx]; - lc = s->l_buf[lx++]; - if (dist == 0) { - send_code(s, lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code+LITERALS+1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - Assert(s->pending < (int) (s->lit_bufsize + 2*lx), - "pendingBuf overflow"); - - } while (lx < s->last_lit); - - send_code(s, END_BLOCK, ltree); - s->last_eob_len = ltree[END_BLOCK].Len; -} - -/* =========================================================================== - * Set the data type to ASCII or BINARY, using a crude approximation: - * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. - * IN assertion: the fields freq of dyn_ltree are set and the total of all - * frequencies does not exceed 64K (to fit in an int on 16 bit machines). - */ -local void set_data_type( - deflate_state *s) -{ - int n = 0; - unsigned ascii_freq = 0; - unsigned bin_freq = 0; - while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; - while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; - while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; - s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -local unsigned bi_reverse( - unsigned code, /* the value to invert */ - int len) /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -local void bi_flush( - deflate_state *s) -{ - if (s->bi_valid == 16) { - put_short(s, s->bi_buf); - s->bi_buf = 0; - s->bi_valid = 0; - } else if (s->bi_valid >= 8) { - put_byte(s, (Byte)s->bi_buf); - s->bi_buf >>= 8; - s->bi_valid -= 8; - } -} - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -local void bi_windup( - deflate_state *s) -{ - if (s->bi_valid > 8) { - put_short(s, s->bi_buf); - } else if (s->bi_valid > 0) { - put_byte(s, (Byte)s->bi_buf); - } - s->bi_buf = 0; - s->bi_valid = 0; -#ifdef DEBUG - s->bits_sent = (s->bits_sent+7) & ~7; -#endif -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -local void copy_block( - deflate_state *s, - charf *buf, /* the input data */ - unsigned len, /* its length */ - int header) /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - s->last_eob_len = 8; /* enough lookahead for inflate */ - - if (header) { - put_short(s, (ush)len); - put_short(s, (ush)~len); -#ifdef DEBUG - s->bits_sent += 2*16; -#endif - } -#ifdef DEBUG - s->bits_sent += (ulg)len<<3; -#endif - while (len--) { - put_byte(s, *buf++); - } -} diff --git a/src/libs/pdflib/libs/flate/trees.h b/src/libs/pdflib/libs/flate/trees.h deleted file mode 100644 index 2788317b1d..0000000000 --- a/src/libs/pdflib/libs/flate/trees.h +++ /dev/null @@ -1,131 +0,0 @@ -/* header created automatically with -DGEN_TREES_H */ - - -/* $Id: trees.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -local const ct_data static_ltree[L_CODES+2] = { -{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, -{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, -{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, -{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, -{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, -{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, -{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, -{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, -{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, -{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, -{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, -{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, -{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, -{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, -{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, -{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, -{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, -{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, -{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, -{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, -{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, -{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, -{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, -{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, -{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, -{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, -{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, -{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, -{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, -{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, -{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, -{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, -{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, -{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, -{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, -{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, -{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, -{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, -{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, -{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, -{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, -{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, -{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, -{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, -{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, -{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, -{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, -{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, -{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, -{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, -{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, -{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, -{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, -{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, -{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, -{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, -{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, -{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} -}; - -local const ct_data static_dtree[D_CODES] = { -{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, -{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, -{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, -{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, -{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, -{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} -}; - -const uch _dist_code[DIST_CODE_LEN] = { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, -10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, -11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, -12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, -13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, -13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, -18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, -23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 -}; - -const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, -13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, -17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, -19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, -22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, -23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 -}; - -local const int base_length[LENGTH_CODES] = { -0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, -64, 80, 96, 112, 128, 160, 192, 224, 0 -}; - -local const int base_dist[D_CODES] = { - 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, - 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, - 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 -}; - diff --git a/src/libs/pdflib/libs/flate/uncompr.c b/src/libs/pdflib/libs/flate/uncompr.c deleted file mode 100644 index fd51507224..0000000000 --- a/src/libs/pdflib/libs/flate/uncompr.c +++ /dev/null @@ -1,59 +0,0 @@ -/* uncompr.c -- decompress a memory buffer - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: uncompr.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: uncompr.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zlib.h" - -/* =========================================================================== - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted. -*/ -int ZEXPORT uncompress ( - Bytef *dest, - uLongf *destLen, - const Bytef *source, - uLong sourceLen) -{ - z_stream stream; - int err; - - stream.next_in = (Bytef*)source; - stream.avail_in = (uInt)sourceLen; - /* Check for source > 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; - - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; - - stream.zalloc = (alloc_func)0; - stream.zfree = (free_func)0; - - err = inflateInit(&stream); - if (err != Z_OK) return err; - - err = inflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - inflateEnd(&stream); - return err == Z_OK ? Z_BUF_ERROR : err; - } - *destLen = stream.total_out; - - err = inflateEnd(&stream); - return err; -} diff --git a/src/libs/pdflib/libs/flate/zconf.h b/src/libs/pdflib/libs/flate/zconf.h deleted file mode 100644 index 5e51ea525b..0000000000 --- a/src/libs/pdflib/libs/flate/zconf.h +++ /dev/null @@ -1,389 +0,0 @@ -/* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - - -/* $Id: zconf.h 20092 2007-02-07 08:00:01Z axeld $ */ - -/* @(#) $Id: zconf.h 20092 2007-02-07 08:00:01Z axeld $ */ - -#ifndef _ZCONF_H -#define _ZCONF_H - -#include "pc_config.h" - -/* - * If you *really* need a unique prefix for all types and library functions, - * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. - */ -/* PDFlib GmbH: We use "pdf_z_". -** The original list was incomplete, by the way. -*/ -#define Z_PREFIX -#ifdef Z_PREFIX - -#ifdef PDFLIB_PSP_BUILD -/* redefine names of all functions for integrating into - * psp library, to avoid name clashes if used together with - * pdflib */ -#define PREFIX(x) psp_z_##x -# define adler32 psp_z_adler32 -# define compress psp_z_compress -# define compress2 psp_z_compress2 -# define crc32 psp_z_crc32 -# define get_crc_table psp_z_get_crc_table -# define deflate psp_z_deflate -# define deflateCopy psp_z_deflateCopy -# define deflateEnd psp_z_deflateEnd -# define deflateInit2_ psp_z_deflateInit2_ -# define deflateInit_ psp_z_deflateInit_ -# define deflateParams psp_z_deflateParams -# define deflateReset psp_z_deflateReset -# define deflateSetDictionary psp_z_deflateSetDictionary -# define deflate_copyright psp_z_deflate_copyright -# define inflate_blocks psp_z_inflate_blocks -# define inflate_blocks_free psp_z_inflate_blocks_free -# define inflate_blocks_new psp_z_inflate_blocks_new -# define inflate_blocks_reset psp_z_inflate_blocks_reset -# define inflate_blocks_sync_point psp_z_inflate_blocks_sync_point -# define inflate_set_dictionary psp_z_inflate_set_dictionary -# define inflate_codes psp_z_inflate_codes -# define inflate_codes_free psp_z_inflate_codes_free -# define inflate_codes_new psp_z_inflate_codes_new -# define inflate_fast psp_z_inflate_fast -# define inflate psp_z_inflate -# define inflateEnd psp_z_inflateEnd -# define inflateInit2_ psp_z_inflateInit2_ -# define inflateInit_ psp_z_inflateInit_ -# define inflateReset psp_z_inflateReset -# define inflateSetDictionary psp_z_inflateSetDictionary -# define inflateSync psp_z_inflateSync -# define inflateSyncPoint psp_z_inflateSyncPoint -# define inflate_copyright psp_z_inflate_copyright -# define inflate_trees_bits psp_z_inflate_trees_bits -# define inflate_trees_dynamic psp_z_inflate_trees_dynamic -# define inflate_trees_fixed psp_z_inflate_trees_fixed -# define inflate_flush psp_z_inflate_flush -# define inflate_mask psp_z_inflate_mask -# define _dist_code psp_z__dist_code -# define _length_code psp_z__length_code -# define _tr_align psp_z__tr_align -# define _tr_flush_block psp_z__tr_flush_block -# define _tr_init psp_z__tr_init -# define _tr_stored_block psp_z__tr_stored_block -# define _tr_tally psp_z__tr_tally -# define uncompress psp_z_uncompress -# define zError psp_z_zError -# define z_errmsg psp_z_z_errmsg -# define z_error psp_z_z_error -# define z_verbose psp_z_z_verbose -# define zcalloc psp_z_zcalloc -# define zcfree psp_z_zcfree -# define zlibVersion psp_z_zlibVersion - -#else -#define PREFIX(x) pdf_z_##x -# define adler32 pdf_z_adler32 -# define compress pdf_z_compress -# define compress2 pdf_z_compress2 -# define crc32 pdf_z_crc32 -# define get_crc_table pdf_z_get_crc_table -# define deflate pdf_z_deflate -# define deflateCopy pdf_z_deflateCopy -# define deflateEnd pdf_z_deflateEnd -# define deflateInit2_ pdf_z_deflateInit2_ -# define deflateInit_ pdf_z_deflateInit_ -# define deflateParams pdf_z_deflateParams -# define deflateReset pdf_z_deflateReset -# define deflateSetDictionary pdf_z_deflateSetDictionary -# define deflate_copyright pdf_z_deflate_copyright -# define inflate_blocks pdf_z_inflate_blocks -# define inflate_blocks_free pdf_z_inflate_blocks_free -# define inflate_blocks_new pdf_z_inflate_blocks_new -# define inflate_blocks_reset pdf_z_inflate_blocks_reset -# define inflate_blocks_sync_point pdf_z_inflate_blocks_sync_point -# define inflate_set_dictionary pdf_z_inflate_set_dictionary -# define inflate_codes pdf_z_inflate_codes -# define inflate_codes_free pdf_z_inflate_codes_free -# define inflate_codes_new pdf_z_inflate_codes_new -# define inflate_fast pdf_z_inflate_fast -# define inflate pdf_z_inflate -# define inflateEnd pdf_z_inflateEnd -# define inflateInit2_ pdf_z_inflateInit2_ -# define inflateInit_ pdf_z_inflateInit_ -# define inflateReset pdf_z_inflateReset -# define inflateSetDictionary pdf_z_inflateSetDictionary -# define inflateSync pdf_z_inflateSync -# define inflateSyncPoint pdf_z_inflateSyncPoint -# define inflate_copyright pdf_z_inflate_copyright -# define inflate_trees_bits pdf_z_inflate_trees_bits -# define inflate_trees_dynamic pdf_z_inflate_trees_dynamic -# define inflate_trees_fixed pdf_z_inflate_trees_fixed -# define inflate_flush pdf_z_inflate_flush -# define inflate_mask pdf_z_inflate_mask -# define _dist_code pdf_z__dist_code -# define _length_code pdf_z__length_code -# define _tr_align pdf_z__tr_align -# define _tr_flush_block pdf_z__tr_flush_block -# define _tr_init pdf_z__tr_init -# define _tr_stored_block pdf_z__tr_stored_block -# define _tr_tally pdf_z__tr_tally -# define uncompress pdf_z_uncompress -# define zError pdf_z_zError -# define z_errmsg pdf_z_z_errmsg -# define z_error pdf_z_z_error -# define z_verbose pdf_z_z_verbose -# define zcalloc pdf_z_zcalloc -# define zcfree pdf_z_zcfree -# define zlibVersion pdf_z_zlibVersion - -#endif /* PDFLIB_PSP_BUILD */ - -#undef PREFIX - -/* special handling required on the Mac where Byte is alread defined */ -#if !(defined(MAC) || defined(MACOSX)) -# define Byte z_Byte -#endif - -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp -#endif - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) -# define WIN32 -#endif -#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) -# ifndef __32BIT__ -# define __32BIT__ -# endif -#endif -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif - -/* PDFlib GmbH: Windows CE portability */ -#ifdef _WIN32_WCE -#define NO_ERRNO_H -#endif - -/* - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more - * than 64k bytes at a time (needed on systems with 16-bit int). - */ -#if defined(MSDOS) && !defined(__32BIT__) -# define MAXSEG_64K -#endif -#ifdef MSDOS -# define UNALIGNED_OK -#endif - -#ifndef STDC /* PDFlib GmbH: we require ANSI C anyway */ -#define STDC -#endif - -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) -# define NO_DUMMY_DECL -#endif - -/* Old Borland C incorrectly complains about missing returns: */ -#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) -# define NEED_DUMMY_RETURN -#endif - - -/* Maximum value for memLevel in deflateInit2 */ -#ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif -#endif - -/* Maximum value for windowBits in deflateInit2 and inflateInit2. - * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files - * created by gzip. (Files created by minigzip can still be extracted by - * gzip.) - */ -#ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ -#endif - -/* The memory requirements for deflate are (in bytes): - (1 << (windowBits+2)) + (1 << (memLevel+9)) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). - - The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ - - /* Type declarations */ - -#ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif -#endif - -/* The following definitions for FAR are needed only for MSDOS mixed - * model programming (small or medium model with some far allocations). - * This was tested only with MSC; for other MSDOS compilers you may have - * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, - * just define FAR to be empty. - */ -#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -#endif -#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) -# ifndef __32BIT__ -# define SMALL_MEDIUM -# define FAR _far -# endif -#endif - -/* Compile with -DZLIB_DLL for Windows DLL support */ -#if defined(ZLIB_DLL) -# if defined(_WINDOWS) || defined(WINDOWS) -# ifdef FAR -# undef FAR -# endif -# include -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR _cdecl _export -# endif -# endif -# if defined (__BORLANDC__) -# if (__BORLANDC__ >= 0x0500) && defined (WIN32) -# include -# define ZEXPORT __declspec(dllexport) WINAPI -# define ZEXPORTRVA __declspec(dllexport) WINAPIV -# else -# if defined (_Windows) && defined (__DLL__) -# define ZEXPORT _export -# define ZEXPORTVA _export -# endif -# endif -# endif -#endif - -#if defined (__BEOS__) && !defined(__HAIKU__) -# if defined (ZLIB_DLL) -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -#endif - -#ifndef ZEXPORT -# define ZEXPORT -#endif -#ifndef ZEXPORTVA -# define ZEXPORTVA -#endif -#ifndef ZEXTERN -# define ZEXTERN extern -#endif - -#ifndef FAR -# define FAR -#endif - -/* PDFlib GmbH: also do the typedef on the Mac */ -#if defined(MAC) || defined(MACOSX) -#include -#else -typedef unsigned char Byte; /* 8 bits */ -#endif - -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - -/* PDFlib GmbH: Windows portability */ -#if !defined(WIN32) && !defined(OS2) && !defined(MAC) -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# define z_off_t off_t -#endif - -#ifndef SEEK_SET -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ -#endif -#ifndef z_off_t -# define z_off_t long -#endif - -/* MVS linker does not support external names larger than 8 bytes */ -#if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(inflate_blocks,"INBL") -# pragma map(inflate_blocks_new,"INBLNE") -# pragma map(inflate_blocks_free,"INBLFR") -# pragma map(inflate_blocks_reset,"INBLRE") -# pragma map(inflate_codes_free,"INCOFR") -# pragma map(inflate_codes,"INCO") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_flush,"INFLU") -# pragma map(inflate_mask,"INMA") -# pragma map(inflate_set_dictionary,"INSEDI2") -# pragma map(inflate_copyright,"INCOPY") -# pragma map(inflate_trees_bits,"INTRBI") -# pragma map(inflate_trees_dynamic,"INTRDY") -# pragma map(inflate_trees_fixed,"INTRFI") -# pragma map(inflate_trees_free,"INTRFR") -#endif - -#endif /* _ZCONF_H */ diff --git a/src/libs/pdflib/libs/flate/zlib.h b/src/libs/pdflib/libs/flate/zlib.h deleted file mode 100644 index 1bfff7a070..0000000000 --- a/src/libs/pdflib/libs/flate/zlib.h +++ /dev/null @@ -1,897 +0,0 @@ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.1.4, March 11th, 2002 - - Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - - -/* $Id: zlib.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#ifndef _ZLIB_H -#define _ZLIB_H - -#include "zconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ZLIB_VERSION "1.1.4" - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio. - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ - -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); - -struct internal_state; - -typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef *next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: ascii or binary */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} z_stream; - -typedef z_stream FAR *z_streamp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -#define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ -#define Z_SYNC_FLUSH 2 -#define Z_FULL_FLUSH 3 -#define Z_FINISH 4 -/* Allowed flush values; see deflate() below for details */ - -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) -/* compression levels */ - -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_DEFAULT_STRATEGY 0 -/* compression strategy; see deflateInit2() below for details */ - -#define Z_BINARY 0 -#define Z_ASCII 1 -#define Z_UNKNOWN 2 -/* Possible values of the data_type field */ - -#define Z_DEFLATED 8 -/* The deflate compression method (the only one supported in this version) */ - -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -#define zlib_version zlibVersion() -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); -/* - deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. deflate performs one or both of the - following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - - If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - the compression. - - If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - 0.1% larger than avail_in plus 12 bytes. If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). - - deflate() may update data_type if it can make a good guess about - the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). -*/ - - -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - - Initializes the internal stream state for decompression. The fields - next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) -*/ - - -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); -/* - inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may some - introduce some output latency (reading input without producing any output) - except when forced to flush. - - The detailed semantics are as follows. inflate performs one or both of the - following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much - output as possible to the output buffer. The flushing behavior of inflate is - not specified for values of the flush parameter other than Z_SYNC_FLUSH - and Z_FINISH, but the current implementation actually flushes as much output - as possible anyway. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster routine - may be used for the single inflate() call. - - If a preset dictionary is needed at this point (see inflateSetDictionary - below), inflate sets strm-adler to the adler32 checksum of the - dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise - it sets strm->adler to the adler32 checksum of all output produced - so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or - an error code as described below. At the end of the stream, inflate() - checks that its computed adler32 checksum is equal to that saved by the - compressor and returns Z_STREAM_END only if the checksum is correct. - - inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect - adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent - (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if no progress is possible or if there was not - enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR - case, the application may then call inflateSync to look for a good - compression block. -*/ - - -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - deflateInit is used instead. - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match). Filtered data consists mostly of small values with a - somewhat random distribution. In this case, the compression algorithm is - tuned to compress them better. The effect of Z_FILTERED is to force more - Huffman coding and less string matching; it is somewhat intermediate - between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects - the compression ratio but not the correctness of the compressed output even - if it is not set appropriately. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy; the data can then be compressed better than - with the default empty dictionary. - - Depending on the size of the compression data structures selected by - deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. - - Upon return of this function, strm->adler is set to the Adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The Adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); -/* - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -/* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); - - This is another version of inflateInit with an extra parameter. The - fields next_in, avail_in, zalloc, zfree and opaque must be initialized - before by the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. If a compressed stream with a larger window size is given as - input, inflate() will return with the error code Z_DATA_ERROR instead of - trying to allocate a larger window. - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative - memLevel). msg is set to null if there is no error message. inflateInit2 - does not perform any decompression apart from reading the zlib header if - present: this will be done by inflate(). (So next_in and avail_in may be - modified, but next_out and avail_out are unchanged.) -*/ - -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate - if this call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the Adler32 value returned by this call of - inflate. The compressor and decompressor must use exactly the same - dictionary (see deflateSetDictionary). - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect Adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); -/* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least 0.1% larger than - sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); -/* - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least 0.1% larger than sourceLen plus - 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ - -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted. -*/ - - -typedef voidp gzFile; - -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h". (See the description - of deflateInit2 for more information about the strategy parameter.) - - gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. - - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ - -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); -/* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. -*/ - -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - const voidp buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); -/* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). -*/ - -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); -/* - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ - -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); -/* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. -*/ - -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); -/* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ - -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); -/* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ - -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); -/* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported; gzseek then compresses a sequence of zeroes up to the new - starting position. - - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. -*/ - -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); -/* - Rewinds the given file. This function is supported only for reading. - - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ - -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); -/* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ - -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); -/* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ - -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); - -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); -/* - Update a running crc with the bytes buf[0..len-1] and return the updated - crc. If buf is NULL, this function returns the required initial value - for the crc. Pre- and post-conditioning (one's complement) is performed - within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) - - -#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) -/* PDFlib GmbH: conflicts with Visual Studio.NET - struct internal_state {int dummy;}; *//* hack for buggy compilers */ -#endif - -ZEXTERN const char * ZEXPORT zError OF((int err)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); - -#ifdef __cplusplus -} -#endif - -#endif /* _ZLIB_H */ diff --git a/src/libs/pdflib/libs/flate/zutil.c b/src/libs/pdflib/libs/flate/zutil.c deleted file mode 100644 index 0a48aa7a31..0000000000 --- a/src/libs/pdflib/libs/flate/zutil.c +++ /dev/null @@ -1,227 +0,0 @@ -/* zutil.c -- target dependent utility functions for the compression library - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: zutil.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* @(#) $Id: zutil.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "zutil.h" - -/* PDFlib GmbH: conflicts with Visual Studio.NET -struct internal_state {int dummy;}; *//* for buggy compilers */ - -#ifndef STDC -extern void exit OF((int)); -#endif - -const char *z_errmsg[10] = { -"need dictionary", /* Z_NEED_DICT 2 */ -"stream end", /* Z_STREAM_END 1 */ -"", /* Z_OK 0 */ -"file error", /* Z_ERRNO (-1) */ -"stream error", /* Z_STREAM_ERROR (-2) */ -"data error", /* Z_DATA_ERROR (-3) */ -"insufficient memory", /* Z_MEM_ERROR (-4) */ -"buffer error", /* Z_BUF_ERROR (-5) */ -"incompatible version",/* Z_VERSION_ERROR (-6) */ -""}; - - -const char * ZEXPORT zlibVersion() -{ - return ZLIB_VERSION; -} - -#ifdef DEBUG - -# ifndef verbose -# define verbose 0 -# endif -int z_verbose = verbose; - -void z_error ( - char *m) -{ - fprintf(stderr, "%s\n", m); - exit(1); -} -#endif - -/* exported to allow conversion of error code to string for compress() and - * uncompress() - */ -const char * ZEXPORT zError( - int err) -{ - return ERR_MSG(err); -} - - -#ifndef HAVE_MEMCPY - -void zmemcpy( - Bytef* dest, - const Bytef* source, - uInt len) -{ - if (len == 0) return; - do { - *dest++ = *source++; /* ??? to be unrolled */ - } while (--len != 0); -} - -int zmemcmp( - const Bytef* s1, - const Bytef* s2, - uInt len) -{ - uInt j; - - for (j = 0; j < len; j++) { - if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; - } - return 0; -} - -void zmemzero( - Bytef* dest, - uInt len) -{ - if (len == 0) return; - do { - *dest++ = 0; /* ??? to be unrolled */ - } while (--len != 0); -} -#endif - -#ifdef __TURBOC__ -#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__) -/* Small and medium model in Turbo C are for now limited to near allocation - * with reduced MAX_WBITS and MAX_MEM_LEVEL - */ -# define MY_ZCALLOC - -/* Turbo C malloc() does not allow dynamic allocation of 64K bytes - * and farmalloc(64K) returns a pointer with an offset of 8, so we - * must fix the pointer. Warning: the pointer must be put back to its - * original form in order to free it, use zcfree(). - */ - -#define MAX_PTR 10 -/* 10*64K = 640K */ - -local int next_ptr = 0; - -typedef struct ptr_table_s { - voidpf org_ptr; - voidpf new_ptr; -} ptr_table; - -local ptr_table table[MAX_PTR]; -/* This table is used to remember the original form of pointers - * to large buffers (64K). Such pointers are normalized with a zero offset. - * Since MSDOS is not a preemptive multitasking OS, this table is not - * protected from concurrent access. This hack doesn't work anyway on - * a protected system like OS/2. Use Microsoft C instead. - */ - -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) -{ - voidpf buf = opaque; /* just to make some compilers happy */ - ulg bsize = (ulg)items*size; - - /* If we allocate less than 65520 bytes, we assume that farmalloc - * will return a usable pointer which doesn't have to be normalized. - */ - if (bsize < 65520L) { - buf = farmalloc(bsize); - if (*(ush*)&buf != 0) return buf; - } else { - buf = farmalloc(bsize + 16L); - } - if (buf == NULL || next_ptr >= MAX_PTR) return NULL; - table[next_ptr].org_ptr = buf; - - /* Normalize the pointer to seg:0 */ - *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; - *(ush*)&buf = 0; - table[next_ptr++].new_ptr = buf; - return buf; -} - -void zcfree (voidpf opaque, voidpf ptr) -{ - int n; - if (*(ush*)&ptr != 0) { /* object < 64K */ - farfree(ptr); - return; - } - /* Find the original pointer */ - for (n = 0; n < next_ptr; n++) { - if (ptr != table[n].new_ptr) continue; - - farfree(table[n].org_ptr); - while (++n < next_ptr) { - table[n-1] = table[n]; - } - next_ptr--; - return; - } - ptr = opaque; /* just to make some compilers happy */ - Assert(0, "zcfree: ptr not found"); -} -#endif -#endif /* __TURBOC__ */ - - -#if defined(M_I86) && !defined(__32BIT__) -/* Microsoft C in 16-bit mode */ - -# define MY_ZCALLOC - -#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) -# define _halloc halloc -# define _hfree hfree -#endif - -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) -{ - if (opaque) opaque = 0; /* to make compiler happy */ - return _halloc((long)items, size); -} - -void zcfree (voidpf opaque, voidpf ptr) -{ - if (opaque) opaque = 0; /* to make compiler happy */ - _hfree(ptr); -} - -#endif /* MSC */ - - -#ifndef MY_ZCALLOC /* Any system without a special alloc function */ - -#ifndef STDC -extern voidp calloc OF((uInt items, uInt size)); -extern void free OF((voidpf ptr)); -#endif - -voidpf zcalloc ( - voidpf opaque, - unsigned items, - unsigned size) -{ - if (opaque) items += size - size; /* make compiler happy */ - return (voidpf)calloc(items, size); -} - -void zcfree ( - voidpf opaque, - voidpf ptr) -{ - free(ptr); - if (opaque) return; /* make compiler happy */ -} - -#endif /* MY_ZCALLOC */ diff --git a/src/libs/pdflib/libs/flate/zutil.h b/src/libs/pdflib/libs/flate/zutil.h deleted file mode 100644 index fa1df6a6cd..0000000000 --- a/src/libs/pdflib/libs/flate/zutil.h +++ /dev/null @@ -1,228 +0,0 @@ -/* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2002 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. - */ - - -/* $Id: zutil.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* @(#) $Id: zutil.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#ifndef _Z_UTIL_H -#define _Z_UTIL_H - -#include "zlib.h" - -#ifdef STDC -# include -# include -# include -#endif -#ifdef NO_ERRNO_H - extern int errno; -#else -# include -#endif - -#ifndef local -# define local static -#endif -/* compile with -Dlocal if your debugger can't find static symbols */ - -typedef unsigned char uch; -typedef uch FAR uchf; -typedef unsigned short ush; -typedef ush FAR ushf; -typedef unsigned long ulg; - -extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ -/* (size given to avoid silly warnings with Visual C++) */ - -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] - -#define ERR_RETURN(strm,err) \ - return (strm->msg = (char*)ERR_MSG(err), (err)) -/* To be used only when the state is known to be valid */ - - /* common constants */ - -#ifndef DEF_WBITS -# define DEF_WBITS MAX_WBITS -#endif -/* default windowBits for decompression. MAX_WBITS is for compression only */ - -#if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 -#else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL -#endif -/* default memLevel */ - -#define STORED_BLOCK 0 -#define STATIC_TREES 1 -#define DYN_TREES 2 -/* The three kinds of block type */ - -#define MIN_MATCH 3 -#define MAX_MATCH 258 -/* The minimum and maximum match lengths */ - -#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ - - /* target dependencies */ - -#ifdef MSDOS -# define OS_CODE 0x00 -# if defined(__TURBOC__) || defined(__BORLANDC__) -# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) - /* Allow compilation with ANSI keywords only enabled */ - void _Cdecl farfree( void *block ); - void *_Cdecl farmalloc( unsigned long nbytes ); -# else -# include -# endif -# else /* MSC or DJGPP */ -# include -# endif -#endif - -#ifdef OS2 -# define OS_CODE 0x06 -#endif - -#ifdef WIN32 /* Window 95 & Windows NT */ -# define OS_CODE 0x0b -#endif - -#if defined(VAXC) || defined(VMS) -# define OS_CODE 0x02 -# define F_OPEN(name, mode) \ - fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") -#endif - -#ifdef AMIGA -# define OS_CODE 0x01 -#endif - -#if defined(ATARI) || defined(atarist) -# define OS_CODE 0x05 -#endif - -#if defined(MAC) || defined(TARGET_OS_MAC) -# define OS_CODE 0x07 -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ -# endif -# endif -#endif - -#ifdef __50SERIES /* Prime/PRIMOS */ -# define OS_CODE 0x0F -#endif - -#ifdef TOPS20 -# define OS_CODE 0x0a -#endif - -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) -# define fdopen(fd,type) _fdopen(fd,type) -#endif - - - /* Common defaults */ - -#ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ -#endif - -#ifndef F_OPEN -# define F_OPEN(name, mode) fopen((name), (mode)) -#endif - - /* functions */ - -#ifdef HAVE_STRERROR - extern char *strerror OF((int)); -# define zstrerror(errnum) strerror(errnum) -#else -# define zstrerror(errnum) "" -#endif - -#if defined(pyr) -# define NO_MEMCPY -#endif -#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) - /* Use our own functions for small and medium model with MSC <= 5.0. - * You may have to use the same strategy for Borland C (untested). - * The __SC__ check is for Symantec. - */ -# define NO_MEMCPY -#endif -#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) -# define HAVE_MEMCPY -#endif -#ifdef HAVE_MEMCPY -# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ -# define zmemcpy _fmemcpy -# define zmemcmp _fmemcmp -# define zmemzero(dest, len) _fmemset(dest, 0, len) -# else -# define zmemcpy memcpy -# define zmemcmp memcmp -# define zmemzero(dest, len) memset(dest, 0, len) -# endif -#else - extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - extern void zmemzero OF((Bytef* dest, uInt len)); -#endif - -/* Diagnostic functions */ -#ifdef DEBUG -# include - extern int z_verbose; - extern void z_error OF((char *m)); -# define Assert(cond,msg) {if(!(cond)) z_error(msg);} -#else -# define Assert(cond,msg) -#endif - -/* PDFlib GmbH: we don't like trace messages from here. */ -#if 0 -# define Trace(x) {if (z_verbose>=0) fprintf x ;} -# define Tracev(x) {if (z_verbose>0) fprintf x ;} -# define Tracevv(x) {if (z_verbose>1) fprintf x ;} -# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} -# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} -#else -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) -#endif - - -typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf, - uInt len)); -voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); -void zcfree OF((voidpf opaque, voidpf ptr)); - -#define ZALLOC(strm, items, size) \ - (*((strm)->zalloc))((strm)->opaque, (items), (size)) -#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) -#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} - -#endif /* _Z_UTIL_H */ diff --git a/src/libs/pdflib/libs/pdcore/Jamfile b/src/libs/pdflib/libs/pdcore/Jamfile deleted file mode 100644 index 47df40dea2..0000000000 --- a/src/libs/pdflib/libs/pdcore/Jamfile +++ /dev/null @@ -1,29 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs pdcore ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -UseLibraryHeaders pdflib ; - -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs flate ] ; - -SubDirCcFlags -w ; - -StaticLibrary libpdf.a : - pc_arc4.c - pc_core.c - pc_corefont.c - pc_crypt.c - pc_ebcdic.c - pc_encoding.c - pc_file.c - pc_font.c - pc_util.c - pc_unicode.c - pc_scope.c - pc_sbuf.c - pc_output.c - pc_optparse.c - pc_md5.c - pc_geom.c -; - diff --git a/src/libs/pdflib/libs/pdcore/Makefile b/src/libs/pdflib/libs/pdcore/Makefile deleted file mode 100644 index f81288bfd8..0000000000 --- a/src/libs/pdflib/libs/pdcore/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# Makefile for libpdcore -# This generates a libtool convenience library -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -include ../../config/mkcommon.inc - -LIBNAME = $(PDCORELIBLINK) -INCLUDES = $(PDCORELIBINC) $(PDFLIBINC) $(PDILIBINC) $(FLATELIBINC) - -SRC = \ - $(srcdir)/pc_core.c \ - $(srcdir)/pc_corefont.c \ - $(srcdir)/pc_crypt.c \ - $(srcdir)/pc_ebcdic.c \ - $(srcdir)/pc_encoding.c \ - $(srcdir)/pc_file.c \ - $(srcdir)/pc_font.c \ - $(srcdir)/pc_geom.c \ - $(srcdir)/pc_md5.c \ - $(srcdir)/pc_optparse.c \ - $(srcdir)/pc_output.c \ - $(srcdir)/pc_arc4.c \ - $(srcdir)/pc_sbuf.c \ - $(srcdir)/pc_scope.c \ - $(srcdir)/pc_unicode.c \ - $(srcdir)/pc_util.c - -OBJS = \ - $(srcdir)/pc_core$(LO) \ - $(srcdir)/pc_corefont$(LO)\ - $(srcdir)/pc_crypt$(LO) \ - $(srcdir)/pc_ebcdic$(LO) \ - $(srcdir)/pc_encoding$(LO)\ - $(srcdir)/pc_file$(LO) \ - $(srcdir)/pc_font$(LO) \ - $(srcdir)/pc_geom$(LO) \ - $(srcdir)/pc_md5$(LO) \ - $(srcdir)/pc_optparse$(LO)\ - $(srcdir)/pc_output$(LO) \ - $(srcdir)/pc_arc4$(LO) \ - $(srcdir)/pc_sbuf$(LO) \ - $(srcdir)/pc_scope$(LO) \ - $(srcdir)/pc_unicode$(LO) \ - $(srcdir)/pc_util$(LO) - - -include ../../config/mklibs.inc - -# Automatically generated dependencies diff --git a/src/libs/pdflib/libs/pdcore/pc_arc4.c b/src/libs/pdflib/libs/pdcore/pc_arc4.c deleted file mode 100644 index b48659e197..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_arc4.c +++ /dev/null @@ -1,61 +0,0 @@ -/* crypto/arc4/arc4_enc.c */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the ARC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#include "pc_util.h" -#include "pc_arc4.h" - diff --git a/src/libs/pdflib/libs/pdcore/pc_arc4.h b/src/libs/pdflib/libs/pdcore/pc_arc4.h deleted file mode 100644 index 9a474a78fe..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_arc4.h +++ /dev/null @@ -1,60 +0,0 @@ -/* crypto/arc4/arc4.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the ARC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#include "pc_core.h" - diff --git a/src/libs/pdflib/libs/pdcore/pc_chartabs.h b/src/libs/pdflib/libs/pdcore/pc_chartabs.h deleted file mode 100644 index 4387b14a75..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_chartabs.h +++ /dev/null @@ -1,3590 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_chartabs.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * This file contains all Adobe Glyph Names and Unicode tables. - * - */ - -#ifndef PC_CHARTABS_H -#define PC_CHARTABS_H - -/* - * The glyph name table is based on the Adobe Glyph List (AGL) version 1.2 - * which can be found at - * http://partners.adobe.com/asn/developer/type/glyphlist.txt - */ - -static const char glyph__notdef[] = ".notdef"; - -static const char glyph_A[] = "A"; -static const char glyph_AE[] = "AE"; -static const char glyph_AEacute[] = "AEacute"; -static const char glyph_AEsmall[] = "AEsmall"; -static const char glyph_Aacute[] = "Aacute"; -static const char glyph_Aacutesmall[] = "Aacutesmall"; -static const char glyph_Abreve[] = "Abreve"; -static const char glyph_Acircumflex[] = "Acircumflex"; -static const char glyph_Acircumflexsmall[] = "Acircumflexsmall"; -static const char glyph_Acute[] = "Acute"; -static const char glyph_Acutesmall[] = "Acutesmall"; -static const char glyph_Adieresis[] = "Adieresis"; -static const char glyph_Adieresissmall[] = "Adieresissmall"; -static const char glyph_Agrave[] = "Agrave"; -static const char glyph_Agravesmall[] = "Agravesmall"; -static const char glyph_Alpha[] = "Alpha"; -static const char glyph_Alphatonos[] = "Alphatonos"; -static const char glyph_Amacron[] = "Amacron"; -static const char glyph_Aogonek[] = "Aogonek"; -static const char glyph_Aring[] = "Aring"; -static const char glyph_Aringacute[] = "Aringacute"; -static const char glyph_Aringsmall[] = "Aringsmall"; -static const char glyph_Asmall[] = "Asmall"; -static const char glyph_Atilde[] = "Atilde"; -static const char glyph_Atildesmall[] = "Atildesmall"; -static const char glyph_B[] = "B"; -static const char glyph_Beta[] = "Beta"; -static const char glyph_Brevesmall[] = "Brevesmall"; -static const char glyph_Bsmall[] = "Bsmall"; -static const char glyph_C[] = "C"; -static const char glyph_Cacute[] = "Cacute"; -static const char glyph_Caron[] = "Caron"; -static const char glyph_Caronsmall[] = "Caronsmall"; -static const char glyph_Ccaron[] = "Ccaron"; -static const char glyph_Ccedilla[] = "Ccedilla"; -static const char glyph_Ccedillasmall[] = "Ccedillasmall"; -static const char glyph_Ccircumflex[] = "Ccircumflex"; -static const char glyph_Cdotaccent[] = "Cdotaccent"; -static const char glyph_Cedillasmall[] = "Cedillasmall"; -static const char glyph_Chi[] = "Chi"; -static const char glyph_Circumflexsmall[] = "Circumflexsmall"; -static const char glyph_Csmall[] = "Csmall"; -static const char glyph_D[] = "D"; -static const char glyph_Dcaron[] = "Dcaron"; -static const char glyph_Dcroat[] = "Dcroat"; -static const char glyph_Delta[] = "Delta"; -static const char glyph_Dieresis[] = "Dieresis"; -static const char glyph_DieresisAcute[] = "DieresisAcute"; -static const char glyph_DieresisGrave[] = "DieresisGrave"; -static const char glyph_Dieresissmall[] = "Dieresissmall"; -static const char glyph_Dotaccentsmall[] = "Dotaccentsmall"; -static const char glyph_Dsmall[] = "Dsmall"; -static const char glyph_E[] = "E"; -static const char glyph_Eacute[] = "Eacute"; -static const char glyph_Eacutesmall[] = "Eacutesmall"; -static const char glyph_Ebreve[] = "Ebreve"; -static const char glyph_Ecaron[] = "Ecaron"; -static const char glyph_Ecircumflex[] = "Ecircumflex"; -static const char glyph_Ecircumflexsmall[] = "Ecircumflexsmall"; -static const char glyph_Edieresis[] = "Edieresis"; -static const char glyph_Edieresissmall[] = "Edieresissmall"; -static const char glyph_Edotaccent[] = "Edotaccent"; -static const char glyph_Egrave[] = "Egrave"; -static const char glyph_Egravesmall[] = "Egravesmall"; -static const char glyph_Emacron[] = "Emacron"; -static const char glyph_Eng[] = "Eng"; -static const char glyph_Eogonek[] = "Eogonek"; -static const char glyph_Epsilon[] = "Epsilon"; -static const char glyph_Epsilontonos[] = "Epsilontonos"; -static const char glyph_Esmall[] = "Esmall"; -static const char glyph_Eta[] = "Eta"; -static const char glyph_Etatonos[] = "Etatonos"; -static const char glyph_Eth[] = "Eth"; -static const char glyph_Ethsmall[] = "Ethsmall"; -static const char glyph_Euro[] = "Euro"; -static const char glyph_F[] = "F"; -static const char glyph_Fsmall[] = "Fsmall"; -static const char glyph_G[] = "G"; -static const char glyph_Gamma[] = "Gamma"; -static const char glyph_Gbreve[] = "Gbreve"; -static const char glyph_Gcaron[] = "Gcaron"; -static const char glyph_Gcircumflex[] = "Gcircumflex"; -static const char glyph_Gcommaaccent[] = "Gcommaaccent"; -static const char glyph_Gdotaccent[] = "Gdotaccent"; -static const char glyph_Grave[] = "Grave"; -static const char glyph_Gravesmall[] = "Gravesmall"; -static const char glyph_Gsmall[] = "Gsmall"; -static const char glyph_H[] = "H"; -static const char glyph_H18533[] = "H18533"; -static const char glyph_H18543[] = "H18543"; -static const char glyph_H18551[] = "H18551"; -static const char glyph_H22073[] = "H22073"; -static const char glyph_Hbar[] = "Hbar"; -static const char glyph_Hcircumflex[] = "Hcircumflex"; -static const char glyph_Hsmall[] = "Hsmall"; -static const char glyph_Hungarumlaut[] = "Hungarumlaut"; -static const char glyph_Hungarumlautsmall[] = "Hungarumlautsmall"; -static const char glyph_I[] = "I"; -static const char glyph_IJ[] = "IJ"; -static const char glyph_Iacute[] = "Iacute"; -static const char glyph_Iacutesmall[] = "Iacutesmall"; -static const char glyph_Ibreve[] = "Ibreve"; -static const char glyph_Icircumflex[] = "Icircumflex"; -static const char glyph_Icircumflexsmall[] = "Icircumflexsmall"; -static const char glyph_Idieresis[] = "Idieresis"; -static const char glyph_Idieresissmall[] = "Idieresissmall"; -static const char glyph_Idotaccent[] = "Idotaccent"; -static const char glyph_Ifraktur[] = "Ifraktur"; -static const char glyph_Igrave[] = "Igrave"; -static const char glyph_Igravesmall[] = "Igravesmall"; -static const char glyph_Imacron[] = "Imacron"; -static const char glyph_Iogonek[] = "Iogonek"; -static const char glyph_Iota[] = "Iota"; -static const char glyph_Iotadieresis[] = "Iotadieresis"; -static const char glyph_Iotatonos[] = "Iotatonos"; -static const char glyph_Ismall[] = "Ismall"; -static const char glyph_Itilde[] = "Itilde"; -static const char glyph_J[] = "J"; -static const char glyph_Jcircumflex[] = "Jcircumflex"; -static const char glyph_Jsmall[] = "Jsmall"; -static const char glyph_K[] = "K"; -static const char glyph_Kappa[] = "Kappa"; -static const char glyph_Kcommaaccent[] = "Kcommaaccent"; -static const char glyph_Ksmall[] = "Ksmall"; -static const char glyph_L[] = "L"; -static const char glyph_LL[] = "LL"; -static const char glyph_Lacute[] = "Lacute"; -static const char glyph_Lambda[] = "Lambda"; -static const char glyph_Lcaron[] = "Lcaron"; -static const char glyph_Lcommaaccent[] = "Lcommaaccent"; -static const char glyph_Ldot[] = "Ldot"; -static const char glyph_Lslash[] = "Lslash"; -static const char glyph_Lslashsmall[] = "Lslashsmall"; -static const char glyph_Lsmall[] = "Lsmall"; -static const char glyph_M[] = "M"; -static const char glyph_Macron[] = "Macron"; -static const char glyph_Macronsmall[] = "Macronsmall"; -static const char glyph_Msmall[] = "Msmall"; -static const char glyph_Mu[] = "Mu"; -static const char glyph_N[] = "N"; -static const char glyph_Nacute[] = "Nacute"; -static const char glyph_Ncaron[] = "Ncaron"; -static const char glyph_Ncommaaccent[] = "Ncommaaccent"; -static const char glyph_Nsmall[] = "Nsmall"; -static const char glyph_Ntilde[] = "Ntilde"; -static const char glyph_Ntildesmall[] = "Ntildesmall"; -static const char glyph_Nu[] = "Nu"; -static const char glyph_O[] = "O"; -static const char glyph_OE[] = "OE"; -static const char glyph_OEsmall[] = "OEsmall"; -static const char glyph_Oacute[] = "Oacute"; -static const char glyph_Oacutesmall[] = "Oacutesmall"; -static const char glyph_Obreve[] = "Obreve"; -static const char glyph_Ocircumflex[] = "Ocircumflex"; -static const char glyph_Ocircumflexsmall[] = "Ocircumflexsmall"; -static const char glyph_Odieresis[] = "Odieresis"; -static const char glyph_Odieresissmall[] = "Odieresissmall"; -static const char glyph_Ogoneksmall[] = "Ogoneksmall"; -static const char glyph_Ograve[] = "Ograve"; -static const char glyph_Ogravesmall[] = "Ogravesmall"; -static const char glyph_Ohorn[] = "Ohorn"; -static const char glyph_Ohungarumlaut[] = "Ohungarumlaut"; -static const char glyph_Omacron[] = "Omacron"; -static const char glyph_Omega[] = "Omega"; -static const char glyph_Omegatonos[] = "Omegatonos"; -static const char glyph_Omicron[] = "Omicron"; -static const char glyph_Omicrontonos[] = "Omicrontonos"; -static const char glyph_Oslash[] = "Oslash"; -static const char glyph_Oslashacute[] = "Oslashacute"; -static const char glyph_Oslashsmall[] = "Oslashsmall"; -static const char glyph_Osmall[] = "Osmall"; -static const char glyph_Otilde[] = "Otilde"; -static const char glyph_Otildesmall[] = "Otildesmall"; -static const char glyph_P[] = "P"; -static const char glyph_Phi[] = "Phi"; -static const char glyph_Pi[] = "Pi"; -static const char glyph_Psi[] = "Psi"; -static const char glyph_Psmall[] = "Psmall"; -static const char glyph_Q[] = "Q"; -static const char glyph_Qsmall[] = "Qsmall"; -static const char glyph_R[] = "R"; -static const char glyph_Racute[] = "Racute"; -static const char glyph_Rcaron[] = "Rcaron"; -static const char glyph_Rcommaaccent[] = "Rcommaaccent"; -static const char glyph_Rfraktur[] = "Rfraktur"; -static const char glyph_Rho[] = "Rho"; -static const char glyph_Ringsmall[] = "Ringsmall"; -static const char glyph_Rsmall[] = "Rsmall"; -static const char glyph_S[] = "S"; -static const char glyph_SF010000[] = "SF010000"; -static const char glyph_SF020000[] = "SF020000"; -static const char glyph_SF030000[] = "SF030000"; -static const char glyph_SF040000[] = "SF040000"; -static const char glyph_SF050000[] = "SF050000"; -static const char glyph_SF060000[] = "SF060000"; -static const char glyph_SF070000[] = "SF070000"; -static const char glyph_SF080000[] = "SF080000"; -static const char glyph_SF090000[] = "SF090000"; -static const char glyph_SF100000[] = "SF100000"; -static const char glyph_SF110000[] = "SF110000"; -static const char glyph_SF190000[] = "SF190000"; -static const char glyph_SF200000[] = "SF200000"; -static const char glyph_SF210000[] = "SF210000"; -static const char glyph_SF220000[] = "SF220000"; -static const char glyph_SF230000[] = "SF230000"; -static const char glyph_SF240000[] = "SF240000"; -static const char glyph_SF250000[] = "SF250000"; -static const char glyph_SF260000[] = "SF260000"; -static const char glyph_SF270000[] = "SF270000"; -static const char glyph_SF280000[] = "SF280000"; -static const char glyph_SF360000[] = "SF360000"; -static const char glyph_SF370000[] = "SF370000"; -static const char glyph_SF380000[] = "SF380000"; -static const char glyph_SF390000[] = "SF390000"; -static const char glyph_SF400000[] = "SF400000"; -static const char glyph_SF410000[] = "SF410000"; -static const char glyph_SF420000[] = "SF420000"; -static const char glyph_SF430000[] = "SF430000"; -static const char glyph_SF440000[] = "SF440000"; -static const char glyph_SF450000[] = "SF450000"; -static const char glyph_SF460000[] = "SF460000"; -static const char glyph_SF470000[] = "SF470000"; -static const char glyph_SF480000[] = "SF480000"; -static const char glyph_SF490000[] = "SF490000"; -static const char glyph_SF500000[] = "SF500000"; -static const char glyph_SF510000[] = "SF510000"; -static const char glyph_SF520000[] = "SF520000"; -static const char glyph_SF530000[] = "SF530000"; -static const char glyph_SF540000[] = "SF540000"; -static const char glyph_Sacute[] = "Sacute"; -static const char glyph_Scaron[] = "Scaron"; -static const char glyph_Scaronsmall[] = "Scaronsmall"; -static const char glyph_Scedilla[] = "Scedilla"; -static const char glyph_Scircumflex[] = "Scircumflex"; -static const char glyph_Scommaaccent[] = "Scommaaccent"; -static const char glyph_Sigma[] = "Sigma"; -static const char glyph_Ssmall[] = "Ssmall"; -static const char glyph_T[] = "T"; -static const char glyph_Tau[] = "Tau"; -static const char glyph_Tbar[] = "Tbar"; -static const char glyph_Tcaron[] = "Tcaron"; -static const char glyph_Tcommaaccent[] = "Tcommaaccent"; -static const char glyph_Theta[] = "Theta"; -static const char glyph_Thorn[] = "Thorn"; -static const char glyph_Thornsmall[] = "Thornsmall"; -static const char glyph_Tildesmall[] = "Tildesmall"; -static const char glyph_Tsmall[] = "Tsmall"; -static const char glyph_U[] = "U"; -static const char glyph_Uacute[] = "Uacute"; -static const char glyph_Uacutesmall[] = "Uacutesmall"; -static const char glyph_Ubreve[] = "Ubreve"; -static const char glyph_Ucircumflex[] = "Ucircumflex"; -static const char glyph_Ucircumflexsmall[] = "Ucircumflexsmall"; -static const char glyph_Udieresis[] = "Udieresis"; -static const char glyph_Udieresissmall[] = "Udieresissmall"; -static const char glyph_Ugrave[] = "Ugrave"; -static const char glyph_Ugravesmall[] = "Ugravesmall"; -static const char glyph_Uhorn[] = "Uhorn"; -static const char glyph_Uhungarumlaut[] = "Uhungarumlaut"; -static const char glyph_Umacron[] = "Umacron"; -static const char glyph_Uogonek[] = "Uogonek"; -static const char glyph_Upsilon[] = "Upsilon"; -static const char glyph_Upsilon1[] = "Upsilon1"; -static const char glyph_Upsilondieresis[] = "Upsilondieresis"; -static const char glyph_Upsilontonos[] = "Upsilontonos"; -static const char glyph_Uring[] = "Uring"; -static const char glyph_Usmall[] = "Usmall"; -static const char glyph_Utilde[] = "Utilde"; -static const char glyph_V[] = "V"; -static const char glyph_Vsmall[] = "Vsmall"; -static const char glyph_W[] = "W"; -static const char glyph_Wacute[] = "Wacute"; -static const char glyph_Wcircumflex[] = "Wcircumflex"; -static const char glyph_Wdieresis[] = "Wdieresis"; -static const char glyph_Wgrave[] = "Wgrave"; -static const char glyph_Wsmall[] = "Wsmall"; -static const char glyph_X[] = "X"; -static const char glyph_Xi[] = "Xi"; -static const char glyph_Xsmall[] = "Xsmall"; -static const char glyph_Y[] = "Y"; -static const char glyph_Yacute[] = "Yacute"; -static const char glyph_Yacutesmall[] = "Yacutesmall"; -static const char glyph_Ycircumflex[] = "Ycircumflex"; -static const char glyph_Ydieresis[] = "Ydieresis"; -static const char glyph_Ydieresissmall[] = "Ydieresissmall"; -static const char glyph_Ygrave[] = "Ygrave"; -static const char glyph_Ysmall[] = "Ysmall"; -static const char glyph_Z[] = "Z"; -static const char glyph_Zacute[] = "Zacute"; -static const char glyph_Zcaron[] = "Zcaron"; -static const char glyph_Zcaronsmall[] = "Zcaronsmall"; -static const char glyph_Zdotaccent[] = "Zdotaccent"; -static const char glyph_Zeta[] = "Zeta"; -static const char glyph_Zsmall[] = "Zsmall"; -static const char glyph_a[] = "a"; -static const char glyph_aacute[] = "aacute"; -static const char glyph_abreve[] = "abreve"; -static const char glyph_acircumflex[] = "acircumflex"; -static const char glyph_acute[] = "acute"; -static const char glyph_acutecomb[] = "acutecomb"; -static const char glyph_adieresis[] = "adieresis"; -static const char glyph_ae[] = "ae"; -static const char glyph_aeacute[] = "aeacute"; -static const char glyph_afii00208[] = "afii00208"; -static const char glyph_afii10017[] = "afii10017"; -static const char glyph_afii10018[] = "afii10018"; -static const char glyph_afii10019[] = "afii10019"; -static const char glyph_afii10020[] = "afii10020"; -static const char glyph_afii10021[] = "afii10021"; -static const char glyph_afii10022[] = "afii10022"; -static const char glyph_afii10023[] = "afii10023"; -static const char glyph_afii10024[] = "afii10024"; -static const char glyph_afii10025[] = "afii10025"; -static const char glyph_afii10026[] = "afii10026"; -static const char glyph_afii10027[] = "afii10027"; -static const char glyph_afii10028[] = "afii10028"; -static const char glyph_afii10029[] = "afii10029"; -static const char glyph_afii10030[] = "afii10030"; -static const char glyph_afii10031[] = "afii10031"; -static const char glyph_afii10032[] = "afii10032"; -static const char glyph_afii10033[] = "afii10033"; -static const char glyph_afii10034[] = "afii10034"; -static const char glyph_afii10035[] = "afii10035"; -static const char glyph_afii10036[] = "afii10036"; -static const char glyph_afii10037[] = "afii10037"; -static const char glyph_afii10038[] = "afii10038"; -static const char glyph_afii10039[] = "afii10039"; -static const char glyph_afii10040[] = "afii10040"; -static const char glyph_afii10041[] = "afii10041"; -static const char glyph_afii10042[] = "afii10042"; -static const char glyph_afii10043[] = "afii10043"; -static const char glyph_afii10044[] = "afii10044"; -static const char glyph_afii10045[] = "afii10045"; -static const char glyph_afii10046[] = "afii10046"; -static const char glyph_afii10047[] = "afii10047"; -static const char glyph_afii10048[] = "afii10048"; -static const char glyph_afii10049[] = "afii10049"; -static const char glyph_afii10050[] = "afii10050"; -static const char glyph_afii10051[] = "afii10051"; -static const char glyph_afii10052[] = "afii10052"; -static const char glyph_afii10053[] = "afii10053"; -static const char glyph_afii10054[] = "afii10054"; -static const char glyph_afii10055[] = "afii10055"; -static const char glyph_afii10056[] = "afii10056"; -static const char glyph_afii10057[] = "afii10057"; -static const char glyph_afii10058[] = "afii10058"; -static const char glyph_afii10059[] = "afii10059"; -static const char glyph_afii10060[] = "afii10060"; -static const char glyph_afii10061[] = "afii10061"; -static const char glyph_afii10062[] = "afii10062"; -static const char glyph_afii10063[] = "afii10063"; -static const char glyph_afii10064[] = "afii10064"; -static const char glyph_afii10065[] = "afii10065"; -static const char glyph_afii10066[] = "afii10066"; -static const char glyph_afii10067[] = "afii10067"; -static const char glyph_afii10068[] = "afii10068"; -static const char glyph_afii10069[] = "afii10069"; -static const char glyph_afii10070[] = "afii10070"; -static const char glyph_afii10071[] = "afii10071"; -static const char glyph_afii10072[] = "afii10072"; -static const char glyph_afii10073[] = "afii10073"; -static const char glyph_afii10074[] = "afii10074"; -static const char glyph_afii10075[] = "afii10075"; -static const char glyph_afii10076[] = "afii10076"; -static const char glyph_afii10077[] = "afii10077"; -static const char glyph_afii10078[] = "afii10078"; -static const char glyph_afii10079[] = "afii10079"; -static const char glyph_afii10080[] = "afii10080"; -static const char glyph_afii10081[] = "afii10081"; -static const char glyph_afii10082[] = "afii10082"; -static const char glyph_afii10083[] = "afii10083"; -static const char glyph_afii10084[] = "afii10084"; -static const char glyph_afii10085[] = "afii10085"; -static const char glyph_afii10086[] = "afii10086"; -static const char glyph_afii10087[] = "afii10087"; -static const char glyph_afii10088[] = "afii10088"; -static const char glyph_afii10089[] = "afii10089"; -static const char glyph_afii10090[] = "afii10090"; -static const char glyph_afii10091[] = "afii10091"; -static const char glyph_afii10092[] = "afii10092"; -static const char glyph_afii10093[] = "afii10093"; -static const char glyph_afii10094[] = "afii10094"; -static const char glyph_afii10095[] = "afii10095"; -static const char glyph_afii10096[] = "afii10096"; -static const char glyph_afii10097[] = "afii10097"; -static const char glyph_afii10098[] = "afii10098"; -static const char glyph_afii10099[] = "afii10099"; -static const char glyph_afii10100[] = "afii10100"; -static const char glyph_afii10101[] = "afii10101"; -static const char glyph_afii10102[] = "afii10102"; -static const char glyph_afii10103[] = "afii10103"; -static const char glyph_afii10104[] = "afii10104"; -static const char glyph_afii10105[] = "afii10105"; -static const char glyph_afii10106[] = "afii10106"; -static const char glyph_afii10107[] = "afii10107"; -static const char glyph_afii10108[] = "afii10108"; -static const char glyph_afii10109[] = "afii10109"; -static const char glyph_afii10110[] = "afii10110"; -static const char glyph_afii10145[] = "afii10145"; -static const char glyph_afii10146[] = "afii10146"; -static const char glyph_afii10147[] = "afii10147"; -static const char glyph_afii10148[] = "afii10148"; -static const char glyph_afii10192[] = "afii10192"; -static const char glyph_afii10193[] = "afii10193"; -static const char glyph_afii10194[] = "afii10194"; -static const char glyph_afii10195[] = "afii10195"; -static const char glyph_afii10196[] = "afii10196"; -static const char glyph_afii10831[] = "afii10831"; -static const char glyph_afii10832[] = "afii10832"; -static const char glyph_afii10846[] = "afii10846"; -static const char glyph_afii299[] = "afii299"; -static const char glyph_afii300[] = "afii300"; -static const char glyph_afii301[] = "afii301"; -static const char glyph_afii57381[] = "afii57381"; -static const char glyph_afii57388[] = "afii57388"; -static const char glyph_afii57392[] = "afii57392"; -static const char glyph_afii57393[] = "afii57393"; -static const char glyph_afii57394[] = "afii57394"; -static const char glyph_afii57395[] = "afii57395"; -static const char glyph_afii57396[] = "afii57396"; -static const char glyph_afii57397[] = "afii57397"; -static const char glyph_afii57398[] = "afii57398"; -static const char glyph_afii57399[] = "afii57399"; -static const char glyph_afii57400[] = "afii57400"; -static const char glyph_afii57401[] = "afii57401"; -static const char glyph_afii57403[] = "afii57403"; -static const char glyph_afii57407[] = "afii57407"; -static const char glyph_afii57409[] = "afii57409"; -static const char glyph_afii57410[] = "afii57410"; -static const char glyph_afii57411[] = "afii57411"; -static const char glyph_afii57412[] = "afii57412"; -static const char glyph_afii57413[] = "afii57413"; -static const char glyph_afii57414[] = "afii57414"; -static const char glyph_afii57415[] = "afii57415"; -static const char glyph_afii57416[] = "afii57416"; -static const char glyph_afii57417[] = "afii57417"; -static const char glyph_afii57418[] = "afii57418"; -static const char glyph_afii57419[] = "afii57419"; -static const char glyph_afii57420[] = "afii57420"; -static const char glyph_afii57421[] = "afii57421"; -static const char glyph_afii57422[] = "afii57422"; -static const char glyph_afii57423[] = "afii57423"; -static const char glyph_afii57424[] = "afii57424"; -static const char glyph_afii57425[] = "afii57425"; -static const char glyph_afii57426[] = "afii57426"; -static const char glyph_afii57427[] = "afii57427"; -static const char glyph_afii57428[] = "afii57428"; -static const char glyph_afii57429[] = "afii57429"; -static const char glyph_afii57430[] = "afii57430"; -static const char glyph_afii57431[] = "afii57431"; -static const char glyph_afii57432[] = "afii57432"; -static const char glyph_afii57433[] = "afii57433"; -static const char glyph_afii57434[] = "afii57434"; -static const char glyph_afii57440[] = "afii57440"; -static const char glyph_afii57441[] = "afii57441"; -static const char glyph_afii57442[] = "afii57442"; -static const char glyph_afii57443[] = "afii57443"; -static const char glyph_afii57444[] = "afii57444"; -static const char glyph_afii57445[] = "afii57445"; -static const char glyph_afii57446[] = "afii57446"; -static const char glyph_afii57448[] = "afii57448"; -static const char glyph_afii57449[] = "afii57449"; -static const char glyph_afii57450[] = "afii57450"; -static const char glyph_afii57451[] = "afii57451"; -static const char glyph_afii57452[] = "afii57452"; -static const char glyph_afii57453[] = "afii57453"; -static const char glyph_afii57454[] = "afii57454"; -static const char glyph_afii57455[] = "afii57455"; -static const char glyph_afii57456[] = "afii57456"; -static const char glyph_afii57457[] = "afii57457"; -static const char glyph_afii57458[] = "afii57458"; -static const char glyph_afii57470[] = "afii57470"; -static const char glyph_afii57505[] = "afii57505"; -static const char glyph_afii57506[] = "afii57506"; -static const char glyph_afii57507[] = "afii57507"; -static const char glyph_afii57508[] = "afii57508"; -static const char glyph_afii57509[] = "afii57509"; -static const char glyph_afii57511[] = "afii57511"; -static const char glyph_afii57512[] = "afii57512"; -static const char glyph_afii57513[] = "afii57513"; -static const char glyph_afii57514[] = "afii57514"; -static const char glyph_afii57519[] = "afii57519"; -static const char glyph_afii57534[] = "afii57534"; -static const char glyph_afii57636[] = "afii57636"; -static const char glyph_afii57645[] = "afii57645"; -static const char glyph_afii57658[] = "afii57658"; -static const char glyph_afii57664[] = "afii57664"; -static const char glyph_afii57665[] = "afii57665"; -static const char glyph_afii57666[] = "afii57666"; -static const char glyph_afii57667[] = "afii57667"; -static const char glyph_afii57668[] = "afii57668"; -static const char glyph_afii57669[] = "afii57669"; -static const char glyph_afii57670[] = "afii57670"; -static const char glyph_afii57671[] = "afii57671"; -static const char glyph_afii57672[] = "afii57672"; -static const char glyph_afii57673[] = "afii57673"; -static const char glyph_afii57674[] = "afii57674"; -static const char glyph_afii57675[] = "afii57675"; -static const char glyph_afii57676[] = "afii57676"; -static const char glyph_afii57677[] = "afii57677"; -static const char glyph_afii57678[] = "afii57678"; -static const char glyph_afii57679[] = "afii57679"; -static const char glyph_afii57680[] = "afii57680"; -static const char glyph_afii57681[] = "afii57681"; -static const char glyph_afii57682[] = "afii57682"; -static const char glyph_afii57683[] = "afii57683"; -static const char glyph_afii57684[] = "afii57684"; -static const char glyph_afii57685[] = "afii57685"; -static const char glyph_afii57686[] = "afii57686"; -static const char glyph_afii57687[] = "afii57687"; -static const char glyph_afii57688[] = "afii57688"; -static const char glyph_afii57689[] = "afii57689"; -static const char glyph_afii57690[] = "afii57690"; -static const char glyph_afii57694[] = "afii57694"; -static const char glyph_afii57695[] = "afii57695"; -static const char glyph_afii57700[] = "afii57700"; -static const char glyph_afii57705[] = "afii57705"; -static const char glyph_afii57716[] = "afii57716"; -static const char glyph_afii57717[] = "afii57717"; -static const char glyph_afii57718[] = "afii57718"; -static const char glyph_afii57723[] = "afii57723"; -static const char glyph_afii57793[] = "afii57793"; -static const char glyph_afii57794[] = "afii57794"; -static const char glyph_afii57795[] = "afii57795"; -static const char glyph_afii57796[] = "afii57796"; -static const char glyph_afii57797[] = "afii57797"; -static const char glyph_afii57798[] = "afii57798"; -static const char glyph_afii57799[] = "afii57799"; -static const char glyph_afii57800[] = "afii57800"; -static const char glyph_afii57801[] = "afii57801"; -static const char glyph_afii57802[] = "afii57802"; -static const char glyph_afii57803[] = "afii57803"; -static const char glyph_afii57804[] = "afii57804"; -static const char glyph_afii57806[] = "afii57806"; -static const char glyph_afii57807[] = "afii57807"; -static const char glyph_afii57839[] = "afii57839"; -static const char glyph_afii57841[] = "afii57841"; -static const char glyph_afii57842[] = "afii57842"; -static const char glyph_afii57929[] = "afii57929"; -static const char glyph_afii61248[] = "afii61248"; -static const char glyph_afii61289[] = "afii61289"; -static const char glyph_afii61352[] = "afii61352"; -static const char glyph_afii61573[] = "afii61573"; -static const char glyph_afii61574[] = "afii61574"; -static const char glyph_afii61575[] = "afii61575"; -static const char glyph_afii61664[] = "afii61664"; -static const char glyph_afii63167[] = "afii63167"; -static const char glyph_afii64937[] = "afii64937"; -static const char glyph_agrave[] = "agrave"; -static const char glyph_aleph[] = "aleph"; -static const char glyph_alpha[] = "alpha"; -static const char glyph_alphatonos[] = "alphatonos"; -static const char glyph_amacron[] = "amacron"; -static const char glyph_ampersand[] = "ampersand"; -static const char glyph_ampersandsmall[] = "ampersandsmall"; -static const char glyph_angle[] = "angle"; -static const char glyph_angleleft[] = "angleleft"; -static const char glyph_angleright[] = "angleright"; -static const char glyph_anoteleia[] = "anoteleia"; -static const char glyph_aogonek[] = "aogonek"; -static const char glyph_approxequal[] = "approxequal"; -static const char glyph_aring[] = "aring"; -static const char glyph_aringacute[] = "aringacute"; -static const char glyph_arrowboth[] = "arrowboth"; -static const char glyph_arrowdblboth[] = "arrowdblboth"; -static const char glyph_arrowdbldown[] = "arrowdbldown"; -static const char glyph_arrowdblleft[] = "arrowdblleft"; -static const char glyph_arrowdblright[] = "arrowdblright"; -static const char glyph_arrowdblup[] = "arrowdblup"; -static const char glyph_arrowdown[] = "arrowdown"; -static const char glyph_arrowhorizex[] = "arrowhorizex"; -static const char glyph_arrowleft[] = "arrowleft"; -static const char glyph_arrowright[] = "arrowright"; -static const char glyph_arrowup[] = "arrowup"; -static const char glyph_arrowupdn[] = "arrowupdn"; -static const char glyph_arrowupdnbse[] = "arrowupdnbse"; -static const char glyph_arrowvertex[] = "arrowvertex"; -static const char glyph_asciicircum[] = "asciicircum"; -static const char glyph_asciitilde[] = "asciitilde"; -static const char glyph_asterisk[] = "asterisk"; -static const char glyph_asteriskmath[] = "asteriskmath"; -static const char glyph_asuperior[] = "asuperior"; -static const char glyph_at[] = "at"; -static const char glyph_atilde[] = "atilde"; -static const char glyph_b[] = "b"; -static const char glyph_backslash[] = "backslash"; -static const char glyph_bar[] = "bar"; -static const char glyph_beta[] = "beta"; -static const char glyph_block[] = "block"; -static const char glyph_braceex[] = "braceex"; -static const char glyph_braceleft[] = "braceleft"; -static const char glyph_braceleftbt[] = "braceleftbt"; -static const char glyph_braceleftmid[] = "braceleftmid"; -static const char glyph_bracelefttp[] = "bracelefttp"; -static const char glyph_braceright[] = "braceright"; -static const char glyph_bracerightbt[] = "bracerightbt"; -static const char glyph_bracerightmid[] = "bracerightmid"; -static const char glyph_bracerighttp[] = "bracerighttp"; -static const char glyph_bracketleft[] = "bracketleft"; -static const char glyph_bracketleftbt[] = "bracketleftbt"; -static const char glyph_bracketleftex[] = "bracketleftex"; -static const char glyph_bracketlefttp[] = "bracketlefttp"; -static const char glyph_bracketright[] = "bracketright"; -static const char glyph_bracketrightbt[] = "bracketrightbt"; -static const char glyph_bracketrightex[] = "bracketrightex"; -static const char glyph_bracketrighttp[] = "bracketrighttp"; -static const char glyph_breve[] = "breve"; -static const char glyph_brokenbar[] = "brokenbar"; -static const char glyph_bsuperior[] = "bsuperior"; -static const char glyph_bullet[] = "bullet"; -static const char glyph_c[] = "c"; -static const char glyph_cacute[] = "cacute"; -static const char glyph_caron[] = "caron"; -static const char glyph_carriagereturn[] = "carriagereturn"; -static const char glyph_ccaron[] = "ccaron"; -static const char glyph_ccedilla[] = "ccedilla"; -static const char glyph_ccircumflex[] = "ccircumflex"; -static const char glyph_cdotaccent[] = "cdotaccent"; -static const char glyph_cedilla[] = "cedilla"; -static const char glyph_cent[] = "cent"; -static const char glyph_centinferior[] = "centinferior"; -static const char glyph_centoldstyle[] = "centoldstyle"; -static const char glyph_centsuperior[] = "centsuperior"; -static const char glyph_chi[] = "chi"; -static const char glyph_circle[] = "circle"; -static const char glyph_circlemultiply[] = "circlemultiply"; -static const char glyph_circleplus[] = "circleplus"; -static const char glyph_circumflex[] = "circumflex"; -static const char glyph_club[] = "club"; -static const char glyph_colon[] = "colon"; -static const char glyph_colonmonetary[] = "colonmonetary"; -static const char glyph_comma[] = "comma"; -static const char glyph_commaaccent[] = "commaaccent"; -static const char glyph_commainferior[] = "commainferior"; -static const char glyph_commasuperior[] = "commasuperior"; -static const char glyph_congruent[] = "congruent"; -static const char glyph_copyright[] = "copyright"; -static const char glyph_copyrightsans[] = "copyrightsans"; -static const char glyph_copyrightserif[] = "copyrightserif"; -static const char glyph_currency[] = "currency"; -static const char glyph_cyrBreve[] = "cyrBreve"; -static const char glyph_cyrFlex[] = "cyrFlex"; -static const char glyph_cyrbreve[] = "cyrbreve"; -static const char glyph_cyrflex[] = "cyrflex"; -static const char glyph_d[] = "d"; -static const char glyph_dagger[] = "dagger"; -static const char glyph_daggerdbl[] = "daggerdbl"; -static const char glyph_dblGrave[] = "dblGrave"; -static const char glyph_dblgrave[] = "dblgrave"; -static const char glyph_dcaron[] = "dcaron"; -static const char glyph_dcroat[] = "dcroat"; -static const char glyph_degree[] = "degree"; -static const char glyph_delta[] = "delta"; -static const char glyph_diamond[] = "diamond"; -static const char glyph_dieresis[] = "dieresis"; -static const char glyph_dieresisacute[] = "dieresisacute"; -static const char glyph_dieresisgrave[] = "dieresisgrave"; -static const char glyph_dieresistonos[] = "dieresistonos"; -static const char glyph_divide[] = "divide"; -static const char glyph_dkshade[] = "dkshade"; -static const char glyph_dnblock[] = "dnblock"; -static const char glyph_dollar[] = "dollar"; -static const char glyph_dollarinferior[] = "dollarinferior"; -static const char glyph_dollaroldstyle[] = "dollaroldstyle"; -static const char glyph_dollarsuperior[] = "dollarsuperior"; -static const char glyph_dong[] = "dong"; -static const char glyph_dotaccent[] = "dotaccent"; -static const char glyph_dotbelowcomb[] = "dotbelowcomb"; -static const char glyph_dotlessi[] = "dotlessi"; -static const char glyph_dotlessj[] = "dotlessj"; -static const char glyph_dotmath[] = "dotmath"; -static const char glyph_dsuperior[] = "dsuperior"; -static const char glyph_e[] = "e"; -static const char glyph_eacute[] = "eacute"; -static const char glyph_ebreve[] = "ebreve"; -static const char glyph_ecaron[] = "ecaron"; -static const char glyph_ecircumflex[] = "ecircumflex"; -static const char glyph_edieresis[] = "edieresis"; -static const char glyph_edotaccent[] = "edotaccent"; -static const char glyph_egrave[] = "egrave"; -static const char glyph_eight[] = "eight"; -static const char glyph_eightinferior[] = "eightinferior"; -static const char glyph_eightoldstyle[] = "eightoldstyle"; -static const char glyph_eightsuperior[] = "eightsuperior"; -static const char glyph_element[] = "element"; -static const char glyph_ellipsis[] = "ellipsis"; -static const char glyph_emacron[] = "emacron"; -static const char glyph_emdash[] = "emdash"; -static const char glyph_emptyset[] = "emptyset"; -static const char glyph_endash[] = "endash"; -static const char glyph_eng[] = "eng"; -static const char glyph_eogonek[] = "eogonek"; -static const char glyph_epsilon[] = "epsilon"; -static const char glyph_epsilontonos[] = "epsilontonos"; -static const char glyph_equal[] = "equal"; -static const char glyph_equivalence[] = "equivalence"; -static const char glyph_estimated[] = "estimated"; -static const char glyph_esuperior[] = "esuperior"; -static const char glyph_eta[] = "eta"; -static const char glyph_etatonos[] = "etatonos"; -static const char glyph_eth[] = "eth"; -static const char glyph_exclam[] = "exclam"; -static const char glyph_exclamdbl[] = "exclamdbl"; -static const char glyph_exclamdown[] = "exclamdown"; -static const char glyph_exclamdownsmall[] = "exclamdownsmall"; -static const char glyph_exclamsmall[] = "exclamsmall"; -static const char glyph_existential[] = "existential"; -static const char glyph_f[] = "f"; -static const char glyph_female[] = "female"; -static const char glyph_ff[] = "ff"; -static const char glyph_ffi[] = "ffi"; -static const char glyph_ffl[] = "ffl"; -static const char glyph_fi[] = "fi"; -static const char glyph_figuredash[] = "figuredash"; -static const char glyph_filledbox[] = "filledbox"; -static const char glyph_filledrect[] = "filledrect"; -static const char glyph_five[] = "five"; -static const char glyph_fiveeighths[] = "fiveeighths"; -static const char glyph_fiveinferior[] = "fiveinferior"; -static const char glyph_fiveoldstyle[] = "fiveoldstyle"; -static const char glyph_fivesuperior[] = "fivesuperior"; -static const char glyph_fl[] = "fl"; -static const char glyph_florin[] = "florin"; -static const char glyph_four[] = "four"; -static const char glyph_fourinferior[] = "fourinferior"; -static const char glyph_fouroldstyle[] = "fouroldstyle"; -static const char glyph_foursuperior[] = "foursuperior"; -static const char glyph_fraction[] = "fraction"; -static const char glyph_franc[] = "franc"; -static const char glyph_g[] = "g"; -static const char glyph_gamma[] = "gamma"; -static const char glyph_gbreve[] = "gbreve"; -static const char glyph_gcaron[] = "gcaron"; -static const char glyph_gcircumflex[] = "gcircumflex"; -static const char glyph_gcommaaccent[] = "gcommaaccent"; -static const char glyph_gdotaccent[] = "gdotaccent"; -static const char glyph_germandbls[] = "germandbls"; -static const char glyph_gradient[] = "gradient"; -static const char glyph_grave[] = "grave"; -static const char glyph_gravecomb[] = "gravecomb"; -static const char glyph_greater[] = "greater"; -static const char glyph_greaterequal[] = "greaterequal"; -static const char glyph_guillemotleft[] = "guillemotleft"; -static const char glyph_guillemotright[] = "guillemotright"; -static const char glyph_guilsinglleft[] = "guilsinglleft"; -static const char glyph_guilsinglright[] = "guilsinglright"; -static const char glyph_h[] = "h"; -static const char glyph_hbar[] = "hbar"; -static const char glyph_hcircumflex[] = "hcircumflex"; -static const char glyph_heart[] = "heart"; -static const char glyph_hookabovecomb[] = "hookabovecomb"; -static const char glyph_house[] = "house"; -static const char glyph_hungarumlaut[] = "hungarumlaut"; -static const char glyph_hyphen[] = "hyphen"; -static const char glyph_hypheninferior[] = "hypheninferior"; -static const char glyph_hyphensuperior[] = "hyphensuperior"; -static const char glyph_i[] = "i"; -static const char glyph_iacute[] = "iacute"; -static const char glyph_ibreve[] = "ibreve"; -static const char glyph_icircumflex[] = "icircumflex"; -static const char glyph_idieresis[] = "idieresis"; -static const char glyph_igrave[] = "igrave"; -static const char glyph_ij[] = "ij"; -static const char glyph_imacron[] = "imacron"; -static const char glyph_infinity[] = "infinity"; -static const char glyph_integral[] = "integral"; -static const char glyph_integralbt[] = "integralbt"; -static const char glyph_integralex[] = "integralex"; -static const char glyph_integraltp[] = "integraltp"; -static const char glyph_intersection[] = "intersection"; -static const char glyph_invbullet[] = "invbullet"; -static const char glyph_invcircle[] = "invcircle"; -static const char glyph_invsmileface[] = "invsmileface"; -static const char glyph_iogonek[] = "iogonek"; -static const char glyph_iota[] = "iota"; -static const char glyph_iotadieresis[] = "iotadieresis"; -static const char glyph_iotadieresistonos[] = "iotadieresistonos"; -static const char glyph_iotatonos[] = "iotatonos"; -static const char glyph_isuperior[] = "isuperior"; -static const char glyph_itilde[] = "itilde"; -static const char glyph_j[] = "j"; -static const char glyph_jcircumflex[] = "jcircumflex"; -static const char glyph_k[] = "k"; -static const char glyph_kappa[] = "kappa"; -static const char glyph_kcommaaccent[] = "kcommaaccent"; -static const char glyph_kgreenlandic[] = "kgreenlandic"; -static const char glyph_l[] = "l"; -static const char glyph_lacute[] = "lacute"; -static const char glyph_lambda[] = "lambda"; -static const char glyph_lcaron[] = "lcaron"; -static const char glyph_lcommaaccent[] = "lcommaaccent"; -static const char glyph_ldot[] = "ldot"; -static const char glyph_less[] = "less"; -static const char glyph_lessequal[] = "lessequal"; -static const char glyph_lfblock[] = "lfblock"; -static const char glyph_lira[] = "lira"; -static const char glyph_ll[] = "ll"; -static const char glyph_logicaland[] = "logicaland"; -static const char glyph_logicalnot[] = "logicalnot"; -static const char glyph_logicalor[] = "logicalor"; -static const char glyph_longs[] = "longs"; -static const char glyph_lozenge[] = "lozenge"; -static const char glyph_lslash[] = "lslash"; -static const char glyph_lsuperior[] = "lsuperior"; -static const char glyph_ltshade[] = "ltshade"; -static const char glyph_m[] = "m"; -static const char glyph_macron[] = "macron"; -static const char glyph_male[] = "male"; -static const char glyph_minus[] = "minus"; -static const char glyph_minute[] = "minute"; -static const char glyph_msuperior[] = "msuperior"; -static const char glyph_mu[] = "mu"; -static const char glyph_multiply[] = "multiply"; -static const char glyph_musicalnote[] = "musicalnote"; -static const char glyph_musicalnotedbl[] = "musicalnotedbl"; -static const char glyph_n[] = "n"; -static const char glyph_nacute[] = "nacute"; -static const char glyph_napostrophe[] = "napostrophe"; -static const char glyph_ncaron[] = "ncaron"; -static const char glyph_ncommaaccent[] = "ncommaaccent"; -static const char glyph_nine[] = "nine"; -static const char glyph_nineinferior[] = "nineinferior"; -static const char glyph_nineoldstyle[] = "nineoldstyle"; -static const char glyph_ninesuperior[] = "ninesuperior"; -static const char glyph_notelement[] = "notelement"; -static const char glyph_notequal[] = "notequal"; -static const char glyph_notsubset[] = "notsubset"; -static const char glyph_nsuperior[] = "nsuperior"; -static const char glyph_ntilde[] = "ntilde"; -static const char glyph_nu[] = "nu"; -static const char glyph_numbersign[] = "numbersign"; -static const char glyph_o[] = "o"; -static const char glyph_oacute[] = "oacute"; -static const char glyph_obreve[] = "obreve"; -static const char glyph_ocircumflex[] = "ocircumflex"; -static const char glyph_odieresis[] = "odieresis"; -static const char glyph_oe[] = "oe"; -static const char glyph_ogonek[] = "ogonek"; -static const char glyph_ograve[] = "ograve"; -static const char glyph_ohorn[] = "ohorn"; -static const char glyph_ohungarumlaut[] = "ohungarumlaut"; -static const char glyph_omacron[] = "omacron"; -static const char glyph_omega[] = "omega"; -static const char glyph_omega1[] = "omega1"; -static const char glyph_omegatonos[] = "omegatonos"; -static const char glyph_omicron[] = "omicron"; -static const char glyph_omicrontonos[] = "omicrontonos"; -static const char glyph_one[] = "one"; -static const char glyph_onedotenleader[] = "onedotenleader"; -static const char glyph_oneeighth[] = "oneeighth"; -static const char glyph_onefitted[] = "onefitted"; -static const char glyph_onehalf[] = "onehalf"; -static const char glyph_oneinferior[] = "oneinferior"; -static const char glyph_oneoldstyle[] = "oneoldstyle"; -static const char glyph_onequarter[] = "onequarter"; -static const char glyph_onesuperior[] = "onesuperior"; -static const char glyph_onethird[] = "onethird"; -static const char glyph_openbullet[] = "openbullet"; -static const char glyph_ordfeminine[] = "ordfeminine"; -static const char glyph_ordmasculine[] = "ordmasculine"; -static const char glyph_orthogonal[] = "orthogonal"; -static const char glyph_oslash[] = "oslash"; -static const char glyph_oslashacute[] = "oslashacute"; -static const char glyph_osuperior[] = "osuperior"; -static const char glyph_otilde[] = "otilde"; -static const char glyph_p[] = "p"; -static const char glyph_paragraph[] = "paragraph"; -static const char glyph_parenleft[] = "parenleft"; -static const char glyph_parenleftbt[] = "parenleftbt"; -static const char glyph_parenleftex[] = "parenleftex"; -static const char glyph_parenleftinferior[] = "parenleftinferior"; -static const char glyph_parenleftsuperior[] = "parenleftsuperior"; -static const char glyph_parenlefttp[] = "parenlefttp"; -static const char glyph_parenright[] = "parenright"; -static const char glyph_parenrightbt[] = "parenrightbt"; -static const char glyph_parenrightex[] = "parenrightex"; -static const char glyph_parenrightinferior[] = "parenrightinferior"; -static const char glyph_parenrightsuperior[] = "parenrightsuperior"; -static const char glyph_parenrighttp[] = "parenrighttp"; -static const char glyph_partialdiff[] = "partialdiff"; -static const char glyph_percent[] = "percent"; -static const char glyph_period[] = "period"; -static const char glyph_periodcentered[] = "periodcentered"; -static const char glyph_periodinferior[] = "periodinferior"; -static const char glyph_periodsuperior[] = "periodsuperior"; -static const char glyph_perpendicular[] = "perpendicular"; -static const char glyph_perthousand[] = "perthousand"; -static const char glyph_peseta[] = "peseta"; -static const char glyph_phi[] = "phi"; -static const char glyph_phi1[] = "phi1"; -static const char glyph_pi[] = "pi"; -static const char glyph_plus[] = "plus"; -static const char glyph_plusminus[] = "plusminus"; -static const char glyph_prescription[] = "prescription"; -static const char glyph_product[] = "product"; -static const char glyph_propersubset[] = "propersubset"; -static const char glyph_propersuperset[] = "propersuperset"; -static const char glyph_proportional[] = "proportional"; -static const char glyph_psi[] = "psi"; -static const char glyph_q[] = "q"; -static const char glyph_question[] = "question"; -static const char glyph_questiondown[] = "questiondown"; -static const char glyph_questiondownsmall[] = "questiondownsmall"; -static const char glyph_questionsmall[] = "questionsmall"; -static const char glyph_quotedbl[] = "quotedbl"; -static const char glyph_quotedblbase[] = "quotedblbase"; -static const char glyph_quotedblleft[] = "quotedblleft"; -static const char glyph_quotedblright[] = "quotedblright"; -static const char glyph_quoteleft[] = "quoteleft"; -static const char glyph_quotereversed[] = "quotereversed"; -static const char glyph_quoteright[] = "quoteright"; -static const char glyph_quotesinglbase[] = "quotesinglbase"; -static const char glyph_quotesingle[] = "quotesingle"; -static const char glyph_r[] = "r"; -static const char glyph_racute[] = "racute"; -static const char glyph_radical[] = "radical"; -static const char glyph_radicalex[] = "radicalex"; -static const char glyph_rcaron[] = "rcaron"; -static const char glyph_rcommaaccent[] = "rcommaaccent"; -static const char glyph_reflexsubset[] = "reflexsubset"; -static const char glyph_reflexsuperset[] = "reflexsuperset"; -static const char glyph_registered[] = "registered"; -static const char glyph_registersans[] = "registersans"; -static const char glyph_registerserif[] = "registerserif"; -static const char glyph_revlogicalnot[] = "revlogicalnot"; -static const char glyph_rho[] = "rho"; -static const char glyph_ring[] = "ring"; -static const char glyph_rsuperior[] = "rsuperior"; -static const char glyph_rtblock[] = "rtblock"; -static const char glyph_rupiah[] = "rupiah"; -static const char glyph_s[] = "s"; -static const char glyph_sacute[] = "sacute"; -static const char glyph_scaron[] = "scaron"; -static const char glyph_scedilla[] = "scedilla"; -static const char glyph_scircumflex[] = "scircumflex"; -static const char glyph_scommaaccent[] = "scommaaccent"; -static const char glyph_second[] = "second"; -static const char glyph_section[] = "section"; -static const char glyph_semicolon[] = "semicolon"; -static const char glyph_seven[] = "seven"; -static const char glyph_seveneighths[] = "seveneighths"; -static const char glyph_seveninferior[] = "seveninferior"; -static const char glyph_sevenoldstyle[] = "sevenoldstyle"; -static const char glyph_sevensuperior[] = "sevensuperior"; -static const char glyph_shade[] = "shade"; -static const char glyph_sigma[] = "sigma"; -static const char glyph_sigma1[] = "sigma1"; -/* static const char glyph_uni03C2[] = "uni03C2"; */ -static const char glyph_similar[] = "similar"; -static const char glyph_six[] = "six"; -static const char glyph_sixinferior[] = "sixinferior"; -static const char glyph_sixoldstyle[] = "sixoldstyle"; -static const char glyph_sixsuperior[] = "sixsuperior"; -static const char glyph_slash[] = "slash"; -static const char glyph_smileface[] = "smileface"; -static const char glyph_space[] = "space"; -static const char glyph_spade[] = "spade"; -static const char glyph_ssuperior[] = "ssuperior"; -static const char glyph_sterling[] = "sterling"; -static const char glyph_suchthat[] = "suchthat"; -static const char glyph_summation[] = "summation"; -static const char glyph_sun[] = "sun"; -static const char glyph_t[] = "t"; -static const char glyph_tau[] = "tau"; -static const char glyph_tbar[] = "tbar"; -static const char glyph_tcaron[] = "tcaron"; -static const char glyph_tcommaaccent[] = "tcommaaccent"; -static const char glyph_therefore[] = "therefore"; -static const char glyph_theta[] = "theta"; -static const char glyph_theta1[] = "theta1"; -static const char glyph_thorn[] = "thorn"; -static const char glyph_three[] = "three"; -static const char glyph_threeeighths[] = "threeeighths"; -static const char glyph_threeinferior[] = "threeinferior"; -static const char glyph_threeoldstyle[] = "threeoldstyle"; -static const char glyph_threequarters[] = "threequarters"; -static const char glyph_threequartersemdash[] = "threequartersemdash"; -static const char glyph_threesuperior[] = "threesuperior"; -static const char glyph_tilde[] = "tilde"; -static const char glyph_tildecomb[] = "tildecomb"; -static const char glyph_tonos[] = "tonos"; -static const char glyph_trademark[] = "trademark"; -static const char glyph_trademarksans[] = "trademarksans"; -static const char glyph_trademarkserif[] = "trademarkserif"; -static const char glyph_triagdn[] = "triagdn"; -static const char glyph_triaglf[] = "triaglf"; -static const char glyph_triagrt[] = "triagrt"; -static const char glyph_triagup[] = "triagup"; -static const char glyph_tsuperior[] = "tsuperior"; -static const char glyph_two[] = "two"; -static const char glyph_twodotenleader[] = "twodotenleader"; -static const char glyph_twoinferior[] = "twoinferior"; -static const char glyph_twooldstyle[] = "twooldstyle"; -static const char glyph_twosuperior[] = "twosuperior"; -static const char glyph_twothirds[] = "twothirds"; -static const char glyph_u[] = "u"; -static const char glyph_uacute[] = "uacute"; -static const char glyph_ubreve[] = "ubreve"; -static const char glyph_ucircumflex[] = "ucircumflex"; -static const char glyph_udieresis[] = "udieresis"; -static const char glyph_ugrave[] = "ugrave"; -static const char glyph_uhorn[] = "uhorn"; -static const char glyph_uhungarumlaut[] = "uhungarumlaut"; -static const char glyph_umacron[] = "umacron"; -static const char glyph_underscore[] = "underscore"; -static const char glyph_underscoredbl[] = "underscoredbl"; -static const char glyph_union[] = "union"; -static const char glyph_universal[] = "universal"; -static const char glyph_uogonek[] = "uogonek"; -static const char glyph_upblock[] = "upblock"; -static const char glyph_upsilon[] = "upsilon"; -static const char glyph_upsilondieresis[] = "upsilondieresis"; -static const char glyph_upsilondieresistonos[] = "upsilondieresistonos"; -static const char glyph_upsilontonos[] = "upsilontonos"; -static const char glyph_uring[] = "uring"; -static const char glyph_utilde[] = "utilde"; -static const char glyph_v[] = "v"; -static const char glyph_w[] = "w"; -static const char glyph_wacute[] = "wacute"; -static const char glyph_wcircumflex[] = "wcircumflex"; -static const char glyph_wdieresis[] = "wdieresis"; -static const char glyph_weierstrass[] = "weierstrass"; -static const char glyph_wgrave[] = "wgrave"; -static const char glyph_x[] = "x"; -static const char glyph_xi[] = "xi"; -static const char glyph_y[] = "y"; -static const char glyph_yacute[] = "yacute"; -static const char glyph_ycircumflex[] = "ycircumflex"; -static const char glyph_ydieresis[] = "ydieresis"; -static const char glyph_yen[] = "yen"; -static const char glyph_ygrave[] = "ygrave"; -static const char glyph_z[] = "z"; -static const char glyph_zacute[] = "zacute"; -static const char glyph_zcaron[] = "zcaron"; -static const char glyph_zdotaccent[] = "zdotaccent"; -static const char glyph_zero[] = "zero"; -static const char glyph_zeroinferior[] = "zeroinferior"; -static const char glyph_zerooldstyle[] = "zerooldstyle"; -static const char glyph_zerosuperior[] = "zerosuperior"; -static const char glyph_zeta[] = "zeta"; - -/* Glyph names without Unicode values */ -static const char glyph_001_000[] = "001.000"; -static const char glyph_001_001[] = "001.001"; -static const char glyph_001_002[] = "001.002"; -static const char glyph_001_003[] = "001.003"; -static const char glyph_Black[] = "Black"; -static const char glyph_Bold[] = "Bold"; -static const char glyph_Book[] = "Book"; -static const char glyph_Light[] = "Light"; -static const char glyph_Medium[] = "Medium"; -static const char glyph_Regular[] = "Regular"; -static const char glyph_Roman[] = "Roman"; -static const char glyph_Semibold[] = "Semibold"; - -/* table sorted by names */ -static pdc_glyph_tab tab_agl2uni[] = -{ -#ifndef PDFLIB_EBCDIC - { 0x0000, glyph__notdef }, - { 0x0041, glyph_A }, - { 0x00C6, glyph_AE }, - { 0x01FC, glyph_AEacute }, - { 0xF7E6, glyph_AEsmall }, - { 0x00C1, glyph_Aacute }, - { 0xF7E1, glyph_Aacutesmall }, - { 0x0102, glyph_Abreve }, - { 0x00C2, glyph_Acircumflex }, - { 0xF7E2, glyph_Acircumflexsmall }, - { 0xF6C9, glyph_Acute }, - { 0xF7B4, glyph_Acutesmall }, - { 0x00C4, glyph_Adieresis }, - { 0xF7E4, glyph_Adieresissmall }, - { 0x00C0, glyph_Agrave }, - { 0xF7E0, glyph_Agravesmall }, - { 0x0391, glyph_Alpha }, - { 0x0386, glyph_Alphatonos }, - { 0x0100, glyph_Amacron }, - { 0x0104, glyph_Aogonek }, - { 0x00C5, glyph_Aring }, - { 0x01FA, glyph_Aringacute }, - { 0xF7E5, glyph_Aringsmall }, - { 0xF761, glyph_Asmall }, - { 0x00C3, glyph_Atilde }, - { 0xF7E3, glyph_Atildesmall }, - { 0x0042, glyph_B }, - { 0x0392, glyph_Beta }, - { 0xF6F4, glyph_Brevesmall }, - { 0xF762, glyph_Bsmall }, - { 0x0043, glyph_C }, - { 0x0106, glyph_Cacute }, - { 0xF6CA, glyph_Caron }, - { 0xF6F5, glyph_Caronsmall }, - { 0x010C, glyph_Ccaron }, - { 0x00C7, glyph_Ccedilla }, - { 0xF7E7, glyph_Ccedillasmall }, - { 0x0108, glyph_Ccircumflex }, - { 0x010A, glyph_Cdotaccent }, - { 0xF7B8, glyph_Cedillasmall }, - { 0x03A7, glyph_Chi }, - { 0xF6F6, glyph_Circumflexsmall }, - { 0xF763, glyph_Csmall }, - { 0x0044, glyph_D }, - { 0x010E, glyph_Dcaron }, - { 0x0110, glyph_Dcroat }, -/* { 0x2206, glyph_Delta }, duplicate code */ - { 0x0394, glyph_Delta }, - { 0xF6CB, glyph_Dieresis }, - { 0xF6CC, glyph_DieresisAcute }, - { 0xF6CD, glyph_DieresisGrave }, - { 0xF7A8, glyph_Dieresissmall }, - { 0xF6F7, glyph_Dotaccentsmall }, - { 0xF764, glyph_Dsmall }, - { 0x0045, glyph_E }, - { 0x00C9, glyph_Eacute }, - { 0xF7E9, glyph_Eacutesmall }, - { 0x0114, glyph_Ebreve }, - { 0x011A, glyph_Ecaron }, - { 0x00CA, glyph_Ecircumflex }, - { 0xF7EA, glyph_Ecircumflexsmall }, - { 0x00CB, glyph_Edieresis }, - { 0xF7EB, glyph_Edieresissmall }, - { 0x0116, glyph_Edotaccent }, - { 0x00C8, glyph_Egrave }, - { 0xF7E8, glyph_Egravesmall }, - { 0x0112, glyph_Emacron }, - { 0x014A, glyph_Eng }, - { 0x0118, glyph_Eogonek }, - { 0x0395, glyph_Epsilon }, - { 0x0388, glyph_Epsilontonos }, - { 0xF765, glyph_Esmall }, - { 0x0397, glyph_Eta }, - { 0x0389, glyph_Etatonos }, - { 0x00D0, glyph_Eth }, - { 0xF7F0, glyph_Ethsmall }, - { 0x20AC, glyph_Euro }, - { 0x0046, glyph_F }, - { 0xF766, glyph_Fsmall }, - { 0x0047, glyph_G }, - { 0x0393, glyph_Gamma }, - { 0x011E, glyph_Gbreve }, - { 0x01E6, glyph_Gcaron }, - { 0x011C, glyph_Gcircumflex }, - { 0x0122, glyph_Gcommaaccent }, - { 0x0120, glyph_Gdotaccent }, - { 0xF6CE, glyph_Grave }, - { 0xF760, glyph_Gravesmall }, - { 0xF767, glyph_Gsmall }, - { 0x0048, glyph_H }, - { 0x25CF, glyph_H18533 }, - { 0x25AA, glyph_H18543 }, - { 0x25AB, glyph_H18551 }, - { 0x25A1, glyph_H22073 }, - { 0x0126, glyph_Hbar }, - { 0x0124, glyph_Hcircumflex }, - { 0xF768, glyph_Hsmall }, - { 0xF6CF, glyph_Hungarumlaut }, - { 0xF6F8, glyph_Hungarumlautsmall }, - { 0x0049, glyph_I }, - { 0x0132, glyph_IJ }, - { 0x00CD, glyph_Iacute }, - { 0xF7ED, glyph_Iacutesmall }, - { 0x012C, glyph_Ibreve }, - { 0x00CE, glyph_Icircumflex }, - { 0xF7EE, glyph_Icircumflexsmall }, - { 0x00CF, glyph_Idieresis }, - { 0xF7EF, glyph_Idieresissmall }, - { 0x0130, glyph_Idotaccent }, - { 0x2111, glyph_Ifraktur }, - { 0x00CC, glyph_Igrave }, - { 0xF7EC, glyph_Igravesmall }, - { 0x012A, glyph_Imacron }, - { 0x012E, glyph_Iogonek }, - { 0x0399, glyph_Iota }, - { 0x03AA, glyph_Iotadieresis }, - { 0x038A, glyph_Iotatonos }, - { 0xF769, glyph_Ismall }, - { 0x0128, glyph_Itilde }, - { 0x004A, glyph_J }, - { 0x0134, glyph_Jcircumflex }, - { 0xF76A, glyph_Jsmall }, - { 0x004B, glyph_K }, - { 0x039A, glyph_Kappa }, - { 0x0136, glyph_Kcommaaccent }, - { 0xF76B, glyph_Ksmall }, - { 0x004C, glyph_L }, - { 0xF6BF, glyph_LL }, - { 0x0139, glyph_Lacute }, - { 0x039B, glyph_Lambda }, - { 0x013D, glyph_Lcaron }, - { 0x013B, glyph_Lcommaaccent }, - { 0x013F, glyph_Ldot }, - { 0x0141, glyph_Lslash }, - { 0xF6F9, glyph_Lslashsmall }, - { 0xF76C, glyph_Lsmall }, - { 0x004D, glyph_M }, - { 0xF6D0, glyph_Macron }, - { 0xF7AF, glyph_Macronsmall }, - { 0xF76D, glyph_Msmall }, - { 0x039C, glyph_Mu }, - { 0x004E, glyph_N }, - { 0x0143, glyph_Nacute }, - { 0x0147, glyph_Ncaron }, - { 0x0145, glyph_Ncommaaccent }, - { 0xF76E, glyph_Nsmall }, - { 0x00D1, glyph_Ntilde }, - { 0xF7F1, glyph_Ntildesmall }, - { 0x039D, glyph_Nu }, - { 0x004F, glyph_O }, - { 0x0152, glyph_OE }, - { 0xF6FA, glyph_OEsmall }, - { 0x00D3, glyph_Oacute }, - { 0xF7F3, glyph_Oacutesmall }, - { 0x014E, glyph_Obreve }, - { 0x00D4, glyph_Ocircumflex }, - { 0xF7F4, glyph_Ocircumflexsmall }, - { 0x00D6, glyph_Odieresis }, - { 0xF7F6, glyph_Odieresissmall }, - { 0xF6FB, glyph_Ogoneksmall }, - { 0x00D2, glyph_Ograve }, - { 0xF7F2, glyph_Ogravesmall }, - { 0x01A0, glyph_Ohorn }, - { 0x0150, glyph_Ohungarumlaut }, - { 0x014C, glyph_Omacron }, -/* { 0x2126, glyph_Omega }, duplicate code */ - { 0x03A9, glyph_Omega }, - { 0x038F, glyph_Omegatonos }, - { 0x039F, glyph_Omicron }, - { 0x038C, glyph_Omicrontonos }, - { 0x00D8, glyph_Oslash }, - { 0x01FE, glyph_Oslashacute }, - { 0xF7F8, glyph_Oslashsmall }, - { 0xF76F, glyph_Osmall }, - { 0x00D5, glyph_Otilde }, - { 0xF7F5, glyph_Otildesmall }, - { 0x0050, glyph_P }, - { 0x03A6, glyph_Phi }, - { 0x03A0, glyph_Pi }, - { 0x03A8, glyph_Psi }, - { 0xF770, glyph_Psmall }, - { 0x0051, glyph_Q }, - { 0xF771, glyph_Qsmall }, - { 0x0052, glyph_R }, - { 0x0154, glyph_Racute }, - { 0x0158, glyph_Rcaron }, - { 0x0156, glyph_Rcommaaccent }, - { 0x211C, glyph_Rfraktur }, - { 0x03A1, glyph_Rho }, - { 0xF6FC, glyph_Ringsmall }, - { 0xF772, glyph_Rsmall }, - { 0x0053, glyph_S }, - { 0x250C, glyph_SF010000 }, - { 0x2514, glyph_SF020000 }, - { 0x2510, glyph_SF030000 }, - { 0x2518, glyph_SF040000 }, - { 0x253C, glyph_SF050000 }, - { 0x252C, glyph_SF060000 }, - { 0x2534, glyph_SF070000 }, - { 0x251C, glyph_SF080000 }, - { 0x2524, glyph_SF090000 }, - { 0x2500, glyph_SF100000 }, - { 0x2502, glyph_SF110000 }, - { 0x2561, glyph_SF190000 }, - { 0x2562, glyph_SF200000 }, - { 0x2556, glyph_SF210000 }, - { 0x2555, glyph_SF220000 }, - { 0x2563, glyph_SF230000 }, - { 0x2551, glyph_SF240000 }, - { 0x2557, glyph_SF250000 }, - { 0x255D, glyph_SF260000 }, - { 0x255C, glyph_SF270000 }, - { 0x255B, glyph_SF280000 }, - { 0x255E, glyph_SF360000 }, - { 0x255F, glyph_SF370000 }, - { 0x255A, glyph_SF380000 }, - { 0x2554, glyph_SF390000 }, - { 0x2569, glyph_SF400000 }, - { 0x2566, glyph_SF410000 }, - { 0x2560, glyph_SF420000 }, - { 0x2550, glyph_SF430000 }, - { 0x256C, glyph_SF440000 }, - { 0x2567, glyph_SF450000 }, - { 0x2568, glyph_SF460000 }, - { 0x2564, glyph_SF470000 }, - { 0x2565, glyph_SF480000 }, - { 0x2559, glyph_SF490000 }, - { 0x2558, glyph_SF500000 }, - { 0x2552, glyph_SF510000 }, - { 0x2553, glyph_SF520000 }, - { 0x256B, glyph_SF530000 }, - { 0x256A, glyph_SF540000 }, - { 0x015A, glyph_Sacute }, - { 0x0160, glyph_Scaron }, - { 0xF6FD, glyph_Scaronsmall }, - { 0x015E, glyph_Scedilla }, -/* { 0xF6C1, glyph_Scedilla }, duplicate code */ - { 0x015C, glyph_Scircumflex }, - { 0x0218, glyph_Scommaaccent }, - { 0x03A3, glyph_Sigma }, - { 0xF773, glyph_Ssmall }, - { 0x0054, glyph_T }, - { 0x03A4, glyph_Tau }, - { 0x0166, glyph_Tbar }, - { 0x0164, glyph_Tcaron }, - { 0x0162, glyph_Tcommaaccent }, -/* { 0x021A, glyph_Tcommaaccent }, duplicate code */ - { 0x0398, glyph_Theta }, - { 0x00DE, glyph_Thorn }, - { 0xF7FE, glyph_Thornsmall }, - { 0xF6FE, glyph_Tildesmall }, - { 0xF774, glyph_Tsmall }, - { 0x0055, glyph_U }, - { 0x00DA, glyph_Uacute }, - { 0xF7FA, glyph_Uacutesmall }, - { 0x016C, glyph_Ubreve }, - { 0x00DB, glyph_Ucircumflex }, - { 0xF7FB, glyph_Ucircumflexsmall }, - { 0x00DC, glyph_Udieresis }, - { 0xF7FC, glyph_Udieresissmall }, - { 0x00D9, glyph_Ugrave }, - { 0xF7F9, glyph_Ugravesmall }, - { 0x01AF, glyph_Uhorn }, - { 0x0170, glyph_Uhungarumlaut }, - { 0x016A, glyph_Umacron }, - { 0x0172, glyph_Uogonek }, - { 0x03A5, glyph_Upsilon }, - { 0x03D2, glyph_Upsilon1 }, - { 0x03AB, glyph_Upsilondieresis }, - { 0x038E, glyph_Upsilontonos }, - { 0x016E, glyph_Uring }, - { 0xF775, glyph_Usmall }, - { 0x0168, glyph_Utilde }, - { 0x0056, glyph_V }, - { 0xF776, glyph_Vsmall }, - { 0x0057, glyph_W }, - { 0x1E82, glyph_Wacute }, - { 0x0174, glyph_Wcircumflex }, - { 0x1E84, glyph_Wdieresis }, - { 0x1E80, glyph_Wgrave }, - { 0xF777, glyph_Wsmall }, - { 0x0058, glyph_X }, - { 0x039E, glyph_Xi }, - { 0xF778, glyph_Xsmall }, - { 0x0059, glyph_Y }, - { 0x00DD, glyph_Yacute }, - { 0xF7FD, glyph_Yacutesmall }, - { 0x0176, glyph_Ycircumflex }, - { 0x0178, glyph_Ydieresis }, - { 0xF7FF, glyph_Ydieresissmall }, - { 0x1EF2, glyph_Ygrave }, - { 0xF779, glyph_Ysmall }, - { 0x005A, glyph_Z }, - { 0x0179, glyph_Zacute }, - { 0x017D, glyph_Zcaron }, - { 0xF6FF, glyph_Zcaronsmall }, - { 0x017B, glyph_Zdotaccent }, - { 0x0396, glyph_Zeta }, - { 0xF77A, glyph_Zsmall }, - { 0x0061, glyph_a }, - { 0x00E1, glyph_aacute }, - { 0x0103, glyph_abreve }, - { 0x00E2, glyph_acircumflex }, - { 0x00B4, glyph_acute }, - { 0x0301, glyph_acutecomb }, - { 0x00E4, glyph_adieresis }, - { 0x00E6, glyph_ae }, - { 0x01FD, glyph_aeacute }, - { 0x2015, glyph_afii00208 }, - { 0x0410, glyph_afii10017 }, - { 0x0411, glyph_afii10018 }, - { 0x0412, glyph_afii10019 }, - { 0x0413, glyph_afii10020 }, - { 0x0414, glyph_afii10021 }, - { 0x0415, glyph_afii10022 }, - { 0x0401, glyph_afii10023 }, - { 0x0416, glyph_afii10024 }, - { 0x0417, glyph_afii10025 }, - { 0x0418, glyph_afii10026 }, - { 0x0419, glyph_afii10027 }, - { 0x041A, glyph_afii10028 }, - { 0x041B, glyph_afii10029 }, - { 0x041C, glyph_afii10030 }, - { 0x041D, glyph_afii10031 }, - { 0x041E, glyph_afii10032 }, - { 0x041F, glyph_afii10033 }, - { 0x0420, glyph_afii10034 }, - { 0x0421, glyph_afii10035 }, - { 0x0422, glyph_afii10036 }, - { 0x0423, glyph_afii10037 }, - { 0x0424, glyph_afii10038 }, - { 0x0425, glyph_afii10039 }, - { 0x0426, glyph_afii10040 }, - { 0x0427, glyph_afii10041 }, - { 0x0428, glyph_afii10042 }, - { 0x0429, glyph_afii10043 }, - { 0x042A, glyph_afii10044 }, - { 0x042B, glyph_afii10045 }, - { 0x042C, glyph_afii10046 }, - { 0x042D, glyph_afii10047 }, - { 0x042E, glyph_afii10048 }, - { 0x042F, glyph_afii10049 }, - { 0x0490, glyph_afii10050 }, - { 0x0402, glyph_afii10051 }, - { 0x0403, glyph_afii10052 }, - { 0x0404, glyph_afii10053 }, - { 0x0405, glyph_afii10054 }, - { 0x0406, glyph_afii10055 }, - { 0x0407, glyph_afii10056 }, - { 0x0408, glyph_afii10057 }, - { 0x0409, glyph_afii10058 }, - { 0x040A, glyph_afii10059 }, - { 0x040B, glyph_afii10060 }, - { 0x040C, glyph_afii10061 }, - { 0x040E, glyph_afii10062 }, - { 0xF6C4, glyph_afii10063 }, - { 0xF6C5, glyph_afii10064 }, - { 0x0430, glyph_afii10065 }, - { 0x0431, glyph_afii10066 }, - { 0x0432, glyph_afii10067 }, - { 0x0433, glyph_afii10068 }, - { 0x0434, glyph_afii10069 }, - { 0x0435, glyph_afii10070 }, - { 0x0451, glyph_afii10071 }, - { 0x0436, glyph_afii10072 }, - { 0x0437, glyph_afii10073 }, - { 0x0438, glyph_afii10074 }, - { 0x0439, glyph_afii10075 }, - { 0x043A, glyph_afii10076 }, - { 0x043B, glyph_afii10077 }, - { 0x043C, glyph_afii10078 }, - { 0x043D, glyph_afii10079 }, - { 0x043E, glyph_afii10080 }, - { 0x043F, glyph_afii10081 }, - { 0x0440, glyph_afii10082 }, - { 0x0441, glyph_afii10083 }, - { 0x0442, glyph_afii10084 }, - { 0x0443, glyph_afii10085 }, - { 0x0444, glyph_afii10086 }, - { 0x0445, glyph_afii10087 }, - { 0x0446, glyph_afii10088 }, - { 0x0447, glyph_afii10089 }, - { 0x0448, glyph_afii10090 }, - { 0x0449, glyph_afii10091 }, - { 0x044A, glyph_afii10092 }, - { 0x044B, glyph_afii10093 }, - { 0x044C, glyph_afii10094 }, - { 0x044D, glyph_afii10095 }, - { 0x044E, glyph_afii10096 }, - { 0x044F, glyph_afii10097 }, - { 0x0491, glyph_afii10098 }, - { 0x0452, glyph_afii10099 }, - { 0x0453, glyph_afii10100 }, - { 0x0454, glyph_afii10101 }, - { 0x0455, glyph_afii10102 }, - { 0x0456, glyph_afii10103 }, - { 0x0457, glyph_afii10104 }, - { 0x0458, glyph_afii10105 }, - { 0x0459, glyph_afii10106 }, - { 0x045A, glyph_afii10107 }, - { 0x045B, glyph_afii10108 }, - { 0x045C, glyph_afii10109 }, - { 0x045E, glyph_afii10110 }, - { 0x040F, glyph_afii10145 }, - { 0x0462, glyph_afii10146 }, - { 0x0472, glyph_afii10147 }, - { 0x0474, glyph_afii10148 }, - { 0xF6C6, glyph_afii10192 }, - { 0x045F, glyph_afii10193 }, - { 0x0463, glyph_afii10194 }, - { 0x0473, glyph_afii10195 }, - { 0x0475, glyph_afii10196 }, - { 0xF6C7, glyph_afii10831 }, - { 0xF6C8, glyph_afii10832 }, - { 0x04D9, glyph_afii10846 }, - { 0x200E, glyph_afii299 }, - { 0x200F, glyph_afii300 }, - { 0x200D, glyph_afii301 }, - { 0x066A, glyph_afii57381 }, - { 0x060C, glyph_afii57388 }, - { 0x0660, glyph_afii57392 }, - { 0x0661, glyph_afii57393 }, - { 0x0662, glyph_afii57394 }, - { 0x0663, glyph_afii57395 }, - { 0x0664, glyph_afii57396 }, - { 0x0665, glyph_afii57397 }, - { 0x0666, glyph_afii57398 }, - { 0x0667, glyph_afii57399 }, - { 0x0668, glyph_afii57400 }, - { 0x0669, glyph_afii57401 }, - { 0x061B, glyph_afii57403 }, - { 0x061F, glyph_afii57407 }, - { 0x0621, glyph_afii57409 }, - { 0x0622, glyph_afii57410 }, - { 0x0623, glyph_afii57411 }, - { 0x0624, glyph_afii57412 }, - { 0x0625, glyph_afii57413 }, - { 0x0626, glyph_afii57414 }, - { 0x0627, glyph_afii57415 }, - { 0x0628, glyph_afii57416 }, - { 0x0629, glyph_afii57417 }, - { 0x062A, glyph_afii57418 }, - { 0x062B, glyph_afii57419 }, - { 0x062C, glyph_afii57420 }, - { 0x062D, glyph_afii57421 }, - { 0x062E, glyph_afii57422 }, - { 0x062F, glyph_afii57423 }, - { 0x0630, glyph_afii57424 }, - { 0x0631, glyph_afii57425 }, - { 0x0632, glyph_afii57426 }, - { 0x0633, glyph_afii57427 }, - { 0x0634, glyph_afii57428 }, - { 0x0635, glyph_afii57429 }, - { 0x0636, glyph_afii57430 }, - { 0x0637, glyph_afii57431 }, - { 0x0638, glyph_afii57432 }, - { 0x0639, glyph_afii57433 }, - { 0x063A, glyph_afii57434 }, - { 0x0640, glyph_afii57440 }, - { 0x0641, glyph_afii57441 }, - { 0x0642, glyph_afii57442 }, - { 0x0643, glyph_afii57443 }, - { 0x0644, glyph_afii57444 }, - { 0x0645, glyph_afii57445 }, - { 0x0646, glyph_afii57446 }, - { 0x0648, glyph_afii57448 }, - { 0x0649, glyph_afii57449 }, - { 0x064A, glyph_afii57450 }, - { 0x064B, glyph_afii57451 }, - { 0x064C, glyph_afii57452 }, - { 0x064D, glyph_afii57453 }, - { 0x064E, glyph_afii57454 }, - { 0x064F, glyph_afii57455 }, - { 0x0650, glyph_afii57456 }, - { 0x0651, glyph_afii57457 }, - { 0x0652, glyph_afii57458 }, - { 0x0647, glyph_afii57470 }, - { 0x06A4, glyph_afii57505 }, - { 0x067E, glyph_afii57506 }, - { 0x0686, glyph_afii57507 }, - { 0x0698, glyph_afii57508 }, - { 0x06AF, glyph_afii57509 }, - { 0x0679, glyph_afii57511 }, - { 0x0688, glyph_afii57512 }, - { 0x0691, glyph_afii57513 }, - { 0x06BA, glyph_afii57514 }, - { 0x06D2, glyph_afii57519 }, - { 0x06D5, glyph_afii57534 }, - { 0x20AA, glyph_afii57636 }, - { 0x05BE, glyph_afii57645 }, - { 0x05C3, glyph_afii57658 }, - { 0x05D0, glyph_afii57664 }, - { 0x05D1, glyph_afii57665 }, - { 0x05D2, glyph_afii57666 }, - { 0x05D3, glyph_afii57667 }, - { 0x05D4, glyph_afii57668 }, - { 0x05D5, glyph_afii57669 }, - { 0x05D6, glyph_afii57670 }, - { 0x05D7, glyph_afii57671 }, - { 0x05D8, glyph_afii57672 }, - { 0x05D9, glyph_afii57673 }, - { 0x05DA, glyph_afii57674 }, - { 0x05DB, glyph_afii57675 }, - { 0x05DC, glyph_afii57676 }, - { 0x05DD, glyph_afii57677 }, - { 0x05DE, glyph_afii57678 }, - { 0x05DF, glyph_afii57679 }, - { 0x05E0, glyph_afii57680 }, - { 0x05E1, glyph_afii57681 }, - { 0x05E2, glyph_afii57682 }, - { 0x05E3, glyph_afii57683 }, - { 0x05E4, glyph_afii57684 }, - { 0x05E5, glyph_afii57685 }, - { 0x05E6, glyph_afii57686 }, - { 0x05E7, glyph_afii57687 }, - { 0x05E8, glyph_afii57688 }, - { 0x05E9, glyph_afii57689 }, - { 0x05EA, glyph_afii57690 }, - { 0xFB2A, glyph_afii57694 }, - { 0xFB2B, glyph_afii57695 }, - { 0xFB4B, glyph_afii57700 }, - { 0xFB1F, glyph_afii57705 }, - { 0x05F0, glyph_afii57716 }, - { 0x05F1, glyph_afii57717 }, - { 0x05F2, glyph_afii57718 }, - { 0xFB35, glyph_afii57723 }, - { 0x05B4, glyph_afii57793 }, - { 0x05B5, glyph_afii57794 }, - { 0x05B6, glyph_afii57795 }, - { 0x05BB, glyph_afii57796 }, - { 0x05B8, glyph_afii57797 }, - { 0x05B7, glyph_afii57798 }, - { 0x05B0, glyph_afii57799 }, - { 0x05B2, glyph_afii57800 }, - { 0x05B1, glyph_afii57801 }, - { 0x05B3, glyph_afii57802 }, - { 0x05C2, glyph_afii57803 }, - { 0x05C1, glyph_afii57804 }, - { 0x05B9, glyph_afii57806 }, - { 0x05BC, glyph_afii57807 }, - { 0x05BD, glyph_afii57839 }, - { 0x05BF, glyph_afii57841 }, - { 0x05C0, glyph_afii57842 }, - { 0x02BC, glyph_afii57929 }, - { 0x2105, glyph_afii61248 }, - { 0x2113, glyph_afii61289 }, - { 0x2116, glyph_afii61352 }, - { 0x202C, glyph_afii61573 }, - { 0x202D, glyph_afii61574 }, - { 0x202E, glyph_afii61575 }, - { 0x200C, glyph_afii61664 }, - { 0x066D, glyph_afii63167 }, - { 0x02BD, glyph_afii64937 }, - { 0x00E0, glyph_agrave }, - { 0x2135, glyph_aleph }, - { 0x03B1, glyph_alpha }, - { 0x03AC, glyph_alphatonos }, - { 0x0101, glyph_amacron }, - { 0x0026, glyph_ampersand }, - { 0xF726, glyph_ampersandsmall }, - { 0x2220, glyph_angle }, - { 0x2329, glyph_angleleft }, - { 0x232A, glyph_angleright }, - { 0x0387, glyph_anoteleia }, - { 0x0105, glyph_aogonek }, - { 0x2248, glyph_approxequal }, - { 0x00E5, glyph_aring }, - { 0x01FB, glyph_aringacute }, - { 0x2194, glyph_arrowboth }, - { 0x21D4, glyph_arrowdblboth }, - { 0x21D3, glyph_arrowdbldown }, - { 0x21D0, glyph_arrowdblleft }, - { 0x21D2, glyph_arrowdblright }, - { 0x21D1, glyph_arrowdblup }, - { 0x2193, glyph_arrowdown }, - { 0xF8E7, glyph_arrowhorizex }, - { 0x2190, glyph_arrowleft }, - { 0x2192, glyph_arrowright }, - { 0x2191, glyph_arrowup }, - { 0x2195, glyph_arrowupdn }, - { 0x21A8, glyph_arrowupdnbse }, - { 0xF8E6, glyph_arrowvertex }, - { 0x005E, glyph_asciicircum }, - { 0x007E, glyph_asciitilde }, - { 0x002A, glyph_asterisk }, - { 0x2217, glyph_asteriskmath }, - { 0xF6E9, glyph_asuperior }, - { 0x0040, glyph_at }, - { 0x00E3, glyph_atilde }, - { 0x0062, glyph_b }, - { 0x005C, glyph_backslash }, - { 0x007C, glyph_bar }, - { 0x03B2, glyph_beta }, - { 0x2588, glyph_block }, - { 0xF8F4, glyph_braceex }, - { 0x007B, glyph_braceleft }, - { 0xF8F3, glyph_braceleftbt }, - { 0xF8F2, glyph_braceleftmid }, - { 0xF8F1, glyph_bracelefttp }, - { 0x007D, glyph_braceright }, - { 0xF8FE, glyph_bracerightbt }, - { 0xF8FD, glyph_bracerightmid }, - { 0xF8FC, glyph_bracerighttp }, - { 0x005B, glyph_bracketleft }, - { 0xF8F0, glyph_bracketleftbt }, - { 0xF8EF, glyph_bracketleftex }, - { 0xF8EE, glyph_bracketlefttp }, - { 0x005D, glyph_bracketright }, - { 0xF8FB, glyph_bracketrightbt }, - { 0xF8FA, glyph_bracketrightex }, - { 0xF8F9, glyph_bracketrighttp }, - { 0x02D8, glyph_breve }, - { 0x00A6, glyph_brokenbar }, - { 0xF6EA, glyph_bsuperior }, - { 0x2022, glyph_bullet }, - { 0x0063, glyph_c }, - { 0x0107, glyph_cacute }, - { 0x02C7, glyph_caron }, - { 0x21B5, glyph_carriagereturn }, - { 0x010D, glyph_ccaron }, - { 0x00E7, glyph_ccedilla }, - { 0x0109, glyph_ccircumflex }, - { 0x010B, glyph_cdotaccent }, - { 0x00B8, glyph_cedilla }, - { 0x00A2, glyph_cent }, - { 0xF6DF, glyph_centinferior }, - { 0xF7A2, glyph_centoldstyle }, - { 0xF6E0, glyph_centsuperior }, - { 0x03C7, glyph_chi }, - { 0x25CB, glyph_circle }, - { 0x2297, glyph_circlemultiply }, - { 0x2295, glyph_circleplus }, - { 0x02C6, glyph_circumflex }, - { 0x2663, glyph_club }, - { 0x003A, glyph_colon }, - { 0x20A1, glyph_colonmonetary }, - { 0x002C, glyph_comma }, - { 0xF6C3, glyph_commaaccent }, - { 0xF6E1, glyph_commainferior }, - { 0xF6E2, glyph_commasuperior }, - { 0x2245, glyph_congruent }, - { 0x00A9, glyph_copyright }, - { 0xF8E9, glyph_copyrightsans }, - { 0xF6D9, glyph_copyrightserif }, - { 0x00A4, glyph_currency }, - { 0xF6D1, glyph_cyrBreve }, - { 0xF6D2, glyph_cyrFlex }, - { 0xF6D4, glyph_cyrbreve }, - { 0xF6D5, glyph_cyrflex }, - { 0x0064, glyph_d }, - { 0x2020, glyph_dagger }, - { 0x2021, glyph_daggerdbl }, - { 0xF6D3, glyph_dblGrave }, - { 0xF6D6, glyph_dblgrave }, - { 0x010F, glyph_dcaron }, - { 0x0111, glyph_dcroat }, - { 0x00B0, glyph_degree }, - { 0x03B4, glyph_delta }, - { 0x2666, glyph_diamond }, - { 0x00A8, glyph_dieresis }, - { 0xF6D7, glyph_dieresisacute }, - { 0xF6D8, glyph_dieresisgrave }, - { 0x0385, glyph_dieresistonos }, - { 0x00F7, glyph_divide }, - { 0x2593, glyph_dkshade }, - { 0x2584, glyph_dnblock }, - { 0x0024, glyph_dollar }, - { 0xF6E3, glyph_dollarinferior }, - { 0xF724, glyph_dollaroldstyle }, - { 0xF6E4, glyph_dollarsuperior }, - { 0x20AB, glyph_dong }, - { 0x02D9, glyph_dotaccent }, - { 0x0323, glyph_dotbelowcomb }, - { 0x0131, glyph_dotlessi }, - { 0xF6BE, glyph_dotlessj }, - { 0x22C5, glyph_dotmath }, - { 0xF6EB, glyph_dsuperior }, - { 0x0065, glyph_e }, - { 0x00E9, glyph_eacute }, - { 0x0115, glyph_ebreve }, - { 0x011B, glyph_ecaron }, - { 0x00EA, glyph_ecircumflex }, - { 0x00EB, glyph_edieresis }, - { 0x0117, glyph_edotaccent }, - { 0x00E8, glyph_egrave }, - { 0x0038, glyph_eight }, - { 0x2088, glyph_eightinferior }, - { 0xF738, glyph_eightoldstyle }, - { 0x2078, glyph_eightsuperior }, - { 0x2208, glyph_element }, - { 0x2026, glyph_ellipsis }, - { 0x0113, glyph_emacron }, - { 0x2014, glyph_emdash }, - { 0x2205, glyph_emptyset }, - { 0x2013, glyph_endash }, - { 0x014B, glyph_eng }, - { 0x0119, glyph_eogonek }, - { 0x03B5, glyph_epsilon }, - { 0x03AD, glyph_epsilontonos }, - { 0x003D, glyph_equal }, - { 0x2261, glyph_equivalence }, - { 0x212E, glyph_estimated }, - { 0xF6EC, glyph_esuperior }, - { 0x03B7, glyph_eta }, - { 0x03AE, glyph_etatonos }, - { 0x00F0, glyph_eth }, - { 0x0021, glyph_exclam }, - { 0x203C, glyph_exclamdbl }, - { 0x00A1, glyph_exclamdown }, - { 0xF7A1, glyph_exclamdownsmall }, - { 0xF721, glyph_exclamsmall }, - { 0x2203, glyph_existential }, - { 0x0066, glyph_f }, - { 0x2640, glyph_female }, - { 0xFB00, glyph_ff }, - { 0xFB03, glyph_ffi }, - { 0xFB04, glyph_ffl }, - { 0xFB01, glyph_fi }, - { 0x2012, glyph_figuredash }, - { 0x25A0, glyph_filledbox }, - { 0x25AC, glyph_filledrect }, - { 0x0035, glyph_five }, - { 0x215D, glyph_fiveeighths }, - { 0x2085, glyph_fiveinferior }, - { 0xF735, glyph_fiveoldstyle }, - { 0x2075, glyph_fivesuperior }, - { 0xFB02, glyph_fl }, - { 0x0192, glyph_florin }, - { 0x0034, glyph_four }, - { 0x2084, glyph_fourinferior }, - { 0xF734, glyph_fouroldstyle }, - { 0x2074, glyph_foursuperior }, - { 0x2044, glyph_fraction }, -/* { 0x2215, glyph_fraction }, duplicate name */ - { 0x20A3, glyph_franc }, - { 0x0067, glyph_g }, - { 0x03B3, glyph_gamma }, - { 0x011F, glyph_gbreve }, - { 0x01E7, glyph_gcaron }, - { 0x011D, glyph_gcircumflex }, - { 0x0123, glyph_gcommaaccent }, - { 0x0121, glyph_gdotaccent }, - { 0x00DF, glyph_germandbls }, - { 0x2207, glyph_gradient }, - { 0x0060, glyph_grave }, - { 0x0300, glyph_gravecomb }, - { 0x003E, glyph_greater }, - { 0x2265, glyph_greaterequal }, - { 0x00AB, glyph_guillemotleft }, - { 0x00BB, glyph_guillemotright }, - { 0x2039, glyph_guilsinglleft }, - { 0x203A, glyph_guilsinglright }, - { 0x0068, glyph_h }, - { 0x0127, glyph_hbar }, - { 0x0125, glyph_hcircumflex }, - { 0x2665, glyph_heart }, - { 0x0309, glyph_hookabovecomb }, - { 0x2302, glyph_house }, - { 0x02DD, glyph_hungarumlaut }, - { 0x002D, glyph_hyphen }, -/* { 0x00AD, glyph_hyphen }, duplicate code */ - { 0xF6E5, glyph_hypheninferior }, - { 0xF6E6, glyph_hyphensuperior }, - { 0x0069, glyph_i }, - { 0x00ED, glyph_iacute }, - { 0x012D, glyph_ibreve }, - { 0x00EE, glyph_icircumflex }, - { 0x00EF, glyph_idieresis }, - { 0x00EC, glyph_igrave }, - { 0x0133, glyph_ij }, - { 0x012B, glyph_imacron }, - { 0x221E, glyph_infinity }, - { 0x222B, glyph_integral }, - { 0x2321, glyph_integralbt }, - { 0xF8F5, glyph_integralex }, - { 0x2320, glyph_integraltp }, - { 0x2229, glyph_intersection }, - { 0x25D8, glyph_invbullet }, - { 0x25D9, glyph_invcircle }, - { 0x263B, glyph_invsmileface }, - { 0x012F, glyph_iogonek }, - { 0x03B9, glyph_iota }, - { 0x03CA, glyph_iotadieresis }, - { 0x0390, glyph_iotadieresistonos }, - { 0x03AF, glyph_iotatonos }, - { 0xF6ED, glyph_isuperior }, - { 0x0129, glyph_itilde }, - { 0x006A, glyph_j }, - { 0x0135, glyph_jcircumflex }, - { 0x006B, glyph_k }, - { 0x03BA, glyph_kappa }, - { 0x0137, glyph_kcommaaccent }, - { 0x0138, glyph_kgreenlandic }, - { 0x006C, glyph_l }, - { 0x013A, glyph_lacute }, - { 0x03BB, glyph_lambda }, - { 0x013E, glyph_lcaron }, - { 0x013C, glyph_lcommaaccent }, - { 0x0140, glyph_ldot }, - { 0x003C, glyph_less }, - { 0x2264, glyph_lessequal }, - { 0x258C, glyph_lfblock }, - { 0x20A4, glyph_lira }, - { 0xF6C0, glyph_ll }, - { 0x2227, glyph_logicaland }, - { 0x00AC, glyph_logicalnot }, - { 0x2228, glyph_logicalor }, - { 0x017F, glyph_longs }, - { 0x25CA, glyph_lozenge }, - { 0x0142, glyph_lslash }, - { 0xF6EE, glyph_lsuperior }, - { 0x2591, glyph_ltshade }, - { 0x006D, glyph_m }, - { 0x00AF, glyph_macron }, -/* { 0x02C9, glyph_macron }, duplicate code */ - { 0x2642, glyph_male }, - { 0x2212, glyph_minus }, - { 0x2032, glyph_minute }, - { 0xF6EF, glyph_msuperior }, -/* { 0x00B5, glyph_mu }, duplicate code */ - { 0x03BC, glyph_mu }, - { 0x00D7, glyph_multiply }, - { 0x266A, glyph_musicalnote }, - { 0x266B, glyph_musicalnotedbl }, - { 0x006E, glyph_n }, - { 0x0144, glyph_nacute }, - { 0x0149, glyph_napostrophe }, - { 0x0148, glyph_ncaron }, - { 0x0146, glyph_ncommaaccent }, - { 0x0039, glyph_nine }, - { 0x2089, glyph_nineinferior }, - { 0xF739, glyph_nineoldstyle }, - { 0x2079, glyph_ninesuperior }, - { 0x2209, glyph_notelement }, - { 0x2260, glyph_notequal }, - { 0x2284, glyph_notsubset }, - { 0x207F, glyph_nsuperior }, - { 0x00F1, glyph_ntilde }, - { 0x03BD, glyph_nu }, - { 0x0023, glyph_numbersign }, - { 0x006F, glyph_o }, - { 0x00F3, glyph_oacute }, - { 0x014F, glyph_obreve }, - { 0x00F4, glyph_ocircumflex }, - { 0x00F6, glyph_odieresis }, - { 0x0153, glyph_oe }, - { 0x02DB, glyph_ogonek }, - { 0x00F2, glyph_ograve }, - { 0x01A1, glyph_ohorn }, - { 0x0151, glyph_ohungarumlaut }, - { 0x014D, glyph_omacron }, - { 0x03C9, glyph_omega }, - { 0x03D6, glyph_omega1 }, - { 0x03CE, glyph_omegatonos }, - { 0x03BF, glyph_omicron }, - { 0x03CC, glyph_omicrontonos }, - { 0x0031, glyph_one }, - { 0x2024, glyph_onedotenleader }, - { 0x215B, glyph_oneeighth }, - { 0xF6DC, glyph_onefitted }, - { 0x00BD, glyph_onehalf }, - { 0x2081, glyph_oneinferior }, - { 0xF731, glyph_oneoldstyle }, - { 0x00BC, glyph_onequarter }, - { 0x00B9, glyph_onesuperior }, - { 0x2153, glyph_onethird }, - { 0x25E6, glyph_openbullet }, - { 0x00AA, glyph_ordfeminine }, - { 0x00BA, glyph_ordmasculine }, - { 0x221F, glyph_orthogonal }, - { 0x00F8, glyph_oslash }, - { 0x01FF, glyph_oslashacute }, - { 0xF6F0, glyph_osuperior }, - { 0x00F5, glyph_otilde }, - { 0x0070, glyph_p }, - { 0x00B6, glyph_paragraph }, - { 0x0028, glyph_parenleft }, - { 0xF8ED, glyph_parenleftbt }, - { 0xF8EC, glyph_parenleftex }, - { 0x208D, glyph_parenleftinferior }, - { 0x207D, glyph_parenleftsuperior }, - { 0xF8EB, glyph_parenlefttp }, - { 0x0029, glyph_parenright }, - { 0xF8F8, glyph_parenrightbt }, - { 0xF8F7, glyph_parenrightex }, - { 0x208E, glyph_parenrightinferior }, - { 0x207E, glyph_parenrightsuperior }, - { 0xF8F6, glyph_parenrighttp }, - { 0x2202, glyph_partialdiff }, - { 0x0025, glyph_percent }, - { 0x002E, glyph_period }, - { 0x00B7, glyph_periodcentered }, -/* { 0x2219, glyph_periodcentered }, duplicate code */ - { 0xF6E7, glyph_periodinferior }, - { 0xF6E8, glyph_periodsuperior }, - { 0x22A5, glyph_perpendicular }, - { 0x2030, glyph_perthousand }, - { 0x20A7, glyph_peseta }, - { 0x03C6, glyph_phi }, - { 0x03D5, glyph_phi1 }, - { 0x03C0, glyph_pi }, - { 0x002B, glyph_plus }, - { 0x00B1, glyph_plusminus }, - { 0x211E, glyph_prescription }, - { 0x220F, glyph_product }, - { 0x2282, glyph_propersubset }, - { 0x2283, glyph_propersuperset }, - { 0x221D, glyph_proportional }, - { 0x03C8, glyph_psi }, - { 0x0071, glyph_q }, - { 0x003F, glyph_question }, - { 0x00BF, glyph_questiondown }, - { 0xF7BF, glyph_questiondownsmall }, - { 0xF73F, glyph_questionsmall }, - { 0x0022, glyph_quotedbl }, - { 0x201E, glyph_quotedblbase }, - { 0x201C, glyph_quotedblleft }, - { 0x201D, glyph_quotedblright }, - { 0x2018, glyph_quoteleft }, - { 0x201B, glyph_quotereversed }, - { 0x2019, glyph_quoteright }, - { 0x201A, glyph_quotesinglbase }, - { 0x0027, glyph_quotesingle }, - { 0x0072, glyph_r }, - { 0x0155, glyph_racute }, - { 0x221A, glyph_radical }, - { 0xF8E5, glyph_radicalex }, - { 0x0159, glyph_rcaron }, - { 0x0157, glyph_rcommaaccent }, - { 0x2286, glyph_reflexsubset }, - { 0x2287, glyph_reflexsuperset }, - { 0x00AE, glyph_registered }, - { 0xF8E8, glyph_registersans }, - { 0xF6DA, glyph_registerserif }, - { 0x2310, glyph_revlogicalnot }, - { 0x03C1, glyph_rho }, - { 0x02DA, glyph_ring }, - { 0xF6F1, glyph_rsuperior }, - { 0x2590, glyph_rtblock }, - { 0xF6DD, glyph_rupiah }, - { 0x0073, glyph_s }, - { 0x015B, glyph_sacute }, - { 0x0161, glyph_scaron }, - { 0x015F, glyph_scedilla }, -/* { 0xF6C2, glyph_scedilla }, duplicate code */ - { 0x015D, glyph_scircumflex }, - { 0x0219, glyph_scommaaccent }, - { 0x2033, glyph_second }, - { 0x00A7, glyph_section }, - { 0x003B, glyph_semicolon }, - { 0x0037, glyph_seven }, - { 0x215E, glyph_seveneighths }, - { 0x2087, glyph_seveninferior }, - { 0xF737, glyph_sevenoldstyle }, - { 0x2077, glyph_sevensuperior }, - { 0x2592, glyph_shade }, - { 0x03C3, glyph_sigma }, - { 0x03C2, glyph_sigma1 }, - { 0x223C, glyph_similar }, - { 0x0036, glyph_six }, - { 0x2086, glyph_sixinferior }, - { 0xF736, glyph_sixoldstyle }, - { 0x2076, glyph_sixsuperior }, - { 0x002F, glyph_slash }, - { 0x263A, glyph_smileface }, - { 0x0020, glyph_space }, -/* { 0x00A0, glyph_space }, duplicate code */ - { 0x2660, glyph_spade }, - { 0xF6F2, glyph_ssuperior }, - { 0x00A3, glyph_sterling }, - { 0x220B, glyph_suchthat }, - { 0x2211, glyph_summation }, - { 0x263C, glyph_sun }, - { 0x0074, glyph_t }, - { 0x03C4, glyph_tau }, - { 0x0167, glyph_tbar }, - { 0x0165, glyph_tcaron }, - { 0x0163, glyph_tcommaaccent }, -/* { 0x021B, glyph_tcommaaccent }, duplicate code */ - { 0x2234, glyph_therefore }, - { 0x03B8, glyph_theta }, - { 0x03D1, glyph_theta1 }, - { 0x00FE, glyph_thorn }, - { 0x0033, glyph_three }, - { 0x215C, glyph_threeeighths }, - { 0x2083, glyph_threeinferior }, - { 0xF733, glyph_threeoldstyle }, - { 0x00BE, glyph_threequarters }, - { 0xF6DE, glyph_threequartersemdash }, - { 0x00B3, glyph_threesuperior }, - { 0x02DC, glyph_tilde }, - { 0x0303, glyph_tildecomb }, - { 0x0384, glyph_tonos }, - { 0x2122, glyph_trademark }, - { 0xF8EA, glyph_trademarksans }, - { 0xF6DB, glyph_trademarkserif }, - { 0x25BC, glyph_triagdn }, - { 0x25C4, glyph_triaglf }, - { 0x25BA, glyph_triagrt }, - { 0x25B2, glyph_triagup }, - { 0xF6F3, glyph_tsuperior }, - { 0x0032, glyph_two }, - { 0x2025, glyph_twodotenleader }, - { 0x2082, glyph_twoinferior }, - { 0xF732, glyph_twooldstyle }, - { 0x00B2, glyph_twosuperior }, - { 0x2154, glyph_twothirds }, - { 0x0075, glyph_u }, - { 0x00FA, glyph_uacute }, - { 0x016D, glyph_ubreve }, - { 0x00FB, glyph_ucircumflex }, - { 0x00FC, glyph_udieresis }, - { 0x00F9, glyph_ugrave }, - { 0x01B0, glyph_uhorn }, - { 0x0171, glyph_uhungarumlaut }, - { 0x016B, glyph_umacron }, - { 0x005F, glyph_underscore }, - { 0x2017, glyph_underscoredbl }, - { 0x222A, glyph_union }, - { 0x2200, glyph_universal }, - { 0x0173, glyph_uogonek }, - { 0x2580, glyph_upblock }, - { 0x03C5, glyph_upsilon }, - { 0x03CB, glyph_upsilondieresis }, - { 0x03B0, glyph_upsilondieresistonos }, - { 0x03CD, glyph_upsilontonos }, - { 0x016F, glyph_uring }, - { 0x0169, glyph_utilde }, - { 0x0076, glyph_v }, - { 0x0077, glyph_w }, - { 0x1E83, glyph_wacute }, - { 0x0175, glyph_wcircumflex }, - { 0x1E85, glyph_wdieresis }, - { 0x2118, glyph_weierstrass }, - { 0x1E81, glyph_wgrave }, - { 0x0078, glyph_x }, - { 0x03BE, glyph_xi }, - { 0x0079, glyph_y }, - { 0x00FD, glyph_yacute }, - { 0x0177, glyph_ycircumflex }, - { 0x00FF, glyph_ydieresis }, - { 0x00A5, glyph_yen }, - { 0x1EF3, glyph_ygrave }, - { 0x007A, glyph_z }, - { 0x017A, glyph_zacute }, - { 0x017E, glyph_zcaron }, - { 0x017C, glyph_zdotaccent }, - { 0x0030, glyph_zero }, - { 0x2080, glyph_zeroinferior }, - { 0xF730, glyph_zerooldstyle }, - { 0x2070, glyph_zerosuperior }, - { 0x03B6, glyph_zeta }, -#else -#endif -}; /* tab_agl2uni */ - -/* table sorted by unicode values */ -static pdc_glyph_tab tab_uni2agl[] = -{ - { 0x0020, glyph_space }, - { 0x0021, glyph_exclam }, - { 0x0022, glyph_quotedbl }, - { 0x0023, glyph_numbersign }, - { 0x0024, glyph_dollar }, - { 0x0025, glyph_percent }, - { 0x0026, glyph_ampersand }, - { 0x0027, glyph_quotesingle }, - { 0x0028, glyph_parenleft }, - { 0x0029, glyph_parenright }, - { 0x002A, glyph_asterisk }, - { 0x002B, glyph_plus }, - { 0x002C, glyph_comma }, - { 0x002D, glyph_hyphen }, - { 0x002E, glyph_period }, - { 0x002F, glyph_slash }, - { 0x0030, glyph_zero }, - { 0x0031, glyph_one }, - { 0x0032, glyph_two }, - { 0x0033, glyph_three }, - { 0x0034, glyph_four }, - { 0x0035, glyph_five }, - { 0x0036, glyph_six }, - { 0x0037, glyph_seven }, - { 0x0038, glyph_eight }, - { 0x0039, glyph_nine }, - { 0x003A, glyph_colon }, - { 0x003B, glyph_semicolon }, - { 0x003C, glyph_less }, - { 0x003D, glyph_equal }, - { 0x003E, glyph_greater }, - { 0x003F, glyph_question }, - { 0x0040, glyph_at }, - { 0x0041, glyph_A }, - { 0x0042, glyph_B }, - { 0x0043, glyph_C }, - { 0x0044, glyph_D }, - { 0x0045, glyph_E }, - { 0x0046, glyph_F }, - { 0x0047, glyph_G }, - { 0x0048, glyph_H }, - { 0x0049, glyph_I }, - { 0x004A, glyph_J }, - { 0x004B, glyph_K }, - { 0x004C, glyph_L }, - { 0x004D, glyph_M }, - { 0x004E, glyph_N }, - { 0x004F, glyph_O }, - { 0x0050, glyph_P }, - { 0x0051, glyph_Q }, - { 0x0052, glyph_R }, - { 0x0053, glyph_S }, - { 0x0054, glyph_T }, - { 0x0055, glyph_U }, - { 0x0056, glyph_V }, - { 0x0057, glyph_W }, - { 0x0058, glyph_X }, - { 0x0059, glyph_Y }, - { 0x005A, glyph_Z }, - { 0x005B, glyph_bracketleft }, - { 0x005C, glyph_backslash }, - { 0x005D, glyph_bracketright }, - { 0x005E, glyph_asciicircum }, - { 0x005F, glyph_underscore }, - { 0x0060, glyph_grave }, - { 0x0061, glyph_a }, - { 0x0062, glyph_b }, - { 0x0063, glyph_c }, - { 0x0064, glyph_d }, - { 0x0065, glyph_e }, - { 0x0066, glyph_f }, - { 0x0067, glyph_g }, - { 0x0068, glyph_h }, - { 0x0069, glyph_i }, - { 0x006A, glyph_j }, - { 0x006B, glyph_k }, - { 0x006C, glyph_l }, - { 0x006D, glyph_m }, - { 0x006E, glyph_n }, - { 0x006F, glyph_o }, - { 0x0070, glyph_p }, - { 0x0071, glyph_q }, - { 0x0072, glyph_r }, - { 0x0073, glyph_s }, - { 0x0074, glyph_t }, - { 0x0075, glyph_u }, - { 0x0076, glyph_v }, - { 0x0077, glyph_w }, - { 0x0078, glyph_x }, - { 0x0079, glyph_y }, - { 0x007A, glyph_z }, - { 0x007B, glyph_braceleft }, - { 0x007C, glyph_bar }, - { 0x007D, glyph_braceright }, - { 0x007E, glyph_asciitilde }, - { 0x00A0, glyph_space }, - { 0x00A1, glyph_exclamdown }, - { 0x00A2, glyph_cent }, - { 0x00A3, glyph_sterling }, - { 0x00A4, glyph_currency }, - { 0x00A5, glyph_yen }, - { 0x00A6, glyph_brokenbar }, - { 0x00A7, glyph_section }, - { 0x00A8, glyph_dieresis }, - { 0x00A9, glyph_copyright }, - { 0x00AA, glyph_ordfeminine }, - { 0x00AB, glyph_guillemotleft }, - { 0x00AC, glyph_logicalnot }, - { 0x00AD, glyph_hyphen }, - { 0x00AE, glyph_registered }, - { 0x00AF, glyph_macron }, - { 0x00B0, glyph_degree }, - { 0x00B1, glyph_plusminus }, - { 0x00B2, glyph_twosuperior }, - { 0x00B3, glyph_threesuperior }, - { 0x00B4, glyph_acute }, - { 0x00B5, glyph_mu }, - { 0x00B6, glyph_paragraph }, - { 0x00B7, glyph_periodcentered }, - { 0x00B8, glyph_cedilla }, - { 0x00B9, glyph_onesuperior }, - { 0x00BA, glyph_ordmasculine }, - { 0x00BB, glyph_guillemotright }, - { 0x00BC, glyph_onequarter }, - { 0x00BD, glyph_onehalf }, - { 0x00BE, glyph_threequarters }, - { 0x00BF, glyph_questiondown }, - { 0x00C0, glyph_Agrave }, - { 0x00C1, glyph_Aacute }, - { 0x00C2, glyph_Acircumflex }, - { 0x00C3, glyph_Atilde }, - { 0x00C4, glyph_Adieresis }, - { 0x00C5, glyph_Aring }, - { 0x00C6, glyph_AE }, - { 0x00C7, glyph_Ccedilla }, - { 0x00C8, glyph_Egrave }, - { 0x00C9, glyph_Eacute }, - { 0x00CA, glyph_Ecircumflex }, - { 0x00CB, glyph_Edieresis }, - { 0x00CC, glyph_Igrave }, - { 0x00CD, glyph_Iacute }, - { 0x00CE, glyph_Icircumflex }, - { 0x00CF, glyph_Idieresis }, - { 0x00D0, glyph_Eth }, - { 0x00D1, glyph_Ntilde }, - { 0x00D2, glyph_Ograve }, - { 0x00D3, glyph_Oacute }, - { 0x00D4, glyph_Ocircumflex }, - { 0x00D5, glyph_Otilde }, - { 0x00D6, glyph_Odieresis }, - { 0x00D7, glyph_multiply }, - { 0x00D8, glyph_Oslash }, - { 0x00D9, glyph_Ugrave }, - { 0x00DA, glyph_Uacute }, - { 0x00DB, glyph_Ucircumflex }, - { 0x00DC, glyph_Udieresis }, - { 0x00DD, glyph_Yacute }, - { 0x00DE, glyph_Thorn }, - { 0x00DF, glyph_germandbls }, - { 0x00E0, glyph_agrave }, - { 0x00E1, glyph_aacute }, - { 0x00E2, glyph_acircumflex }, - { 0x00E3, glyph_atilde }, - { 0x00E4, glyph_adieresis }, - { 0x00E5, glyph_aring }, - { 0x00E6, glyph_ae }, - { 0x00E7, glyph_ccedilla }, - { 0x00E8, glyph_egrave }, - { 0x00E9, glyph_eacute }, - { 0x00EA, glyph_ecircumflex }, - { 0x00EB, glyph_edieresis }, - { 0x00EC, glyph_igrave }, - { 0x00ED, glyph_iacute }, - { 0x00EE, glyph_icircumflex }, - { 0x00EF, glyph_idieresis }, - { 0x00F0, glyph_eth }, - { 0x00F1, glyph_ntilde }, - { 0x00F2, glyph_ograve }, - { 0x00F3, glyph_oacute }, - { 0x00F4, glyph_ocircumflex }, - { 0x00F5, glyph_otilde }, - { 0x00F6, glyph_odieresis }, - { 0x00F7, glyph_divide }, - { 0x00F8, glyph_oslash }, - { 0x00F9, glyph_ugrave }, - { 0x00FA, glyph_uacute }, - { 0x00FB, glyph_ucircumflex }, - { 0x00FC, glyph_udieresis }, - { 0x00FD, glyph_yacute }, - { 0x00FE, glyph_thorn }, - { 0x00FF, glyph_ydieresis }, - { 0x0100, glyph_Amacron }, - { 0x0101, glyph_amacron }, - { 0x0102, glyph_Abreve }, - { 0x0103, glyph_abreve }, - { 0x0104, glyph_Aogonek }, - { 0x0105, glyph_aogonek }, - { 0x0106, glyph_Cacute }, - { 0x0107, glyph_cacute }, - { 0x0108, glyph_Ccircumflex }, - { 0x0109, glyph_ccircumflex }, - { 0x010A, glyph_Cdotaccent }, - { 0x010B, glyph_cdotaccent }, - { 0x010C, glyph_Ccaron }, - { 0x010D, glyph_ccaron }, - { 0x010E, glyph_Dcaron }, - { 0x010F, glyph_dcaron }, - { 0x0110, glyph_Dcroat }, - { 0x0111, glyph_dcroat }, - { 0x0112, glyph_Emacron }, - { 0x0113, glyph_emacron }, - { 0x0114, glyph_Ebreve }, - { 0x0115, glyph_ebreve }, - { 0x0116, glyph_Edotaccent }, - { 0x0117, glyph_edotaccent }, - { 0x0118, glyph_Eogonek }, - { 0x0119, glyph_eogonek }, - { 0x011A, glyph_Ecaron }, - { 0x011B, glyph_ecaron }, - { 0x011C, glyph_Gcircumflex }, - { 0x011D, glyph_gcircumflex }, - { 0x011E, glyph_Gbreve }, - { 0x011F, glyph_gbreve }, - { 0x0120, glyph_Gdotaccent }, - { 0x0121, glyph_gdotaccent }, - { 0x0122, glyph_Gcommaaccent }, - { 0x0123, glyph_gcommaaccent }, - { 0x0124, glyph_Hcircumflex }, - { 0x0125, glyph_hcircumflex }, - { 0x0126, glyph_Hbar }, - { 0x0127, glyph_hbar }, - { 0x0128, glyph_Itilde }, - { 0x0129, glyph_itilde }, - { 0x012A, glyph_Imacron }, - { 0x012B, glyph_imacron }, - { 0x012C, glyph_Ibreve }, - { 0x012D, glyph_ibreve }, - { 0x012E, glyph_Iogonek }, - { 0x012F, glyph_iogonek }, - { 0x0130, glyph_Idotaccent }, - { 0x0131, glyph_dotlessi }, - { 0x0132, glyph_IJ }, - { 0x0133, glyph_ij }, - { 0x0134, glyph_Jcircumflex }, - { 0x0135, glyph_jcircumflex }, - { 0x0136, glyph_Kcommaaccent }, - { 0x0137, glyph_kcommaaccent }, - { 0x0138, glyph_kgreenlandic }, - { 0x0139, glyph_Lacute }, - { 0x013A, glyph_lacute }, - { 0x013B, glyph_Lcommaaccent }, - { 0x013C, glyph_lcommaaccent }, - { 0x013D, glyph_Lcaron }, - { 0x013E, glyph_lcaron }, - { 0x013F, glyph_Ldot }, - { 0x0140, glyph_ldot }, - { 0x0141, glyph_Lslash }, - { 0x0142, glyph_lslash }, - { 0x0143, glyph_Nacute }, - { 0x0144, glyph_nacute }, - { 0x0145, glyph_Ncommaaccent }, - { 0x0146, glyph_ncommaaccent }, - { 0x0147, glyph_Ncaron }, - { 0x0148, glyph_ncaron }, - { 0x0149, glyph_napostrophe }, - { 0x014A, glyph_Eng }, - { 0x014B, glyph_eng }, - { 0x014C, glyph_Omacron }, - { 0x014D, glyph_omacron }, - { 0x014E, glyph_Obreve }, - { 0x014F, glyph_obreve }, - { 0x0150, glyph_Ohungarumlaut }, - { 0x0151, glyph_ohungarumlaut }, - { 0x0152, glyph_OE }, - { 0x0153, glyph_oe }, - { 0x0154, glyph_Racute }, - { 0x0155, glyph_racute }, - { 0x0156, glyph_Rcommaaccent }, - { 0x0157, glyph_rcommaaccent }, - { 0x0158, glyph_Rcaron }, - { 0x0159, glyph_rcaron }, - { 0x015A, glyph_Sacute }, - { 0x015B, glyph_sacute }, - { 0x015C, glyph_Scircumflex }, - { 0x015D, glyph_scircumflex }, - { 0x015E, glyph_Scedilla }, - { 0x015F, glyph_scedilla }, - { 0x0160, glyph_Scaron }, - { 0x0161, glyph_scaron }, - { 0x0162, glyph_Tcommaaccent }, - { 0x0163, glyph_tcommaaccent }, - { 0x0164, glyph_Tcaron }, - { 0x0165, glyph_tcaron }, - { 0x0166, glyph_Tbar }, - { 0x0167, glyph_tbar }, - { 0x0168, glyph_Utilde }, - { 0x0169, glyph_utilde }, - { 0x016A, glyph_Umacron }, - { 0x016B, glyph_umacron }, - { 0x016C, glyph_Ubreve }, - { 0x016D, glyph_ubreve }, - { 0x016E, glyph_Uring }, - { 0x016F, glyph_uring }, - { 0x0170, glyph_Uhungarumlaut }, - { 0x0171, glyph_uhungarumlaut }, - { 0x0172, glyph_Uogonek }, - { 0x0173, glyph_uogonek }, - { 0x0174, glyph_Wcircumflex }, - { 0x0175, glyph_wcircumflex }, - { 0x0176, glyph_Ycircumflex }, - { 0x0177, glyph_ycircumflex }, - { 0x0178, glyph_Ydieresis }, - { 0x0179, glyph_Zacute }, - { 0x017A, glyph_zacute }, - { 0x017B, glyph_Zdotaccent }, - { 0x017C, glyph_zdotaccent }, - { 0x017D, glyph_Zcaron }, - { 0x017E, glyph_zcaron }, - { 0x017F, glyph_longs }, - { 0x0192, glyph_florin }, - { 0x01A0, glyph_Ohorn }, - { 0x01A1, glyph_ohorn }, - { 0x01AF, glyph_Uhorn }, - { 0x01B0, glyph_uhorn }, - { 0x01E6, glyph_Gcaron }, - { 0x01E7, glyph_gcaron }, - { 0x01FA, glyph_Aringacute }, - { 0x01FB, glyph_aringacute }, - { 0x01FC, glyph_AEacute }, - { 0x01FD, glyph_aeacute }, - { 0x01FE, glyph_Oslashacute }, - { 0x01FF, glyph_oslashacute }, - { 0x0218, glyph_Scommaaccent }, - { 0x0219, glyph_scommaaccent }, - { 0x021A, glyph_Tcommaaccent }, - { 0x021B, glyph_tcommaaccent }, - { 0x02BC, glyph_afii57929 }, - { 0x02BD, glyph_afii64937 }, - { 0x02C6, glyph_circumflex }, - { 0x02C7, glyph_caron }, - { 0x02C9, glyph_macron }, - { 0x02D8, glyph_breve }, - { 0x02D9, glyph_dotaccent }, - { 0x02DA, glyph_ring }, - { 0x02DB, glyph_ogonek }, - { 0x02DC, glyph_tilde }, - { 0x02DD, glyph_hungarumlaut }, - { 0x0300, glyph_gravecomb }, - { 0x0301, glyph_acutecomb }, - { 0x0303, glyph_tildecomb }, - { 0x0309, glyph_hookabovecomb }, - { 0x0323, glyph_dotbelowcomb }, - { 0x0384, glyph_tonos }, - { 0x0385, glyph_dieresistonos }, - { 0x0386, glyph_Alphatonos }, - { 0x0387, glyph_anoteleia }, - { 0x0388, glyph_Epsilontonos }, - { 0x0389, glyph_Etatonos }, - { 0x038A, glyph_Iotatonos }, - { 0x038C, glyph_Omicrontonos }, - { 0x038E, glyph_Upsilontonos }, - { 0x038F, glyph_Omegatonos }, - { 0x0390, glyph_iotadieresistonos }, - { 0x0391, glyph_Alpha }, - { 0x0392, glyph_Beta }, - { 0x0393, glyph_Gamma }, - { 0x0394, glyph_Delta }, - { 0x0395, glyph_Epsilon }, - { 0x0396, glyph_Zeta }, - { 0x0397, glyph_Eta }, - { 0x0398, glyph_Theta }, - { 0x0399, glyph_Iota }, - { 0x039A, glyph_Kappa }, - { 0x039B, glyph_Lambda }, - { 0x039C, glyph_Mu }, - { 0x039D, glyph_Nu }, - { 0x039E, glyph_Xi }, - { 0x039F, glyph_Omicron }, - { 0x03A0, glyph_Pi }, - { 0x03A1, glyph_Rho }, - { 0x03A3, glyph_Sigma }, - { 0x03A4, glyph_Tau }, - { 0x03A5, glyph_Upsilon }, - { 0x03A6, glyph_Phi }, - { 0x03A7, glyph_Chi }, - { 0x03A8, glyph_Psi }, - { 0x03A9, glyph_Omega }, - { 0x03AA, glyph_Iotadieresis }, - { 0x03AB, glyph_Upsilondieresis }, - { 0x03AC, glyph_alphatonos }, - { 0x03AD, glyph_epsilontonos }, - { 0x03AE, glyph_etatonos }, - { 0x03AF, glyph_iotatonos }, - { 0x03B0, glyph_upsilondieresistonos }, - { 0x03B1, glyph_alpha }, - { 0x03B2, glyph_beta }, - { 0x03B3, glyph_gamma }, - { 0x03B4, glyph_delta }, - { 0x03B5, glyph_epsilon }, - { 0x03B6, glyph_zeta }, - { 0x03B7, glyph_eta }, - { 0x03B8, glyph_theta }, - { 0x03B9, glyph_iota }, - { 0x03BA, glyph_kappa }, - { 0x03BB, glyph_lambda }, - { 0x03BC, glyph_mu }, - { 0x03BD, glyph_nu }, - { 0x03BE, glyph_xi }, - { 0x03BF, glyph_omicron }, - { 0x03C0, glyph_pi }, - { 0x03C1, glyph_rho }, - { 0x03C2, glyph_sigma1 }, - { 0x03C3, glyph_sigma }, - { 0x03C4, glyph_tau }, - { 0x03C5, glyph_upsilon }, - { 0x03C6, glyph_phi }, - { 0x03C7, glyph_chi }, - { 0x03C8, glyph_psi }, - { 0x03C9, glyph_omega }, - { 0x03CA, glyph_iotadieresis }, - { 0x03CB, glyph_upsilondieresis }, - { 0x03CC, glyph_omicrontonos }, - { 0x03CD, glyph_upsilontonos }, - { 0x03CE, glyph_omegatonos }, - { 0x03D1, glyph_theta1 }, - { 0x03D2, glyph_Upsilon1 }, - { 0x03D5, glyph_phi1 }, - { 0x03D6, glyph_omega1 }, - { 0x0401, glyph_afii10023 }, - { 0x0402, glyph_afii10051 }, - { 0x0403, glyph_afii10052 }, - { 0x0404, glyph_afii10053 }, - { 0x0405, glyph_afii10054 }, - { 0x0406, glyph_afii10055 }, - { 0x0407, glyph_afii10056 }, - { 0x0408, glyph_afii10057 }, - { 0x0409, glyph_afii10058 }, - { 0x040A, glyph_afii10059 }, - { 0x040B, glyph_afii10060 }, - { 0x040C, glyph_afii10061 }, - { 0x040E, glyph_afii10062 }, - { 0x040F, glyph_afii10145 }, - { 0x0410, glyph_afii10017 }, - { 0x0411, glyph_afii10018 }, - { 0x0412, glyph_afii10019 }, - { 0x0413, glyph_afii10020 }, - { 0x0414, glyph_afii10021 }, - { 0x0415, glyph_afii10022 }, - { 0x0416, glyph_afii10024 }, - { 0x0417, glyph_afii10025 }, - { 0x0418, glyph_afii10026 }, - { 0x0419, glyph_afii10027 }, - { 0x041A, glyph_afii10028 }, - { 0x041B, glyph_afii10029 }, - { 0x041C, glyph_afii10030 }, - { 0x041D, glyph_afii10031 }, - { 0x041E, glyph_afii10032 }, - { 0x041F, glyph_afii10033 }, - { 0x0420, glyph_afii10034 }, - { 0x0421, glyph_afii10035 }, - { 0x0422, glyph_afii10036 }, - { 0x0423, glyph_afii10037 }, - { 0x0424, glyph_afii10038 }, - { 0x0425, glyph_afii10039 }, - { 0x0426, glyph_afii10040 }, - { 0x0427, glyph_afii10041 }, - { 0x0428, glyph_afii10042 }, - { 0x0429, glyph_afii10043 }, - { 0x042A, glyph_afii10044 }, - { 0x042B, glyph_afii10045 }, - { 0x042C, glyph_afii10046 }, - { 0x042D, glyph_afii10047 }, - { 0x042E, glyph_afii10048 }, - { 0x042F, glyph_afii10049 }, - { 0x0430, glyph_afii10065 }, - { 0x0431, glyph_afii10066 }, - { 0x0432, glyph_afii10067 }, - { 0x0433, glyph_afii10068 }, - { 0x0434, glyph_afii10069 }, - { 0x0435, glyph_afii10070 }, - { 0x0436, glyph_afii10072 }, - { 0x0437, glyph_afii10073 }, - { 0x0438, glyph_afii10074 }, - { 0x0439, glyph_afii10075 }, - { 0x043A, glyph_afii10076 }, - { 0x043B, glyph_afii10077 }, - { 0x043C, glyph_afii10078 }, - { 0x043D, glyph_afii10079 }, - { 0x043E, glyph_afii10080 }, - { 0x043F, glyph_afii10081 }, - { 0x0440, glyph_afii10082 }, - { 0x0441, glyph_afii10083 }, - { 0x0442, glyph_afii10084 }, - { 0x0443, glyph_afii10085 }, - { 0x0444, glyph_afii10086 }, - { 0x0445, glyph_afii10087 }, - { 0x0446, glyph_afii10088 }, - { 0x0447, glyph_afii10089 }, - { 0x0448, glyph_afii10090 }, - { 0x0449, glyph_afii10091 }, - { 0x044A, glyph_afii10092 }, - { 0x044B, glyph_afii10093 }, - { 0x044C, glyph_afii10094 }, - { 0x044D, glyph_afii10095 }, - { 0x044E, glyph_afii10096 }, - { 0x044F, glyph_afii10097 }, - { 0x0451, glyph_afii10071 }, - { 0x0452, glyph_afii10099 }, - { 0x0453, glyph_afii10100 }, - { 0x0454, glyph_afii10101 }, - { 0x0455, glyph_afii10102 }, - { 0x0456, glyph_afii10103 }, - { 0x0457, glyph_afii10104 }, - { 0x0458, glyph_afii10105 }, - { 0x0459, glyph_afii10106 }, - { 0x045A, glyph_afii10107 }, - { 0x045B, glyph_afii10108 }, - { 0x045C, glyph_afii10109 }, - { 0x045E, glyph_afii10110 }, - { 0x045F, glyph_afii10193 }, - { 0x0462, glyph_afii10146 }, - { 0x0463, glyph_afii10194 }, - { 0x0472, glyph_afii10147 }, - { 0x0473, glyph_afii10195 }, - { 0x0474, glyph_afii10148 }, - { 0x0475, glyph_afii10196 }, - { 0x0490, glyph_afii10050 }, - { 0x0491, glyph_afii10098 }, - { 0x04D9, glyph_afii10846 }, - { 0x05B0, glyph_afii57799 }, - { 0x05B1, glyph_afii57801 }, - { 0x05B2, glyph_afii57800 }, - { 0x05B3, glyph_afii57802 }, - { 0x05B4, glyph_afii57793 }, - { 0x05B5, glyph_afii57794 }, - { 0x05B6, glyph_afii57795 }, - { 0x05B7, glyph_afii57798 }, - { 0x05B8, glyph_afii57797 }, - { 0x05B9, glyph_afii57806 }, - { 0x05BB, glyph_afii57796 }, - { 0x05BC, glyph_afii57807 }, - { 0x05BD, glyph_afii57839 }, - { 0x05BE, glyph_afii57645 }, - { 0x05BF, glyph_afii57841 }, - { 0x05C0, glyph_afii57842 }, - { 0x05C1, glyph_afii57804 }, - { 0x05C2, glyph_afii57803 }, - { 0x05C3, glyph_afii57658 }, - { 0x05D0, glyph_afii57664 }, - { 0x05D1, glyph_afii57665 }, - { 0x05D2, glyph_afii57666 }, - { 0x05D3, glyph_afii57667 }, - { 0x05D4, glyph_afii57668 }, - { 0x05D5, glyph_afii57669 }, - { 0x05D6, glyph_afii57670 }, - { 0x05D7, glyph_afii57671 }, - { 0x05D8, glyph_afii57672 }, - { 0x05D9, glyph_afii57673 }, - { 0x05DA, glyph_afii57674 }, - { 0x05DB, glyph_afii57675 }, - { 0x05DC, glyph_afii57676 }, - { 0x05DD, glyph_afii57677 }, - { 0x05DE, glyph_afii57678 }, - { 0x05DF, glyph_afii57679 }, - { 0x05E0, glyph_afii57680 }, - { 0x05E1, glyph_afii57681 }, - { 0x05E2, glyph_afii57682 }, - { 0x05E3, glyph_afii57683 }, - { 0x05E4, glyph_afii57684 }, - { 0x05E5, glyph_afii57685 }, - { 0x05E6, glyph_afii57686 }, - { 0x05E7, glyph_afii57687 }, - { 0x05E8, glyph_afii57688 }, - { 0x05E9, glyph_afii57689 }, - { 0x05EA, glyph_afii57690 }, - { 0x05F0, glyph_afii57716 }, - { 0x05F1, glyph_afii57717 }, - { 0x05F2, glyph_afii57718 }, - { 0x060C, glyph_afii57388 }, - { 0x061B, glyph_afii57403 }, - { 0x061F, glyph_afii57407 }, - { 0x0621, glyph_afii57409 }, - { 0x0622, glyph_afii57410 }, - { 0x0623, glyph_afii57411 }, - { 0x0624, glyph_afii57412 }, - { 0x0625, glyph_afii57413 }, - { 0x0626, glyph_afii57414 }, - { 0x0627, glyph_afii57415 }, - { 0x0628, glyph_afii57416 }, - { 0x0629, glyph_afii57417 }, - { 0x062A, glyph_afii57418 }, - { 0x062B, glyph_afii57419 }, - { 0x062C, glyph_afii57420 }, - { 0x062D, glyph_afii57421 }, - { 0x062E, glyph_afii57422 }, - { 0x062F, glyph_afii57423 }, - { 0x0630, glyph_afii57424 }, - { 0x0631, glyph_afii57425 }, - { 0x0632, glyph_afii57426 }, - { 0x0633, glyph_afii57427 }, - { 0x0634, glyph_afii57428 }, - { 0x0635, glyph_afii57429 }, - { 0x0636, glyph_afii57430 }, - { 0x0637, glyph_afii57431 }, - { 0x0638, glyph_afii57432 }, - { 0x0639, glyph_afii57433 }, - { 0x063A, glyph_afii57434 }, - { 0x0640, glyph_afii57440 }, - { 0x0641, glyph_afii57441 }, - { 0x0642, glyph_afii57442 }, - { 0x0643, glyph_afii57443 }, - { 0x0644, glyph_afii57444 }, - { 0x0645, glyph_afii57445 }, - { 0x0646, glyph_afii57446 }, - { 0x0647, glyph_afii57470 }, - { 0x0648, glyph_afii57448 }, - { 0x0649, glyph_afii57449 }, - { 0x064A, glyph_afii57450 }, - { 0x064B, glyph_afii57451 }, - { 0x064C, glyph_afii57452 }, - { 0x064D, glyph_afii57453 }, - { 0x064E, glyph_afii57454 }, - { 0x064F, glyph_afii57455 }, - { 0x0650, glyph_afii57456 }, - { 0x0651, glyph_afii57457 }, - { 0x0652, glyph_afii57458 }, - { 0x0660, glyph_afii57392 }, - { 0x0661, glyph_afii57393 }, - { 0x0662, glyph_afii57394 }, - { 0x0663, glyph_afii57395 }, - { 0x0664, glyph_afii57396 }, - { 0x0665, glyph_afii57397 }, - { 0x0666, glyph_afii57398 }, - { 0x0667, glyph_afii57399 }, - { 0x0668, glyph_afii57400 }, - { 0x0669, glyph_afii57401 }, - { 0x066A, glyph_afii57381 }, - { 0x066D, glyph_afii63167 }, - { 0x0679, glyph_afii57511 }, - { 0x067E, glyph_afii57506 }, - { 0x0686, glyph_afii57507 }, - { 0x0688, glyph_afii57512 }, - { 0x0691, glyph_afii57513 }, - { 0x0698, glyph_afii57508 }, - { 0x06A4, glyph_afii57505 }, - { 0x06AF, glyph_afii57509 }, - { 0x06BA, glyph_afii57514 }, - { 0x06D2, glyph_afii57519 }, - { 0x06D5, glyph_afii57534 }, - { 0x1E80, glyph_Wgrave }, - { 0x1E81, glyph_wgrave }, - { 0x1E82, glyph_Wacute }, - { 0x1E83, glyph_wacute }, - { 0x1E84, glyph_Wdieresis }, - { 0x1E85, glyph_wdieresis }, - { 0x1EF2, glyph_Ygrave }, - { 0x1EF3, glyph_ygrave }, - { 0x200C, glyph_afii61664 }, - { 0x200D, glyph_afii301 }, - { 0x200E, glyph_afii299 }, - { 0x200F, glyph_afii300 }, - { 0x2012, glyph_figuredash }, - { 0x2013, glyph_endash }, - { 0x2014, glyph_emdash }, - { 0x2015, glyph_afii00208 }, - { 0x2017, glyph_underscoredbl }, - { 0x2018, glyph_quoteleft }, - { 0x2019, glyph_quoteright }, - { 0x201A, glyph_quotesinglbase }, - { 0x201B, glyph_quotereversed }, - { 0x201C, glyph_quotedblleft }, - { 0x201D, glyph_quotedblright }, - { 0x201E, glyph_quotedblbase }, - { 0x2020, glyph_dagger }, - { 0x2021, glyph_daggerdbl }, - { 0x2022, glyph_bullet }, - { 0x2024, glyph_onedotenleader }, - { 0x2025, glyph_twodotenleader }, - { 0x2026, glyph_ellipsis }, - { 0x202C, glyph_afii61573 }, - { 0x202D, glyph_afii61574 }, - { 0x202E, glyph_afii61575 }, - { 0x2030, glyph_perthousand }, - { 0x2032, glyph_minute }, - { 0x2033, glyph_second }, - { 0x2039, glyph_guilsinglleft }, - { 0x203A, glyph_guilsinglright }, - { 0x203C, glyph_exclamdbl }, - { 0x2044, glyph_fraction }, - { 0x2070, glyph_zerosuperior }, - { 0x2074, glyph_foursuperior }, - { 0x2075, glyph_fivesuperior }, - { 0x2076, glyph_sixsuperior }, - { 0x2077, glyph_sevensuperior }, - { 0x2078, glyph_eightsuperior }, - { 0x2079, glyph_ninesuperior }, - { 0x207D, glyph_parenleftsuperior }, - { 0x207E, glyph_parenrightsuperior }, - { 0x207F, glyph_nsuperior }, - { 0x2080, glyph_zeroinferior }, - { 0x2081, glyph_oneinferior }, - { 0x2082, glyph_twoinferior }, - { 0x2083, glyph_threeinferior }, - { 0x2084, glyph_fourinferior }, - { 0x2085, glyph_fiveinferior }, - { 0x2086, glyph_sixinferior }, - { 0x2087, glyph_seveninferior }, - { 0x2088, glyph_eightinferior }, - { 0x2089, glyph_nineinferior }, - { 0x208D, glyph_parenleftinferior }, - { 0x208E, glyph_parenrightinferior }, - { 0x20A1, glyph_colonmonetary }, - { 0x20A3, glyph_franc }, - { 0x20A4, glyph_lira }, - { 0x20A7, glyph_peseta }, - { 0x20AA, glyph_afii57636 }, - { 0x20AB, glyph_dong }, - { 0x20AC, glyph_Euro }, - { 0x2105, glyph_afii61248 }, - { 0x2111, glyph_Ifraktur }, - { 0x2113, glyph_afii61289 }, - { 0x2116, glyph_afii61352 }, - { 0x2118, glyph_weierstrass }, - { 0x211C, glyph_Rfraktur }, - { 0x211E, glyph_prescription }, - { 0x2122, glyph_trademark }, - { 0x2126, glyph_Omega }, - { 0x212E, glyph_estimated }, - { 0x2135, glyph_aleph }, - { 0x2153, glyph_onethird }, - { 0x2154, glyph_twothirds }, - { 0x215B, glyph_oneeighth }, - { 0x215C, glyph_threeeighths }, - { 0x215D, glyph_fiveeighths }, - { 0x215E, glyph_seveneighths }, - { 0x2190, glyph_arrowleft }, - { 0x2191, glyph_arrowup }, - { 0x2192, glyph_arrowright }, - { 0x2193, glyph_arrowdown }, - { 0x2194, glyph_arrowboth }, - { 0x2195, glyph_arrowupdn }, - { 0x21A8, glyph_arrowupdnbse }, - { 0x21B5, glyph_carriagereturn }, - { 0x21D0, glyph_arrowdblleft }, - { 0x21D1, glyph_arrowdblup }, - { 0x21D2, glyph_arrowdblright }, - { 0x21D3, glyph_arrowdbldown }, - { 0x21D4, glyph_arrowdblboth }, - { 0x2200, glyph_universal }, - { 0x2202, glyph_partialdiff }, - { 0x2203, glyph_existential }, - { 0x2205, glyph_emptyset }, - { 0x2206, glyph_Delta }, - { 0x2207, glyph_gradient }, - { 0x2208, glyph_element }, - { 0x2209, glyph_notelement }, - { 0x220B, glyph_suchthat }, - { 0x220F, glyph_product }, - { 0x2211, glyph_summation }, - { 0x2212, glyph_minus }, - { 0x2215, glyph_fraction }, - { 0x2217, glyph_asteriskmath }, - { 0x2219, glyph_periodcentered }, - { 0x221A, glyph_radical }, - { 0x221D, glyph_proportional }, - { 0x221E, glyph_infinity }, - { 0x221F, glyph_orthogonal }, - { 0x2220, glyph_angle }, - { 0x2227, glyph_logicaland }, - { 0x2228, glyph_logicalor }, - { 0x2229, glyph_intersection }, - { 0x222A, glyph_union }, - { 0x222B, glyph_integral }, - { 0x2234, glyph_therefore }, - { 0x223C, glyph_similar }, - { 0x2245, glyph_congruent }, - { 0x2248, glyph_approxequal }, - { 0x2260, glyph_notequal }, - { 0x2261, glyph_equivalence }, - { 0x2264, glyph_lessequal }, - { 0x2265, glyph_greaterequal }, - { 0x2282, glyph_propersubset }, - { 0x2283, glyph_propersuperset }, - { 0x2284, glyph_notsubset }, - { 0x2286, glyph_reflexsubset }, - { 0x2287, glyph_reflexsuperset }, - { 0x2295, glyph_circleplus }, - { 0x2297, glyph_circlemultiply }, - { 0x22A5, glyph_perpendicular }, - { 0x22C5, glyph_dotmath }, - { 0x2302, glyph_house }, - { 0x2310, glyph_revlogicalnot }, - { 0x2320, glyph_integraltp }, - { 0x2321, glyph_integralbt }, - { 0x2329, glyph_angleleft }, - { 0x232A, glyph_angleright }, - { 0x2500, glyph_SF100000 }, - { 0x2502, glyph_SF110000 }, - { 0x250C, glyph_SF010000 }, - { 0x2510, glyph_SF030000 }, - { 0x2514, glyph_SF020000 }, - { 0x2518, glyph_SF040000 }, - { 0x251C, glyph_SF080000 }, - { 0x2524, glyph_SF090000 }, - { 0x252C, glyph_SF060000 }, - { 0x2534, glyph_SF070000 }, - { 0x253C, glyph_SF050000 }, - { 0x2550, glyph_SF430000 }, - { 0x2551, glyph_SF240000 }, - { 0x2552, glyph_SF510000 }, - { 0x2553, glyph_SF520000 }, - { 0x2554, glyph_SF390000 }, - { 0x2555, glyph_SF220000 }, - { 0x2556, glyph_SF210000 }, - { 0x2557, glyph_SF250000 }, - { 0x2558, glyph_SF500000 }, - { 0x2559, glyph_SF490000 }, - { 0x255A, glyph_SF380000 }, - { 0x255B, glyph_SF280000 }, - { 0x255C, glyph_SF270000 }, - { 0x255D, glyph_SF260000 }, - { 0x255E, glyph_SF360000 }, - { 0x255F, glyph_SF370000 }, - { 0x2560, glyph_SF420000 }, - { 0x2561, glyph_SF190000 }, - { 0x2562, glyph_SF200000 }, - { 0x2563, glyph_SF230000 }, - { 0x2564, glyph_SF470000 }, - { 0x2565, glyph_SF480000 }, - { 0x2566, glyph_SF410000 }, - { 0x2567, glyph_SF450000 }, - { 0x2568, glyph_SF460000 }, - { 0x2569, glyph_SF400000 }, - { 0x256A, glyph_SF540000 }, - { 0x256B, glyph_SF530000 }, - { 0x256C, glyph_SF440000 }, - { 0x2580, glyph_upblock }, - { 0x2584, glyph_dnblock }, - { 0x2588, glyph_block }, - { 0x258C, glyph_lfblock }, - { 0x2590, glyph_rtblock }, - { 0x2591, glyph_ltshade }, - { 0x2592, glyph_shade }, - { 0x2593, glyph_dkshade }, - { 0x25A0, glyph_filledbox }, - { 0x25A1, glyph_H22073 }, - { 0x25AA, glyph_H18543 }, - { 0x25AB, glyph_H18551 }, - { 0x25AC, glyph_filledrect }, - { 0x25B2, glyph_triagup }, - { 0x25BA, glyph_triagrt }, - { 0x25BC, glyph_triagdn }, - { 0x25C4, glyph_triaglf }, - { 0x25CA, glyph_lozenge }, - { 0x25CB, glyph_circle }, - { 0x25CF, glyph_H18533 }, - { 0x25D8, glyph_invbullet }, - { 0x25D9, glyph_invcircle }, - { 0x25E6, glyph_openbullet }, - { 0x263A, glyph_smileface }, - { 0x263B, glyph_invsmileface }, - { 0x263C, glyph_sun }, - { 0x2640, glyph_female }, - { 0x2642, glyph_male }, - { 0x2660, glyph_spade }, - { 0x2663, glyph_club }, - { 0x2665, glyph_heart }, - { 0x2666, glyph_diamond }, - { 0x266A, glyph_musicalnote }, - { 0x266B, glyph_musicalnotedbl }, - { 0xF6BE, glyph_dotlessj }, - { 0xF6BF, glyph_LL }, - { 0xF6C0, glyph_ll }, - { 0xF6C1, glyph_Scedilla }, - { 0xF6C2, glyph_scedilla }, - { 0xF6C3, glyph_commaaccent }, - { 0xF6C4, glyph_afii10063 }, - { 0xF6C5, glyph_afii10064 }, - { 0xF6C6, glyph_afii10192 }, - { 0xF6C7, glyph_afii10831 }, - { 0xF6C8, glyph_afii10832 }, - { 0xF6C9, glyph_Acute }, - { 0xF6CA, glyph_Caron }, - { 0xF6CB, glyph_Dieresis }, - { 0xF6CC, glyph_DieresisAcute }, - { 0xF6CD, glyph_DieresisGrave }, - { 0xF6CE, glyph_Grave }, - { 0xF6CF, glyph_Hungarumlaut }, - { 0xF6D0, glyph_Macron }, - { 0xF6D1, glyph_cyrBreve }, - { 0xF6D2, glyph_cyrFlex }, - { 0xF6D3, glyph_dblGrave }, - { 0xF6D4, glyph_cyrbreve }, - { 0xF6D5, glyph_cyrflex }, - { 0xF6D6, glyph_dblgrave }, - { 0xF6D7, glyph_dieresisacute }, - { 0xF6D8, glyph_dieresisgrave }, - { 0xF6D9, glyph_copyrightserif }, - { 0xF6DA, glyph_registerserif }, - { 0xF6DB, glyph_trademarkserif }, - { 0xF6DC, glyph_onefitted }, - { 0xF6DD, glyph_rupiah }, - { 0xF6DE, glyph_threequartersemdash }, - { 0xF6DF, glyph_centinferior }, - { 0xF6E0, glyph_centsuperior }, - { 0xF6E1, glyph_commainferior }, - { 0xF6E2, glyph_commasuperior }, - { 0xF6E3, glyph_dollarinferior }, - { 0xF6E4, glyph_dollarsuperior }, - { 0xF6E5, glyph_hypheninferior }, - { 0xF6E6, glyph_hyphensuperior }, - { 0xF6E7, glyph_periodinferior }, - { 0xF6E8, glyph_periodsuperior }, - { 0xF6E9, glyph_asuperior }, - { 0xF6EA, glyph_bsuperior }, - { 0xF6EB, glyph_dsuperior }, - { 0xF6EC, glyph_esuperior }, - { 0xF6ED, glyph_isuperior }, - { 0xF6EE, glyph_lsuperior }, - { 0xF6EF, glyph_msuperior }, - { 0xF6F0, glyph_osuperior }, - { 0xF6F1, glyph_rsuperior }, - { 0xF6F2, glyph_ssuperior }, - { 0xF6F3, glyph_tsuperior }, - { 0xF6F4, glyph_Brevesmall }, - { 0xF6F5, glyph_Caronsmall }, - { 0xF6F6, glyph_Circumflexsmall }, - { 0xF6F7, glyph_Dotaccentsmall }, - { 0xF6F8, glyph_Hungarumlautsmall }, - { 0xF6F9, glyph_Lslashsmall }, - { 0xF6FA, glyph_OEsmall }, - { 0xF6FB, glyph_Ogoneksmall }, - { 0xF6FC, glyph_Ringsmall }, - { 0xF6FD, glyph_Scaronsmall }, - { 0xF6FE, glyph_Tildesmall }, - { 0xF6FF, glyph_Zcaronsmall }, - { 0xF721, glyph_exclamsmall }, - { 0xF724, glyph_dollaroldstyle }, - { 0xF726, glyph_ampersandsmall }, - { 0xF730, glyph_zerooldstyle }, - { 0xF731, glyph_oneoldstyle }, - { 0xF732, glyph_twooldstyle }, - { 0xF733, glyph_threeoldstyle }, - { 0xF734, glyph_fouroldstyle }, - { 0xF735, glyph_fiveoldstyle }, - { 0xF736, glyph_sixoldstyle }, - { 0xF737, glyph_sevenoldstyle }, - { 0xF738, glyph_eightoldstyle }, - { 0xF739, glyph_nineoldstyle }, - { 0xF73F, glyph_questionsmall }, - { 0xF760, glyph_Gravesmall }, - { 0xF761, glyph_Asmall }, - { 0xF762, glyph_Bsmall }, - { 0xF763, glyph_Csmall }, - { 0xF764, glyph_Dsmall }, - { 0xF765, glyph_Esmall }, - { 0xF766, glyph_Fsmall }, - { 0xF767, glyph_Gsmall }, - { 0xF768, glyph_Hsmall }, - { 0xF769, glyph_Ismall }, - { 0xF76A, glyph_Jsmall }, - { 0xF76B, glyph_Ksmall }, - { 0xF76C, glyph_Lsmall }, - { 0xF76D, glyph_Msmall }, - { 0xF76E, glyph_Nsmall }, - { 0xF76F, glyph_Osmall }, - { 0xF770, glyph_Psmall }, - { 0xF771, glyph_Qsmall }, - { 0xF772, glyph_Rsmall }, - { 0xF773, glyph_Ssmall }, - { 0xF774, glyph_Tsmall }, - { 0xF775, glyph_Usmall }, - { 0xF776, glyph_Vsmall }, - { 0xF777, glyph_Wsmall }, - { 0xF778, glyph_Xsmall }, - { 0xF779, glyph_Ysmall }, - { 0xF77A, glyph_Zsmall }, - { 0xF7A1, glyph_exclamdownsmall }, - { 0xF7A2, glyph_centoldstyle }, - { 0xF7A8, glyph_Dieresissmall }, - { 0xF7AF, glyph_Macronsmall }, - { 0xF7B4, glyph_Acutesmall }, - { 0xF7B8, glyph_Cedillasmall }, - { 0xF7BF, glyph_questiondownsmall }, - { 0xF7E0, glyph_Agravesmall }, - { 0xF7E1, glyph_Aacutesmall }, - { 0xF7E2, glyph_Acircumflexsmall }, - { 0xF7E3, glyph_Atildesmall }, - { 0xF7E4, glyph_Adieresissmall }, - { 0xF7E5, glyph_Aringsmall }, - { 0xF7E6, glyph_AEsmall }, - { 0xF7E7, glyph_Ccedillasmall }, - { 0xF7E8, glyph_Egravesmall }, - { 0xF7E9, glyph_Eacutesmall }, - { 0xF7EA, glyph_Ecircumflexsmall }, - { 0xF7EB, glyph_Edieresissmall }, - { 0xF7EC, glyph_Igravesmall }, - { 0xF7ED, glyph_Iacutesmall }, - { 0xF7EE, glyph_Icircumflexsmall }, - { 0xF7EF, glyph_Idieresissmall }, - { 0xF7F0, glyph_Ethsmall }, - { 0xF7F1, glyph_Ntildesmall }, - { 0xF7F2, glyph_Ogravesmall }, - { 0xF7F3, glyph_Oacutesmall }, - { 0xF7F4, glyph_Ocircumflexsmall }, - { 0xF7F5, glyph_Otildesmall }, - { 0xF7F6, glyph_Odieresissmall }, - { 0xF7F8, glyph_Oslashsmall }, - { 0xF7F9, glyph_Ugravesmall }, - { 0xF7FA, glyph_Uacutesmall }, - { 0xF7FB, glyph_Ucircumflexsmall }, - { 0xF7FC, glyph_Udieresissmall }, - { 0xF7FD, glyph_Yacutesmall }, - { 0xF7FE, glyph_Thornsmall }, - { 0xF7FF, glyph_Ydieresissmall }, - { 0xF8E5, glyph_radicalex }, - { 0xF8E6, glyph_arrowvertex }, - { 0xF8E7, glyph_arrowhorizex }, - { 0xF8E8, glyph_registersans }, - { 0xF8E9, glyph_copyrightsans }, - { 0xF8EA, glyph_trademarksans }, - { 0xF8EB, glyph_parenlefttp }, - { 0xF8EC, glyph_parenleftex }, - { 0xF8ED, glyph_parenleftbt }, - { 0xF8EE, glyph_bracketlefttp }, - { 0xF8EF, glyph_bracketleftex }, - { 0xF8F0, glyph_bracketleftbt }, - { 0xF8F1, glyph_bracelefttp }, - { 0xF8F2, glyph_braceleftmid }, - { 0xF8F3, glyph_braceleftbt }, - { 0xF8F4, glyph_braceex }, - { 0xF8F5, glyph_integralex }, - { 0xF8F6, glyph_parenrighttp }, - { 0xF8F7, glyph_parenrightex }, - { 0xF8F8, glyph_parenrightbt }, - { 0xF8F9, glyph_bracketrighttp }, - { 0xF8FA, glyph_bracketrightex }, - { 0xF8FB, glyph_bracketrightbt }, - { 0xF8FC, glyph_bracerighttp }, - { 0xF8FD, glyph_bracerightmid }, - { 0xF8FE, glyph_bracerightbt }, - { 0xFB00, glyph_ff }, - { 0xFB01, glyph_fi }, - { 0xFB02, glyph_fl }, - { 0xFB03, glyph_ffi }, - { 0xFB04, glyph_ffl }, - { 0xFB1F, glyph_afii57705 }, - { 0xFB2A, glyph_afii57694 }, - { 0xFB2B, glyph_afii57695 }, - { 0xFB35, glyph_afii57723 }, - { 0xFB4B, glyph_afii57700 }, -}; /* tab_uni2agl */ - - - - -/* This is the list of all character names of the Adobe - * standard Latin character set and the set of named characters - * in the Symbol font, documented in Appendix D of PDF Reference. - */ - -static const char *pc_standard_latin_charset[] = -{ -#ifndef PDFLIB_EBCDIC - glyph_A, - glyph_AE, - glyph_Aacute, - glyph_Acircumflex, - glyph_Adieresis, - glyph_Agrave, - glyph_Alpha, - glyph_Aring, - glyph_Atilde, - glyph_B, - glyph_Beta, - glyph_C, - glyph_Ccedilla, - glyph_Chi, - glyph_D, - glyph_Delta, - glyph_E, - glyph_Eacute, - glyph_Ecircumflex, - glyph_Edieresis, - glyph_Egrave, - glyph_Epsilon, - glyph_Eta, - glyph_Eth, - glyph_Euro, - glyph_F, - glyph_G, - glyph_Gamma, - glyph_H, - glyph_I, - glyph_Iacute, - glyph_Icircumflex, - glyph_Idieresis, - glyph_Ifraktur, - glyph_Igrave, - glyph_Iota, - glyph_J, - glyph_K, - glyph_Kappa, - glyph_L, - glyph_Lambda, - glyph_Lslash, - glyph_M, - glyph_Mu, - glyph_N, - glyph_Ntilde, - glyph_Nu, - glyph_O, - glyph_OE, - glyph_Oacute, - glyph_Ocircumflex, - glyph_Odieresis, - glyph_Ograve, - glyph_Omega, - glyph_Omicron, - glyph_Oslash, - glyph_Otilde, - glyph_P, - glyph_Phi, - glyph_Pi, - glyph_Psi, - glyph_Q, - glyph_R, - glyph_Rfraktur, - glyph_Rho, - glyph_S, - glyph_Scaron, - glyph_Sigma, - glyph_T, - glyph_Tau, - glyph_Theta, - glyph_Thorn, - glyph_U, - glyph_Uacute, - glyph_Ucircumflex, - glyph_Udieresis, - glyph_Ugrave, - glyph_Upsilon, - glyph_Upsilon1, - glyph_V, - glyph_W, - glyph_X, - glyph_Xi, - glyph_Y, - glyph_Yacute, - glyph_Ydieresis, - glyph_Z, - glyph_Zcaron, - glyph_Zeta, - glyph_a, - glyph_aacute, - glyph_acircumflex, - glyph_acute, - glyph_adieresis, - glyph_ae, - glyph_agrave, - glyph_aleph, - glyph_alpha, - glyph_ampersand, - glyph_angle, - glyph_angleleft, - glyph_angleright, - glyph_approxequal, - glyph_aring, - glyph_arrowboth, - glyph_arrowdblboth, - glyph_arrowdbldown, - glyph_arrowdblleft, - glyph_arrowdblright, - glyph_arrowdblup, - glyph_arrowdown, - glyph_arrowhorizex, - glyph_arrowleft, - glyph_arrowright, - glyph_arrowup, - glyph_arrowvertex, - glyph_asciicircum, - glyph_asciitilde, - glyph_asterisk, - glyph_asteriskmath, - glyph_at, - glyph_atilde, - glyph_b, - glyph_backslash, - glyph_bar, - glyph_beta, - glyph_braceex, - glyph_braceleft, - glyph_braceleftbt, - glyph_braceleftmid, - glyph_bracelefttp, - glyph_braceright, - glyph_bracerightbt, - glyph_bracerightmid, - glyph_bracerighttp, - glyph_bracketleft, - glyph_bracketleftbt, - glyph_bracketleftex, - glyph_bracketlefttp, - glyph_bracketright, - glyph_bracketrightbt, - glyph_bracketrightex, - glyph_bracketrighttp, - glyph_breve, - glyph_brokenbar, - glyph_bullet, - glyph_c, - glyph_caron, - glyph_carriagereturn, - glyph_ccedilla, - glyph_cedilla, - glyph_cent, - glyph_chi, - glyph_circlemultiply, - glyph_circleplus, - glyph_circumflex, - glyph_club, - glyph_colon, - glyph_comma, - glyph_congruent, - glyph_copyright, - glyph_copyrightsans, - glyph_copyrightserif, - glyph_currency, - glyph_d, - glyph_dagger, - glyph_daggerdbl, - glyph_degree, - glyph_delta, - glyph_diamond, - glyph_dieresis, - glyph_divide, - glyph_dollar, - glyph_dotaccent, - glyph_dotlessi, - glyph_dotmath, - glyph_e, - glyph_eacute, - glyph_ecircumflex, - glyph_edieresis, - glyph_egrave, - glyph_eight, - glyph_element, - glyph_ellipsis, - glyph_emdash, - glyph_emptyset, - glyph_endash, - glyph_epsilon, - glyph_equal, - glyph_equivalence, - glyph_eta, - glyph_eth, - glyph_exclam, - glyph_exclamdown, - glyph_existential, - glyph_f, - glyph_fi, - glyph_five, - glyph_fl, - glyph_florin, - glyph_four, - glyph_fraction, - glyph_g, - glyph_gamma, - glyph_germandbls, - glyph_gradient, - glyph_grave, - glyph_greater, - glyph_greaterequal, - glyph_guillemotleft, - glyph_guillemotright, - glyph_guilsinglleft, - glyph_guilsinglright, - glyph_h, - glyph_heart, - glyph_hungarumlaut, - glyph_hyphen, - glyph_i, - glyph_iacute, - glyph_icircumflex, - glyph_idieresis, - glyph_igrave, - glyph_infinity, - glyph_integral, - glyph_integralbt, - glyph_integralex, - glyph_integraltp, - glyph_intersection, - glyph_iota, - glyph_j, - glyph_k, - glyph_kappa, - glyph_l, - glyph_lambda, - glyph_less, - glyph_lessequal, - glyph_logicaland, - glyph_logicalnot, - glyph_logicalor, - glyph_lozenge, - glyph_lslash, - glyph_m, - glyph_macron, - glyph_minus, - glyph_minute, - glyph_mu, - glyph_multiply, - glyph_n, - glyph_nine, - glyph_notelement, - glyph_notequal, - glyph_notsubset, - glyph_ntilde, - glyph_nu, - glyph_numbersign, - glyph_o, - glyph_oacute, - glyph_ocircumflex, - glyph_odieresis, - glyph_oe, - glyph_ogonek, - glyph_ograve, - glyph_omega, - glyph_omega1, - glyph_omicron, - glyph_one, - glyph_onehalf, - glyph_onequarter, - glyph_onesuperior, - glyph_ordfeminine, - glyph_ordmasculine, - glyph_oslash, - glyph_otilde, - glyph_p, - glyph_paragraph, - glyph_parenleft, - glyph_parenleftbt, - glyph_parenleftex, - glyph_parenlefttp, - glyph_parenright, - glyph_parenrightbt, - glyph_parenrightex, - glyph_parenrighttp, - glyph_partialdiff, - glyph_percent, - glyph_period, - glyph_periodcentered, - glyph_perpendicular, - glyph_perthousand, - glyph_phi, - glyph_phi1, - glyph_pi, - glyph_plus, - glyph_plusminus, - glyph_product, - glyph_propersubset, - glyph_propersuperset, - glyph_proportional, - glyph_psi, - glyph_q, - glyph_question, - glyph_questiondown, - glyph_quotedbl, - glyph_quotedblbase, - glyph_quotedblleft, - glyph_quotedblright, - glyph_quoteleft, - glyph_quoteright, - glyph_quotesinglbase, - glyph_quotesingle, - glyph_r, - glyph_radical, - glyph_radicalex, - glyph_reflexsubset, - glyph_reflexsuperset, - glyph_registered, - glyph_registersans, - glyph_registerserif, - glyph_rho, - glyph_ring, - glyph_s, - glyph_scaron, - glyph_second, - glyph_section, - glyph_semicolon, - glyph_seven, - glyph_sigma, - glyph_sigma1, - glyph_similar, - glyph_six, - glyph_slash, - glyph_space, - glyph_spade, - glyph_sterling, - glyph_suchthat, - glyph_summation, - glyph_t, - glyph_tau, - glyph_therefore, - glyph_theta, - glyph_theta1, - glyph_thorn, - glyph_three, - glyph_threequarters, - glyph_threesuperior, - glyph_tilde, - glyph_trademark, - glyph_trademarksans, - glyph_trademarkserif, - glyph_two, - glyph_twosuperior, - glyph_u, - glyph_uacute, - glyph_ucircumflex, - glyph_udieresis, - glyph_ugrave, - glyph_underscore, - glyph_union, - glyph_universal, - glyph_upsilon, - glyph_v, - glyph_w, - glyph_weierstrass, - glyph_x, - glyph_xi, - glyph_y, - glyph_yacute, - glyph_ydieresis, - glyph_yen, - glyph_z, - glyph_zcaron, - glyph_zero, - glyph_zeta, -#else -#endif -}; - - -#endif /* PC_CHARTABS_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_config.h b/src/libs/pdflib/libs/pdcore/pc_config.h deleted file mode 100644 index 5c10a2365f..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_config.h +++ /dev/null @@ -1,289 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_config.h 29803 2009-03-30 14:48:57Z bonefish $ - * - * PDFlib portability and configuration definitions - * - */ - -#ifndef PC_CONFIG_H -#define PC_CONFIG_H - -/* ------------------------ feature configuration ------------------- */ - -/* zlib compression support */ -#define HAVE_LIBZ - -/* ---------------------------- platform definitions ------------------------ */ - -/* #undef this if your platform doesn't support environment variables */ -#define HAVE_ENVVARS - -/* Compilers which are not strictly ANSI conforming can set PDF_VOLATILE - * to an empty value. - */ -#ifndef PDF_VOLATILE -#define PDF_VOLATILE volatile -#endif - -/* byte order */ -#undef PDC_ISBIGENDIAN -#ifdef WORDS_BIGENDIAN -#define PDC_ISBIGENDIAN 1 -#else -#define PDC_ISBIGENDIAN 0 -#endif - -/* ---------------------------------- WIN32 -------------------------------- */ - -/* try to identify Windows compilers */ - -#if (defined _WIN32 || defined __WATCOMC__ || defined __BORLANDC__ || \ - (defined(__MWERKS__) && defined(__INTEL__))) && !defined WIN32 -#define WIN32 -#endif /* && !defined WIN32 */ - -#ifdef WIN32 -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" - -#undef PDC_PATHSEP -#define PDC_PATHSEP "\\" - -#if defined(_WIN32_WCE) && (_WIN32_WCE >= 300) -#define PDF_PLATFORM "Windows CE" -#define WINCE -#undef HAVE_SETLOCALE -#undef HAVE_ENVVARS -#else -#if defined(WIN64) -#define PDF_PLATFORM "Win64" -#else -#define PDF_PLATFORM "Win32" -#endif -#endif - -#endif /* WIN32 */ - -/* --------------------------------- Cygnus -------------------------------- */ - -#ifdef __CYGWIN__ -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" -#ifdef DLL_EXPORT - #define PDFLIB_EXPORTS -#endif - -#endif /* __CYGWIN__ */ - -/* ---------------------------------- DJGPP -------------------------------- */ - -#ifdef __DJGPP__ -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" -#define PDF_PLATFORM "Win32/DJGPP" -#endif /* __DJGPP__ */ - -/* ----------------------------------- OS/2 -------------------------------- */ - -/* - * Try to identify OS/2 compilers. - */ - -#if (defined __OS2__ || defined __EMX__) && !defined OS2 -#define OS2 -#endif - -#ifdef OS2 -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" -#define PDF_PLATFORM "OS/2" -#endif /* OS2 */ - -/* --------------------------------- Mac OS X ------------------------------- */ - -/* try to identify the Mac OS X command line compiler */ - -#if defined(__ppc__) && defined(__APPLE__) - -#define MACOSX - -/* - * By default we always build a carbonized version of the library, - * but allow non-Carbon builds to be triggered by setting the - * PDF_TARGET_API_MAC_OS8 symbol externally. - */ - -#ifndef PDF_TARGET_API_MAC_OS8 -#define PDF_TARGET_API_MAC_CARBON -#endif - -#if defined(PDF_TARGET_API_MAC_CARBON) && !defined(TARGET_API_MAC_CARBON) -#define TARGET_API_MAC_CARBON 1 -#endif - -/* Mac OS X 10.2 (Jaguar) defines this, but we use it for Mac OS 9 below */ -#undef MAC - -#endif /* Mac OS X */ - -/* --------------------------------- Mac OS 9 ------------------------------- */ - -/* try to identify Mac OS 9 compilers */ - -#if (defined macintosh || defined __POWERPC__ || defined __CFM68K__) && \ - !defined MAC && !defined MACOSX && !defined(__BEOS__) && !defined(__HAIKU__) -#define MAC -#endif - -#ifdef MAC -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" -#define PDC_PATHSEP ":" - -#undef HAVE_ENVVARS - -#define PDF_PLATFORM "Mac OS" -#endif /* MAC */ - -/* ----------------------------------- BeOS --------------------------------- */ - -#if defined(__BEOS__) || defined(__HAIKU__) -#define PDF_PLATFORM "BeOS" - -#ifdef __POWERPC__ -#define WORDS_BIGENDIAN -#undef PDC_ISBIGENDIAN -#define PDC_ISBIGENDIAN 1 -#endif /* __POWERPC__ */ - -#endif /* __BEOS__ || __HAIKU__ */ - -/* --------------------------------- AS/400 --------------------------------- */ - -/* try to identify the AS/400 compiler */ - -#if defined __ILEC400__ && !defined AS400 -#define AS400 -#endif - -#ifdef AS400 - -#pragma comment(copyright, \ - "(C) PDFlib GmbH, Muenchen, Germany (www.pdflib.com)") - -#define READTMODE "rb" -#define READBMODE "rb" -#define WRITEMODE "wb" -#define APPENDMODE "ab" - -#define PDF_PLATFORM "iSeries" - -#define WORDS_BIGENDIAN -#undef PDC_ISBIGENDIAN -#define PDC_ISBIGENDIAN 1 - -#endif /* AS400 */ - -/* --------------------- S/390 with Unix System Services -------------------- */ - -#ifdef OS390 - -#define WRITEMODE "wb" -#define APPENDMODE "ab" - -#endif /* OS390 */ - -/* -------------------------------- S/390 with MVS -------------------------- */ - -/* try to identify MVS (__MVS__ is #defined on USS and MVS!) - * I370 is used by SAS C - */ - -#if !defined(OS390) && (defined __MVS__ || defined I370) && !defined MVS -#define MVS -#endif - -#ifdef MVS - -#if defined(MVS) && defined(I370) -#define READBMODE "rb" -#define PDC_FILEQUOT "" -#else -#define READBMODE "rb,byteseek" -#define PDC_FILEQUOT "'" -#endif -#define WRITEMODE "wb" -#define APPENDMODE "ab,recfm=v" - -#undef PDC_PATHSEP -#define PDC_PATHSEP "(" - -#undef PDC_PATHTERM -#define PDC_PATHTERM ")" - -#define PDF_PLATFORM "zSeries MVS" -#define PDF_OS390_MVS_RESOURCE - -#define WORDS_BIGENDIAN -#undef PDC_ISBIGENDIAN -#define PDC_ISBIGENDIAN 1 - -#endif /* MVS */ - -/* ------------------------------------ VMS --------------------------------- */ - -/* No special handling required */ - -#ifdef VMS -#define PDF_PLATFORM "VMS" -#endif /* VMS */ - -/* --------------------------------- Defaults ------------------------------- */ - -#ifndef READTMODE -#define READTMODE "r" -#endif /* !READTMODE */ - -#ifndef READBMODE -#define READBMODE "rb" -#endif /* !READBMODE */ - -#ifndef WRITEMODE -#define WRITEMODE "w" -#endif /* !WRITEMODE */ - -#ifndef APPENDMODE -#define APPENDMODE "a" -#endif /* !APPENDMODE */ - -#ifndef PDC_PATHSEP -#define PDC_PATHSEP "/" -#endif /* !PDC_PATHSEP */ - -#ifdef _DEBUG -#define DEBUG -#endif /* _DEBUG */ - -#define PDC_FLOAT_MAX ((double) 1e+37) -#define PDC_FLOAT_MIN ((double) -1e+37) -#define PDC_FLOAT_PREC ((double) 1e-6) - -#define PDC_OFFSET(type, field) ((unsigned int) &(((type *)NULL)->field)) - -#endif /* PC_CONFIG_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_core.c b/src/libs/pdflib/libs/pdcore/pc_core.c deleted file mode 100644 index 1d2428f5a3..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_core.c +++ /dev/null @@ -1,1077 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_core.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib core services - * - */ - -#ifndef WINCE -#include -#else -#include -#endif - -#include "pc_util.h" - -#define PDF_NonfatalError 11 -#define PDF_UnknownError 12 - - -/* TODO: how to make this dynamic? -** exception during pdc_core_init(): -** - out of memory in pdc_sb_new() -** exception during exception: -** - out of memory in pdc_sb_vprintf() -** - format error in pdc_sb_vprintf() -*/ -#define PDC_ERRPARM_SIZE 2048 -#define PDC_ERRBUF_SIZE (5 * PDC_ERRPARM_SIZE) -#define PDC_XSTACK_INISIZE 10 - -#define N_ERRTABS (PDC_ET_LAST / 1000) - -/* exception handling frame. -*/ -typedef struct -{ - pdc_jmpbuf jbuf; - /* we could anchor a destructor list here. */ -} pdc_xframe; - -typedef struct -{ - pdc_error_info * ei; - int n_entries; -} error_table; - - -/* ------------------------ the core core structure ---------------------- */ - -struct pdc_core_s { - /* ------------ try/catch ------------ */ - pdc_xframe * x_stack; - int x_ssize; - int x_sp; /* exception stack pointer */ - - /* ------------ error handling ------------ */ - pdc_bool warnings_enabled; - pdc_bool in_error; - char errbuf[PDC_ERRBUF_SIZE]; - char errparms[4][PDC_ERRPARM_SIZE]; - int epcount; - int errnum; - pdc_bool x_thrown; /* exception thrown and not caught */ - const char * apiname; - pdc_error_fp errorhandler; /* client error handler */ - void * opaque; /* client specific, opaque data */ - - error_table err_tables[N_ERRTABS]; - - /* ------------------ tracing ---------------- */ - pdc_bool trace; /* trace feature enabled? */ - char * tracefilename; /* name of the trace file */ - int floatdigits; /* floating point output precision */ - - /* ------------ memory management ------------ */ - pdc_alloc_fp allocproc; - pdc_realloc_fp reallocproc; - pdc_free_fp freeproc; -}; - - - -/* ----------- default memory management & error handling ----------- */ - -static void * -default_malloc(void *opaque, size_t size, const char *caller) -{ - (void) opaque; - (void) caller; - - return malloc(size); -} - -static void * -default_realloc(void *opaque, void *mem, size_t size, const char *caller) -{ - (void) opaque; - (void) caller; - - return realloc(mem, size); -} - -static void -default_free(void *opaque, void *mem) -{ - (void) opaque; - - free(mem); -} - -static void -default_errorhandler(void *opaque, int errnum, const char *msg) -{ - (void) opaque; - - if (errnum == PDF_NonfatalError) - { - fprintf(stderr, "PDFlib warning (ignored): %s\n", msg); - } - else - { - fprintf(stderr, "PDFlib exception (fatal): %s\n", msg); - exit(99); - } -} - -pdc_bool -pdc_enter_api(pdc_core *pdc, const char *apiname) -{ - if (pdc->in_error) - return pdc_false; - - pdc->errnum = 0; - pdc->apiname = apiname; - return pdc_true; -} - -void -pdc_set_warnings(pdc_core *pdc, pdc_bool on) -{ - pdc->warnings_enabled = on; -} - -pdc_bool -pdc_in_error(pdc_core *pdc) -{ - return pdc->in_error; -} - - -/* --------------------- error table management --------------------- */ - -static pdc_error_info core_errors[] = -{ -#define pdc_genInfo 1 -#include "pc_generr.h" -}; - -#define N_CORE_ERRORS (sizeof core_errors / sizeof (pdc_error_info)) - - -static void -pdc_panic(pdc_core *pdc, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - vsprintf(pdc->errbuf, fmt, ap); - va_end(ap); - - pdc->errnum = PDF_UnknownError; - (*pdc->errorhandler)(pdc->opaque, pdc->errnum, pdc->errbuf); -} /* pdc_panic */ - - -static void -check_parms(pdc_core *pdc, pdc_error_info *ei) -{ - const char *msg = ei->errmsg; - const char *dollar; - - while ((dollar = strchr(msg, '$')) != (char *) 0) - { - if (isdigit(dollar[1])) - { - int n = dollar[1] - '0'; - - if (ei->nparms < n || n < 1) - pdc_panic(pdc, "illegal parameter '$%d' in error message %d", - n, ei->errnum); - } - else if (dollar[1] != '$') - { - pdc_panic(pdc, - "illegal '$' in error message %d", ei->errnum); - } - - msg = dollar + 1; - } -} /* check_parms */ - - -void -pdc_register_errtab(pdc_core *pdc, int et, pdc_error_info *ei, int n_entries) -{ - int i; - int n = (et / 1000) - 1; - - if (n < 0 || N_ERRTABS <= n || et % 1000 != 0) - pdc_panic(pdc, "tried to register unknown error table %d", et); - - /* ignore multiple registrations of the same table. - */ - if (pdc->err_tables[n].ei != (pdc_error_info *) 0) - return; - - check_parms(pdc, &ei[0]); - - for (i = 1; i < n_entries; ++i) - { - if (ei[i].errnum <= ei[i-1].errnum) - { - pdc_panic(pdc, - "duplicate or misplaced error number %d", ei[i].errnum); - } - - check_parms(pdc, &ei[i]); - } - - pdc->err_tables[n].ei = ei; - pdc->err_tables[n].n_entries = n_entries; -} /* pdc_register_errtab */ - - -/* pdc_init_core() never throws exceptions. -** it returns NULL if there's not enough memory. -*/ -pdc_core * -pdc_init_core( - pdc_error_fp errorhandler, - pdc_alloc_fp allocproc, - pdc_realloc_fp reallocproc, - pdc_free_fp freeproc, - void *opaque) -{ - static const char fn[] = "pdc_init_core"; - - pdc_core *pdc; - int i; - - /* if allocproc is NULL, we use pdc's default memory handling. - */ - if (allocproc == (pdc_alloc_fp) 0) - { - allocproc = default_malloc; - reallocproc = default_realloc; - freeproc = default_free; - } - - if (errorhandler == (pdc_error_fp) 0) - errorhandler = default_errorhandler; - - pdc = (pdc_core *) (*allocproc)(opaque, sizeof (pdc_core), fn); - - if (pdc == (pdc_core *) 0) - return (pdc_core *) 0; - - pdc->errorhandler = errorhandler; - pdc->allocproc = allocproc; - pdc->reallocproc = reallocproc; - pdc->freeproc = freeproc; - pdc->opaque = opaque; - - pdc->trace = pdc_false; - pdc->tracefilename = NULL; - pdc->floatdigits = 4; - - /* initialize error & exception handling. - */ - pdc->warnings_enabled = pdc_true; - pdc->in_error = pdc_false; - pdc->x_thrown = pdc_false; - pdc->epcount = 0; - pdc->errnum = 0; - pdc->apiname = ""; - pdc->x_sp = -1; - pdc->x_ssize = PDC_XSTACK_INISIZE; - pdc->x_stack = (pdc_xframe *) - (*allocproc)(opaque, pdc->x_ssize * sizeof (pdc_xframe), fn); - - if (pdc->x_stack == (pdc_xframe *) 0) - { - (*freeproc)(opaque, pdc); - return (pdc_core *) 0; - } - - /* initialize error tables. - */ - for (i = 0; i < N_ERRTABS; ++i) - pdc->err_tables[i].ei = (pdc_error_info *) 0; - - pdc_register_errtab(pdc, PDC_ET_CORE, core_errors, N_CORE_ERRORS); - - return pdc; -} - -void -pdc_delete_core(pdc_core *pdc) -{ - int i; - - if (pdc->tracefilename) - pdc_free(pdc, pdc->tracefilename); - - pdc_free(pdc, pdc->x_stack); - - - pdc_free(pdc, pdc); -} - -/* --------------------------- memory management --------------------------- */ - -void * -pdc_malloc(pdc_core *pdc, size_t size, const char *caller) -{ - void *ret; - - /* the behavior of malloc(0) is undefined in ANSI C, and may - * result in a NULL pointer return value which makes PDFlib bail out. - */ - if (size == (size_t) 0 || (long) size < 0L) { - size = (size_t) 1; - pdc_warning(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0); - } - - if ((ret = (*pdc->allocproc)(pdc->opaque, size, caller)) == (void *) 0) - { - pdc_error(pdc, PDC_E_MEM_OUT, caller, 0, 0, 0); - } - - return ret; -} - -/* We cook up our own calloc routine, using the caller-supplied - * malloc and memset. - */ -void * -pdc_calloc(pdc_core *pdc, size_t size, const char *caller) -{ - void *ret; - - if (size == (size_t) 0 || (long) size < 0L) { - size = (size_t) 1; - pdc_warning(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0); - } - - if ((ret = (*pdc->allocproc)(pdc->opaque, size, caller)) == (void *) 0) - { - pdc_error(pdc, PDC_E_MEM_OUT, caller, 0, 0, 0); - } - - memset(ret, 0, size); - return ret; -} - -void * -pdc_realloc(pdc_core *pdc, void *mem, size_t size, const char *caller) -{ - void *ret; - - if (size == (size_t) 0 || (long) size < 0L) { - size = (size_t) 1; - pdc_warning(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0); - } - - if ((ret = (*pdc->reallocproc)(pdc->opaque, mem, size, caller)) - == (void *) 0) - pdc_error(pdc, PDC_E_MEM_OUT, caller, 0, 0, 0); - - return ret; -} - -void -pdc_free(pdc_core *pdc, void *mem) -{ - /* just in case the freeproc() isn't that ANSI compatible... - */ - if (mem != NULL) - (*pdc->freeproc)(pdc->opaque, mem); -} - - -/* --------------------------- exception handling --------------------------- */ - -const char *pdc_errprintf(pdc_core *pdc, const char *fmt, ...) -{ - va_list ap; - - if (pdc->epcount < 0 || pdc->epcount > 3) - pdc->epcount = 0; - - va_start(ap, fmt); - vsprintf(pdc->errparms[pdc->epcount], fmt, ap); - va_end(ap); - - return pdc->errparms[pdc->epcount++]; -} - -static pdc_error_info * -get_error_info(pdc_core *pdc, int errnum) -{ - int n = (errnum / 1000) - 1; - - if (0 <= n && n < N_ERRTABS && pdc->err_tables[n].ei != 0) - { - error_table *etab = &pdc->err_tables[n]; - int i; - - /* LATER: binary search. */ - for (i = 0; i < etab->n_entries; ++i) - { - if (etab->ei[i].errnum == errnum) - return &etab->ei[i]; - } - } - - pdc_panic(pdc, "Internal error: unknown error number %d", errnum); - - return (pdc_error_info *) 0; /* for the compiler */ -} /* get_error_info */ - - -static void -make_errmsg( - pdc_core * pdc, - pdc_error_info * ei, - const char * parm1, - const char * parm2, - const char * parm3, - const char * parm4) -{ - const char *src = ei->ce_msg ? ei->ce_msg : ei->errmsg; - char * dst = pdc->errbuf; - const char *dollar; - - pdc->epcount = 0; - - /* copy *src to *dst, replacing "$N" with *parmN. - */ - while ((dollar = strchr(src, '$')) != (char *) 0) - { - const char *parm = (const char *) 0; - - memcpy(dst, src, (size_t) (dollar - src)); - dst += dollar - src; - src = dollar + 1; - - switch (*src) - { - case '1': parm = (parm1 ? parm1 : "?"); break; - case '2': parm = (parm2 ? parm2 : "?"); break; - case '3': parm = (parm3 ? parm3 : "?"); break; - case '4': parm = (parm4 ? parm4 : "?"); break; - - case 0: break; - - default: *(dst++) = *(src++); - break; - } - - if (parm != (const char *) 0) - { - ++src; - strcpy(dst, parm); - dst += strlen(parm); - } - } - - strcpy(dst, src); -} /* make_errmsg */ - - -void -pdc_set_errmsg( - pdc_core * pdc, - int errnum, - const char *parm1, - const char *parm2, - const char *parm3, - const char *parm4) -{ - pdc_error_info *ei = get_error_info(pdc, errnum); - - make_errmsg(pdc, ei, parm1, parm2, parm3, parm4); - pdc->errnum = errnum; -} /* pdc_set_errmsg */ - - -void -pdc_error( - pdc_core * pdc, - int errnum, - const char *parm1, - const char *parm2, - const char *parm3, - const char *parm4) -{ - if (pdc->in_error) /* avoid recursive errors. */ - return; - else - { - pdc->in_error = pdc_true; - pdc->x_thrown = pdc_true; - } - - if (errnum != -1) - { - pdc_error_info *ei = get_error_info(pdc, errnum); - - make_errmsg(pdc, ei, parm1, parm2, parm3, parm4); - pdc->errnum = errnum; - } - - pdc_trace(pdc, "\n[+++ exception %d in %s, %s +++]\n", - pdc->errnum, (pdc->errnum == 0) ? "" : pdc->apiname, - (pdc->x_sp == -1 ? "error handler active" : "try/catch active")); - pdc_trace(pdc, "[\"%s\"]\n\n", pdc->errbuf); - - if (pdc->x_sp == -1) { - char errbuf[PDC_ERRBUF_SIZE]; - - sprintf(errbuf, "[%d] %s: %s", - pdc->errnum, pdc_get_apiname(pdc), pdc->errbuf); - (*pdc->errorhandler)(pdc->opaque, PDF_UnknownError, errbuf); - - /* - * The error handler must never return. If it does, it is severely - * broken. We cannot remedy this, so we exit. - */ - exit(99); - - } else { - - longjmp(pdc->x_stack[pdc->x_sp].jbuf.jbuf, 1); - } - -} /* pdc_error */ - - -void -pdc_warning( - pdc_core * pdc, - int errnum, - const char *parm1, - const char *parm2, - const char *parm3, - const char *parm4) -{ - if (pdc->in_error || pdc->warnings_enabled == pdc_false) - return; - else - { - pdc->in_error = pdc_true; - pdc->x_thrown = pdc_true; - } - - if (errnum != -1) - { - pdc_error_info *ei = get_error_info(pdc, errnum); - - make_errmsg(pdc, ei, parm1, parm2, parm3, parm4); - pdc->errnum = errnum; - } - - pdc_trace(pdc, "\n[+++ warning %d in %s, %s +++]\n", - pdc->errnum, (pdc->errnum == 0) ? "" : pdc->apiname, - (pdc->x_sp == -1 ? "error handler active" : "try/catch active")); - pdc_trace(pdc, "[\"%s\"]\n\n", pdc->errbuf); - - if (pdc->x_sp == -1) { - char errbuf[PDC_ERRBUF_SIZE]; - - sprintf(errbuf, "[%d] %s: %s", - pdc->errnum, pdc_get_apiname(pdc), pdc->errbuf); - (*pdc->errorhandler)(pdc->opaque, PDF_NonfatalError, errbuf); - - } else { - - longjmp(pdc->x_stack[pdc->x_sp].jbuf.jbuf, 1); - } - - /* a client-supplied error handler may return after a warning */ - pdc->in_error = pdc_false; - -} /* pdc_warning */ - - -pdc_jmpbuf * -pdc_jbuf(pdc_core *pdc) -{ - static const char fn[] = "pdc_jbuf"; - - if (++pdc->x_sp == pdc->x_ssize) - { - /* TODO: test */ - pdc_xframe *aux = (pdc_xframe *) (*pdc->reallocproc)( - pdc->opaque, pdc->x_stack, - 2 * pdc->x_ssize * sizeof (pdc_xframe), fn); - - if (aux == (pdc_xframe *) 0) - { - --pdc->x_sp; - pdc->errnum = PDC_E_MEM_OUT; - pdc->x_thrown = pdc_true; - pdc->in_error = pdc_true; - strcpy(pdc->errbuf, "out of memory"); - longjmp(pdc->x_stack[pdc->x_sp].jbuf.jbuf, 1); - } - - pdc->x_stack = aux; - pdc->x_ssize *= 2; - } - - pdc->x_thrown = pdc_false; - return &pdc->x_stack[pdc->x_sp].jbuf; -} /* pdc_jbuf */ - -void -pdc_exit_try(pdc_core *pdc) -{ - if (pdc->x_sp == -1) - { - strcpy(pdc->errbuf, "exception stack underflow"); - pdc->errnum = PDC_E_INT_XSTACK; - (*pdc->errorhandler)(pdc->opaque, PDF_UnknownError, pdc->errbuf); - } - else - --pdc->x_sp; -} /* pdc_exit_try */ - -int -pdc_catch_intern(pdc_core *pdc) -{ - pdc_bool result; - - if (pdc->x_sp == -1) - { - strcpy(pdc->errbuf, "exception stack underflow"); - pdc->errnum = PDC_E_INT_XSTACK; - (*pdc->errorhandler)(pdc->opaque, PDF_UnknownError, pdc->errbuf); - } - else - --pdc->x_sp; - - result = pdc->x_thrown; - pdc->in_error = pdc_false; - pdc->x_thrown = pdc_false; - - return result; -} /* pdc_catch_intern */ - -int -pdc_catch_extern(pdc_core *pdc) -{ - pdc_bool result; - - if (pdc->x_sp == -1) - { - strcpy(pdc->errbuf, "exception stack underflow"); - pdc->errnum = PDC_E_INT_XSTACK; - (*pdc->errorhandler)(pdc->opaque, PDF_UnknownError, pdc->errbuf); - } - else - --pdc->x_sp; - - result = pdc->x_thrown; - pdc->x_thrown = pdc_false; - - return result; -} /* pdc_catch_extern */ - -void -pdc_rethrow(pdc_core *pdc) -{ - pdc_error(pdc, -1, 0, 0, 0, 0); -} /* pdc_rethrow */ - - -int -pdc_get_errnum(pdc_core *pdc) -{ - return pdc->errnum; -} - -const char * -pdc_get_errmsg(pdc_core *pdc) -{ - return (pdc->errnum == 0) ? "" : pdc->errbuf; -} - -const char * -pdc_get_apiname(pdc_core *pdc) -{ - return (pdc->errnum == 0) ? "" : pdc->apiname; -} - - -/* --------------------------- debug trace --------------------------- */ - -static const char digits[] = "0123456789ABCDEF"; - -static char * -pdc_ltoa(char *buf, long n, int width, char pad, int base) -{ - char aux[20]; - int k, i = sizeof aux; - char * dest = buf; - unsigned long ul = (unsigned long) n; - - if (n == 0) - { - if (width == 0) - width = 1; - - for (k = 0; k < width; ++k) - *(dest++) = '0'; - - return dest; - } - - if (n < 0 && base == 10) - { - ul = (unsigned long) -ul; /* safe against overflow, - while "n = -n" isn't! */ - *(dest++) = '-'; - } - - aux[--i] = digits[ul % base]; - n = (long) (ul / base); - - while (0 < n) - { - aux[--i] = digits[n % base]; - n = n / base; - } - - width -= (int) (sizeof aux) - i; - for (k = 0; k < width; ++k) - *(dest++) = pad; - - memcpy(dest, &aux[i], sizeof aux - i); - return dest + sizeof aux - i; -} /* pdc_ltoa */ - -/* Acrobat viewers have an upper limit on real and integer numbers */ -#define PDF_BIGREAL (32768.0) -#define PDF_BIGINT (2147483647.0) - -static char * -pdc_ftoa(pdc_core *pdc, char *buf, double x) -{ - static const long pow10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000 }; - - char * dest = buf; - double integ, fract; - long f; - - if (fabs(x) < PDF_SMALLREAL) - { - *dest = '0'; - return dest + 1; - } - - if (x < 0) - { - x = -x; - *(dest++) = '-'; - } - - if (x >= PDF_BIGREAL) - { - if (x > PDF_BIGINT) - pdc_error(pdc, PDC_E_INT_FLOATTOOLARGE, 0, 0, 0, 0); - - return pdc_ltoa(dest, (long) floor(x + 0.5), 0, ' ', 10); - } - - fract = modf(x, &integ); - f = (long) floor(fract * pow10[pdc->floatdigits] + 0.5); - - if (f == pow10[pdc->floatdigits]) - { - integ += 1.0; - f = 0; - } - - if (integ == 0 && f == 0) /* avoid "-0" */ - dest = buf; - - dest = pdc_ltoa(dest, (long) integ, 0, ' ', 10); - - if (f != 0) - { - char * aux; - int i = pdc->floatdigits; - long rem; - - *(dest++) = '.'; - - do /* avoid trailing zeros */ - { - rem = f % 10; - f = f / 10; - --i; - } while (rem == 0); - - aux = dest + i + 1; - dest[i--] = digits[rem]; - - for (; 0 <= i; --i) - { - dest[i] = digits[f % 10]; - f = f / 10; - } - - return aux; - } - - return dest; -} /* pdc_ftoa */ - -int -pdc_vsprintf(pdc_core *pdc, char *buf, const char *format, va_list args) -{ - char *dest = buf; - - for (/* */ ; /* */ ; /* */) - { - int width = 0; - char pad = ' '; - - /* as long as there is no '%', just print. - */ - while (*format != 0 && *format != '%') - *(dest++) = *(format++); - - if (*format == 0) - { - *dest = 0; - return dest - buf; - } - - if (*(++format) == '0') - { - pad = '0'; - ++format; - } - - while (isdigit(*format)) - width = 10*width + *(format++) - '0'; - - switch (*format) - { - case 'X': - dest = pdc_ltoa(dest, va_arg(args, int), width, pad, 16); - break; - - case 'c': - *(dest++) = (char) va_arg(args, int); - break; - - case 'd': - dest = pdc_ltoa(dest, va_arg(args, int), width, pad, 10); - break; - - case 'g': /* for use in pdc_trace_api() */ - case 'f': - dest = pdc_ftoa(pdc, dest, va_arg(args, double)); - break; - - case 'l': - { - long n = va_arg(args, long); - - switch (*(++format)) - { - case 'X': - dest = pdc_ltoa(dest, n, width, pad, 16); - break; - - case 'd': - dest = pdc_ltoa(dest, n, width, pad, 10); - break; - - default: - pdc_error(pdc, PDC_E_INT_BADFORMAT, - pdc_errprintf(pdc, "l%c", - isprint(*format) ? *format : '?'), - pdc_errprintf(pdc, "0x%02X", *format), - 0, 0); - } - - break; - } - - case 'p': - { - void *ptr = va_arg(args, void *); - dest += sprintf(dest, "%p", ptr); - break; - } - - case 's': - { - char * str = va_arg(args, char *); - size_t len; - - if (str == 0) - str = "(NULL)"; - - if ((len = strlen(str)) != 0) - { - memcpy(dest, str, len); - dest += len; - } - break; - } - - case '%': - *(dest++) = '%'; - break; - - default: - pdc_error(pdc, PDC_E_INT_BADFORMAT, - pdc_errprintf(pdc, "%c", isprint(*format) ? *format : '?'), - pdc_errprintf(pdc, "0x%02X", *format), - 0, 0); - } /* switch */ - - ++format; - } /* loop */ -} /* pdc_vsprintf */ - -void -pdc_set_floatdigits(pdc_core *pdc, int val) -{ - pdc->floatdigits = val; -} - -void -pdc_set_tracefile(pdc_core *pdc, const char *filename) -{ - if (!filename || !*filename) - return; - - if (pdc->tracefilename) - pdc_free(pdc, pdc->tracefilename); - - pdc->tracefilename = pdc_strdup(pdc, filename); -} - -/* Include informational stuff in [] brackets, and use - %s/\[[^]]*\]//g and - %s/)$/);/ - * to make it compilable :-) - */ - -/* start or stop (client == NULL) a trace for the supplied client program */ -void -pdc_set_trace(pdc_core *pdc, const char *client) -{ -#ifndef WINCE - time_t timer; - struct tm ltime; - - time(&timer); - ltime = *localtime(&timer); -#else - SYSTEMTIME st; - - GetLocalTime (&st); -#endif - - pdc->trace = client ? pdc_true : pdc_false; - - if (pdc->trace) { - pdc_trace(pdc, - "[ ------------------------------------------------------ ]\n"); - pdc_trace(pdc, "[ %s on %s ] ", client, PDF_PLATFORM); - pdc_trace(pdc, "[%04d-%02d-%02d]\n", -#ifndef WINCE - ltime.tm_year + 1900, ltime.tm_mon + 1, ltime.tm_mday); -#else - st.wYear, st.wMonth, st.wDay); -#endif /* !WINCE */ - - pdc_trace(pdc, - "[ ------------------------------------------------------ ]\n"); - } -} - -/* trace function: version for pdf_enter_api() with - * time stamp and function name output. - */ -void -pdc_trace_api(pdc_core *pdc, const char *funame, const char *fmt, va_list args) -{ - FILE * fp; - const char *filename; - char buf[2000]; -#ifndef WINCE - time_t timer; - struct tm ltime; -#else - SYSTEMTIME st; -#endif - - if (!pdc || !pdc->trace) - return; - - filename = pdc->tracefilename ? pdc->tracefilename : DEBUG_TRACE_FILE; - - if ((fp = fopen(filename, APPENDMODE)) == NULL) - return; - -#ifndef WINCE - time(&timer); - ltime = *localtime(&timer); - fprintf(fp, "[%02d:%02d:%02d] ", ltime.tm_hour, ltime.tm_min, ltime.tm_sec); - -#else - - GetLocalTime (&st); - fprintf(fp, "[%02d:%02d:%02d] ", st.wHour, st.wMinute, st.wSecond); -#endif /* WINCE */ - - fprintf(fp, "%s\t", funame); - pdc_vsprintf(pdc, buf, fmt, args); - fprintf(fp, "%s", buf); - - fclose(fp); -} - -/* trace function: version without any decoration for return values etc.*/ -void -pdc_trace(pdc_core *pdc, const char *fmt, ...) -{ - FILE *fp; - const char *filename; - va_list ap; - - if (!pdc || !pdc->trace) - return; - - filename = pdc->tracefilename ? pdc->tracefilename : DEBUG_TRACE_FILE; - - if ((fp = fopen(filename, APPENDMODE)) == NULL) - return; - - va_start(ap, fmt); - vfprintf(fp, fmt, ap); - va_end(ap); - - fclose(fp); -} - diff --git a/src/libs/pdflib/libs/pdcore/pc_core.h b/src/libs/pdflib/libs/pdcore/pc_core.h deleted file mode 100644 index 980707c2a7..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_core.h +++ /dev/null @@ -1,205 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_core.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib core services: - * - memory management - * - exception handling - * - internal try/catch - * - debug tracing - */ - -#ifndef PC_CORE_H -#define PC_CORE_H - -/* Built-in metric support */ -#define PDF_BUILTINMETRIC_SUPPORTED - -/* Built-in encoding support */ -#define PDF_BUILTINENCODING_SUPPORTED - - -#define PDF_FEATURE_NOT_PUBLIC - - -/* ------------------------- general ------------------------- */ - -typedef struct pdc_core_s pdc_core; - -typedef int pdc_bool; -typedef long pdc_id; -typedef char pdc_char; -typedef unsigned char pdc_byte; -typedef short pdc_short; -typedef unsigned short pdc_ushort; -typedef int pdc_long; -typedef unsigned int pdc_ulong; - -typedef short pdc_sint16; -typedef unsigned short pdc_uint16; -typedef int pdc_sint32; -typedef unsigned int pdc_uint32; - -#define pdc_undef -1 -#define pdc_false 0 -#define pdc_true 1 - -#define PDC_BOOLSTR(a) (a != 0 ? "true" : "false") - -#ifndef MIN -#define MIN(a,b) (a <= b ? a : b) -#endif -#ifndef MAX -#define MAX(a,b) (a >= b ? a : b) -#endif - -#define PDC_1_3 13 /* PDF 1.3 = Acrobat 4 */ -#define PDC_1_4 14 /* PDF 1.4 = Acrobat 5 */ -#define PDC_1_5 15 /* PDF 1.5 = Acrobat 6 */ -#define PDC_X_X_LAST 15 - - -typedef void (*pdc_error_fp)(void *opaque, int type, const char *msg); -typedef void* (*pdc_alloc_fp)(void *opaque, size_t size, const char *caller); -typedef void* (*pdc_realloc_fp)(void *opaque, void *mem, size_t size, - const char *caller); -typedef void (*pdc_free_fp)(void *opaque, void *mem); - -pdc_core *pdc_init_core(pdc_error_fp errorhandler, pdc_alloc_fp allocproc, - pdc_realloc_fp reallocproc, pdc_free_fp freeproc, void *opaque); - -void pdc_delete_core(pdc_core *pdc); - -/* this is used by pdflib and pdi sources, so i put it here... -*/ -typedef enum { - use_none = 0, use_art, use_bleed, use_crop, use_media, use_trim -} pdc_usebox; - -/* ------------------------- memory management ------------------------- */ - -void *pdc_malloc(pdc_core *pdc, size_t size, const char *caller); -void *pdc_realloc(pdc_core *pdc, void *mem, size_t size, const char *caller); -void *pdc_calloc(pdc_core *pdc, size_t size, const char *caller); -void pdc_free(pdc_core *pdc, void *mem); - -/* --------------------------- exception handling --------------------------- */ - -/* per-library error table base numbers. -*/ -#define PDC_ET_CORE 1000 -#define PDC_ET_PDFLIB 2000 -#define PDC_ET_PDI 4000 -#define PDC_ET_PSP 5000 -#define PDC_ET_PDPAGE 6000 - -#define PDC_ET_LAST 6000 - -/* core error numbers. -*/ -enum -{ -#define pdc_genNames 1 -#include "pc_generr.h" - - PDC_E_dummy -}; - -typedef struct -{ - int nparms; /* number of error parameters */ - int errnum; /* error number */ - const char *errmsg; /* default error message */ - const char *ce_msg; /* custom error message */ -} pdc_error_info; - -void pdc_register_errtab(pdc_core *pdc, int et, pdc_error_info *ei, - int n_entries); - -pdc_bool pdc_enter_api(pdc_core *pdc, const char *apiname); -pdc_bool pdc_in_error(pdc_core *pdc); -void pdc_set_warnings(pdc_core *pdc, pdc_bool on); - -const char * pdc_errprintf(pdc_core *pdc, const char *format, ...); - -void pdc_set_errmsg(pdc_core *pdc, int errnum, const char *parm1, - const char *parm2, const char *parm3, const char *parm4); - -void pdc_error(pdc_core *pdc, int errnum, const char *parm1, - const char *parm2, const char *parm3, const char *parm4); - -void pdc_warning(pdc_core *pdc, int errnum, const char *parm1, - const char *parm2, const char *parm3, const char *parm4); - -int pdc_get_errnum(pdc_core *pdc); -const char * pdc_get_errmsg(pdc_core *pdc); -const char * pdc_get_apiname(pdc_core *pdc); - -/* ----------------------------- try/catch ---------------------------- */ - -#include - -typedef struct -{ - jmp_buf jbuf; -} pdc_jmpbuf; - -pdc_jmpbuf * pdc_jbuf(pdc_core *pdc); -void pdc_exit_try(pdc_core *pdc); -int pdc_catch_intern(pdc_core *pdc); -int pdc_catch_extern(pdc_core *pdc); -void pdc_rethrow(pdc_core *pdc); - -#define PDC_TRY(pdc) if (setjmp(pdc_jbuf(pdc)->jbuf) == 0) - -#define PDC_EXIT_TRY(pdc) pdc_exit_try(pdc) - -#define PDC_CATCH(pdc) if (pdc_catch_intern(pdc)) - -#define PDC_RETHROW(pdc) pdc_rethrow(pdc) - - -/* --------------------------- debug trace --------------------------- */ - -# ifndef DEBUG_TRACE_FILE -# if defined(MVS) -# define DEBUG_TRACE_FILE "pdftrace" -# elif defined(MAC) || defined(AS400) -# define DEBUG_TRACE_FILE "PDFlib.trace" -# elif defined(WIN32) -# define DEBUG_TRACE_FILE "/PDFlib.trace" -# else -# define DEBUG_TRACE_FILE "/tmp/PDFlib.trace" -# endif -# endif -# define PDF_TRACE(ARGS) pdc_trace ARGS - -int pdc_vsprintf(pdc_core *pdc, char *buf, const char *fmt, va_list args); -void pdc_set_floatdigits(pdc_core *pdc, int val); -void pdc_set_tracefile(pdc_core *pdc, const char *filename); -void pdc_set_trace(pdc_core *pdc, const char *client); -void pdc_trace(pdc_core *pdc, const char *fmt, ...); -void pdc_trace_api(pdc_core *pdc, const char *funame, - const char *fmt, va_list args); - -/* --------------------------- scope --------------------------- */ - -/* - * An arbitrary number used for sanity checks. - * Actually, we use the hex representation of pi in order to avoid - * the more common patterns. - */ - -#define PDC_MAGIC ((unsigned long) 0x126960A1) - -#endif /* PC_CORE_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_corefont.c b/src/libs/pdflib/libs/pdcore/pc_corefont.c deleted file mode 100644 index 3ebcd65722..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_corefont.c +++ /dev/null @@ -1,238 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_corefont.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib in-core font and basic font metric functions - * - */ - -#include "pc_util.h" -#include "pc_corefont.h" - -/* PDF basic font names */ -static const char *pdc_base14_names[] = -{ - "Courier", - "Courier-Bold", - "Courier-Oblique", - "Courier-BoldOblique", - "Helvetica", - "Helvetica-Bold", - "Helvetica-Oblique", - "Helvetica-BoldOblique", - "Symbol", - "Times-Roman", - "Times-Bold", - "Times-Italic", - "Times-BoldItalic", - "ZapfDingbats" -}; - -const char * -pdc_get_base14_name(int slot) -{ - if (slot < (int)(sizeof(pdc_base14_names) / sizeof(pdc_base14_names[0]))) - return(pdc_base14_names[slot]); - else - return(NULL); -} - -#ifdef PDF_BUILTINMETRIC_SUPPORTED - -/* Basic fonts core metrics */ -#include "pc_coremetr.h" -static const pdc_core_metric *pdc_core_metrics[] = -{ - &pdc_core_metric_01, - &pdc_core_metric_02, - &pdc_core_metric_03, - &pdc_core_metric_04, - &pdc_core_metric_05, - &pdc_core_metric_06, - &pdc_core_metric_07, - &pdc_core_metric_08, - &pdc_core_metric_09, - &pdc_core_metric_10, - &pdc_core_metric_11, - &pdc_core_metric_12, - &pdc_core_metric_13, - &pdc_core_metric_14 -}; - -#endif /* PDF_BUILTINMETRIC_SUPPORTED */ - -const pdc_core_metric * -pdc_get_core_metric(const char *fontname) -{ -#ifdef PDF_BUILTINMETRIC_SUPPORTED - const pdc_core_metric *metric = NULL; - int slot; - - for (slot = 0; - slot < (int)(sizeof(pdc_core_metrics) / sizeof(pdc_core_metrics[0])); - slot++) - { - metric = pdc_core_metrics[slot]; - if (!strcmp(metric->name, fontname)) - return metric; - } -#endif /* PDF_BUILTINMETRIC_SUPPORTED */ - return(NULL); -} - -void -pdc_init_core_metric(pdc_core *pdc, pdc_core_metric *metric) -{ - (void) pdc; - - metric->name = NULL; - metric->flags = 0L; - metric->type = pdc_Type1; - metric->charcoll = cc_none; - - metric->italicAngle = 0; - metric->isFixedPitch = pdc_false; - metric->llx = (float) -50; - metric->lly = (float) -200; - metric->urx = (float) 1000; - metric->ury = (float) 900; - metric->underlinePosition = -100; - metric->underlineThickness = 50; - metric->ascender = 800; - metric->descender = -200; - metric->capHeight = 700; - metric->xHeight = 0; - metric->StdHW = 0; - metric->StdVW = 0; - metric->numOfInter = 0; - metric->ciw = NULL; - metric->numOfGlyphs = 0; - metric->glw = NULL; - -} - -void -pdc_cleanup_core_metric(pdc_core *pdc, pdc_core_metric *metric) -{ - if (metric == NULL) - return; - - if (metric->name) - pdc_free(pdc, metric->name); - - if (metric->glw != NULL) { - pdc_free(pdc, metric->glw); - } - -} - - -/* - * Fill up core metric struct from font struct - */ -void -pdc_fill_core_metric(pdc_core *pdc, pdc_font *font, pdc_core_metric *metric) -{ - static const char fn[] = "pdc_fill_core_metric"; - - /* Fill up core metric struct */ - metric->name = pdc_strdup(pdc, font->name); - metric->flags = font->flags; - metric->type = font->type; - metric->charcoll = font->charcoll; - metric->italicAngle = font->italicAngle; - metric->isFixedPitch = font->isFixedPitch; - metric->llx = font->llx; - metric->lly = font->lly; - metric->urx = font->urx; - metric->ury = font->ury; - metric->underlinePosition = font->underlinePosition; - metric->underlineThickness = font->underlineThickness; - metric->capHeight = font->capHeight; - metric->xHeight = font->xHeight; - metric->ascender = font->ascender; - metric->descender = font->descender; - metric->StdVW = font->StdVW; - - /* Generate Glyph width array */ - metric->numOfGlyphs = font->numOfGlyphs; - if (metric->numOfGlyphs) - { - metric->glw = (pdc_glyphwidth *) pdc_calloc(pdc, - font->numOfGlyphs * sizeof(pdc_glyphwidth), fn); - memcpy(metric->glw, font->glw, - font->numOfGlyphs * sizeof(pdc_glyphwidth)); - } - -} - - -/* - * Fill up font metric struct from core metric struct - */ -void -pdc_fill_font_metric(pdc_core *pdc, pdc_font *font, - const pdc_core_metric *metric) -{ - static const char fn[] = "pdc_fill_font_metric"; - - /* Fill up font metric struct. Font struct must be initialized */ - font->name = pdc_strdup(pdc, metric->name); - font->flags = metric->flags; - font->type = metric->type; - font->charcoll = metric->charcoll; - font->italicAngle = metric->italicAngle; - font->isFixedPitch = metric->isFixedPitch; - font->llx = metric->llx; - font->lly = metric->lly; - font->urx = metric->urx; - font->ury = metric->ury; - font->underlinePosition = metric->underlinePosition; - font->underlineThickness = metric->underlineThickness; - font->capHeight = metric->capHeight; - font->xHeight = metric->xHeight; - font->ascender = metric->ascender; - font->descender = metric->descender; - font->StdVW = metric->StdVW; - font->StdHW = metric->StdHW; - - if (metric->numOfInter && font->codeSize > 1) - { - int i; - - /* Fill up the code intervals for glyph widths */ - font->numOfWidths = metric->numOfInter; - font->widthsTab = (pdc_widthdata *) pdc_calloc(pdc, - font->numOfWidths * sizeof(pdc_widthdata), fn); - for (i = 0; i < font->numOfWidths; i++) - { - font->widthsTab[i].startcode = metric->ciw[i].startcode; - font->widthsTab[i].width = (int) metric->ciw[i].width; - } - } - - /* Generate Glyph width array */ - font->numOfGlyphs = metric->numOfGlyphs; - if (font->numOfGlyphs) - { - font->glw = (pdc_glyphwidth *) pdc_calloc(pdc, - metric->numOfGlyphs * sizeof(pdc_glyphwidth), fn); - memcpy(font->glw, metric->glw, - metric->numOfGlyphs * sizeof(pdc_glyphwidth)); - } - -} - - - - diff --git a/src/libs/pdflib/libs/pdcore/pc_corefont.h b/src/libs/pdflib/libs/pdcore/pc_corefont.h deleted file mode 100644 index ff757c3684..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_corefont.h +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_corefont.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Core font data structures and routines - * - */ - -#include "pc_font.h" - -#ifndef PC_COREFONT_H -#define PC_COREFONT_H - -/* Code interval width data structure */ -struct pdc_interwidth_s -{ - pdc_ushort startcode; /* start code of interval */ - pdc_ushort width; /* width of glyphs in the code interval */ -}; - -/* The in-core PDFlib font metric structure */ -struct pdc_core_metric_s { - char *name; /* font name */ - unsigned long flags; /* font flags for font descriptor */ - pdc_fonttype type; /* type of font */ - pdc_charcoll charcoll; /* CID character collection supported */ - - float italicAngle; /* AFM key: ItalicAngle */ - int isFixedPitch; /* AFM key: IsFixedPitch */ - float llx; /* AFM key: FontBBox */ - float lly; /* AFM key: FontBBox */ - float urx; /* AFM key: FontBBox */ - float ury; /* AFM key: FontBBox */ - int underlinePosition; /* AFM key: UnderlinePosition */ - int underlineThickness; /* AFM key: UnderlineThickness */ - int capHeight; /* AFM key: CapHeight */ - int xHeight; /* AFM key: XHeight */ - int ascender; /* AFM key: Ascender */ - int descender; /* AFM key: Descender */ - int StdVW; /* AFM key: StdVW */ - int StdHW; /* AFM key: StdHW */ - int numOfInter; /* # of entries in code intervals */ - pdc_interwidth *ciw; /* ptr to code intervals array */ - int numOfGlyphs; /* # of entries in glyph widths */ - pdc_glyphwidth *glw; /* ptr to glyph widths array */ - -}; - -#endif /* PC_COREFONT_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_coremetr.h b/src/libs/pdflib/libs/pdcore/pc_coremetr.h deleted file mode 100644 index 1b2375cf4f..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_coremetr.h +++ /dev/null @@ -1,1892 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_coremetr.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * This file contains the metrics for the 14 base fonts independent - * of an encoding. This file can be generated by the utility program - * progs/compile_metric/compile_metrics. - * - * pc_coremetr.h will be included only in pc_corefont.c. - * - */ - -#ifndef PC_COREMETR_H -#define PC_COREMETR_H - -#ifdef PDF_BUILTINMETRIC_SUPPORTED - -/* -------- Generated from Courier.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_01[315] = -{ - {0x0020, 32, 600}, {0x0021, 33, 600}, {0x0022, 34, 600}, - {0x0023, 35, 600}, {0x0024, 36, 600}, {0x0025, 37, 600}, - {0x0026, 38, 600}, {0x2019, 39, 600}, {0x0028, 40, 600}, - {0x0029, 41, 600}, {0x002a, 42, 600}, {0x002b, 43, 600}, - {0x002c, 44, 600}, {0x002d, 45, 600}, {0x002e, 46, 600}, - {0x002f, 47, 600}, {0x0030, 48, 600}, {0x0031, 49, 600}, - {0x0032, 50, 600}, {0x0033, 51, 600}, {0x0034, 52, 600}, - {0x0035, 53, 600}, {0x0036, 54, 600}, {0x0037, 55, 600}, - {0x0038, 56, 600}, {0x0039, 57, 600}, {0x003a, 58, 600}, - {0x003b, 59, 600}, {0x003c, 60, 600}, {0x003d, 61, 600}, - {0x003e, 62, 600}, {0x003f, 63, 600}, {0x0040, 64, 600}, - {0x0041, 65, 600}, {0x0042, 66, 600}, {0x0043, 67, 600}, - {0x0044, 68, 600}, {0x0045, 69, 600}, {0x0046, 70, 600}, - {0x0047, 71, 600}, {0x0048, 72, 600}, {0x0049, 73, 600}, - {0x004a, 74, 600}, {0x004b, 75, 600}, {0x004c, 76, 600}, - {0x004d, 77, 600}, {0x004e, 78, 600}, {0x004f, 79, 600}, - {0x0050, 80, 600}, {0x0051, 81, 600}, {0x0052, 82, 600}, - {0x0053, 83, 600}, {0x0054, 84, 600}, {0x0055, 85, 600}, - {0x0056, 86, 600}, {0x0057, 87, 600}, {0x0058, 88, 600}, - {0x0059, 89, 600}, {0x005a, 90, 600}, {0x005b, 91, 600}, - {0x005c, 92, 600}, {0x005d, 93, 600}, {0x005e, 94, 600}, - {0x005f, 95, 600}, {0x2018, 96, 600}, {0x0061, 97, 600}, - {0x0062, 98, 600}, {0x0063, 99, 600}, {0x0064, 100, 600}, - {0x0065, 101, 600}, {0x0066, 102, 600}, {0x0067, 103, 600}, - {0x0068, 104, 600}, {0x0069, 105, 600}, {0x006a, 106, 600}, - {0x006b, 107, 600}, {0x006c, 108, 600}, {0x006d, 109, 600}, - {0x006e, 110, 600}, {0x006f, 111, 600}, {0x0070, 112, 600}, - {0x0071, 113, 600}, {0x0072, 114, 600}, {0x0073, 115, 600}, - {0x0074, 116, 600}, {0x0075, 117, 600}, {0x0076, 118, 600}, - {0x0077, 119, 600}, {0x0078, 120, 600}, {0x0079, 121, 600}, - {0x007a, 122, 600}, {0x007b, 123, 600}, {0x007c, 124, 600}, - {0x007d, 125, 600}, {0x007e, 126, 600}, {0x00a1, 161, 600}, - {0x00a2, 162, 600}, {0x00a3, 163, 600}, {0x2044, 164, 600}, - {0x00a5, 165, 600}, {0x0192, 166, 600}, {0x00a7, 167, 600}, - {0x00a4, 168, 600}, {0x0027, 169, 600}, {0x201c, 170, 600}, - {0x00ab, 171, 600}, {0x2039, 172, 600}, {0x203a, 173, 600}, - {0xfb01, 174, 600}, {0xfb02, 175, 600}, {0x2013, 177, 600}, - {0x2020, 178, 600}, {0x2021, 179, 600}, {0x00b7, 180, 600}, - {0x00b6, 182, 600}, {0x2022, 183, 600}, {0x201a, 184, 600}, - {0x201e, 185, 600}, {0x201d, 186, 600}, {0x00bb, 187, 600}, - {0x2026, 188, 600}, {0x2030, 189, 600}, {0x00bf, 191, 600}, - {0x0060, 193, 600}, {0x00b4, 194, 600}, {0x02c6, 195, 600}, - {0x02dc, 196, 600}, {0x00af, 197, 600}, {0x02d8, 198, 600}, - {0x02d9, 199, 600}, {0x00a8, 200, 600}, {0x02da, 202, 600}, - {0x00b8, 203, 600}, {0x02dd, 205, 600}, {0x02db, 206, 600}, - {0x02c7, 207, 600}, {0x2014, 208, 600}, {0x00c6, 225, 600}, - {0x00aa, 227, 600}, {0x0141, 232, 600}, {0x00d8, 233, 600}, - {0x0152, 234, 600}, {0x00ba, 235, 600}, {0x00e6, 241, 600}, - {0x0131, 245, 600}, {0x0142, 248, 600}, {0x00f8, 249, 600}, - {0x0153, 250, 600}, {0x00df, 251, 600}, {0x00cf, -1, 600}, - {0x00e9, -1, 600}, {0x0103, -1, 600}, {0x0171, -1, 600}, - {0x011b, -1, 600}, {0x0178, -1, 600}, {0x00f7, -1, 600}, - {0x00dd, -1, 600}, {0x00c2, -1, 600}, {0x00e1, -1, 600}, - {0x00db, -1, 600}, {0x00fd, -1, 600}, {0x0219, -1, 600}, - {0x00ea, -1, 600}, {0x016e, -1, 600}, {0x00dc, -1, 600}, - {0x0105, -1, 600}, {0x00da, -1, 600}, {0x0173, -1, 600}, - {0x00cb, -1, 600}, {0x0110, -1, 600}, {0xf6c3, -1, 600}, - {0x00a9, -1, 600}, {0x0112, -1, 600}, {0x010d, -1, 600}, - {0x00e5, -1, 600}, {0x0145, -1, 600}, {0x013a, -1, 600}, - {0x00e0, -1, 600}, {0x0162, -1, 600}, {0x0106, -1, 600}, - {0x00e3, -1, 600}, {0x0116, -1, 600}, {0x0161, -1, 600}, - {0x015f, -1, 600}, {0x00ed, -1, 600}, {0x25ca, -1, 600}, - {0x0158, -1, 600}, {0x0122, -1, 600}, {0x00fb, -1, 600}, - {0x00e2, -1, 600}, {0x0100, -1, 600}, {0x0159, -1, 600}, - {0x00e7, -1, 600}, {0x017b, -1, 600}, {0x00de, -1, 600}, - {0x014c, -1, 600}, {0x0154, -1, 600}, {0x015a, -1, 600}, - {0x010f, -1, 600}, {0x016a, -1, 600}, {0x016f, -1, 600}, - {0x00b3, -1, 600}, {0x00d2, -1, 600}, {0x00c0, -1, 600}, - {0x0102, -1, 600}, {0x00d7, -1, 600}, {0x00fa, -1, 600}, - {0x0164, -1, 600}, {0x2202, -1, 600}, {0x00ff, -1, 600}, - {0x0143, -1, 600}, {0x00ee, -1, 600}, {0x00ca, -1, 600}, - {0x00e4, -1, 600}, {0x00eb, -1, 600}, {0x0107, -1, 600}, - {0x0144, -1, 600}, {0x016b, -1, 600}, {0x0147, -1, 600}, - {0x00cd, -1, 600}, {0x00b1, -1, 600}, {0x00a6, -1, 600}, - {0x00ae, -1, 600}, {0x011e, -1, 600}, {0x0130, -1, 600}, - {0x2211, -1, 600}, {0x00c8, -1, 600}, {0x0155, -1, 600}, - {0x014d, -1, 600}, {0x0179, -1, 600}, {0x017d, -1, 600}, - {0x2265, -1, 600}, {0x00d0, -1, 600}, {0x00c7, -1, 600}, - {0x013c, -1, 600}, {0x0165, -1, 600}, {0x0119, -1, 600}, - {0x0172, -1, 600}, {0x00c1, -1, 600}, {0x00c4, -1, 600}, - {0x00e8, -1, 600}, {0x017a, -1, 600}, {0x012f, -1, 600}, - {0x00d3, -1, 600}, {0x00f3, -1, 600}, {0x0101, -1, 600}, - {0x015b, -1, 600}, {0x00ef, -1, 600}, {0x00d4, -1, 600}, - {0x00d9, -1, 600}, {0x0394, -1, 600}, {0x00fe, -1, 600}, - {0x00b2, -1, 600}, {0x00d6, -1, 600}, {0x03bc, -1, 600}, - {0x00ec, -1, 600}, {0x0151, -1, 600}, {0x0118, -1, 600}, - {0x0111, -1, 600}, {0x00be, -1, 600}, {0x015e, -1, 600}, - {0x013e, -1, 600}, {0x0136, -1, 600}, {0x0139, -1, 600}, - {0x2122, -1, 600}, {0x0117, -1, 600}, {0x00cc, -1, 600}, - {0x012a, -1, 600}, {0x013d, -1, 600}, {0x00bd, -1, 600}, - {0x2264, -1, 600}, {0x00f4, -1, 600}, {0x00f1, -1, 600}, - {0x0170, -1, 600}, {0x00c9, -1, 600}, {0x0113, -1, 600}, - {0x011f, -1, 600}, {0x00bc, -1, 600}, {0x0160, -1, 600}, - {0x0218, -1, 600}, {0x0150, -1, 600}, {0x00b0, -1, 600}, - {0x00f2, -1, 600}, {0x010c, -1, 600}, {0x00f9, -1, 600}, - {0x221a, -1, 600}, {0x010e, -1, 600}, {0x0157, -1, 600}, - {0x00d1, -1, 600}, {0x00f5, -1, 600}, {0x0156, -1, 600}, - {0x013b, -1, 600}, {0x00c3, -1, 600}, {0x0104, -1, 600}, - {0x00c5, -1, 600}, {0x00d5, -1, 600}, {0x017c, -1, 600}, - {0x011a, -1, 600}, {0x012e, -1, 600}, {0x0137, -1, 600}, - {0x2212, -1, 600}, {0x00ce, -1, 600}, {0x0148, -1, 600}, - {0x0163, -1, 600}, {0x00ac, -1, 600}, {0x00f6, -1, 600}, - {0x00fc, -1, 600}, {0x2260, -1, 600}, {0x0123, -1, 600}, - {0x00f0, -1, 600}, {0x017e, -1, 600}, {0x0146, -1, 600}, - {0x00b9, -1, 600}, {0x012b, -1, 600}, {0x20ac, -1, 600} -}; - -const static pdc_core_metric pdc_core_metric_01 = -{ - "Courier", /* FontName */ - 33L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 1, /* isFixedPitch */ - -23, /* llx */ - -250, /* lly */ - 715, /* urx */ - 805, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 562, /* CapHeight */ - 426, /* xHeight */ - 629, /* Ascender */ - -157, /* Descender */ - 51, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_01, - -}; - -/* -------- Generated from Courier-Bold.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_02[315] = -{ - {0x0020, 32, 600}, {0x0021, 33, 600}, {0x0022, 34, 600}, - {0x0023, 35, 600}, {0x0024, 36, 600}, {0x0025, 37, 600}, - {0x0026, 38, 600}, {0x2019, 39, 600}, {0x0028, 40, 600}, - {0x0029, 41, 600}, {0x002a, 42, 600}, {0x002b, 43, 600}, - {0x002c, 44, 600}, {0x002d, 45, 600}, {0x002e, 46, 600}, - {0x002f, 47, 600}, {0x0030, 48, 600}, {0x0031, 49, 600}, - {0x0032, 50, 600}, {0x0033, 51, 600}, {0x0034, 52, 600}, - {0x0035, 53, 600}, {0x0036, 54, 600}, {0x0037, 55, 600}, - {0x0038, 56, 600}, {0x0039, 57, 600}, {0x003a, 58, 600}, - {0x003b, 59, 600}, {0x003c, 60, 600}, {0x003d, 61, 600}, - {0x003e, 62, 600}, {0x003f, 63, 600}, {0x0040, 64, 600}, - {0x0041, 65, 600}, {0x0042, 66, 600}, {0x0043, 67, 600}, - {0x0044, 68, 600}, {0x0045, 69, 600}, {0x0046, 70, 600}, - {0x0047, 71, 600}, {0x0048, 72, 600}, {0x0049, 73, 600}, - {0x004a, 74, 600}, {0x004b, 75, 600}, {0x004c, 76, 600}, - {0x004d, 77, 600}, {0x004e, 78, 600}, {0x004f, 79, 600}, - {0x0050, 80, 600}, {0x0051, 81, 600}, {0x0052, 82, 600}, - {0x0053, 83, 600}, {0x0054, 84, 600}, {0x0055, 85, 600}, - {0x0056, 86, 600}, {0x0057, 87, 600}, {0x0058, 88, 600}, - {0x0059, 89, 600}, {0x005a, 90, 600}, {0x005b, 91, 600}, - {0x005c, 92, 600}, {0x005d, 93, 600}, {0x005e, 94, 600}, - {0x005f, 95, 600}, {0x2018, 96, 600}, {0x0061, 97, 600}, - {0x0062, 98, 600}, {0x0063, 99, 600}, {0x0064, 100, 600}, - {0x0065, 101, 600}, {0x0066, 102, 600}, {0x0067, 103, 600}, - {0x0068, 104, 600}, {0x0069, 105, 600}, {0x006a, 106, 600}, - {0x006b, 107, 600}, {0x006c, 108, 600}, {0x006d, 109, 600}, - {0x006e, 110, 600}, {0x006f, 111, 600}, {0x0070, 112, 600}, - {0x0071, 113, 600}, {0x0072, 114, 600}, {0x0073, 115, 600}, - {0x0074, 116, 600}, {0x0075, 117, 600}, {0x0076, 118, 600}, - {0x0077, 119, 600}, {0x0078, 120, 600}, {0x0079, 121, 600}, - {0x007a, 122, 600}, {0x007b, 123, 600}, {0x007c, 124, 600}, - {0x007d, 125, 600}, {0x007e, 126, 600}, {0x00a1, 161, 600}, - {0x00a2, 162, 600}, {0x00a3, 163, 600}, {0x2044, 164, 600}, - {0x00a5, 165, 600}, {0x0192, 166, 600}, {0x00a7, 167, 600}, - {0x00a4, 168, 600}, {0x0027, 169, 600}, {0x201c, 170, 600}, - {0x00ab, 171, 600}, {0x2039, 172, 600}, {0x203a, 173, 600}, - {0xfb01, 174, 600}, {0xfb02, 175, 600}, {0x2013, 177, 600}, - {0x2020, 178, 600}, {0x2021, 179, 600}, {0x00b7, 180, 600}, - {0x00b6, 182, 600}, {0x2022, 183, 600}, {0x201a, 184, 600}, - {0x201e, 185, 600}, {0x201d, 186, 600}, {0x00bb, 187, 600}, - {0x2026, 188, 600}, {0x2030, 189, 600}, {0x00bf, 191, 600}, - {0x0060, 193, 600}, {0x00b4, 194, 600}, {0x02c6, 195, 600}, - {0x02dc, 196, 600}, {0x00af, 197, 600}, {0x02d8, 198, 600}, - {0x02d9, 199, 600}, {0x00a8, 200, 600}, {0x02da, 202, 600}, - {0x00b8, 203, 600}, {0x02dd, 205, 600}, {0x02db, 206, 600}, - {0x02c7, 207, 600}, {0x2014, 208, 600}, {0x00c6, 225, 600}, - {0x00aa, 227, 600}, {0x0141, 232, 600}, {0x00d8, 233, 600}, - {0x0152, 234, 600}, {0x00ba, 235, 600}, {0x00e6, 241, 600}, - {0x0131, 245, 600}, {0x0142, 248, 600}, {0x00f8, 249, 600}, - {0x0153, 250, 600}, {0x00df, 251, 600}, {0x00cf, -1, 600}, - {0x00e9, -1, 600}, {0x0103, -1, 600}, {0x0171, -1, 600}, - {0x011b, -1, 600}, {0x0178, -1, 600}, {0x00f7, -1, 600}, - {0x00dd, -1, 600}, {0x00c2, -1, 600}, {0x00e1, -1, 600}, - {0x00db, -1, 600}, {0x00fd, -1, 600}, {0x0219, -1, 600}, - {0x00ea, -1, 600}, {0x016e, -1, 600}, {0x00dc, -1, 600}, - {0x0105, -1, 600}, {0x00da, -1, 600}, {0x0173, -1, 600}, - {0x00cb, -1, 600}, {0x0110, -1, 600}, {0xf6c3, -1, 600}, - {0x00a9, -1, 600}, {0x0112, -1, 600}, {0x010d, -1, 600}, - {0x00e5, -1, 600}, {0x0145, -1, 600}, {0x013a, -1, 600}, - {0x00e0, -1, 600}, {0x0162, -1, 600}, {0x0106, -1, 600}, - {0x00e3, -1, 600}, {0x0116, -1, 600}, {0x0161, -1, 600}, - {0x015f, -1, 600}, {0x00ed, -1, 600}, {0x25ca, -1, 600}, - {0x0158, -1, 600}, {0x0122, -1, 600}, {0x00fb, -1, 600}, - {0x00e2, -1, 600}, {0x0100, -1, 600}, {0x0159, -1, 600}, - {0x00e7, -1, 600}, {0x017b, -1, 600}, {0x00de, -1, 600}, - {0x014c, -1, 600}, {0x0154, -1, 600}, {0x015a, -1, 600}, - {0x010f, -1, 600}, {0x016a, -1, 600}, {0x016f, -1, 600}, - {0x00b3, -1, 600}, {0x00d2, -1, 600}, {0x00c0, -1, 600}, - {0x0102, -1, 600}, {0x00d7, -1, 600}, {0x00fa, -1, 600}, - {0x0164, -1, 600}, {0x2202, -1, 600}, {0x00ff, -1, 600}, - {0x0143, -1, 600}, {0x00ee, -1, 600}, {0x00ca, -1, 600}, - {0x00e4, -1, 600}, {0x00eb, -1, 600}, {0x0107, -1, 600}, - {0x0144, -1, 600}, {0x016b, -1, 600}, {0x0147, -1, 600}, - {0x00cd, -1, 600}, {0x00b1, -1, 600}, {0x00a6, -1, 600}, - {0x00ae, -1, 600}, {0x011e, -1, 600}, {0x0130, -1, 600}, - {0x2211, -1, 600}, {0x00c8, -1, 600}, {0x0155, -1, 600}, - {0x014d, -1, 600}, {0x0179, -1, 600}, {0x017d, -1, 600}, - {0x2265, -1, 600}, {0x00d0, -1, 600}, {0x00c7, -1, 600}, - {0x013c, -1, 600}, {0x0165, -1, 600}, {0x0119, -1, 600}, - {0x0172, -1, 600}, {0x00c1, -1, 600}, {0x00c4, -1, 600}, - {0x00e8, -1, 600}, {0x017a, -1, 600}, {0x012f, -1, 600}, - {0x00d3, -1, 600}, {0x00f3, -1, 600}, {0x0101, -1, 600}, - {0x015b, -1, 600}, {0x00ef, -1, 600}, {0x00d4, -1, 600}, - {0x00d9, -1, 600}, {0x0394, -1, 600}, {0x00fe, -1, 600}, - {0x00b2, -1, 600}, {0x00d6, -1, 600}, {0x03bc, -1, 600}, - {0x00ec, -1, 600}, {0x0151, -1, 600}, {0x0118, -1, 600}, - {0x0111, -1, 600}, {0x00be, -1, 600}, {0x015e, -1, 600}, - {0x013e, -1, 600}, {0x0136, -1, 600}, {0x0139, -1, 600}, - {0x2122, -1, 600}, {0x0117, -1, 600}, {0x00cc, -1, 600}, - {0x012a, -1, 600}, {0x013d, -1, 600}, {0x00bd, -1, 600}, - {0x2264, -1, 600}, {0x00f4, -1, 600}, {0x00f1, -1, 600}, - {0x0170, -1, 600}, {0x00c9, -1, 600}, {0x0113, -1, 600}, - {0x011f, -1, 600}, {0x00bc, -1, 600}, {0x0160, -1, 600}, - {0x0218, -1, 600}, {0x0150, -1, 600}, {0x00b0, -1, 600}, - {0x00f2, -1, 600}, {0x010c, -1, 600}, {0x00f9, -1, 600}, - {0x221a, -1, 600}, {0x010e, -1, 600}, {0x0157, -1, 600}, - {0x00d1, -1, 600}, {0x00f5, -1, 600}, {0x0156, -1, 600}, - {0x013b, -1, 600}, {0x00c3, -1, 600}, {0x0104, -1, 600}, - {0x00c5, -1, 600}, {0x00d5, -1, 600}, {0x017c, -1, 600}, - {0x011a, -1, 600}, {0x012e, -1, 600}, {0x0137, -1, 600}, - {0x2212, -1, 600}, {0x00ce, -1, 600}, {0x0148, -1, 600}, - {0x0163, -1, 600}, {0x00ac, -1, 600}, {0x00f6, -1, 600}, - {0x00fc, -1, 600}, {0x2260, -1, 600}, {0x0123, -1, 600}, - {0x00f0, -1, 600}, {0x017e, -1, 600}, {0x0146, -1, 600}, - {0x00b9, -1, 600}, {0x012b, -1, 600}, {0x20ac, -1, 600} -}; - -const static pdc_core_metric pdc_core_metric_02 = -{ - "Courier-Bold", /* FontName */ - 262177L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 1, /* isFixedPitch */ - -113, /* llx */ - -250, /* lly */ - 749, /* urx */ - 801, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 562, /* CapHeight */ - 439, /* xHeight */ - 629, /* Ascender */ - -157, /* Descender */ - 106, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_02, - -}; - -/* -------- Generated from Courier-Oblique.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_03[315] = -{ - {0x0020, 32, 600}, {0x0021, 33, 600}, {0x0022, 34, 600}, - {0x0023, 35, 600}, {0x0024, 36, 600}, {0x0025, 37, 600}, - {0x0026, 38, 600}, {0x2019, 39, 600}, {0x0028, 40, 600}, - {0x0029, 41, 600}, {0x002a, 42, 600}, {0x002b, 43, 600}, - {0x002c, 44, 600}, {0x002d, 45, 600}, {0x002e, 46, 600}, - {0x002f, 47, 600}, {0x0030, 48, 600}, {0x0031, 49, 600}, - {0x0032, 50, 600}, {0x0033, 51, 600}, {0x0034, 52, 600}, - {0x0035, 53, 600}, {0x0036, 54, 600}, {0x0037, 55, 600}, - {0x0038, 56, 600}, {0x0039, 57, 600}, {0x003a, 58, 600}, - {0x003b, 59, 600}, {0x003c, 60, 600}, {0x003d, 61, 600}, - {0x003e, 62, 600}, {0x003f, 63, 600}, {0x0040, 64, 600}, - {0x0041, 65, 600}, {0x0042, 66, 600}, {0x0043, 67, 600}, - {0x0044, 68, 600}, {0x0045, 69, 600}, {0x0046, 70, 600}, - {0x0047, 71, 600}, {0x0048, 72, 600}, {0x0049, 73, 600}, - {0x004a, 74, 600}, {0x004b, 75, 600}, {0x004c, 76, 600}, - {0x004d, 77, 600}, {0x004e, 78, 600}, {0x004f, 79, 600}, - {0x0050, 80, 600}, {0x0051, 81, 600}, {0x0052, 82, 600}, - {0x0053, 83, 600}, {0x0054, 84, 600}, {0x0055, 85, 600}, - {0x0056, 86, 600}, {0x0057, 87, 600}, {0x0058, 88, 600}, - {0x0059, 89, 600}, {0x005a, 90, 600}, {0x005b, 91, 600}, - {0x005c, 92, 600}, {0x005d, 93, 600}, {0x005e, 94, 600}, - {0x005f, 95, 600}, {0x2018, 96, 600}, {0x0061, 97, 600}, - {0x0062, 98, 600}, {0x0063, 99, 600}, {0x0064, 100, 600}, - {0x0065, 101, 600}, {0x0066, 102, 600}, {0x0067, 103, 600}, - {0x0068, 104, 600}, {0x0069, 105, 600}, {0x006a, 106, 600}, - {0x006b, 107, 600}, {0x006c, 108, 600}, {0x006d, 109, 600}, - {0x006e, 110, 600}, {0x006f, 111, 600}, {0x0070, 112, 600}, - {0x0071, 113, 600}, {0x0072, 114, 600}, {0x0073, 115, 600}, - {0x0074, 116, 600}, {0x0075, 117, 600}, {0x0076, 118, 600}, - {0x0077, 119, 600}, {0x0078, 120, 600}, {0x0079, 121, 600}, - {0x007a, 122, 600}, {0x007b, 123, 600}, {0x007c, 124, 600}, - {0x007d, 125, 600}, {0x007e, 126, 600}, {0x00a1, 161, 600}, - {0x00a2, 162, 600}, {0x00a3, 163, 600}, {0x2044, 164, 600}, - {0x00a5, 165, 600}, {0x0192, 166, 600}, {0x00a7, 167, 600}, - {0x00a4, 168, 600}, {0x0027, 169, 600}, {0x201c, 170, 600}, - {0x00ab, 171, 600}, {0x2039, 172, 600}, {0x203a, 173, 600}, - {0xfb01, 174, 600}, {0xfb02, 175, 600}, {0x2013, 177, 600}, - {0x2020, 178, 600}, {0x2021, 179, 600}, {0x00b7, 180, 600}, - {0x00b6, 182, 600}, {0x2022, 183, 600}, {0x201a, 184, 600}, - {0x201e, 185, 600}, {0x201d, 186, 600}, {0x00bb, 187, 600}, - {0x2026, 188, 600}, {0x2030, 189, 600}, {0x00bf, 191, 600}, - {0x0060, 193, 600}, {0x00b4, 194, 600}, {0x02c6, 195, 600}, - {0x02dc, 196, 600}, {0x00af, 197, 600}, {0x02d8, 198, 600}, - {0x02d9, 199, 600}, {0x00a8, 200, 600}, {0x02da, 202, 600}, - {0x00b8, 203, 600}, {0x02dd, 205, 600}, {0x02db, 206, 600}, - {0x02c7, 207, 600}, {0x2014, 208, 600}, {0x00c6, 225, 600}, - {0x00aa, 227, 600}, {0x0141, 232, 600}, {0x00d8, 233, 600}, - {0x0152, 234, 600}, {0x00ba, 235, 600}, {0x00e6, 241, 600}, - {0x0131, 245, 600}, {0x0142, 248, 600}, {0x00f8, 249, 600}, - {0x0153, 250, 600}, {0x00df, 251, 600}, {0x00cf, -1, 600}, - {0x00e9, -1, 600}, {0x0103, -1, 600}, {0x0171, -1, 600}, - {0x011b, -1, 600}, {0x0178, -1, 600}, {0x00f7, -1, 600}, - {0x00dd, -1, 600}, {0x00c2, -1, 600}, {0x00e1, -1, 600}, - {0x00db, -1, 600}, {0x00fd, -1, 600}, {0x0219, -1, 600}, - {0x00ea, -1, 600}, {0x016e, -1, 600}, {0x00dc, -1, 600}, - {0x0105, -1, 600}, {0x00da, -1, 600}, {0x0173, -1, 600}, - {0x00cb, -1, 600}, {0x0110, -1, 600}, {0xf6c3, -1, 600}, - {0x00a9, -1, 600}, {0x0112, -1, 600}, {0x010d, -1, 600}, - {0x00e5, -1, 600}, {0x0145, -1, 600}, {0x013a, -1, 600}, - {0x00e0, -1, 600}, {0x0162, -1, 600}, {0x0106, -1, 600}, - {0x00e3, -1, 600}, {0x0116, -1, 600}, {0x0161, -1, 600}, - {0x015f, -1, 600}, {0x00ed, -1, 600}, {0x25ca, -1, 600}, - {0x0158, -1, 600}, {0x0122, -1, 600}, {0x00fb, -1, 600}, - {0x00e2, -1, 600}, {0x0100, -1, 600}, {0x0159, -1, 600}, - {0x00e7, -1, 600}, {0x017b, -1, 600}, {0x00de, -1, 600}, - {0x014c, -1, 600}, {0x0154, -1, 600}, {0x015a, -1, 600}, - {0x010f, -1, 600}, {0x016a, -1, 600}, {0x016f, -1, 600}, - {0x00b3, -1, 600}, {0x00d2, -1, 600}, {0x00c0, -1, 600}, - {0x0102, -1, 600}, {0x00d7, -1, 600}, {0x00fa, -1, 600}, - {0x0164, -1, 600}, {0x2202, -1, 600}, {0x00ff, -1, 600}, - {0x0143, -1, 600}, {0x00ee, -1, 600}, {0x00ca, -1, 600}, - {0x00e4, -1, 600}, {0x00eb, -1, 600}, {0x0107, -1, 600}, - {0x0144, -1, 600}, {0x016b, -1, 600}, {0x0147, -1, 600}, - {0x00cd, -1, 600}, {0x00b1, -1, 600}, {0x00a6, -1, 600}, - {0x00ae, -1, 600}, {0x011e, -1, 600}, {0x0130, -1, 600}, - {0x2211, -1, 600}, {0x00c8, -1, 600}, {0x0155, -1, 600}, - {0x014d, -1, 600}, {0x0179, -1, 600}, {0x017d, -1, 600}, - {0x2265, -1, 600}, {0x00d0, -1, 600}, {0x00c7, -1, 600}, - {0x013c, -1, 600}, {0x0165, -1, 600}, {0x0119, -1, 600}, - {0x0172, -1, 600}, {0x00c1, -1, 600}, {0x00c4, -1, 600}, - {0x00e8, -1, 600}, {0x017a, -1, 600}, {0x012f, -1, 600}, - {0x00d3, -1, 600}, {0x00f3, -1, 600}, {0x0101, -1, 600}, - {0x015b, -1, 600}, {0x00ef, -1, 600}, {0x00d4, -1, 600}, - {0x00d9, -1, 600}, {0x0394, -1, 600}, {0x00fe, -1, 600}, - {0x00b2, -1, 600}, {0x00d6, -1, 600}, {0x03bc, -1, 600}, - {0x00ec, -1, 600}, {0x0151, -1, 600}, {0x0118, -1, 600}, - {0x0111, -1, 600}, {0x00be, -1, 600}, {0x015e, -1, 600}, - {0x013e, -1, 600}, {0x0136, -1, 600}, {0x0139, -1, 600}, - {0x2122, -1, 600}, {0x0117, -1, 600}, {0x00cc, -1, 600}, - {0x012a, -1, 600}, {0x013d, -1, 600}, {0x00bd, -1, 600}, - {0x2264, -1, 600}, {0x00f4, -1, 600}, {0x00f1, -1, 600}, - {0x0170, -1, 600}, {0x00c9, -1, 600}, {0x0113, -1, 600}, - {0x011f, -1, 600}, {0x00bc, -1, 600}, {0x0160, -1, 600}, - {0x0218, -1, 600}, {0x0150, -1, 600}, {0x00b0, -1, 600}, - {0x00f2, -1, 600}, {0x010c, -1, 600}, {0x00f9, -1, 600}, - {0x221a, -1, 600}, {0x010e, -1, 600}, {0x0157, -1, 600}, - {0x00d1, -1, 600}, {0x00f5, -1, 600}, {0x0156, -1, 600}, - {0x013b, -1, 600}, {0x00c3, -1, 600}, {0x0104, -1, 600}, - {0x00c5, -1, 600}, {0x00d5, -1, 600}, {0x017c, -1, 600}, - {0x011a, -1, 600}, {0x012e, -1, 600}, {0x0137, -1, 600}, - {0x2212, -1, 600}, {0x00ce, -1, 600}, {0x0148, -1, 600}, - {0x0163, -1, 600}, {0x00ac, -1, 600}, {0x00f6, -1, 600}, - {0x00fc, -1, 600}, {0x2260, -1, 600}, {0x0123, -1, 600}, - {0x00f0, -1, 600}, {0x017e, -1, 600}, {0x0146, -1, 600}, - {0x00b9, -1, 600}, {0x012b, -1, 600}, {0x20ac, -1, 600} -}; - -const static pdc_core_metric pdc_core_metric_03 = -{ - "Courier-Oblique", /* FontName */ - 97L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -12.0, /* ItalicAngle */ - 1, /* isFixedPitch */ - -27, /* llx */ - -250, /* lly */ - 849, /* urx */ - 805, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 562, /* CapHeight */ - 426, /* xHeight */ - 629, /* Ascender */ - -157, /* Descender */ - 51, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_03, - -}; - -/* -------- Generated from Courier-BoldOblique.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_04[315] = -{ - {0x0020, 32, 600}, {0x0021, 33, 600}, {0x0022, 34, 600}, - {0x0023, 35, 600}, {0x0024, 36, 600}, {0x0025, 37, 600}, - {0x0026, 38, 600}, {0x2019, 39, 600}, {0x0028, 40, 600}, - {0x0029, 41, 600}, {0x002a, 42, 600}, {0x002b, 43, 600}, - {0x002c, 44, 600}, {0x002d, 45, 600}, {0x002e, 46, 600}, - {0x002f, 47, 600}, {0x0030, 48, 600}, {0x0031, 49, 600}, - {0x0032, 50, 600}, {0x0033, 51, 600}, {0x0034, 52, 600}, - {0x0035, 53, 600}, {0x0036, 54, 600}, {0x0037, 55, 600}, - {0x0038, 56, 600}, {0x0039, 57, 600}, {0x003a, 58, 600}, - {0x003b, 59, 600}, {0x003c, 60, 600}, {0x003d, 61, 600}, - {0x003e, 62, 600}, {0x003f, 63, 600}, {0x0040, 64, 600}, - {0x0041, 65, 600}, {0x0042, 66, 600}, {0x0043, 67, 600}, - {0x0044, 68, 600}, {0x0045, 69, 600}, {0x0046, 70, 600}, - {0x0047, 71, 600}, {0x0048, 72, 600}, {0x0049, 73, 600}, - {0x004a, 74, 600}, {0x004b, 75, 600}, {0x004c, 76, 600}, - {0x004d, 77, 600}, {0x004e, 78, 600}, {0x004f, 79, 600}, - {0x0050, 80, 600}, {0x0051, 81, 600}, {0x0052, 82, 600}, - {0x0053, 83, 600}, {0x0054, 84, 600}, {0x0055, 85, 600}, - {0x0056, 86, 600}, {0x0057, 87, 600}, {0x0058, 88, 600}, - {0x0059, 89, 600}, {0x005a, 90, 600}, {0x005b, 91, 600}, - {0x005c, 92, 600}, {0x005d, 93, 600}, {0x005e, 94, 600}, - {0x005f, 95, 600}, {0x2018, 96, 600}, {0x0061, 97, 600}, - {0x0062, 98, 600}, {0x0063, 99, 600}, {0x0064, 100, 600}, - {0x0065, 101, 600}, {0x0066, 102, 600}, {0x0067, 103, 600}, - {0x0068, 104, 600}, {0x0069, 105, 600}, {0x006a, 106, 600}, - {0x006b, 107, 600}, {0x006c, 108, 600}, {0x006d, 109, 600}, - {0x006e, 110, 600}, {0x006f, 111, 600}, {0x0070, 112, 600}, - {0x0071, 113, 600}, {0x0072, 114, 600}, {0x0073, 115, 600}, - {0x0074, 116, 600}, {0x0075, 117, 600}, {0x0076, 118, 600}, - {0x0077, 119, 600}, {0x0078, 120, 600}, {0x0079, 121, 600}, - {0x007a, 122, 600}, {0x007b, 123, 600}, {0x007c, 124, 600}, - {0x007d, 125, 600}, {0x007e, 126, 600}, {0x00a1, 161, 600}, - {0x00a2, 162, 600}, {0x00a3, 163, 600}, {0x2044, 164, 600}, - {0x00a5, 165, 600}, {0x0192, 166, 600}, {0x00a7, 167, 600}, - {0x00a4, 168, 600}, {0x0027, 169, 600}, {0x201c, 170, 600}, - {0x00ab, 171, 600}, {0x2039, 172, 600}, {0x203a, 173, 600}, - {0xfb01, 174, 600}, {0xfb02, 175, 600}, {0x2013, 177, 600}, - {0x2020, 178, 600}, {0x2021, 179, 600}, {0x00b7, 180, 600}, - {0x00b6, 182, 600}, {0x2022, 183, 600}, {0x201a, 184, 600}, - {0x201e, 185, 600}, {0x201d, 186, 600}, {0x00bb, 187, 600}, - {0x2026, 188, 600}, {0x2030, 189, 600}, {0x00bf, 191, 600}, - {0x0060, 193, 600}, {0x00b4, 194, 600}, {0x02c6, 195, 600}, - {0x02dc, 196, 600}, {0x00af, 197, 600}, {0x02d8, 198, 600}, - {0x02d9, 199, 600}, {0x00a8, 200, 600}, {0x02da, 202, 600}, - {0x00b8, 203, 600}, {0x02dd, 205, 600}, {0x02db, 206, 600}, - {0x02c7, 207, 600}, {0x2014, 208, 600}, {0x00c6, 225, 600}, - {0x00aa, 227, 600}, {0x0141, 232, 600}, {0x00d8, 233, 600}, - {0x0152, 234, 600}, {0x00ba, 235, 600}, {0x00e6, 241, 600}, - {0x0131, 245, 600}, {0x0142, 248, 600}, {0x00f8, 249, 600}, - {0x0153, 250, 600}, {0x00df, 251, 600}, {0x00cf, -1, 600}, - {0x00e9, -1, 600}, {0x0103, -1, 600}, {0x0171, -1, 600}, - {0x011b, -1, 600}, {0x0178, -1, 600}, {0x00f7, -1, 600}, - {0x00dd, -1, 600}, {0x00c2, -1, 600}, {0x00e1, -1, 600}, - {0x00db, -1, 600}, {0x00fd, -1, 600}, {0x0219, -1, 600}, - {0x00ea, -1, 600}, {0x016e, -1, 600}, {0x00dc, -1, 600}, - {0x0105, -1, 600}, {0x00da, -1, 600}, {0x0173, -1, 600}, - {0x00cb, -1, 600}, {0x0110, -1, 600}, {0xf6c3, -1, 600}, - {0x00a9, -1, 600}, {0x0112, -1, 600}, {0x010d, -1, 600}, - {0x00e5, -1, 600}, {0x0145, -1, 600}, {0x013a, -1, 600}, - {0x00e0, -1, 600}, {0x0162, -1, 600}, {0x0106, -1, 600}, - {0x00e3, -1, 600}, {0x0116, -1, 600}, {0x0161, -1, 600}, - {0x015f, -1, 600}, {0x00ed, -1, 600}, {0x25ca, -1, 600}, - {0x0158, -1, 600}, {0x0122, -1, 600}, {0x00fb, -1, 600}, - {0x00e2, -1, 600}, {0x0100, -1, 600}, {0x0159, -1, 600}, - {0x00e7, -1, 600}, {0x017b, -1, 600}, {0x00de, -1, 600}, - {0x014c, -1, 600}, {0x0154, -1, 600}, {0x015a, -1, 600}, - {0x010f, -1, 600}, {0x016a, -1, 600}, {0x016f, -1, 600}, - {0x00b3, -1, 600}, {0x00d2, -1, 600}, {0x00c0, -1, 600}, - {0x0102, -1, 600}, {0x00d7, -1, 600}, {0x00fa, -1, 600}, - {0x0164, -1, 600}, {0x2202, -1, 600}, {0x00ff, -1, 600}, - {0x0143, -1, 600}, {0x00ee, -1, 600}, {0x00ca, -1, 600}, - {0x00e4, -1, 600}, {0x00eb, -1, 600}, {0x0107, -1, 600}, - {0x0144, -1, 600}, {0x016b, -1, 600}, {0x0147, -1, 600}, - {0x00cd, -1, 600}, {0x00b1, -1, 600}, {0x00a6, -1, 600}, - {0x00ae, -1, 600}, {0x011e, -1, 600}, {0x0130, -1, 600}, - {0x2211, -1, 600}, {0x00c8, -1, 600}, {0x0155, -1, 600}, - {0x014d, -1, 600}, {0x0179, -1, 600}, {0x017d, -1, 600}, - {0x2265, -1, 600}, {0x00d0, -1, 600}, {0x00c7, -1, 600}, - {0x013c, -1, 600}, {0x0165, -1, 600}, {0x0119, -1, 600}, - {0x0172, -1, 600}, {0x00c1, -1, 600}, {0x00c4, -1, 600}, - {0x00e8, -1, 600}, {0x017a, -1, 600}, {0x012f, -1, 600}, - {0x00d3, -1, 600}, {0x00f3, -1, 600}, {0x0101, -1, 600}, - {0x015b, -1, 600}, {0x00ef, -1, 600}, {0x00d4, -1, 600}, - {0x00d9, -1, 600}, {0x0394, -1, 600}, {0x00fe, -1, 600}, - {0x00b2, -1, 600}, {0x00d6, -1, 600}, {0x03bc, -1, 600}, - {0x00ec, -1, 600}, {0x0151, -1, 600}, {0x0118, -1, 600}, - {0x0111, -1, 600}, {0x00be, -1, 600}, {0x015e, -1, 600}, - {0x013e, -1, 600}, {0x0136, -1, 600}, {0x0139, -1, 600}, - {0x2122, -1, 600}, {0x0117, -1, 600}, {0x00cc, -1, 600}, - {0x012a, -1, 600}, {0x013d, -1, 600}, {0x00bd, -1, 600}, - {0x2264, -1, 600}, {0x00f4, -1, 600}, {0x00f1, -1, 600}, - {0x0170, -1, 600}, {0x00c9, -1, 600}, {0x0113, -1, 600}, - {0x011f, -1, 600}, {0x00bc, -1, 600}, {0x0160, -1, 600}, - {0x0218, -1, 600}, {0x0150, -1, 600}, {0x00b0, -1, 600}, - {0x00f2, -1, 600}, {0x010c, -1, 600}, {0x00f9, -1, 600}, - {0x221a, -1, 600}, {0x010e, -1, 600}, {0x0157, -1, 600}, - {0x00d1, -1, 600}, {0x00f5, -1, 600}, {0x0156, -1, 600}, - {0x013b, -1, 600}, {0x00c3, -1, 600}, {0x0104, -1, 600}, - {0x00c5, -1, 600}, {0x00d5, -1, 600}, {0x017c, -1, 600}, - {0x011a, -1, 600}, {0x012e, -1, 600}, {0x0137, -1, 600}, - {0x2212, -1, 600}, {0x00ce, -1, 600}, {0x0148, -1, 600}, - {0x0163, -1, 600}, {0x00ac, -1, 600}, {0x00f6, -1, 600}, - {0x00fc, -1, 600}, {0x2260, -1, 600}, {0x0123, -1, 600}, - {0x00f0, -1, 600}, {0x017e, -1, 600}, {0x0146, -1, 600}, - {0x00b9, -1, 600}, {0x012b, -1, 600}, {0x20ac, -1, 600} -}; - -const static pdc_core_metric pdc_core_metric_04 = -{ - "Courier-BoldOblique", /* FontName */ - 262241L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -12.0, /* ItalicAngle */ - 1, /* isFixedPitch */ - -57, /* llx */ - -250, /* lly */ - 869, /* urx */ - 801, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 562, /* CapHeight */ - 439, /* xHeight */ - 629, /* Ascender */ - -157, /* Descender */ - 106, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_04, - -}; - -/* -------- Generated from Helvetica.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_05[315] = -{ - {0x0020, 32, 278}, {0x0021, 33, 278}, {0x0022, 34, 355}, - {0x0023, 35, 556}, {0x0024, 36, 556}, {0x0025, 37, 889}, - {0x0026, 38, 667}, {0x2019, 39, 222}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 389}, {0x002b, 43, 584}, - {0x002c, 44, 278}, {0x002d, 45, 333}, {0x002e, 46, 278}, - {0x002f, 47, 278}, {0x0030, 48, 556}, {0x0031, 49, 556}, - {0x0032, 50, 556}, {0x0033, 51, 556}, {0x0034, 52, 556}, - {0x0035, 53, 556}, {0x0036, 54, 556}, {0x0037, 55, 556}, - {0x0038, 56, 556}, {0x0039, 57, 556}, {0x003a, 58, 278}, - {0x003b, 59, 278}, {0x003c, 60, 584}, {0x003d, 61, 584}, - {0x003e, 62, 584}, {0x003f, 63, 556}, {0x0040, 64, 1015}, - {0x0041, 65, 667}, {0x0042, 66, 667}, {0x0043, 67, 722}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 611}, - {0x0047, 71, 778}, {0x0048, 72, 722}, {0x0049, 73, 278}, - {0x004a, 74, 500}, {0x004b, 75, 667}, {0x004c, 76, 556}, - {0x004d, 77, 833}, {0x004e, 78, 722}, {0x004f, 79, 778}, - {0x0050, 80, 667}, {0x0051, 81, 778}, {0x0052, 82, 722}, - {0x0053, 83, 667}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 667}, {0x0057, 87, 944}, {0x0058, 88, 667}, - {0x0059, 89, 667}, {0x005a, 90, 611}, {0x005b, 91, 278}, - {0x005c, 92, 278}, {0x005d, 93, 278}, {0x005e, 94, 469}, - {0x005f, 95, 556}, {0x2018, 96, 222}, {0x0061, 97, 556}, - {0x0062, 98, 556}, {0x0063, 99, 500}, {0x0064, 100, 556}, - {0x0065, 101, 556}, {0x0066, 102, 278}, {0x0067, 103, 556}, - {0x0068, 104, 556}, {0x0069, 105, 222}, {0x006a, 106, 222}, - {0x006b, 107, 500}, {0x006c, 108, 222}, {0x006d, 109, 833}, - {0x006e, 110, 556}, {0x006f, 111, 556}, {0x0070, 112, 556}, - {0x0071, 113, 556}, {0x0072, 114, 333}, {0x0073, 115, 500}, - {0x0074, 116, 278}, {0x0075, 117, 556}, {0x0076, 118, 500}, - {0x0077, 119, 722}, {0x0078, 120, 500}, {0x0079, 121, 500}, - {0x007a, 122, 500}, {0x007b, 123, 334}, {0x007c, 124, 260}, - {0x007d, 125, 334}, {0x007e, 126, 584}, {0x00a1, 161, 333}, - {0x00a2, 162, 556}, {0x00a3, 163, 556}, {0x2044, 164, 167}, - {0x00a5, 165, 556}, {0x0192, 166, 556}, {0x00a7, 167, 556}, - {0x00a4, 168, 556}, {0x0027, 169, 191}, {0x201c, 170, 333}, - {0x00ab, 171, 556}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 500}, {0xfb02, 175, 500}, {0x2013, 177, 556}, - {0x2020, 178, 556}, {0x2021, 179, 556}, {0x00b7, 180, 278}, - {0x00b6, 182, 537}, {0x2022, 183, 350}, {0x201a, 184, 222}, - {0x201e, 185, 333}, {0x201d, 186, 333}, {0x00bb, 187, 556}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 611}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 1000}, - {0x00aa, 227, 370}, {0x0141, 232, 556}, {0x00d8, 233, 778}, - {0x0152, 234, 1000}, {0x00ba, 235, 365}, {0x00e6, 241, 889}, - {0x0131, 245, 278}, {0x0142, 248, 222}, {0x00f8, 249, 611}, - {0x0153, 250, 944}, {0x00df, 251, 611}, {0x00cf, -1, 278}, - {0x00e9, -1, 556}, {0x0103, -1, 556}, {0x0171, -1, 556}, - {0x011b, -1, 556}, {0x0178, -1, 667}, {0x00f7, -1, 584}, - {0x00dd, -1, 667}, {0x00c2, -1, 667}, {0x00e1, -1, 556}, - {0x00db, -1, 722}, {0x00fd, -1, 500}, {0x0219, -1, 500}, - {0x00ea, -1, 556}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 556}, {0x00da, -1, 722}, {0x0173, -1, 556}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 737}, {0x0112, -1, 667}, {0x010d, -1, 500}, - {0x00e5, -1, 556}, {0x0145, -1, 722}, {0x013a, -1, 222}, - {0x00e0, -1, 556}, {0x0162, -1, 611}, {0x0106, -1, 722}, - {0x00e3, -1, 556}, {0x0116, -1, 667}, {0x0161, -1, 500}, - {0x015f, -1, 500}, {0x00ed, -1, 278}, {0x25ca, -1, 471}, - {0x0158, -1, 722}, {0x0122, -1, 778}, {0x00fb, -1, 556}, - {0x00e2, -1, 556}, {0x0100, -1, 667}, {0x0159, -1, 333}, - {0x00e7, -1, 500}, {0x017b, -1, 611}, {0x00de, -1, 667}, - {0x014c, -1, 778}, {0x0154, -1, 722}, {0x015a, -1, 667}, - {0x010f, -1, 643}, {0x016a, -1, 722}, {0x016f, -1, 556}, - {0x00b3, -1, 333}, {0x00d2, -1, 778}, {0x00c0, -1, 667}, - {0x0102, -1, 667}, {0x00d7, -1, 584}, {0x00fa, -1, 556}, - {0x0164, -1, 611}, {0x2202, -1, 476}, {0x00ff, -1, 500}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 556}, {0x00eb, -1, 556}, {0x0107, -1, 500}, - {0x0144, -1, 556}, {0x016b, -1, 556}, {0x0147, -1, 722}, - {0x00cd, -1, 278}, {0x00b1, -1, 584}, {0x00a6, -1, 260}, - {0x00ae, -1, 737}, {0x011e, -1, 778}, {0x0130, -1, 278}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 333}, - {0x014d, -1, 556}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 722}, - {0x013c, -1, 222}, {0x0165, -1, 317}, {0x0119, -1, 556}, - {0x0172, -1, 722}, {0x00c1, -1, 667}, {0x00c4, -1, 667}, - {0x00e8, -1, 556}, {0x017a, -1, 500}, {0x012f, -1, 222}, - {0x00d3, -1, 778}, {0x00f3, -1, 556}, {0x0101, -1, 556}, - {0x015b, -1, 500}, {0x00ef, -1, 278}, {0x00d4, -1, 778}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 556}, - {0x00b2, -1, 333}, {0x00d6, -1, 778}, {0x03bc, -1, 556}, - {0x00ec, -1, 278}, {0x0151, -1, 556}, {0x0118, -1, 667}, - {0x0111, -1, 556}, {0x00be, -1, 834}, {0x015e, -1, 667}, - {0x013e, -1, 299}, {0x0136, -1, 667}, {0x0139, -1, 556}, - {0x2122, -1, 1000}, {0x0117, -1, 556}, {0x00cc, -1, 278}, - {0x012a, -1, 278}, {0x013d, -1, 556}, {0x00bd, -1, 834}, - {0x2264, -1, 549}, {0x00f4, -1, 556}, {0x00f1, -1, 556}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 556}, - {0x011f, -1, 556}, {0x00bc, -1, 834}, {0x0160, -1, 667}, - {0x0218, -1, 667}, {0x0150, -1, 778}, {0x00b0, -1, 400}, - {0x00f2, -1, 556}, {0x010c, -1, 722}, {0x00f9, -1, 556}, - {0x221a, -1, 453}, {0x010e, -1, 722}, {0x0157, -1, 333}, - {0x00d1, -1, 722}, {0x00f5, -1, 556}, {0x0156, -1, 722}, - {0x013b, -1, 556}, {0x00c3, -1, 667}, {0x0104, -1, 667}, - {0x00c5, -1, 667}, {0x00d5, -1, 778}, {0x017c, -1, 500}, - {0x011a, -1, 667}, {0x012e, -1, 278}, {0x0137, -1, 500}, - {0x2212, -1, 584}, {0x00ce, -1, 278}, {0x0148, -1, 556}, - {0x0163, -1, 278}, {0x00ac, -1, 584}, {0x00f6, -1, 556}, - {0x00fc, -1, 556}, {0x2260, -1, 549}, {0x0123, -1, 556}, - {0x00f0, -1, 556}, {0x017e, -1, 500}, {0x0146, -1, 556}, - {0x00b9, -1, 333}, {0x012b, -1, 278}, {0x20ac, -1, 556} -}; - - -const static pdc_core_metric pdc_core_metric_05 = -{ - "Helvetica", /* FontName */ - 32L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -166, /* llx */ - -225, /* lly */ - 1000, /* urx */ - 931, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 718, /* CapHeight */ - 523, /* xHeight */ - 718, /* Ascender */ - -207, /* Descender */ - 88, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_05, - -}; - -/* -------- Generated from Helvetica-Bold.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_06[315] = -{ - {0x0020, 32, 278}, {0x0021, 33, 333}, {0x0022, 34, 474}, - {0x0023, 35, 556}, {0x0024, 36, 556}, {0x0025, 37, 889}, - {0x0026, 38, 722}, {0x2019, 39, 278}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 389}, {0x002b, 43, 584}, - {0x002c, 44, 278}, {0x002d, 45, 333}, {0x002e, 46, 278}, - {0x002f, 47, 278}, {0x0030, 48, 556}, {0x0031, 49, 556}, - {0x0032, 50, 556}, {0x0033, 51, 556}, {0x0034, 52, 556}, - {0x0035, 53, 556}, {0x0036, 54, 556}, {0x0037, 55, 556}, - {0x0038, 56, 556}, {0x0039, 57, 556}, {0x003a, 58, 333}, - {0x003b, 59, 333}, {0x003c, 60, 584}, {0x003d, 61, 584}, - {0x003e, 62, 584}, {0x003f, 63, 611}, {0x0040, 64, 975}, - {0x0041, 65, 722}, {0x0042, 66, 722}, {0x0043, 67, 722}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 611}, - {0x0047, 71, 778}, {0x0048, 72, 722}, {0x0049, 73, 278}, - {0x004a, 74, 556}, {0x004b, 75, 722}, {0x004c, 76, 611}, - {0x004d, 77, 833}, {0x004e, 78, 722}, {0x004f, 79, 778}, - {0x0050, 80, 667}, {0x0051, 81, 778}, {0x0052, 82, 722}, - {0x0053, 83, 667}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 667}, {0x0057, 87, 944}, {0x0058, 88, 667}, - {0x0059, 89, 667}, {0x005a, 90, 611}, {0x005b, 91, 333}, - {0x005c, 92, 278}, {0x005d, 93, 333}, {0x005e, 94, 584}, - {0x005f, 95, 556}, {0x2018, 96, 278}, {0x0061, 97, 556}, - {0x0062, 98, 611}, {0x0063, 99, 556}, {0x0064, 100, 611}, - {0x0065, 101, 556}, {0x0066, 102, 333}, {0x0067, 103, 611}, - {0x0068, 104, 611}, {0x0069, 105, 278}, {0x006a, 106, 278}, - {0x006b, 107, 556}, {0x006c, 108, 278}, {0x006d, 109, 889}, - {0x006e, 110, 611}, {0x006f, 111, 611}, {0x0070, 112, 611}, - {0x0071, 113, 611}, {0x0072, 114, 389}, {0x0073, 115, 556}, - {0x0074, 116, 333}, {0x0075, 117, 611}, {0x0076, 118, 556}, - {0x0077, 119, 778}, {0x0078, 120, 556}, {0x0079, 121, 556}, - {0x007a, 122, 500}, {0x007b, 123, 389}, {0x007c, 124, 280}, - {0x007d, 125, 389}, {0x007e, 126, 584}, {0x00a1, 161, 333}, - {0x00a2, 162, 556}, {0x00a3, 163, 556}, {0x2044, 164, 167}, - {0x00a5, 165, 556}, {0x0192, 166, 556}, {0x00a7, 167, 556}, - {0x00a4, 168, 556}, {0x0027, 169, 238}, {0x201c, 170, 500}, - {0x00ab, 171, 556}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 611}, {0xfb02, 175, 611}, {0x2013, 177, 556}, - {0x2020, 178, 556}, {0x2021, 179, 556}, {0x00b7, 180, 278}, - {0x00b6, 182, 556}, {0x2022, 183, 350}, {0x201a, 184, 278}, - {0x201e, 185, 500}, {0x201d, 186, 500}, {0x00bb, 187, 556}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 611}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 1000}, - {0x00aa, 227, 370}, {0x0141, 232, 611}, {0x00d8, 233, 778}, - {0x0152, 234, 1000}, {0x00ba, 235, 365}, {0x00e6, 241, 889}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 611}, - {0x0153, 250, 944}, {0x00df, 251, 611}, {0x00cf, -1, 278}, - {0x00e9, -1, 556}, {0x0103, -1, 556}, {0x0171, -1, 611}, - {0x011b, -1, 556}, {0x0178, -1, 667}, {0x00f7, -1, 584}, - {0x00dd, -1, 667}, {0x00c2, -1, 722}, {0x00e1, -1, 556}, - {0x00db, -1, 722}, {0x00fd, -1, 556}, {0x0219, -1, 556}, - {0x00ea, -1, 556}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 556}, {0x00da, -1, 722}, {0x0173, -1, 611}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 737}, {0x0112, -1, 667}, {0x010d, -1, 556}, - {0x00e5, -1, 556}, {0x0145, -1, 722}, {0x013a, -1, 278}, - {0x00e0, -1, 556}, {0x0162, -1, 611}, {0x0106, -1, 722}, - {0x00e3, -1, 556}, {0x0116, -1, 667}, {0x0161, -1, 556}, - {0x015f, -1, 556}, {0x00ed, -1, 278}, {0x25ca, -1, 494}, - {0x0158, -1, 722}, {0x0122, -1, 778}, {0x00fb, -1, 611}, - {0x00e2, -1, 556}, {0x0100, -1, 722}, {0x0159, -1, 389}, - {0x00e7, -1, 556}, {0x017b, -1, 611}, {0x00de, -1, 667}, - {0x014c, -1, 778}, {0x0154, -1, 722}, {0x015a, -1, 667}, - {0x010f, -1, 743}, {0x016a, -1, 722}, {0x016f, -1, 611}, - {0x00b3, -1, 333}, {0x00d2, -1, 778}, {0x00c0, -1, 722}, - {0x0102, -1, 722}, {0x00d7, -1, 584}, {0x00fa, -1, 611}, - {0x0164, -1, 611}, {0x2202, -1, 494}, {0x00ff, -1, 556}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 556}, {0x00eb, -1, 556}, {0x0107, -1, 556}, - {0x0144, -1, 611}, {0x016b, -1, 611}, {0x0147, -1, 722}, - {0x00cd, -1, 278}, {0x00b1, -1, 584}, {0x00a6, -1, 280}, - {0x00ae, -1, 737}, {0x011e, -1, 778}, {0x0130, -1, 278}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 389}, - {0x014d, -1, 611}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 722}, - {0x013c, -1, 278}, {0x0165, -1, 389}, {0x0119, -1, 556}, - {0x0172, -1, 722}, {0x00c1, -1, 722}, {0x00c4, -1, 722}, - {0x00e8, -1, 556}, {0x017a, -1, 500}, {0x012f, -1, 278}, - {0x00d3, -1, 778}, {0x00f3, -1, 611}, {0x0101, -1, 556}, - {0x015b, -1, 556}, {0x00ef, -1, 278}, {0x00d4, -1, 778}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 611}, - {0x00b2, -1, 333}, {0x00d6, -1, 778}, {0x03bc, -1, 611}, - {0x00ec, -1, 278}, {0x0151, -1, 611}, {0x0118, -1, 667}, - {0x0111, -1, 611}, {0x00be, -1, 834}, {0x015e, -1, 667}, - {0x013e, -1, 400}, {0x0136, -1, 722}, {0x0139, -1, 611}, - {0x2122, -1, 1000}, {0x0117, -1, 556}, {0x00cc, -1, 278}, - {0x012a, -1, 278}, {0x013d, -1, 611}, {0x00bd, -1, 834}, - {0x2264, -1, 549}, {0x00f4, -1, 611}, {0x00f1, -1, 611}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 556}, - {0x011f, -1, 611}, {0x00bc, -1, 834}, {0x0160, -1, 667}, - {0x0218, -1, 667}, {0x0150, -1, 778}, {0x00b0, -1, 400}, - {0x00f2, -1, 611}, {0x010c, -1, 722}, {0x00f9, -1, 611}, - {0x221a, -1, 549}, {0x010e, -1, 722}, {0x0157, -1, 389}, - {0x00d1, -1, 722}, {0x00f5, -1, 611}, {0x0156, -1, 722}, - {0x013b, -1, 611}, {0x00c3, -1, 722}, {0x0104, -1, 722}, - {0x00c5, -1, 722}, {0x00d5, -1, 778}, {0x017c, -1, 500}, - {0x011a, -1, 667}, {0x012e, -1, 278}, {0x0137, -1, 556}, - {0x2212, -1, 584}, {0x00ce, -1, 278}, {0x0148, -1, 611}, - {0x0163, -1, 333}, {0x00ac, -1, 584}, {0x00f6, -1, 611}, - {0x00fc, -1, 611}, {0x2260, -1, 549}, {0x0123, -1, 611}, - {0x00f0, -1, 611}, {0x017e, -1, 500}, {0x0146, -1, 611}, - {0x00b9, -1, 333}, {0x012b, -1, 278}, {0x20ac, -1, 556} -}; - - -const static pdc_core_metric pdc_core_metric_06 = -{ - "Helvetica-Bold", /* FontName */ - 262176L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -170, /* llx */ - -228, /* lly */ - 1003, /* urx */ - 962, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 718, /* CapHeight */ - 532, /* xHeight */ - 718, /* Ascender */ - -207, /* Descender */ - 140, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_06, - -}; - -/* -------- Generated from Helvetica-Oblique.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_07[315] = -{ - {0x0020, 32, 278}, {0x0021, 33, 278}, {0x0022, 34, 355}, - {0x0023, 35, 556}, {0x0024, 36, 556}, {0x0025, 37, 889}, - {0x0026, 38, 667}, {0x2019, 39, 222}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 389}, {0x002b, 43, 584}, - {0x002c, 44, 278}, {0x002d, 45, 333}, {0x002e, 46, 278}, - {0x002f, 47, 278}, {0x0030, 48, 556}, {0x0031, 49, 556}, - {0x0032, 50, 556}, {0x0033, 51, 556}, {0x0034, 52, 556}, - {0x0035, 53, 556}, {0x0036, 54, 556}, {0x0037, 55, 556}, - {0x0038, 56, 556}, {0x0039, 57, 556}, {0x003a, 58, 278}, - {0x003b, 59, 278}, {0x003c, 60, 584}, {0x003d, 61, 584}, - {0x003e, 62, 584}, {0x003f, 63, 556}, {0x0040, 64, 1015}, - {0x0041, 65, 667}, {0x0042, 66, 667}, {0x0043, 67, 722}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 611}, - {0x0047, 71, 778}, {0x0048, 72, 722}, {0x0049, 73, 278}, - {0x004a, 74, 500}, {0x004b, 75, 667}, {0x004c, 76, 556}, - {0x004d, 77, 833}, {0x004e, 78, 722}, {0x004f, 79, 778}, - {0x0050, 80, 667}, {0x0051, 81, 778}, {0x0052, 82, 722}, - {0x0053, 83, 667}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 667}, {0x0057, 87, 944}, {0x0058, 88, 667}, - {0x0059, 89, 667}, {0x005a, 90, 611}, {0x005b, 91, 278}, - {0x005c, 92, 278}, {0x005d, 93, 278}, {0x005e, 94, 469}, - {0x005f, 95, 556}, {0x2018, 96, 222}, {0x0061, 97, 556}, - {0x0062, 98, 556}, {0x0063, 99, 500}, {0x0064, 100, 556}, - {0x0065, 101, 556}, {0x0066, 102, 278}, {0x0067, 103, 556}, - {0x0068, 104, 556}, {0x0069, 105, 222}, {0x006a, 106, 222}, - {0x006b, 107, 500}, {0x006c, 108, 222}, {0x006d, 109, 833}, - {0x006e, 110, 556}, {0x006f, 111, 556}, {0x0070, 112, 556}, - {0x0071, 113, 556}, {0x0072, 114, 333}, {0x0073, 115, 500}, - {0x0074, 116, 278}, {0x0075, 117, 556}, {0x0076, 118, 500}, - {0x0077, 119, 722}, {0x0078, 120, 500}, {0x0079, 121, 500}, - {0x007a, 122, 500}, {0x007b, 123, 334}, {0x007c, 124, 260}, - {0x007d, 125, 334}, {0x007e, 126, 584}, {0x00a1, 161, 333}, - {0x00a2, 162, 556}, {0x00a3, 163, 556}, {0x2044, 164, 167}, - {0x00a5, 165, 556}, {0x0192, 166, 556}, {0x00a7, 167, 556}, - {0x00a4, 168, 556}, {0x0027, 169, 191}, {0x201c, 170, 333}, - {0x00ab, 171, 556}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 500}, {0xfb02, 175, 500}, {0x2013, 177, 556}, - {0x2020, 178, 556}, {0x2021, 179, 556}, {0x00b7, 180, 278}, - {0x00b6, 182, 537}, {0x2022, 183, 350}, {0x201a, 184, 222}, - {0x201e, 185, 333}, {0x201d, 186, 333}, {0x00bb, 187, 556}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 611}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 1000}, - {0x00aa, 227, 370}, {0x0141, 232, 556}, {0x00d8, 233, 778}, - {0x0152, 234, 1000}, {0x00ba, 235, 365}, {0x00e6, 241, 889}, - {0x0131, 245, 278}, {0x0142, 248, 222}, {0x00f8, 249, 611}, - {0x0153, 250, 944}, {0x00df, 251, 611}, {0x00cf, -1, 278}, - {0x00e9, -1, 556}, {0x0103, -1, 556}, {0x0171, -1, 556}, - {0x011b, -1, 556}, {0x0178, -1, 667}, {0x00f7, -1, 584}, - {0x00dd, -1, 667}, {0x00c2, -1, 667}, {0x00e1, -1, 556}, - {0x00db, -1, 722}, {0x00fd, -1, 500}, {0x0219, -1, 500}, - {0x00ea, -1, 556}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 556}, {0x00da, -1, 722}, {0x0173, -1, 556}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 737}, {0x0112, -1, 667}, {0x010d, -1, 500}, - {0x00e5, -1, 556}, {0x0145, -1, 722}, {0x013a, -1, 222}, - {0x00e0, -1, 556}, {0x0162, -1, 611}, {0x0106, -1, 722}, - {0x00e3, -1, 556}, {0x0116, -1, 667}, {0x0161, -1, 500}, - {0x015f, -1, 500}, {0x00ed, -1, 278}, {0x25ca, -1, 471}, - {0x0158, -1, 722}, {0x0122, -1, 778}, {0x00fb, -1, 556}, - {0x00e2, -1, 556}, {0x0100, -1, 667}, {0x0159, -1, 333}, - {0x00e7, -1, 500}, {0x017b, -1, 611}, {0x00de, -1, 667}, - {0x014c, -1, 778}, {0x0154, -1, 722}, {0x015a, -1, 667}, - {0x010f, -1, 643}, {0x016a, -1, 722}, {0x016f, -1, 556}, - {0x00b3, -1, 333}, {0x00d2, -1, 778}, {0x00c0, -1, 667}, - {0x0102, -1, 667}, {0x00d7, -1, 584}, {0x00fa, -1, 556}, - {0x0164, -1, 611}, {0x2202, -1, 476}, {0x00ff, -1, 500}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 556}, {0x00eb, -1, 556}, {0x0107, -1, 500}, - {0x0144, -1, 556}, {0x016b, -1, 556}, {0x0147, -1, 722}, - {0x00cd, -1, 278}, {0x00b1, -1, 584}, {0x00a6, -1, 260}, - {0x00ae, -1, 737}, {0x011e, -1, 778}, {0x0130, -1, 278}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 333}, - {0x014d, -1, 556}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 722}, - {0x013c, -1, 222}, {0x0165, -1, 317}, {0x0119, -1, 556}, - {0x0172, -1, 722}, {0x00c1, -1, 667}, {0x00c4, -1, 667}, - {0x00e8, -1, 556}, {0x017a, -1, 500}, {0x012f, -1, 222}, - {0x00d3, -1, 778}, {0x00f3, -1, 556}, {0x0101, -1, 556}, - {0x015b, -1, 500}, {0x00ef, -1, 278}, {0x00d4, -1, 778}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 556}, - {0x00b2, -1, 333}, {0x00d6, -1, 778}, {0x03bc, -1, 556}, - {0x00ec, -1, 278}, {0x0151, -1, 556}, {0x0118, -1, 667}, - {0x0111, -1, 556}, {0x00be, -1, 834}, {0x015e, -1, 667}, - {0x013e, -1, 299}, {0x0136, -1, 667}, {0x0139, -1, 556}, - {0x2122, -1, 1000}, {0x0117, -1, 556}, {0x00cc, -1, 278}, - {0x012a, -1, 278}, {0x013d, -1, 556}, {0x00bd, -1, 834}, - {0x2264, -1, 549}, {0x00f4, -1, 556}, {0x00f1, -1, 556}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 556}, - {0x011f, -1, 556}, {0x00bc, -1, 834}, {0x0160, -1, 667}, - {0x0218, -1, 667}, {0x0150, -1, 778}, {0x00b0, -1, 400}, - {0x00f2, -1, 556}, {0x010c, -1, 722}, {0x00f9, -1, 556}, - {0x221a, -1, 453}, {0x010e, -1, 722}, {0x0157, -1, 333}, - {0x00d1, -1, 722}, {0x00f5, -1, 556}, {0x0156, -1, 722}, - {0x013b, -1, 556}, {0x00c3, -1, 667}, {0x0104, -1, 667}, - {0x00c5, -1, 667}, {0x00d5, -1, 778}, {0x017c, -1, 500}, - {0x011a, -1, 667}, {0x012e, -1, 278}, {0x0137, -1, 500}, - {0x2212, -1, 584}, {0x00ce, -1, 278}, {0x0148, -1, 556}, - {0x0163, -1, 278}, {0x00ac, -1, 584}, {0x00f6, -1, 556}, - {0x00fc, -1, 556}, {0x2260, -1, 549}, {0x0123, -1, 556}, - {0x00f0, -1, 556}, {0x017e, -1, 500}, {0x0146, -1, 556}, - {0x00b9, -1, 333}, {0x012b, -1, 278}, {0x20ac, -1, 556} -}; - - -const static pdc_core_metric pdc_core_metric_07 = -{ - "Helvetica-Oblique", /* FontName */ - 96L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -12.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -170, /* llx */ - -225, /* lly */ - 1116, /* urx */ - 931, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 718, /* CapHeight */ - 523, /* xHeight */ - 718, /* Ascender */ - -207, /* Descender */ - 88, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_07, - -}; - -/* -------- Generated from Helvetica-BoldOblique.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_08[315] = -{ - {0x0020, 32, 278}, {0x0021, 33, 333}, {0x0022, 34, 474}, - {0x0023, 35, 556}, {0x0024, 36, 556}, {0x0025, 37, 889}, - {0x0026, 38, 722}, {0x2019, 39, 278}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 389}, {0x002b, 43, 584}, - {0x002c, 44, 278}, {0x002d, 45, 333}, {0x002e, 46, 278}, - {0x002f, 47, 278}, {0x0030, 48, 556}, {0x0031, 49, 556}, - {0x0032, 50, 556}, {0x0033, 51, 556}, {0x0034, 52, 556}, - {0x0035, 53, 556}, {0x0036, 54, 556}, {0x0037, 55, 556}, - {0x0038, 56, 556}, {0x0039, 57, 556}, {0x003a, 58, 333}, - {0x003b, 59, 333}, {0x003c, 60, 584}, {0x003d, 61, 584}, - {0x003e, 62, 584}, {0x003f, 63, 611}, {0x0040, 64, 975}, - {0x0041, 65, 722}, {0x0042, 66, 722}, {0x0043, 67, 722}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 611}, - {0x0047, 71, 778}, {0x0048, 72, 722}, {0x0049, 73, 278}, - {0x004a, 74, 556}, {0x004b, 75, 722}, {0x004c, 76, 611}, - {0x004d, 77, 833}, {0x004e, 78, 722}, {0x004f, 79, 778}, - {0x0050, 80, 667}, {0x0051, 81, 778}, {0x0052, 82, 722}, - {0x0053, 83, 667}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 667}, {0x0057, 87, 944}, {0x0058, 88, 667}, - {0x0059, 89, 667}, {0x005a, 90, 611}, {0x005b, 91, 333}, - {0x005c, 92, 278}, {0x005d, 93, 333}, {0x005e, 94, 584}, - {0x005f, 95, 556}, {0x2018, 96, 278}, {0x0061, 97, 556}, - {0x0062, 98, 611}, {0x0063, 99, 556}, {0x0064, 100, 611}, - {0x0065, 101, 556}, {0x0066, 102, 333}, {0x0067, 103, 611}, - {0x0068, 104, 611}, {0x0069, 105, 278}, {0x006a, 106, 278}, - {0x006b, 107, 556}, {0x006c, 108, 278}, {0x006d, 109, 889}, - {0x006e, 110, 611}, {0x006f, 111, 611}, {0x0070, 112, 611}, - {0x0071, 113, 611}, {0x0072, 114, 389}, {0x0073, 115, 556}, - {0x0074, 116, 333}, {0x0075, 117, 611}, {0x0076, 118, 556}, - {0x0077, 119, 778}, {0x0078, 120, 556}, {0x0079, 121, 556}, - {0x007a, 122, 500}, {0x007b, 123, 389}, {0x007c, 124, 280}, - {0x007d, 125, 389}, {0x007e, 126, 584}, {0x00a1, 161, 333}, - {0x00a2, 162, 556}, {0x00a3, 163, 556}, {0x2044, 164, 167}, - {0x00a5, 165, 556}, {0x0192, 166, 556}, {0x00a7, 167, 556}, - {0x00a4, 168, 556}, {0x0027, 169, 238}, {0x201c, 170, 500}, - {0x00ab, 171, 556}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 611}, {0xfb02, 175, 611}, {0x2013, 177, 556}, - {0x2020, 178, 556}, {0x2021, 179, 556}, {0x00b7, 180, 278}, - {0x00b6, 182, 556}, {0x2022, 183, 350}, {0x201a, 184, 278}, - {0x201e, 185, 500}, {0x201d, 186, 500}, {0x00bb, 187, 556}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 611}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 1000}, - {0x00aa, 227, 370}, {0x0141, 232, 611}, {0x00d8, 233, 778}, - {0x0152, 234, 1000}, {0x00ba, 235, 365}, {0x00e6, 241, 889}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 611}, - {0x0153, 250, 944}, {0x00df, 251, 611}, {0x00cf, -1, 278}, - {0x00e9, -1, 556}, {0x0103, -1, 556}, {0x0171, -1, 611}, - {0x011b, -1, 556}, {0x0178, -1, 667}, {0x00f7, -1, 584}, - {0x00dd, -1, 667}, {0x00c2, -1, 722}, {0x00e1, -1, 556}, - {0x00db, -1, 722}, {0x00fd, -1, 556}, {0x0219, -1, 556}, - {0x00ea, -1, 556}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 556}, {0x00da, -1, 722}, {0x0173, -1, 611}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 737}, {0x0112, -1, 667}, {0x010d, -1, 556}, - {0x00e5, -1, 556}, {0x0145, -1, 722}, {0x013a, -1, 278}, - {0x00e0, -1, 556}, {0x0162, -1, 611}, {0x0106, -1, 722}, - {0x00e3, -1, 556}, {0x0116, -1, 667}, {0x0161, -1, 556}, - {0x015f, -1, 556}, {0x00ed, -1, 278}, {0x25ca, -1, 494}, - {0x0158, -1, 722}, {0x0122, -1, 778}, {0x00fb, -1, 611}, - {0x00e2, -1, 556}, {0x0100, -1, 722}, {0x0159, -1, 389}, - {0x00e7, -1, 556}, {0x017b, -1, 611}, {0x00de, -1, 667}, - {0x014c, -1, 778}, {0x0154, -1, 722}, {0x015a, -1, 667}, - {0x010f, -1, 743}, {0x016a, -1, 722}, {0x016f, -1, 611}, - {0x00b3, -1, 333}, {0x00d2, -1, 778}, {0x00c0, -1, 722}, - {0x0102, -1, 722}, {0x00d7, -1, 584}, {0x00fa, -1, 611}, - {0x0164, -1, 611}, {0x2202, -1, 494}, {0x00ff, -1, 556}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 556}, {0x00eb, -1, 556}, {0x0107, -1, 556}, - {0x0144, -1, 611}, {0x016b, -1, 611}, {0x0147, -1, 722}, - {0x00cd, -1, 278}, {0x00b1, -1, 584}, {0x00a6, -1, 280}, - {0x00ae, -1, 737}, {0x011e, -1, 778}, {0x0130, -1, 278}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 389}, - {0x014d, -1, 611}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 722}, - {0x013c, -1, 278}, {0x0165, -1, 389}, {0x0119, -1, 556}, - {0x0172, -1, 722}, {0x00c1, -1, 722}, {0x00c4, -1, 722}, - {0x00e8, -1, 556}, {0x017a, -1, 500}, {0x012f, -1, 278}, - {0x00d3, -1, 778}, {0x00f3, -1, 611}, {0x0101, -1, 556}, - {0x015b, -1, 556}, {0x00ef, -1, 278}, {0x00d4, -1, 778}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 611}, - {0x00b2, -1, 333}, {0x00d6, -1, 778}, {0x03bc, -1, 611}, - {0x00ec, -1, 278}, {0x0151, -1, 611}, {0x0118, -1, 667}, - {0x0111, -1, 611}, {0x00be, -1, 834}, {0x015e, -1, 667}, - {0x013e, -1, 400}, {0x0136, -1, 722}, {0x0139, -1, 611}, - {0x2122, -1, 1000}, {0x0117, -1, 556}, {0x00cc, -1, 278}, - {0x012a, -1, 278}, {0x013d, -1, 611}, {0x00bd, -1, 834}, - {0x2264, -1, 549}, {0x00f4, -1, 611}, {0x00f1, -1, 611}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 556}, - {0x011f, -1, 611}, {0x00bc, -1, 834}, {0x0160, -1, 667}, - {0x0218, -1, 667}, {0x0150, -1, 778}, {0x00b0, -1, 400}, - {0x00f2, -1, 611}, {0x010c, -1, 722}, {0x00f9, -1, 611}, - {0x221a, -1, 549}, {0x010e, -1, 722}, {0x0157, -1, 389}, - {0x00d1, -1, 722}, {0x00f5, -1, 611}, {0x0156, -1, 722}, - {0x013b, -1, 611}, {0x00c3, -1, 722}, {0x0104, -1, 722}, - {0x00c5, -1, 722}, {0x00d5, -1, 778}, {0x017c, -1, 500}, - {0x011a, -1, 667}, {0x012e, -1, 278}, {0x0137, -1, 556}, - {0x2212, -1, 584}, {0x00ce, -1, 278}, {0x0148, -1, 611}, - {0x0163, -1, 333}, {0x00ac, -1, 584}, {0x00f6, -1, 611}, - {0x00fc, -1, 611}, {0x2260, -1, 549}, {0x0123, -1, 611}, - {0x00f0, -1, 611}, {0x017e, -1, 500}, {0x0146, -1, 611}, - {0x00b9, -1, 333}, {0x012b, -1, 278}, {0x20ac, -1, 556} -}; - - -const static pdc_core_metric pdc_core_metric_08 = -{ - "Helvetica-BoldOblique", /* FontName */ - 262240L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -12.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -174, /* llx */ - -228, /* lly */ - 1114, /* urx */ - 962, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 718, /* CapHeight */ - 532, /* xHeight */ - 718, /* Ascender */ - -207, /* Descender */ - 140, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_08, - -}; - -/* -------- Generated from Symbol.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_09[190] = -{ - {0x0020, 32, 250}, {0x0021, 33, 333}, {0x2200, 34, 713}, - {0x0023, 35, 500}, {0x2203, 36, 549}, {0x0025, 37, 833}, - {0x0026, 38, 778}, {0x220b, 39, 439}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x2217, 42, 500}, {0x002b, 43, 549}, - {0x002c, 44, 250}, {0x2212, 45, 549}, {0x002e, 46, 250}, - {0x002f, 47, 278}, {0x0030, 48, 500}, {0x0031, 49, 500}, - {0x0032, 50, 500}, {0x0033, 51, 500}, {0x0034, 52, 500}, - {0x0035, 53, 500}, {0x0036, 54, 500}, {0x0037, 55, 500}, - {0x0038, 56, 500}, {0x0039, 57, 500}, {0x003a, 58, 278}, - {0x003b, 59, 278}, {0x003c, 60, 549}, {0x003d, 61, 549}, - {0x003e, 62, 549}, {0x003f, 63, 444}, {0x2245, 64, 549}, - {0x0391, 65, 722}, {0x0392, 66, 667}, {0x03a7, 67, 722}, - {0x0394, 68, 612}, {0x0395, 69, 611}, {0x03a6, 70, 763}, - {0x0393, 71, 603}, {0x0397, 72, 722}, {0x0399, 73, 333}, - {0x03d1, 74, 631}, {0x039a, 75, 722}, {0x039b, 76, 686}, - {0x039c, 77, 889}, {0x039d, 78, 722}, {0x039f, 79, 722}, - {0x03a0, 80, 768}, {0x0398, 81, 741}, {0x03a1, 82, 556}, - {0x03a3, 83, 592}, {0x03a4, 84, 611}, {0x03a5, 85, 690}, - {0x03c2, 86, 439}, {0x03a9, 87, 768}, {0x039e, 88, 645}, - {0x03a8, 89, 795}, {0x0396, 90, 611}, {0x005b, 91, 333}, - {0x2234, 92, 863}, {0x005d, 93, 333}, {0x22a5, 94, 658}, - {0x005f, 95, 500}, {0xf8e5, 96, 500}, {0x03b1, 97, 631}, - {0x03b2, 98, 549}, {0x03c7, 99, 549}, {0x03b4, 100, 494}, - {0x03b5, 101, 439}, {0x03c6, 102, 521}, {0x03b3, 103, 411}, - {0x03b7, 104, 603}, {0x03b9, 105, 329}, {0x03d5, 106, 603}, - {0x03ba, 107, 549}, {0x03bb, 108, 549}, {0x03bc, 109, 576}, - {0x03bd, 110, 521}, {0x03bf, 111, 549}, {0x03c0, 112, 549}, - {0x03b8, 113, 521}, {0x03c1, 114, 549}, {0x03c3, 115, 603}, - {0x03c4, 116, 439}, {0x03c5, 117, 576}, {0x03d6, 118, 713}, - {0x03c9, 119, 686}, {0x03be, 120, 493}, {0x03c8, 121, 686}, - {0x03b6, 122, 494}, {0x007b, 123, 480}, {0x007c, 124, 200}, - {0x007d, 125, 480}, {0x223c, 126, 549}, {0x20ac, 160, 750}, - {0x03d2, 161, 620}, {0x2032, 162, 247}, {0x2264, 163, 549}, - {0x2044, 164, 167}, {0x221e, 165, 713}, {0x0192, 166, 500}, - {0x2663, 167, 753}, {0x2666, 168, 753}, {0x2665, 169, 753}, - {0x2660, 170, 753}, {0x2194, 171, 1042}, {0x2190, 172, 987}, - {0x2191, 173, 603}, {0x2192, 174, 987}, {0x2193, 175, 603}, - {0x00b0, 176, 400}, {0x00b1, 177, 549}, {0x2033, 178, 411}, - {0x2265, 179, 549}, {0x00d7, 180, 549}, {0x221d, 181, 713}, - {0x2202, 182, 494}, {0x2022, 183, 460}, {0x00f7, 184, 549}, - {0x2260, 185, 549}, {0x2261, 186, 549}, {0x2248, 187, 549}, - {0x2026, 188, 1000}, {0xf8e6, 189, 603}, {0xf8e7, 190, 1000}, - {0x21b5, 191, 658}, {0x2135, 192, 823}, {0x2111, 193, 686}, - {0x211c, 194, 795}, {0x2118, 195, 987}, {0x2297, 196, 768}, - {0x2295, 197, 768}, {0x2205, 198, 823}, {0x2229, 199, 768}, - {0x222a, 200, 768}, {0x2283, 201, 713}, {0x2287, 202, 713}, - {0x2284, 203, 713}, {0x2282, 204, 713}, {0x2286, 205, 713}, - {0x2208, 206, 713}, {0x2209, 207, 713}, {0x2220, 208, 768}, - {0x2207, 209, 713}, {0xf6da, 210, 790}, {0xf6d9, 211, 790}, - {0xf6db, 212, 890}, {0x220f, 213, 823}, {0x221a, 214, 549}, - {0x22c5, 215, 250}, {0x00ac, 216, 713}, {0x2227, 217, 603}, - {0x2228, 218, 603}, {0x21d4, 219, 1042}, {0x21d0, 220, 987}, - {0x21d1, 221, 603}, {0x21d2, 222, 987}, {0x21d3, 223, 603}, - {0x25ca, 224, 494}, {0x2329, 225, 329}, {0xf8e8, 226, 790}, - {0xf8e9, 227, 790}, {0xf8ea, 228, 786}, {0x2211, 229, 713}, - {0xf8eb, 230, 384}, {0xf8ec, 231, 384}, {0xf8ed, 232, 384}, - {0xf8ee, 233, 384}, {0xf8ef, 234, 384}, {0xf8f0, 235, 384}, - {0xf8f1, 236, 494}, {0xf8f2, 237, 494}, {0xf8f3, 238, 494}, - {0xf8f4, 239, 494}, {0x232a, 241, 329}, {0x222b, 242, 274}, - {0x2320, 243, 686}, {0xf8f5, 244, 686}, {0x2321, 245, 686}, - {0xf8f6, 246, 384}, {0xf8f7, 247, 384}, {0xf8f8, 248, 384}, - {0xf8f9, 249, 384}, {0xf8fa, 250, 384}, {0xf8fb, 251, 384}, - {0xf8fc, 252, 494}, {0xf8fd, 253, 494}, {0xf8fe, 254, 494}, - {0x0000, -1, 790} -}; - -const static pdc_core_metric pdc_core_metric_09 = -{ - "Symbol", /* FontName */ - 4L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -180, /* llx */ - -293, /* lly */ - 1090, /* urx */ - 1010, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 700, /* CapHeight */ - 0, /* xHeight */ - 800, /* Ascender */ - -200, /* Descender */ - 85, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 190, - pdc_glyph_width_09, - -}; - -/* -------- Generated from Times-Roman.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_10[315] = -{ - {0x0020, 32, 250}, {0x0021, 33, 333}, {0x0022, 34, 408}, - {0x0023, 35, 500}, {0x0024, 36, 500}, {0x0025, 37, 833}, - {0x0026, 38, 778}, {0x2019, 39, 333}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 500}, {0x002b, 43, 564}, - {0x002c, 44, 250}, {0x002d, 45, 333}, {0x002e, 46, 250}, - {0x002f, 47, 278}, {0x0030, 48, 500}, {0x0031, 49, 500}, - {0x0032, 50, 500}, {0x0033, 51, 500}, {0x0034, 52, 500}, - {0x0035, 53, 500}, {0x0036, 54, 500}, {0x0037, 55, 500}, - {0x0038, 56, 500}, {0x0039, 57, 500}, {0x003a, 58, 278}, - {0x003b, 59, 278}, {0x003c, 60, 564}, {0x003d, 61, 564}, - {0x003e, 62, 564}, {0x003f, 63, 444}, {0x0040, 64, 921}, - {0x0041, 65, 722}, {0x0042, 66, 667}, {0x0043, 67, 667}, - {0x0044, 68, 722}, {0x0045, 69, 611}, {0x0046, 70, 556}, - {0x0047, 71, 722}, {0x0048, 72, 722}, {0x0049, 73, 333}, - {0x004a, 74, 389}, {0x004b, 75, 722}, {0x004c, 76, 611}, - {0x004d, 77, 889}, {0x004e, 78, 722}, {0x004f, 79, 722}, - {0x0050, 80, 556}, {0x0051, 81, 722}, {0x0052, 82, 667}, - {0x0053, 83, 556}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 722}, {0x0057, 87, 944}, {0x0058, 88, 722}, - {0x0059, 89, 722}, {0x005a, 90, 611}, {0x005b, 91, 333}, - {0x005c, 92, 278}, {0x005d, 93, 333}, {0x005e, 94, 469}, - {0x005f, 95, 500}, {0x2018, 96, 333}, {0x0061, 97, 444}, - {0x0062, 98, 500}, {0x0063, 99, 444}, {0x0064, 100, 500}, - {0x0065, 101, 444}, {0x0066, 102, 333}, {0x0067, 103, 500}, - {0x0068, 104, 500}, {0x0069, 105, 278}, {0x006a, 106, 278}, - {0x006b, 107, 500}, {0x006c, 108, 278}, {0x006d, 109, 778}, - {0x006e, 110, 500}, {0x006f, 111, 500}, {0x0070, 112, 500}, - {0x0071, 113, 500}, {0x0072, 114, 333}, {0x0073, 115, 389}, - {0x0074, 116, 278}, {0x0075, 117, 500}, {0x0076, 118, 500}, - {0x0077, 119, 722}, {0x0078, 120, 500}, {0x0079, 121, 500}, - {0x007a, 122, 444}, {0x007b, 123, 480}, {0x007c, 124, 200}, - {0x007d, 125, 480}, {0x007e, 126, 541}, {0x00a1, 161, 333}, - {0x00a2, 162, 500}, {0x00a3, 163, 500}, {0x2044, 164, 167}, - {0x00a5, 165, 500}, {0x0192, 166, 500}, {0x00a7, 167, 500}, - {0x00a4, 168, 500}, {0x0027, 169, 180}, {0x201c, 170, 444}, - {0x00ab, 171, 500}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 556}, {0xfb02, 175, 556}, {0x2013, 177, 500}, - {0x2020, 178, 500}, {0x2021, 179, 500}, {0x00b7, 180, 250}, - {0x00b6, 182, 453}, {0x2022, 183, 350}, {0x201a, 184, 333}, - {0x201e, 185, 444}, {0x201d, 186, 444}, {0x00bb, 187, 500}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 444}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 889}, - {0x00aa, 227, 276}, {0x0141, 232, 611}, {0x00d8, 233, 722}, - {0x0152, 234, 889}, {0x00ba, 235, 310}, {0x00e6, 241, 667}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 500}, - {0x0153, 250, 722}, {0x00df, 251, 500}, {0x00cf, -1, 333}, - {0x00e9, -1, 444}, {0x0103, -1, 444}, {0x0171, -1, 500}, - {0x011b, -1, 444}, {0x0178, -1, 722}, {0x00f7, -1, 564}, - {0x00dd, -1, 722}, {0x00c2, -1, 722}, {0x00e1, -1, 444}, - {0x00db, -1, 722}, {0x00fd, -1, 500}, {0x0219, -1, 389}, - {0x00ea, -1, 444}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 444}, {0x00da, -1, 722}, {0x0173, -1, 500}, - {0x00cb, -1, 611}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 760}, {0x0112, -1, 611}, {0x010d, -1, 444}, - {0x00e5, -1, 444}, {0x0145, -1, 722}, {0x013a, -1, 278}, - {0x00e0, -1, 444}, {0x0162, -1, 611}, {0x0106, -1, 667}, - {0x00e3, -1, 444}, {0x0116, -1, 611}, {0x0161, -1, 389}, - {0x015f, -1, 389}, {0x00ed, -1, 278}, {0x25ca, -1, 471}, - {0x0158, -1, 667}, {0x0122, -1, 722}, {0x00fb, -1, 500}, - {0x00e2, -1, 444}, {0x0100, -1, 722}, {0x0159, -1, 333}, - {0x00e7, -1, 444}, {0x017b, -1, 611}, {0x00de, -1, 556}, - {0x014c, -1, 722}, {0x0154, -1, 667}, {0x015a, -1, 556}, - {0x010f, -1, 588}, {0x016a, -1, 722}, {0x016f, -1, 500}, - {0x00b3, -1, 300}, {0x00d2, -1, 722}, {0x00c0, -1, 722}, - {0x0102, -1, 722}, {0x00d7, -1, 564}, {0x00fa, -1, 500}, - {0x0164, -1, 611}, {0x2202, -1, 476}, {0x00ff, -1, 500}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 611}, - {0x00e4, -1, 444}, {0x00eb, -1, 444}, {0x0107, -1, 444}, - {0x0144, -1, 500}, {0x016b, -1, 500}, {0x0147, -1, 722}, - {0x00cd, -1, 333}, {0x00b1, -1, 564}, {0x00a6, -1, 200}, - {0x00ae, -1, 760}, {0x011e, -1, 722}, {0x0130, -1, 333}, - {0x2211, -1, 600}, {0x00c8, -1, 611}, {0x0155, -1, 333}, - {0x014d, -1, 500}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 667}, - {0x013c, -1, 278}, {0x0165, -1, 326}, {0x0119, -1, 444}, - {0x0172, -1, 722}, {0x00c1, -1, 722}, {0x00c4, -1, 722}, - {0x00e8, -1, 444}, {0x017a, -1, 444}, {0x012f, -1, 278}, - {0x00d3, -1, 722}, {0x00f3, -1, 500}, {0x0101, -1, 444}, - {0x015b, -1, 389}, {0x00ef, -1, 278}, {0x00d4, -1, 722}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 500}, - {0x00b2, -1, 300}, {0x00d6, -1, 722}, {0x03bc, -1, 500}, - {0x00ec, -1, 278}, {0x0151, -1, 500}, {0x0118, -1, 611}, - {0x0111, -1, 500}, {0x00be, -1, 750}, {0x015e, -1, 556}, - {0x013e, -1, 344}, {0x0136, -1, 722}, {0x0139, -1, 611}, - {0x2122, -1, 980}, {0x0117, -1, 444}, {0x00cc, -1, 333}, - {0x012a, -1, 333}, {0x013d, -1, 611}, {0x00bd, -1, 750}, - {0x2264, -1, 549}, {0x00f4, -1, 500}, {0x00f1, -1, 500}, - {0x0170, -1, 722}, {0x00c9, -1, 611}, {0x0113, -1, 444}, - {0x011f, -1, 500}, {0x00bc, -1, 750}, {0x0160, -1, 556}, - {0x0218, -1, 556}, {0x0150, -1, 722}, {0x00b0, -1, 400}, - {0x00f2, -1, 500}, {0x010c, -1, 667}, {0x00f9, -1, 500}, - {0x221a, -1, 453}, {0x010e, -1, 722}, {0x0157, -1, 333}, - {0x00d1, -1, 722}, {0x00f5, -1, 500}, {0x0156, -1, 667}, - {0x013b, -1, 611}, {0x00c3, -1, 722}, {0x0104, -1, 722}, - {0x00c5, -1, 722}, {0x00d5, -1, 722}, {0x017c, -1, 444}, - {0x011a, -1, 611}, {0x012e, -1, 333}, {0x0137, -1, 500}, - {0x2212, -1, 564}, {0x00ce, -1, 333}, {0x0148, -1, 500}, - {0x0163, -1, 278}, {0x00ac, -1, 564}, {0x00f6, -1, 500}, - {0x00fc, -1, 500}, {0x2260, -1, 549}, {0x0123, -1, 500}, - {0x00f0, -1, 500}, {0x017e, -1, 444}, {0x0146, -1, 500}, - {0x00b9, -1, 300}, {0x012b, -1, 278}, {0x20ac, -1, 500} -}; - - -const static pdc_core_metric pdc_core_metric_10 = -{ - "Times-Roman", /* FontName */ - 32L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -168, /* llx */ - -218, /* lly */ - 1000, /* urx */ - 898, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 662, /* CapHeight */ - 450, /* xHeight */ - 683, /* Ascender */ - -217, /* Descender */ - 84, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_10, - -}; - -/* -------- Generated from Times-Bold.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_11[315] = -{ - {0x0020, 32, 250}, {0x0021, 33, 333}, {0x0022, 34, 555}, - {0x0023, 35, 500}, {0x0024, 36, 500}, {0x0025, 37, 1000}, - {0x0026, 38, 833}, {0x2019, 39, 333}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 500}, {0x002b, 43, 570}, - {0x002c, 44, 250}, {0x002d, 45, 333}, {0x002e, 46, 250}, - {0x002f, 47, 278}, {0x0030, 48, 500}, {0x0031, 49, 500}, - {0x0032, 50, 500}, {0x0033, 51, 500}, {0x0034, 52, 500}, - {0x0035, 53, 500}, {0x0036, 54, 500}, {0x0037, 55, 500}, - {0x0038, 56, 500}, {0x0039, 57, 500}, {0x003a, 58, 333}, - {0x003b, 59, 333}, {0x003c, 60, 570}, {0x003d, 61, 570}, - {0x003e, 62, 570}, {0x003f, 63, 500}, {0x0040, 64, 930}, - {0x0041, 65, 722}, {0x0042, 66, 667}, {0x0043, 67, 722}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 611}, - {0x0047, 71, 778}, {0x0048, 72, 778}, {0x0049, 73, 389}, - {0x004a, 74, 500}, {0x004b, 75, 778}, {0x004c, 76, 667}, - {0x004d, 77, 944}, {0x004e, 78, 722}, {0x004f, 79, 778}, - {0x0050, 80, 611}, {0x0051, 81, 778}, {0x0052, 82, 722}, - {0x0053, 83, 556}, {0x0054, 84, 667}, {0x0055, 85, 722}, - {0x0056, 86, 722}, {0x0057, 87, 1000}, {0x0058, 88, 722}, - {0x0059, 89, 722}, {0x005a, 90, 667}, {0x005b, 91, 333}, - {0x005c, 92, 278}, {0x005d, 93, 333}, {0x005e, 94, 581}, - {0x005f, 95, 500}, {0x2018, 96, 333}, {0x0061, 97, 500}, - {0x0062, 98, 556}, {0x0063, 99, 444}, {0x0064, 100, 556}, - {0x0065, 101, 444}, {0x0066, 102, 333}, {0x0067, 103, 500}, - {0x0068, 104, 556}, {0x0069, 105, 278}, {0x006a, 106, 333}, - {0x006b, 107, 556}, {0x006c, 108, 278}, {0x006d, 109, 833}, - {0x006e, 110, 556}, {0x006f, 111, 500}, {0x0070, 112, 556}, - {0x0071, 113, 556}, {0x0072, 114, 444}, {0x0073, 115, 389}, - {0x0074, 116, 333}, {0x0075, 117, 556}, {0x0076, 118, 500}, - {0x0077, 119, 722}, {0x0078, 120, 500}, {0x0079, 121, 500}, - {0x007a, 122, 444}, {0x007b, 123, 394}, {0x007c, 124, 220}, - {0x007d, 125, 394}, {0x007e, 126, 520}, {0x00a1, 161, 333}, - {0x00a2, 162, 500}, {0x00a3, 163, 500}, {0x2044, 164, 167}, - {0x00a5, 165, 500}, {0x0192, 166, 500}, {0x00a7, 167, 500}, - {0x00a4, 168, 500}, {0x0027, 169, 278}, {0x201c, 170, 500}, - {0x00ab, 171, 500}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 556}, {0xfb02, 175, 556}, {0x2013, 177, 500}, - {0x2020, 178, 500}, {0x2021, 179, 500}, {0x00b7, 180, 250}, - {0x00b6, 182, 540}, {0x2022, 183, 350}, {0x201a, 184, 333}, - {0x201e, 185, 500}, {0x201d, 186, 500}, {0x00bb, 187, 500}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 500}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 1000}, - {0x00aa, 227, 300}, {0x0141, 232, 667}, {0x00d8, 233, 778}, - {0x0152, 234, 1000}, {0x00ba, 235, 330}, {0x00e6, 241, 722}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 500}, - {0x0153, 250, 722}, {0x00df, 251, 556}, {0x00cf, -1, 389}, - {0x00e9, -1, 444}, {0x0103, -1, 500}, {0x0171, -1, 556}, - {0x011b, -1, 444}, {0x0178, -1, 722}, {0x00f7, -1, 570}, - {0x00dd, -1, 722}, {0x00c2, -1, 722}, {0x00e1, -1, 500}, - {0x00db, -1, 722}, {0x00fd, -1, 500}, {0x0219, -1, 389}, - {0x00ea, -1, 444}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 500}, {0x00da, -1, 722}, {0x0173, -1, 556}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 747}, {0x0112, -1, 667}, {0x010d, -1, 444}, - {0x00e5, -1, 500}, {0x0145, -1, 722}, {0x013a, -1, 278}, - {0x00e0, -1, 500}, {0x0162, -1, 667}, {0x0106, -1, 722}, - {0x00e3, -1, 500}, {0x0116, -1, 667}, {0x0161, -1, 389}, - {0x015f, -1, 389}, {0x00ed, -1, 278}, {0x25ca, -1, 494}, - {0x0158, -1, 722}, {0x0122, -1, 778}, {0x00fb, -1, 556}, - {0x00e2, -1, 500}, {0x0100, -1, 722}, {0x0159, -1, 444}, - {0x00e7, -1, 444}, {0x017b, -1, 667}, {0x00de, -1, 611}, - {0x014c, -1, 778}, {0x0154, -1, 722}, {0x015a, -1, 556}, - {0x010f, -1, 672}, {0x016a, -1, 722}, {0x016f, -1, 556}, - {0x00b3, -1, 300}, {0x00d2, -1, 778}, {0x00c0, -1, 722}, - {0x0102, -1, 722}, {0x00d7, -1, 570}, {0x00fa, -1, 556}, - {0x0164, -1, 667}, {0x2202, -1, 494}, {0x00ff, -1, 500}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 500}, {0x00eb, -1, 444}, {0x0107, -1, 444}, - {0x0144, -1, 556}, {0x016b, -1, 556}, {0x0147, -1, 722}, - {0x00cd, -1, 389}, {0x00b1, -1, 570}, {0x00a6, -1, 220}, - {0x00ae, -1, 747}, {0x011e, -1, 778}, {0x0130, -1, 389}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 444}, - {0x014d, -1, 500}, {0x0179, -1, 667}, {0x017d, -1, 667}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 722}, - {0x013c, -1, 278}, {0x0165, -1, 416}, {0x0119, -1, 444}, - {0x0172, -1, 722}, {0x00c1, -1, 722}, {0x00c4, -1, 722}, - {0x00e8, -1, 444}, {0x017a, -1, 444}, {0x012f, -1, 278}, - {0x00d3, -1, 778}, {0x00f3, -1, 500}, {0x0101, -1, 500}, - {0x015b, -1, 389}, {0x00ef, -1, 278}, {0x00d4, -1, 778}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 556}, - {0x00b2, -1, 300}, {0x00d6, -1, 778}, {0x03bc, -1, 556}, - {0x00ec, -1, 278}, {0x0151, -1, 500}, {0x0118, -1, 667}, - {0x0111, -1, 556}, {0x00be, -1, 750}, {0x015e, -1, 556}, - {0x013e, -1, 394}, {0x0136, -1, 778}, {0x0139, -1, 667}, - {0x2122, -1, 1000}, {0x0117, -1, 444}, {0x00cc, -1, 389}, - {0x012a, -1, 389}, {0x013d, -1, 667}, {0x00bd, -1, 750}, - {0x2264, -1, 549}, {0x00f4, -1, 500}, {0x00f1, -1, 556}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 444}, - {0x011f, -1, 500}, {0x00bc, -1, 750}, {0x0160, -1, 556}, - {0x0218, -1, 556}, {0x0150, -1, 778}, {0x00b0, -1, 400}, - {0x00f2, -1, 500}, {0x010c, -1, 722}, {0x00f9, -1, 556}, - {0x221a, -1, 549}, {0x010e, -1, 722}, {0x0157, -1, 444}, - {0x00d1, -1, 722}, {0x00f5, -1, 500}, {0x0156, -1, 722}, - {0x013b, -1, 667}, {0x00c3, -1, 722}, {0x0104, -1, 722}, - {0x00c5, -1, 722}, {0x00d5, -1, 778}, {0x017c, -1, 444}, - {0x011a, -1, 667}, {0x012e, -1, 389}, {0x0137, -1, 556}, - {0x2212, -1, 570}, {0x00ce, -1, 389}, {0x0148, -1, 556}, - {0x0163, -1, 333}, {0x00ac, -1, 570}, {0x00f6, -1, 500}, - {0x00fc, -1, 556}, {0x2260, -1, 549}, {0x0123, -1, 500}, - {0x00f0, -1, 500}, {0x017e, -1, 444}, {0x0146, -1, 556}, - {0x00b9, -1, 300}, {0x012b, -1, 278}, {0x20ac, -1, 500} -}; - - -const static pdc_core_metric pdc_core_metric_11 = -{ - "Times-Bold", /* FontName */ - 262176L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -168, /* llx */ - -218, /* lly */ - 1000, /* urx */ - 935, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 676, /* CapHeight */ - 461, /* xHeight */ - 683, /* Ascender */ - -217, /* Descender */ - 139, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_11, - -}; - -/* -------- Generated from Times-Italic.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_12[315] = -{ - {0x0020, 32, 250}, {0x0021, 33, 333}, {0x0022, 34, 420}, - {0x0023, 35, 500}, {0x0024, 36, 500}, {0x0025, 37, 833}, - {0x0026, 38, 778}, {0x2019, 39, 333}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 500}, {0x002b, 43, 675}, - {0x002c, 44, 250}, {0x002d, 45, 333}, {0x002e, 46, 250}, - {0x002f, 47, 278}, {0x0030, 48, 500}, {0x0031, 49, 500}, - {0x0032, 50, 500}, {0x0033, 51, 500}, {0x0034, 52, 500}, - {0x0035, 53, 500}, {0x0036, 54, 500}, {0x0037, 55, 500}, - {0x0038, 56, 500}, {0x0039, 57, 500}, {0x003a, 58, 333}, - {0x003b, 59, 333}, {0x003c, 60, 675}, {0x003d, 61, 675}, - {0x003e, 62, 675}, {0x003f, 63, 500}, {0x0040, 64, 920}, - {0x0041, 65, 611}, {0x0042, 66, 611}, {0x0043, 67, 667}, - {0x0044, 68, 722}, {0x0045, 69, 611}, {0x0046, 70, 611}, - {0x0047, 71, 722}, {0x0048, 72, 722}, {0x0049, 73, 333}, - {0x004a, 74, 444}, {0x004b, 75, 667}, {0x004c, 76, 556}, - {0x004d, 77, 833}, {0x004e, 78, 667}, {0x004f, 79, 722}, - {0x0050, 80, 611}, {0x0051, 81, 722}, {0x0052, 82, 611}, - {0x0053, 83, 500}, {0x0054, 84, 556}, {0x0055, 85, 722}, - {0x0056, 86, 611}, {0x0057, 87, 833}, {0x0058, 88, 611}, - {0x0059, 89, 556}, {0x005a, 90, 556}, {0x005b, 91, 389}, - {0x005c, 92, 278}, {0x005d, 93, 389}, {0x005e, 94, 422}, - {0x005f, 95, 500}, {0x2018, 96, 333}, {0x0061, 97, 500}, - {0x0062, 98, 500}, {0x0063, 99, 444}, {0x0064, 100, 500}, - {0x0065, 101, 444}, {0x0066, 102, 278}, {0x0067, 103, 500}, - {0x0068, 104, 500}, {0x0069, 105, 278}, {0x006a, 106, 278}, - {0x006b, 107, 444}, {0x006c, 108, 278}, {0x006d, 109, 722}, - {0x006e, 110, 500}, {0x006f, 111, 500}, {0x0070, 112, 500}, - {0x0071, 113, 500}, {0x0072, 114, 389}, {0x0073, 115, 389}, - {0x0074, 116, 278}, {0x0075, 117, 500}, {0x0076, 118, 444}, - {0x0077, 119, 667}, {0x0078, 120, 444}, {0x0079, 121, 444}, - {0x007a, 122, 389}, {0x007b, 123, 400}, {0x007c, 124, 275}, - {0x007d, 125, 400}, {0x007e, 126, 541}, {0x00a1, 161, 389}, - {0x00a2, 162, 500}, {0x00a3, 163, 500}, {0x2044, 164, 167}, - {0x00a5, 165, 500}, {0x0192, 166, 500}, {0x00a7, 167, 500}, - {0x00a4, 168, 500}, {0x0027, 169, 214}, {0x201c, 170, 556}, - {0x00ab, 171, 500}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 500}, {0xfb02, 175, 500}, {0x2013, 177, 500}, - {0x2020, 178, 500}, {0x2021, 179, 500}, {0x00b7, 180, 250}, - {0x00b6, 182, 523}, {0x2022, 183, 350}, {0x201a, 184, 333}, - {0x201e, 185, 556}, {0x201d, 186, 556}, {0x00bb, 187, 500}, - {0x2026, 188, 889}, {0x2030, 189, 1000}, {0x00bf, 191, 500}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 889}, {0x00c6, 225, 889}, - {0x00aa, 227, 276}, {0x0141, 232, 556}, {0x00d8, 233, 722}, - {0x0152, 234, 944}, {0x00ba, 235, 310}, {0x00e6, 241, 667}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 500}, - {0x0153, 250, 667}, {0x00df, 251, 500}, {0x00cf, -1, 333}, - {0x00e9, -1, 444}, {0x0103, -1, 500}, {0x0171, -1, 500}, - {0x011b, -1, 444}, {0x0178, -1, 556}, {0x00f7, -1, 675}, - {0x00dd, -1, 556}, {0x00c2, -1, 611}, {0x00e1, -1, 500}, - {0x00db, -1, 722}, {0x00fd, -1, 444}, {0x0219, -1, 389}, - {0x00ea, -1, 444}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 500}, {0x00da, -1, 722}, {0x0173, -1, 500}, - {0x00cb, -1, 611}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 760}, {0x0112, -1, 611}, {0x010d, -1, 444}, - {0x00e5, -1, 500}, {0x0145, -1, 667}, {0x013a, -1, 278}, - {0x00e0, -1, 500}, {0x0162, -1, 556}, {0x0106, -1, 667}, - {0x00e3, -1, 500}, {0x0116, -1, 611}, {0x0161, -1, 389}, - {0x015f, -1, 389}, {0x00ed, -1, 278}, {0x25ca, -1, 471}, - {0x0158, -1, 611}, {0x0122, -1, 722}, {0x00fb, -1, 500}, - {0x00e2, -1, 500}, {0x0100, -1, 611}, {0x0159, -1, 389}, - {0x00e7, -1, 444}, {0x017b, -1, 556}, {0x00de, -1, 611}, - {0x014c, -1, 722}, {0x0154, -1, 611}, {0x015a, -1, 500}, - {0x010f, -1, 544}, {0x016a, -1, 722}, {0x016f, -1, 500}, - {0x00b3, -1, 300}, {0x00d2, -1, 722}, {0x00c0, -1, 611}, - {0x0102, -1, 611}, {0x00d7, -1, 675}, {0x00fa, -1, 500}, - {0x0164, -1, 556}, {0x2202, -1, 476}, {0x00ff, -1, 444}, - {0x0143, -1, 667}, {0x00ee, -1, 278}, {0x00ca, -1, 611}, - {0x00e4, -1, 500}, {0x00eb, -1, 444}, {0x0107, -1, 444}, - {0x0144, -1, 500}, {0x016b, -1, 500}, {0x0147, -1, 667}, - {0x00cd, -1, 333}, {0x00b1, -1, 675}, {0x00a6, -1, 275}, - {0x00ae, -1, 760}, {0x011e, -1, 722}, {0x0130, -1, 333}, - {0x2211, -1, 600}, {0x00c8, -1, 611}, {0x0155, -1, 389}, - {0x014d, -1, 500}, {0x0179, -1, 556}, {0x017d, -1, 556}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 667}, - {0x013c, -1, 278}, {0x0165, -1, 300}, {0x0119, -1, 444}, - {0x0172, -1, 722}, {0x00c1, -1, 611}, {0x00c4, -1, 611}, - {0x00e8, -1, 444}, {0x017a, -1, 389}, {0x012f, -1, 278}, - {0x00d3, -1, 722}, {0x00f3, -1, 500}, {0x0101, -1, 500}, - {0x015b, -1, 389}, {0x00ef, -1, 278}, {0x00d4, -1, 722}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 500}, - {0x00b2, -1, 300}, {0x00d6, -1, 722}, {0x03bc, -1, 500}, - {0x00ec, -1, 278}, {0x0151, -1, 500}, {0x0118, -1, 611}, - {0x0111, -1, 500}, {0x00be, -1, 750}, {0x015e, -1, 500}, - {0x013e, -1, 300}, {0x0136, -1, 667}, {0x0139, -1, 556}, - {0x2122, -1, 980}, {0x0117, -1, 444}, {0x00cc, -1, 333}, - {0x012a, -1, 333}, {0x013d, -1, 611}, {0x00bd, -1, 750}, - {0x2264, -1, 549}, {0x00f4, -1, 500}, {0x00f1, -1, 500}, - {0x0170, -1, 722}, {0x00c9, -1, 611}, {0x0113, -1, 444}, - {0x011f, -1, 500}, {0x00bc, -1, 750}, {0x0160, -1, 500}, - {0x0218, -1, 500}, {0x0150, -1, 722}, {0x00b0, -1, 400}, - {0x00f2, -1, 500}, {0x010c, -1, 667}, {0x00f9, -1, 500}, - {0x221a, -1, 453}, {0x010e, -1, 722}, {0x0157, -1, 389}, - {0x00d1, -1, 667}, {0x00f5, -1, 500}, {0x0156, -1, 611}, - {0x013b, -1, 556}, {0x00c3, -1, 611}, {0x0104, -1, 611}, - {0x00c5, -1, 611}, {0x00d5, -1, 722}, {0x017c, -1, 389}, - {0x011a, -1, 611}, {0x012e, -1, 333}, {0x0137, -1, 444}, - {0x2212, -1, 675}, {0x00ce, -1, 333}, {0x0148, -1, 500}, - {0x0163, -1, 278}, {0x00ac, -1, 675}, {0x00f6, -1, 500}, - {0x00fc, -1, 500}, {0x2260, -1, 549}, {0x0123, -1, 500}, - {0x00f0, -1, 500}, {0x017e, -1, 389}, {0x0146, -1, 500}, - {0x00b9, -1, 300}, {0x012b, -1, 278}, {0x20ac, -1, 500} -}; - - -const static pdc_core_metric pdc_core_metric_12 = -{ - "Times-Italic", /* FontName */ - 96L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -15.5, /* ItalicAngle */ - 0, /* isFixedPitch */ - -169, /* llx */ - -217, /* lly */ - 1010, /* urx */ - 883, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 653, /* CapHeight */ - 441, /* xHeight */ - 683, /* Ascender */ - -217, /* Descender */ - 76, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_12, - -}; - -/* -------- Generated from Times-BoldItalic.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_13[315] = -{ - {0x0020, 32, 250}, {0x0021, 33, 389}, {0x0022, 34, 555}, - {0x0023, 35, 500}, {0x0024, 36, 500}, {0x0025, 37, 833}, - {0x0026, 38, 778}, {0x2019, 39, 333}, {0x0028, 40, 333}, - {0x0029, 41, 333}, {0x002a, 42, 500}, {0x002b, 43, 570}, - {0x002c, 44, 250}, {0x002d, 45, 333}, {0x002e, 46, 250}, - {0x002f, 47, 278}, {0x0030, 48, 500}, {0x0031, 49, 500}, - {0x0032, 50, 500}, {0x0033, 51, 500}, {0x0034, 52, 500}, - {0x0035, 53, 500}, {0x0036, 54, 500}, {0x0037, 55, 500}, - {0x0038, 56, 500}, {0x0039, 57, 500}, {0x003a, 58, 333}, - {0x003b, 59, 333}, {0x003c, 60, 570}, {0x003d, 61, 570}, - {0x003e, 62, 570}, {0x003f, 63, 500}, {0x0040, 64, 832}, - {0x0041, 65, 667}, {0x0042, 66, 667}, {0x0043, 67, 667}, - {0x0044, 68, 722}, {0x0045, 69, 667}, {0x0046, 70, 667}, - {0x0047, 71, 722}, {0x0048, 72, 778}, {0x0049, 73, 389}, - {0x004a, 74, 500}, {0x004b, 75, 667}, {0x004c, 76, 611}, - {0x004d, 77, 889}, {0x004e, 78, 722}, {0x004f, 79, 722}, - {0x0050, 80, 611}, {0x0051, 81, 722}, {0x0052, 82, 667}, - {0x0053, 83, 556}, {0x0054, 84, 611}, {0x0055, 85, 722}, - {0x0056, 86, 667}, {0x0057, 87, 889}, {0x0058, 88, 667}, - {0x0059, 89, 611}, {0x005a, 90, 611}, {0x005b, 91, 333}, - {0x005c, 92, 278}, {0x005d, 93, 333}, {0x005e, 94, 570}, - {0x005f, 95, 500}, {0x2018, 96, 333}, {0x0061, 97, 500}, - {0x0062, 98, 500}, {0x0063, 99, 444}, {0x0064, 100, 500}, - {0x0065, 101, 444}, {0x0066, 102, 333}, {0x0067, 103, 500}, - {0x0068, 104, 556}, {0x0069, 105, 278}, {0x006a, 106, 278}, - {0x006b, 107, 500}, {0x006c, 108, 278}, {0x006d, 109, 778}, - {0x006e, 110, 556}, {0x006f, 111, 500}, {0x0070, 112, 500}, - {0x0071, 113, 500}, {0x0072, 114, 389}, {0x0073, 115, 389}, - {0x0074, 116, 278}, {0x0075, 117, 556}, {0x0076, 118, 444}, - {0x0077, 119, 667}, {0x0078, 120, 500}, {0x0079, 121, 444}, - {0x007a, 122, 389}, {0x007b, 123, 348}, {0x007c, 124, 220}, - {0x007d, 125, 348}, {0x007e, 126, 570}, {0x00a1, 161, 389}, - {0x00a2, 162, 500}, {0x00a3, 163, 500}, {0x2044, 164, 167}, - {0x00a5, 165, 500}, {0x0192, 166, 500}, {0x00a7, 167, 500}, - {0x00a4, 168, 500}, {0x0027, 169, 278}, {0x201c, 170, 500}, - {0x00ab, 171, 500}, {0x2039, 172, 333}, {0x203a, 173, 333}, - {0xfb01, 174, 556}, {0xfb02, 175, 556}, {0x2013, 177, 500}, - {0x2020, 178, 500}, {0x2021, 179, 500}, {0x00b7, 180, 250}, - {0x00b6, 182, 500}, {0x2022, 183, 350}, {0x201a, 184, 333}, - {0x201e, 185, 500}, {0x201d, 186, 500}, {0x00bb, 187, 500}, - {0x2026, 188, 1000}, {0x2030, 189, 1000}, {0x00bf, 191, 500}, - {0x0060, 193, 333}, {0x00b4, 194, 333}, {0x02c6, 195, 333}, - {0x02dc, 196, 333}, {0x00af, 197, 333}, {0x02d8, 198, 333}, - {0x02d9, 199, 333}, {0x00a8, 200, 333}, {0x02da, 202, 333}, - {0x00b8, 203, 333}, {0x02dd, 205, 333}, {0x02db, 206, 333}, - {0x02c7, 207, 333}, {0x2014, 208, 1000}, {0x00c6, 225, 944}, - {0x00aa, 227, 266}, {0x0141, 232, 611}, {0x00d8, 233, 722}, - {0x0152, 234, 944}, {0x00ba, 235, 300}, {0x00e6, 241, 722}, - {0x0131, 245, 278}, {0x0142, 248, 278}, {0x00f8, 249, 500}, - {0x0153, 250, 722}, {0x00df, 251, 500}, {0x00cf, -1, 389}, - {0x00e9, -1, 444}, {0x0103, -1, 500}, {0x0171, -1, 556}, - {0x011b, -1, 444}, {0x0178, -1, 611}, {0x00f7, -1, 570}, - {0x00dd, -1, 611}, {0x00c2, -1, 667}, {0x00e1, -1, 500}, - {0x00db, -1, 722}, {0x00fd, -1, 444}, {0x0219, -1, 389}, - {0x00ea, -1, 444}, {0x016e, -1, 722}, {0x00dc, -1, 722}, - {0x0105, -1, 500}, {0x00da, -1, 722}, {0x0173, -1, 556}, - {0x00cb, -1, 667}, {0x0110, -1, 722}, {0xf6c3, -1, 250}, - {0x00a9, -1, 747}, {0x0112, -1, 667}, {0x010d, -1, 444}, - {0x00e5, -1, 500}, {0x0145, -1, 722}, {0x013a, -1, 278}, - {0x00e0, -1, 500}, {0x0162, -1, 611}, {0x0106, -1, 667}, - {0x00e3, -1, 500}, {0x0116, -1, 667}, {0x0161, -1, 389}, - {0x015f, -1, 389}, {0x00ed, -1, 278}, {0x25ca, -1, 494}, - {0x0158, -1, 667}, {0x0122, -1, 722}, {0x00fb, -1, 556}, - {0x00e2, -1, 500}, {0x0100, -1, 667}, {0x0159, -1, 389}, - {0x00e7, -1, 444}, {0x017b, -1, 611}, {0x00de, -1, 611}, - {0x014c, -1, 722}, {0x0154, -1, 667}, {0x015a, -1, 556}, - {0x010f, -1, 608}, {0x016a, -1, 722}, {0x016f, -1, 556}, - {0x00b3, -1, 300}, {0x00d2, -1, 722}, {0x00c0, -1, 667}, - {0x0102, -1, 667}, {0x00d7, -1, 570}, {0x00fa, -1, 556}, - {0x0164, -1, 611}, {0x2202, -1, 494}, {0x00ff, -1, 444}, - {0x0143, -1, 722}, {0x00ee, -1, 278}, {0x00ca, -1, 667}, - {0x00e4, -1, 500}, {0x00eb, -1, 444}, {0x0107, -1, 444}, - {0x0144, -1, 556}, {0x016b, -1, 556}, {0x0147, -1, 722}, - {0x00cd, -1, 389}, {0x00b1, -1, 570}, {0x00a6, -1, 220}, - {0x00ae, -1, 747}, {0x011e, -1, 722}, {0x0130, -1, 389}, - {0x2211, -1, 600}, {0x00c8, -1, 667}, {0x0155, -1, 389}, - {0x014d, -1, 500}, {0x0179, -1, 611}, {0x017d, -1, 611}, - {0x2265, -1, 549}, {0x00d0, -1, 722}, {0x00c7, -1, 667}, - {0x013c, -1, 278}, {0x0165, -1, 366}, {0x0119, -1, 444}, - {0x0172, -1, 722}, {0x00c1, -1, 667}, {0x00c4, -1, 667}, - {0x00e8, -1, 444}, {0x017a, -1, 389}, {0x012f, -1, 278}, - {0x00d3, -1, 722}, {0x00f3, -1, 500}, {0x0101, -1, 500}, - {0x015b, -1, 389}, {0x00ef, -1, 278}, {0x00d4, -1, 722}, - {0x00d9, -1, 722}, {0x0394, -1, 612}, {0x00fe, -1, 500}, - {0x00b2, -1, 300}, {0x00d6, -1, 722}, {0x03bc, -1, 576}, - {0x00ec, -1, 278}, {0x0151, -1, 500}, {0x0118, -1, 667}, - {0x0111, -1, 500}, {0x00be, -1, 750}, {0x015e, -1, 556}, - {0x013e, -1, 382}, {0x0136, -1, 667}, {0x0139, -1, 611}, - {0x2122, -1, 1000}, {0x0117, -1, 444}, {0x00cc, -1, 389}, - {0x012a, -1, 389}, {0x013d, -1, 611}, {0x00bd, -1, 750}, - {0x2264, -1, 549}, {0x00f4, -1, 500}, {0x00f1, -1, 556}, - {0x0170, -1, 722}, {0x00c9, -1, 667}, {0x0113, -1, 444}, - {0x011f, -1, 500}, {0x00bc, -1, 750}, {0x0160, -1, 556}, - {0x0218, -1, 556}, {0x0150, -1, 722}, {0x00b0, -1, 400}, - {0x00f2, -1, 500}, {0x010c, -1, 667}, {0x00f9, -1, 556}, - {0x221a, -1, 549}, {0x010e, -1, 722}, {0x0157, -1, 389}, - {0x00d1, -1, 722}, {0x00f5, -1, 500}, {0x0156, -1, 667}, - {0x013b, -1, 611}, {0x00c3, -1, 667}, {0x0104, -1, 667}, - {0x00c5, -1, 667}, {0x00d5, -1, 722}, {0x017c, -1, 389}, - {0x011a, -1, 667}, {0x012e, -1, 389}, {0x0137, -1, 500}, - {0x2212, -1, 606}, {0x00ce, -1, 389}, {0x0148, -1, 556}, - {0x0163, -1, 278}, {0x00ac, -1, 606}, {0x00f6, -1, 500}, - {0x00fc, -1, 556}, {0x2260, -1, 549}, {0x0123, -1, 500}, - {0x00f0, -1, 500}, {0x017e, -1, 389}, {0x0146, -1, 556}, - {0x00b9, -1, 300}, {0x012b, -1, 278}, {0x20ac, -1, 500} -}; - - -const static pdc_core_metric pdc_core_metric_13 = -{ - "Times-BoldItalic", /* FontName */ - 262240L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) -15.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -200, /* llx */ - -218, /* lly */ - 996, /* urx */ - 921, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 669, /* CapHeight */ - 462, /* xHeight */ - 683, /* Ascender */ - -217, /* Descender */ - 121, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 315, - pdc_glyph_width_13, - -}; - -/* -------- Generated from ZapfDingbats.afm -------- */ - -static pdc_glyphwidth pdc_glyph_width_14[202] = -{ - {0x0020, 32, 278}, {0x0000, 33, 974}, {0x0000, 34, 961}, - {0x0000, 35, 974}, {0x0000, 36, 980}, {0x0000, 37, 719}, - {0x0000, 38, 789}, {0x0000, 39, 790}, {0x0000, 40, 791}, - {0x0000, 41, 690}, {0x0000, 42, 960}, {0x0000, 43, 939}, - {0x0000, 44, 549}, {0x0000, 45, 855}, {0x0000, 46, 911}, - {0x0000, 47, 933}, {0x0000, 48, 911}, {0x0000, 49, 945}, - {0x0000, 50, 974}, {0x0000, 51, 755}, {0x0000, 52, 846}, - {0x0000, 53, 762}, {0x0000, 54, 761}, {0x0000, 55, 571}, - {0x0000, 56, 677}, {0x0000, 57, 763}, {0x0000, 58, 760}, - {0x0000, 59, 759}, {0x0000, 60, 754}, {0x0000, 61, 494}, - {0x0000, 62, 552}, {0x0000, 63, 537}, {0x0000, 64, 577}, - {0x0000, 65, 692}, {0x0000, 66, 786}, {0x0000, 67, 788}, - {0x0000, 68, 788}, {0x0000, 69, 790}, {0x0000, 70, 793}, - {0x0000, 71, 794}, {0x0000, 72, 816}, {0x0000, 73, 823}, - {0x0000, 74, 789}, {0x0000, 75, 841}, {0x0000, 76, 823}, - {0x0000, 77, 833}, {0x0000, 78, 816}, {0x0000, 79, 831}, - {0x0000, 80, 923}, {0x0000, 81, 744}, {0x0000, 82, 723}, - {0x0000, 83, 749}, {0x0000, 84, 790}, {0x0000, 85, 792}, - {0x0000, 86, 695}, {0x0000, 87, 776}, {0x0000, 88, 768}, - {0x0000, 89, 792}, {0x0000, 90, 759}, {0x0000, 91, 707}, - {0x0000, 92, 708}, {0x0000, 93, 682}, {0x0000, 94, 701}, - {0x0000, 95, 826}, {0x0000, 96, 815}, {0x0000, 97, 789}, - {0x0000, 98, 789}, {0x0000, 99, 707}, {0x0000, 100, 687}, - {0x0000, 101, 696}, {0x0000, 102, 689}, {0x0000, 103, 786}, - {0x0000, 104, 787}, {0x0000, 105, 713}, {0x0000, 106, 791}, - {0x0000, 107, 785}, {0x0000, 108, 791}, {0x0000, 109, 873}, - {0x0000, 110, 761}, {0x0000, 111, 762}, {0x0000, 112, 762}, - {0x0000, 113, 759}, {0x0000, 114, 759}, {0x0000, 115, 892}, - {0x0000, 116, 892}, {0x0000, 117, 788}, {0x0000, 118, 784}, - {0x0000, 119, 438}, {0x0000, 120, 138}, {0x0000, 121, 277}, - {0x0000, 122, 415}, {0x0000, 123, 392}, {0x0000, 124, 392}, - {0x0000, 125, 668}, {0x0000, 126, 668}, {0x0000, 128, 390}, - {0x0000, 129, 390}, {0x0000, 130, 317}, {0x0000, 131, 317}, - {0x0000, 132, 276}, {0x0000, 133, 276}, {0x0000, 134, 509}, - {0x0000, 135, 509}, {0x0000, 136, 410}, {0x0000, 137, 410}, - {0x0000, 138, 234}, {0x0000, 139, 234}, {0x0000, 140, 334}, - {0x0000, 141, 334}, {0x0000, 161, 732}, {0x0000, 162, 544}, - {0x0000, 163, 544}, {0x0000, 164, 910}, {0x0000, 165, 667}, - {0x0000, 166, 760}, {0x0000, 167, 760}, {0x0000, 168, 776}, - {0x0000, 169, 595}, {0x0000, 170, 694}, {0x0000, 171, 626}, - {0x0000, 172, 788}, {0x0000, 173, 788}, {0x0000, 174, 788}, - {0x0000, 175, 788}, {0x0000, 176, 788}, {0x0000, 177, 788}, - {0x0000, 178, 788}, {0x0000, 179, 788}, {0x0000, 180, 788}, - {0x0000, 181, 788}, {0x0000, 182, 788}, {0x0000, 183, 788}, - {0x0000, 184, 788}, {0x0000, 185, 788}, {0x0000, 186, 788}, - {0x0000, 187, 788}, {0x0000, 188, 788}, {0x0000, 189, 788}, - {0x0000, 190, 788}, {0x0000, 191, 788}, {0x0000, 192, 788}, - {0x0000, 193, 788}, {0x0000, 194, 788}, {0x0000, 195, 788}, - {0x0000, 196, 788}, {0x0000, 197, 788}, {0x0000, 198, 788}, - {0x0000, 199, 788}, {0x0000, 200, 788}, {0x0000, 201, 788}, - {0x0000, 202, 788}, {0x0000, 203, 788}, {0x0000, 204, 788}, - {0x0000, 205, 788}, {0x0000, 206, 788}, {0x0000, 207, 788}, - {0x0000, 208, 788}, {0x0000, 209, 788}, {0x0000, 210, 788}, - {0x0000, 211, 788}, {0x0000, 212, 894}, {0x0000, 213, 838}, - {0x0000, 214, 1016}, {0x0000, 215, 458}, {0x0000, 216, 748}, - {0x0000, 217, 924}, {0x0000, 218, 748}, {0x0000, 219, 918}, - {0x0000, 220, 927}, {0x0000, 221, 928}, {0x0000, 222, 928}, - {0x0000, 223, 834}, {0x0000, 224, 873}, {0x0000, 225, 828}, - {0x0000, 226, 924}, {0x0000, 227, 924}, {0x0000, 228, 917}, - {0x0000, 229, 930}, {0x0000, 230, 931}, {0x0000, 231, 463}, - {0x0000, 232, 883}, {0x0000, 233, 836}, {0x0000, 234, 836}, - {0x0000, 235, 867}, {0x0000, 236, 867}, {0x0000, 237, 696}, - {0x0000, 238, 696}, {0x0000, 239, 874}, {0x0000, 241, 874}, - {0x0000, 242, 760}, {0x0000, 243, 946}, {0x0000, 244, 771}, - {0x0000, 245, 865}, {0x0000, 246, 771}, {0x0000, 247, 888}, - {0x0000, 248, 967}, {0x0000, 249, 888}, {0x0000, 250, 831}, - {0x0000, 251, 873}, {0x0000, 252, 927}, {0x0000, 253, 970}, - {0x0000, 254, 918} -}; - -const static pdc_core_metric pdc_core_metric_14 = -{ - "ZapfDingbats", /* FontName */ - 4L, /* flags */ - pdc_Type1, /* font type */ - cc_none, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - 0, /* isFixedPitch */ - -1, /* llx */ - -143, /* lly */ - 981, /* urx */ - 820, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 700, /* CapHeight */ - 0, /* xHeight */ - 800, /* Ascender */ - -200, /* Descender */ - 90, /* StdVW */ - 0, /* StdHW */ - 0, - NULL, - 202, - pdc_glyph_width_14, - -}; - -#endif /* PDF_BUILTINMETRIC_SUPPORTED */ - -#endif /* PC_COREMETR_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_crypt.c b/src/libs/pdflib/libs/pdcore/pc_crypt.c deleted file mode 100644 index 5174f46796..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_crypt.c +++ /dev/null @@ -1,26 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_crypt.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Routines for PDF encryption and decryption - * - */ - -#include "pc_util.h" -#include "pc_md5.h" -#include "pc_arc4.h" -#include "pc_crypt.h" - - -static void pdc_pd_crypt_c(void) {} - diff --git a/src/libs/pdflib/libs/pdcore/pc_crypt.h b/src/libs/pdflib/libs/pdcore/pc_crypt.h deleted file mode 100644 index 8ec3abc458..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_crypt.h +++ /dev/null @@ -1,26 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_crypt.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Crypto routines - * - */ - -#ifndef PC_CRYPT_H -#define PC_CRYPT_H - -#include "pc_core.h" -#include "pc_output.h" - - -#endif /* PC_CRYPT_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_ebcdic.c b/src/libs/pdflib/libs/pdcore/pc_ebcdic.c deleted file mode 100644 index 4dc2583f6b..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_ebcdic.c +++ /dev/null @@ -1,24 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_ebcdic.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * EBCDIC conversion routines - * - */ - -#include "pc_util.h" - -/* ANSI C forbids an empty source file */ -void pdc_dummy_ebcdic_c(void); -void pdc_dummy_ebcdic_c() {} - diff --git a/src/libs/pdflib/libs/pdcore/pc_ebcdic.h b/src/libs/pdflib/libs/pdcore/pc_ebcdic.h deleted file mode 100644 index 83bac2ff66..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_ebcdic.h +++ /dev/null @@ -1,23 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_ebcdic.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * EBCDIC conversion routines - * - */ - -#ifndef PC_EBCDIC_H -#define PC_EBCDIC_H - - -#endif /* PC_EBCDIC_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_encoding.c b/src/libs/pdflib/libs/pdcore/pc_encoding.c deleted file mode 100644 index ee3eda3c46..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_encoding.c +++ /dev/null @@ -1,1259 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_encoding.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib in-core encodings and basic encoding functions - * - */ - -#include "pc_util.h" -#include "pc_optparse.h" - -typedef struct pdc_unicodeslot_s -{ - pdc_ushort code; /* unicode value */ - pdc_ushort slot; /* slot for this value */ -} -pdc_unicodeslot; - -typedef struct pdc_core_encvector_s -{ - char *apiname; /* PDFlib's name of the encoding at the API */ - int isstdlatin; /* character names are all Adobe standard */ - pdc_ushort codes[256]; /* unicode values */ -} -pdc_core_encvector; - -static const pdc_core_encvector pdc_core_enc_winansi = -{ - "winansi", 1, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x2022, - 0x20AC, 0x2022, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x2022, 0x017D, 0x2022, - 0x2022, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x2022, 0x017E, 0x0178, - 0x0020, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x002D, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x03BC, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF - } -}; - -static const pdc_core_encvector pdc_core_enc_macroman = -{ - "macroman", 1, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, - 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, - 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, - 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, - 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, - 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x0000, 0x00C6, 0x00D8, - 0x0000, 0x00B1, 0x0000, 0x0000, 0x00A5, 0x03BC, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x00AA, 0x00BA, 0x0000, 0x00E6, 0x00F8, - 0x00BF, 0x00A1, 0x00AC, 0x0000, 0x0192, 0x0000, 0x0000, 0x00AB, - 0x00BB, 0x2026, 0x0020, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, - 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x0000, - 0x00FF, 0x0178, 0x2044, 0x00A4, 0x2039, 0x203A, 0xFB01, 0xFB02, - 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, - 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, - 0x0000, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, - 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 - } -}; - -static const pdc_core_encvector pdc_core_enc_ebcdic = -{ - "ebcdic", 1, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0020, 0x00E2, 0x00E4, 0x00E0, 0x00E1, 0x00E3, 0x00E5, - 0x00E7, 0x00F1, 0x00A2, 0x002E, 0x003C, 0x0028, 0x002B, 0x007C, - 0x0026, 0x00E9, 0x00EA, 0x00EB, 0x00E8, 0x00ED, 0x00EE, 0x00EF, - 0x00EC, 0x00DF, 0x0021, 0x0024, 0x002A, 0x0029, 0x003B, 0x005E, - 0x2212, 0x002F, 0x00C2, 0x00C4, 0x00C0, 0x00C1, 0x00C3, 0x00C5, - 0x00C7, 0x00D1, 0x00A6, 0x002C, 0x0025, 0x005F, 0x003E, 0x003F, - 0x00F8, 0x00C9, 0x00CA, 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, - 0x00CC, 0x0060, 0x003A, 0x0023, 0x0040, 0x0027, 0x003D, 0x0022, - 0x00D8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x00AB, 0x00BB, 0x00F0, 0x00FD, 0x00FE, 0x00B1, - 0x00B0, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, - 0x0071, 0x0072, 0x00AA, 0x00BA, 0x00E6, 0x00B8, 0x00C6, 0x00A4, - 0x03BC, 0x007E, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007A, 0x00A1, 0x00BF, 0x00D0, 0x005B, 0x00DE, 0x00AE, - 0x00AC, 0x00A3, 0x00A5, 0x02D9, 0x00A9, 0x00A7, 0x00B6, 0x00BC, - 0x00BD, 0x00BE, 0x00DD, 0x00A8, 0x00AF, 0x005D, 0x00B4, 0x00D7, - 0x007B, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x002D, 0x00F4, 0x00F6, 0x00F2, 0x00F3, 0x00F5, - 0x007D, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, - 0x0051, 0x0052, 0x00B9, 0x00FB, 0x00FC, 0x00F9, 0x00FA, 0x00FF, - 0x005C, 0x00F7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005A, 0x00B2, 0x00D4, 0x00D6, 0x00D2, 0x00D3, 0x00D5, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00B3, 0x00DB, 0x00DC, 0x00D9, 0x00DA, 0x0000 - } -}; - -static const pdc_core_encvector pdc_core_enc_pdfdoc = -{ - "pdfdoc", 1, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x02D8, 0x02C7, 0x02C6, 0x02D9, 0x02DD, 0x02DB, 0x02DA, 0x02DC, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, - 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, - 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x0141, 0x0152, 0x0160, - 0x0178, 0x017D, 0x0131, 0x0142, 0x0153, 0x0161, 0x017E, 0x0000, - 0x20AC, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x0000, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x03BC, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 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, - } -}; - - -#ifdef PDF_BUILTINENCODING_SUPPORTED - -static const pdc_core_encvector pdc_core_enc_iso8859_2 = -{ - "iso8859-2", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, - 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x002D, 0x017D, 0x017B, - 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, - 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, - 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, - 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, - 0x00D0, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, - 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, - 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, - 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, - 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, - 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_3 = -{ - "iso8859-3", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7, - 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B, - 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, - 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C, - 0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, - 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, - 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_4 = -{ - "iso8859-4", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, - 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, - 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, - 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, - 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, - 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, - 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, - 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, - 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, - 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_5 = -{ - "iso8859-5", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 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, - 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_6 = -{ - "iso8859-6", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, - 0x0668, 0x0669, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0000, 0x0000, 0x0000, 0x00A4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x060C, 0x00AD, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x061B, 0x0000, 0x0000, 0x0000, 0x061F, - 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, - 0x0638, 0x0639, 0x063A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, - 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, - 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_7 = -{ - "iso8859-7", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x2018, 0x2019, 0x00A3, 0x0000, 0x0000, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x0000, 0x2015, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, - 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, - 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, - 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, - 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, - 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, - 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, - 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_8 = -{ - "iso8859-8", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, - 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, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_9 = -{ - "iso8859-9", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, - 0x0020, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x002D, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x03BC, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_10 = -{ - "iso8859-10", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, - 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, - 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, - 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, - 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, - 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, - 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, - 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF, - 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, - 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_13 = -{ - "iso8859-13", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, - 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, - 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, - 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, - 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, - 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, - 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, - 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, - 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, - 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, - 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_14 = -{ - "iso8859-14", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, - 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178, - 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, - 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_15 = -{ - "iso8859-15", 1, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, - 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x002D, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x03BC, 0x00B6, 0x2022, - 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, - } -}; - -static const pdc_core_encvector pdc_core_enc_iso8859_16 = -{ - "iso8859-16", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7, - 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B, - 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7, - 0x017E, 0x010D, 0x0219, 0x00BB, 0x0152, 0x0153, 0x0178, 0x017C, - 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0106, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x0110, 0x0143, 0x00D2, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x015A, - 0x0170, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0118, 0x021A, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x0107, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x0111, 0x0144, 0x00F2, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x015B, - 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1250 = -{ - "cp1250", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, - 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, - 0x0020, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x002D, 0x00AE, 0x017B, - 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x03BC, 0x00B6, 0x00B7, - 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, - 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, - 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, - 0x00D0, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, - 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, - 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, - 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, - 0x00F0, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, - 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1251 = -{ - "cp1251", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, - 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, - 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x0000, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, - 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, - 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, - 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, - 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 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, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1253 = -{ - "cp1253", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, - 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, - 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, - 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, - 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, - 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, - 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, - 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1254 = -{ - "cp1254", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, - 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1255 = -{ - "cp1255", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, - 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, - 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, - 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1256 = -{ - "cp1256", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, - 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, - 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, - 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, - 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, - 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, - 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, - 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1257 = -{ - "cp1257", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, - 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000, - 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7, - 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, - 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, - 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, - 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, - 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, - 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, - 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, - 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, - 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9, - } -}; - -static const pdc_core_encvector pdc_core_enc_cp1258 = -{ - "cp1258", 0, - { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 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, 0x0000, - 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, - 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, - 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, - 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF, - } -}; - -#endif /* PDF_BUILTINENCODING_SUPPORTED */ - -static const pdc_core_encvector *pdc_core_encodings[] = { - &pdc_core_enc_winansi, - &pdc_core_enc_macroman, - &pdc_core_enc_ebcdic, - &pdc_core_enc_pdfdoc, -#ifdef PDF_BUILTINENCODING_SUPPORTED - &pdc_core_enc_iso8859_2, - &pdc_core_enc_iso8859_3, - &pdc_core_enc_iso8859_4, - &pdc_core_enc_iso8859_5, - &pdc_core_enc_iso8859_6, - &pdc_core_enc_iso8859_7, - &pdc_core_enc_iso8859_8, - &pdc_core_enc_iso8859_9, - &pdc_core_enc_iso8859_10, - &pdc_core_enc_iso8859_13, - &pdc_core_enc_iso8859_14, - &pdc_core_enc_iso8859_15, - &pdc_core_enc_iso8859_16, - &pdc_core_enc_cp1250, - &pdc_core_enc_cp1251, - &pdc_core_enc_cp1253, - &pdc_core_enc_cp1254, - &pdc_core_enc_cp1255, - &pdc_core_enc_cp1256, - &pdc_core_enc_cp1257, - &pdc_core_enc_cp1258, -#endif /* PDF_BUILTINENCODING_SUPPORTED */ -}; - - -pdc_encodingvector * -pdc_copy_core_encoding(pdc_core *pdc, const char *name) -{ - static const char fn[] = "pdc_copy_core_encoding"; - const char *tmpname = name; - const pdc_core_encvector *ev_ic; - pdc_encodingvector *ev = NULL; - int i, slot; - - /* MacRoman encoding with euro sign */ - if (!strcmp(name, "macroman_euro")) - tmpname = "macroman"; - - /* iso8859-1 encoding */ - if (!strcmp(name, "iso8859-1")) - tmpname = "winansi"; - - for (slot = 0; - slot < (int)(sizeof(pdc_core_encodings)/sizeof(pdc_core_encodings[0])); - slot++) - { - ev_ic = pdc_core_encodings[slot]; - if (!strcmp(tmpname, ev_ic->apiname)) - { - ev = (pdc_encodingvector *) - pdc_malloc(pdc, sizeof(pdc_encodingvector), fn); - - ev->apiname = pdc_strdup(pdc, name); - - for (i = 0; i < 256; i++) - { - if (i == 0333 && !strcmp(name, "macroman_euro")) - ev->codes[i] = PDC_EURO_SIGN; - else - ev->codes[i] = ev_ic->codes[i]; - ev->chars[i] = (char *)pdc_unicode2adobe(ev->codes[i]); - ev->given[i] = 1; - } - - if (!strcmp(name, "iso8859-1")) - { - for (i = 127; i < 160; i++) - { - ev->codes[i] = 0; - ev->chars[i] = NULL; - } - } - - ev->sortedslots = NULL; - ev->nslots = 0; - ev->flags = PDC_ENC_INCORE; - ev->flags |= PDC_ENC_SETNAMES; - if (ev_ic->isstdlatin) - ev->flags |= PDC_ENC_STDNAMES; - break; - } - } - return ev; -} - - -void -pdc_init_encoding(pdc_core *pdc, pdc_encodingvector *ev, const char *name) -{ - int slot; - - ev->apiname = pdc_strdup(pdc, name); - for (slot = 0; slot < 256; slot++) - { - ev->codes[slot] = 0; - ev->chars[slot] = NULL; - ev->given[slot] = 0; - } - ev->sortedslots = NULL; - ev->nslots = 0; - ev->flags = 0; -} - - -pdc_encodingvector * -pdc_new_encoding(pdc_core *pdc, const char *name) -{ - static const char fn[] = "pdc_new_encoding"; - - pdc_encodingvector *ev = (pdc_encodingvector *) - pdc_malloc(pdc, sizeof(pdc_encodingvector), fn); - pdc_init_encoding(pdc, ev, name); - return(ev); -} - - -void -pdc_cleanup_encoding(pdc_core *pdc, pdc_encodingvector *ev) -{ - int slot; - - if (ev->apiname) - pdc_free(pdc, ev->apiname); - - if (ev->flags & PDC_ENC_ALLOCCHARS) - { - for (slot = 0; slot < 256; slot++) - if (ev->chars[slot]) - pdc_free(pdc, ev->chars[slot]); - } - - if (ev->sortedslots) - pdc_free(pdc, ev->sortedslots); - - pdc_free(pdc, ev); -} - -static int -pdc_unicode_compare(const void *a, const void *b) -{ - pdc_unicodeslot *sssa = (pdc_unicodeslot *) a; - pdc_unicodeslot *sssb = (pdc_unicodeslot *) b; - pdc_ushort uva = sssa->code; - pdc_ushort uvb = sssb->code; - return (uva < uvb ? -1 : (uva > uvb ? 1 : 0 )); -} - -int -pdc_get_encoding_bytecode(pdc_core *pdc, pdc_encodingvector *ev, pdc_ushort uv) -{ - static const char fn[] = "pdc_get_encoding_bytecode"; - pdc_ushort slot; - int i, j, lo, hi; - - if (uv) - { - if (!ev->sortedslots) - { - int nslots = 1; - pdc_unicodeslot sss[256]; - - sss[0].code = 0; - sss[0].slot = 0; - for (slot = 1; slot < 256; slot++) - { - if (ev->codes[slot]) - { - sss[nslots].code = ev->codes[slot]; - sss[nslots].slot = slot; - nslots++; - } - } - - /* sort unicode values */ - qsort((void *)sss, (size_t) nslots, sizeof(pdc_unicodeslot), - pdc_unicode_compare); - - /* copy slot values */ - ev->sortedslots = - (pdc_byte*)pdc_malloc(pdc, nslots * sizeof(char), fn); - j = 0; - for (i = 0; i < nslots; i++) - { - /* If pairs are identical in unicode values, - * we take the pair with the smaller 8-bit code */ - if (i && sss[i].code == sss[i-1].code) - { - if (sss[i].slot > sss[i-1].slot) - continue; - j--; - } - ev->sortedslots[j] = (pdc_byte) sss[i].slot; - j++; - } - ev->nslots = j; - } - - lo = 0; - hi = ev->nslots; - while (lo < hi) - { - i = (lo + hi) / 2; - slot = (pdc_ushort) ev->sortedslots[i]; - - if (uv == ev->codes[slot]) - return slot; - - if (uv < ev->codes[slot]) - hi = i; - else - lo = i + 1; - } - } - - return -1; -} - -static const pdc_keyconn pdc_encoding_keytable[] = -{ - {"glyphid", pdc_glyphid}, - {"unicode", pdc_unicode}, - {"builtin", pdc_builtin}, - {"winansi", pdc_winansi}, - {"macroman", pdc_macroman}, - {"ebcdic", pdc_ebcdic}, - {"pdfdoc", pdc_pdfdoc}, - {NULL, 0}, -}; - -const char * -pdc_get_fixed_encoding_name(pdc_encoding enc) -{ - const char *encname = pdc_get_keyword(enc, pdc_encoding_keytable); - if (encname) - return encname; - return ""; -} diff --git a/src/libs/pdflib/libs/pdcore/pc_encoding.h b/src/libs/pdflib/libs/pdcore/pc_encoding.h deleted file mode 100644 index a082d14b55..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_encoding.h +++ /dev/null @@ -1,84 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_encoding.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Encoding data structures and routines - * - */ - -#ifndef PC_ENCODING_H -#define PC_ENCODING_H - -/* - * Symbolic names for predefined font encodings. 0 and above are used - * as indices in the pdc_encodingvector array. The encodings above - * ebcdic have no enumeration name, because they are loaded dynamically. - * - * The predefined encodings must not be changed or rearranged. - * The order of encodings here must match that of pdc_core_encodings - * and pdc_fixed_encoding_names in pc_encoding.c. - */ -typedef enum -{ - pdc_invalidenc = -5, - pdc_glyphid = -4, - pdc_unicode = -3, - pdc_builtin = -2, - pdc_cid = -1, - pdc_winansi = 0, - pdc_macroman = 1, - pdc_ebcdic = 2, - pdc_pdfdoc = 3, - pdc_firstvarenc = 4 -} -pdc_encoding; - -typedef struct pdc_encodingvector_s pdc_encodingvector; - -struct pdc_encodingvector_s -{ - char *apiname; /* PDFlib's name of the encoding at the API */ - pdc_ushort codes[256]; /* unicode values */ - char *chars[256]; /* character names */ - char given[256]; /* flag whether character name is given */ - pdc_byte *sortedslots; /* slots for sorted unicode values */ - int nslots; /* number of sorted slots */ - unsigned long flags; /* flags, see PDC_ENC_... */ -}; - -#define PDC_ENC_INCORE (1L<<0) /* encoding from in-core */ -#define PDC_ENC_FILE (1L<<1) /* encoding from file */ -#define PDC_ENC_HOST (1L<<2) /* encoding from host system */ -#define PDC_ENC_USER (1L<<3) /* encoding from user */ -#define PDC_ENC_FONT (1L<<4) /* encoding from font */ -#define PDC_ENC_GENERATE (1L<<5) /* encoding generated from Unicode page */ -#define PDC_ENC_USED (1L<<6) /* encoding already used */ -#define PDC_ENC_SETNAMES (1L<<7) /* character names are set */ -#define PDC_ENC_ALLOCCHARS (1L<<8) /* character names are allocated */ -#define PDC_ENC_STDNAMES (1L<<9) /* character names are all Adobe standard*/ - -#define PDC_ENC_MODSEPAR "_" /* separator of modified encoding */ -#define PDC_ENC_MODWINANSI "winansi_" /* prefix of modified winansi enc */ -#define PDC_ENC_MODMACROMAN "macroman_" /* prefix of modified macroman enc */ - -/* pc_encoding.c */ -void pdc_init_encoding(pdc_core *pdc, pdc_encodingvector *ev, - const char *name); -pdc_encodingvector *pdc_new_encoding(pdc_core *pdc, const char *name); -void pdc_cleanup_encoding(pdc_core *pdc, pdc_encodingvector *ev); -int pdc_get_encoding_bytecode(pdc_core *pdc, pdc_encodingvector *ev, - pdc_ushort uv); -pdc_encodingvector *pdc_copy_core_encoding(pdc_core *pdc, const char *encoding); -const char *pdc_get_fixed_encoding_name(pdc_encoding enc); - -#endif /* PC_ENCODING_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_file.c b/src/libs/pdflib/libs/pdcore/pc_file.c deleted file mode 100644 index b07dddfee1..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_file.c +++ /dev/null @@ -1,772 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_file.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Various file routines - * - */ - -#include - -#include "pc_config.h" -#include "pc_util.h" -#include "pc_md5.h" -#include "pc_file.h" - -/* headers for getpid() or _getpid(). -*/ -#if defined(WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#include -#else -#if !defined(MAC) - #include - #include -#endif -#endif - -#ifndef WINCE -#include -#else -#include -#endif - -struct pdc_file_s -{ - pdc_core *pdc; /* pdcore struct */ - char *filename; /* file name */ - FILE *fp; /* file struct or NULL. Then data != NULL: */ - const pdc_byte *data; /* file data or NULL. Then fp != NULL */ - const pdc_byte *end; /* first byte above data buffer */ - const pdc_byte *pos; /* current file position in data buffer */ - pdc_byte *tdata; /* temporary buffer filled up by ungetc */ - int number; /* next available entry in tdata buffer */ - int capacity; /* currently allocated size of tdata buffer */ -}; - -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma unmanaged -#endif -int -pdc_get_fopen_errnum(pdc_core *pdc, int errnum) -{ - int outnum = errnum, isread; - - (void) pdc; - - isread = (errnum == PDC_E_IO_RDOPEN); - -#if defined(MVS) - - switch (errno) - { - case 49: - outnum = isread ? PDC_E_IO_RDOPEN_NF : PDC_E_IO_WROPEN_NF; - } - return outnum; - -#elif defined(WIN32) - { - DWORD lasterror = GetLastError(); - switch (lasterror) - { - case ERROR_ACCESS_DENIED: - outnum = isread ? PDC_E_IO_RDOPEN_PD : PDC_E_IO_WROPEN_PD; - break; - - case ERROR_FILE_NOT_FOUND: - case ERROR_INVALID_DRIVE: - case ERROR_BAD_UNIT: - outnum = isread ? PDC_E_IO_RDOPEN_NF : PDC_E_IO_WROPEN_NF; - break; - - case ERROR_INVALID_NAME: - outnum = isread ? PDC_E_IO_RDOPEN_NF : PDC_E_IO_WROPEN_IS; - break; - - case ERROR_PATH_NOT_FOUND: - outnum = isread ? PDC_E_IO_RDOPEN_NF : PDC_E_IO_WROPEN_NP; - break; - - case ERROR_TOO_MANY_OPEN_FILES: - case ERROR_SHARING_BUFFER_EXCEEDED: - outnum = isread ? PDC_E_IO_RDOPEN_TM : PDC_E_IO_WROPEN_TM; - break; - - case ERROR_FILE_EXISTS: - outnum = PDC_E_IO_WROPEN_AE; - break; - - case ERROR_BUFFER_OVERFLOW: - outnum = PDC_E_IO_WROPEN_TL; - break; - - case ERROR_WRITE_FAULT: - case ERROR_CANNOT_MAKE: - outnum = PDC_E_IO_WROPEN_NC; - break; - - case ERROR_HANDLE_DISK_FULL: - outnum = PDC_E_IO_WROPEN_NS; - break; - } - - if (lasterror) - return outnum; - - /* if lasterror == 0 we must look for errno (see .NET) */ - } - -#endif /* WIN32 */ - - switch (errno) - { -#ifdef EACCES - case EACCES: - outnum = isread ? PDC_E_IO_RDOPEN_PD : PDC_E_IO_WROPEN_PD; - break; -#endif -#ifdef ENOENT - case ENOENT: - outnum = isread ? PDC_E_IO_RDOPEN_NF : PDC_E_IO_WROPEN_NF; - break; -#endif -#ifdef EMFILE - case EMFILE: - outnum = isread ? PDC_E_IO_RDOPEN_TM : PDC_E_IO_WROPEN_TM; - break; -#endif -#ifdef ENFILE - case ENFILE: - outnum = isread ? PDC_E_IO_RDOPEN_TM : PDC_E_IO_WROPEN_TM; - break; -#endif -#ifdef EISDIR - case EISDIR: - outnum = isread ? PDC_E_IO_RDOPEN_ID : PDC_E_IO_WROPEN_ID; - break; -#endif -#ifdef EEXIST - case EEXIST: - outnum = PDC_E_IO_WROPEN_AE; - break; -#endif -#ifdef ENAMETOOLONG - case ENAMETOOLONG: - outnum = PDC_E_IO_WROPEN_TL; - break; -#endif -#ifdef ENOSPC - case ENOSPC: - outnum = PDC_E_IO_WROPEN_NS; - break; -#endif - default: - outnum = errnum; - break; - } - - return outnum; -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif - -void * -pdc_read_file(pdc_core *pdc, FILE *fp, size_t *o_filelen, int incore) -{ - static const char *fn = "pdc_read_file"; - size_t filelen, len; - char *content = NULL; - -#if defined(MVS) && defined(I370) -#define PDC_READ_CHUNKSIZE 64000 - - while (!feof(fp)) - { - if (!content) - { - len = 0; - filelen = PDC_READ_CHUNKSIZE; - content = (char *) pdc_malloc(pdc, filelen + 1, fn); - } - else if (incore) - { - len = filelen; - filelen += PDC_READ_CHUNKSIZE; - content = (char *) pdc_realloc(pdc, content, filelen + 1, fn); - } - len = fread(&content[len], 1, PDC_READ_CHUNKSIZE, fp); - } - filelen += len - PDC_READ_CHUNKSIZE; - if (incore && filelen) - { - content = (char *) pdc_realloc(pdc, content, filelen + 1, fn); - } - else - { - pdc_free(pdc, content); - content = NULL; - } - -#else - - fseek(fp, 0L, SEEK_END); - filelen = (size_t) ftell(fp); - fseek(fp, 0L, SEEK_SET); - if (incore && filelen) - { - content = (char *) pdc_malloc(pdc, filelen + 1, fn); - len = fread(content, 1, filelen, fp); - if (len != filelen) - { - pdc_free(pdc, content); - filelen = 0; - content = NULL; - } - } - -#endif - - if (content) content[filelen] = 0; - *o_filelen = filelen; - return (void *) content; -} - -pdc_file * -pdc_fopen(pdc_core *pdc, const char *filename, const char *qualifier, - const pdc_byte *data, size_t size, int flags) -{ - static const char fn[] = "pdc_fopen"; - pdc_file *sfile; - - sfile = (pdc_file *) pdc_calloc(pdc, sizeof(pdc_file), fn); - if (data) - { - sfile->data = data; - sfile->pos = sfile->data; - sfile->end = sfile->data + size; - } - else - { - sfile->fp = fopen(filename, - (flags & PDC_FILE_BINARY) ? READBMODE : READTMODE); - if (sfile->fp == NULL) - { - pdc_free(pdc, sfile); - if (qualifier) - { - pdc_set_errmsg(pdc, pdc_get_fopen_errnum(pdc, PDC_E_IO_RDOPEN), - qualifier, filename, 0, 0); - } - return NULL; - } - } - - sfile->pdc = pdc; - sfile->filename = pdc_strdup(pdc, filename); - - - return sfile; -} - - -pdc_bool -pdc_file_isvirtual(pdc_file *sfp) -{ - return sfp->fp ? pdc_false : pdc_true; -} - -char * -pdc_file_name(pdc_file *sfp) -{ - return sfp->filename; -} - -pdc_core * -pdc_file_getpdc(pdc_file *sfp) -{ - return sfp->pdc; -} - -size_t -pdc_file_size(pdc_file *sfp) -{ - size_t filelen; - - if (sfp->fp) - { - long pos = ftell(sfp->fp); - pdc_read_file(sfp->pdc, sfp->fp, &filelen, 0); - fseek(sfp->fp, pos, SEEK_SET); - } - else - filelen = (size_t) (sfp->end - sfp->data); - return filelen; -} - -const void * -pdc_freadall(pdc_file *sfp, size_t *filelen, pdc_bool *ismem) -{ - if (sfp->fp) - { - if (ismem) *ismem = pdc_false; - return (const void *) pdc_read_file(sfp->pdc, sfp->fp, filelen, 1); - } - - if (ismem) *ismem = pdc_true; - *filelen = (size_t) (sfp->end - sfp->data); - return sfp->data; -} - -static int -pdc_fgetc_e(pdc_file *sfp) -{ - int c = pdc_fgetc(sfp); - return c; -} - -char * -pdc_fgets_comp(char *s, int size, pdc_file *sfp) -{ - int i, c; - - c = pdc_fgetc_e(sfp); - if (c == EOF) - return NULL; - - size--; - for (i = 0; i < size; i++) - { - if (c == '\n' || c == '\r' || c == EOF) break; - s[i] = (char) c; - c = pdc_fgetc_e(sfp); - } - s[i] = 0; - - /* Skip windows line end \r\n */ - if (c == '\r') - { - c = pdc_fgetc_e(sfp); - if (c != '\n') - { - pdc_ungetc(c, sfp); - } - } - return s; -} - -/* - * Emulation of C file functions - relevant for PDFlib - */ - -long -pdc_ftell(pdc_file *sfp) -{ - if (sfp->fp) - return ftell(sfp->fp); - - return (long) (sfp->pos - sfp->data); -} - -int -pdc_fseek(pdc_file *sfp, long offset, int whence) -{ - if (sfp->fp) - return fseek(sfp->fp, offset, whence); - - sfp->number = 0; - - switch (whence) - { - case SEEK_SET: - if (sfp->data + offset > sfp->end) - return -1; - sfp->pos = sfp->data + offset; - break; - - case SEEK_CUR: - if (sfp->pos + offset > sfp->end) - return -1; - sfp->pos += offset; - break; - - case SEEK_END: - if (sfp->end + offset > sfp->end) - return -1; - sfp->pos = sfp->end + offset; - break; - } - return 0; -} - -size_t -pdc_fread(void *ptr, size_t size, size_t nmemb, pdc_file *sfp) -{ - size_t nbytes = 0; - - if (sfp->fp) - return fread(ptr, size, nmemb, sfp->fp); - - nbytes = size * nmemb; - if (sfp->pos + nbytes > sfp->end) - { - nbytes = (size_t) (sfp->end - sfp->pos); - nmemb = nbytes / size; - nbytes = nmemb *size; - } - memcpy(ptr, sfp->pos, nbytes); - sfp->pos += nbytes; - - return nmemb; -} - -#define UNGETC_CHUNKSIZE 16 - -int -pdc_ungetc(int c, pdc_file *sfp) -{ - static const char fn[] = "pdc_ungetc"; - - if (sfp->fp) - return ungetc(c, sfp->fp); - - if (!sfp->capacity) - { - sfp->capacity = UNGETC_CHUNKSIZE; - sfp->tdata = (pdc_byte *) pdc_malloc(sfp->pdc, - sfp->capacity * sizeof(pdc_byte), fn); - } - else if (sfp->number == sfp->capacity) - { - sfp->capacity += UNGETC_CHUNKSIZE; - sfp->tdata = (pdc_byte *) pdc_realloc(sfp->pdc, sfp->tdata, - sfp->capacity * sizeof(pdc_byte), fn); - } - - sfp->tdata[sfp->number] = (pdc_byte) c; - sfp->number++; - return c; -} - -int -pdc_fgetc(pdc_file *sfp) -{ - int ch = 0; - - if (sfp->fp) - return fgetc(sfp->fp); - - if (sfp->tdata && sfp->number > 0) - { - sfp->number--; - ch = (int) sfp->tdata[sfp->number]; - } - else - { - if (sfp->pos < sfp->end) - { - ch = (int) *sfp->pos; - sfp->pos++; - } - else - { - ch = EOF; - } - } - return ch; -} - -char * -pdc_fgets(char *s, int size, pdc_file *sfp) -{ - int i; - int ch, chp; - - if (sfp->fp) - return fgets(s, size, sfp->fp); - - chp = 0; - for (i = 0; i < size ; i++) - { - ch = 0; - if (i < size - 1 && chp != '\n') - { - if (sfp->number > 0) - { - sfp->number--; - ch = (int) sfp->tdata[sfp->number]; - } - else if (sfp->pos < sfp->end) - { - ch = (int) *sfp->pos; - sfp->pos++; - } - if (ch == EOF) ch = 0; - } - s[i] = (char) ch; - if (!ch) - break; - chp = (int) s[i]; - } - - return (i > 1) ? s : NULL; -} - -int -pdc_feof(pdc_file *sfp) -{ - if (sfp->fp) - return feof(sfp->fp); - - return (sfp->pos >= sfp->end) ? 1 : 0; -} - -void -pdc_fclose(pdc_file *sfp) -{ - if (sfp) - { - if (sfp->fp) - { - fclose(sfp->fp); - sfp->fp = NULL; - } - if (sfp->tdata) - { - pdc_free(sfp->pdc, sfp->tdata); - sfp->tdata = NULL; - } - if (sfp->filename) - { - pdc_free(sfp->pdc, sfp->filename); - sfp->filename = NULL; - } - pdc_free(sfp->pdc, sfp); - } -} - -/* - * Concatenating a directory name with a file base name to a full valid - * file name. On MVS platforms an extension at the end of basename - * will be discarded. - */ -void -pdc_file_fullname(const char *dirname, const char *basename, char *fullname) -{ - int ib; - size_t len = strlen(basename); -#ifdef MVS - pdc_bool lastterm = pdc_false; -#endif - - for (ib = 0; ib < (int) len; ib++) - if (!isspace(basename[ib])) - break; - - if (!dirname || !dirname[0]) - { - strcpy(fullname, &basename[ib]); - } - else - { - fullname[0] = 0; -#ifdef MVS - if (strncmp(dirname, PDC_FILEQUOT, 1)) - strcat(fullname, PDC_FILEQUOT); -#endif - strcat(fullname, dirname); - strcat(fullname, PDC_PATHSEP); - strcat(fullname, &basename[ib]); -#ifdef MVS - lastterm = pdc_true; -#endif - } - -#ifdef MVS - { - int ie; - - len = strlen(fullname); - for (ie = len; ie >= 0; ie--) - { - if (!strncmp(&fullname[ie], PDC_PATHSEP, 1)) - break; - if (fullname[ie] == '.') - { - fullname[ie] = 0; - break; - } - } - if (lastterm) - { - strcat(fullname, PDC_PATHTERM); - strcat(fullname, PDC_FILEQUOT); - } - } -#endif -} - -/* - * Function reads a text file and creates a string list - * of all no-empty and no-comment lines. The strings are stripped - * by leading and trailing white space characters. - * - * The caller is responsible for freeing the resultated string list - * by calling the function pdc_cleanup_stringlist. - * - * Not for unicode strings. - * - * Return value: Number of strings - */ - -#define PDC_BUFSIZE 1024 -#define PDC_ARGV_CHUNKSIZE 256 - -int -pdc_read_textfile(pdc_core *pdc, pdc_file *sfp, char ***linelist) -{ - static const char *fn = "pdc_read_textfile"; - char buf[PDC_BUFSIZE]; - char *content = NULL; - char **argv = NULL; - int nlines = 0; - size_t filelen; - size_t len, maxl = 0; - int tocont, incont = 0; - int i, is = 0; - - /* Get file length and allocate content array */ - filelen = pdc_file_size(sfp); - content = (char *) pdc_malloc(pdc, filelen, fn); - - /* Read loop */ - while (pdc_fgets_comp(buf, PDC_BUFSIZE, sfp) != NULL) - { - /* Strip blank and comment lines */ - pdc_str2trim(buf); - if (buf[0] == 0 || buf[0] == '%') - continue; - - /* Strip inline comments */ - len = strlen(buf); - for (i = 1; i < (int) len; i++) - { - if (buf[i] == '%' && buf[i-1] != '\\') - { - buf[i] = 0; - pdc_strtrim(buf); - len = strlen(buf); - break; - } - } - - /* Continuation line */ - tocont = (buf[len-1] == '\\') ? 1:0; - if (tocont) - { - buf[len-1] = '\0'; - len--; - } - - /* Copy line */ - strcpy(&content[is], buf); - - /* Save whole line */ - if (!incont) - { - if (nlines >= (int) maxl) - { - maxl += PDC_ARGV_CHUNKSIZE; - argv = (argv == NULL) ? - (char **)pdc_malloc(pdc, maxl * sizeof(char *), fn): - (char **)pdc_realloc(pdc, argv, maxl * - sizeof(char *), fn); - } - argv[nlines] = &content[is]; - nlines++; - } - - /* Next index */ - incont = tocont; - is += (int) (len + 1 - incont); - } - - if (!argv) pdc_free(pdc, content); - *linelist = argv; - return nlines; -} - - -/* generate a temporary file name from the current time, pid, and the -** data in inbuf using MD5. -*/ -void -pdc_tempname(char *outbuf, int outlen, const char *inbuf, int inlen) -{ - MD5_CTX md5; - time_t timer; - unsigned char digest[MD5_DIGEST_LENGTH]; - int i; - -#if defined(WIN32) - int pid = _getpid(); -#else -#if !defined(MAC) - pid_t pid = getpid(); -#endif -#endif - - time(&timer); - - MD5_Init(&md5); -#if !defined(MAC) - MD5_Update(&md5, (unsigned char *) &pid, sizeof pid); -#endif - MD5_Update(&md5, (unsigned char *) &timer, sizeof timer); - MD5_Update(&md5, (unsigned char *) inbuf, (unsigned int) inlen); - MD5_Final(digest, &md5); - - for (i = 0; i < outlen - 1; ++i) - outbuf[i] = (char) ('A' + digest[i % MD5_DIGEST_LENGTH] % 26); - - outbuf[i] = 0; -} - -#ifdef PDF_TARGET_API_MAC_CARBON - -/* Construct an FSSpec from a Posix path name. Only required for - * Carbon (host font support and file type/creator). - */ - -OSStatus -FSPathMakeFSSpec(const UInt8 *path, FSSpec *spec) -{ - OSStatus result; - FSRef ref; - - /* convert the POSIX path to an FSRef */ - result = FSPathMakeRef(path, &ref, NULL); - - if (result != noErr) - return result; - - /* and then convert the FSRef to an FSSpec */ - result = FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL, spec, NULL); - - return result; -} - -#endif /* PDF_TARGET_API_MAC_CARBON */ - diff --git a/src/libs/pdflib/libs/pdcore/pc_file.h b/src/libs/pdflib/libs/pdcore/pc_file.h deleted file mode 100644 index 317dd74b46..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_file.h +++ /dev/null @@ -1,76 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_file.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Definitions for file routines - * - */ - -#ifndef PC_FILE_H -#define PC_FILE_H - -#if (defined(MAC) || defined(MACOSX)) - -#include - -#ifdef PDF_TARGET_API_MAC_CARBON - -OSStatus FSPathMakeFSSpec(const UInt8 *path, FSSpec *spec); - -#else - -#include - -OSErr FSpLocationFromFullPath(short fullPathLength, - const void *fullPath, FSSpec *spec); - -#endif /* !PDF_TARGET_API_MAC_CARBON */ -#endif /* (defined(MAC) || defined(MACOSX)) */ - -#define PDC_FILENAMELEN 1024 /* maximum file name length */ - -#define PDC_FILE_BINARY (1L<<0) /* open as binary file, - otherwise as text file */ - -#define PDC_OK_FREAD(file, buffer, len) \ - (pdc_fread(buffer, 1, len, file) == len) - -typedef struct pdc_file_s pdc_file; - -int pdc_get_fopen_errnum(pdc_core *pdc, int errnum); -void *pdc_read_file(pdc_core *pdc, FILE *fp, size_t *o_filelen, int incore); -int pdc_read_textfile(pdc_core *pdc, pdc_file *sfp, char ***linelist); -void pdc_tempname(char *outbuf, int outlen, const char *inbuf, int inlen); - -pdc_file *pdc_fopen(pdc_core *pdc, const char *filename, const char *qualifier, - const pdc_byte *data, size_t size, int flags); -pdc_core *pdc_file_getpdc(pdc_file *sfp); -char *pdc_file_name(pdc_file *sfp); -size_t pdc_file_size(pdc_file *sfp); -pdc_bool pdc_file_isvirtual(pdc_file *sfp); -char *pdc_fgets_comp(char *s, int size, pdc_file *sfp); -long pdc_ftell(pdc_file *sfp); -int pdc_fseek(pdc_file *sfp, long offset, int whence); -size_t pdc_fread(void *ptr, size_t size, size_t nmemb, pdc_file *sfp); -const void *pdc_freadall(pdc_file *sfp, size_t *filelen, pdc_bool *ismem); -int pdc_ungetc(int c, pdc_file *sfp); -int pdc_fgetc(pdc_file *sfp); -char *pdc_fgets(char *s, int size, pdc_file *sfp); -int pdc_feof(pdc_file *sfp); -void pdc_fclose(pdc_file *sfp); -void pdc_file_fullname(const char *dirname, const char *basename, - char *fullname); - - - -#endif /* PC_FILE_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_font.c b/src/libs/pdflib/libs/pdcore/pc_font.c deleted file mode 100644 index e258faa925..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_font.c +++ /dev/null @@ -1,159 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_font.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Basic font functions - * - */ - -#include "pc_util.h" -#include "pc_font.h" - -void -pdc_init_font_struct(pdc_core *pdc, pdc_font *font) -{ - /* - * Fill in some reasonable default values in global font info in - * case they're missing from the metrics data. - */ - - (void) pdc; - - memset(font, 0, sizeof(pdc_font)); - - font->verbose = pdc_true; - font->verbose_open = pdc_true; - font->obj_id = PDC_BAD_ID; - font->type = pdc_Type1; - font->style = pdc_Normal; - font->encoding = pdc_builtin; - font->charcoll = cc_none; - - font->italicAngle = 0; - font->isFixedPitch = pdc_false; - font->llx = (float) -50; - font->lly = (float) -200; - font->urx = (float) 1000; - font->ury = (float) 900; - font->underlinePosition = -100; - font->underlineThickness = 50; - font->capHeight = 700; - font->xHeight = 0; - font->ascender = 800; - font->descender = -200; - font->StdVW = 0; - font->StdHW = 0; - font->monospace = 0; - - font->codeSize = 1; - font->numOfCodes = 256; - font->lastCode = -1; -} - -void -pdc_cleanup_font_struct(pdc_core *pdc, pdc_font *font) -{ - int i; - - if (font == NULL) - return; - - if (font->img != NULL && font->imgname == NULL) - pdc_free(pdc, font->img); - - if (font->imgname != NULL) - pdc_free(pdc, font->imgname); - - if (font->name != NULL) - pdc_free(pdc, font->name); - - if (font->apiname != NULL) - pdc_free(pdc, font->apiname); - - if (font->ttname != NULL) - pdc_free(pdc, font->ttname); - - if (font->fontfilename != NULL) - pdc_free(pdc, font->fontfilename); - - if (font->cmapname != NULL) { - pdc_free(pdc, font->cmapname); - } - - if (font->encapiname != NULL) { - pdc_free(pdc, font->encapiname); - } - - if (font->glw != NULL) { - pdc_free(pdc, font->glw); - } - - if (font->pkd != NULL) { - pdc_free(pdc, font->pkd); - } - - if (font->GID2Name != NULL) { - if (font->names_tbf) { - for (i = 0; i < font->numOfGlyphs; i++) { - if (font->GID2Name[i] != NULL) - pdc_free(pdc, font->GID2Name[i]); - } - } - pdc_free(pdc, font->GID2Name); - } - - if (font->GID2code != NULL) { - pdc_free(pdc, font->GID2code); - } - - if (font->code2GID != NULL) { - pdc_free(pdc, font->code2GID); - } - - if (font->usedGIDs != NULL) { - pdc_free(pdc, font->usedGIDs); - } - - if (font->widthsTab != NULL) { - pdc_free(pdc, font->widthsTab); - } - - if (font->widths != NULL) { - pdc_free(pdc, font->widths); - } - - if (font->usedChars != NULL) { - pdc_free(pdc, font->usedChars); - } - - if (font->t3font != NULL) { - pdc_cleanup_t3font_struct(pdc, font->t3font); - pdc_free(pdc, font->t3font); - } -} - -void -pdc_cleanup_t3font_struct(pdc_core *pdc, pdc_t3font *t3font) -{ - int i; - - if (t3font->fontname != NULL) - pdc_free(pdc, t3font->fontname); - - for (i = 0; i < t3font->next_glyph; i++) { - if (t3font->glyphs[i].name) - pdc_free(pdc, t3font->glyphs[i].name); - } - - pdc_free(pdc, t3font->glyphs); -} diff --git a/src/libs/pdflib/libs/pdcore/pc_font.h b/src/libs/pdflib/libs/pdcore/pc_font.h deleted file mode 100644 index 203176a1ee..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_font.h +++ /dev/null @@ -1,226 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_font.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file for font handling - * - */ - -#ifndef PC_FONT_H -#define PC_FONT_H - -#include "pc_core.h" -#include "pc_geom.h" -#include "pc_encoding.h" - -/* Predefined character collections */ -typedef enum { - cc_simplified_chinese, - cc_traditional_chinese, - cc_japanese, - cc_korean, - cc_identity, - cc_none -} pdc_charcoll; - -/* Font types */ -typedef enum { - pdc_Type1, /* Type1 fonts */ - pdc_MMType1, /* Multiple master fonts */ - pdc_TrueType, /* TrueType fonts for 1-byte encoding */ - pdc_CIDFontType2, /* TrueType fonts for 2-byte encoding */ - pdc_Type1C, /* OpenType fonts with CFF_ for 1-byte encoding */ - pdc_CIDFontType0, /* OpenType fonts with CFF_ for 2-byte encoding */ - pdc_Type3 /* Type3 fonts */ -} pdc_fonttype; - -/* Font styles */ -typedef enum { - pdc_Normal, - pdc_Bold, - pdc_Italic, - pdc_BoldItalic -} pdc_fontstyle; - -typedef struct pdc_interwidth_s pdc_interwidth; -typedef struct pdc_core_metric_s pdc_core_metric; -typedef struct pdc_glyphwidth_s pdc_glyphwidth; -typedef struct pdc_kerningpair_s pdc_kerningpair; -typedef struct pdc_widthdata_s pdc_widthdata; -typedef struct pdc_t3glyph_s pdc_t3glyph; -typedef struct pdc_t3font_s pdc_t3font; -typedef struct pdc_font_s pdc_font; - -/* Glyph width data structure */ -struct pdc_glyphwidth_s -{ - pdc_ushort unicode; /* unicode of glyph */ - short code; /* builtin 8-bit code */ - pdc_ushort width; /* glyph width */ -}; - -/* Kerning pair data */ -struct pdc_kerningpair_s -{ - pdc_ushort glyph1; /* either 8-bit code or unicode of glyph 1 */ - pdc_ushort glyph2; /* either 8-bit code or unicode of glyph 2 */ - short xamt; /* x amount of kerning */ - short dominant; /* = 1: kerning pair domimant */ -}; - -struct pdc_widthdata_s -{ - pdc_ushort startcode; /* start unicode value of interval */ - int width; /* width of characters in the code */ - /* interval */ -}; - -struct pdc_t3glyph_s -{ - char *name; - pdc_id charproc_id; - float width; -}; - -struct pdc_t3font_s -{ - pdc_t3glyph *glyphs; /* dynamically growing glyph table */ - int capacity; /* current number of slots */ - int next_glyph; /* next available slot */ - - char *fontname; /* fontname */ - pdc_id charprocs_id; /* id of /CharProcs dict */ - pdc_id res_id; /* id of /Resources dict */ - pdc_bool colorized; /* glyphs colorized */ - pdc_matrix matrix; /* font matrix */ - pdc_rectangle bbox; /* font bounding box */ -}; - -/* The core PDFlib font structure */ -struct pdc_font_s { - pdc_bool verbose; /* put out warning/error messages */ - pdc_bool verbose_open; /* after opening font file */ - char *name; /* fontname */ - char *apiname; /* fontname specified in API call */ - char *ttname; /* names[6] in the TT name table */ - char *fontfilename; /* name of external font file */ - - pdc_bool vertical; /* vertical writing mode */ - pdc_bool embedding; /* font embedding */ - pdc_bool kerning; /* font kerning */ - pdc_bool autocidfont; /* automatic convert to CID font */ - pdc_bool unicodemap; /* automatic creation of Unicode CMap */ - pdc_bool subsetting; /* font subsetting */ - pdc_bool autosubsetting; /* automatic font subsetting */ - float subsetminsize; /* minimal size for font subsetting */ - float subsetlimit; /* maximal percent for font subsetting*/ - - int used_on_current_page; /* this font is in use on current p. */ - pdc_id obj_id; /* object id of this font */ - - unsigned long flags; /* font flags for font descriptor */ - pdc_fonttype type; /* type of font */ - pdc_fontstyle style; /* TT: style of font */ - pdc_bool isstdlatin; /* is standard latin font */ - pdc_bool hasnomac; /* TT: has no macroman cmap (0,1) */ - - pdc_encoding encoding; /* PDFlib font encoding shortcut */ - pdc_charcoll charcoll; /* CID character collection supported */ - char *cmapname; /* CID CMap name */ - char *encapiname; /* Encoding name specified in API call*/ - - float italicAngle; /* AFM key: ItalicAngle */ - int isFixedPitch; /* AFM key: IsFixedPitch */ - float llx; /* AFM key: FontBBox */ - float lly; /* AFM key: FontBBox */ - float urx; /* AFM key: FontBBox */ - float ury; /* AFM key: FontBBox */ - int underlinePosition; /* AFM key: UnderlinePosition */ - int underlineThickness; /* AFM key: UnderlineThickness */ - int capHeight; /* AFM key: CapHeight */ - int xHeight; /* AFM key: XHeight */ - int ascender; /* AFM key: Ascender */ - int descender; /* AFM key: Descender */ - int StdVW; /* AFM key: StdVW */ - int StdHW; /* AFM key: StdHW */ - int monospace; /* monospace amount */ - - int numOfGlyphs; /* # of Glyph ID's */ - pdc_glyphwidth *glw; /* ptr to glyph metrics array */ - int numOfPairs; /* # of entries in pair kerning array */ - pdc_kerningpair *pkd; /* ptr to pair kerning array */ - - int codeSize; /* code size = 0 (unknown), -2,-1,1,2 */ - int numOfCodes; /* # of codes defined by encoding */ - int lastCode; /* last byte code */ - pdc_bool names_tbf; /* glyph names to be freed */ - char **GID2Name; /* mapping Glyph ID -> Glyph name */ - pdc_ushort *GID2code; /* mapping Glyph ID -> code */ - /* glyphid: code = unicode! */ - pdc_ushort *code2GID; /* mapping code -> Glyph ID */ - /* glyphid: code = glyphid! */ - pdc_ushort *usedGIDs; /* used Glyph IDs */ - int defWidth; /* default width */ - int numOfWidths; /* # of character width intervals */ - pdc_widthdata *widthsTab; /* ptr to character width intervals */ - /* or NULL - then consecutive */ - int *widths; /* characters widths [numOfCodes] */ - char *usedChars; /* bit field for used characters */ - /* in a document */ - - char *imgname; /* name of virtual file contains *img */ - size_t filelen; /* length of uncompressed font data */ - pdc_byte *img; /* font (or CFF table) data in memory */ - long cff_offset; /* start of CFF table in font */ - size_t cff_length; /* length of CFF table in font */ - pdc_t3font *t3font; /* type 3 font data */ -}; - -/* these defaults are used when the stem value must be derived from the name */ -#define PDF_STEMV_MIN 50 /* minimum StemV value */ -#define PDF_STEMV_LIGHT 71 /* light StemV value */ -#define PDF_STEMV_NORMAL 109 /* normal StemV value */ -#define PDF_STEMV_MEDIUM 125 /* mediumbold StemV value */ -#define PDF_STEMV_SEMIBOLD 135 /* semibold StemV value */ -#define PDF_STEMV_BOLD 165 /* bold StemV value */ -#define PDF_STEMV_EXTRABOLD 201 /* extrabold StemV value */ -#define PDF_STEMV_BLACK 241 /* black StemV value */ - -/* Bit positions for the font descriptor flag */ -#define FIXEDWIDTH (long) (1L<<0) -#define SERIF (long) (1L<<1) -#define SYMBOL (long) (1L<<2) -#define SCRIPT (long) (1L<<3) -#define ADOBESTANDARD (long) (1L<<5) -#define ITALIC (long) (1L<<6) -#define SMALLCAPS (long) (1L<<17) -#define FORCEBOLD (long) (1L<<18) - -#define PDC_DEF_ITALICANGLE -12 /* default italic angle */ - -/* pc_font.c */ -void pdc_init_font_struct(pdc_core *pdc, pdc_font *font); -void pdc_cleanup_font_struct(pdc_core *pdc, pdc_font *font); -void pdc_cleanup_t3font_struct(pdc_core *pdc, pdc_t3font *t3font); - -/* pc_corefont.c */ -const char *pdc_get_base14_name(int slot); -const pdc_core_metric *pdc_get_core_metric(const char *fontname); -void pdc_init_core_metric(pdc_core *pdc, pdc_core_metric *metric); -void pdc_cleanup_core_metric(pdc_core *pdc, pdc_core_metric *metric); -void pdc_fill_core_metric(pdc_core *pdc, - pdc_font *font, pdc_core_metric *metric); -void pdc_fill_font_metric(pdc_core *pdc, - pdc_font *font, const pdc_core_metric *metric); - -#endif /* PC_FONT_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_generr.h b/src/libs/pdflib/libs/pdcore/pc_generr.h deleted file mode 100644 index 411db83362..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_generr.h +++ /dev/null @@ -1,235 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_generr.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDCORE error messages - * - */ - -#if pdc_genNames -#define gen(n, num, nam, msg) PDC_E_##nam = num, -#elif pdc_genInfo -#define gen(n, num, nam, msg) { n, num, msg, (const char *) 0 }, - -#else -#error invalid inclusion of generator file -#endif - -/* -------------------------------------------------------------------- */ -/* Configuration, memory, and I/O (10xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 1000, MEM_OUT, "Out of memory in function $1") - -gen(1, 1008, IO_ILLFILENAME, "Bad file name '$1'") - -gen(2, 1010, IO_RDOPEN, "Couldn't open $1file '$2' for reading") - -gen(2, 1012, IO_WROPEN, "Couldn't open $1file '$2' for writing") - -gen(0, 1014, IO_NOWRITE, "Couldn't write output") - -gen(2, 1016, IO_RDOPEN_NF, - "Couldn't open $1file '$2' for reading (file not found)") - -gen(2, 1018, IO_WROPEN_NF, - "Couldn't open $1file '$2' for writing (no such directory)") - -gen(2, 1020, IO_RDOPEN_PD, - "Couldn't open $1file '$2' for reading (permission denied)") - -gen(2, 1022, IO_WROPEN_PD, - "Couldn't open $1file '$2' for writing (permission denied)") - -gen(2, 1024, IO_RDOPEN_TM, - "Couldn't open $1file '$2' for reading (too many open files)") - -gen(2, 1026, IO_WROPEN_TM, - "Couldn't open $1file '$2' for writing (too many open files)") - -gen(2, 1028, IO_RDOPEN_ID, - "Couldn't open $1file '$2' for reading (is a directory)") - -gen(2, 1030, IO_WROPEN_ID, - "Couldn't open $1file '$2' for writing (is a directory)") - -gen(2, 1032, IO_WROPEN_AE, - "Couldn't open $1file '$2' for writing (file already exists)") - -gen(2, 1034, IO_WROPEN_TL, - "Couldn't open $1file '$2' for writing (file name too long)") - -gen(2, 1036, IO_WROPEN_NS, - "Couldn't open $1file '$2' for writing (no space left on device)") - -gen(2, 1038, IO_WROPEN_IS, - "Couldn't open $1file '$2' for writing (file name syntax incorrect)") - -gen(2, 1040, IO_WROPEN_NC, - "Couldn't open $1file '$2' for writing (file cannot be created)") - -gen(2, 1042, IO_WROPEN_NP, - "Couldn't open $1file '$2' for writing (path not found)") - -gen(1, 1050, IO_COMPRESS, "Compression error ($1)") - -gen(0, 1052, IO_NOBUFFER, "Don't fetch buffer contents when writing to file") - -gen(2, 1054, IO_BADFORMAT, "'$1' does not appear to be a $2 file") - -gen(1, 1056, IO_NODATA, "Couldn't read data from file '$1'") - -gen(3, 1058, IO_ILLSYNTAX, "$1file '$2': Syntax error in line $3") - -gen(1, 1060, PVF_NAMEEXISTS, - "Couldn't create virtual file '$1' (name already exists)") - - -/* -------------------------------------------------------------------- */ -/* Invalid arguments (11xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 1100, ILLARG_EMPTY, "Parameter '$1' is empty") - -gen(1, 1102, ILLARG_POSITIVE, "Parameter '$1' must be positive") - -gen(2, 1104, ILLARG_BOOL, "Boolean parameter '$1' has bad value '$2'") - -gen(2, 1106, ILLARG_INT, "Integer parameter '$1' has bad value $2") - -gen(2, 1108, ILLARG_FLOAT, "Floating-point parameter '$1' has bad value $2") - -gen(2, 1110, ILLARG_STRING, "String parameter '$1' has bad value '$2'") - -/* Unused. See 1504 -gen(1, 1112, ILLARG_UTF, "Illegal UTF-$1 sequence in string") - */ - -gen(2, 1114, ILLARG_MATRIX, "Matrix [$1] is degenerate") - -gen(2, 1116, ILLARG_TOOLONG, - "String parameter '$1' is limited to max. $2 characters'") - -gen(2, 1118, ILLARG_HANDLE, "Handle parameter '$1' has bad value $2") - - -/* -------------------------------------------------------------------- */ -/* Parameters and values (12xx) */ -/* -------------------------------------------------------------------- */ - -gen(0, 1200, PAR_EMPTYKEY, "Empty key") - -gen(1, 1202, PAR_UNKNOWNKEY, "Unknown key '$1'") - -gen(0, 1204, PAR_EMPTYVALUE, "Empty parameter value") - -gen(2, 1206, PAR_ILLPARAM, "Bad parameter '$1' for key '$2'") - -gen(2, 1208, PAR_ILLVALUE, "Bad value $1 for key '$2'") - -gen(2, 1210, PAR_SCOPE_GET, "Can't get parameter '$1' in scope '$2'") - -gen(2, 1212, PAR_SCOPE_SET, "Can't set parameter '$1' in scope '$2'") - -gen(2, 1214, PAR_VERSION, "Parameter '$1' requires PDF $2 or above") - - - - -/* -------------------------------------------------------------------- */ -/* Options and values (14xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 1400, OPT_UNKNOWNKEY, "Unknown option '$1'") - -gen(2, 1402, OPT_TOOFEWVALUES, "Option '$1' has too few values (< $2)") - -gen(2, 1404, OPT_TOOMANYVALUES, "Option '$1' has too many values (> $2)") - -gen(1, 1406, OPT_NOVALUES, "Option '$1' has no value(s)") - -gen(2, 1408, OPT_ILLBOOLEAN, "Option '$1' has bad boolean value '$2'") - -gen(2, 1410, OPT_ILLINTEGER, "Option '$1' has bad integer value '$2'") - -gen(2, 1412, OPT_ILLNUMBER, "Option '$1' has bad number value '$2'") - -gen(2, 1414, OPT_ILLKEYWORD, "Option '$1' has bad keyword '$2'") - -gen(3, 1416, OPT_TOOSMALLVAL, "Option '$1' has too small value $2 (< $3)") - -gen(3, 1418, OPT_TOOBIGVAL, "Option '$1' has too large value $2 (> $3)") - -gen(2, 1420, OPT_ZEROVAL, "Option '$1' has bad zero value $2") - -gen(3, 1422, OPT_TOOSHORTSTR, "Option '$1' has too short string '$2' (< $3)") - -gen(3, 1424, OPT_TOOLONGSTR, "Option '$1' has too long string '$2' (> $3)") - -gen(2, 1426, OPT_ILLSPACES, - "Option '$1' has bad string value '$2' (contains whitespace)") - -gen(1, 1428, OPT_NOTFOUND, "Required option '$1' is missing") - -gen(1, 1430, OPT_IGNORED, "Option '$1' ignored") - -gen(2, 1432, OPT_VERSION, "Option '$1' is not supported in PDF $2") - -gen(3, 1434, OPT_ILLHANDLE, "Option '$1' has bad $3 handle $2") - -gen(2, 1436, OPT_IGNORE, - "Option '$1' will be ignored (specified option '$2' dominant)") - -gen(1, 1438, OPT_UNSUPP, "Option '$1' not supported in this configuration") - -gen(1, 1440, OPT_NOTBAL, "Braces aren't balanced in option list '$1'") - - -/* -------------------------------------------------------------------- */ -/* String conversion functions (15xx) */ -/* -------------------------------------------------------------------- */ - -gen(0, 1500, CONV_ILLUTF16, "Invalid UTF-16 string (odd byte count)") - -gen(0, 1502, CONV_MEMOVERFLOW, "Out of memory in UTF string conversion") - -gen(1, 1504, CONV_ILLUTF, "Invalid UTF-$1 string") - - -/* -------------------------------------------------------------------- */ -/* Internal (19xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 1900, INT_NULLARG, "Invalid NULL argument in function $1") - -gen(0, 1902, INT_XSTACK, "Exception stack underflow") - -gen(1, 1904, INT_UNUSEDOBJ, "Object $1 allocated but not used") - -gen(0, 1906, INT_FLOATTOOLARGE, "Floating point value too large") - -gen(2, 1908, INT_BADFORMAT, "Unknown vsprintf() format '$1' ($2)") - -gen(1, 1910, INT_ALLOC0, - "Tried to allocate 0 or negative number of bytes in function $1") - -/* Unused. See 1502 -gen(1, 1912, INT_UNICODEMEM, "Too few bytes allocated in Unicode function $1") - */ - -gen(1, 1914, INT_INVMATRIX, "Matrix [$1] not invertible") - - -#undef gen -#undef pdc_genNames -#undef pdc_genInfo diff --git a/src/libs/pdflib/libs/pdcore/pc_geom.c b/src/libs/pdflib/libs/pdcore/pc_geom.c deleted file mode 100644 index 50890c65d8..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_geom.c +++ /dev/null @@ -1,332 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_geom.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Various geometry routines - * - */ - -#include "pc_util.h" -#include "pc_geom.h" - - -/* ---------------------- matrix functions ----------------------------- */ - -pdc_bool -pdc_is_identity_matrix(pdc_matrix *m) -{ - return (m->a == (float) 1 && - m->b == (float) 0 && - m->c == (float) 0 && - m->d == (float) 1 && - m->e == (float) 0 && - m->f == (float) 0); -} - -/* translation matrix */ -void -pdc_translation_matrix(float tx, float ty, pdc_matrix *M) -{ - M->a = (float) 1; - M->b = (float) 0; - M->c = (float) 0; - M->d = (float) 1; - M->e = tx; - M->f = ty; -} - -/* scale matrix */ -void -pdc_scale_matrix(float sx, float sy, pdc_matrix *M) -{ - M->a = sx; - M->b = (float) 0; - M->c = (float) 0; - M->d = sy; - M->e = (float) 0; - M->f = (float) 0; -} - -/* rotation matrix */ -void -pdc_rotation_matrix(float alpha, pdc_matrix *M) -{ - double phi, c, s; - - phi = (alpha * PDC_M_PI) / 180.0; - c = cos(phi); - s = sin(phi); - - M->a = (float) c; - M->b = (float) s; - M->c = (float) -s; - M->d = (float) c; - M->e = (float) 0; - M->f = (float) 0; -} - -/* skew matrix */ -void -pdc_skew_matrix(float alpha, float beta, pdc_matrix *M) -{ - M->a = (float) 1; - M->b = (float) tan(alpha * PDC_M_PI / 180.0); - M->c = (float) tan(beta * PDC_M_PI / 180.0); - M->d = (float) 1; - M->e = (float) 0; - M->f = (float) 0; -} - -/* left-multiply M to N and store the result in N */ -void -pdc_multiply_matrix(const pdc_matrix *M, pdc_matrix *N) -{ - pdc_matrix result; - - result.a = M->a * N->a + M->b * N->c; - result.b = M->a * N->b + M->b * N->d; - result.c = M->c * N->a + M->d * N->c; - result.d = M->c * N->b + M->d * N->d; - - result.e = M->e * N->a + M->f * N->c + N->e; - result.f = M->e * N->b + M->f * N->d + N->f; - - N->a = result.a; - N->b = result.b; - N->c = result.c; - N->d = result.d; - N->e = result.e; - N->f = result.f; -} - -/* invert M and store the result in N */ -void -pdc_invert_matrix(pdc_core *pdc, pdc_matrix *N, pdc_matrix *M) -{ - float det = M->a * M->d - M->b * M->c; - - if (fabs(det) < (float) PDC_SMALLREAL) - pdc_error(pdc, PDC_E_INT_INVMATRIX, - pdc_errprintf(pdc, "%f %f %f %f %f %f", - M->a, M->b, M->c, M->d, M->e, M->f), - 0, 0, 0); - - N->a = M->d/det; - N->b = -M->b/det; - N->c = -M->c/det; - N->d = M->a/det; - N->e = -(M->e * N->a + M->f * N->c); - N->f = -(M->e * N->b + M->f * N->d); -} - -/* transform point */ -void -pdc_transform_point(const pdc_matrix *M, float x, float y, float *tx, float *ty) -{ - *tx = M->a * x + M->c * y + M->e; - *ty = M->b * x + M->d * y + M->f; -} - -/* ---------------------- utility functions ----------------------------- */ - -void -pdc_place_element(pdc_fitmethod method, pdc_scalar minfscale, - const pdc_box *fitbox, const pdc_vector *relpos, - const pdc_vector *elemsize, pdc_box *elembox, - pdc_vector *scale) -{ - pdc_vector refpos; - pdc_scalar width, height, det, fscale = 1.0; - pdc_bool xscaling = pdc_false; - - /* reference position in fitbox */ - width = fitbox->ur.x - fitbox->ll.x; - height = fitbox->ur.y - fitbox->ll.y; - refpos.x = fitbox->ll.x + relpos->x * width; - refpos.y = fitbox->ll.y + relpos->y * height; - - /* first check */ - switch (method) - { - case pdc_entire: - case pdc_slice: - case pdc_meet: - case pdc_tauto: - if (fabs(width) > PDC_FLOAT_PREC && fabs(height) > PDC_FLOAT_PREC) - { - if (method != pdc_entire) - { - det = elemsize->x * height - elemsize->y * width; - xscaling = (method == pdc_slice && det <= 0) || - ((method == pdc_meet || method == pdc_tauto) && - det > 0) ? pdc_true : pdc_false; - if (xscaling) - fscale = width / elemsize->x; - else - fscale = height / elemsize->y; - } - - if (method == pdc_tauto) - { - if(fscale >= 1.0) - { - method = pdc_nofit; - } - else if (fscale < minfscale) - { - method = pdc_meet; - } - } - } - else - { - method = pdc_nofit; - } - break; - - default: - break; - } - - /* calculation */ - switch (method) - { - /* entire box is covered by entire element */ - case pdc_entire: - *elembox = *fitbox; - scale->x = width / elemsize->x; - scale->y = height / elemsize->y; - return; - - /* fit into and preserve aspect ratio */ - case pdc_slice: - case pdc_meet: - if (xscaling) - height = fscale * elemsize->y; - else - width = fscale * elemsize->x; - scale->x = fscale; - scale->y = fscale; - break; - - /* fit into and doesn't preserve aspect ratio */ - case pdc_tauto: - if (xscaling) - { - height = elemsize->y; - scale->x = fscale; - scale->y = 1.0; - } - else - { - width = elemsize->x; - scale->x = 1.0; - scale->y = fscale; - } - break; - - /* only positioning */ - case pdc_nofit: - case pdc_clip: - width = elemsize->x; - height = elemsize->y; - scale->x = 1.0; - scale->y = 1.0; - break; - } - - /* placed element box */ - elembox->ll.x = refpos.x - relpos->x * width; - elembox->ll.y = refpos.y - relpos->y * height; - elembox->ur.x = refpos.x + (1.0 - relpos->x) * width; - elembox->ur.y = refpos.y + (1.0 - relpos->y) * height; -} - -void -pdc_box2polyline(const pdc_box *box, pdc_vector *polyline) -{ - /* counter clockwise */ - polyline[0].x = box->ll.x; - polyline[0].y = box->ll.y; - polyline[1].x = box->ur.x; - polyline[1].y = box->ll.y; - polyline[2].x = box->ur.x; - polyline[2].y = box->ur.y; - polyline[3].x = box->ll.x; - polyline[3].y = box->ur.y; - polyline[4] = polyline[0]; -} - -/* --------------------------- rectangles --------------------------- */ -pdc_bool -pdc_rect_isnull(pdc_rectangle *r) -{ - return - (r->llx == (float) 0 && r->lly == (float) 0 && - r->urx == (float) 0 && r->ury == (float) 0); -} - -pdc_bool -pdc_rect_contains(pdc_rectangle *r1, pdc_rectangle *r2) -{ - return - (r1->llx <= r2->llx && r1->lly <= r2->lly && - r1->urx >= r2->urx && r1->ury >= r2->ury); -} - -void -pdc_rect_copy(pdc_rectangle *r1, pdc_rectangle *r2) -{ - r1->llx = r2->llx; - r1->lly = r2->lly; - r1->urx = r2->urx; - r1->ury = r2->ury; -} - -void -pdc_rect_init(pdc_rectangle *r, float llx, float lly, float urx, float ury) -{ - r->llx = llx; - r->lly = lly; - r->urx = urx; - r->ury = ury; -} - -void -pdc_rect_transform(const pdc_matrix *M, pdc_rectangle *r1, pdc_rectangle *r2) -{ - float x[4], y[4]; - int i; - - pdc_transform_point(M, r1->llx, r1->lly, &x[0], &y[0]); - pdc_transform_point(M, r1->llx, r1->ury, &x[1], &y[1]); - pdc_transform_point(M, r1->urx, r1->ury, &x[2], &y[2]); - pdc_transform_point(M, r1->urx, r1->lly, &x[3], &y[3]); - - pdc_rect_init(r2, (float) PDC_FLOAT_MAX, (float) PDC_FLOAT_MAX, - (float) PDC_FLOAT_MIN, (float) PDC_FLOAT_MIN); - - for (i = 0; i < 4; i++) - { - if (x[i] < r2->llx) - r2->llx = x[i]; - if (y[i] < r2->lly) - r2->lly = y[i]; - - if (x[i] > r2->urx) - r2->urx = x[i]; - if (y[i] > r2->ury) - r2->ury = y[i]; - } -} - diff --git a/src/libs/pdflib/libs/pdcore/pc_geom.h b/src/libs/pdflib/libs/pdcore/pc_geom.h deleted file mode 100644 index f740bb368a..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_geom.h +++ /dev/null @@ -1,89 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_geom.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib core geometry utilities - * - */ - -#ifndef PC_GEOM_H -#define PC_GEOM_H - -/* Unfortunately M_PI causes porting woes, so we use a private name */ -#define PDC_M_PI 3.14159265358979323846 /* pi */ - -/* Conversion factors */ -#define PDC_INCH2METER 0.0254 -#define PDC_METER2INCH 39.3701 - -/* same as PDF_SMALLREAL */ -#define PDC_SMALLREAL (0.000015) - -typedef struct { float llx, lly, urx, ury; } pdc_rectangle; -typedef struct { float a, b, c, d, e, f; } pdc_matrix; - -typedef double pdc_scalar; -typedef struct { pdc_scalar x, y; } pdc_vector; -typedef struct { pdc_vector ll, ur; } pdc_box; - -/* methods for fitting rectangle elements into a box */ -typedef enum -{ - pdc_nofit = 0, /* no fit, only positioning */ - pdc_clip, /* no fit, only positioning with following condition: - * - the parts of element beyond the bounds of box - * are clipped */ - pdc_slice, /* fit into the box with following conditions: - * - aspect ratio of element is preserved - * - entire box is covered by the element - * - the parts of element beyond the bounds of box - * are clipped */ - pdc_meet, /* fit into the box with following conditions: - * - aspect ratio of element is preserved - * - entire element is visible in the box */ - pdc_entire, /* fit into the box with following conditions: - * - entire box is covered by the element - * - entire element is visible in the box */ - pdc_tauto /* automatic fitting. If element extends fit box in - * length, then element is shrinked, if shrink - * factor is greater than a specified value. Otherwise - * pdc_meet is applied. */ -} -pdc_fitmethod; - -pdc_bool pdc_is_identity_matrix(pdc_matrix *m); -void pdc_translation_matrix(float tx, float ty, pdc_matrix *M); -void pdc_scale_matrix(float sx, float sy, pdc_matrix *M); -void pdc_rotation_matrix(float angle, pdc_matrix *M); -void pdc_skew_matrix(float alpha, float beta, pdc_matrix *M); -void pdc_multiply_matrix(const pdc_matrix *M, pdc_matrix *N); -void pdc_invert_matrix(pdc_core *pdc, pdc_matrix *N, pdc_matrix *M); -void pdc_transform_point(const pdc_matrix *M, - float x, float y, float *tx, float *ty); - -void pdc_place_element(pdc_fitmethod method, - pdc_scalar minfscale, const pdc_box *fitbox, - const pdc_vector *relpos, const pdc_vector *elemsize, - pdc_box *elembox, pdc_vector *scale); -void pdc_box2polyline(const pdc_box *box, pdc_vector *polyline); - -pdc_bool pdc_rect_isnull(pdc_rectangle *r); -pdc_bool pdc_rect_contains(pdc_rectangle *r1, pdc_rectangle *r2); -void pdc_rect_copy(pdc_rectangle *r1, pdc_rectangle *r2); -void pdc_rect_init(pdc_rectangle *r, - float llx, float lly, float urx, float ury); -void pdc_rect_transform(const pdc_matrix *M, - pdc_rectangle *r1, pdc_rectangle *r2); - -#endif /* PC_GEOM_H */ - diff --git a/src/libs/pdflib/libs/pdcore/pc_md5.c b/src/libs/pdflib/libs/pdcore/pc_md5.c deleted file mode 100644 index 466aa6696a..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_md5.c +++ /dev/null @@ -1,307 +0,0 @@ -/* $Id: pc_md5.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib MD5 message digest routines - * - */ - -/* This is a slightly modified version of the RSA reference - * implementation for MD5, which originally contained - * the following copyright notice: - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD5 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD5 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. -*/ - -#include - -#include "pc_util.h" -#include "pc_md5.h" - -/* Constants for MD5_Transform routine. - */ -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static unsigned char PADDING[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. - * Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (MD5_UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -} -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (MD5_UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -} -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (MD5_UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -} -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (MD5_UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ -} - - -/* Encodes input (MD5_UINT4) into output (unsigned char). Assumes len is - * a multiple of 4. - */ -static void Encode(unsigned char *output, MD5_UINT4 *input, unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char) (input[i] & 0xff); - output[j+1] = (unsigned char) ((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char) ((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char) ((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (MD5_UINT4). Assumes len is - * a multiple of 4. - */ -static void Decode( - MD5_UINT4 *output, - const unsigned char *input, - unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((MD5_UINT4) input[j]) | - (((MD5_UINT4) input[j+1]) << 8) | - (((MD5_UINT4) input[j+2]) << 16) | - (((MD5_UINT4) input[j+3]) << 24); -} - -/* MD5 basic transformation. Transforms state based on block. - */ -static void MD5_Transform(MD5_UINT4 state[4], const unsigned char block[64]) -{ - MD5_UINT4 a = state[0]; - MD5_UINT4 b = state[1]; - MD5_UINT4 c = state[2]; - MD5_UINT4 d = state[3]; - MD5_UINT4 x[16]; - - Decode(x, block, 64); - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. - */ - memset (x, 0, sizeof (x)); -} - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void MD5_Init(MD5_CTX *context) -{ - context->count[0] = context->count[1] = 0; - - /* Load magic initialization constants. - */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD5 block update operation. Continues an MD5 message-digest - * operation, processing another message block, and updating the - * context. - */ -void MD5_Update( - MD5_CTX *context, - const unsigned char *input, - unsigned int inputLen) -{ - unsigned int i, idx, partLen; - - /* Compute number of bytes mod 64 */ - idx = (unsigned int) ((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((MD5_UINT4) inputLen << 3)) - < ((MD5_UINT4) inputLen << 3)) - context->count[1]++; - - context->count[1] += ((MD5_UINT4) inputLen >> 29); - - partLen = 64 - idx; - - /* Transform as many times as possible. - */ - if (inputLen >= partLen) { - memcpy(&context->buffer[idx], input, partLen); - MD5_Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5_Transform (context->state, &input[i]); - - idx = 0; - } - else - i = 0; - - /* Buffer remaining input */ - memcpy(&context->buffer[idx], &input[i], inputLen - i); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - * the message digest and zeroizing the context. - */ -void MD5_Final(unsigned char digest[MD5_DIGEST_LENGTH], MD5_CTX *context) -{ - unsigned char bits[8]; - unsigned int idx, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - - /* Pad out to 56 mod 64. - */ - idx = (unsigned int) ((context->count[0] >> 3) & 0x3f); - padLen = (idx < 56) ? (56 - idx) : (120 - idx); - MD5_Update(context, PADDING, padLen); - - /* Append length (before padding) */ - MD5_Update(context, bits, 8); - - /* Store state in digest */ - Encode(digest, context->state, 16); - - /* Zeroize sensitive information. - */ - memset(context, 0, sizeof (*context)); -} diff --git a/src/libs/pdflib/libs/pdcore/pc_md5.h b/src/libs/pdflib/libs/pdcore/pc_md5.h deleted file mode 100644 index 4b1064fe73..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_md5.h +++ /dev/null @@ -1,57 +0,0 @@ -/* $Id: pc_md5.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file for the PDFlib MD5 message digest routines - * - */ - -/* This is a slightly modified version of the RSA reference - * implementation for MD5, which originally contained - * the following copyright notice: - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD5 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD5 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. - */ - - -/* we prefix our MD5 function names with "pdc_", so you can - * link your program with another MD5 lib without troubles. - */ -#define MD5_Init pdc_MD5_Init -#define MD5_Update pdc_MD5_Update -#define MD5_Final pdc_MD5_Final - -typedef unsigned int MD5_UINT4; - -#define MD5_DIGEST_LENGTH 16 - - -/* MD5 context. */ -typedef struct { - MD5_UINT4 state[4]; /* state (ABCD) */ - MD5_UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ -} MD5_CTX; - -void MD5_Init(MD5_CTX *context); -void MD5_Update( - MD5_CTX *context, const unsigned char *input, unsigned int inputLen); -void MD5_Final(unsigned char digest[MD5_DIGEST_LENGTH], MD5_CTX *context); diff --git a/src/libs/pdflib/libs/pdcore/pc_nocarbon.h b/src/libs/pdflib/libs/pdcore/pc_nocarbon.h deleted file mode 100644 index 5fb967416b..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_nocarbon.h +++ /dev/null @@ -1,24 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_nocarbon.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header for CodeWarrior to activate non-Carbon builds. - * - */ - -/* - * This must only be set for non-Carbon builds. It is not used for the - * standard build. - */ - -#define PDF_TARGET_API_MAC_OS8 diff --git a/src/libs/pdflib/libs/pdcore/pc_optparse.c b/src/libs/pdflib/libs/pdcore/pc_optparse.c deleted file mode 100644 index 13ff7a4e70..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_optparse.c +++ /dev/null @@ -1,789 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_optparse.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Parser options routines - * - */ - -#include "pc_util.h" -#include "pc_optparse.h" - -#define PDC_OPT_LISTSEPS "\f\n\r\t\v =" - -/* result of an option */ -struct pdc_resopt_s -{ - int numdef; /* number of definitions */ - const pdc_defopt *defopt; /* pointer to option definition */ - int num; /* number of parsed values */ - void *val; /* list of parsed values */ -}; - -/* sizes of option types. must be parallel to pdc_opttype */ -static const size_t pdc_typesizes[] = -{ - sizeof (pdc_bool), - sizeof (char *), - sizeof (int), - sizeof (int), - sizeof (float), - sizeof (double), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), - sizeof (int), -}; - -static const pdc_keyconn pdc_handletypes[] = -{ - {"color", pdc_colorhandle}, - {"document", pdc_documenthandle}, - {"font", pdc_fonthandle}, - {"gstate", pdc_gstatehandle}, - {"iccprofile", pdc_iccprofilehandle}, - {"image", pdc_imagehandle}, - {"page", pdc_pagehandle}, - {"pattern", pdc_patternhandle}, - {"shading", pdc_shadinghandle}, -}; - -int -pdc_get_keycode(const char *keyword, const pdc_keyconn *keyconn) -{ - int i; - for (i = 0; keyconn[i].word != 0; i++) - { - if (!strcmp(keyword, keyconn[i].word)) - return keyconn[i].code; - } - return PDC_KEY_NOTFOUND; -} - -int -pdc_get_keycode_ci(const char *keyword, const pdc_keyconn *keyconn) -{ - int i; - for (i = 0; keyconn[i].word != 0; i++) - { - if (!pdc_stricmp(keyword, keyconn[i].word)) - return keyconn[i].code; - } - return PDC_KEY_NOTFOUND; -} - -const char * -pdc_get_keyword(int keycode, const pdc_keyconn *keyconn) -{ - int i; - for (i = 0; keyconn[i].word != 0; i++) - { - if (keycode == keyconn[i].code) - return keyconn[i].word; - } - return NULL; -} - -const char * -pdc_get_int_keyword(char *keyword, const pdc_keyconn *keyconn) -{ - int i; - for (i = 0; keyconn[i].word != 0; i++) - { - if (!pdc_stricmp(keyword, keyconn[i].word)) - return keyconn[i].word; - } - return NULL; -} - -void -pdc_cleanup_optstringlist(pdc_core *pdc, char **stringlist, int ns) -{ - int j; - - for (j = 0; j < ns; j++) - { - if (stringlist[j]) - pdc_free(pdc, stringlist[j]); - } - pdc_free(pdc, stringlist); -} - -static void -pdc_delete_optvalue(pdc_core *pdc, pdc_resopt *resopt) -{ - if (resopt->val) - { - if (resopt->defopt->type == pdc_stringlist) - { - int j; - char **s = (char **) resopt->val; - for (j = 0; j < resopt->num; j++) - if (s[j]) - pdc_free(pdc, s[j]); - } - pdc_free(pdc, resopt->val); - resopt->val = NULL; - } - resopt->num = 0; -} - -static int -pdc_optname_compare(const void *a, const void *b) -{ - return (strcmp(((pdc_resopt *)a)->defopt->name, - ((pdc_resopt *)b)->defopt->name)); -} - -pdc_resopt * -pdc_parse_optionlist(pdc_core *pdc, const char *optlist, - const pdc_defopt *defopt, - const pdc_clientdata *clientdata, pdc_bool verbose) -{ - static const char *fn = "pdc_parse_optionlist"; - const char *stemp1 = NULL, *stemp2 = NULL, *stemp3 = NULL; - char **items = NULL, *keyword = NULL; - char **values = NULL, *value = NULL, **strings = NULL; - int i, nd, is, iss, it, iv, numdef, nitems = 0, nvalues, errcode = 0; - void *resval; - double dz, maxval; - int iz; - size_t len; - const pdc_defopt *dopt = NULL; - pdc_resopt *resopt = NULL; - pdc_bool ignore = pdc_false; - pdc_bool boolval = pdc_false; - pdc_bool tocheck = pdc_false; - pdc_bool issorted = pdc_true; - pdc_bool ishandle = pdc_true; - pdc_bool hastobepos; - - /* decrement handles */ - hastobepos = clientdata && clientdata->hastobepos ? pdc_true : pdc_false; - - /* split option list */ - if (optlist) - nitems = pdc_split_stringlist(pdc, optlist, PDC_OPT_LISTSEPS, &items); - if (nitems < 0) - { - keyword = (char *) optlist; - errcode = PDC_E_OPT_NOTBAL; - goto PDC_OPT_SYNTAXERROR; - } - - /* initialize result list */ - for (numdef = 0; defopt[numdef].name != NULL; numdef++) { - /* */ ; - } - resopt = (pdc_resopt *) pdc_calloc(pdc, numdef * sizeof(pdc_resopt), fn); - for (i = 0; i < numdef; i++) - { - resopt[i].numdef = numdef; - resopt[i].defopt = &defopt[i]; - - if (defopt[i].flags & PDC_OPT_IGNOREIF1 || - defopt[i].flags & PDC_OPT_IGNOREIF2 || - defopt[i].flags & PDC_OPT_REQUIRIF1 || - defopt[i].flags & PDC_OPT_REQUIRIF2 || - defopt[i].flags & PDC_OPT_REQUIRED) - tocheck = pdc_true; - - if (i && issorted) - issorted = (strcmp(defopt[i-1].name, defopt[i].name) <= 0) ? - pdc_true : pdc_false; - } - - /* loop over all option list elements */ - for (is = 0; is < nitems; is++) - { - /* search keyword */ - boolval = pdc_undef; - keyword = items[is]; - for (it = 0; it < numdef; it++) - { - /* special handling for booleans */ - if (defopt[it].type == pdc_booleanlist) - { - if (!strcmp(keyword, defopt[it].name) || - (keyword[1] != 0 && !strcmp(&keyword[2], defopt[it].name))) - { - iss = is + 1; - if (iss == nitems || - (strcmp(items[iss], "true") && - strcmp(items[iss], "false"))) - { - if (!strncmp(keyword, "no", 2)) - { - boolval = pdc_false; - break; - } - else - { - boolval = pdc_true; - break; - } - } - } - } - - if (!strcmp(keyword, defopt[it].name)) break; - } - if (it == numdef) - { - errcode = PDC_E_OPT_UNKNOWNKEY; - goto PDC_OPT_SYNTAXERROR; - } - - /* initialize */ - dopt = &defopt[it]; - ignore = pdc_false; - nvalues = 1; - values = NULL; - ishandle = pdc_true; - - /* compatibility */ - if (clientdata && clientdata->compatibility) - { - int compatibility = clientdata->compatibility; - - for (iv = PDC_1_3; iv < PDC_X_X_LAST; iv++) - { - if ((dopt->flags & (1L<flags & PDC_OPT_UNSUPP) - { - ignore = pdc_true; - if (verbose) - pdc_warning(pdc, PDC_E_OPT_UNSUPP, dopt->name, 0, 0, 0); - } - - /* parse values */ - if (boolval == pdc_undef) - { - is++; - if (is == nitems) - { - errcode = PDC_E_OPT_NOVALUES; - goto PDC_OPT_SYNTAXERROR; - } - if (!ignore && - (dopt->type != pdc_stringlist || dopt->maxnum > 1)) - nvalues = pdc_split_stringlist(pdc, items[is], NULL, &values); - } - - /* ignore */ - if (ignore) continue; - - /* number of values check */ - if (nvalues < dopt->minnum) - { - stemp2 = pdc_errprintf(pdc, "%d", dopt->minnum); - errcode = PDC_E_OPT_TOOFEWVALUES; - goto PDC_OPT_SYNTAXERROR; - } - else if (nvalues > dopt->maxnum) - { - stemp2 = pdc_errprintf(pdc, "%d", dopt->maxnum); - errcode = PDC_E_OPT_TOOMANYVALUES; - goto PDC_OPT_SYNTAXERROR; - } - - /* option already exists */ - if (resopt[it].num) - { - pdc_delete_optvalue(pdc, &resopt[it]); - } - - /* no values */ - if (!nvalues ) continue; - - /* maximal value */ - switch (dopt->type) - { - case pdc_colorhandle: - maxval = clientdata->maxcolor; - break; - - case pdc_documenthandle: - maxval = clientdata->maxdocument; - break; - - case pdc_fonthandle: - maxval = clientdata->maxfont; - break; - - case pdc_iccprofilehandle: - maxval = clientdata->maxiccprofile; - break; - - case pdc_imagehandle: - maxval = clientdata->maximage; - break; - - case pdc_pagehandle: - maxval = clientdata->maxpage; - break; - - case pdc_patternhandle: - maxval = clientdata->maxpattern; - break; - - case pdc_shadinghandle: - maxval = clientdata->maxshading; - break; - - case pdc_gstatehandle: - maxval = clientdata->maxgstate; - break; - - default: - maxval = dopt->maxval; - ishandle = pdc_false; - break; - } - - /* allocate value array */ - resopt[it].val = pdc_calloc(pdc, - (size_t) (nvalues * pdc_typesizes[dopt->type]), fn); - resopt[it].num = nvalues; - - /* analyze type */ - resval = resopt[it].val; - for (iv = 0; iv < nvalues; iv++) - { - errcode = 0; - if (dopt->maxnum > 1 && nvalues) - value = values[iv]; - else - value = items[is]; - switch (dopt->type) - { - /* boolean list */ - case pdc_booleanlist: - if (boolval == pdc_true || !strcmp(value, "true")) - { - *(pdc_bool *) resval = pdc_true; - } - else if (boolval == pdc_false || !strcmp(value, "false")) - { - *(pdc_bool *) resval = pdc_false; - } - else - { - errcode = PDC_E_OPT_ILLBOOLEAN; - } - break; - - /* string list */ - case pdc_stringlist: - if (dopt->flags & PDC_OPT_NOSPACES) - { - if (pdc_split_stringlist(pdc, value, NULL, &strings) > 1) - errcode = PDC_E_OPT_ILLSPACES; - pdc_cleanup_stringlist(pdc, strings); - } - if (!errcode) - { - len = strlen(value); - dz = (double) len; - if (dz < dopt->minval) - { - stemp3 = pdc_errprintf(pdc, "%d", (int) dopt->minval); - errcode = PDC_E_OPT_TOOSHORTSTR; - } - else if (dz > maxval) - { - stemp3 = pdc_errprintf(pdc, "%d", (int) maxval); - errcode = PDC_E_OPT_TOOLONGSTR; - } - *((char **) resval) = pdc_strdup(pdc, value); - } - break; - - /* keyword list */ - case pdc_keywordlist: - iz = pdc_get_keycode(value, dopt->keylist); - if (iz == PDC_KEY_NOTFOUND) - { - errcode = PDC_E_OPT_ILLKEYWORD; - } - else - { - *(int *) resval = iz; - } - break; - - /* number list */ - case pdc_integerlist: - case pdc_floatlist: - case pdc_doublelist: - if (dopt->keylist) - { - /* optional keyword and/or allowed integer list */ - iz = pdc_get_keycode(value, dopt->keylist); - if (iz == PDC_KEY_NOTFOUND) - { - if (dopt->flags & PDC_OPT_INTLIST) - { - errcode = PDC_E_OPT_ILLINTEGER; - break; - } - } - else - { - switch (dopt->type) - { - default: - case pdc_integerlist: - *(int *) resval = iz; - break; - - case pdc_floatlist: - *(float *) resval = (float) iz; - break; - - case pdc_doublelist: - *(double *) resval = (double) iz; - break; - } - break; - } - } - case pdc_colorhandle: - case pdc_documenthandle: - case pdc_fonthandle: - case pdc_iccprofilehandle: - case pdc_imagehandle: - case pdc_pagehandle: - case pdc_patternhandle: - case pdc_shadinghandle: - case pdc_gstatehandle: - if (pdc_str2double(value, &dz) == pdc_false) - { - errcode = PDC_E_OPT_ILLNUMBER; - } - else - { - if (ishandle && hastobepos) dz -= 1; - if (dz < dopt->minval) - { - if (ishandle) - { - stemp3 = pdc_get_keyword(dopt->type, - pdc_handletypes); - errcode = PDC_E_OPT_ILLHANDLE; - } - else - { - stemp3 = pdc_errprintf(pdc, "%g", dopt->minval); - errcode = PDC_E_OPT_TOOSMALLVAL; - } - } - else if (dz > maxval) - { - if (ishandle) - { - stemp3 = pdc_get_keyword(dopt->type, - pdc_handletypes); - errcode = PDC_E_OPT_ILLHANDLE; - } - else - { - stemp3 = pdc_errprintf(pdc, "%g", maxval); - errcode = PDC_E_OPT_TOOBIGVAL; - } - } - else if (dopt->flags & PDC_OPT_NOZERO && - fabs(dz) < PDC_FLOAT_PREC) - { - errcode = PDC_E_OPT_ZEROVAL; - } - else if (dopt->type == pdc_doublelist) - { - *(double *) resval = dz; - } - else if (dopt->type == pdc_floatlist) - { - *(float *) resval = (float) dz; - } - else - { - iz = (int) dz; - if ((double) iz != dz) - { - errcode = PDC_E_OPT_ILLINTEGER; - } - else - { - *(int *) resval = iz; - } - } - } - break; - } - - if (errcode) - { - stemp2 = pdc_errprintf(pdc, "%s", value); - goto PDC_OPT_SYNTAXERROR; - } - - /* increment value pointer */ - resval = (void *) ((char *)(resval) + pdc_typesizes[dopt->type]); - } - pdc_cleanup_stringlist(pdc, values); - values = NULL; - - /* build OR bit pattern */ - if (dopt->flags & PDC_OPT_BUILDOR && nvalues > 1) - { - int *bcode = (int *) resopt[it].val; - for (iv = 1; iv < nvalues; iv++) - { - bcode[0] |= bcode[iv]; - } - resopt[it].num = 1; - } - } - pdc_cleanup_stringlist(pdc, items); - items = NULL; - - /* required and to be ignored options */ - for (is = 0; tocheck && is < numdef; is++) - { - /* to be ignored option */ - if (resopt[is].num) - { - nd = 0; - if (defopt[is].flags & PDC_OPT_IGNOREIF1) nd = 1; - if (defopt[is].flags & PDC_OPT_IGNOREIF2) nd = 2; - for (it = is - 1; it >= is - nd && it >= 0; it--) - { - if (resopt[it].num) - { - pdc_delete_optvalue(pdc, &resopt[is]); - if (verbose) - pdc_warning(pdc, PDC_E_OPT_IGNORE, defopt[is].name, - defopt[it].name, 0, 0); - } - } - } - - /* required option */ - if (!resopt[is].num && - ((defopt[is].flags & PDC_OPT_REQUIRED) || - (defopt[is].flags & PDC_OPT_REQUIRIF1 && resopt[is-1].num) || - (defopt[is].flags & PDC_OPT_REQUIRIF2 && - (resopt[is-1].num || resopt[is-2].num)))) - { - keyword = (char *) defopt[is].name; - errcode = PDC_E_OPT_NOTFOUND; - goto PDC_OPT_SYNTAXERROR; - } - } - - /* is no sorted */ - if (!issorted) - { - qsort((void *)resopt, (size_t) numdef, sizeof(pdc_resopt), - pdc_optname_compare); - } - -#undef PDC_OPTPARSE -#ifdef PDC_OPTPARSE - printf("\n"); - for (is = 0; is < numdef; is++) - { - printf("[%02d] %s (number = %d, pointer = %p):\n", is, - resopt[is].defopt->name, resopt[is].num, resopt[is].val); - for (iv = 0; iv < resopt[is].num; iv++) - { - switch (resopt[is].defopt->type) - { - case pdc_booleanlist: - case pdc_keywordlist: - case pdc_integerlist: - case pdc_colorhandle: - case pdc_documenthandle: - case pdc_fonthandle: - case pdc_gstatehandle: - case pdc_iccprofilehandle: - case pdc_imagehandle: - case pdc_pagehandle: - case pdc_patternhandle: - case pdc_shadinghandle: - printf(" [%d]: %d\n",iv, *((int *) resopt[is].val + iv)); - break; - - case pdc_stringlist: - printf(" [%d]: %s\n",iv, *((char **) resopt[is].val + iv)); - break; - - case pdc_floatlist: - printf(" [%d]: %f\n",iv, *((float *) resopt[is].val + iv)); - break; - - case pdc_doublelist: - printf(" [%d]: %f\n",iv, *((double *) resopt[is].val + iv)); - break; - } - } - } - printf("\n"); -#endif - - return resopt; - - PDC_OPT_SYNTAXERROR: - stemp1 = pdc_errprintf(pdc, "%s", keyword); - pdc_cleanup_stringlist(pdc, items); - pdc_cleanup_stringlist(pdc, values); - pdc_cleanup_optionlist(pdc, resopt); - - switch (errcode) - { - case PDC_E_OPT_UNKNOWNKEY: - case PDC_E_OPT_NOVALUES: - case PDC_E_OPT_NOTFOUND: - case PDC_E_OPT_NOTBAL: - pdc_set_errmsg(pdc, errcode, stemp1, 0, 0, 0); - break; - - case PDC_E_OPT_TOOFEWVALUES: - case PDC_E_OPT_TOOMANYVALUES: - case PDC_E_OPT_ILLBOOLEAN: - case PDC_E_OPT_ILLKEYWORD: - case PDC_E_OPT_ILLINTEGER: - case PDC_E_OPT_ILLNUMBER: - case PDC_E_OPT_ZEROVAL: - case PDC_E_OPT_ILLSPACES: - case PDC_E_OPT_VERSION: - pdc_set_errmsg(pdc, errcode, stemp1, stemp2, 0, 0); - break; - - case PDC_E_OPT_TOOSHORTSTR: - case PDC_E_OPT_TOOLONGSTR: - case PDC_E_OPT_TOOSMALLVAL: - case PDC_E_OPT_TOOBIGVAL: - case PDC_E_OPT_ILLHANDLE: - pdc_set_errmsg(pdc, errcode, stemp1, stemp2, stemp3, 0); - break; - } - - if (verbose) - pdc_error(pdc, -1, 0, 0, 0, 0); - - return NULL; -} - -int -pdc_get_optvalues(pdc_core *pdc, const char *keyword, pdc_resopt *resopt, - void *lvalues, void **mvalues) -{ - pdc_resopt *ropt = NULL; - void *values = NULL; - int nvalues = 0; - size_t nbytes; - if (mvalues) *mvalues = NULL; - - (void) pdc; - - if (resopt) - { - int i, cmp; - int lo = 0; - int hi = resopt[0].numdef; - - while (lo < hi) - { - i = (lo + hi) / 2; - cmp = strcmp(keyword, resopt[i].defopt->name); - - /* keyword found */ - if (cmp == 0) - { - ropt = &resopt[i]; - nvalues = ropt->num; - values = ropt->val; - break; - } - - if (cmp < 0) - hi = i; - else - lo = i + 1; - } - } - - if (nvalues) - { - /* copy values */ - if (lvalues) - { - if (ropt->defopt->type == pdc_stringlist && - ropt->defopt->maxnum == 1) - { - strcpy((char *)lvalues, *((char **) values)); - } - else - { - nbytes = (size_t) (nvalues * pdc_typesizes[ropt->defopt->type]); - memcpy(lvalues, values, nbytes); - } - } - - /* copy pointer */ - if (mvalues) - { - *mvalues = values; - ropt->val = NULL; - } - } - - return nvalues; -} - -void -pdc_cleanup_optionlist(pdc_core *pdc, pdc_resopt *resopt) -{ - if (resopt) - { - int i; - - for (i = 0; i < resopt[0].numdef; i++) - pdc_delete_optvalue(pdc, &resopt[i]); - - pdc_free(pdc, resopt); - } -} - -const char * -pdc_get_handletype(pdc_opttype type) -{ - return pdc_get_keyword(type, pdc_handletypes); -} - diff --git a/src/libs/pdflib/libs/pdcore/pc_optparse.h b/src/libs/pdflib/libs/pdcore/pc_optparse.h deleted file mode 100644 index 5a5ac8e254..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_optparse.h +++ /dev/null @@ -1,224 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_optparse.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Definitions for option parser routines - * - */ - -#ifndef PC_OPTPARSE_H -#define PC_OPTPARSE_H - -/* - * Optlist - * ------- - * An optlist is a string containing pairs of the form - * "optionname optionvalue(s)". The separator characters - * are "\f\n\r\t\v =". - * - * There are options of different types (see pdc_opttype): - * - * Boolean (pdc_booleanlist) - * Strings (pdc_stringlist) - * Keywords (pdc_keywordlist) - * Integers (pdc_integerlist) - * Floats (pdc_floatlist) - * Doubles (pdc_doublelist) - * Handles (pdc_colorhandle ...) - * - * An option can have one or more values. Boolean options can be - * provided without any value. If an option has more than one value, - * then these values have to be set in braces. Examples: - * - * dasharray {11 22 33} - * - * Strings with white spaces have to be set in braces too. - * Examples: - * - * fullname {Ludwig Wittgenstein} - * composers {{Gustav Mahler}} - * comment {} - * - * The allowed option names and the limitations of their values - * must be defined in an array of enumeration type pdc_defopt - * (see below). Such an option definition specifies (in brackets - * the member name in the pdc_defopt struct) - * - * - the name of the option (name) - * - the type of the option (type) - * - value restrictions by bit flags (flags) - * - the minimal and maximal permitted number of values - * (minnum, maxnum) - * - the minimal and maximal permitted value, or string - * length resp. (minval, maxval) - * - the permitted keywords in a keyword list (is required) or - * the permitted integer numbers in a integer list (is optional), - * resp. (keylist) - * - the number of default values and the default values - * themselves (defnum, defval) - * - * Remarks: - * - * - minnum = maxnum = 1: The program expects a single value, - * otherwise an array. If an array consists of only one value - * the braces can be omitted - but not in the case of strings - * with white spaces (see example above). - * - Boolean options have the values "true" or "false". A shorter - * equivalent notation is "+name" or "-name". for "name true" - * or "name false", resp. - * - White spaces in strings can be forbidden by the flag - * PDC_OPT_NOSPACES. - * - It's only possible to specify a single number interval (minval, - * maxval) which must contain the number. The flag PDC_OPT_NOZERO - * can forbid zero additionally. - * - Keywords will always be converted to integer numbers (keycodes) - * according to the specified pdc_keyconn array. - * - It is possible to specify keywords for integers, floats and - * doubles additionally by an optional keylist entry. For integers - * it is possible to specify the allowed integer values by an optional - * keylist and by the flag PDC_OPT_INTLIST. - * - If more than one keyword is permitted, then the flag - * PDC_OPT_BUILDOR decides, whether a bit pattern must be - * built by or-ing the single keycodes or not. - * - * Program run: - * - * An optlist will be parsed by the function pdc_parse_optionlist. - * After successfully parsing this function returns a pointer to the - * allocated pdc_resopt structures containing the option values. - * These structures must be freed by the function pdc_cleanup_optionlist. - * - * Values must be fetched by the function pdc_get_optvalues. This can - * be achieved by specifying a variable pointer (lvalues) or by a pointer - * to a pointer (mvalues). In the first case the variable must be large - * enough to hold the values. In the second case the pointer is the pointer - * to the allocated array with the option values. If such a pointer is - * specified in a call of pdc_get_optvalues the pointer will not be freed - * in pdc_cleanup_optionlist, but the caller has the responsibility to - * free it after use. - * - * pdc_stringlist: - * maxnum = 1: lvalues: char s[maxval+1] (defined char array) - * maxnum > 1: lvalues: char *s[maxnum] (defined char pointer rarray) - * mvalues: char **s (pointer to a char pointer array) - * - */ - -typedef struct pdc_keyconn_s pdc_keyconn; -typedef struct pdc_clientdata_s pdc_clientdata; -typedef struct pdc_defopt_s pdc_defopt; -typedef struct pdc_resopt_s pdc_resopt; - -/* types of option values */ -typedef enum -{ - pdc_booleanlist = 0, - pdc_stringlist, - pdc_keywordlist, - pdc_integerlist, - pdc_floatlist, - pdc_doublelist, - - /* correspondig member of pdc_clientdata_s must be specified */ - pdc_colorhandle, - pdc_documenthandle, - pdc_fonthandle, - pdc_gstatehandle, - pdc_iccprofilehandle, - pdc_imagehandle, - pdc_pagehandle, - pdc_patternhandle, - pdc_shadinghandle -} -pdc_opttype; - -/* keyword - keycode */ -struct pdc_keyconn_s -{ - char *word; - int code; -}; - -/* client data */ -struct pdc_clientdata_s -{ - int compatibility; - int maxcolor; - int maxdocument; - int maxfont; - int maxgstate; - int maxiccprofile; - int maximage; - int maxpage; - int maxpattern; - int maxshading; - pdc_bool hastobepos; -}; - -/* definition of an option */ -struct pdc_defopt_s -{ - const char *name; /* name of option keyword */ - pdc_opttype type; /* type of option */ - int flags; /* flags (see below) */ - int minnum; /* permitted minimal number of values */ - int maxnum; /* permitted maximal number of values */ - double minval; /* minimal permitted value / length of string */ - double maxval; /* maximal permitted value / length of string */ - const pdc_keyconn *keylist; /* list of permitted keywords - keycodes */ -}; - -#define PDC_OPT_TERMINATE \ - {NULL, pdc_booleanlist, 0L, 0, 0, 0.0, 0.0, NULL} - -#define PDC_OPT_NONE (0) /* no flag specified */ -#define PDC_OPT_NOZERO (1L<<0) /* zero value not allowed */ -#define PDC_OPT_NOSPACES (1L<<1) /* white spaces in strings not allowed */ -#define PDC_OPT_REQUIRED (1L<<2) /* option is required */ -#define PDC_OPT_BUILDOR (1L<<3) /* build an OR bit pattern by keycodes */ -#define PDC_OPT_INTLIST (1L<<4) /* keylist is list of allowed integers */ -#define PDC_OPT_IGNOREIF1 (1L<<5) /* option is ignored if previous option is - * specified */ -#define PDC_OPT_IGNOREIF2 (1L<<6) /* option is ignored if either of - * previous two options is specified */ -#define PDC_OPT_UNSUPP (1L<<8) /* option is not supported in this - * configuration */ -#define PDC_OPT_REQUIRIF1 (1L<<9) /* option is require if previous option is - * specified */ -#define PDC_OPT_REQUIRIF2 (1L<<10) /* option is require if either of - * previous two options is specified */ - -/* member "compatibility" of pdc_clientdata_s must be specified (1L<<12) ... */ -#define PDC_OPT_PDC_1_3 (1L< -#include -#endif - -#if defined(MAC) || defined (MACOSX) - -/* - * Setting the file type requires either Carbon or InterfaceLib/Classic. - * If we have neither (i.e. a Mach-O build without Carbon) we suppress - * the code for setting the file type and creator. - */ - -#if !defined(MACOSX) || defined(PDF_TARGET_API_MAC_CARBON) -#define PDF_FILETYPE_SUPPORTED -#endif - -#ifdef PDF_FILETYPE_SUPPORTED -#include -#endif - -#endif /* defined(MAC) || defined (MACOSX) */ - -#ifdef HAVE_LIBZ -#include "zlib.h" -#endif - -#ifdef HAVE_LIBZ -#define PDF_DEFAULT_COMPRESSION 6 /* default zlib level */ -#else -#define PDF_DEFAULT_COMPRESSION 0 /* no compression */ -#endif - -#define STREAM_CHUNKSIZE 65536 /* output buffer for in-core */ -#define ID_CHUNKSIZE 2048 /* object ids */ - -#define PDF_LINEBUFLEN 256 /* len of pdc_printf() buffer */ - -/* generic output stuff */ - -typedef struct pdc_stream_s { - pdc_byte *basepos; /* start of this chunk */ - pdc_byte *curpos; /* next write position */ - pdc_byte *maxpos; /* maximum position of chunk */ - size_t base_offset; /* base offset of this chunk */ - pdc_bool compressing; /* in compression state */ -#ifdef HAVE_LIBZ - z_stream z; /* zlib compression stream */ -#endif - - pdc_bool mustclose; /* must close output file at end */ - FILE *fp; /* output file stream */ - /* client-supplied data sink procedure */ - size_t (*writeproc)(pdc_output *out, void *data, size_t size); -} pdc_stream; - -/* PDF-related output stuff */ - -struct pdc_output_s { - pdc_core *pdc; /* core context */ - pdc_stream stream; /* output stream buffer */ - int compresslevel; /* zlib compression level */ - pdc_bool compr_changed; /* compress level has been changed */ - long length; /* length of stream */ - - long *file_offset; /* the objects' file offsets */ - int file_offset_capacity; - pdc_id lastobj; /* highest object id */ - - long start_pos; /* stream start position */ - - MD5_CTX md5; /* MD5 digest context for file ID */ - unsigned char id[2][MD5_DIGEST_LENGTH]; - void *opaque; /* this will be used to store PDF *p */ -}; - -/* --------------------- PDFlib stream handling ----------------------- */ - -void * -pdc_get_opaque(pdc_output *out) -{ - return out->opaque; -} - -#ifdef HAVE_LIBZ -/* wrapper for pdc_malloc for use in zlib */ -static voidpf -pdc_zlib_alloc(voidpf pdc, uInt items, uInt size) -{ - return (voidpf) pdc_malloc((pdc_core *) pdc, items * size, "zlib"); -} - -#endif /* HAVE_LIBZ */ - -pdc_bool -pdc_stream_not_empty(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - - return(!stream->writeproc && stream->curpos != stream->basepos); -} - -const char * -pdc_get_stream_contents(pdc_output *out, long *size) -{ - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - if (stream->writeproc) - pdc_error(pdc, PDC_E_IO_NOBUFFER, 0, 0, 0, 0); - - *size = (long) (stream->curpos - stream->basepos); - - stream->base_offset += (size_t) (stream->curpos - stream->basepos); - stream->curpos = stream->basepos; - - return (const char *) stream->basepos; -} - -static void -pdc_boot_stream(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - - /* curpos must be initialized here so that the check for empty - * buffer in PDF_delete() also works in the degenerate case of - * no output produced. - */ - stream->basepos = stream->curpos = NULL; -} - -static size_t -pdc_writeproc_file(pdc_output *out, void *data, size_t size) -{ - pdc_stream *stream = &out->stream; - - return fwrite(data, 1, (size_t) size, stream->fp); -} - -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif -static pdc_bool -pdc_init_stream( - pdc_core *pdc, - pdc_output *out, - const char *filename, - FILE *fp, - size_t (*writeproc)(pdc_output *out, void *data, size_t size)) -{ - pdc_stream *stream = &out->stream; - -#if defined(MAC) || defined(MACOSX) -#if !defined(TARGET_API_MAC_CARBON) || defined(__MWERKS__) - FCBPBRec fcbInfo; - Str32 name; -#endif /* TARGET_API_MAC_CARBON */ - FInfo fInfo; - FSSpec fSpec; -#endif /* defined(MAC) || defined(MACOSX) */ - - /* - * This may be left over from the previous run. We deliberately - * don't reuse the previous buffer in order to avoid potentially - * unwanted growth of the allocated buffer due to a single large - * document in a longer series of documents. - */ - if (stream->basepos) - pdc_free(pdc, (void *) stream->basepos); - - stream->basepos = (pdc_byte *)pdc_malloc(pdc, STREAM_CHUNKSIZE, - "pdc_init_stream"); - stream->curpos = stream->basepos; - stream->maxpos = stream->basepos + STREAM_CHUNKSIZE; - stream->base_offset = 0L; - stream->compressing = pdc_false; - -#ifdef HAVE_LIBZ - /* zlib sometimes reads uninitialized memory where it shouldn't... */ - memset(&stream->z, 0, sizeof stream->z); - - stream->z.zalloc = (alloc_func) pdc_zlib_alloc; - stream->z.zfree = (free_func) pdc_free; - stream->z.opaque = (voidpf) pdc; - - if (deflateInit(&stream->z, pdc_get_compresslevel(out)) != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "deflateInit", 0, 0, 0); - - out->compr_changed = pdc_false; -#endif - - /* Defaults */ - stream->mustclose = pdc_false; - stream->fp = (FILE *) NULL; - stream->writeproc = pdc_writeproc_file; - - if (fp) { - /* PDF_open_fp */ - stream->fp = fp; - - } else if (writeproc) { - stream->writeproc = writeproc; /* PDF_open_mem */ - - } else if (filename == NULL || *filename == '\0') { - /* PDF_open_file with in-core output */ - stream->writeproc = NULL; - - } else { - /* PDF_open_file with file output */ -#if !((defined(MAC) || defined (MACOSX)) && defined(__MWERKS__)) - if (filename && !strcmp(filename, "-")) { - stream->fp = stdout; -#if !defined(__MWERKS__) && (defined(WIN32) || defined(OS2)) -#if defined WINCE - _setmode(fileno(stdout), _O_BINARY); -#else - setmode(fileno(stdout), O_BINARY); -#endif /* !WINCE */ -#endif - } else { -#endif /* !MAC */ - - stream->fp = fopen(filename, WRITEMODE); - - if (stream->fp == NULL) - return pdc_false; - - stream->mustclose = pdc_true; - -#ifdef PDF_FILETYPE_SUPPORTED - -#if defined(MAC) || defined(MACOSX) - /* set the proper type and creator for the output file */ -#if TARGET_API_MAC_CARBON && !defined(__MWERKS__) - - if (FSPathMakeFSSpec((const UInt8 *) filename, &fSpec) == noErr) { - FSpGetFInfo(&fSpec, &fInfo); - - fInfo.fdType = 'PDF '; - fInfo.fdCreator = 'CARO'; - FSpSetFInfo(&fSpec, &fInfo); - } - -#else - - memset(&fcbInfo, 0, sizeof(FCBPBRec)); - fcbInfo.ioRefNum = (short) stream->fp->handle; - fcbInfo.ioNamePtr = name; - - if (!PBGetFCBInfoSync(&fcbInfo) && - FSMakeFSSpec(fcbInfo.ioFCBVRefNum, fcbInfo.ioFCBParID, - name, &fSpec) == noErr) { - FSpGetFInfo(&fSpec, &fInfo); - fInfo.fdType = 'PDF '; - fInfo.fdCreator = 'CARO'; - FSpSetFInfo(&fSpec, &fInfo); - } -#endif /* !defined(TARGET_API_MAC_CARBON) || defined(__MWERKS__) */ -#endif /* defined(MAC) || defined(MACOSX) */ - -#endif /* PDF_FILETYPE_SUPPORTED */ - -#if !((defined(MAC) || defined (MACOSX)) && defined(__MWERKS__)) - } -#endif /* !MAC */ - } - - return pdc_true; -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif - -/* close the output file, if opened with PDF_open_file(); - * close the output stream if opened - */ - -static void -pdc_close_stream(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - - pdc_flush_stream(out); - -#ifdef HAVE_LIBZ - /* - * This is delicate: we must ignore the return value because of the - * following reasoning: We are called in two situations: - * - end of document - * - exception - * In the first case compression is inactive, so deflateEnd() will - * fail only in the second case. However, when an exception occurs - * the document is definitely unusable, so we avoid recursive exceptions - * or an (unallowed) exception in PDF_delete(). - */ - - (void) deflateEnd(&stream->z); -#endif - - /* close the output file if writing to file, but do not close the - * in-core output stream since the caller will have to - * fetch the buffer after PDF_close(). - */ - if (stream->fp == NULL || !stream->writeproc) - return; - - if (stream->mustclose) - fclose(stream->fp); - - /* mark fp as dead in case the error handler jumps in later */ - stream->fp = NULL; -} - - -static void -pdc_check_stream(pdc_output *out, size_t len) -{ - size_t max; - int cur; - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - if (stream->curpos + len <= stream->maxpos) - return; - - pdc_flush_stream(out); - - if (stream->curpos + len <= stream->maxpos) - return; - - max = (size_t) (2*(stream->maxpos - stream->basepos)); - cur = stream->curpos - stream->basepos; - - stream->basepos = (pdc_byte *) - pdc_realloc(pdc, (void *) stream->basepos, max, "pdc_check_stream"); - stream->maxpos = stream->basepos + max; - stream->curpos = stream->basepos + cur; - - pdc_check_stream(out, len); -} - -void -pdc_flush_stream(pdc_output *out) -{ - size_t size; - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - if (!stream->writeproc || stream->compressing) - return; - - size = (size_t) (stream->curpos - stream->basepos); - - if (stream->writeproc(out, (void *) stream->basepos, size) != size) { - pdc_free(pdc, stream->basepos); - stream->basepos = NULL; - pdc_error(pdc, PDC_E_IO_NOWRITE, 0, 0, 0, 0); - } - - stream->base_offset += (size_t) (stream->curpos - stream->basepos); - stream->curpos = stream->basepos; -} - -void -pdc_cleanup_stream(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - /* this may happen in rare cases */ - if (!stream->basepos) - return; - - if (stream->basepos) { - pdc_free(pdc, (void *) stream->basepos); - stream->basepos = NULL; - } -} - -long -pdc_tell_out(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - - return(long)(stream->base_offset + (stream->curpos - stream->basepos)); -} - -/* --------------------- compression handling ----------------------- */ - -static void -pdc_begin_compress(pdc_output *out) -{ - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - if (!pdc_get_compresslevel(out)) { - stream->compressing = pdc_false; - return; - } - -#ifdef HAVE_LIBZ - if (out->compr_changed) - { - if (deflateEnd(&stream->z) != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "deflateEnd", 0, 0, 0); - - if (deflateInit(&stream->z, pdc_get_compresslevel(out)) != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "deflateInit", 0, 0, 0); - - out->compr_changed = pdc_false; - } - else - { - if (deflateReset(&stream->z) != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "deflateReset", 0, 0, 0); - } - - stream->z.avail_in = 0; -#endif /* HAVE_LIBZ */ - - stream->compressing = pdc_true; -} - - -static void -pdc_end_compress(pdc_output *out) -{ - int status; - pdc_stream *stream = &out->stream; - pdc_core *pdc = out->pdc; - - /* this may happen during cleanup triggered by an exception handler */ - if (!stream->compressing) - return; - - if (!pdc_get_compresslevel(out)) { - stream->compressing = pdc_false; - return; - } - - -#ifdef HAVE_LIBZ - /* Finish the stream */ - do { - pdc_check_stream(out, 128); - stream->z.next_out = (Bytef *) stream->curpos; - stream->z.avail_out = (uInt) (stream->maxpos - stream->curpos); - - status = deflate(&(stream->z), Z_FINISH); - stream->curpos = stream->z.next_out; - - if (status != Z_STREAM_END && status != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "Z_FINISH", 0, 0, 0); - - } while (status != Z_STREAM_END); - - stream->compressing = pdc_false; -#endif /* HAVE_LIBZ */ -} - -/* ---------------------- Low-level output function ---------------------- */ -/* - * Write binary data to the output without any modification, - * and apply compression if we are currently in compression mode. - */ - - -void -pdc_write(pdc_output *out, const void *data, size_t size) -{ - pdc_stream *stream = &out->stream; - int estimate = 0; - pdc_core *pdc = out->pdc; - -#ifdef HAVE_LIBZ - if (stream->compressing) { - stream->z.avail_in = (uInt) size; - stream->z.next_in = (Bytef *) data; - stream->z.avail_out = 0; - - while (stream->z.avail_in > 0) { - if (stream->z.avail_out == 0) { - /* estimate output buffer size */ - estimate = (int) (stream->z.avail_in/4 + 16); - pdc_check_stream(out, (size_t) estimate); - stream->z.next_out = (Bytef *) stream->curpos; - stream->z.avail_out = (uInt) (stream->maxpos - stream->curpos); - } - - if (deflate(&(stream->z), Z_NO_FLUSH) != Z_OK) - pdc_error(pdc, PDC_E_IO_COMPRESS, "Z_NO_FLUSH", 0, 0, 0); - - stream->curpos = stream->z.next_out; - } - } else { -#endif /* HAVE_LIBZ */ - - pdc_check_stream(out, size); - memcpy(stream->curpos, data, size); - stream->curpos += size; - -#ifdef HAVE_LIBZ - } -#endif /* HAVE_LIBZ */ -} - -/* --------------------------- Setup --------------------------- */ - -void * -pdc_boot_output(pdc_core *pdc) -{ - static const char *fn = "pdc_boot_output"; - pdc_output *out; - - out = (pdc_output*)pdc_malloc(pdc, sizeof(pdc_output), fn); - out->pdc = pdc; - - out->file_offset = NULL; - - pdc_boot_stream(out); - - return (void *) out; -} - -/* - * Initialize the PDF output - * only one of filename, fp, writeproc must be supplied, - * the others must be NULL: - * filename use supplied file name to create a named output file - * filename == "" means generate output in-core - * fp use supplied FILE * to write to file - * writeproc use supplied procedure to write output data - * - * Note that the caller is responsible for supplying sensible arguments. - */ - -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif -pdc_bool -pdc_init_output( - void *opaque, - pdc_output *out, - const char *filename, - FILE *fp, - size_t (*writeproc)(pdc_output *out, void *data, size_t size), - int compatibility) -{ - static const char *fn = "pdc_init_output"; - pdc_core *pdc = out->pdc; - int i; - - out->lastobj = 0; - - if (out->file_offset == NULL) { - out->file_offset_capacity = + ID_CHUNKSIZE; - - out->file_offset = (long *) pdc_malloc(pdc, - sizeof(long) * out->file_offset_capacity, fn); - } - - for (i = 1; i < out->file_offset_capacity; ++i) - out->file_offset[i] = PDC_BAD_ID; - - out->compresslevel = PDF_DEFAULT_COMPRESSION; - out->compr_changed = pdc_false; - - out->opaque = opaque; - - memcpy(out->id[0], out->id[1], MD5_DIGEST_LENGTH); - - - if (!pdc_init_stream(pdc, out, filename, fp, writeproc)) - return pdc_false; - - /* Write the document header */ - if (compatibility == PDC_1_5) - pdc_puts(out, "%PDF-1.5\n"); - else if (compatibility == PDC_1_4) - pdc_puts(out, "%PDF-1.4\n"); - else - pdc_puts(out, "%PDF-1.3\n"); - - /* binary magic number */ -#define PDC_MAGIC_BINARY "\045\344\343\317\322\012" - pdc_write(out, PDC_MAGIC_BINARY, sizeof(PDC_MAGIC_BINARY) - 1); - - return pdc_true; -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif - -void -pdc_close_output(pdc_output *out) -{ - pdc_close_stream(out); - - if (out->file_offset) - { - pdc_free(out->pdc, out->file_offset); - out->file_offset = 0; - } - -} - -void -pdc_cleanup_output(pdc_output *out) -{ - pdc_core *pdc = out->pdc; - - if (out->file_offset) { - pdc_free(pdc, out->file_offset); - out->file_offset = NULL; - } - - - pdc_cleanup_stream(out); - -} - -/* --------------------------- Digest --------------------------- */ - -void -pdc_init_digest(pdc_output *out) -{ - MD5_Init(&out->md5); -} - -void -pdc_update_digest(pdc_output *out, unsigned char *input, - unsigned int len) -{ - MD5_Update(&out->md5, input, len); -} - -void -pdc_finish_digest(pdc_output *out) -{ - MD5_Final(out->id[1], &out->md5); -} - -/* --------------------------- Objects and ids --------------------------- */ - -pdc_id -pdc_begin_obj(pdc_output *out, pdc_id obj_id) -{ - if (obj_id == PDC_NEW_ID) - obj_id = pdc_alloc_id(out); - - out->file_offset[obj_id] = pdc_tell_out(out); - pdc_printf(out, "%ld 0 obj\n", obj_id); - - return obj_id; -} - -pdc_id -pdc_alloc_id(pdc_output *out) -{ - pdc_core *pdc = out->pdc; - - out->lastobj++; - - if (out->lastobj >= out->file_offset_capacity) { - out->file_offset_capacity *= 2; - out->file_offset = (long *) pdc_realloc(pdc, out->file_offset, - sizeof(long) * out->file_offset_capacity, "pdc_alloc_id"); - } - - /* only needed for verifying obj table in PDF_close() */ - out->file_offset[out->lastobj] = PDC_BAD_ID; - - return out->lastobj; -} - -/* --------------------------- Strings --------------------------- */ - -void -pdc_put_pdfstring(pdc_output *out, const char *text, int len) -{ - const unsigned char *goal, *s; - - pdc_putc(out, PDF_PARENLEFT); - - goal = (const unsigned char *) text + len; - - for (s = (const unsigned char *) text; s < goal; s++) { - switch (*s) { - case PDF_RETURN: - pdc_putc(out, PDF_BACKSLASH); - pdc_putc(out, PDF_r); - break; - - case PDF_NEWLINE: - pdc_putc(out, PDF_BACKSLASH); - pdc_putc(out, PDF_n); - break; - - default: - if (*s == PDF_PARENLEFT || *s == PDF_PARENRIGHT || - *s == PDF_BACKSLASH) - pdc_putc(out, PDF_BACKSLASH); - pdc_putc(out, (char) *s); - } - } - - pdc_putc(out, PDF_PARENRIGHT); -} - -void -pdc_put_pdfunistring(pdc_output *out, const char *text) -{ - int len; - - len = (int) pdc_strlen(text) - 1; /* subtract a null byte... */ - - /* ...and possibly another one */ - if (pdc_is_unicode(text)) - len--; - - pdc_put_pdfstring(out, text, len); -} - -/* --------------------------- Streams --------------------------- */ - -void -pdc_begin_pdfstream(pdc_output *out) -{ - pdc_puts(out, "stream\n"); - - out->start_pos = pdc_tell_out(out); - - if (out->compresslevel) - pdc_begin_compress(out); -} - -void -pdc_end_pdfstream(pdc_output *out) -{ - if (out->compresslevel) - pdc_end_compress(out); - - out->length = pdc_tell_out(out) - out->start_pos; - - /* some PDF consumers seem to need the additional "\n" before "endstream", - ** the PDF reference allows it, and Acrobat's "repair" feature relies on it. - */ - pdc_puts(out, "\nendstream\n"); -} - -void -pdc_put_pdfstreamlength(pdc_output *out, pdc_id length_id) -{ - - pdc_begin_obj(out, length_id); /* Length object */ - pdc_printf(out, "%ld\n", out->length); - pdc_end_obj(out); -} - -void -pdc_set_compresslevel(pdc_output *out, int compresslevel) -{ - out->compresslevel = compresslevel; - out->compr_changed = pdc_true; -} - -int -pdc_get_compresslevel(pdc_output *out) -{ - return out->compresslevel; -} - -/* --------------------------- Names --------------------------- */ - -/* characters illegal in PDF names: "()<>[]{}/%#" */ -#define PDF_ILL_IN_NAMES "\050\051\074\076\133\135\173\175\057\045\043" - -#define PDF_NEEDS_QUOTE(c) \ - ((c) < 33 || (c) > 126 || strchr(PDF_ILL_IN_NAMES, (c)) != (char *) 0) - -void -pdc_put_pdfname(pdc_output *out, const char *text, size_t len) -{ - const unsigned char *goal, *s; - static const char BinToHex[] = PDF_STRING_0123456789ABCDEF; - - goal = (const unsigned char *) text + len; - - pdc_putc(out, PDF_SLASH); - - for (s = (const unsigned char *) text; s < goal; s++) { - if (PDF_NEEDS_QUOTE(*s)) { - pdc_putc(out, PDF_HASH); - pdc_putc(out, BinToHex[*s >> 4]); /* first nibble */ - pdc_putc(out, BinToHex[*s & 0x0F]); /* second nibble */ - } else - pdc_putc(out, (char) *s); - } -} - - -char * -pdc_make_quoted_pdfname(pdc_output *out, const char *text, - size_t len, char *buf) -{ - const unsigned char *goal, *s; - unsigned char *cur = (unsigned char *) buf; - static const unsigned char BinToHex[] = PDF_STRING_0123456789ABCDEF; - - (void) out; - - goal = (const unsigned char *) text + len; - - for (s = (const unsigned char *) text; s < goal; s++) { - if (PDF_NEEDS_QUOTE(*s)) { - *cur++ = PDF_HASH; - *cur++ = BinToHex[*s >> 4]; /* first nibble */ - *cur++ = BinToHex[*s & 0x0F]; /* second nibble */ - } else - *cur++ = *s; - } - - *cur = 0; - - return buf; -} - -/* --------------------------- Document sections --------------------------- */ - -void -pdc_mark_free(pdc_output *out, pdc_id obj_id) -{ - out->file_offset[obj_id] = PDC_FREE_ID; -} - - -void -pdc_write_xref_and_trailer(pdc_output *out, pdc_id info_id, pdc_id root_id) -{ - static const char bin2hex[] = PDF_STRING_0123456789ABCDEF; - long pos; - pdc_id i; - pdc_id free_id; - pdc_core *pdc = out->pdc; - - - /* Don't write any object after this check! */ - - for (i = 1; i <= out->lastobj; i++) { - if (out->file_offset[i] == PDC_BAD_ID) { - pdc_warning(pdc, PDC_E_INT_UNUSEDOBJ, - pdc_errprintf(pdc, "%ld", i), 0, 0, 0); - /* write a dummy object */ - pdc_begin_obj(out, i); - pdc_printf(out, "null %% unused object\n"); - pdc_end_obj(out); - } - } - - pos = pdc_tell_out(out); /* xref table */ - pdc_puts(out, "xref\n"); - pdc_printf(out, "0 %ld\n", out->lastobj + 1); - - /* find the last free entry in the xref table. - */ - out->file_offset[0] = PDC_FREE_ID; - for (free_id = out->lastobj; - out->file_offset[free_id] != PDC_FREE_ID; - --free_id) - ; - - pdc_printf(out, "%010ld 65535 f \n", free_id); - free_id = 0; - -#define PDF_FLUSH_AFTER_MANY_OBJS 3000 /* ca. 60 KB */ - for (i = 1; i <= out->lastobj; i++) { - /* Avoid spike in memory usage at the end of the document */ - if (i % PDF_FLUSH_AFTER_MANY_OBJS) - pdc_flush_stream(out); - - if (out->file_offset[i] == PDC_FREE_ID) - { - pdc_printf(out, "%010ld 00001 f \n", free_id); - free_id = i; - } - else - { - pdc_printf(out, "%010ld 00000 n \n", out->file_offset[i]); - } - } - - pdc_puts(out, "trailer\n"); - - pdc_begin_dict(out); /* trailer */ - pdc_printf(out, "/Size %ld\n", out->lastobj + 1); - pdc_printf(out, "/Root %ld 0 R\n", root_id); - - if (info_id != PDC_BAD_ID) - pdc_printf(out, "/Info %ld 0 R\n", info_id); - - /* write the digest to the ID array */ - pdc_puts(out, "/ID[<"); - for (i = 0; i < MD5_DIGEST_LENGTH; ++i) - { - pdc_putc(out, bin2hex[out->id[0][i] >> 4]); - pdc_putc(out, bin2hex[out->id[0][i] & 0x0F]); - } - pdc_puts(out, "><"); - for (i = 0; i < MD5_DIGEST_LENGTH; ++i) - { - pdc_putc(out, bin2hex[out->id[1][i] >> 4]); - pdc_putc(out, bin2hex[out->id[1][i] & 0x0F]); - } - pdc_puts(out, ">]\n"); - - pdc_end_dict(out); /* trailer */ - - pdc_puts(out, "startxref\n"); - pdc_printf(out, "%ld\n", pos); - pdc_puts(out, "%%EOF\n"); -} - -/* ---------------------- High-level output functions ---------------------- */ - - -/* - * Write a string to the output. - */ - -void -pdc_puts(pdc_output *out, const char *s) -{ - pdc_write(out, (void *) s, strlen(s)); -} - - -/* Write a character to the output without any modification. */ - -void -pdc_putc(pdc_output *out, const char c) -{ - pdc_write(out, (void *) &c, (size_t) 1); -} - -/* - * Write a formatted string to the output, converting from native - * encoding to ASCII if necessary. - */ - -void -pdc_printf(pdc_output *out, const char *fmt, ...) -{ - char buf[PDF_LINEBUFLEN]; /* formatting buffer */ - va_list ap; - - va_start(ap, fmt); - - pdc_vsprintf(out->pdc, buf, fmt, ap); - pdc_puts(out, buf); - - va_end(ap); -} diff --git a/src/libs/pdflib/libs/pdcore/pc_output.h b/src/libs/pdflib/libs/pdcore/pc_output.h deleted file mode 100644 index ce9c5a5426..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_output.h +++ /dev/null @@ -1,136 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_output.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib output routines - * - */ - -#ifndef PC_OUTPUT_H -#define PC_OUTPUT_H - -/* --------------------------- General --------------------------- */ - -/* Acrobat viewers change absolute values < 1/65536 to zero */ -#define PDF_SMALLREAL (0.000015) - -/* maximum capacity of a dictionary, in entries */ -#define PDF_MAXDICTSIZE (4095) - -/* maximum capacity of aa array, in elements */ -#define PDF_MAXARRAYSIZE (8191) - -/* some ASCII characters and strings, deliberately defined as hex/oct codes */ - -#define PDF_NEWLINE ((char) 0x0a) /* ASCII '\n' */ -#define PDF_RETURN ((char) 0x0d) /* ASCII '\r' */ -#define PDF_SPACE ((char) 0x20) /* ASCII ' ' */ -#define PDF_HASH ((char) 0x23) /* ASCII '#' */ -#define PDF_PARENLEFT ((char) 0x28) /* ASCII '(' */ -#define PDF_PARENRIGHT ((char) 0x29) /* ASCII ')' */ -#define PDF_PLUS ((char) 0x2b) /* ASCII '+' */ -#define PDF_SLASH ((char) 0x2f) /* ASCII '/' */ -#define PDF_BACKSLASH ((char) 0x5c) /* ASCII '\\' */ -#define PDF_A ((char) 0x41) /* ASCII 'A' */ -#define PDF_n ((char) 0x6e) /* ASCII 'n' */ -#define PDF_r ((char) 0x72) /* ASCII 'r' */ - -#define PDF_STRING_0123456789ABCDEF \ - "\060\061\062\063\064\065\066\067\070\071\101\102\103\104\105\106" - -typedef struct pdc_output_s pdc_output; - -/* --------------------------- Setup --------------------------- */ -void *pdc_boot_output(pdc_core *pdc); -pdc_bool pdc_init_output(void *opaque, pdc_output *out, const char *filename, - FILE *fp, size_t (*writeproc)(pdc_output *out, void *data, size_t size), - int compatibility); -void pdc_cleanup_output(pdc_output *out); - -void *pdc_get_opaque(pdc_output *out); - -/* --------------------------- Digest --------------------------- */ - -void pdc_init_digest(pdc_output *out); -void pdc_update_digest(pdc_output *out, unsigned char *input, - unsigned int len); -void pdc_finish_digest(pdc_output *out); - - -/* --------------------------- Objects and ids --------------------------- */ - -pdc_id pdc_alloc_id(pdc_output *out); -void pdc_mark_free(pdc_output *out, pdc_id obj_id); - -pdc_id pdc_begin_obj(pdc_output *out, pdc_id obj_id); -#define pdc_end_obj(out) pdc_puts(out, "endobj\n") - -#define PDC_NEW_ID 0L -#define PDC_BAD_ID -1L -#define PDC_FREE_ID -2L - - -/* --------------------------- Strings --------------------------- */ -/* output a string (including parentheses) and quote all required characters */ -void pdc_put_pdfstring(pdc_output *out, const char *text, - int len); - -/* output a string (including parentheses) which may be Unicode string */ -void pdc_put_pdfunistring(pdc_output *out, const char *string); - -/* --------------------------- Names --------------------------- */ -/* output a PDF name (including leading slash) and quote all required chars */ -void pdc_put_pdfname(pdc_output *out, const char *text, size_t len); - -/* return a quoted version of a string */ -char *pdc_make_quoted_pdfname(pdc_output *out, - const char *text, size_t len,char *buf); - - -/* --------------------------- Dictionaries --------------------------- */ -#define pdc_begin_dict(out) pdc_puts(out, "<<") -#define pdc_end_dict(out) pdc_puts(out, ">>\n") - - -/* --------------------------- Streams --------------------------- */ -void pdc_begin_pdfstream(pdc_output *out); -void pdc_end_pdfstream(pdc_output *out); -void pdc_put_pdfstreamlength(pdc_output *out, pdc_id length_id); - -int pdc_get_compresslevel(pdc_output *out); -void pdc_set_compresslevel(pdc_output *out, int compresslevel); - - -/* --------------------------- Document sections --------------------------- */ -void pdc_write_xref_and_trailer(pdc_output *out, - pdc_id info_id, pdc_id root_id); - - -/* --------------------------- Low-level output --------------------------- */ -void pdc_flush_stream(pdc_output *out); -long pdc_tell_out(pdc_output *out); -void pdc_close_stream1(pdc_output *out); -void pdc_close_output(pdc_output *out); -void pdc_cleanup_stream(pdc_output *out); -const char *pdc_get_stream_contents(pdc_output *out, long *size); -int pdc_stream_not_empty(pdc_output *out); - -void pdc_write(pdc_output *out, const void *data,size_t size); -void pdc_puts(pdc_output *out, const char *s); -void pdc_putc(pdc_output *out, const char c); - - -/* ------------------------- High-level output ------------------------- */ -void pdc_printf(pdc_output *out, const char *fmt, ...); - -#endif /* PC_OUTPUT_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_sbuf.c b/src/libs/pdflib/libs/pdcore/pc_sbuf.c deleted file mode 100644 index 7e6a9ce042..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_sbuf.c +++ /dev/null @@ -1,103 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_sbuf.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Dynamically growing string buffers. - * - */ - - -#include "pc_util.h" -#include "pc_sbuf.h" - - -/* TODO: initial size parameter for pdc_sb_new(). */ -#undef INIT_SIZE -#define INIT_SIZE 1000 - -pdc_sbuf * -pdc_sb_new(pdc_core *pdc) -{ - static const char fn[] = "pdc_sb_new"; - - pdc_sbuf *sb = (pdc_sbuf *)pdc_malloc(pdc, sizeof (pdc_sbuf), fn); - - sb->pdc = pdc; - sb->buf = (char *)pdc_malloc(pdc, INIT_SIZE, fn); /* TODO: potential leak */ - sb->scan = sb->buf; - sb->limit = sb->buf + INIT_SIZE; - - return sb; -} /* pdc_sb_new */ - - -void -pdc_sb_delete(pdc_sbuf *sb) -{ - pdc_free(sb->pdc, sb->buf); - pdc_free(sb->pdc, sb); -} /* pdc_sb_delete */ - - -void -pdc_sb_copy(pdc_sbuf *dst, const pdc_sbuf *src) -{ - static const char fn[] = "pdc_sb_copy"; - - int s_size = src->scan - src->buf; - int d_cap = dst->limit - dst->buf; - - if (d_cap < s_size) - { - do - { - d_cap *= 2; - } while (d_cap < s_size); - - pdc_free(dst->pdc, dst->buf); - dst->buf = (char *)pdc_malloc(dst->pdc, (size_t) d_cap, fn); - dst->limit = dst->buf + d_cap; - } - - memcpy(dst->buf, src->buf, (size_t) s_size); - dst->scan = dst->buf + s_size; -} /* pdc_sb_copy */ - - -void -pdc_sb_put_c(pdc_sbuf *sb, int ch) -{ - static const char fn[] = "pdc_sb_put_c"; - - int size = sb->limit - sb->buf; - - sb->buf = (char *)pdc_realloc(sb->pdc, sb->buf, (size_t) (2 * size), fn); - sb->scan = sb->buf + size; - sb->limit = sb->buf + 2 * size; - - *(sb->scan++) = (char) ch; -} /* pdc_sb_put_c */ - - -void -pdc_sb_write(pdc_sbuf *dst, const char *src, int len) -{ - int i; - - if (len == -1) - len = (int) strlen(src); - - /* TODO: optimize. */ - for (i = 0; i < len; ++i) - pdc_sb_putc(dst, src[i]); -} /* pdc_sb_write */ diff --git a/src/libs/pdflib/libs/pdcore/pc_sbuf.h b/src/libs/pdflib/libs/pdcore/pc_sbuf.h deleted file mode 100644 index a58565f3e5..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_sbuf.h +++ /dev/null @@ -1,64 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_sbuf.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Dynamically growing string buffers. - * - */ - -#ifndef PC_SBUF_H -#define PC_SBUF_H - -#include "pc_core.h" - -typedef struct pdc_sbuf_s pdc_sbuf; - -/* TODO: init_len parameter */ -pdc_sbuf * pdc_sb_new(pdc_core *pdc); -void pdc_sb_delete(pdc_sbuf *sb); - -void pdc_sb_copy(pdc_sbuf *dst, const pdc_sbuf *src); -void pdc_sb_write(pdc_sbuf *dst, const char *src, int len); - -/* public macros. -*/ -#define pdc_sb_putc(b, c) \ - (((b)->scan < (b)->limit) \ - ? (void) (*(b)->scan++ = (char) (c)) \ - : pdc_sb_put_c((b), (c))) - -#define pdc_sb_get_cptr(b) \ - ((b)->buf) - -#define pdc_sb_get_size(b) \ - ((b)->scan - (b)->buf) - -#define pdc_sb_rewrite(b) \ - ((void) ((b)->scan = (b)->buf)) - - -/* the declarations below are strictly private to pc_sbuf.c! -** use the above macros only! -*/ -struct pdc_sbuf_s -{ - pdc_core * pdc; - - char * buf; - char * scan; - char * limit; -}; - -void pdc_sb_put_c(pdc_sbuf *sb, int ch); - -#endif /* PC_SBUF_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_scope.c b/src/libs/pdflib/libs/pdcore/pc_scope.c deleted file mode 100644 index 5c18f7d67c..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_scope.c +++ /dev/null @@ -1,27 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_scope.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Scoping routines and macros - * - */ - -#include - -#include "pc_util.h" -#include "pc_scope.h" -#include "pc_file.h" - - -static void pdc_check_scope(void) {} - diff --git a/src/libs/pdflib/libs/pdcore/pc_scope.h b/src/libs/pdflib/libs/pdcore/pc_scope.h deleted file mode 100644 index 01bfb123b0..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_scope.h +++ /dev/null @@ -1,23 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_scope.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Scoping routines and macros - * - */ - -#ifndef PC_SCOPE_H -#define PC_SCOPE_H - - -#endif /* PC_SCOPE_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_unicode.c b/src/libs/pdflib/libs/pdcore/pc_unicode.c deleted file mode 100644 index 6c02680ee0..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_unicode.c +++ /dev/null @@ -1,1214 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_unicode.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines for converting between Unicode values and Adobe glyph names - * - */ - -#include "pc_util.h" -#include "pc_chartabs.h" - - -/* - * Returns the Unicode value of a glyph name. If the name is not - * contained in the Adobe Glyph List (AGL) 0 will be returned. - */ - -pdc_ushort -pdc_adobe2unicode(const char *name) -{ - int lo = 0; - int hi = ((sizeof tab_agl2uni) / (sizeof (pdc_glyph_tab))); - - if (name) - { - while (lo < hi) - { - int i = (lo + hi) / 2; - int cmp = strcmp(name, tab_agl2uni[i].glyphname); - - if (cmp == 0) - return tab_agl2uni[i].code; - - if (cmp < 0) - hi = i; - else - lo = i + 1; - } - } - - return 0; -} - -/* - * Returns the name in the Adobe Glyph List which corresponds to - * the supplied Unicode value. If the value doesn't have a - * corresponding Unicode name NULL will be returned. - */ - -const char * -pdc_unicode2adobe(pdc_ushort uv) -{ - int lo = 0; - int hi = ((sizeof tab_uni2agl) / (sizeof (pdc_glyph_tab))); - - if (uv) - { - while (lo < hi) - { - int i = (lo + hi) / 2; - - if (uv == tab_uni2agl[i].code) - return tab_uni2agl[i].glyphname; - - if (uv < tab_uni2agl[i].code) - hi = i; - else - lo = i + 1; - } - } - - return (char *) 0; -} - - - -/* - * Returns true if a character name is contained in pc_standard_latin_charset. - * Otherwise false will be returned. - */ - -pdc_bool -pdc_is_std_charname(const char *name) -{ - int lo = 0; - int hi = ((sizeof pc_standard_latin_charset) / (sizeof (char *))); - - if (name) - { - while (lo < hi) - { - int i = (lo + hi) / 2; - int cmp = strcmp(name, pc_standard_latin_charset[i]); - - if (cmp == 0) - return pdc_true; - - if (cmp < 0) - hi = i; - else - lo = i + 1; - } - } - - return pdc_false; -} - -/* - * The following source is based on Unicode's original source - * code ConvertUTF.c. It has been adapted to PDFlib programming - * conventions. - * - * The original file had the following notice: - * - * Copyright 2001 Unicode, Inc. - * - * Limitations on Rights to Redistribute This Code - * - * Author: Mark E. Davis, 1994. - * Rev History: Rick McGowan, fixes & updates May 2001. - * - * - * Functions for conversions between UTF32, UTF-16, and UTF-8. - * These funtions forming a complete set of conversions between - * the three formats. UTF-7 is not included here. - * - * Each of these routines takes pointers to input buffers and output - * buffers. The input buffers are const. - * - * Each routine converts the text between *sourceStart and sourceEnd, - * putting the result into the buffer between *targetStart and - * targetEnd. Note: the end pointers are *after* the last item: e.g. - * *(sourceEnd - 1) is the last item. - * - * The return result indicates whether the conversion was successful, - * and if not, whether the problem was in the source or target buffers. - * (Only the first encountered problem is indicated.) - * - * After the conversion, *sourceStart and *targetStart are both - * updated to point to the end of last text successfully converted in - * the respective buffers. - * - * Input parameters: - * sourceStart - pointer to a pointer to the source buffer. - * The contents of this are modified on return so that - * it points at the next thing to be converted. - * targetStart - similarly, pointer to pointer to the target buffer. - * sourceEnd, targetEnd - respectively pointers to the ends of the - * two buffers, for overflow checking only. - * - * These conversion functions take a pdc_convers_flags argument. When this - * flag is set to strict, both irregular sequences and isolated surrogates - * will cause an error. When the flag is set to lenient, both irregular - * sequences and isolated surrogates are converted. - * - * Whether the flag is strict or lenient, all illegal sequences will cause - * an error return. This includes sequences such as: , , - * or in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code - * must check for illegal sequences. - * - * When the flag is set to lenient, characters over 0x10FFFF are converted - * to the replacement character; otherwise (when the flag is set to strict) - * they constitute an error. - * - * Output parameters: - * The value "sourceIllegal" is returned from some routines if the input - * sequence is malformed. When "sourceIllegal" is returned, the source - * value will point to the illegal value that caused the problem. E.g., - * in UTF-8 when a sequence is malformed, it points to the start of the - * malformed sequence. - * - * Author: Mark E. Davis, 1994. - * Rev History: Rick McGowan, fixes & updates May 2001. - * - */ - -/* - * The following 4 definitions are compiler-specific. - * The C standard does not guarantee that wchar_t has at least - * 16 bits, so wchar_t is no less portable than unsigned short! - * All should be unsigned values to avoid sign extension during - * bit mask & shift operations. - */ - -typedef unsigned long UTF32; /* at least 32 bits */ -typedef unsigned short UTF16; /* at least 16 bits */ -typedef unsigned char UTF8; /* typically 8 bits */ - -/* Some fundamental constants */ -#define UNI_SUR_HIGH_START (UTF32)0xD800 -#define UNI_SUR_HIGH_END (UTF32)0xDBFF -#define UNI_SUR_LOW_START (UTF32)0xDC00 -#define UNI_SUR_LOW_END (UTF32)0xDFFF -#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD -#define UNI_MAX_BMP (UTF32)0x0000FFFF -#define UNI_MAX_UTF16 (UTF32)0x0010FFFF -#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF - -static const int halfShift = 10; /* used for shifting by 10 bits */ - -static const UTF32 halfBase = 0x0010000UL; -static const UTF32 halfMask = 0x3FFUL; - - -/* --------------------------------------------------------------------- */ - -#if 0 -static pdc_convers_result -pdc_convertUTF32toUTF16 ( - UTF32** sourceStart, const UTF32* sourceEnd, - UTF16** targetStart, const UTF16* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF32* source = *sourceStart; - UTF16* target = *targetStart; - while (source < sourceEnd) { - UTF32 ch; - if (target >= targetEnd) { - result = targetExhausted; break; - } - ch = *source++; - if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ - if ((flags == strictConversion) && - (ch >= UNI_SUR_HIGH_START && - ch <= UNI_SUR_LOW_END)) { - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } else { - *target++ = (UTF16) ch; /* normal case */ - } - } else if (ch > UNI_MAX_UTF16) { - if (flags == strictConversion) { - result = sourceIllegal; - } else { - *target++ = UNI_REPLACEMENT_CHAR; - } - } else { - /* target is a character in range 0xFFFF - 0x10FFFF. */ - if (target + 1 >= targetEnd) { - result = targetExhausted; - break; - } - ch -= halfBase; - *target++ = (UTF16) ((ch >> halfShift) + UNI_SUR_HIGH_START); - *target++ = (UTF16) ((ch & halfMask) + UNI_SUR_LOW_START); - } - } - *sourceStart = source; - *targetStart = target; - return result; -} - -/* --------------------------------------------------------------------- */ - -static pdc_convers_result -pdc_convertUTF16toUTF32 ( - UTF16** sourceStart, UTF16* sourceEnd, - UTF32** targetStart, const UTF32* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF16* source = *sourceStart; - UTF32* target = *targetStart; - UTF32 ch, ch2; - while (source < sourceEnd) { - ch = *source++; - if (ch >= UNI_SUR_HIGH_START && - ch <= UNI_SUR_HIGH_END && - source < sourceEnd) { - ch2 = *source; - if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { - ch = ((ch - UNI_SUR_HIGH_START) << halfShift) - + (ch2 - UNI_SUR_LOW_START) + halfBase; - ++source; - } else if (flags == strictConversion) { - /* it's an unpaired high surrogate */ - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } - } else if ((flags == strictConversion) && - (ch >= UNI_SUR_LOW_START && - ch <= UNI_SUR_LOW_END)) { - /* an unpaired low surrogate */ - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } - if (target >= targetEnd) { - result = targetExhausted; - break; - } - *target++ = ch; - } - *sourceStart = source; - *targetStart = target; -#ifdef CVTUTF_DEBUG -if (result == sourceIllegal) { - fprintf(stderr, "pdc_convertUTF16toUTF32 illegal seq 0x%04x,%04x\n", - ch, ch2); - fflush(stderr); -} -#endif - return result; -} -#endif - -/* --------------------------------------------------------------------- */ - -/* - * Index into the table below with the first byte of a UTF-8 sequence to - * get the number of trailing bytes that are supposed to follow it. - */ -static const char trailingBytesForUTF8[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 -}; - -#if 0 -static const char -pdc_get_trailingBytesForUTF8(int i) { - return (trailingBytesForUTF8[i]); -} -#endif - -/* - * Magic values subtracted from a buffer value during UTF8 conversion. - * This table contains as many values as there might be trailing bytes - * in a UTF-8 sequence. - */ -static const UTF32 offsetsFromUTF8[6] = { - 0x00000000UL, 0x00003080UL, 0x000E2080UL, - 0x03C82080UL, 0xFA082080UL, 0x82082080UL -}; - -/* - * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed - * into the first byte, depending on how many bytes follow. There are - * as many entries in this table as there are UTF-8 sequence types. - * (I.e., one byte sequence, two byte... six byte sequence.) - */ -static const UTF8 firstByteMark[7] = { - 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC -}; - -/* --------------------------------------------------------------------- */ - -/* The interface converts a whole buffer to avoid function-call overhead. - * Constants have been gathered. Loops & conditionals have been removed as - * much as possible for efficiency, in favor of drop-through switches. - * (See "Note A" at the bottom of the file for equivalent code.) - * If your compiler supports it, the "pdc_islegalUTF8" call can be turned - * into an inline function. - */ - -/* --------------------------------------------------------------------- */ - -static pdc_convers_result -pdc_convertUTF16toUTF8 ( - UTF16** sourceStart, const UTF16* sourceEnd, - UTF8** targetStart, const UTF8* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF16* source = *sourceStart; - UTF8* target = *targetStart; - while (source < sourceEnd) { - UTF32 ch; - unsigned short bytesToWrite = 0; - const UTF32 byteMask = 0xBF; - const UTF32 byteMark = 0x80; - ch = *source++; - /* If we have a surrogate pair, convert to UTF32 first. */ - if (ch >= UNI_SUR_HIGH_START && - ch <= UNI_SUR_HIGH_END && - source < sourceEnd) { - UTF32 ch2 = *source; - if (ch2 >= UNI_SUR_LOW_START && - ch2 <= UNI_SUR_LOW_END) { - ch = ((ch - UNI_SUR_HIGH_START) << halfShift) - + (ch2 - UNI_SUR_LOW_START) + halfBase; - ++source; - } else if (flags == strictConversion) { - /* it's an unpaired high surrogate */ - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } - } else if ((flags == strictConversion) && - (ch >= UNI_SUR_LOW_START && - ch <= UNI_SUR_LOW_END)) { - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } - /* Figure out how many bytes the result will require */ - if (ch < (UTF32)0x80) { bytesToWrite = 1; - } else if (ch < (UTF32)0x800) { bytesToWrite = 2; - } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; - } else if (ch < (UTF32)0x200000) { bytesToWrite = 4; - } else { bytesToWrite = 2; - ch = UNI_REPLACEMENT_CHAR; - } - - target += bytesToWrite; - if (target > targetEnd) { - target -= bytesToWrite; result = targetExhausted; break; - } - switch (bytesToWrite) { /* note: everything falls through. */ - case 4: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 3: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 2: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); - } - target += bytesToWrite; - } - *sourceStart = source; - *targetStart = target; - return result; -} - -/* --------------------------------------------------------------------- */ - -/* - * Utility routine to tell whether a sequence of bytes is legal UTF-8. - * This must be called with the length pre-determined by the first byte. - * If not calling this from pdc_convertUTF8to*, then the length can be set by: - * length = trailingBytesForUTF8[*source]+1; - * and the sequence is illegal right away if there aren't that many bytes - * available. - * If presented with a length > 4, this returns pdc_false. The Unicode - * definition of UTF-8 goes up to 4-byte sequences. - */ - -static pdc_bool -pdc_islegalUTF8(UTF8 *source, int length) { - UTF8 a; - UTF8 *srcptr = source+length; - switch (length) { - default: return pdc_false; - /* Everything else falls through when "pdc_true"... */ - case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return pdc_false; - case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return pdc_false; - case 2: if ((a = (*--srcptr)) > 0xBF) return pdc_false; - switch (*source) { - /* no fall-through in this inner switch */ - case 0xE0: if (a < 0xA0) return pdc_false; break; - case 0xF0: if (a < 0x90) return pdc_false; break; - case 0xF4: if (a > 0x8F) return pdc_false; break; - default: if (a < 0x80) return pdc_false; - } - case 1: if (*source >= 0x80 && *source < 0xC2) return pdc_false; - if (*source > 0xF4) return pdc_false; - } - return pdc_true; -} - -/* --------------------------------------------------------------------- */ - -#if 0 -/* - * Exported function to return whether a UTF-8 sequence is legal or not. - * This is not used here; it's just exported. - */ -static pdc_bool pdc_islegalUTF8sequence(UTF8 *source, UTF8 *sourceEnd) { - int length = trailingBytesForUTF8[*source]+1; - if (source+length > sourceEnd) { - return pdc_false; - } - return pdc_islegalUTF8(source, length); -} -#endif - -/* --------------------------------------------------------------------- */ - -static pdc_convers_result -pdc_convertUTF8toUTF16 ( - UTF8** sourceStart, UTF8* sourceEnd, - UTF16** targetStart, const UTF16* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF8* source = *sourceStart; - UTF16* target = *targetStart; - while (source < sourceEnd) { - UTF32 ch = 0L; - unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; - if (source + extraBytesToRead >= sourceEnd) { - result = sourceExhausted; - break; - } - /* Do this check whether lenient or strict */ - if (! pdc_islegalUTF8(source, extraBytesToRead+1)) { - result = sourceIllegal; - break; - } - /* - * The cases all fall through. See "Note A" below. - */ - switch (extraBytesToRead) { - case 3: ch += *source++; ch <<= 6; - case 2: ch += *source++; ch <<= 6; - case 1: ch += *source++; ch <<= 6; - case 0: ch += *source++; - } - ch -= offsetsFromUTF8[extraBytesToRead]; - - if (target >= targetEnd) { - result = targetExhausted; - break; - } - if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ - if ((flags == strictConversion) && - (ch >= UNI_SUR_HIGH_START && - ch <= UNI_SUR_LOW_END)) { - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } else { - *target++ = (UTF16) ch; /* normal case */ - } - } else if (ch > UNI_MAX_UTF16) { - if (flags == strictConversion) { - result = sourceIllegal; - source -= extraBytesToRead; /* return to the start */ - } else { - *target++ = UNI_REPLACEMENT_CHAR; - } - } else { - /* target is a character in range 0xFFFF - 0x10FFFF. */ - if (target + 1 >= targetEnd) { - result = targetExhausted; - break; - } - ch -= halfBase; - *target++ = (UTF16) ((ch >> halfShift) + UNI_SUR_HIGH_START); - *target++ = (UTF16) ((ch & halfMask) + UNI_SUR_LOW_START); - } - } - *sourceStart = source; - *targetStart = target; - return result; -} - -/* --------------------------------------------------------------------- */ - -#if 0 -static pdc_convers_result -pdc_convertUTF32toUTF8 ( - UTF32** sourceStart, const UTF32* sourceEnd, - UTF8** targetStart, const UTF8* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF32* source = *sourceStart; - UTF8* target = *targetStart; - while (source < sourceEnd) { - UTF32 ch; - unsigned short bytesToWrite = 0; - const UTF32 byteMask = 0x000000BF; - const UTF32 byteMark = 0x00000080; - ch = *source++; - /* surrogates of any stripe are not legal UTF32 characters */ - if (flags == strictConversion ) { - if ((ch >= UNI_SUR_HIGH_START) && (ch <= UNI_SUR_LOW_END)) { - --source; /* return to the illegal value itself */ - result = sourceIllegal; - break; - } - } - /* Figure out how many bytes the result will require */ - if (ch < (UTF32)0x80) { bytesToWrite = 1; - } else if (ch < (UTF32)0x800) { bytesToWrite = 2; - } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; - } else if (ch < (UTF32)0x200000) { bytesToWrite = 4; - } else { bytesToWrite = 2; - ch = UNI_REPLACEMENT_CHAR; - } - - target += bytesToWrite; - if (target > targetEnd) { - target -= bytesToWrite; result = targetExhausted; break; - } - switch (bytesToWrite) { /* note: everything falls through. */ - case 4: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 3: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 2: *--target = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6; - case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); - } - target += bytesToWrite; - } - *sourceStart = source; - *targetStart = target; - return result; -} - -/* --------------------------------------------------------------------- */ - -static pdc_convers_result -pdc_convertUTF8toUTF32 ( - UTF8** sourceStart, UTF8* sourceEnd, - UTF32** targetStart, const UTF32* targetEnd, - const pdc_convers_flags flags) { - pdc_convers_result result = conversionOK; - UTF8* source = *sourceStart; - UTF32* target = *targetStart; - - (void) flags; - - while (source < sourceEnd) { - UTF32 ch = 0; - unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; - if (source + extraBytesToRead >= sourceEnd) { - result = sourceExhausted; break; - } - /* Do this check whether lenient or strict */ - if (! pdc_islegalUTF8(source, extraBytesToRead+1)) { - result = sourceIllegal; - break; - } - /* - * The cases all fall through. See "Note A" below. - */ - switch (extraBytesToRead) { - case 3: ch += *source++; ch <<= 6; - case 2: ch += *source++; ch <<= 6; - case 1: ch += *source++; ch <<= 6; - case 0: ch += *source++; - } - ch -= offsetsFromUTF8[extraBytesToRead]; - - if (target >= targetEnd) { - result = targetExhausted; - break; - } - if (ch <= UNI_MAX_UTF32) { - *target++ = ch; - } else if (ch > UNI_MAX_UTF32) { - *target++ = UNI_REPLACEMENT_CHAR; - } else { - if (target + 1 >= targetEnd) { - result = targetExhausted; - break; - } - ch -= halfBase; - *target++ = (ch >> halfShift) + UNI_SUR_HIGH_START; - *target++ = (ch & halfMask) + UNI_SUR_LOW_START; - } - } - *sourceStart = source; - *targetStart = target; - return result; -} -#endif - -/* --------------------------------------------------------------------- - - Note A. - The fall-through switches in UTF-8 reading code save a - temp variable, some decrements & conditionals. The switches - are equivalent to the following loop: - { - int tmpBytesToRead = extraBytesToRead+1; - do { - ch += *source++; - --tmpBytesToRead; - if (tmpBytesToRead) ch <<= 6; - } while (tmpBytesToRead > 0); - } - In UTF-8 writing code, the switches on "bytesToWrite" are - similarly unrolled loops. - - --------------------------------------------------------------------- */ - -/* - * pdc_convert_string converts a arbitrary encoded string (maybe UTF) to - * another string. - * - * The new converted string is allocated and terminated by required zeros. - * The caller is responsible for freeing the string buffer. - * - * - * LBP: low byte picking - * - * Input-Parameter: - * - * inutf: input string format (see pc_unicode.h): - * - * pdc_auto: If a BOM is recognized: - * pdc_utf8 or pdc_utf16xx resp. - * Otherwise if input encoding is specified: - * pdc_bytes - * Otherwise: - * pdc_utf16 - * - * pdc_auto2: If input encoding is not specified: - * pdc_utf16 - * Otherwise after successfull LBP: - * pdc_auto - * Otherwise - * pdc_utf16 - * - * pdc_bytes: 8-bit string. Encoding is if specified. - * - * pdc_bytes2: After successfull LBP: - * pdc_bytes - * Otherwise - * pdc_utf16 - * - * pdc_utf8: UTF-8 formatted string. - * - * pdc_utf16: If a UTF16 BOM is recognized: - * pdc_utf16be or pdc_utf16le - * Otherwise UTF-16 machine byte ordered string. - * - * pdc_utf16be UTF-16 big endian formatted string. - * - * pdc_utf16le UTF-16 little endian formatted string. - * - * inev: Encoding vector for input pdc_bytes string. - * - * instring: Input string. - * - * inlen: Length of input string in byte. - * - * oututf: Target format for output string. - * pdc_auto, pdc_auto2 and pdc_bytes2 are not supported. - * - * outev: Encoding vector for output pdc_bytes string. - * - * flags: PDC_CONV_KEEPBYTES: - * Input pdc_bytes strings will be kept differing from oututf. - * *oututf: pdc_byte. - * - * PDC_CONV_TRY7BYTES: - * UTF-8 output strings will have no BOM if every byte - * is smaller than x80. - * *oututf: pdc_byte. - * - * PDC_CONV_TRYBYTES: - * UTF-UTF-16xx output strings will be converted by LBP - * if every character is smaller than x0100. - * *oututf: pdc_byte. - * - * PDC_CONV_WITHBOM: - * UTF-8 or UTF-UTF-16xx output strings will be armed - * with an appropriate BOM. - * - * PDC_CONV_NOBOM: - * In UTF-8 or UTF-UTF-16xx output strings any BOM sequence - * will be removed. - * - * verbose: Error messages are put out. Otherwise they are saved only. - * - * Output-Parameter: - * - * oututf: Reached format for output string. - * - * outstring: Pointer of allocated output string - * - * outlen: Length of output string. - * - */ - -int -pdc_convert_string(pdc_core *pdc, - pdc_text_format inutf, pdc_encodingvector *inev, - pdc_byte *instring, int inlen, - pdc_text_format *oututf_p, pdc_encodingvector *outev, - pdc_byte **outstring, int *outlen, int flags, - pdc_bool verbose) -{ - static const char *fn = "pdc_convert_string"; - pdc_text_format oututf = *oututf_p; - pdc_text_format oututf_s; - pdc_ushort *usinstr = (pdc_ushort *) instring; - pdc_ushort uv = 0; - pdc_byte *instr = (pdc_byte *) instring; - pdc_bool inalloc = pdc_false; - pdc_bool hasbom = pdc_false; - pdc_bool toswap = pdc_false; - int errcode = 0; - int i, j, len; - - /* analyzing 2 byte textformat */ - if (inutf == pdc_auto2 || inutf == pdc_bytes2) - { - if (inutf == pdc_auto2 && !inev) - { - inutf = pdc_utf16; - } - else - { - len = inlen / 2; - if (2 * len != inlen) - { - errcode = PDC_E_CONV_ILLUTF16; - goto PDC_CONV_ERROR; - } - for (i = 0; i < len; i++) - if (usinstr[i] > 0x00FF) - break; - - /* low byte picking */ - if (i == len) - { - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (len + 2), fn); - for (i = 0; i < len; i++) - instr[i] = (pdc_byte) usinstr[i]; - instr[len] = 0; - instr[len + 1] = 0; - - inalloc = pdc_true; - instring = instr; - inlen = len; - - if (inutf == pdc_bytes2) - inutf = pdc_bytes; - else - inutf = pdc_auto; - } - else - { - inutf = pdc_utf16; - } - } - } - - /* analyzing UTF-16 textformat */ - if (inutf == pdc_utf16) - { - if (pdc_is_utf16be_unicode(instring)) - inutf = pdc_utf16be; - else if (pdc_is_utf16le_unicode(instring)) - inutf = pdc_utf16le; - } - - /* analyzing auto textformat */ - else if (inutf == pdc_auto) - { - if (pdc_is_utf8_unicode(instring)) - inutf = pdc_utf8; - else if (pdc_is_utf16be_unicode(instring)) - inutf = pdc_utf16be; - else if (pdc_is_utf16le_unicode(instring)) - inutf = pdc_utf16le; - else if (inev) - inutf = pdc_bytes; - else - inutf = pdc_utf16; - } - - /* conversion to UTF-16 by swapping */ - if ((inutf == pdc_utf16be || inutf == pdc_utf16le) && - (inutf != oututf || flags & PDC_CONV_TRYBYTES)) - { - if (inlen && - ((inutf == pdc_utf16be && !PDC_ISBIGENDIAN) || - (inutf == pdc_utf16le && PDC_ISBIGENDIAN))) - { - if (inalloc) - pdc_swap_bytes((char *) instring, inlen, NULL); - else - { - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) inlen, fn); - pdc_swap_bytes((char *) instring, inlen, (char *) instr); - - inalloc = pdc_true; - instring = instr; - } - } - inutf = pdc_utf16; - } - - /* conversion to UTF-16 by inflation or encoding vector */ - if (inutf == pdc_bytes) - { - if ((oututf != pdc_bytes && !(flags & PDC_CONV_KEEPBYTES)) || - inev != NULL || outev != NULL) - { - len = 2 * inlen; - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (len + 2), fn); - usinstr = (pdc_ushort *) instr; - - for (i = 0; i < inlen; i++) - { - uv = (pdc_ushort) instring[i]; - if (inev && uv) - { - uv = inev->codes[uv]; - if (!uv) uv = 0x0020; - } - usinstr[i] = uv; - } - - if (inalloc) - pdc_free(pdc, instring); - - inalloc = pdc_true; - instring = instr; - inlen = len; - inutf = pdc_utf16; - } - else if (flags & PDC_CONV_KEEPBYTES) - { - oututf = pdc_bytes; - } - } - - /* illegal UTF-16 */ - if (inutf != pdc_bytes && inutf != pdc_utf8 && inlen % 2) - { - if (inalloc) - pdc_free(pdc, instring); - errcode = PDC_E_CONV_ILLUTF16; - goto PDC_CONV_ERROR; - } - - /* UTF conversion */ - oututf_s = oututf; - if ((oututf_s == pdc_bytes && inutf == pdc_utf8) || - oututf_s == pdc_utf16be || oututf_s == pdc_utf16le) - oututf_s = pdc_utf16; - if (inutf != oututf_s && oututf_s != pdc_bytes) - { - len = 4 * inlen + 2; - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) len, fn); - - if (inlen) - { - pdc_convers_result result; - pdc_byte *instringa, *instra, *instringe, *instre; - - instringa = instring; - instringe = instring + inlen; - instra = instr; - instre = instr + len; - - if (inutf == pdc_utf8) - result = pdc_convertUTF8toUTF16( - (UTF8 **) &instringa, (UTF8 *) instringe, - (UTF16 **) &instra, (UTF16 *) instre, - strictConversion); - else - result = pdc_convertUTF16toUTF8( - (UTF16 **) &instringa, (UTF16 *) instringe, - (UTF8 **) &instra, (UTF8 *) instre, - strictConversion); - - if (inalloc) - pdc_free(pdc, instring); - - switch (result) - { - case targetExhausted: - errcode = PDC_E_CONV_MEMOVERFLOW; - break; - - case sourceExhausted: - case sourceIllegal: - errcode = PDC_E_CONV_ILLUTF; - break; - - default: - break; - } - - if (errcode) - { - pdc_free(pdc, instr); - goto PDC_CONV_ERROR; - } - - inlen = instra - instr; - } - - if (inlen + 2 != len) - instr = pdc_realloc(pdc, instr, (size_t) (inlen + 2), fn); - instr[inlen] = 0; - instr[inlen + 1] = 0; - - inalloc = pdc_true; - instring = instr; - inutf = oututf_s; - } - - if (inutf == pdc_bytes) - { - if (!inalloc) - { - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (inlen + 2), fn); - memcpy(instr, instring, (size_t) inlen); - instr[inlen] = 0; - instr[inlen + 1] = 0; - - instring = instr; - } - } - - /* trying to reduce UTF-16 string to bytes string */ - if (inutf == pdc_utf16 && - (flags & PDC_CONV_TRYBYTES || oututf == pdc_bytes)) - { - len = inlen / 2; - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (len + 2), fn); - usinstr = (pdc_ushort *) instring; - - for (i = 0; i < len; i++) - { - uv = usinstr[i]; - if (outev && uv) - uv = (pdc_ushort) pdc_get_encoding_bytecode(pdc, outev, uv); - if (uv > 0x00FF) - break; - - instr[i] = (pdc_byte) uv; - } - - if (i == len) - { - instr[len] = 0; - instr[len + 1] = 0; - - if (inalloc) - pdc_free(pdc, instring); - - inalloc = pdc_true; - instring = instr; - inlen = len; - inutf = pdc_bytes; - } - else - pdc_free(pdc, instr); - } - - /* UTF-8 format */ - if (inutf == pdc_utf8) - { - hasbom = pdc_is_utf8_unicode(instring); - - if (flags & PDC_CONV_TRY7BYTES) - { - for (i = hasbom ? 3 : 0; i < inlen; i++) - if (instring[i] > 0x7F) - break; - if (i == inlen) - { - flags &= ~PDC_CONV_WITHBOM; - flags |= PDC_CONV_NOBOM; - inutf = pdc_bytes; - } - } - - if (!inalloc || flags & PDC_CONV_WITHBOM || flags & PDC_CONV_NOBOM) - { - i = (flags & PDC_CONV_WITHBOM && !hasbom) ? 3 : 0; - j = (flags & PDC_CONV_NOBOM && hasbom) ? 3 : 0; - - len = inlen + i - j; - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (len + 1), fn); - memcpy(&instr[i], &instring[j], (size_t) (inlen - j)); - instr[len] = 0; - - if (inalloc) - pdc_free(pdc, instring); - - instring = instr; - inlen = len; - - hasbom = (flags & PDC_CONV_WITHBOM); - } - - if (hasbom) - { - instring[0] = PDF_BOM2; - instring[1] = PDF_BOM3; - instring[2] = PDF_BOM4; - } - } - - /* UTF-16 formats */ - if (inutf == pdc_utf16 || inutf == pdc_utf16be || inutf == pdc_utf16le) - { - hasbom = pdc_is_utf16be_unicode(instring) || - pdc_is_utf16le_unicode(instring); - - if (!inalloc || oututf == pdc_utf16be || oututf == pdc_utf16le || - flags & PDC_CONV_WITHBOM || flags & PDC_CONV_NOBOM) - { - i = (flags & PDC_CONV_WITHBOM && !hasbom) ? 2 : 0; - j = (flags & PDC_CONV_NOBOM && hasbom) ? 2 : 0; - - len = inlen + i - j; - instr = (pdc_byte *) pdc_malloc(pdc, (size_t) (len + 2), fn); - memcpy(&instr[i], &instring[j], (size_t) (inlen - j)); - instr[len] = 0; - instr[len + 1] = 0; - - if (inalloc) - pdc_free(pdc, instring); - - instring = instr; - inlen = len; - - hasbom = (flags & PDC_CONV_WITHBOM); - } - - i = hasbom ? 2 : 0; - if (inutf == pdc_utf16) - { - if (oututf == pdc_utf16be) - { - inutf = pdc_utf16be; - toswap = !PDC_ISBIGENDIAN; - } - if (oututf == pdc_utf16le) - { - inutf = pdc_utf16le; - toswap = PDC_ISBIGENDIAN; - } - if (toswap) - pdc_swap_bytes((char *) &instring[i], inlen - i, NULL); - } - - if (hasbom) - { - if (inutf == pdc_utf16be || - (inutf == pdc_utf16 && PDC_ISBIGENDIAN)) - { - instring[0] = PDF_BOM0; - instring[1] = PDF_BOM1; - } - if (inutf == pdc_utf16le || - (inutf == pdc_utf16 && !PDC_ISBIGENDIAN)) - { - instring[0] = PDF_BOM1; - instring[1] = PDF_BOM0; - } - } - } - - *oututf_p = inutf; - *outlen = inlen; - *outstring = instring; - return 0; - - PDC_CONV_ERROR: - *outlen = 0; - *outstring = NULL; - - if (errcode == PDC_E_CONV_ILLUTF) - { - const char *stemp = - pdc_errprintf(pdc, "%d", inutf == pdc_utf8 ? 8 : 16); - pdc_set_errmsg(pdc, errcode, stemp, 0, 0, 0); - } - else - pdc_set_errmsg(pdc, errcode, 0, 0, 0, 0); - - if (verbose) - pdc_error(pdc, -1, 0, 0, 0, 0); - - return errcode; -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/libs/pdflib/libs/pdcore/pc_unicode.h b/src/libs/pdflib/libs/pdcore/pc_unicode.h deleted file mode 100644 index 5dd185e547..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_unicode.h +++ /dev/null @@ -1,116 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_unicode.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Unicode glyph name conversion routines - * - */ - -#ifndef PC_UNICODE_H -#define PC_UNICODE_H - -#define PDC_MAX_UNICODE (int) 0x0000FFFF - -#define PDC_REPL_CHAR (int) 0x0000FFFD - -#define PDC_EURO_SIGN (pdc_ushort) 0x20AC - -/* The Unicode byte order mark (BOM) byte parts */ -#define PDF_BOM0 0376 /* '\xFE' */ -#define PDF_BOM1 0377 /* '\xFF' */ -#define PDF_BOM2 0357 /* '\xEF' */ -#define PDF_BOM3 0273 /* '\xBB' */ -#define PDF_BOM4 0277 /* '\xBF' */ - -/* - * check whether the string is plain C or UTF16 unicode - * by looking for the BOM in big-endian or little-endian format resp. - * s must not be NULL. - */ -#define pdc_is_utf16be_unicode(s) \ - (((pdc_byte *)(s))[0] == PDF_BOM0 && \ - ((pdc_byte *)(s))[1] == PDF_BOM1) - -#define pdc_is_utf16le_unicode(s) \ - (((pdc_byte *)(s))[0] == PDF_BOM1 && \ - ((pdc_byte *)(s))[1] == PDF_BOM0) - -#define pdc_is_unicode(s) pdc_is_utf16be_unicode(s) - -/* - * check whether the string is plain C or UTF8 unicode - * by looking for the BOM - * s must not be NULL. - */ -#define pdc_is_utf8_unicode(s) \ - (((pdc_byte *)(s))[0] == PDF_BOM2 && \ - ((pdc_byte *)(s))[1] == PDF_BOM3 && \ - ((pdc_byte *)(s))[2] == PDF_BOM4) - -typedef struct -{ - pdc_ushort code; - const char *glyphname; -} pdc_glyph_tab; - -typedef enum -{ - conversionOK, /* conversion successful */ - sourceExhausted, /* partial character in source, but hit end */ - targetExhausted, /* insuff. room in target for conversion */ - sourceIllegal /* source sequence is illegal/malformed */ -} pdc_convers_result; - -typedef enum -{ - strictConversion = 0, - lenientConversion -} pdc_convers_flags; - -#define PDC_CONV_KEEPBYTES (1<<0) -#define PDC_CONV_TRY7BYTES (1<<1) -#define PDC_CONV_TRYBYTES (1<<2) -#define PDC_CONV_WITHBOM (1<<3) -#define PDC_CONV_NOBOM (1<<4) - -typedef enum -{ - pdc_auto, - pdc_auto2, - pdc_bytes, - pdc_bytes2, - pdc_utf8, - pdc_utf16, - pdc_utf16be, - pdc_utf16le -} pdc_text_format; - -pdc_ushort pdc_adobe2unicode(const char *name); - -const char *pdc_unicode2adobe(pdc_ushort uv); - -unsigned int pdc_name2sid(const char *name); - -const char *pdc_sid2name(unsigned int sid); - -pdc_bool pdc_is_std_charname(const char *name); - -pdc_ushort pdc_get_equi_unicode(pdc_ushort uv); - -int pdc_convert_string(pdc_core *pdc, - pdc_text_format inutf, pdc_encodingvector *inev, - pdc_byte *instring, int inlen, pdc_text_format *oututf_p, - pdc_encodingvector *outev, pdc_byte **outstring, int *outlen, int flags, - pdc_bool verbose); - -#endif /* PC_UNICODE_H */ diff --git a/src/libs/pdflib/libs/pdcore/pc_util.c b/src/libs/pdflib/libs/pdcore/pc_util.c deleted file mode 100644 index 3a1dff6ccc..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_util.c +++ /dev/null @@ -1,678 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_util.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Various utility routines - * - */ - -#include - -#include "pc_util.h" - -#ifdef AS400 -#include /* for getenv() emulation */ -#endif - -/* -------------------------- Time functions ------------------------------ */ - -#ifndef WINCE -#include -#else -#include -#endif - -void -pdc_get_timestr(char *str) -{ -#ifndef WINCE - time_t timer, gtimer; - struct tm ltime; - double diffminutes; - int utcoffset; -#else - SYSTEMTIME st; -#endif - -#ifndef WINCE - time(&timer); - - /* Calculate UTC offset with standard C functions. */ - /* gmtime(), localtime and mktime() all use the same internal */ - /* buffer. That is why it is done in multiple steps. */ - ltime = *gmtime(&timer); - gtimer = mktime(<ime); - ltime = *localtime(&timer); - ltime.tm_isdst = 0; - diffminutes = difftime(mktime(<ime), gtimer) / 60; - if (diffminutes >= 0) - utcoffset = (int)(diffminutes + 0.5); - else - utcoffset = (int)(diffminutes - 0.5); - - /* Get local time again, previous data is damaged by mktime(). */ - ltime = *localtime(&timer); - - if (utcoffset > 0) - sprintf(str, "D:%04d%02d%02d%02d%02d%02d+%02d'%02d'", - ltime.tm_year + 1900, ltime.tm_mon + 1, ltime.tm_mday, - ltime.tm_hour, ltime.tm_min, ltime.tm_sec, - utcoffset / 60, utcoffset % 60); - else if (utcoffset < 0) - sprintf(str, "D:%04d%02d%02d%02d%02d%02d-%02d'%02d'", - ltime.tm_year + 1900, ltime.tm_mon + 1, ltime.tm_mday, - ltime.tm_hour, ltime.tm_min, ltime.tm_sec, - abs(utcoffset) / 60, abs(utcoffset) % 60); - else - sprintf(str, "D:%04d%02d%02d%02d%02d%02dZ", - ltime.tm_year + 1900, ltime.tm_mon + 1, ltime.tm_mday, - ltime.tm_hour, ltime.tm_min, ltime.tm_sec); - -#else - GetLocalTime (&st); - sprintf(str, "D:%04d%02d%02d%02d%02d%02d", - st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); -#endif /* !WINCE */ -} - -/* -------------------------- Environment ------------------------------ */ - -char * -pdc_getenv(const char *name) -{ -#ifdef HAVE_ENVVARS - return getenv(name); -#else - (void) name; - - return (char *) 0; -#endif -} - - -/* -------------------------- Bit arryas ------------------------------ */ - -void -pdc_setbit(char *bitarr, int bit) -{ - bitarr[bit/8] |= (char) (1<<(bit%8)); -} - -pdc_bool -pdc_getbit(char *bitarr, int bit) -{ - return (pdc_bool) (bitarr[bit/8] & (1<<(bit%8))); -} - -void -pdc_setbit_text(char *bitarr, const pdc_byte *text, int len, - int nbits, int size) -{ - int i, bit; - pdc_ushort *ustext = (pdc_ushort *) text; - - for (i = 0; i < len; i += size) - { - if (size == sizeof(pdc_byte)) - bit = (int) text[i]; - else - bit = ustext[i/size]; - if (bit < nbits) pdc_setbit(bitarr, bit); - } -} - - -/* ---------- Get functions of integer binary data types --------------- */ - -pdc_short -pdc_get_le_short(pdc_byte *data) -{ - return (pdc_short) ((pdc_short) (data[1] << 8) | data[0]); -} - -pdc_ushort -pdc_get_le_ushort(pdc_byte *data) -{ - return (pdc_ushort) ((data[1] << 8) | data[0]); -} - -pdc_ulong -pdc_get_le_ulong3(pdc_byte *data) -{ - return (pdc_ulong) (((((data[2]) << 8) | data[1]) << 8) | data[0]); -} - -pdc_long -pdc_get_le_long(pdc_byte *data) -{ - return ((pdc_long) - (((((data[3] << 8) | data[2]) << 8) | data[1]) << 8) | data[0]); -} - -pdc_ulong -pdc_get_le_ulong(pdc_byte *data) -{ - return (pdc_ulong) - ((((((data[3] << 8) | data[2]) << 8) | data[1]) << 8) | data[0]); -} - -pdc_short -pdc_get_be_short(pdc_byte *data) -{ - return (pdc_short) ((pdc_short) (data[0] << 8) | data[1]); -} - -pdc_ushort -pdc_get_be_ushort(pdc_byte *data) -{ - return (pdc_ushort) ((data[0] << 8) | data[1]); -} - -pdc_ulong -pdc_get_be_ulong3(pdc_byte *data) -{ - return (pdc_ulong) (((((data[0]) << 8) | data[1]) << 8) | data[2]); -} - -pdc_long -pdc_get_be_long(pdc_byte *data) -{ - return ((pdc_long) - (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3]); -} - -pdc_ulong -pdc_get_be_ulong(pdc_byte *data) -{ - return (pdc_ulong) - ((((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3]); -} - - -/* ----------------- String handling for Unicode too ------------------- */ - -/* strlen() for unicode strings, which are terminated by two zero bytes. - * wstrlen() returns the number of bytes in the Unicode string, - * not including the two terminating null bytes. - */ -static size_t -wstrlen(const char *s) -{ - size_t len; - - for(len = 0; - (pdc_byte) (s[len++]) != 0 || - (pdc_byte) (s[len++]) != 0; /* */ ) { - /* */ - } - - return len-2; -} - -/* - * This function returns the length in bytes for C and Unicode strings. - * Note that unlike strlen() it returns the length _including_ the - * terminator, which may be one or two null bytes. - */ -size_t -pdc_strlen(const char *text) -{ - if (pdc_is_unicode(text)) - return wstrlen(text) + 2; - else - return strlen(text) + 1; -} - - -/* Allocate a local buffer and copy the string including - * the terminating sentinel. If the string starts with the Unicode BOM - * it is considered a Unicode string, and must be terminated by - * two null bytes. Otherwise it is considered a plain C string and - * must be terminated by a single null byte. - * The caller is responsible for freeing the buffer. - */ -char * -pdc_strdup(pdc_core *pdc, const char *text) -{ - char *buf; - size_t len; - static const char fn[] = "pdc_strdup"; - - if (text == NULL) - pdc_error(pdc, PDC_E_INT_NULLARG, fn, 0, 0, 0); - - len = pdc_strlen(text); - buf = (char *) pdc_malloc(pdc, len, fn); - memcpy(buf, text, len); - - return buf; -} - -/* Put out a 2 byte string for printing on the screen by replacing - * characters < 0x20 by space. The string will be limited to 40 byte. - */ - -#define PDC_STRPRINTLEN 80 -const char * -pdc_strprint(pdc_core *pdc, const char *str, int len) -{ - pdc_byte c, tmpstr[PDC_STRPRINTLEN + 4]; - int i = 0, maxi; - - if (str) - { - if (!len) - len = (int) strlen(str); - maxi = (len > PDC_STRPRINTLEN) ? PDC_STRPRINTLEN : len; - for (i = 0; i < maxi; i++) - { - c = (pdc_byte) str[i]; - tmpstr[i] = (c < 0x20) ? (pdc_byte) ' ' : c; - } - } - tmpstr[i] = 0; - if (len > PDC_STRPRINTLEN) - strcat((char *) tmpstr, "..."); - - return pdc_errprintf(pdc, "%s", tmpstr); -} - -/* - * Split a given text string into single strings which are separated by - * arbitrary characters. This characters must be specified in a string. - * If this string is NULL, " \f\n\r\t\v" (standard white spaces) is assumed. - * - * There is the convention that text inside braces {} will be taken verbatim. - * Inside brace expressions braces must exist only in pairs. Braces are - * masked by backslash. - * - * The caller is responsible for freeing the resultated string list - * by calling the function pdc_cleanup_stringlist. - * - * Not for unicode strings. - * - * Return value: Number of strings. - * If braces aren't balanced the number is negative. - * - */ - -int -pdc_split_stringlist(pdc_core *pdc, const char *text, const char *i_separstr, - char ***stringlist) -{ - static const char fn[] = "pdc_split_stringlist"; - const char *separstr = " \f\n\r\t\v"; - const char *oldtext; - char **strlist = NULL, *newtext; - int i, it, len, jt = 0, jtb = 0, maxk = 0, count = 0, inside = 0; - - if (text == NULL) - pdc_error(pdc, PDC_E_INT_NULLARG, fn, 0, 0, 0); - - if (stringlist) - *stringlist = NULL; - if (i_separstr) - separstr = i_separstr; - - /* check for empty string */ - i = (int) strspn(text, separstr); - oldtext = &text[i]; - len = (int) strlen(oldtext); - if (!len) return 0; - - newtext = (char *) pdc_malloc(pdc, (size_t) (len + 1), fn); - for (it = 0; it <= len; it++) - { - /* check for separators */ - if (it == len) - i = 1; - else if (inside <= 0) - i = (int) strspn(&oldtext[it], separstr); - else - i = 0; - - /* close text part */ - if (i) - { - newtext[jt] = 0; - if (count == maxk) - { - maxk += 16; - strlist = (strlist == NULL) ? - (char **) pdc_malloc(pdc, maxk * sizeof(char *), fn): - (char **) pdc_realloc(pdc, strlist, maxk * - sizeof(char *), fn); - } - strlist[count] = &newtext[jtb]; - count++; - - /* Exit */ - it += i; - if (it >= len ) break; - - /* new text part */ - jt++; - jtb = jt; - } - - /* open and close brace */ - if (oldtext[it] == '{') - { - inside++; - if (inside == 1) - continue; - } - else if (oldtext[it] == '}') - { - inside--; - if (inside == 0) - continue; - } - - /* masked braces */ - if (oldtext[it] == '\\' && - (oldtext[it+1] == '{' || oldtext[it+1] == '}')) - it++; - - /* save character */ - newtext[jt] = oldtext[it]; - jt++; - } - - if (stringlist) - *stringlist = strlist; - return inside ? -count : count; -} - -void -pdc_cleanup_stringlist(pdc_core *pdc, char **stringlist) -{ - if(stringlist != NULL) - { - if(stringlist[0] != NULL) - pdc_free(pdc, stringlist[0]); - - pdc_free(pdc, stringlist); - } -} - - -/* - * Compares its arguments and returns an integer less than, - * equal to, or greater than zero, depending on whether s1 - * is lexicographically less than, equal to, or greater than s2. - * Null pointer values for s1 and s2 are treated the same as pointers - * to empty strings. - * - * Presupposition: basic character set - * - * Return value: < 0 s1 < s2; - * = 0 s1 == s2; - * > 0 s1 > s2; - * - */ -int -pdc_stricmp(const char *s1, const char *s2) -{ - char c1, c2; - - if (s1 == s2) return (0); - if (s1 == NULL) return (-1); - if (s2 == NULL) return (1); - - for (; *s1 != '\0' && *s2 != '\0'; s1++, s2++) - { - if ((c1 = *s1) == (c2 = *s2)) - continue; - - if (islower((int)c1)) c1 = (char) toupper((int)c1); - if (islower((int)c2)) c2 = (char) toupper((int)c2); - if (c1 != c2) - break; - } - return (*s1 - *s2); -} - - -/* - * Compares its arguments and returns an integer less than, - * equal to, or greater than zero, depending on whether s1 - * is lexicographically less than, equal to, or greater than s2. - * But only up to n characters compared (n less than or equal - * to zero yields equality).Null pointer values for s1 and s2 - * are treated the same as pointers to empty strings. - * - * Presupposition: basic character set - * - * Return value: < 0 s1 < s2; - * = 0 s1 == s2; - * > 0 s1 > s2; - * - */ -int -pdc_strincmp(const char *s1, const char *s2, int n) -{ - char c1, c2; - int i; - - if (s1 == s2) return (0); - if (s1 == NULL) return (-1); - if (s2 == NULL) return (1); - - for (i=0; i < n && *s1 != '\0' && *s2 != '\0'; i++, s1++, s2++) - { - if ((c1 = *s1) == (c2 = *s2)) - continue; - - if (islower((int)c1)) c1 = (char) toupper((int)c1); - if (islower((int)c2)) c2 = (char) toupper((int)c2); - if (c1 != c2) - break; - } - return ((i < n) ? (int)(*s1 - *s2) : 0); -} - -/* - * pdc_strtrim removes trailing white space characters from an input string. - * pdc_str2trim removes leading and trailing white space characters from an - * input string.. - */ -char * -pdc_strtrim(char *str) -{ - int i; - - for (i = (int) strlen(str) - 1; i >= 0; i--) - if (!isspace((unsigned char) str[i])) break; - str[i + 1] = '\0'; - - return str; -} - -char * -pdc_str2trim(char *str) -{ - int i; - - for (i = (int) strlen(str) - 1; i >= 0; i--) - if (!isspace((unsigned char) str[i])) break; - str[i + 1] = '\0'; - - for (i = 0; ; i++) - if (!isspace((unsigned char) str[i])) break; - if (i > 0) - memmove(str, &str[i], strlen(&str[i]) + 1); - - return str; -} - -void -pdc_swap_bytes(char *instring, int inlen, char *outstring) -{ - char c; - int i,j; - - if (instring == NULL) - return; - - if (outstring == NULL) - outstring = instring; - - inlen = 2 * inlen / 2; - for (i = 0; i < inlen; i++) - { - j = i; - i++; - c = instring[j]; - outstring[j] = instring[i]; - outstring[i] = c; - } -} - -/* - * Converts a null terminated and trimed string to a double number - */ -pdc_bool -pdc_str2double(const char *string, double *o_dz) -{ - const char *s = string; - double dz = 0; - int is = 1, isd = 0; - - *o_dz = 0; - - /* sign */ - if (*s == '-') - { - is = -1; - s++; - } - else if (*s == '+') - s++; - - if (!*s) - return pdc_false; - - /* places before decimal point */ - isd = isdigit(*s); - if (isd) - { - do - { - dz = 10 * dz + *s - '0'; - s++; - } - while (isdigit(*s)); - } - - /* decimal point */ - if (*s == '.' || *s == ',') - { - const char *sa; - double adz = 0; - - s++; - isd = isdigit(*s); - if (!isd) - return pdc_false; - - /* places after decimal point */ - sa = s; - do - { - adz = 10 * adz + *s - '0'; - s++; - } - while (isdigit(*s)); - dz += adz / pow(10.0, (double)(s - sa)); - } - - /* power sign */ - if (*s == 'e' || *s == 'E') - { - s++; - if (!isd) - return pdc_false; - - /* sign */ - if (!*s) - { - dz *= 10; - } - else - { - int isp = 1; - double pdz = 0, pdl = log10(dz); - - if (*s == '-') - { - isp = -1; - s++; - } - else if (*s == '+') - s++; - - if (!isdigit(*s)) - return pdc_false; - do - { - pdz = 10 * pdz + *s - '0'; - s++; - } - while (isdigit(*s)); - - - if (*s || fabs(pdl + pdz) > 300.0) - return pdc_false; - - dz *= pow(10.0, isp * pdz); - } - } - else if(*s) - { - return pdc_false; - } - - *o_dz = is * dz; - return pdc_true; -} - -pdc_bool -pdc_str2integer(const char *string, int *o_iz) -{ - double dz; - - if (pdc_str2double(string, &dz) == pdc_true && fabs(dz) <= INT_MAX) - { - *o_iz = (int) dz; - if ((double) *o_iz == dz) - return pdc_true; - } - - *o_iz = 0; - return pdc_false; -} - -/* --------------------------- math --------------------------- */ - -float -pdc_min(float a, float b) -{ - return (a < b ? a : b); -} - -float -pdc_max(float a, float b) -{ - return (a > b ? a : b); -} diff --git a/src/libs/pdflib/libs/pdcore/pc_util.h b/src/libs/pdflib/libs/pdcore/pc_util.h deleted file mode 100644 index 7ca575cdcf..0000000000 --- a/src/libs/pdflib/libs/pdcore/pc_util.h +++ /dev/null @@ -1,83 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pc_util.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Various utility routines - * - */ - -#ifndef PC_UTIL_H -#define PC_UTIL_H - -#include -#include -#include -#include -#include -#include -#include - -#include "pc_config.h" -#include "pc_core.h" -#include "pc_ebcdic.h" -#include "pc_encoding.h" -#include "pc_output.h" -#include "pc_unicode.h" - -#define PDC_GET_SHORT pdc_get_le_short -#define PDC_GET_USHORT pdc_get_le_ushort -#define PDC_GET_WORD pdc_get_le_ushort -#define PDC_GET_DWORD pdc_get_le_ulong -#define PDC_GET_DWORD3 pdc_get_le_ulong3 -#define PDC_GET_LONG pdc_get_le_long -#define PDC_GET_ULONG pdc_get_le_ulong - -#define PDC_TIME_SBUF_SIZE 50 -void pdc_get_timestr(char *str); - -void pdc_setbit(char *bitarr, int bit); -pdc_bool pdc_getbit(char *bitarr, int bit); -void pdc_setbit_text(char *bitarr, const unsigned char *text, - int len, int nbits, int size); - -pdc_short pdc_get_le_short(pdc_byte *data); -pdc_ushort pdc_get_le_ushort(pdc_byte *data); -pdc_long pdc_get_le_long(pdc_byte *data); -pdc_ulong pdc_get_le_ulong3(pdc_byte *data); -pdc_ulong pdc_get_le_ulong(pdc_byte *data); -pdc_short pdc_get_be_short(pdc_byte *data); -pdc_ushort pdc_get_be_ushort(pdc_byte *data); -pdc_long pdc_get_be_long(pdc_byte *data); -pdc_ulong pdc_get_be_ulong3(pdc_byte *data); -pdc_ulong pdc_get_be_ulong(pdc_byte *data); - -size_t pdc_strlen(const char *text); -char *pdc_getenv(const char *name); -char *pdc_strdup(pdc_core *pdc, const char *text); -const char *pdc_strprint(pdc_core *pdc, const char *str, int len); -int pdc_split_stringlist(pdc_core *pdc, const char *text, - const char *i_separstr, char ***stringlist); -void pdc_cleanup_stringlist(pdc_core *pdc, char **stringlist); -int pdc_stricmp(const char *s1, const char *s2); -int pdc_strincmp(const char *s1, const char *s2, int n); -char *pdc_strtrim(char *m_str); -char *pdc_str2trim(char *m_str); -void pdc_swap_bytes(char *instring, int inlen, char *outstring); -pdc_bool pdc_str2double(const char *string, double *o_dz); -pdc_bool pdc_str2integer(const char *string, int *o_iz); - - -float pdc_min(float a, float b); -float pdc_max(float a, float b); - -#endif /* PC_UTIL_H */ diff --git a/src/libs/pdflib/libs/pdcore/pdcore.dsp b/src/libs/pdflib/libs/pdcore/pdcore.dsp deleted file mode 100644 index e23d1e8e4d..0000000000 --- a/src/libs/pdflib/libs/pdcore/pdcore.dsp +++ /dev/null @@ -1,352 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdcore" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=pdcore - Win32 Debug DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdcore.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdcore.mak" CFG="pdcore - Win32 Debug DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdcore - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Release PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Release mtDLL PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Debug PSP" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Release DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Debug PSP DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Debug DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdcore - Win32 Release PSP DLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdcore - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "..\pdflib" /I "..\flate" /I "..\tiff" /I "..\png" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Release PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_PSP" -# PROP BASE Intermediate_Dir "Release_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_PSP" -# PROP Intermediate_Dir "Release_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Release mtDLL PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL_PSP" -# PROP BASE Intermediate_Dir "Release_mtDLL_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL_PSP" -# PROP Intermediate_Dir "Release_mtDLL_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Debug PSP" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_PSP" -# PROP BASE Intermediate_Dir "Debug_PSP" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_PSP" -# PROP Intermediate_Dir "Debug_PSP" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdcore.lib" -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdcore.lib" -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Debug PSP DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_PSP_DLL" -# PROP BASE Intermediate_Dir "Debug_PSP_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_PSP_DLL" -# PROP Intermediate_Dir "Debug_PSP_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /FR /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdcore.lib" -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdcore.lib" -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ELSEIF "$(CFG)" == "pdcore - Win32 Release PSP DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_PSP_DLL" -# PROP BASE Intermediate_Dir "Release_PSP_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_PSP_DLL" -# PROP Intermediate_Dir "Release_PSP_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdi" /I "../flate" /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdcore.lib" -# ADD LIB32 /nologo /out:"pdcore.lib" - -!ENDIF - -# Begin Target - -# Name "pdcore - Win32 Release" -# Name "pdcore - Win32 Debug" -# Name "pdcore - Win32 Release mtDLL" -# Name "pdcore - Win32 Release PSP" -# Name "pdcore - Win32 Release mtDLL PSP" -# Name "pdcore - Win32 Debug PSP" -# Name "pdcore - Win32 Release DLL" -# Name "pdcore - Win32 Debug PSP DLL" -# Name "pdcore - Win32 Debug DLL" -# Name "pdcore - Win32 Release PSP DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pc_arc4.c -# End Source File -# Begin Source File - -SOURCE=.\pc_core.c -# End Source File -# Begin Source File - -SOURCE=.\pc_corefont.c -# End Source File -# Begin Source File - -SOURCE=.\pc_crypt.c -# End Source File -# Begin Source File - -SOURCE=.\pc_ebcdic.c -# End Source File -# Begin Source File - -SOURCE=.\pc_encoding.c -# End Source File -# Begin Source File - -SOURCE=.\pc_file.c -# End Source File -# Begin Source File - -SOURCE=.\pc_font.c -# End Source File -# Begin Source File - -SOURCE=.\pc_geom.c -# End Source File -# Begin Source File - -SOURCE=.\pc_md5.c -# End Source File -# Begin Source File - -SOURCE=.\pc_optparse.c -# End Source File -# Begin Source File - -SOURCE=.\pc_output.c -# End Source File -# Begin Source File - -SOURCE=.\pc_sbuf.c -# End Source File -# Begin Source File - -SOURCE=.\pc_scope.c -# End Source File -# Begin Source File - -SOURCE=.\pc_unicode.c -# End Source File -# Begin Source File - -SOURCE=.\pc_util.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/Jamfile b/src/libs/pdflib/libs/pdflib/Jamfile deleted file mode 100644 index dd78cfc9f1..0000000000 --- a/src/libs/pdflib/libs/pdflib/Jamfile +++ /dev/null @@ -1,52 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs pdflib ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs pdcore ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs flate ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs png ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs tiff ] ; - -SubDirCcFlags -w ; - -UseLibraryHeaders pdflib ; - -StaticLibrary libpdf.a : - p_afm.c - p_annots.c - p_basic.c - p_block.c - p_bmp.c - p_ccitt.c - p_cid.c - p_color.c - p_draw.c - p_encoding.c - p_filter.c - p_font.c - p_gif.c - p_gstate.c - p_hostfont.c - p_hyper.c - p_icc.c - p_icclib.c - p_image.c - p_jpeg.c - p_kerning.c - p_params.c - p_pattern.c - p_pdi.c - p_pfm.c - p_png.c - p_resource.c - p_shading.c - p_subsett.c - p_template.c - p_text.c - p_tiff.c - p_truetype.c - p_type1.c - p_type3.c - p_xgstate.c -; - diff --git a/src/libs/pdflib/libs/pdflib/Makefile b/src/libs/pdflib/libs/pdflib/Makefile deleted file mode 100644 index 9d865e4c30..0000000000 --- a/src/libs/pdflib/libs/pdflib/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -# Makefile for PDFlib -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -include ../../config/mkcommon.inc - -INCLUDES = $(PDFLIBINC) $(PDCORELIBINC) $(TIFFLIBINC) $(FLATELIBINC)\ - $(PNGLIBINC) $(PDILIBINC) - -LIBNAME = $(PDFLIB_LINK) - -SRC = \ - $(srcdir)/p_afm.c \ - $(srcdir)/p_annots.c \ - $(srcdir)/p_block.c \ - $(srcdir)/p_bmp.c \ - $(srcdir)/p_ccitt.c \ - $(srcdir)/p_cid.c \ - $(srcdir)/p_color.c \ - $(srcdir)/p_draw.c \ - $(srcdir)/p_encoding.c \ - $(srcdir)/p_filter.c \ - $(srcdir)/p_font.c \ - $(srcdir)/p_gif.c \ - $(srcdir)/p_gstate.c \ - $(srcdir)/p_hostfont.c \ - $(srcdir)/p_hyper.c \ - $(srcdir)/p_icc.c \ - $(srcdir)/p_icclib.c \ - $(srcdir)/p_image.c \ - $(srcdir)/p_jpeg.c \ - $(srcdir)/p_kerning.c \ - $(srcdir)/p_params.c \ - $(srcdir)/p_pattern.c \ - $(srcdir)/p_pdi.c \ - $(srcdir)/p_pfm.c \ - $(srcdir)/p_png.c \ - $(srcdir)/p_resource.c \ - $(srcdir)/p_shading.c \ - $(srcdir)/p_subsett.c \ - $(srcdir)/p_template.c \ - $(srcdir)/p_text.c \ - $(srcdir)/p_tiff.c \ - $(srcdir)/p_truetype.c \ - $(srcdir)/p_type1.c \ - $(srcdir)/p_type3.c \ - $(srcdir)/p_xgstate.c - -OBJS = \ - $(srcdir)/p_afm$(LO) \ - $(srcdir)/p_annots$(LO) \ - $(srcdir)/p_block$(LO) \ - $(srcdir)/p_bmp$(LO) \ - $(srcdir)/p_ccitt$(LO) \ - $(srcdir)/p_cid$(LO) \ - $(srcdir)/p_color$(LO) \ - $(srcdir)/p_draw$(LO) \ - $(srcdir)/p_encoding$(LO)\ - $(srcdir)/p_filter$(LO) \ - $(srcdir)/p_font$(LO) \ - $(srcdir)/p_gif$(LO) \ - $(srcdir)/p_gstate$(LO) \ - $(srcdir)/p_hostfont$(LO)\ - $(srcdir)/p_hyper$(LO) \ - $(srcdir)/p_icc$(LO) \ - $(srcdir)/p_icclib$(LO) \ - $(srcdir)/p_image$(LO) \ - $(srcdir)/p_jpeg$(LO) \ - $(srcdir)/p_kerning$(LO) \ - $(srcdir)/p_params$(LO) \ - $(srcdir)/p_pattern$(LO) \ - $(srcdir)/p_pdi$(LO) \ - $(srcdir)/p_pfm$(LO) \ - $(srcdir)/p_png$(LO) \ - $(srcdir)/p_resource$(LO)\ - $(srcdir)/p_shading$(LO) \ - $(srcdir)/p_subsett$(LO) \ - $(srcdir)/p_template$(LO)\ - $(srcdir)/p_text$(LO) \ - $(srcdir)/p_tiff$(LO) \ - $(srcdir)/p_truetype$(LO)\ - $(srcdir)/p_type1$(LO) \ - $(srcdir)/p_type3$(LO) \ - $(srcdir)/p_xgstate$(LO) - -include ../../config/mklibs.inc - -MAINLIBNAME = lib$(PDFLIBNAME)$(LA) - -MAINSRC = $(srcdir)/p_basic.c -MAINOBJ = $(srcdir)/p_basic$(LO) -MAININC = pdflib.h - -INTERNALLIBS = $(PDCORELIBLINK) $(PNGLIBLINK) $(FLATELIBLINK) $(TIFFLIBLINK)\ - $(PDILIBLINK) $(JPEGLIBLINK) $(PDFLIB_LINK) - -include ../../config/mkmainlib.inc - -# Automatically generated dependencies diff --git a/src/libs/pdflib/libs/pdflib/PDFlib.bpf b/src/libs/pdflib/libs/pdflib/PDFlib.bpf deleted file mode 100644 index 38151c89cf..0000000000 --- a/src/libs/pdflib/libs/pdflib/PDFlib.bpf +++ /dev/null @@ -1,120 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop -//--------------------------------------------------------------------------- -USEUNIT("p_xgstate.c"); -USEUNIT("p_afm.c"); -USEUNIT("p_annots.c"); -USEUNIT("p_basic.c"); -USEUNIT("p_block.c"); -USEUNIT("p_bmp.c"); -USEUNIT("p_ccitt.c"); -USEUNIT("p_cid.c"); -USEUNIT("p_color.c"); -USEUNIT("p_draw.c"); -USEUNIT("p_encoding.c"); -USEUNIT("p_filter.c"); -USEUNIT("p_font.c"); -USEUNIT("p_gif.c"); -USEUNIT("p_gstate.c"); -USEUNIT("p_hostfont.c"); -USEUNIT("p_hyper.c"); -USEUNIT("p_icc.c"); -USEUNIT("p_icclib.c"); -USEUNIT("p_image.c"); -USEUNIT("p_jpeg.c"); -USEUNIT("p_kerning.c"); -USEUNIT("p_params.c"); -USEUNIT("p_pattern.c"); -USEUNIT("p_pdi.c"); -USEUNIT("p_pfm.c"); -USEUNIT("p_png.c"); -USEUNIT("p_resource.c"); -USEUNIT("p_shading.c"); -USEUNIT("p_subsett.c"); -USEUNIT("p_template.c"); -USEUNIT("p_text.c"); -USEUNIT("p_tiff.c"); -USEUNIT("p_truetype.c"); -USEUNIT("p_type1.c"); -USEUNIT("p_type3.c"); -USEUNIT("..\flate\zutil.c"); -USEUNIT("..\flate\adler32.c"); -USEUNIT("..\flate\compress.c"); -USEUNIT("..\flate\crc32.c"); -USEUNIT("..\flate\deflate.c"); -USEUNIT("..\flate\infblock.c"); -USEUNIT("..\flate\infcodes.c"); -USEUNIT("..\flate\inffast.c"); -USEUNIT("..\flate\inflate.c"); -USEUNIT("..\flate\inftrees.c"); -USEUNIT("..\flate\infutil.c"); -USEUNIT("..\flate\trees.c"); -USEUNIT("..\flate\uncompr.c"); -USEUNIT("..\pdcore\pc_util.c"); -USEUNIT("..\pdcore\pc_arc4.c"); -USEUNIT("..\pdcore\pc_core.c"); -USEUNIT("..\pdcore\pc_corefont.c"); -USEUNIT("..\pdcore\pc_crypt.c"); -USEUNIT("..\pdcore\pc_ebcdic.c"); -USEUNIT("..\pdcore\pc_encoding.c"); -USEUNIT("..\pdcore\pc_file.c"); -USEUNIT("..\pdcore\pc_font.c"); -USEUNIT("..\pdcore\pc_geom.c"); -USEUNIT("..\pdcore\pc_md5.c"); -USEUNIT("..\pdcore\pc_optparse.c"); -USEUNIT("..\pdcore\pc_output.c"); -USEUNIT("..\pdcore\pc_sbuf.c"); -USEUNIT("..\pdcore\pc_scope.c"); -USEUNIT("..\pdcore\pc_unicode.c"); -USEUNIT("..\png\pngvcrd.c"); -USEUNIT("..\png\png.c"); -USEUNIT("..\png\pngerror.c"); -USEUNIT("..\png\pngget.c"); -USEUNIT("..\png\pngmem.c"); -USEUNIT("..\png\pngread.c"); -USEUNIT("..\png\pngrio.c"); -USEUNIT("..\png\pngrtran.c"); -USEUNIT("..\png\pngrutil.c"); -USEUNIT("..\png\pngset.c"); -USEUNIT("..\png\pngtrans.c"); -USEUNIT("..\tiff\tif_zip.c"); -USEUNIT("..\tiff\tif_auxx.c"); -USEUNIT("..\tiff\tif_close.c"); -USEUNIT("..\tiff\tif_codec.c"); -USEUNIT("..\tiff\tif_compress.c"); -USEUNIT("..\tiff\tif_dir.c"); -USEUNIT("..\tiff\tif_dirinfo.c"); -USEUNIT("..\tiff\tif_dirread.c"); -USEUNIT("..\tiff\tif_dirwrite.c"); -USEUNIT("..\tiff\tif_dumpmode.c"); -USEUNIT("..\tiff\tif_error.c"); -USEUNIT("..\tiff\tif_fax3.c"); -USEUNIT("..\tiff\tif_fax3sm.c"); -USEUNIT("..\tiff\tif_flush.c"); -USEUNIT("..\tiff\tif_getimage.c"); -USEUNIT("..\tiff\tif_jpeg.c"); -USEUNIT("..\tiff\tif_luv.c"); -USEUNIT("..\tiff\tif_lzw.c"); -USEUNIT("..\tiff\tif_next.c"); -USEUNIT("..\tiff\tif_ojpeg.c"); -USEUNIT("..\tiff\tif_open.c"); -USEUNIT("..\tiff\tif_packbits.c"); -USEUNIT("..\tiff\tif_pixarlog.c"); -USEUNIT("..\tiff\tif_predict.c"); -USEUNIT("..\tiff\tif_print.c"); -USEUNIT("..\tiff\tif_read.c"); -USEUNIT("..\tiff\tif_strip.c"); -USEUNIT("..\tiff\tif_swab.c"); -USEUNIT("..\tiff\tif_thunder.c"); -USEUNIT("..\tiff\tif_tile.c"); -USEUNIT("..\tiff\tif_unix.c"); -USEUNIT("..\tiff\tif_version.c"); -USEUNIT("..\tiff\tif_warning.c"); -USEUNIT("..\tiff\tif_write.c"); -//--------------------------------------------------------------------------- -#define Library - -// Um eine Datei zur Bibliothek hinzuzufügen, wählen Sie im Projektmenü 'Zum Projekt hinzufügen'. - diff --git a/src/libs/pdflib/libs/pdflib/PDFlib.bpr b/src/libs/pdflib/libs/pdflib/PDFlib.bpr deleted file mode 100644 index 13edc931fd..0000000000 --- a/src/libs/pdflib/libs/pdflib/PDFlib.bpr +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1031 -CodePage=1252 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[HistoryLists\hlIncludePath] -Count=6 -Item0=..\pdcore;$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png;..\pdi -Item1=..\pdcore;$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png;pdi -Item2=..\pdcore;$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png;.\pdi -Item3=..\pdcore;$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png -Item4=..\pdcore;$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png;..\pdcore -Item5=$(BCB)\include;$(BCB)\include\vcl;..\tiff;..\flate;..\png - -[HistoryLists\hlLibraryPath] -Count=4 -Item0=..\tiff;..\png;..\pdcore;..\flate;$(BCB)\lib\obj;$(BCB)\lib -Item1=$(BCB)\lib\obj;$(BCB)\lib -Item2=..\pdcore;..\flate;..\png;..\tiff;$(BCB)\lib\obj;$(BCB)\lib -Item3=..\tiff;$(BCB)\lib\obj;$(BCB)\lib - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=$(BCB)\source\vcl - -[HistoryLists\hlConditionals] -Count=1 -Item0=WIN32;_WINDOWS;_MBCS;_MT - -[HistoryLists\hlIntOutputDir] -Count=2 -Item0=Release_BCC -Item1=Release - -[HistoryLists\hlFinalOutputDir] -Count=3 -Item0=Release_BCC\ -Item1=Release_BCC -Item2=.\ - -[HistoryLists\hIBPIOutputDir] -Count=3 -Item0=D:\cvs\pdflib-x\libs\pdflib\Release_BCC\ -Item1=Release_BCC -Item2=. - -[HistoryLists\hlTlibPageSize] -Count=2 -Item0=32 -Item1=0x0010 - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= -RemoteHost= -RemotePath= -RemoteDebug=0 - -[Compiler] -ShowInfoMsgs=0 -LinkDebugVcl=0 - - \ No newline at end of file diff --git a/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpf b/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpf deleted file mode 100644 index 37c5e8bc00..0000000000 --- a/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpf +++ /dev/null @@ -1,114 +0,0 @@ -USEUNIT("p_xgstate.c"); -USEUNIT("p_afm.c"); -USEUNIT("p_annots.c"); -USEUNIT("p_basic.c"); -USEUNIT("p_block.c"); -USEUNIT("p_bmp.c"); -USEUNIT("p_ccitt.c"); -USEUNIT("p_cid.c"); -USEUNIT("p_color.c"); -USEUNIT("p_draw.c"); -USEUNIT("p_encoding.c"); -USEUNIT("p_filter.c"); -USEUNIT("p_font.c"); -USEUNIT("p_gif.c"); -USEUNIT("p_gstate.c"); -USEUNIT("p_hostfont.c"); -USEUNIT("p_hyper.c"); -USEUNIT("p_icc.c"); -USEUNIT("p_icclib.c"); -USEUNIT("p_image.c"); -USEUNIT("p_jpeg.c"); -USEUNIT("p_kerning.c"); -USEUNIT("p_params.c"); -USEUNIT("p_pattern.c"); -USEUNIT("p_pdi.c"); -USEUNIT("p_pfm.c"); -USEUNIT("p_png.c"); -USEUNIT("p_resource.c"); -USEUNIT("p_shading.c"); -USEUNIT("p_subsett.c"); -USEUNIT("p_template.c"); -USEUNIT("p_text.c"); -USEUNIT("p_tiff.c"); -USEUNIT("p_truetype.c"); -USEUNIT("p_type1.c"); -USEUNIT("p_type3.c"); -USEUNIT("..\flate\zutil.c"); -USEUNIT("..\flate\adler32.c"); -USEUNIT("..\flate\compress.c"); -USEUNIT("..\flate\crc32.c"); -USEUNIT("..\flate\deflate.c"); -USEUNIT("..\flate\infblock.c"); -USEUNIT("..\flate\infcodes.c"); -USEUNIT("..\flate\inffast.c"); -USEUNIT("..\flate\inflate.c"); -USEUNIT("..\flate\inftrees.c"); -USEUNIT("..\flate\infutil.c"); -USEUNIT("..\flate\trees.c"); -USEUNIT("..\flate\uncompr.c"); -USEUNIT("..\pdcore\pc_util.c"); -USEUNIT("..\pdcore\pc_arc4.c"); -USEUNIT("..\pdcore\pc_core.c"); -USEUNIT("..\pdcore\pc_corefont.c"); -USEUNIT("..\pdcore\pc_crypt.c"); -USEUNIT("..\pdcore\pc_ebcdic.c"); -USEUNIT("..\pdcore\pc_encoding.c"); -USEUNIT("..\pdcore\pc_file.c"); -USEUNIT("..\pdcore\pc_font.c"); -USEUNIT("..\pdcore\pc_geom.c"); -USEUNIT("..\pdcore\pc_md5.c"); -USEUNIT("..\pdcore\pc_optparse.c"); -USEUNIT("..\pdcore\pc_output.c"); -USEUNIT("..\pdcore\pc_sbuf.c"); -USEUNIT("..\pdcore\pc_scope.c"); -USEUNIT("..\pdcore\pc_unicode.c"); -USEUNIT("..\png\pngvcrd.c"); -USEUNIT("..\png\png.c"); -USEUNIT("..\png\pngerror.c"); -USEUNIT("..\png\pngget.c"); -USEUNIT("..\png\pngmem.c"); -USEUNIT("..\png\pngread.c"); -USEUNIT("..\png\pngrio.c"); -USEUNIT("..\png\pngrtran.c"); -USEUNIT("..\png\pngrutil.c"); -USEUNIT("..\png\pngset.c"); -USEUNIT("..\png\pngtrans.c"); -USEUNIT("..\tiff\tif_zip.c"); -USEUNIT("..\tiff\tif_auxx.c"); -USEUNIT("..\tiff\tif_close.c"); -USEUNIT("..\tiff\tif_codec.c"); -USEUNIT("..\tiff\tif_compress.c"); -USEUNIT("..\tiff\tif_dir.c"); -USEUNIT("..\tiff\tif_dirinfo.c"); -USEUNIT("..\tiff\tif_dirread.c"); -USEUNIT("..\tiff\tif_dirwrite.c"); -USEUNIT("..\tiff\tif_dumpmode.c"); -USEUNIT("..\tiff\tif_error.c"); -USEUNIT("..\tiff\tif_fax3.c"); -USEUNIT("..\tiff\tif_fax3sm.c"); -USEUNIT("..\tiff\tif_flush.c"); -USEUNIT("..\tiff\tif_getimage.c"); -USEUNIT("..\tiff\tif_jpeg.c"); -USEUNIT("..\tiff\tif_luv.c"); -USEUNIT("..\tiff\tif_lzw.c"); -USEUNIT("..\tiff\tif_next.c"); -USEUNIT("..\tiff\tif_ojpeg.c"); -USEUNIT("..\tiff\tif_open.c"); -USEUNIT("..\tiff\tif_packbits.c"); -USEUNIT("..\tiff\tif_pixarlog.c"); -USEUNIT("..\tiff\tif_predict.c"); -USEUNIT("..\tiff\tif_print.c"); -USEUNIT("..\tiff\tif_read.c"); -USEUNIT("..\tiff\tif_strip.c"); -USEUNIT("..\tiff\tif_swab.c"); -USEUNIT("..\tiff\tif_thunder.c"); -USEUNIT("..\tiff\tif_tile.c"); -USEUNIT("..\tiff\tif_unix.c"); -USEUNIT("..\tiff\tif_version.c"); -USEUNIT("..\tiff\tif_warning.c"); -USEUNIT("..\tiff\tif_write.c"); -//--------------------------------------------------------------------------- -Diese Datei wird nur vom Projekt-Manager verwendet und sollte wie die Projektdatei behandelt werden - -DllMain diff --git a/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpr b/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpr deleted file mode 100644 index 604c54968f..0000000000 --- a/src/libs/pdflib/libs/pdflib/PDFlib_dll.bpr +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=5 -MinorVer=0 -Release=3 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=3 -Locale=1033 -CodePage=1252 - -[Version Info Keys] -CompanyName=PDFlib GmbH. -FileDescription=www.pdflib.com -FileVersion=5.0.3.3 -InternalName= -LegalCopyright=(c) 1997-2000 Thomas Merz -LegalTrademarks= -OriginalFilename=pdflib.dll -ProductName=PDFlib for Windows -ProductVersion=5.0.3 -Comments= - -[HistoryLists\hlIncludePath] -Count=2 -Item0=$(BCB)\include;$(BCB)\include\vcl;..\png;..\flate;..\tiff;..\pdi;..\pdcore -Item1=$(BCB)\include;$(BCB)\include\vcl;..\png;..\flate;..\tiff - -[HistoryLists\hlLibraryPath] -Count=2 -Item0=..\tiff;..\png;..\pdcore;..\flate;$(BCB)\lib\obj;$(BCB)\lib -Item1=..\png;..\flate;..\tiff;$(BCB)\lib\obj;$(BCB)\lib - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=$(BCB)\source\vcl - -[HistoryLists\hlConditionals] -Count=1 -Item0=WIN32;_WINDOWS;_MBCS;_MT;PDFLIB_EXPORTS;NDEBUG;_LIB - -[HistoryLists\hlIntOutputDir] -Count=1 -Item0=Release_dll_BCC - -[HistoryLists\hlFinalOutputDir] -Count=1 -Item0=Release_dll_BCC\ - -[HistoryLists\hIBPIOutputDir] -Count=2 -Item0=Release_dll_BCC\ -Item1=F:\Tommy\pdflib-win-x\pdflib\Release_dll_BCC\ - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= -RemoteHost= -RemotePath= -RemoteDebug=0 - -[Compiler] -ShowInfoMsgs=0 -LinkDebugVcl=0 - - \ No newline at end of file diff --git a/src/libs/pdflib/libs/pdflib/PDFlib_dll.res b/src/libs/pdflib/libs/pdflib/PDFlib_dll.res deleted file mode 100644 index 8336b22a21a26e11c64bd67d3c296a397eab6cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmb7DO=}ZT6g_DMqgZV~S8fdAq6(H&3sM(W=`%CMj}}|1yOP=(t8rRlWYA6C;z0*0 zz^FGe~IQPzb08pbwQLLO6!@2 ztAC6VC8uT1CuxQIGt{fpC5@@x@RXLLAu|2W`7wIYWdL<*6kWtqJj4o~QJ1mGF_rwi zklRo~t>)NUA-AZ6=`xbLR-Jg4rppTqwTX3X@%sqRIa{$Awrsuz=OW*nUw5D^HCmT!ZCz{YlW)7g8hD8-w0T0jWl^c{fVD}7 zT6jZ#z$`i3U{&+%$Rh6I7H%_-JT+|4M))(wNu{2Aey_DfcAmy3Pbp-tO{Xy6k4*XX~`3?Iq1Td1=5Z{$CB$n^y)^l87( zp2uA3ICCn_$u4I-hV5K>CWN8SylGX+GTS8g&bX57lmXZ635~nr)2mI({8>2X{BZsP DD))du diff --git a/src/libs/pdflib/libs/pdflib/p_afm.c b/src/libs/pdflib/libs/pdflib/p_afm.c deleted file mode 100644 index 1c39fa6120..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_afm.c +++ /dev/null @@ -1,539 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_afm.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib AFM parsing routines - * - */ - -#include "p_intern.h" -#include "p_font.h" - -#define AFM_LINEBUF 4096 - -#define AFM_SEPARATORS "\f\n\r\t\v ,:;" - -#define AFM_MINNUMGLYPHS 5 - -/* The values of each of these enumerated items correspond to an entry in the - * table of strings defined below. Therefore, if you add a new string as - * new keyword into the keyStrings table, you must also add a corresponding - * pdf_afmkey AND it MUST be in the same position! - * - * IMPORTANT: since the sorting algorithm is a binary search, the strings of - * keywords must be placed in lexicographical order, below. [Therefore, the - * enumerated items are not necessarily in lexicographical order, depending - * on the name chosen. BUT, they must be placed in the same position as the - * corresponding key string.] The NOPE shall remain in the last position, - * since it does not correspond to any key string. - */ - -#ifndef PDFLIB_EBCDIC -typedef enum { - ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, CHARWIDTH, CHARACTERS, - CHARACTERSET, - COMMENT, DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES, - ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN, - FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH, - ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME, - NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES, - STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS, - STARTTRACKKERN, STDHW, STDVW, TRACKKERN, UNDERLINEPOSITION, - UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT, - NOPE -} pdf_afmkey; - -/* keywords for the system: - * This a table of all of the current strings that are vaild AFM keys. - * Each entry can be referenced by the appropriate pdf_afmkey value (an - * enumerated data type defined above). If you add a new keyword here, - * a corresponding pdf_afmkey MUST be added to the enumerated data type - * defined above, AND it MUST be added in the same position as the - * string is in this table. - * - * IMPORTANT: since the sorting algorithm is a binary search, the keywords - * must be placed in lexicographical order. And, NULL should remain at the - * end. - */ - -static const char *keyStrings[] = { - "Ascender", "B", "C", "CC", "CapHeight", "CharWidth", "Characters", - "CharacterSet", - "Comment", "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites", - "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern", - "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch", - "ItalicAngle", "KP", "KPX", "L", "N", - "Notice", "PCC", "StartCharMetrics", "StartComposites", - "StartFontMetrics", "StartKernData", "StartKernPairs", - "StartTrackKern", "StdHW", "StdVW", "TrackKern", "UnderlinePosition", - "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight" -}; - -#else /* !PDFLIB_EBCDIC */ -#endif /* PDFLIB_EBCDIC */ - -static pdc_bool -pdf_parse_afm( - PDF *p, - pdc_file *fp, - pdc_font *font, - const char *fontname, - const char *filename) -{ - static const char fn[] = "pdf_parse_afm"; - char **wordlist, *keyword, *arg1; - char line[AFM_LINEBUF]; - int i, cmp, lo, hi, nwords, nglyphs = 0, nline = 0; - int tablen = ((sizeof keyStrings) / (sizeof (char *))); - double dz; - pdf_afmkey keynumber; - pdc_glyphwidth *glw; - - (void) fontname; - - - /* read loop. because of Mac files we use pdc_fgets_comp */ - while (pdc_fgets_comp(line, AFM_LINEBUF, fp) != NULL) - { - /* split line */ - nline++; - nwords = pdc_split_stringlist(p->pdc, line, AFM_SEPARATORS, &wordlist); - if (!nwords) continue; - keyword = wordlist[0]; - - /* find keynumber */ - lo = 0; - hi = tablen; - keynumber = NOPE; - while (lo < hi) - { - i = (lo + hi) / 2; - cmp = strcmp(keyword, keyStrings[i]); - - if (cmp == 0) - { - keynumber = (pdf_afmkey) i; - break; - } - - if (cmp < 0) - hi = i; - else - lo = i + 1; - } - - /* unkown key */ - if (keynumber == NOPE) - { - if (font->verbose == pdc_true) - pdc_warning(p->pdc, PDF_E_T1_AFMBADKEY, keyword, filename, 0, 0); - - goto PDF_PARSECONTD; - } - if (nwords == 1) goto PDF_PARSECONTD; - - /* key switch */ - arg1 = wordlist[1]; - switch (keynumber) - { - case FONTNAME: - font->name = pdc_strdup(p->pdc, arg1); - break; - - /* Recognize Multiple Master fonts by last part of name */ - case FAMILYNAME: - if (!strcmp(wordlist[nwords-1], "MM")) - font->type = pdc_MMType1; - break; - - /* Default: FontSpecific */ - case ENCODINGSCHEME: - if (!pdc_stricmp(arg1, "StandardEncoding") || - !pdc_stricmp(arg1, "AdobeStandardEncoding")) - font->isstdlatin = pdc_true ; - break; - - case STDHW: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->StdHW = (int) dz; - break; - - case STDVW: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->StdVW = (int) dz; - break; - - /* If we don't know StdVW we guess it from the font weight */ - case WEIGHT: - if (font->StdVW == 0) - { - if (!pdc_stricmp(arg1, "Light")) - font->StdVW = PDF_STEMV_LIGHT; - else if (!pdc_stricmp(arg1, "Medium")) - font->StdVW = PDF_STEMV_MEDIUM; - else if (!pdc_stricmp(arg1, "Semi") || - !pdc_stricmp(arg1, "SemiBold")) - font->StdVW = PDF_STEMV_SEMIBOLD; - else if (!pdc_stricmp(arg1, "Bold")) - font->StdVW = PDF_STEMV_BOLD; - else if (!pdc_stricmp(arg1, "Extra") || - !pdc_stricmp(arg1, "ExtraBold")) - font->StdVW = PDF_STEMV_EXTRABOLD; - else if (!pdc_stricmp(arg1, "Black")) - font->StdVW = PDF_STEMV_BLACK; - else - font->StdVW = PDF_STEMV_NORMAL; - } - break; - - case ISFIXEDPITCH: - if (!pdc_stricmp(arg1, "false")) - font->isFixedPitch = pdc_false; - else - font->isFixedPitch = pdc_true; - break; - - /* New AFM 4.1 keyword "CharWidth" implies fixed pitch */ - case CHARWIDTH: - font->isFixedPitch = pdc_true; - break; - - case ITALICANGLE: - { - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->italicAngle = (float) dz; - } - break; - - case UNDERLINEPOSITION: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->underlinePosition = (int) dz; - break; - - case UNDERLINETHICKNESS: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->underlineThickness = (int) dz; - break; - - case FONTBBOX: - { - if (nwords != 5) - goto PDF_SYNTAXERROR; - for (i = 1; i < nwords; i++) - { - if (pdc_str2double(wordlist[i], &dz) != pdc_true) - goto PDF_SYNTAXERROR; - if (i == 1) - font->llx = (float) dz; - else if (i == 2) - font->lly = (float) dz; - else if (i == 3) - font->urx = (float) dz; - else if (i == 4) - font->ury = (float) dz; - } - } - break; - - case CAPHEIGHT: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->capHeight = (int) dz; - break; - - case XHEIGHT: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->xHeight = (int) dz; - break; - - case DESCENDER: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->descender = (int) dz; - break; - - case ASCENDER: - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - font->ascender = (int) dz; - break; - - /* Character widths */ - - case STARTCHARMETRICS: - if (pdc_str2integer(arg1, &nglyphs) != pdc_true || nglyphs <= 0) - goto PDF_SYNTAXERROR; - font->glw = (pdc_glyphwidth *) pdc_calloc(p->pdc, - (size_t) nglyphs * sizeof(pdc_glyphwidth), fn); - break; - - /* Character code */ - case CODE: - if (!nglyphs || !font->glw) - goto PDF_SYNTAXERROR; - if (font->numOfGlyphs >= nglyphs) - { - nglyphs++; - font->glw = (pdc_glyphwidth *) pdc_realloc(p->pdc, font->glw, - (size_t) nglyphs * sizeof(pdc_glyphwidth), fn); - } - glw = &font->glw[font->numOfGlyphs]; - if (pdc_str2double(arg1, &dz) != pdc_true) - goto PDF_SYNTAXERROR; - glw->code = (pdc_short) dz; - glw->unicode = 0; - glw->width = 0; - font->numOfGlyphs++; - - /* Character width and name */ - for (i = 2; i < nwords; i++) - { - if (!strcmp(wordlist[i], "W") || - !strcmp(wordlist[i], "WX")) - { - i++; - if (i == nwords) - goto PDF_SYNTAXERROR; - if (pdc_str2double(wordlist[i], &dz) != pdc_true) - goto PDF_SYNTAXERROR; - glw->width = (pdc_ushort) - (font->monospace ? font->monospace : dz); - } - if (!strcmp(wordlist[i], "N")) - { - i++; - if (i == nwords) - goto PDF_SYNTAXERROR; - glw->unicode = pdf_insert_glyphname(p, wordlist[i]); - } - } - break; - - - default: - break; - } - - PDF_PARSECONTD: - pdc_cleanup_stringlist(p->pdc, wordlist); - - if (keynumber == ENDFONTMETRICS) - break; - } - pdc_fclose(fp); - return pdc_true; - - PDF_SYNTAXERROR: - pdc_fclose(fp); - pdc_cleanup_stringlist(p->pdc, wordlist); - - pdc_set_errmsg(p->pdc, PDC_E_IO_ILLSYNTAX, "AFM ", filename, - pdc_errprintf(p->pdc, "%d", nline), 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; -} - -pdc_bool -pdf_process_metrics_data( - PDF *p, - pdc_font *font, - const char *fontname) -{ - static const char fn[] = "pdf_process_metrics_data"; - int *widths; - pdc_ushort uv; - pdc_glyphwidth *glw; - pdc_encoding enc = font->encoding; - pdc_encodingvector *ev = NULL; - int foundChars = 0, tofree = 0, i, j; - - /* Unallowed encoding */ - if (enc < pdc_builtin) { - - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, - fontname, pdf_get_encoding_name(p, enc), 0, 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* Determine the default character width (width of space character) */ - font->defWidth = font->monospace ? font->monospace : PDF_DEFAULT_WIDTH; - for (j = 0, glw = font->glw; j < font->numOfGlyphs; ++j, ++glw) - { - if (glw->unicode) - foundChars++; - if (glw->unicode == PDF_DEFAULT_GLYPH) - font->defWidth = (int) glw->width; - } - - /* No characters found and lex Symbolii */ - if (enc != pdc_builtin && (foundChars < AFM_MINNUMGLYPHS || - (!strcmp(fontname, "Symbol") && enc == pdc_winansi))) - { - if (font->isstdlatin == pdc_true) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, - fontname, pdf_get_encoding_name(p, enc), 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - else - { - /* We enforce builtin encoding */ - if (font->verbose) - pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, - pdf_get_encoding_name(p, pdc_builtin), - pdf_get_encoding_name(p, enc), fontname, 0); - enc = pdc_builtin; - font->encoding = enc; - } - } - - /* - * Generate character width according to the chosen encoding - */ - - { - font->widths = (int *) pdc_calloc(p->pdc, - font->numOfCodes * sizeof(int), fn); - widths = font->widths; - - /* Given encoding */ - if (enc >= 0 && enc < p->encodings_number) - { - ev = p->encodings[enc].ev; - for (i = 0; i < font->numOfCodes; i++) - { - uv = ev->codes[i]; - widths[i] = font->defWidth; - if (uv == 0x000) - continue; - for (j = 0, glw = font->glw; j < font->numOfGlyphs; ++j, ++glw) - { - if (glw->unicode == uv) - { - widths[i] = glw->width; - break; - } - } - } - } - else - { - /* temporary encoding */ - ev = (pdc_encodingvector *) - pdc_malloc(p->pdc, sizeof(pdc_encodingvector), fn); - pdc_init_encoding(p->pdc, ev, ""); - tofree = 1; - for (i = 0; i < font->numOfCodes; i++) - { - widths[i] = font->defWidth; - ev->codes[i] = PDF_DEFAULT_GLYPH; - } - for (i = 0, glw = font->glw; i < font->numOfGlyphs; i++, glw++) - { - if (glw->code >= 0 && glw->code < font->numOfCodes) - { - widths[glw->code] = glw->width; - ev->codes[glw->code] = glw->unicode; - } - } - } - } - - - if (tofree) pdc_cleanup_encoding(p->pdc, ev); - - if (font->glw != NULL) - { - pdc_free(p->pdc, font->glw); - font->glw = NULL; - } - - return pdc_true; -} - -pdc_bool -pdf_get_metrics_afm( - PDF *p, - pdc_font *font, - const char *fontname, - pdc_encoding enc, - const char *filename) -{ - pdc_file *afmfile; - - /* open AFM file */ - if ((afmfile = pdf_fopen(p, filename, "AFM ", 0)) == NULL) - { - if (font->verbose_open) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* parse AFM file */ - if (pdf_parse_afm(p, afmfile, font, fontname, filename) == pdc_false) - return pdc_false; - - /* process metric data */ - font->encoding = enc; - if (pdf_process_metrics_data(p, font, fontname) == pdc_false) - return pdc_false; - - if (!pdf_make_fontflag(p, font)) - return pdc_false; - - return pdc_true; -} - -pdc_bool -pdf_get_core_metrics_afm( - PDF *p, - pdc_font *font, - pdc_core_metric *metric, - const char *fontname, - const char *filename) -{ - pdc_file *afmfile; - - /* open AFM file */ - if ((afmfile = pdf_fopen(p, filename, "AFM ", 0)) == NULL) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - /* parse AFM file */ - if (pdf_parse_afm(p, afmfile, font, fontname, filename) == pdc_false) - return pdc_false; - - /* process metric data */ - font->encoding = pdc_invalidenc; - pdc_fill_core_metric(p->pdc, font, metric); - - return pdc_true; -} - diff --git a/src/libs/pdflib/libs/pdflib/p_annots.c b/src/libs/pdflib/libs/pdflib/p_annots.c deleted file mode 100644 index 9584f52230..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_annots.c +++ /dev/null @@ -1,1049 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_annots.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines for annnotations - * - */ - -#include "p_intern.h" - -/* Annotation types */ -typedef enum { - ann_text, ann_locallink, - ann_pdflink, ann_weblink, - ann_launchlink, ann_attach -} pdf_annot_type; - -/* icons for file attachments and text annotations */ -typedef enum { - icon_file_graph, icon_file_paperclip, - icon_file_pushpin, icon_file_tag, - - icon_text_comment, icon_text_insert, - icon_text_note, icon_text_paragraph, - icon_text_newparagraph, icon_text_key, - icon_text_help -} pdf_icon; - -/* Annotations */ -struct pdf_annot_s { - pdf_annot_type type; /* used for all annotation types */ - pdc_rectangle rect; /* used for all annotation types */ - pdc_id obj_id; /* used for all annotation types */ - pdf_annot *next; /* used for all annotation types */ - - pdf_icon icon; /* attach and text */ - char *filename; /* attach, launchlink, pdflink,weblink*/ - char *contents; /* text, attach, pdflink */ - char *mimetype; /* attach */ - char *parameters; /* launchlink */ - char *operation; /* launchlink */ - char *defaultdir; /* launchlink */ - - char *title; /* text */ - int open; /* text */ - pdf_dest dest; /* locallink, pdflink */ - - /* -------------- annotation border style and color -------------- */ - pdf_border_style border_style; - float border_width; - float border_red; - float border_green; - float border_blue; - float border_dash1; - float border_dash2; -}; - -static const char *pdf_border_style_names[] = { - "S", /* solid border */ - "D", /* dashed border */ - "B", /* beveled (three-dimensional) border */ - "I", /* inset border */ - "U" /* underlined border */ -}; - -static const char *pdf_icon_names[] = { - /* embedded file icon names */ - "Graph", "Paperclip", "Pushpin", "Tag", - - /* text annotation icon names */ - "Comment", "Insert", "Note", "Paragraph", "NewParagraph", "Key", "Help" -}; - -/* flags for annotation properties */ -typedef enum { - pdf_ann_flag_invisible = 1, - pdf_ann_flag_hidden = 2, - pdf_ann_flag_print = 4, - pdf_ann_flag_nozoom = 8, - pdf_ann_flag_norotate = 16, - pdf_ann_flag_noview = 32, - pdf_ann_flag_readonly = 64 -} pdf_ann_flag; - -void -pdf_init_annots(PDF *p) -{ - /* annotation border style defaults */ - p->border_style = border_solid; - p->border_width = (float) 1.0; - p->border_red = (float) 0.0; - p->border_green = (float) 0.0; - p->border_blue = (float) 0.0; - p->border_dash1 = (float) 3.0; - p->border_dash2 = (float) 3.0; - - /* auxiliary function parameters */ - p->launchlink_parameters = NULL; - p->launchlink_operation = NULL; - p->launchlink_defaultdir = NULL; -} - -void -pdf_cleanup_annots(PDF *p) -{ - if (p->launchlink_parameters) { - pdc_free(p->pdc, p->launchlink_parameters); - p->launchlink_parameters = NULL; - } - - if (p->launchlink_operation) { - pdc_free(p->pdc, p->launchlink_operation); - p->launchlink_operation = NULL; - } - - if (p->launchlink_defaultdir) { - pdc_free(p->pdc, p->launchlink_defaultdir); - p->launchlink_defaultdir = NULL; - } -} - -static void -pdf_init_annot(PDF *p, pdf_annot *ann) -{ - (void) p; - - ann->next = NULL; - ann->filename = NULL; - ann->mimetype = NULL; - ann->contents = NULL; - ann->mimetype = NULL; - ann->parameters = NULL; - ann->operation = NULL; - ann->defaultdir = NULL; - ann->title = NULL; -} - - -/* Write annotation border style and color */ -static void -pdf_write_border_style(PDF *p, pdf_annot *ann) -{ - /* don't write the default values */ - if (ann->border_style == border_solid && - ann->border_width == (float) 1.0 && - ann->border_red == (float) 0.0 && - ann->border_green == (float) 0.0 && - ann->border_blue == (float) 0.0 && - ann->border_dash1 == (float) 3.0 && - ann->border_dash2 == (float) 3.0) - return; - - if (ann->type != ann_attach) { - pdc_puts(p->out, "/BS"); - pdc_begin_dict(p->out); /* BS dict */ - pdc_puts(p->out, "/Type/Border\n"); - - /* Acrobat 6 requires this entry, and does not use /S/S as default */ - pdc_printf(p->out, "/S/%s\n", - pdf_border_style_names[ann->border_style]); - - /* Acrobat 6 requires this entry */ - pdc_printf(p->out, "/W %f\n", ann->border_width); - - if (ann->border_style == border_dashed) - pdc_printf(p->out, "/D[%f %f]\n", - ann->border_dash1, ann->border_dash2); - - pdc_end_dict(p->out); /* BS dict */ - - /* Write the Border key in old-style PDF 1.1 format */ - pdc_printf(p->out, "/Border[0 0 %f", ann->border_width); - - if (ann->border_style == border_dashed && - (ann->border_dash1 != (float) 0.0 || ann->border_dash2 != - (float) 0.0)) - /* set dashed border */ - pdc_printf(p->out, "[%f %f]", ann->border_dash1, ann->border_dash2); - - pdc_puts(p->out, "]\n"); - - } - - /* write annotation color */ - pdc_printf(p->out, "/C[%f %f %f]\n", - ann->border_red, ann->border_green, ann->border_blue); -} - -void -pdf_write_annots_root(PDF *p) -{ - pdf_annot *ann; - - /* Annotations array */ - if (p->annots) { - pdc_puts(p->out, "/Annots["); - - for (ann = p->annots; ann != NULL; ann = ann->next) { - ann->obj_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "%ld 0 R ", ann->obj_id); - } - - pdc_puts(p->out, "]\n"); - } -} - -void -pdf_write_page_annots(PDF *p) -{ - pdf_annot *ann; - - for (ann = p->annots; ann != NULL; ann = ann->next) { - - pdc_begin_obj(p->out, ann->obj_id); /* Annotation object */ - pdc_begin_dict(p->out); /* Annotation dict */ - - - pdc_puts(p->out, "/Type/Annot\n"); - switch (ann->type) { - case ann_text: - pdc_puts(p->out, "/Subtype/Text\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - if (ann->open) - pdc_puts(p->out, "/Open true\n"); - - if (ann->icon != icon_text_note) /* note is default */ - pdc_printf(p->out, "/Name/%s\n", pdf_icon_names[ann->icon]); - - /* Contents key is required, but may be empty */ - pdc_puts(p->out, "/Contents"); - - if (ann->contents) { - pdc_put_pdfunistring(p->out, ann->contents); - pdc_puts(p->out, "\n"); - } else - pdc_puts(p->out, "()\n"); /* empty contents is OK */ - - /* title is optional */ - if (ann->title) { - pdc_puts(p->out, "/T"); - pdc_put_pdfunistring(p->out, ann->title); - pdc_puts(p->out, "\n"); - } - - break; - - case ann_locallink: - pdc_puts(p->out, "/Subtype/Link\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - /* preallocate page object id for a later page */ - if (ann->dest.page > p->current_page) { - while (ann->dest.page >= p->pages_capacity) - pdf_grow_pages(p); - - /* if this page has already been used as a link target - * it will already have an object id. - */ - if (p->pages[ann->dest.page] == PDC_BAD_ID) - p->pages[ann->dest.page] = pdc_alloc_id(p->out); - } - - pdc_puts(p->out, "/Dest"); - pdf_write_destination(p, &ann->dest); - pdc_puts(p->out, "\n"); - - break; - - case ann_pdflink: - pdc_puts(p->out, "/Subtype/Link\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - pdc_puts(p->out, "/A"); - pdc_begin_dict(p->out); /* A dict */ - pdc_puts(p->out, "/Type/Action/S/GoToR\n"); - - pdc_puts(p->out, "/D"); - pdf_write_destination(p, &ann->dest); - pdc_puts(p->out, "\n"); - - pdc_puts(p->out, "/F"); - pdc_begin_dict(p->out); /* F dict */ - pdc_puts(p->out, "/Type/Filespec\n"); - pdc_puts(p->out, "/F"); - pdc_put_pdfstring(p->out, ann->filename, - (int)strlen(ann->filename)); - pdc_puts(p->out, "\n"); - pdc_end_dict(p->out); /* F dict */ - - pdc_end_dict(p->out); /* A dict */ - - break; - - case ann_launchlink: - pdc_puts(p->out, "/Subtype/Link\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - pdc_puts(p->out, "/A"); - pdc_begin_dict(p->out); /* A dict */ - pdc_puts(p->out, "/Type/Action/S/Launch\n"); - - if (ann->parameters || ann->operation || ann->defaultdir) { - pdc_puts(p->out, "/Win"); - pdc_begin_dict(p->out); /* Win dict */ - pdc_printf(p->out, "/F"); - pdc_put_pdfstring(p->out, ann->filename, - (int)strlen(ann->filename)); - pdc_puts(p->out, "\n"); - if (ann->parameters) { - pdc_printf(p->out, "/P"); - pdc_put_pdfstring(p->out, ann->parameters, - (int)strlen(ann->parameters)); - pdc_puts(p->out, "\n"); - pdc_free(p->pdc, ann->parameters); - ann->parameters = NULL; - } - if (ann->operation) { - pdc_printf(p->out, "/O"); - pdc_put_pdfstring(p->out, ann->operation, - (int)strlen(ann->operation)); - pdc_puts(p->out, "\n"); - pdc_free(p->pdc, ann->operation); - ann->operation = NULL; - } - if (ann->defaultdir) { - pdc_printf(p->out, "/D"); - pdc_put_pdfstring(p->out, ann->defaultdir, - (int)strlen(ann->defaultdir)); - pdc_puts(p->out, "\n"); - pdc_free(p->pdc, ann->defaultdir); - ann->defaultdir = NULL; - } - pdc_end_dict(p->out); /* Win dict */ - } else { - pdc_puts(p->out, "/F"); - pdc_begin_dict(p->out); /* F dict */ - pdc_puts(p->out, "/Type/Filespec\n"); - pdc_printf(p->out, "/F"); - pdc_put_pdfstring(p->out, ann->filename, - (int)strlen(ann->filename)); - pdc_puts(p->out, "\n"); - pdc_end_dict(p->out); /* F dict */ - } - - pdc_end_dict(p->out); /* A dict */ - - break; - - case ann_weblink: - pdc_puts(p->out, "/Subtype/Link\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - pdc_puts(p->out, "/A<out, ann->filename, - (int)strlen(ann->filename)); - pdc_puts(p->out, ">>\n"); - break; - - case ann_attach: - pdc_puts(p->out, "/Subtype/FileAttachment\n"); - pdc_printf(p->out, "/Rect[%f %f %f %f]\n", - ann->rect.llx, ann->rect.lly, ann->rect.urx, ann->rect.ury); - - pdf_write_border_style(p, ann); - - if (ann->icon != icon_file_pushpin) /* pushpin is default */ - pdc_printf(p->out, "/Name/%s\n", - pdf_icon_names[ann->icon]); - - if (ann->title) { - pdc_puts(p->out, "/T"); - pdc_put_pdfunistring(p->out, ann->title); - pdc_puts(p->out, "\n"); - } - - if (ann->contents) { - pdc_puts(p->out, "/Contents"); - pdc_put_pdfunistring(p->out, ann->contents); - pdc_puts(p->out, "\n"); - } - - /* the icon is too small without these flags (=28) */ - pdc_printf(p->out, "/F %d\n", - pdf_ann_flag_print | - pdf_ann_flag_nozoom | - pdf_ann_flag_norotate); - - pdc_puts(p->out, "/FS"); - pdc_begin_dict(p->out); /* FS dict */ - pdc_puts(p->out, "/Type/Filespec\n"); - - pdc_puts(p->out, "/F"); - pdc_put_pdfstring(p->out, ann->filename, - (int)strlen(ann->filename)); - pdc_puts(p->out, "\n"); - - /* alloc id for the actual embedded file stream */ - ann->obj_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/EF<>\n", ann->obj_id); - pdc_end_dict(p->out); /* FS dict */ - - break; - - default: - pdc_error(p->pdc, PDF_E_INT_BADANNOT, - pdc_errprintf(p->pdc, "%d", ann->type), 0, 0, 0); - } - - pdc_end_dict(p->out); /* Annotation dict */ - pdc_end_obj(p->out); /* Annotation object */ - } - - /* Write the actual embedded files with preallocated ids */ - for (ann = p->annots; ann != NULL; ann = ann->next) { - pdc_id length_id; - PDF_data_source src; - - if (ann->type != ann_attach) - continue; - - pdc_begin_obj(p->out, ann->obj_id); /* EmbeddedFile */ - pdc_puts(p->out, "<mimetype) { - pdc_puts(p->out, "/Subtype"); - pdc_put_pdfname(p->out, ann->mimetype, strlen(ann->mimetype)); - pdc_puts(p->out, "\n"); - } - - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", length_id); - pdc_end_dict(p->out); /* F dict */ - - /* write the file in the PDF */ - src.private_data = (void *) ann->filename; - src.init = pdf_data_source_file_init; - src.fill = pdf_data_source_file_fill; - src.terminate = pdf_data_source_file_terminate; - src.length = (long) 0; - src.offset = (long) 0; - - pdf_copy_stream(p, &src, pdc_true); /* embedded file stream */ - - pdc_end_obj(p->out); /* EmbeddedFile object */ - - pdc_put_pdfstreamlength(p->out, length_id); - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); - } -} - -void -pdf_init_page_annots(PDF *p) -{ - p->annots = NULL; -} - -void -pdf_cleanup_page_annots(PDF *p) -{ - pdf_annot *ann, *old; - - for (ann = p->annots; ann != (pdf_annot *) NULL; /* */ ) { - switch (ann->type) { - case ann_text: - if (ann->contents) - pdc_free(p->pdc, ann->contents); - if (ann->title) - pdc_free(p->pdc, ann->title); - break; - - case ann_locallink: - pdf_cleanup_destination(p, &ann->dest); - break; - - case ann_launchlink: - pdc_free(p->pdc, ann->filename); - break; - - case ann_pdflink: - pdf_cleanup_destination(p, &ann->dest); - pdc_free(p->pdc, ann->filename); - break; - - case ann_weblink: - pdc_free(p->pdc, ann->filename); - break; - - case ann_attach: - pdf_unlock_pvf(p, ann->filename); - pdc_free(p->pdc, ann->filename); - if (ann->contents) - pdc_free(p->pdc, ann->contents); - if (ann->title) - pdc_free(p->pdc, ann->title); - if (ann->mimetype) - pdc_free(p->pdc, ann->mimetype); - break; - - default: - pdc_error(p->pdc, PDF_E_INT_BADANNOT, - pdc_errprintf(p->pdc, "%d", ann->type), 0, 0, 0); - } - old = ann; - ann = old->next; - pdc_free(p->pdc, old); - } - p->annots = NULL; -} - -/* Insert new annotation at the end of the annots chain */ -static void -pdf_add_annot(PDF *p, pdf_annot *ann) -{ - pdf_annot *last; - - /* fetch current border state from p */ - ann->border_style = p->border_style; - ann->border_width = p->border_width; - ann->border_red = p->border_red; - ann->border_green = p->border_green; - ann->border_blue = p->border_blue; - ann->border_dash1 = p->border_dash1; - ann->border_dash2 = p->border_dash2; - - ann->next = NULL; - - if (p->annots == NULL) - p->annots = ann; - else { - for (last = p->annots; last->next != NULL; /* */ ) - last = last->next; - last->next = ann; - } -} - -static void -pdf_init_rectangle(PDF *p, pdf_annot *ann, - float llx, float lly, float urx, float ury) -{ - pdc_rect_init(&ann->rect, llx, lly, urx, ury); - if (p->usercoordinates == pdc_true) - pdc_rect_transform(&p->gstate[p->sl].ctm, &ann->rect, &ann->rect); -} - - - - -/* Attach an arbitrary file to the PDF. Note that the actual - * embedding takes place in PDF_end_page(). - * description, author, and mimetype may be NULL. - */ - -static const pdc_keyconn pdf_icon_attach_keylist[] = -{ - {"graph", icon_file_graph}, - {"paperclip", icon_file_paperclip}, - {"pushpin", icon_file_pushpin}, - {"tag", icon_file_tag}, - {NULL, 0} -}; - -static void -pdf__attach_file( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *filename, - const char *description, - int len_descr, - const char *author, - int len_auth, - const char *mimetype, - const char *icon) -{ - static const char fn[] = "pdf__attach_file"; - pdf_annot *ann; - pdc_file *attfile; - - if (filename == NULL || *filename == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - if ((attfile = pdf_fopen(p, filename, "attachment ", 0)) == NULL) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - pdf_lock_pvf(p, filename); - pdc_fclose(attfile); - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->type = ann_attach; - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - if (icon == NULL || !*icon) - icon = "pushpin"; - ann->icon = (pdf_icon) pdc_get_keycode(icon, pdf_icon_attach_keylist); - if (ann->icon == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "icon", icon, 0, 0); - - ann->filename = (char *) pdc_strdup(p->pdc, filename); - - ann->contents = pdf_convert_hypertext(p, description, len_descr); - - ann->title = pdf_convert_hypertext(p, author, len_auth); - - if (mimetype != NULL) { - ann->mimetype = (char *) pdc_strdup(p->pdc, mimetype); - } - - pdf_add_annot(p, ann); -} - -PDFLIB_API void PDFLIB_CALL -PDF_attach_file( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *filename, - const char *description, - const char *author, - const char *mimetype, - const char *icon) -{ - static const char fn[] = "PDF_attach_file"; - - if (pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\")\n", - (void *) p, llx, lly, urx, ury, filename, - pdc_strprint(p->pdc, description, 0), - pdc_strprint(p->pdc, author, 0), mimetype, icon)) - { - int len_descr = description ? (int) pdc_strlen(description) : 0; - int len_auth = author ? (int) pdc_strlen(author) : 0; - pdf__attach_file(p, llx, lly, urx, ury, filename, - description, len_descr, author, len_auth, mimetype, icon) ; - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_attach_file2( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *filename, - int reserved, - const char *description, - int len_descr, - const char *author, - int len_auth, - const char *mimetype, - const char *icon) -{ - static const char fn[] = "PDF_attach_file2"; - - if (pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\", %d, \"%s\", %d, " - "\"%s\", %d, \"%s\", \"%s\")\n", - (void *) p, llx, lly, urx, ury, filename, reserved, - pdc_strprint(p->pdc, description, len_descr), len_descr, - pdc_strprint(p->pdc, author, len_auth), len_auth, mimetype, icon)) - { - pdf__attach_file(p, llx, lly, urx, ury, filename, - description, len_descr, author, len_auth, mimetype, icon) ; - } -} - -static const pdc_keyconn pdf_icon_note_keylist[] = -{ - {"comment", icon_text_comment}, - {"insert", icon_text_insert}, - {"note", icon_text_note}, - {"paragraph", icon_text_paragraph}, - {"newparagraph", icon_text_newparagraph}, - {"key", icon_text_key}, - {"help", icon_text_help}, - {NULL, 0} -}; - -static void -pdf__add_note( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *contents, - int len_cont, - const char *title, - int len_title, - const char *icon, - int open) -{ - static const char fn[] = "pdf__add_note"; - pdf_annot *ann; - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->type = ann_text; - ann->open = open; - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - if (icon == NULL || !*icon) - icon = "note"; - ann->icon = (pdf_icon) pdc_get_keycode(icon, pdf_icon_note_keylist); - if (ann->icon == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "icon", icon, 0, 0); - - /* title may be NULL */ - ann->title = pdf_convert_hypertext(p, title, len_title); - - /* It is legal to create an empty text annnotation */ - ann->contents = pdf_convert_hypertext(p, contents, len_cont); - - pdf_add_annot(p, ann); -} - -PDFLIB_API void PDFLIB_CALL -PDF_add_note( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *contents, - const char *title, - const char *icon, - int open) -{ - static const char fn[] = "PDF_add_note"; - - if (pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\", \"%s\", \"%s\", %d)\n", - (void *) p, llx, lly, urx, ury, - pdc_strprint(p->pdc, contents, 0), - pdc_strprint(p->pdc, title, 0), icon, open)) - { - int len_cont = contents ? (int) pdc_strlen(contents) : 0; - int len_title = title ? (int) pdc_strlen(title) : 0; - pdf__add_note(p, llx, lly, urx, ury, contents, len_cont, - title, len_title, icon, open); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_add_note2( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *contents, - int len_cont, - const char *title, - int len_title, - const char *icon, - int open) -{ - static const char fn[] = "PDF_add_note2"; - - if (pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\", %d, \"%s\", %d, \"%s\", %d)\n", - (void *) p, llx, lly, urx, ury, - pdc_strprint(p->pdc, contents, len_cont), len_cont, - pdc_strprint(p->pdc, title, len_title), len_title, - icon, open)) - { - pdf__add_note(p, llx, lly, urx, ury, contents, len_cont, - title, len_title, icon, open); - } -} - -/* Add a link to another PDF file */ -PDFLIB_API void PDFLIB_CALL -PDF_add_pdflink( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *filename, - int page, - const char *optlist) -{ - static const char fn[] = "PDF_add_pdflink"; - pdf_annot *ann; - - if (!pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\", %d, \"%s\")\n", - (void *) p, llx, lly, urx, ury, filename, page, optlist)) - { - return; - } - - if (filename == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->filename = pdc_strdup(p->pdc, filename); - - ann->type = ann_pdflink; - - pdf_parse_destination_optlist(p, optlist, &ann->dest, page, pdf_remotelink); - - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - pdf_add_annot(p, ann); -} - -/* Add a link to another file of an arbitrary type */ -PDFLIB_API void PDFLIB_CALL -PDF_add_launchlink( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *filename) -{ - static const char fn[] = "PDF_add_launchlink"; - pdf_annot *ann; - - if (!pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\")\n", - (void *)p, llx, lly, urx, ury, filename)) - { - return; - } - - if (filename == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->filename = pdc_strdup(p->pdc, filename); - - ann->type = ann_launchlink; - - if (p->launchlink_parameters) { - ann->parameters = p->launchlink_parameters; - p->launchlink_parameters = NULL; - } - - if (p->launchlink_operation) { - ann->operation = p->launchlink_operation; - p->launchlink_operation = NULL; - } - - if (p->launchlink_defaultdir) { - ann->defaultdir = p->launchlink_defaultdir; - p->launchlink_defaultdir = NULL; - } - - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - pdf_add_annot(p, ann); -} - -/* Add a link to a destination in the current PDF file */ -PDFLIB_API void PDFLIB_CALL -PDF_add_locallink( - PDF *p, - float llx, - float lly, - float urx, - float ury, - int page, - const char *optlist) -{ - static const char fn[] = "PDF_add_locallink"; - pdf_annot *ann; - - if (!pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, %d, \"%s\")\n", - (void *) p, llx, lly, urx, ury, page, optlist)) - { - return; - } - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->type = ann_locallink; - - pdf_parse_destination_optlist(p, optlist, &ann->dest, page, pdf_locallink); - - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - pdf_add_annot(p, ann); -} - -/* Add a link to an arbitrary Internet resource (URL) */ -PDFLIB_API void PDFLIB_CALL -PDF_add_weblink( - PDF *p, - float llx, - float lly, - float urx, - float ury, - const char *url) -{ - static const char fn[] = "PDF_add_weblink"; - pdf_annot *ann; - - if (!pdf_enter_api(p, fn, pdf_state_page, - "(p[%p], %g, %g, %g, %g, \"%s\")\n", - (void *) p, llx, lly, urx, ury, url)) - { - return; - } - - if (url == NULL || *url == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "url", 0, 0, 0); - - ann = (pdf_annot *) pdc_malloc(p->pdc, sizeof(pdf_annot), fn); - - pdf_init_annot(p, ann); - - ann->filename = pdc_strdup(p->pdc, url); - - ann->type = ann_weblink; - pdf_init_rectangle(p, ann, llx, lly, urx, ury); - - pdf_add_annot(p, ann); -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_border_style(PDF *p, const char *style, float width) -{ - static const char fn[] = "PDF_set_border_style"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page), - "(p[%p], \"%s\", %g)\n", (void *) p, style, width)) - { - return; - } - - if (style == NULL) - p->border_style = border_solid; - else if (!strcmp(style, "solid")) - p->border_style = border_solid; - else if (!strcmp(style, "dashed")) - p->border_style = border_dashed; - else - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "style", style, 0, 0); - - if (width < 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "width", pdc_errprintf(p->pdc, "%f", width), 0, 0); - - p->border_width = width; -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_border_color(PDF *p, float red, float green, float blue) -{ - static const char fn[] = "PDF_set_border_color"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page), - "(p[%p], %g, %g, %g)\n", (void *) p, red, green, blue)) - { - return; - } - - if (red < 0.0 || red > 1.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "red", pdc_errprintf(p->pdc, "%f", red), 0, 0); - if (green < 0.0 || green > 1.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "green", pdc_errprintf(p->pdc, "%f", green), 0, 0); - if (blue < 0.0 || blue > 1.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "blue", pdc_errprintf(p->pdc, "%f", blue), 0, 0); - - p->border_red = red; - p->border_green = green; - p->border_blue = blue; -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_border_dash(PDF *p, float b, float w) -{ - static const char fn[] = "PDF_set_border_dash"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page), - "(p[%p], %g, %g)\n", (void *) p, b, w)) - { - return; - } - - if (b < 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "b", pdc_errprintf(p->pdc, "%f", b), 0, 0); - - if (w < 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "w", pdc_errprintf(p->pdc, "%f", w), 0, 0); - - p->border_dash1 = b; - p->border_dash2 = w; -} diff --git a/src/libs/pdflib/libs/pdflib/p_basic.c b/src/libs/pdflib/libs/pdflib/p_basic.c deleted file mode 100644 index 880500b420..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_basic.c +++ /dev/null @@ -1,1586 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_basic.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib general routines - * - */ - - -#include "p_intern.h" -#include "p_font.h" -#include "p_image.h" - - -#if !defined(WIN32) && !defined(OS2) -#include -#endif - -#if (defined(WIN32) || defined(OS2)) && !defined(WINCE) -#include -#include -#endif - -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#include -#undef WIN32_LEAN_AND_MEAN -#endif - -static pdc_error_info pdf_errors[] = -{ -#define pdf_genInfo 1 -#include "p_generr.h" -}; - -#define N_PDF_ERRORS (sizeof pdf_errors / sizeof (pdc_error_info)) - - -static const PDFlib_api PDFlib = { - /* version numbers for checking the DLL against client code */ - sizeof(PDFlib_api), /* size of this structure */ - - PDFLIB_MAJORVERSION, /* PDFlib major version number */ - PDFLIB_MINORVERSION, /* PDFlib minor version number */ - PDFLIB_REVISION, /* PDFlib revision number */ - - 0, /* reserved */ - - /* p_annots.c: */ - PDF_add_launchlink, - PDF_add_locallink, - PDF_add_note, - PDF_add_note2, - PDF_add_pdflink, - PDF_add_weblink, - PDF_attach_file, - PDF_attach_file2, - PDF_set_border_color, - PDF_set_border_dash, - PDF_set_border_style, - /* p_basic.c: */ - PDF_begin_page, - PDF_boot, - PDF_close, - PDF_delete, - PDF_end_page, - PDF_get_api, - PDF_get_apiname, - PDF_get_buffer, - PDF_get_errmsg, - PDF_get_errnum, - PDF_get_majorversion, - PDF_get_minorversion, - PDF_get_opaque, - PDF_new, - PDF_new2, - PDF_open_file, - PDF_open_fp, - PDF_open_mem, - PDF_shutdown, - pdf_jbuf, - pdf_exit_try, - pdf_catch, - pdf_rethrow, - /* p_block.c: */ - PDF_fill_imageblock, - PDF_fill_pdfblock, - PDF_fill_textblock, - /* p_color.c: */ - PDF_makespotcolor, - PDF_setcolor, - PDF_setgray, - PDF_setgray_stroke, - PDF_setgray_fill, - PDF_setrgbcolor, - PDF_setrgbcolor_fill, - PDF_setrgbcolor_stroke, - /* p_draw.c: */ - PDF_arc, - PDF_arcn, - PDF_circle, - PDF_clip, - PDF_closepath, - PDF_closepath_fill_stroke, - PDF_closepath_stroke, - PDF_curveto, - PDF_endpath, - PDF_fill, - PDF_fill_stroke, - PDF_lineto, - PDF_moveto, - PDF_rect, - PDF_stroke, - /* p_encoding.c: */ - PDF_encoding_set_char, - /* p_font.c: */ - PDF_findfont, - PDF_load_font, - PDF_setfont, - /* p_gstate.c */ - PDF_concat, - PDF_initgraphics, - PDF_restore, - PDF_rotate, - PDF_save, - PDF_scale, - PDF_setdash, - PDF_setdashpattern, - PDF_setflat, - PDF_setlinecap, - PDF_setlinejoin, - PDF_setlinewidth, - PDF_setmatrix, - PDF_setmiterlimit, - PDF_setpolydash, - PDF_skew, - PDF_translate, - /* p_hyper.c: */ - PDF_add_bookmark, - PDF_add_bookmark2, - PDF_add_nameddest, - PDF_set_info, - PDF_set_info2, - /* p_icc.c: */ - PDF_load_iccprofile, - /* p_image.c: */ - PDF_add_thumbnail, - PDF_close_image, - PDF_fit_image, - PDF_load_image, - PDF_open_CCITT, - PDF_open_image, - PDF_open_image_file, - PDF_place_image, - /* p_kerning.c: */ - /* p_params.c: */ - PDF_get_parameter, - PDF_get_value, - PDF_set_parameter, - PDF_set_value, - /* p_pattern.c: */ - PDF_begin_pattern, - PDF_end_pattern, - /* p_pdi.c: */ - PDF_close_pdi, - PDF_close_pdi_page, - PDF_fit_pdi_page, - PDF_get_pdi_parameter, - PDF_get_pdi_value, - PDF_open_pdi, - PDF_open_pdi_callback, - PDF_open_pdi_page, - PDF_place_pdi_page, - PDF_process_pdi, - /* p_resource.c: */ - PDF_create_pvf, - PDF_delete_pvf, - /* p_shading.c: */ - PDF_shading, - PDF_shading_pattern, - PDF_shfill, - /* p_template.c: */ - PDF_begin_template, - PDF_end_template, - /* p_text.c: */ - PDF_continue_text, - PDF_continue_text2, - PDF_fit_textline, - PDF_set_text_pos, - PDF_show, - PDF_show2, - PDF_show_boxed, - PDF_show_xy, - PDF_show_xy2, - PDF_stringwidth, - PDF_stringwidth2, - /* p_type3.c: */ - PDF_begin_font, - PDF_begin_glyph, - PDF_end_font, - PDF_end_glyph, - /* p_xgstate.c: */ - PDF_create_gstate, - PDF_set_gstate -}; - - -PDFLIB_API void PDFLIB_CALL -PDF_boot(void) -{ - /* nothing yet */ -} - -PDFLIB_API void PDFLIB_CALL -PDF_shutdown(void) -{ - /* nothing yet */ -} - -PDFLIB_API const PDFlib_api * PDFLIB_CALL -PDF_get_api(void) -{ - return &PDFlib; -} - - -#if (defined(WIN32) || defined(__CYGWIN)) && defined(PDFLIB_EXPORTS) - -/* - * DLL entry function as required by Visual C++. - * It is currently not necessary on Windows, but will eventually - * be used to boot thread-global resources for PDFlib - * (mainly font-related stuff). - */ -BOOL WINAPI -DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved); - -BOOL WINAPI -DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -{ - (void) hModule; - (void) lpReserved; - - switch (ul_reason_for_call) { - case DLL_PROCESS_ATTACH: - PDF_boot(); - break; - case DLL_THREAD_ATTACH: - break; - case DLL_THREAD_DETACH: - break; - case DLL_PROCESS_DETACH: - PDF_shutdown(); - break; - } - - return TRUE; -} -#endif /* WIN32 && PDFLIB_EXPORT */ - -PDFLIB_API int PDFLIB_CALL -PDF_get_majorversion(void) -{ - return PDFLIB_MAJORVERSION; -} - -PDFLIB_API int PDFLIB_CALL -PDF_get_minorversion(void) -{ - return PDFLIB_MINORVERSION; -} - -pdc_bool -pdf_enter_api(PDF *p, const char *funame, pdf_state s, const char *fmt, ...) -{ - va_list args; - - /* check whether the client completely screwed up */ - if (p == NULL || p->magic != PDC_MAGIC) - return pdc_false; - - va_start(args, fmt); - - if (p->debug['t']) - pdc_trace_api(p->pdc, funame, fmt, args); - - va_end(args); - - /* pdc_enter_api() will return pdc_false if the core is in error state. - */ - if (!pdc_enter_api(p->pdc, funame)) - return pdc_false; - - /* check whether we are in a valid scope */ - if ((p->state_stack[p->state_sp] & s) == 0) - { - /* pdc_error() will NOT throw an exception (and simply return instead) - ** if the core is already in error state. - */ - pdc_error(p->pdc, PDF_E_DOC_SCOPE, pdf_current_scope(p), 0, 0, 0); - - return pdc_false; - } - - return pdc_true; -} - -static pdc_bool -pdf_enter_api2(PDF *p, const char *funame, const char *fmt, ...) -{ - va_list args; - - /* check whether the client completely screwed up */ - if (p == NULL || p->magic != PDC_MAGIC) - return pdc_false; - - va_start(args, fmt); - - if (p->debug['t']) - pdc_trace_api(p->pdc, funame, fmt, args); - - va_end(args); - return pdc_true; -} - - -PDFLIB_API int PDFLIB_CALL -PDF_get_errnum(PDF *p) -{ - static const char fn[] = "PDF_get_errnum"; - int ret; - - if (!pdf_enter_api2(p, fn, "(p[%p])", (void *) p)) - { - pdc_trace(p->pdc, "[0]\n"); - return 0; - } - - ret = pdc_get_errnum(p->pdc); - pdc_trace(p->pdc, "[%d]\n", ret); - return ret; -} - -PDFLIB_API const char * PDFLIB_CALL -PDF_get_errmsg(PDF *p) -{ - static const char fn[] = "PDF_get_errmsg"; - const char *ret; - - if (!pdf_enter_api2(p, fn, "(p[%p])", (void *) p)) - { - pdc_trace(p->pdc, "[NULL]\n"); - return (char *) 0; - } - - ret = pdc_get_errmsg(p->pdc); - pdc_trace(p->pdc, "\n[\"%s\"]\n", ret); - return ret; -} - -PDFLIB_API const char * PDFLIB_CALL -PDF_get_apiname(PDF *p) -{ - static const char fn[] = "PDF_get_apiname"; - const char *ret; - - if (!pdf_enter_api2(p, fn, "(p[%p])", (void *) p)) - { - pdc_trace(p->pdc, "[NULL]\n"); - return (char *) 0; - } - - ret = pdc_get_apiname(p->pdc); - pdc_trace(p->pdc, "[\"%s\"]\n", ret); - return ret; -} - -PDFLIB_API void * PDFLIB_CALL -PDF_get_opaque(PDF *p) -{ - static const char fn[] = "PDF_get_opaque"; - - if (p == NULL || p->magic != PDC_MAGIC) - return ((void *) NULL); - - pdc_trace(p->pdc, "/* "); - - if (!pdf_enter_api2(p, fn, "(p[%p])", (void *) p)) - { - return ((void *) NULL); - } - - pdc_trace(p->pdc, "[%p] */\n", p->opaque); - - return p->opaque; -} - -const char * -pdf_current_scope(PDF *p) -{ - /* This array must be kept in sync with the pdf_state enum in p_intern.h */ - static const char *scope_names[] = - { - "object", - "document", - "page", - "pattern", - "template", - "path", - "gstate", - "font", - "glyph", - "error" - }; - - int i; - - for (i = 0; i < (int)(sizeof(scope_names)/sizeof(char *)); ++i) - if (PDF_GET_STATE(p) == (pdf_state) (1 << i)) - return scope_names[i]; - - pdc_error(p->pdc, PDF_E_INT_BADSCOPE, - pdc_errprintf(p->pdc, " (0x%08X)", PDF_GET_STATE(p)), 0, 0, 0); - - return (char *) 0; /* be happy, compiler! */ -} - -/* p may be NULL on the first call - we don't use it anyway */ -static void * -default_malloc(PDF *p, size_t size, const char *caller) -{ - void *ret = malloc(size); - - (void) p; - (void) caller; -#ifdef DEBUG - if (p != NULL && p->debug['m']) - fprintf(stderr, "%p malloced, size %d from %s, page %d\n", - ret, (int) size, caller, p->current_page); -#endif - - return ret; -} - -static void * -default_realloc(PDF *p, void *mem, size_t size, const char *caller) -{ - void *ret = realloc(mem, size); - - (void) p; - (void) caller; -#ifdef DEBUG - if (p->debug['r']) - fprintf(stderr, "%p realloced to %p, %d from %s, page %d\n", - mem, ret, (int) size, caller, p->current_page); -#endif - - return ret; -} - -static void -default_free(PDF *p, void *mem) -{ - (void) p; - -#ifdef DEBUG - if (p->debug['f']) - fprintf(stderr, "%p freed, page %d\n", mem, p->current_page); -#endif - - free(mem); -} - -/* This is the easy version with the default handlers */ -PDFLIB_API PDF * PDFLIB_CALL -PDF_new(void) -{ - return PDF_new2(NULL, NULL, NULL, NULL, NULL); -} - -/* This is the spiced-up version with user-defined error and memory handlers */ - -PDFLIB_API PDF * PDFLIB_CALL -PDF_new2( - void (*errorhandler)(PDF *p, int type, const char *msg), - void* (*allocproc)(PDF *p, size_t size, const char *caller), - void* (*reallocproc)(PDF *p, void *mem, size_t size, const char *caller), - void (*freeproc)(PDF *p, void *mem), - void *opaque) -{ - PDF * p; - pdc_core * pdc; - - /* If allocproc is NULL, all entries are supplied internally by PDFlib */ - if (allocproc == NULL) { - allocproc = default_malloc; - reallocproc = default_realloc; - freeproc = default_free; - } - - p = (PDF *) (*allocproc) (NULL, sizeof(PDF), "PDF_new"); - - if (p == NULL) - return NULL; - - /* - * Guard against crashes when PDF_delete is called without any - * PDF_open_*() in between. - */ - memset((void *)p, 0, (size_t) sizeof(PDF)); - - /* these two are required by PDF_get_opaque() */ - p->magic = PDC_MAGIC; - p->opaque = opaque; - - pdc = pdc_init_core( - (pdc_error_fp) errorhandler, - (pdc_alloc_fp) allocproc, - (pdc_realloc_fp) reallocproc, - (pdc_free_fp) freeproc, p); - - if (pdc == NULL) - { - (*freeproc)(p, p); - return NULL; - } - - pdc_register_errtab(pdc, PDC_ET_PDFLIB, pdf_errors, N_PDF_ERRORS); - - p->freeproc = freeproc; - p->pdc = pdc; - p->compatibility = PDC_1_4; - - p->errorhandler = errorhandler; - - p->flush = pdf_flush_page; - - p->inheritgs = pdc_false; - - p->hypertextencoding= pdc_invalidenc; - p->hypertextformat = pdc_auto; - p->textformat = pdc_auto; - p->currtext = NULL; - - - - - - p->resfilepending = pdc_true; - p->resourcefilename = NULL; - p->resources = NULL; - p->prefix = NULL; - p->filesystem = NULL; - p->binding = NULL; - p->hastobepos = pdc_false; - p->rendintent = AutoIntent; - p->preserveoldpantonenames = pdc_false; - p->spotcolorlookup = pdc_true; - p->ydirection = (float) 1.0; - p->usercoordinates = pdc_false; - p->names = NULL; - p->names_capacity = 0; - p->xobjects = NULL; - p->pdi = NULL; - p->pdi_strict = pdc_false; - p->pdi_sbuf = NULL; - p->state_sp = 0; - PDF_SET_STATE(p, pdf_state_object); - - /* all debug flags are cleared by default because of the above memset... */ - - /* ...but warning messages for non-fatal errors should be set, - * as well as font warnings -- the client must explicitly disable these. - */ - p->debug['e'] = pdc_true; - p->debug['F'] = pdc_true; - p->debug['I'] = pdc_true; - - pdf_init_info(p); - pdf_init_encodings(p); - - p->out = (pdc_output *)pdc_boot_output(p->pdc); - - return p; -} - -static void pdf_cleanup_contents(PDF *p); - -/* - * PDF_delete must be called for cleanup in case of error, - * or when the client is done producing PDF. - * It should never be called more than once for a given PDF, although - * we try to guard against duplicated calls. - * - * Note: all pdf_cleanup_*() functions may safely be called multiple times. - */ - -PDFLIB_API void PDFLIB_CALL -PDF_delete(PDF *p) -{ - static const char fn[] = "PDF_delete"; - - if (!pdf_enter_api2(p, fn, "(p[%p])\n", (void *) p)) - return; - - /* - * Clean up page-related stuff if necessary. Do not raise - * an error here since we may be called from the error handler. - */ - if (PDF_GET_STATE(p) != pdf_state_object) { - pdc_close_output(p->out); - pdf_cleanup_contents(p); - } - pdf_cleanup_encodings(p); - - /* close the output stream. - * This can't be done in PDF_close() because the caller may fetch - * the buffer only after PDF_close()ing the document. - */ - pdc_cleanup_output(p->out); - pdf_cleanup_resources(p); /* release the resources tree */ - pdf_cleanup_filesystem(p); /* release the file system */ - - - if (p->out) - pdc_free(p->pdc, p->out); - - if (p->binding) - pdc_free(p->pdc, p->binding); - - if (p->resourcefilename) - pdc_free(p->pdc, p->resourcefilename); - - if (p->prefix) - pdc_free(p->pdc, p->prefix); - - /* we never reach this point if (p->pdc == NULL). - */ - pdc_delete_core(p->pdc); - - /* free the PDF structure and try to protect against duplicated calls */ - - p->magic = 0L; /* we don't reach this with the wrong magic */ - (*p->freeproc)(p, (void *) p); -} - -static void -pdf_init_document(PDF *p) -{ - static const char *fn = "pdf_init_document"; - int i; - - p->contents_ids_capacity = CONTENTS_CHUNKSIZE; - p->contents_ids = (pdc_id *) pdc_malloc(p->pdc, - sizeof(pdc_id) * p->contents_ids_capacity, fn); - - p->pages_capacity = PAGES_CHUNKSIZE; - p->pages = (pdc_id *) - pdc_malloc(p->pdc, sizeof(pdc_id) * p->pages_capacity, fn); - - /* mark ids to allow for pre-allocation of page ids */ - for (i = 0; i < p->pages_capacity; i++) - p->pages[i] = PDC_BAD_ID; - - p->pnodes_capacity = PNODES_CHUNKSIZE; - p->pnodes = (pdc_id *) - pdc_malloc(p->pdc, sizeof(pdc_id) * p->pnodes_capacity, fn); - - p->current_pnode = 0; - p->current_pnode_kids = 0; - - p->current_page = 0; - p->open_mode = open_auto; - p->base = NULL; - - p->ViewerPreferences.flags = 0; - p->ViewerPreferences.ViewArea = use_none; - p->ViewerPreferences.ViewClip = use_none; - p->ViewerPreferences.PrintArea = use_none; - p->ViewerPreferences.PrintClip = use_none; - - pdf_init_destination(p, &p->open_action); - pdf_init_destination(p, &p->bookmark_dest); - -} - -static void -pdf_init_contents(PDF *p) -{ - /* - * None of these functions must call pdc_alloc_id() or generate - * any output since the output machinery is not yet initialized! - * If required, such calls must go in pdf_init_contents2() below. - */ - - pdf_init_document(p); - pdf_init_images(p); - pdf_init_xobjects(p); - pdf_init_fonts(p); - pdf_init_transition(p); - pdf_init_outlines(p); - pdf_init_annots(p); - pdf_init_colorspaces(p); - pdf_init_pattern(p); - pdf_init_shadings(p); - pdf_init_extgstate(p); - - /* clients may set char/word spacing and horizontal scaling outside pages - ** for PDF_stringwidth() calculations, and they may set a color for use - ** in PDF_makespotcolor(). Here we set the defaults. - */ - p->sl = 0; - pdf_init_tstate(p); - pdf_init_cstate(p); - -} - -static void -pdf_init_contents2(PDF *p) -{ - /* second part of initialization, including pdcore services */ - - p->pnodes[0] = pdc_alloc_id(p->out); - - PDF_SET_STATE(p, pdf_state_document); -} - -static void -pdf_feed_digest(PDF *p, unsigned char *custom, unsigned int len) -{ - pdc_init_digest(p->out); - - if (custom) - pdc_update_digest(p->out, custom, len); - - pdc_update_digest(p->out, (unsigned char *) &p, sizeof(PDF*)); - - pdc_update_digest(p->out, (unsigned char *) p, sizeof(PDF)); - - pdc_update_digest(p->out, - (unsigned char *) p->time_str, strlen(p->time_str)); - - pdf_feed_digest_info(p); - - - pdc_finish_digest(p->out); -} - -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma unmanaged -#endif -PDFLIB_API int PDFLIB_CALL -PDF_open_file(PDF *p, const char *filename) -{ - static const char fn[] = "PDF_open_file"; - - if (!pdf_enter_api(p, fn, pdf_state_object, "(p[%p], \"%s\")", - (void *) p, filename)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - pdf_init_contents(p); - - if (filename) - pdf_feed_digest(p, - (unsigned char*) filename, (unsigned int) strlen(filename)); - else - pdf_feed_digest(p, NULL, 0); - - if (!pdc_init_output((void *) p, p->out, filename, NULL, NULL, - p->compatibility)) { - pdc_set_errmsg(p->pdc, pdc_get_fopen_errnum(p->pdc, PDC_E_IO_WROPEN), - "PDF ", filename, 0, 0); - - if (p->debug['o']) - pdc_warning(p->pdc, -1, 0, 0, 0, 0); - - PDF_RETURN_BOOLEAN(p, -1); - } - - pdf_init_contents2(p); - - PDF_RETURN_BOOLEAN(p, 1); -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif - -PDFLIB_API int PDFLIB_CALL -PDF_open_fp(PDF *p, FILE *fp) -{ - static const char fn[] = "PDF_open_fp"; - - if (!pdf_enter_api(p, fn, pdf_state_object, "(p[%p], fp[%p])", - (void *) p, fp)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - if (fp == NULL) - { - PDF_RETURN_BOOLEAN(p, -1); - } - -/* - * It is the callers responsibility to open the file in binary mode, - * but it doesn't hurt to make sure it really is. - * The Intel version of the Metrowerks compiler doesn't have setmode(). - */ -#if !defined(__MWERKS__) && (defined(WIN32) || defined(OS2)) -#if defined WINCE - _setmode(fileno(fp), _O_BINARY); -#else - setmode(fileno(fp), O_BINARY); -#endif -#endif - - pdf_init_contents(p); - - pdf_feed_digest(p, (unsigned char*) fp, sizeof(FILE)); - - (void) pdc_init_output((void *) p, p->out, NULL, fp, NULL, - p->compatibility); - - pdf_init_contents2(p); - - PDF_RETURN_BOOLEAN(p, 1); -} - -/* - * The external callback interface requires a PDF* as the first argument, - * while the internal interface uses pdc_output* and doesn't know about PDF*. - * We use a wrapper to bridge the gap, and store the PDF* within the - * pdc_output structure opaquely. - */ - -static size_t -writeproc_wrapper(pdc_output *out, void *data, size_t size) -{ - PDF *p = (PDF *) pdc_get_opaque(out); - - return (p->writeproc)(p, data, size); -} - -PDFLIB_API void PDFLIB_CALL -PDF_open_mem(PDF *p, size_t (*i_writeproc)(PDF *p, void *data, size_t size)) -{ - static const char fn[] = "PDF_open_mem"; - size_t (*writeproc)(PDF *, void *, size_t) = i_writeproc; - - if (!pdf_enter_api(p, fn, pdf_state_object, - "(p[%p], wp[%p])\n", (void *) p, (void *) writeproc)) - return; - - if (writeproc == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "writeproc", 0, 0, 0); - - p->writeproc = writeproc; - - pdf_init_contents(p); - - pdf_feed_digest(p, (unsigned char*) &writeproc, - (unsigned int) sizeof(writeproc)); - - (void) pdc_init_output((void *) p, p->out, NULL, NULL, writeproc_wrapper, - p->compatibility); - - pdf_init_contents2(p); -} - -/* - * The caller must use the contents of the returned buffer before - * calling the next PDFlib function. - */ - -PDFLIB_API const char * PDFLIB_CALL -PDF_get_buffer(PDF *p, long *size) -{ - static const char fn[] = "PDF_get_buffer"; - const char *ret; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document), - "(p[%p], &size[%p])", (void *) p, (void *) size)) { - *size = (long) 0; - return (const char) NULL; - } - - ret = pdc_get_stream_contents(p->out, size); - - pdc_trace(p->pdc, "[%p, size=%ld]\n", (void *) (ret), *size); - return ret; -} - -static void -pdf_write_pnode(PDF *p, - pdc_id node_id, - pdc_id parent_id, - pdc_id *kids, - int n_kids, - int n_pages) -{ - pdc_begin_obj(p->out, node_id); - pdc_begin_dict(p->out); - pdc_puts(p->out, "/Type/Pages\n"); - pdc_printf(p->out, "/Count %d\n", n_pages); - - if (parent_id != PDC_BAD_ID) - pdc_printf(p->out, "/Parent %ld 0 R\n", parent_id); - - pdc_puts(p->out, "/Kids["); - - do - { - pdc_printf(p->out, "%ld 0 R", *kids++); - pdc_puts(p->out, "\n"); - } while (--n_kids > 0); - - pdc_puts(p->out, "]"); - pdc_end_dict(p->out); - pdc_end_obj(p->out); -} - -#define N_KIDS 10 - -static pdc_id -pdf_get_pnode_id(PDF *p) -{ - static const char fn[] = "pdf_get_pnode_id"; - - if (p->current_pnode_kids == N_KIDS) - { - if (++p->current_pnode == p->pnodes_capacity) - { - p->pnodes_capacity *= 2; - p->pnodes = (pdc_id *) pdc_realloc(p->pdc, p->pnodes, - sizeof (pdc_id) * p->pnodes_capacity, fn); - } - - p->pnodes[p->current_pnode] = pdc_alloc_id(p->out); - p->current_pnode_kids = 1; - } - else - ++p->current_pnode_kids; - - return p->pnodes[p->current_pnode]; -} - -static pdc_id -pdf_make_tree(PDF *p, - pdc_id parent_id, - pdc_id *pnodes, - pdc_id *pages, - int n_pages) -{ - if (n_pages <= N_KIDS) - { - /* this is a near-to-leaf node. use the pre-allocated id - ** from p->pnodes. - */ - pdf_write_pnode(p, *pnodes, parent_id, pages, n_pages, n_pages); - return *pnodes; - } - else - { - pdc_id node_id = pdc_alloc_id(p->out); - pdc_id kids[N_KIDS]; - int n_kids, rest; - int tpow = N_KIDS; - int i; - - /* tpow < n_pages <= tpow*N_KIDS - */ - while (tpow * N_KIDS < n_pages) - tpow *= N_KIDS; - - n_kids = n_pages / tpow; - rest = n_pages % tpow; - - for (i = 0; i < n_kids; ++i, pnodes += tpow / N_KIDS, pages += tpow) - { - kids[i] = pdf_make_tree(p, node_id, pnodes, pages, tpow); - } - - if (rest) - { - kids[i] = pdf_make_tree(p, node_id, pnodes, pages, rest); - ++n_kids; - } - - pdf_write_pnode(p, node_id, parent_id, kids, n_kids, n_pages); - return node_id; - } -} - -static pdc_id -pdf_write_pages_and_catalog(PDF *p) -{ - pdc_id pages_id; - pdc_id root_id; - pdc_id names_id; - - pages_id = - pdf_make_tree(p, PDC_BAD_ID, p->pnodes, p->pages+1, p->current_page); - - - names_id = pdf_write_names(p); - - root_id = pdc_begin_obj(p->out, PDC_NEW_ID); /* Catalog or Root object */ - - pdc_begin_dict(p->out); - pdc_puts(p->out, "/Type/Catalog\n"); - - - if (p->ViewerPreferences.flags || - p->ViewerPreferences.ViewArea != use_none || - p->ViewerPreferences.ViewClip != use_none || - p->ViewerPreferences.PrintArea != use_none || - p->ViewerPreferences.PrintClip != use_none) - { - pdc_printf(p->out, "/ViewerPreferences\n"); - pdc_begin_dict(p->out); - - if (p->ViewerPreferences.flags & HideToolbar) - pdc_printf(p->out, "/HideToolbar true\n"); - - if (p->ViewerPreferences.flags & HideMenubar) - pdc_printf(p->out, "/HideMenubar true\n"); - - if (p->ViewerPreferences.flags & HideWindowUI) - pdc_printf(p->out, "/HideWindowUI true\n"); - - if (p->ViewerPreferences.flags & FitWindow) - pdc_printf(p->out, "/FitWindow true\n"); - - if (p->ViewerPreferences.flags & CenterWindow) - pdc_printf(p->out, "/CenterWindow true\n"); - - if (p->ViewerPreferences.flags & DisplayDocTitle) - pdc_printf(p->out, "/DisplayDocTitle true\n"); - - if (p->ViewerPreferences.flags & NonFullScreenPageModeOutlines) - pdc_printf(p->out, "/NonFullScreenPageMode/UseOutlines\n"); - else if (p->ViewerPreferences.flags & NonFullScreenPageModeThumbs) - pdc_printf(p->out, "/NonFullScreenPageMode/UseThumbs\n"); - - if (p->ViewerPreferences.flags & DirectionR2L) - pdc_printf(p->out, "/Direction/R2L\n"); - - if (p->ViewerPreferences.ViewArea == use_media) - pdc_printf(p->out, "/ViewArea/MediaBox\n"); - if (p->ViewerPreferences.ViewArea == use_bleed) - pdc_printf(p->out, "/ViewArea/BleedBox\n"); - else if (p->ViewerPreferences.ViewArea == use_trim) - pdc_printf(p->out, "/ViewArea/TrimBox\n"); - else if (p->ViewerPreferences.ViewArea == use_art) - pdc_printf(p->out, "/ViewArea/ArtBox\n"); - - if (p->ViewerPreferences.ViewClip == use_media) - pdc_printf(p->out, "/ViewClip/MediaBox\n"); - if (p->ViewerPreferences.ViewClip == use_bleed) - pdc_printf(p->out, "/ViewClip/BleedBox\n"); - else if (p->ViewerPreferences.ViewClip == use_trim) - pdc_printf(p->out, "/ViewClip/TrimBox\n"); - else if (p->ViewerPreferences.ViewClip == use_art) - pdc_printf(p->out, "/ViewClip/ArtBox\n"); - - if (p->ViewerPreferences.PrintArea == use_media) - pdc_printf(p->out, "/PrintArea/MediaBox\n"); - if (p->ViewerPreferences.PrintArea == use_bleed) - pdc_printf(p->out, "/PrintArea/BleedBox\n"); - else if (p->ViewerPreferences.PrintArea == use_trim) - pdc_printf(p->out, "/PrintArea/TrimBox\n"); - else if (p->ViewerPreferences.PrintArea == use_art) - pdc_printf(p->out, "/PrintArea/ArtBox\n"); - - if (p->ViewerPreferences.PrintClip == use_media) - pdc_printf(p->out, "/PrintClip/MediaBox\n"); - if (p->ViewerPreferences.PrintClip == use_bleed) - pdc_printf(p->out, "/PrintClip/BleedBox\n"); - else if (p->ViewerPreferences.PrintClip == use_trim) - pdc_printf(p->out, "/PrintClip/TrimBox\n"); - else if (p->ViewerPreferences.PrintClip == use_art) - pdc_printf(p->out, "/PrintClip/ArtBox\n"); - - pdc_end_dict(p->out); /* ViewerPreferences */ - } - - /* - * specify the open action (display of the first page) - * default: top of the first page at default zoom level - */ - if (p->open_action.type != fitwindow || - p->open_action.zoom != -1 || - p->open_action.page != 0) { - pdc_puts(p->out, "/OpenAction"); - pdf_write_destination(p, &p->open_action); - pdc_puts(p->out, "\n"); - } - - /* - * specify the document's open mode - * default = open_none: open document with neither bookmarks nor - * thumbnails visible - */ - if (p->open_mode == open_bookmarks) { - pdc_printf(p->out, "/PageMode/UseOutlines\n"); - - } else if (p->open_mode == open_thumbnails) { - pdc_printf(p->out, "/PageMode/UseThumbs\n"); - - } else if (p->open_mode == open_fullscreen) { - pdc_printf(p->out, "/PageMode/FullScreen\n"); - } - - if (p->base) { - pdc_puts(p->out, "/URI<out, p->base, (int) strlen(p->base)); - pdc_end_dict(p->out); - } - - /* Pages object */ - pdc_printf(p->out, "/Pages %ld 0 R\n", pages_id); - - if (names_id != PDC_BAD_ID) { - pdc_printf(p->out, "/Names"); - pdc_begin_dict(p->out); /* Names */ - pdc_printf(p->out, "/Dests %ld 0 R\n", names_id); - pdc_end_dict(p->out); /* Names */ - } - - pdf_write_outline_root(p); - - pdc_end_dict(p->out); /* Catalog */ - pdc_end_obj(p->out); - - return root_id; -} - -static void -pdf_cleanup_contents(PDF *p) -{ - /* clean up all document-related stuff */ - if (p->contents_ids) { - pdc_free(p->pdc, p->contents_ids); - p->contents_ids = NULL; - } - if (p->pages) { - pdc_free(p->pdc, p->pages); - p->pages = NULL; - } - if (p->base) { - pdc_free(p->pdc, p->base); - p->base = NULL; - } - if (p->pnodes) { - pdc_free(p->pdc, p->pnodes); - p->pnodes = NULL; - } - - if (p->currtext) { - pdc_free(p->pdc, p->currtext); - p->currtext = NULL; - } - - pdf_cleanup_destination(p, &p->open_action); - pdf_cleanup_destination(p, &p->bookmark_dest); - - pdf_cleanup_info(p); - pdf_cleanup_fonts(p); - pdf_cleanup_outlines(p); - pdf_cleanup_annots(p); - pdf_cleanup_names(p); - pdf_cleanup_colorspaces(p); - pdf_cleanup_pattern(p); - pdf_cleanup_shadings(p); - pdf_cleanup_images(p); - pdf_cleanup_xobjects(p); - pdf_cleanup_extgstates(p); -} - -PDFLIB_API void PDFLIB_CALL -PDF_close(PDF *p) -{ - static const char fn[] = "PDF_close"; - - pdc_id info_id; - pdc_id root_id; - - if (!pdf_enter_api(p, fn, pdf_state_document, "(p[%p])\n", (void *) p)) - return; - - if (PDF_GET_STATE(p) != pdf_state_error) { - if (p->current_page == 0) - pdc_error(p->pdc, PDF_E_DOC_EMPTY, 0, 0, 0, 0); - - /* Write all pending document information up to xref table + trailer */ - info_id = pdf_write_info(p); - pdf_write_doc_fonts(p); /* font objects */ - pdf_write_doc_colorspaces(p); /* color space resources */ - pdf_write_doc_extgstates(p); /* ExtGState resources */ - root_id = pdf_write_pages_and_catalog(p); - pdf_write_outlines(p); - pdc_write_xref_and_trailer(p->out, info_id, root_id); - } - - pdc_close_output(p->out); - - /* Don't call pdc_cleanup_output() here because we may still need - * the buffer contents for PDF_get_buffer() after PDF_close(). - */ - pdf_cleanup_contents(p); - - /* UPR stuff not released here but in PDF_delete() */ - - PDF_SET_STATE(p, pdf_state_object); -} - -void -pdf_begin_contents_section(PDF *p) -{ - if (p->contents != c_none) - return; - - if (p->next_content >= p->contents_ids_capacity) { - p->contents_ids_capacity *= 2; - p->contents_ids = (pdc_id *) pdc_realloc(p->pdc, p->contents_ids, - sizeof(pdc_id) * p->contents_ids_capacity, - "pdf_begin_contents_section"); - } - - p->contents_ids[p->next_content] = pdc_begin_obj(p->out, PDC_NEW_ID); - p->contents = c_page; - pdc_begin_dict(p->out); - p->length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", p->length_id); - - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - pdc_end_dict(p->out); - - pdc_begin_pdfstream(p->out); - - p->next_content++; -} - -void -pdf_end_contents_section(PDF *p) -{ - if (p->contents == c_none) - return; - - pdf_end_text(p); - p->contents = c_none; - - pdc_end_pdfstream(p->out); - pdc_end_obj(p->out); - - pdc_put_pdfstreamlength(p->out, p->length_id); -} - -PDFLIB_API void PDFLIB_CALL -PDF_begin_page(PDF *p, float width, float height) -{ - static const char fn[] = "PDF_begin_page"; - - if (!pdf_enter_api(p, fn, pdf_state_document, "(p[%p], %g, %g)\n", - (void *) p, width, height)) - return; - - if (width <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "width", 0, 0, 0); - - if (height <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "height", 0, 0, 0); - - if ((height < PDF_ACRO4_MINPAGE || width < PDF_ACRO4_MINPAGE || - height > PDF_ACRO4_MAXPAGE || width > PDF_ACRO4_MAXPAGE)) - pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO4, 0, 0, 0, 0); - - - if (++(p->current_page) >= p->pages_capacity) - pdf_grow_pages(p); - - /* no id has been preallocated */ - if (p->pages[p->current_page] == PDC_BAD_ID) - p->pages[p->current_page] = pdc_alloc_id(p->out); - - p->height = height; - p->width = width; - p->thumb_id = PDC_BAD_ID; - p->next_content = 0; - p->contents = c_none; - p->sl = 0; - - pdc_rect_init(&p->CropBox, (float) 0, (float) 0, (float) 0, (float) 0); - pdc_rect_init(&p->BleedBox, (float) 0, (float) 0, (float) 0, (float) 0); - pdc_rect_init(&p->TrimBox, (float) 0, (float) 0, (float) 0, (float) 0); - pdc_rect_init(&p->ArtBox, (float) 0, (float) 0, (float) 0, (float) 0); - - PDF_SET_STATE(p, pdf_state_page); - - pdf_init_page_annots(p); - pdf_init_tstate(p); - pdf_init_gstate(p); - pdf_init_cstate(p); - - pdf_begin_contents_section(p); - - - /* top-down y coordinates */ - pdf_set_topdownsystem(p, height); -} - -PDFLIB_API void PDFLIB_CALL -PDF_end_page(PDF *p) -{ - static const char fn[] = "PDF_end_page"; - int idx; - - - if (!pdf_enter_api(p, fn, pdf_state_page, "(p[%p])\n", (void *) p)) - return; - - - /* check whether PDF_save() and PDF_restore() calls are balanced */ - if (p->sl > 0) - pdc_error(p->pdc, PDF_E_GSTATE_UNMATCHEDSAVE, 0, 0, 0, 0); - - /* restore text parameter and color defaults for out-of-page usage. - */ - pdf_init_tstate(p); - pdf_init_cstate(p); - - pdf_end_contents_section(p); - - /* Page object */ - pdc_begin_obj(p->out, p->pages[p->current_page]); - - pdc_begin_dict(p->out); - pdc_puts(p->out, "/Type/Page\n"); - pdc_printf(p->out, "/Parent %ld 0 R\n", pdf_get_pnode_id(p)); - - p->res_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Resources %ld 0 R\n", p->res_id); - - pdc_printf(p->out, "/MediaBox[0 0 %f %f]\n", p->width, p->height); - - - if (!pdc_rect_isnull(&p->CropBox)) - { - if (p->CropBox.urx <= p->CropBox.llx || - p->CropBox.ury <= p->CropBox.lly) - pdc_error(p->pdc, PDF_E_PAGE_BADBOX, "CropBox", - pdc_errprintf(p->pdc, "%f %f %f %f", - p->CropBox.llx, p->CropBox.lly, - p->CropBox.urx, p->CropBox.ury), 0, 0); - - pdc_printf(p->out, "/CropBox[%f %f %f %f]\n", - p->CropBox.llx, p->CropBox.lly, p->CropBox.urx, p->CropBox.ury); - } - - if (!pdc_rect_isnull(&p->BleedBox)) - { - if (p->BleedBox.urx <= p->BleedBox.llx || - p->BleedBox.ury <= p->BleedBox.lly) - pdc_error(p->pdc, PDF_E_PAGE_BADBOX, "BleedBox", - pdc_errprintf(p->pdc, "%f %f %f %f", - p->BleedBox.llx, p->BleedBox.lly, - p->BleedBox.urx, p->BleedBox.ury), 0, 0); - - pdc_printf(p->out, "/BleedBox[%f %f %f %f]\n", - p->BleedBox.llx, p->BleedBox.lly, p->BleedBox.urx, p->BleedBox.ury); - } - - if (!pdc_rect_isnull(&p->TrimBox)) - { - if (p->TrimBox.urx <= p->TrimBox.llx || - p->TrimBox.ury <= p->TrimBox.lly) - pdc_error(p->pdc, PDF_E_PAGE_BADBOX, "TrimBox", - pdc_errprintf(p->pdc, "%f %f %f %f", - p->TrimBox.llx, p->TrimBox.lly, - p->TrimBox.urx, p->TrimBox.ury), 0, 0); - - pdc_printf(p->out, "/TrimBox[%f %f %f %f]\n", - p->TrimBox.llx, p->TrimBox.lly, p->TrimBox.urx, p->TrimBox.ury); - } - - if (!pdc_rect_isnull(&p->ArtBox)) - { - if (p->ArtBox.urx <= p->ArtBox.llx || - p->ArtBox.ury <= p->ArtBox.lly) - pdc_error(p->pdc, PDF_E_PAGE_BADBOX, "ArtBox", - pdc_errprintf(p->pdc, "%f %f %f %f", - p->ArtBox.llx, p->ArtBox.lly, - p->ArtBox.urx, p->ArtBox.ury), 0, 0); - - pdc_printf(p->out, "/ArtBox[%f %f %f %f]\n", - p->ArtBox.llx, p->ArtBox.lly, p->ArtBox.urx, p->ArtBox.ury); - } - - /* - * The duration can be placed in the transition dictionary (/D) - * or in the page dictionary (/Dur). We put it here so it can - * be used without setting a transition effect. - */ - - if (p->duration > 0) - pdc_printf(p->out, "/Dur %f\n", p->duration); - - pdf_write_page_transition(p); - - pdc_puts(p->out, "/Contents["); - for (idx = 0; idx < p->next_content; idx++) { - pdc_printf(p->out, "%ld 0 R", p->contents_ids[idx]); - pdc_putc(p->out, (char) (idx + 1 % 8 ? PDF_SPACE : PDF_NEWLINE)); - } - pdc_puts(p->out, "]\n"); - - /* Thumbnail image */ - if (p->thumb_id != PDC_BAD_ID) - pdc_printf(p->out, "/Thumb %ld 0 R\n", p->thumb_id); - - pdf_write_annots_root(p); - - pdc_end_dict(p->out); /* Page object */ - pdc_end_obj(p->out); - - pdf_write_page_annots(p); /* Annotation dicts */ - - pdc_begin_obj(p->out, p->res_id); /* resource object */ - pdc_begin_dict(p->out); /* resource dict */ - - pdf_write_page_fonts(p); /* Font resources */ - - pdf_write_page_colorspaces(p); /* Color space resources */ - - pdf_write_page_pattern(p); /* Pattern resources */ - - pdf_write_page_shadings(p); /* Shading resources */ - - pdf_write_xobjects(p); /* XObject resources */ - - pdf_write_page_extgstates(p); /* ExtGState resources */ - - pdc_end_dict(p->out); /* resource dict */ - pdc_end_obj(p->out); /* resource object */ - - /* Free all page-related resources */ - pdf_cleanup_page_annots(p); - - PDF_SET_STATE(p, pdf_state_document); - - if (p->flush & pdf_flush_page) - pdc_flush_stream(p->out); -} - -void -pdf_grow_pages(PDF *p) -{ - int i; - - p->pages_capacity *= 2; - p->pages = (pdc_id *) pdc_realloc(p->pdc, p->pages, - sizeof(pdc_id) * p->pages_capacity, "pdf_grow_pages"); - for (i = p->pages_capacity/2; i < p->pages_capacity; i++) - p->pages[i] = PDC_BAD_ID; -} - -/* ------------------- exception handling ------------------- */ - -PDFLIB_API pdf_jmpbuf * PDFLIB_CALL -pdf_jbuf(PDF *p) -{ - return (pdf_jmpbuf *) pdc_jbuf(p->pdc); -} - -PDFLIB_API void PDFLIB_CALL -pdf_exit_try(PDF *p) -{ - if (p == NULL || p->magic != PDC_MAGIC) - return; - - pdc_exit_try(p->pdc); -} - -PDFLIB_API int PDFLIB_CALL -pdf_catch(PDF *p) -{ - if (p == NULL || p->magic != PDC_MAGIC) - return pdc_false; - - return pdc_catch_extern(p->pdc); -} - -PDFLIB_API void PDFLIB_CALL -pdf_rethrow(PDF *p) -{ - if (p == NULL || p->magic != PDC_MAGIC) - return; - - pdc_rethrow(p->pdc); -} - -PDFLIB_API void PDFLIB_CALL -pdf_throw(PDF *p, const char *parm1, const char *parm2, const char *parm3) -{ - pdc_enter_api(p->pdc, "pdf_throw"); - - pdc_error(p->pdc, PDF_E_INT_WRAPPER, parm1, parm2, parm3, NULL); -} - -/* -------------------------- handle check -------------------------------*/ - -void -pdf_check_handle(PDF *p, int handle, pdc_opttype type) -{ - int minval = 0, maxval = 0; - pdc_bool empty = pdc_false; - - switch (type) - { - case pdc_colorhandle: - maxval = p->colorspaces_number - 1; - break; - - - case pdc_fonthandle: - maxval = p->fonts_number - 1; - break; - - case pdc_gstatehandle: - maxval = p->extgstates_number; - break; - - - case pdc_imagehandle: - maxval = p->images_capacity - 1; - if (handle >= minval && handle <= maxval && - (!p->images[handle].in_use || - p->xobjects[p->images[handle].no].type == pdi_xobject)) - empty = pdc_true; - break; - - case pdc_pagehandle: - maxval = p->images_capacity - 1; - if (handle >= minval && handle <= maxval && - (!p->images[handle].in_use || - p->xobjects[p->images[handle].no].type != pdi_xobject)) - empty = pdc_true; - break; - - case pdc_patternhandle: - maxval = p->pattern_number - 1; - break; - - case pdc_shadinghandle: - maxval = p->shadings_number - 1; - break; - - default: - break; - } - - if (handle < minval || handle > maxval || empty) - { - const char *stemp1 = pdc_errprintf(p->pdc, "%s", - pdc_get_handletype(type)); - const char *stemp2 = pdc_errprintf(p->pdc, "%d", - p->hastobepos ? handle + 1 : handle); - pdc_error(p->pdc, PDC_E_ILLARG_HANDLE, stemp1, stemp2, 0, 0); - } -} diff --git a/src/libs/pdflib/libs/pdflib/p_block.c b/src/libs/pdflib/libs/pdflib/p_block.c deleted file mode 100644 index 8bf7ac0482..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_block.c +++ /dev/null @@ -1,83 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_block.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Block processing routines (require the PDI library) - * - */ - -#define P_BLOCK_C - -#include "p_intern.h" -#include "p_font.h" -#include "p_image.h" - - -PDFLIB_API int PDFLIB_CALL -PDF_fill_textblock(PDF *p, -int page, const char *blockname, const char *text, int len, const char *optlist) -{ - static const char fn[] = "PDF_fill_textblock"; - - if (!pdf_enter_api(p, fn, - (pdf_state) pdf_state_content, - "(p[%p], %d, \"%s\", \"%s\", %d, \"%s\")", - (void *) p, page, blockname, - pdc_strprint(p->pdc, text, len), len, optlist)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - pdc_error(p->pdc, PDF_E_UNSUPP_BLOCK, 0, 0, 0, 0); - - PDF_RETURN_BOOLEAN(p, -1); -} - -PDFLIB_API int PDFLIB_CALL -PDF_fill_imageblock(PDF *p, -int page, const char *blockname, int image, const char *optlist) -{ - static const char fn[] = "PDF_fill_imageblock"; - - if (!pdf_enter_api(p, fn, - (pdf_state) pdf_state_content, - "(p[%p], %d, \"%s\", %d, \"%s\")", - (void *) p, page, blockname, image, optlist)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - pdc_error(p->pdc, PDF_E_UNSUPP_BLOCK, 0, 0, 0, 0); - - PDF_RETURN_BOOLEAN(p, -1); -} - -PDFLIB_API int PDFLIB_CALL -PDF_fill_pdfblock(PDF *p, -int page, const char *blockname, int contents, const char *optlist) -{ - static const char fn[] = "PDF_fill_pdfblock"; - - if (!pdf_enter_api(p, fn, - (pdf_state) pdf_state_content, - "(p[%p], %d, \"%s\", %d, \"%s\")", - (void *) p, page, blockname, contents, optlist)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - pdc_error(p->pdc, PDF_E_UNSUPP_BLOCK, 0, 0, 0, 0); - - PDF_RETURN_BOOLEAN(p, -1); -} - diff --git a/src/libs/pdflib/libs/pdflib/p_bmp.c b/src/libs/pdflib/libs/pdflib/p_bmp.c deleted file mode 100644 index 67adccfb7b..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_bmp.c +++ /dev/null @@ -1,597 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_bmp.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * BMP processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -#ifndef PDF_BMP_SUPPORTED - -pdc_bool -pdf_is_BMP_file(PDF *p, pdc_file *fp) -{ - (void) p; - (void) fp; - - return pdc_false; -} - -int -pdf_process_BMP_data( - PDF *p, - int imageslot) -{ - (void) imageslot; - - pdc_warning(p->pdc, PDF_E_UNSUPP_IMAGE, "BMP", 0, 0, 0); - return -1; -} - -#else /* !PDF_BMP_SUPPORTED */ - -/* for documentation only */ -#if 0 - -/* BMP file header structure */ -typedef struct -{ - pdc_ushort bfType; /* Magic number for file */ - pdc_ulong bfSize; /* Size of file */ - pdc_ushort bfReserved1; /* Reserved */ - pdc_ushort bfReserved2; /* ... */ - pdc_ulong bfOffBits; /* Offset to bitmap data */ -} -BITMAPFILEHEADER; - -/* BMP file info structure */ -typedef struct -{ - pdc_ulong biSize; /* Size of info header */ - pdc_long biWidth; /* Width of image */ - pdc_long biHeight; /* Height of image */ - pdc_ushort biPlanes; /* Number of color planes */ - pdc_ushort biBitCount; /* Number of bits per pixel */ - pdc_ulong biCompression; /* Type of compression to use */ - pdc_ulong biSizeImage; /* Size of image data */ - pdc_long biXPelsPerMeter; /* X pixels per meter */ - pdc_long biYPelsPerMeter; /* Y pixels per meter */ - pdc_ulong biClrUsed; /* Number of colors used */ - pdc_ulong biClrImportant; /* Number of important colors */ -} -BITMAPINFOHEADER; - -#endif - -#define PDF_GET_BYTE(pos) *pos, pos += sizeof(pdc_byte) -#define PDF_GET_SHORT(pos) pdc_get_le_short(pos), pos += sizeof(pdc_short) -#define PDF_GET_USHORT(pos) pdc_get_le_ushort(pos), pos += sizeof(pdc_ushort) -#define PDF_GET_LONG(pos) pdc_get_le_long(pos), pos += sizeof(pdc_long) -#define PDF_GET_ULONG(pos) pdc_get_le_ulong(pos), pos += sizeof(pdc_ulong) - -#define PDF_BMP_STRING "\102\115" /* "BM" */ - -#define PDF_BMP_RGB 0 /* No compression - straight BGR data */ -#define PDF_BMP_RLE8 1 /* 8-bit run-length compression */ -#define PDF_BMP_RLE4 2 /* 4-bit run-length compression */ -#define PDF_BMP_BITFIELDS 3 /* RGB bitmap with RGB masks */ - -#define PDF_BMP_FILE_HEADSIZE 14 /* File header size */ -#define PDF_BMP_INFO_HEAD2SIZE 12 /* Info header size BMP Version 2 */ -#define PDF_BMP_INFO_HEAD3SIZE 40 /* Info header size BMP Version 3 */ -#define PDF_BMP_INFO_HEAD4SIZE 108 /* Info header size BMP Version 4 */ - -static void -pdf_data_source_BMP_init(PDF *p, PDF_data_source *src) -{ - static const char *fn = "pdf_data_source_BMP_init"; - pdf_image *image = (pdf_image *) src->private_data; - - src->buffer_length = image->info.bmp.rowbytes_pdf; - src->buffer_start = (pdc_byte *) - pdc_calloc(p->pdc, image->info.bmp.rowbytes_pad, fn); - src->bytes_available = image->info.bmp.rowbytes_pdf; - src->next_byte = src->buffer_start; -} - -static pdc_bool -pdf_data_source_BMP_fill(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - pdc_byte c; - int i; - - /* No compression */ - if (image->info.bmp.compression == PDF_BMP_RGB) - { - size_t avail; - - /* Read 1 padded row from file */ - avail = pdc_fread(src->buffer_start, 1, image->info.bmp.rowbytes_pad, - image->fp); - if (avail > 0) - { - /* Fill up remaining bytes */ - if (avail < image->info.bmp.rowbytes_pad) - { - for (i = (int) avail; i < (int) src->buffer_length; i++) - src->buffer_start[i] = 0; - } - - /* Swap red and blue */ - if (image->colorspace == DeviceRGB) - { - for (i = 0; i < (int) src->bytes_available; i += 3) - { - c = src->buffer_start[i]; - src->buffer_start[i] = src->buffer_start[i + 2]; - src->buffer_start[i + 2] = c; - } - } - } - else - { - src->bytes_available = 0; - } - } - - /* Compression methods RLE8 and RLE4 */ - else - { - int col = 0, fnibble = 1; - pdc_byte cc, ccc, cn[2], ccn; - - if (image->info.bmp.pos < image->info.bmp.end) - { - if (image->info.bmp.skiprows) - { - for (; col < (int) image->info.bmp.rowbytes; col++) - src->buffer_start[col] = 0; - image->info.bmp.skiprows--; - } - else - { - while (1) - { - c = *image->info.bmp.pos; - image->info.bmp.pos++; - if (image->info.bmp.pos >= image->info.bmp.end) - goto PDF_BMP_CORRUPT; - cc = *image->info.bmp.pos; - - if (c != 0) - { - /* Repeat c time pixel value */ - if (image->info.bmp.compression == PDF_BMP_RLE8) - { - for (i = 0; i < (int) c; i++) - { - if (col >= (int) image->info.bmp.rowbytes) - goto PDF_BMP_CORRUPT; - src->buffer_start[col] = cc; - col++; - } - } - else - { - cn[0] = (pdc_byte) ((cc & 0xF0) >> 4); - cn[1] = (pdc_byte) (cc & 0x0F); - for (i = 0; i < (int) c; i++) - { - if (col >= (int) image->info.bmp.rowbytes) - goto PDF_BMP_CORRUPT; - ccn = cn[i%2]; - if (fnibble) - { - fnibble = 0; - src->buffer_start[col] = - (pdc_byte) (ccn << 4); - } - else - { - fnibble = 1; - src->buffer_start[col] |= ccn; - col++; - } - } - } - } - else if (cc > 2) - { - /* cc different pixel values */ - if (image->info.bmp.compression == PDF_BMP_RLE8) - { - for (i = 0; i < (int) cc; i++) - { - image->info.bmp.pos++; - if (image->info.bmp.pos >= image->info.bmp.end) - goto PDF_BMP_CORRUPT; - if (col >= (int) image->info.bmp.rowbytes) - goto PDF_BMP_CORRUPT; - src->buffer_start[col] = *image->info.bmp.pos; - col++; - } - } - else - { - for (i = 0; i < (int) cc; i++) - { - if (!(i%2)) - { - image->info.bmp.pos++; - if (image->info.bmp.pos >= - image->info.bmp.end) - goto PDF_BMP_CORRUPT; - ccc = *image->info.bmp.pos; - cn[0] = (pdc_byte) ((ccc & 0xF0) >> 4); - cn[1] = (pdc_byte) (ccc & 0x0F); - } - if (col >= (int) image->info.bmp.rowbytes) - goto PDF_BMP_CORRUPT; - ccn = cn[i%2]; - if (fnibble) - { - fnibble = 0; - src->buffer_start[col] = - (pdc_byte) (ccn << 4); - } - else - { - fnibble = 1; - src->buffer_start[col] |= ccn; - col++; - } - } - if (cc % 2) cc++; - cc /= 2; - } - - /* Odd number of bytes */ - if (cc % 2) - image->info.bmp.pos++; - } - else if (cc < 2) - { - /* End of scan line or end of bitmap data*/ - for (; col < (int) image->info.bmp.rowbytes; col++) - src->buffer_start[col] = 0; - } - else if (cc == 2) - { - int cola; - - /* Run offset marker */ - if (image->info.bmp.pos >= image->info.bmp.end - 1) - goto PDF_BMP_CORRUPT; - image->info.bmp.pos++; - c = *image->info.bmp.pos; - image->info.bmp.pos++; - cc = *image->info.bmp.pos; - - /* Fill current row */ - cola = col; - for (; col < (int) image->info.bmp.rowbytes; col++) - src->buffer_start[col] = 0; - if (col - cola != (int) c) - goto PDF_BMP_CORRUPT; - - /* Number of rows to be skipped */ - image->info.bmp.skiprows = (size_t) cc; - } - - image->info.bmp.pos++; - if (col >= (int) image->info.bmp.rowbytes) - { - /* Skip end of scan line marker */ - if (image->info.bmp.pos < image->info.bmp.end - 1) - { - c = *image->info.bmp.pos; - cc = *(image->info.bmp.pos + 1); - if(cc == 0 && cc <= 1) - image->info.bmp.pos += 2; - } - break; - } - } - } - } - else - { - src->bytes_available = 0; - } - } - - return (src->bytes_available ? pdc_true : pdc_false); - - PDF_BMP_CORRUPT: - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "BMP", - pdc_errprintf(p->pdc, "%s", image->filename), 0, 0); - src->bytes_available = 0; - return pdc_false; -} - -static void -pdf_data_source_BMP_terminate(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - - pdc_free(p->pdc, (void *) src->buffer_start); - if (image->info.bmp.bitmap != NULL) - pdc_free(p->pdc, (void *) image->info.bmp.bitmap); -} - -pdc_bool -pdf_is_BMP_file(PDF *p, pdc_file *fp) -{ - pdc_byte buf[2]; - - (void) p; - - if (pdc_fread(buf, 1, 2, fp) < 2 || - strncmp((const char *) buf, PDF_BMP_STRING, 2) != 0) - { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - return pdc_true; -} - -int -pdf_process_BMP_data( - PDF *p, - int imageslot) -{ - static const char *fn = "pdf_process_BMP_data"; - pdc_byte buf[256], *pos, *cmap, bdummy; - pdf_image *image = &p->images[imageslot]; - pdc_file *fp = image->fp; - pdc_ulong uldummy, infosize = 0, offras = 0, planes = 0, bitmapsize = 0; - pdc_ulong ncolors = 0, importcolors = 0, compression = PDF_BMP_RGB; - pdc_ushort usdummy, bpp = 0; - pdc_long width = 0, height = 0, dpi_x = 0, dpi_y = 0; - size_t nbytes; - pdf_colorspace cs; - pdf_colormap colormap; - int i, slot, colsize = 0, errcode = 0; - - /* Error reading magic number or not a BMP file */ - if (pdf_is_BMP_file(p, image->fp) == pdc_false) - { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_BMP_ERROR; - } - - /* read file header without FileType field + */ - /* Size field of info header */ - pos = &buf[2]; - nbytes = PDF_BMP_FILE_HEADSIZE - 2 + 4; - if (!PDC_OK_FREAD(fp, pos, nbytes)) - { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_BMP_ERROR; - } - uldummy = PDF_GET_ULONG(pos); - usdummy = PDF_GET_USHORT(pos); - usdummy = PDF_GET_USHORT(pos); - offras = PDF_GET_ULONG(pos); - infosize = PDF_GET_ULONG(pos); - - /* no support of later version than 3 */ - if (infosize != PDF_BMP_INFO_HEAD2SIZE && - infosize != PDF_BMP_INFO_HEAD3SIZE) - { - errcode = PDF_E_BMP_VERSUNSUPP; - goto PDF_BMP_ERROR; - } - - /* info header */ - pos = buf; - nbytes = infosize - 4; - if (!PDC_OK_FREAD(fp, pos, nbytes)) - { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_BMP_ERROR; - } - if (infosize == PDF_BMP_INFO_HEAD2SIZE) - { - width = PDF_GET_SHORT(pos); - height = PDF_GET_SHORT(pos); - planes = PDF_GET_USHORT(pos); - bpp = PDF_GET_USHORT(pos); - colsize = 3; - } - else if (infosize == PDF_BMP_INFO_HEAD3SIZE) - { - width = PDF_GET_LONG(pos); - height = PDF_GET_LONG(pos); - planes = PDF_GET_USHORT(pos); - bpp = PDF_GET_USHORT(pos); - compression = PDF_GET_ULONG(pos); - bitmapsize = PDF_GET_ULONG(pos); - dpi_x = PDF_GET_LONG(pos); - dpi_y = PDF_GET_LONG(pos); - ncolors = PDF_GET_ULONG(pos); - importcolors = PDF_GET_ULONG(pos); - colsize = 4; - } - - /* only uncompressed BMP images */ - if (compression > PDF_BMP_RLE4) - { - errcode = PDF_E_BMP_COMPUNSUPP; - goto PDF_BMP_ERROR; - } - image->bpc = bpp; - image->width = (float) width; - image->height = (float) -height; - image->dpi_x = (float) (PDC_INCH2METER * dpi_x); - image->dpi_y = (float) (PDC_INCH2METER * dpi_y); - - /* color map only for bpp = 1, 4, 8 */ - if (bpp < 16) - { - if (!ncolors) - ncolors = (pdc_ulong) (1 << bpp); - if (ncolors > (offras - PDF_BMP_FILE_HEADSIZE - infosize) / colsize) - { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_BMP_ERROR; - } - - /* allocate and read color map */ - nbytes = colsize * ncolors; - cmap = (pdc_byte *) pdc_malloc(p->pdc, nbytes, fn); - if (!PDC_OK_FREAD(fp, cmap, nbytes)) - { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_BMP_ERROR; - } - - /* set color map (bgr) */ - pos = cmap; - for (i = 0; i < (int) ncolors; i++) - { - colormap[i][2] = PDF_GET_BYTE(pos); - colormap[i][1] = PDF_GET_BYTE(pos); - colormap[i][0] = PDF_GET_BYTE(pos); - if (infosize == PDF_BMP_INFO_HEAD3SIZE) - { - bdummy = PDF_GET_BYTE(pos); - } - } - pdc_free(p->pdc, cmap); - - image->components = 1; - - cs.type = Indexed; - cs.val.indexed.base = DeviceRGB; - cs.val.indexed.palette_size = (int) ncolors; - cs.val.indexed.colormap = &colormap; - cs.val.indexed.colormap_id = PDC_BAD_ID; - slot = pdf_add_colorspace(p, &cs, pdc_false); - - image->colorspace = (pdf_colorspacetype) slot; - - - } - else - { - image->colorspace = DeviceRGB; - image->components = 3; - image->bpc = 8; - } - - if (image->imagemask) - { - if (image->components != 1) { - errcode = PDF_E_IMAGE_BADMASK; - goto PDF_BMP_ERROR; - } - - if (p->compatibility <= PDC_1_3) { - if (image->components != 1 || image->bpc != 1) { - errcode = PDF_E_IMAGE_MASK1BIT13; - goto PDF_BMP_ERROR; - } - } else if (image->bpc > 1) { - /* images with more than one bit will be written as /SMask, - * and don't require an /ImageMask entry. - */ - image->imagemask = pdc_false; - } - image->colorspace = DeviceGray; - } - - - /* we invert this flag later */ - if (image->ignoremask) - image->transparent = pdc_true; - - /* numbers of bytes per row */ - image->info.bmp.rowbytes_pdf = (size_t) ((bpp * width + 7) / 8); - if (bpp == 4) - image->info.bmp.rowbytes = image->info.bmp.rowbytes_pdf; - else - image->info.bmp.rowbytes = (size_t) ((bpp * width) / 8); - image->info.bmp.rowbytes_pad = (size_t) (4 * ((bpp * width + 31) / 32)); - image->info.bmp.compression = compression; - image->info.bmp.skiprows = 0; - image->info.bmp.bitmap = NULL; - - /* read whole bitmap */ - if (image->info.bmp.compression != PDF_BMP_RGB) - { - image->info.bmp.bitmap = - (pdc_byte *) pdc_malloc(p->pdc, bitmapsize, fn); - if (!PDC_OK_FREAD(fp, image->info.bmp.bitmap, bitmapsize)) - { - pdc_free(p->pdc, (void *) image->info.bmp.bitmap); - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_BMP_ERROR; - } - image->info.bmp.pos = image->info.bmp.bitmap; - image->info.bmp.end = image->info.bmp.bitmap + bitmapsize; - } - - /* offset bitmap data */ - pdc_fseek(image->fp, (pdc_long) offras, SEEK_SET); - - /* put image data */ - image->src.init = pdf_data_source_BMP_init; - image->src.fill = pdf_data_source_BMP_fill; - image->src.terminate = pdf_data_source_BMP_terminate; - image->src.private_data = (void *) image; - - image->use_raw = pdc_false; - image->in_use = pdc_true; - - pdf_put_image(p, imageslot, pdc_true); - - return imageslot; - - PDF_BMP_ERROR: - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - switch (errcode) - { - case PDF_E_IMAGE_MASK1BIT13: - case PDF_E_BMP_VERSUNSUPP: - case PDF_E_BMP_COMPUNSUPP: - case PDF_E_IMAGE_BADMASK: - pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0); - break; - - case PDC_E_IO_BADFORMAT: - pdc_set_errmsg(p->pdc, errcode, stemp, "BMP", 0, 0); - break; - - case PDF_E_IMAGE_CORRUPT: - pdc_set_errmsg(p->pdc, errcode, "BMP", stemp, 0, 0); - break; - - case 0: /* error code and message already set */ - break; - } - } - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; -} - -#endif /* PDF_BMP_SUPPORTED */ - diff --git a/src/libs/pdflib/libs/pdflib/p_ccitt.c b/src/libs/pdflib/libs/pdflib/p_ccitt.c deleted file mode 100644 index 866c8c2c61..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_ccitt.c +++ /dev/null @@ -1,190 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_ccitt.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * CCITT (Fax G3 and G4) processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -/* - * Do a bit-reversal of all bytes in the buffer. - * This is supported for some clients which provide - * CCITT-compressed data in a byte-reversed format. - */ - -static void -pdf_reverse_bit_order(unsigned char *buffer, size_t size) -{ - size_t i; - - /* table for fast byte reversal */ - static const pdc_byte reverse[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 - }; - - if (buffer != NULL) { - for (i = 0; i < size; i++) { - buffer[i] = reverse[buffer[i]]; - } - } -} - -static void -pdf_data_source_ccitt_raw_init(PDF *p, PDF_data_source *src) -{ - (void) p; - - src->bytes_available = 0; -} - -static pdc_bool -pdf_data_source_ccitt_raw_fill(PDF *p, PDF_data_source *src) -{ - pdf_image *image; - pdc_bool ismem; - - (void) p; - - if (src->bytes_available) - return pdc_false; - - image = (pdf_image *) src->private_data; - - src->buffer_start = (pdc_byte *) - pdc_freadall(image->fp, (size_t *) &src->buffer_length, &ismem); - - if (src->buffer_length == 0) - return pdc_false; - - src->bytes_available = src->buffer_length; - src->next_byte = src->buffer_start; - - if (image->info.ccitt.BitReverse) - pdf_reverse_bit_order(src->buffer_start, src->bytes_available); - - if (ismem) - src->buffer_length = 0; - - return pdc_true; -} - -static void -pdf_data_source_ccitt_raw_terminate(PDF *p, PDF_data_source *src) -{ - if (src->buffer_length) - pdc_free(p->pdc, (void *) src->buffer_start); -} - -static int -pdf_process_ccitt_raw_data(PDF *p, int imageslot) -{ - pdf_image *image = &p->images[imageslot]; - const char *stemp = NULL; - - /* check data length for raw uncompressed images */ - if (image->compression == none && image->fp) - { - size_t length = pdc_file_size(image->fp); - if (length != (size_t)(image->height_pixel * - ((image->width_pixel * image->components * image->bpc + 7) / 8))) - { - stemp = pdc_errprintf(p->pdc, "%s", image->filename); - - pdc_set_errmsg(p->pdc, PDF_E_RAW_ILLSIZE, - pdc_errprintf(p->pdc, "%d", length), stemp, 0, 0); - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - } - - - - if (image->reference == pdf_ref_direct) - { - image->src.init = pdf_data_source_ccitt_raw_init; - image->src.fill = pdf_data_source_ccitt_raw_fill; - image->src.terminate = pdf_data_source_ccitt_raw_terminate; - image->src.private_data = (void *) image; - } - - image->in_use = pdc_true; /* mark slot as used */ - - if (image->doinline) - pdf_put_inline_image(p, imageslot); - else - pdf_put_image(p, imageslot, pdc_true); - - return imageslot; -} - -int -pdf_process_CCITT_data(PDF *p, int imageslot) -{ - pdf_image *image = &p->images[imageslot]; - - /* CCITT specific information */ - image->info.ccitt.BitReverse = image->bitreverse; - image->compression = ccitt; - image->use_raw = pdc_true; - - return pdf_process_ccitt_raw_data(p, imageslot); -} - -int -pdf_process_RAW_data(PDF *p, int imageslot) -{ - pdf_image *image = &p->images[imageslot]; - - /* RAW specific information */ - image->info.ccitt.BitReverse = 0; - image->compression = none; - - return pdf_process_ccitt_raw_data(p, imageslot); -} diff --git a/src/libs/pdflib/libs/pdflib/p_cid.c b/src/libs/pdflib/libs/pdflib/p_cid.c deleted file mode 100644 index 8fb922b00e..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_cid.c +++ /dev/null @@ -1,185 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_cid.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib CID font handling routines - * - */ - -#include "p_intern.h" -#include "p_font.h" -#include "p_cid.h" - -/* returns font handle, -** or -1 if no font found, -** or -2 in case of an error. -*/ -int -pdf_handle_cidfont(PDF *p, const char *fontname, const char *encoding) -{ - pdc_font *font = &p->fonts[p->fonts_number]; - int slot, cmap, metric; - - /* - * Look whether font is already in the cache. - * If font with same name and encoding is found, - * return its descriptor. - */ - - for (slot = 0; slot < p->fonts_number; slot++) { - if (p->fonts[slot].encoding == pdc_cid && - p->fonts[slot].style == font->style && - !strcmp(p->fonts[slot].name, fontname) && - !strcmp(p->fonts[slot].cmapname, encoding)) - return slot; - } - - /* Check the requested CMap */ - for (cmap = 0; cmap < NUMBER_OF_CMAPS; cmap++) - if (!strcmp(cmaps[cmap].name, encoding)) - break; - - /* Unknown CMap */ - if (cmap == NUMBER_OF_CMAPS) - return -1; - - /* Check whether this CMap is supported in the desired PDF version */ - if (cmaps[cmap].compatibility > p->compatibility) - { - pdc_set_errmsg(p->pdc, PDF_E_DOC_PDFVERSION, - encoding, pdc_errprintf(p->pdc, "%d.%d", - p->compatibility/10, p->compatibility % 10), 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -2; - } - - /* Check whether the font name is among the known CID fonts */ - for (metric = 0; metric < SIZEOF_CID_METRICS; metric++) { - if (!strcmp(pdf_cid_metrics[metric].name, fontname)) - break; - } - - /* Unknown font */ - if (metric == SIZEOF_CID_METRICS) - { - pdc_set_errmsg(p->pdc, PDF_E_CJK_NOSTANDARD, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -2; - } - - /* Selected CMap and font don't match */ - if (cmaps[cmap].charcoll != cc_identity && - cmaps[cmap].charcoll != pdf_cid_metrics[metric].charcoll) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, fontname, encoding, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -2; - } - - /* For Unicode capable language wrappers only UCS2 CMaps allowed */ - if (cmaps[cmap].codesize == 0 && p->textformat == pdc_auto2) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_NEEDUCS2, encoding, fontname, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -2; - } - - p->fonts_number++; - - /* Code size of CMap */ - font->codeSize = 0; - font->numOfCodes = 0; - - /* Fill up the font struct */ - pdc_fill_font_metric(p->pdc, font, &pdf_cid_metrics[metric]); - - /* Now everything is fine; fill the remaining entries */ - font->encoding = pdc_cid; - font->cmapname = pdc_strdup(p->pdc, encoding); - font->ttname = pdc_strdup(p->pdc, fontname); - font->apiname = pdc_strdup(p->pdc, fontname); - font->obj_id = pdc_alloc_id(p->out); - font->embedding = pdc_false; - font->kerning = pdc_false; - font->subsetting = pdc_false; - font->autocidfont = pdc_false; - font->unicodemap = pdc_false; - font->autosubsetting = pdc_false; - - /* return valid font descriptor */ - return slot; -} - -const char * -pdf_get_ordering_cid(PDF *p, pdc_font *font) -{ - (void) p; - return pdc_get_keyword(font->charcoll, charcoll_names); /* in ASCII */ -} - -int -pdf_get_supplement_cid(PDF *p, pdc_font *font) -{ - int cmap, supplement; - - for (cmap = 0; cmap < NUMBER_OF_CMAPS; cmap++) - if (!strcmp(cmaps[cmap].name, font->cmapname)) - break; - - switch (p->compatibility) - { - case PDC_1_3: - supplement = cmaps[cmap].supplement13; - break; - - default: - supplement = cmaps[cmap].supplement14; - break; - } - - return supplement; -} - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED -void -pdf_put_cidglyph_widths(PDF *p, pdc_font *font) -{ - int slot; - - /* Check whether the font name is among the known CID fonts */ - for (slot = 0; slot < SIZEOF_CID_METRICS; slot++) { - if (!strcmp(pdf_cid_metrics[slot].name, font->apiname)) - break; - } - pdc_printf(p->out, "/DW %d\n", - font->monospace ? font->monospace : PDF_DEFAULT_CIDWIDTH); - if (!font->monospace) - { - if (slot < SIZEOF_CID_METRICS && pdf_cid_width_arrays[slot]) { - pdc_puts(p->out, pdf_cid_width_arrays[slot]); - } - } -} -#endif /* PDF_CJKFONTWIDTHS_SUPPORTED */ diff --git a/src/libs/pdflib/libs/pdflib/p_cid.h b/src/libs/pdflib/libs/pdflib/p_cid.h deleted file mode 100644 index 6969db4272..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_cid.h +++ /dev/null @@ -1,955 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_cid.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file for PDFlib CID font information - * - */ - -#ifndef P_CID_H -#define P_CID_H - -#include "pc_corefont.h" - -typedef struct { - const char *name; - pdc_charcoll charcoll; - short codesize; - short compatibility; - short supplement13; - short supplement14; -} pdf_cmap; - -static const pdc_keyconn charcoll_names[] = -{ - { "\107\102\061", cc_simplified_chinese }, /* GB1 */ - { "\103\116\123\061", cc_traditional_chinese}, /* CNS1 */ - { "\112\141\160\141\156\061", cc_japanese }, /* Japan1 */ - { "\113\157\162\145\141\061", cc_korean}, /* Korea1 */ - { "\111\144\145\156\164\151\164\171", cc_identity} /* Identity */ -}; - -/* predefined CMaps and the corresponding character collection */ - -static const pdf_cmap cmaps[] = { - { "GB-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 0, 0 }, - { "GB-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 0, 0 }, - { "GBpc-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 0, 0 }, - { "GBpc-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 0, 0 }, - { "GBK-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 2, 2 }, - { "GBK-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 2, 2 }, - { "GBKp-EUC-H", cc_simplified_chinese, 0, PDC_1_4, 0, 2 }, - { "GBKp-EUC-V", cc_simplified_chinese, 0, PDC_1_4, 0, 2 }, - { "GBK2K-H", cc_simplified_chinese, 0, PDC_1_4, 0, 4 }, - { "GBK2K-V", cc_simplified_chinese, 0, PDC_1_4, 0, 4 }, - { "UniGB-UCS2-H", cc_simplified_chinese, 2, PDC_1_3, 2, 4 }, - { "UniGB-UCS2-V", cc_simplified_chinese, 2, PDC_1_3, 2, 4 }, - - { "B5pc-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "B5pc-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "HKscs-B5-H", cc_traditional_chinese, 0, PDC_1_4, 0, 3 }, - { "HKscs-B5-V", cc_traditional_chinese, 0, PDC_1_4, 0, 3 }, - { "ETen-B5-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "ETen-B5-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "ETenms-B5-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "ETenms-B5-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "CNS-EUC-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "CNS-EUC-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0 }, - { "UniCNS-UCS2-H", cc_traditional_chinese, 2, PDC_1_3, 0, 3 }, - { "UniCNS-UCS2-V", cc_traditional_chinese, 2, PDC_1_3, 0, 3 }, - - { "83pv-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "90ms-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "90ms-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "90msp-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "90msp-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "90pv-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "Add-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "Add-RKSJ-V", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "EUC-H", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "EUC-V", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "Ext-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "Ext-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2 }, - { "H", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "V", cc_japanese, 0, PDC_1_3, 1, 1 }, - { "UniJIS-UCS2-H", cc_japanese, 2, PDC_1_3, 2, 4 }, - { "UniJIS-UCS2-V", cc_japanese, 2, PDC_1_3, 2, 4 }, - { "UniJIS-UCS2-HW-H", cc_japanese, -2, PDC_1_3, 2, 4 }, - { "UniJIS-UCS2-HW-V", cc_japanese, -2, PDC_1_3, 2, 4 }, - - { "KSC-EUC-H", cc_korean, 0, PDC_1_3, 0, 0 }, - { "KSC-EUC-V", cc_korean, 0, PDC_1_3, 0, 0 }, - { "KSCms-UHC-H", cc_korean, 0, PDC_1_3, 1, 1 }, - { "KSCms-UHC-V", cc_korean, 0, PDC_1_3, 1, 1 }, - { "KSCms-UHC-HW-H", cc_korean, 0, PDC_1_3, 1, 1 }, - { "KSCms-UHC-HW-V", cc_korean, 0, PDC_1_3, 1, 1 }, - { "KSCpc-EUC-H", cc_korean, 0, PDC_1_3, 0, 0 }, - { "UniKS-UCS2-H", cc_korean, 2, PDC_1_3, 1, 1 }, - { "UniKS-UCS2-V", cc_korean, 2, PDC_1_3, 1, 1 }, - - { "Identity-H", cc_identity, 0, PDC_1_3, 0, 0 }, - { "Identity-V", cc_identity, 0, PDC_1_3, 0, 0 } -}; - - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - -/* PDF width arrays for glyph widths indexed by CID */ -/* Must be parallel to the pdf_cid_metrics array */ - -static char *pdf_cid_width_arrays[] = -{ - /* HeiseiKakuGo-W5 */ - "/W[1[278 278 355 556 556 889 667 191 333 333 389 584 278 333 278\n" - "278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584\n" - "556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722\n" - "778 667 778 722 667 611 722 667 944 667 667 611 278 556 278 469\n" - "556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556\n" - "556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 333\n" - "1000 278 1000 260 1000 333 556 556 167 1000 1000 556 1000 556 333 333\n" - "500 500 556 1000 1000 278 1000 350 222 333 1000 556 1000 1000 611]\n" - "127 137 333\n" - "140[370 556 778 1000\n" - "365 889 278 222 611 944 611 584 737 584 737 1000 1000 333 333 556\n" - "333 834 834 834 667 667 667 667 667 667 722 667 667 667 667 278\n" - "278 278 278 722 722 778 778 778 778 778 1000 722 722 722 722 667\n" - "667 556 556 556 556 556 556 500 556 556 556 556 278 278 278 278\n" - "556 556 556 556 556 556 556 1000 556 556 556 556 500 556 500 667\n" - "667 611 556 500 1000 500 556]\n" - "231 632 500\n" - "8718 8719 500]\n", - - /* HeiseiMin-W3 */ - "/W[1[250 333 408 500 500 833 778 180 333 333 500 564 250 333 250\n" - "278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564\n" - "444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722\n" - "722 556 722 667 556 611 722 722 944 722 722 611 333 500 333 469\n" - "500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500\n" - "500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 333\n" - "1000 278 1000 200 1000 333 500 500 167 1000 1000 500 1000 500 333 333\n" - "556 556 500 1000 1000 250 1000 350 333 444 1000 500 1000 1000 444]\n" - "127 137 333\n" - "139[889 276 611 722 889\n" - "310 667 278 278 500 722 500 564 760 564 760 1000 1000 300 300 500\n" - "300 750 750 750 722 722 722 722 722 722 667 611 611 611 611 333\n" - "333 333 333 722 722 722 722 722 722 722 1000 722 722 722 722 722\n" - "556 444 444 444 444 444 444 444 444 444 444 444 278 278 278 278\n" - "500 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 556\n" - "722 611 500 389 980 444]\n" - "230 632 500\n" - "8718 8719 500]\n", - - /* HYGoThic-Medium */ - "/W[1[333 416 416 833 666 916 750 250 416 416 583 833 375 833 375\n" - "375 583 583 583 583 583 583 583 583 583 583 416 416 833 833 833\n" - "583 1000 666 708 750 750 666 625 833 750 291 541 708 583 875 750\n" - "791 666 791 708 666 583 750 625 916 625 625 625 416 375 416 500\n" - "500 500 583 625 583 625 583 375 625 583 250 250 541 250 916 625\n" - "625 625 625 333 541 333 583 500 750 500 500 500 500 500 500 750]]\n", - - /* "HYSMyeongJo-Medium" */ - "/W[1[278 278 355 556 556 889 667 222 333 333 389 584 278 333 278\n" - "278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584\n" - "556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722\n" - "778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469\n" - "556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556\n" - "556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584]]\n", - - /* "MHei-Medium" (identical with HYSMyeongJo-Medium) */ - "/W[1[278 278 355 556 556 889 667 222 333 333 389 584 278 333 278\n" - "278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584\n" - "556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722\n" - "778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469\n" - "556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556\n" - "556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584]]\n", - - /* "MSung-Light" */ - "/W[1[250 250 408 668 490 875 698 250 240 240 417 667 250 313 250\n" - "520 500 500 500 500 500 500 500 500 500 500 250 250 667 667 667\n" - "396 921 677 615 719 760 625 552 771 802 354 354 781 604 927 750\n" - "823 563 823 729 542 698 771 729 948 771 677 635 344 520 344 469\n" - "500 250 469 521 427 521 438 271 469 531 250 250 458 240 802 531\n" - "500 521 521 365 333 292 521 458 677 479 458 427 480 496 480 667]]\n", - - /* "STSong-Light" */ - "/W[1[207 270 342 467 462 797 710 239 374 374 423 605 238 375 238\n" - "334 462 462 462 462 462 462 462 462 462 462 238 238 605 605 605\n" - "344 748 684 560 695 739 563 511 729 793 318 312 666 526 896 758\n" - "772 544 772 628 465 607 753 711 972 647 620 607 374 333 374 606\n" - "500 239 417 503 427 529 415 264 444 518 241 230 495 228 793 527\n" - "524 524 504 338 336 277 517 450 652 466 452 407 370 258 370 605]]\n", - - /* HYSMyeongJoStd-Medium-Acro */ - "/W[1[333 416 416 833 625 916 833 250 500 500 500 833 291 833 291\n" - "375 625 625 625 625 625 625 625 625 625 625 333 333 833 833 916\n" - "500 1000 791 708 708 750 708 666 750 791 375 500 791 666 916 791\n" - "750 666 750 708 666 791 791 750 1000 708 708 666 500 375 500 500\n" - "500 333 541 583 541 583 583 375 583 583 291 333 583 291 875 583\n" - "583 583 583 458 541 375 583 583 833 625 625 500 583 583 583 750]]\n", - - /* KozMinPro-Regular-Acro */ - "/W[1[278 299 353 614 614 721 735 216 323 323 449 529 219 306 219\n" - "453 614 614 614 614 614 614 614 614 614 614 219 219 529 529 529\n" - "486 744 646 604 617 681 567 537 647 738 320 433 637 566 904 710\n" - "716 605 716 623 517 601 690 668 990 681 634 578 316 614 316 529\n" - "500 387 509 566 478 565 503 337 549 580 275 266 544 276 854 579\n" - "550 578 566 410 444 340 575 512 760 503 529 453 326 380 326 387\n" - "1000 453 1000 380 1000 299 614 614 265 1000 1000 614 1000 451 291 291\n" - "588 589 500 1000 1000 219 1000 452 216 353 1000 451 1000 1000 486 387]\n" - "128 135 387\n" - "136[387 387 1000 880 448 566 716 903\n" - "460 805 275 276 550 886 582 529 738 529 738 1000 1000 406 406 575\n" - "406 934 934 934 646 646 646 646 646 646 617 567 567 567 567 320\n" - "320 320 320 681 710 716 716 716 716 716 1000 690 690 690 690 634\n" - "605 509 509 509 509 509 509 478 503 503 503 503 275 275 275 275\n" - "550 579 550 550 550 550 550 1000 575 575 575 575 529 578 529 517\n" - "634 578 445 444 842 453 1000 500]\n" - "323[500 1000 500 1000 500]\n" - "328 383 500\n" - "384[500 500 500 500 500 500]\n" - "9354[614 684 1000 1000 648 899\n" - "903 509 275 575 503 550 646 320 690 567 716 934 934 934 934 934\n" - "934 426 426 426 426 426 426 426 426 425 425 425 439 426 426 426\n" - "426 426 646 567 1000 567 320 1000 320 716 1000 690 690 690 509 503\n" - "1000 503 275 1000 275 550 1000 575 575 575 513 1000 1000 805 1000 478\n" - "1000 1000 503 1000 1000 735 1000 1000 426 1000 1000 1000 578 553 512\n" - "1000 1000 640 594 284]]\n", - - /* MSungStd-Light-Acro */ - "/W[1[250 250 408 668 490 875 698 250 240 240 417 667 250 313 250\n" - "520 500 500 500 500 500 500 500 500 500 500 250 250 667 667 667\n" - "396 921 677 615 719 760 625 552 771 802 354 354 781 604 927 750\n" - "823 563 823 729 542 698 771 729 948 771 677 635 344 520 344 469\n" - "500 250 469 521 427 521 438 271 469 531 250 250 458 240 802 531\n" - "500 521 521 365 333 292 521 458 677 479 458 427 480 496 480 667]\n" - "17601 17601 500]\n", - - /* STSongStd-Light-Acro */ - "/W[1[207 270 342 467 462 797 710 239 374 374 423 605 238 375 238\n" - "334 462 462 462 462 462 462 462 462 462 462 238 238 605 605 605\n" - "344 748 684 560 695 739 563 511 729 793 318 312 666 526 896 758\n" - "772 544 772 628 465 607 753 711 972 647 620 607 374 333 374 606\n" - "500 239 417 503 427 529 415 264 444 518 241 230 495 228 793 527\n" - "524 524 504 338 336 277 517 450 652 466 452 407 370 258 370 605]\n" - "22353[462 462 1000 1000 500]]\n", - - NULL -}; - - -/* Unicode intervals for glyph widths of preinstalled CID fonts */ - -static pdc_interwidth pdf_HeiseiKakuGo_W5_widths[163] = -{ - {0x0000, 278}, {0x0022, 355}, {0x0023, 556}, {0x0025, 889}, - {0x0026, 667}, {0x0027, 191}, {0x0028, 333}, {0x002A, 389}, - {0x002B, 584}, {0x002C, 278}, {0x002D, 333}, {0x002E, 278}, - {0x0030, 556}, {0x003A, 278}, {0x003C, 584}, {0x003F, 556}, - {0x0040,1015}, {0x0041, 667}, {0x0043, 722}, {0x0045, 667}, - {0x0046, 611}, {0x0047, 778}, {0x0048, 722}, {0x0049, 278}, - {0x004A, 500}, {0x004B, 667}, {0x004C, 556}, {0x004D, 833}, - {0x004E, 722}, {0x004F, 778}, {0x0050, 667}, {0x0051, 778}, - {0x0052, 722}, {0x0053, 667}, {0x0054, 611}, {0x0055, 722}, - {0x0056, 667}, {0x0057, 944}, {0x0058, 667}, {0x005A, 611}, - {0x005B, 278}, {0x005E, 469}, {0x005F, 556}, {0x0060, 333}, - {0x0061, 556}, {0x0063, 500}, {0x0064, 556}, {0x0066, 278}, - {0x0067, 556}, {0x0069, 222}, {0x006B, 500}, {0x006C, 222}, - {0x006D, 833}, {0x006E, 556}, {0x0072, 333}, {0x0073, 500}, - {0x0074, 278}, {0x0075, 556}, {0x0076, 500}, {0x0077, 722}, - {0x0078, 500}, {0x007B, 334}, {0x007C, 260}, {0x007D, 334}, - {0x007E, 333}, {0x007F,1000}, {0x00A1, 333}, {0x00A2, 556}, - {0x00A6, 260}, {0x00A7,1000}, {0x00A9, 737}, {0x00AA, 370}, - {0x00AB, 556}, {0x00AC, 584}, {0x00AE, 737}, {0x00AF, 333}, - {0x00B0,1000}, {0x00B2, 333}, {0x00B4,1000}, {0x00B5, 556}, - {0x00B6,1000}, {0x00B7, 278}, {0x00B8, 333}, {0x00BA, 365}, - {0x00BB, 556}, {0x00BC, 834}, {0x00BF, 611}, {0x00C0, 667}, - {0x00C6,1000}, {0x00C7, 722}, {0x00C8, 667}, {0x00CC, 278}, - {0x00D0, 722}, {0x00D2, 778}, {0x00D7,1000}, {0x00D8, 778}, - {0x00D9, 722}, {0x00DD, 667}, {0x00DF, 611}, {0x00E0, 556}, - {0x00E6, 889}, {0x00E7, 500}, {0x00E8, 556}, {0x00EC, 278}, - {0x00F0, 556}, {0x00F7,1000}, {0x00F8, 611}, {0x00F9, 556}, - {0x00FD, 500}, {0x00FE, 556}, {0x00FF, 500}, {0x0100,1000}, - {0x0131, 278}, {0x0132,1000}, {0x0141, 556}, {0x0142, 222}, - {0x0143,1000}, {0x0153, 944}, {0x0154,1000}, {0x0160, 667}, - {0x0161, 500}, {0x0162,1000}, {0x0178, 667}, {0x0179,1000}, - {0x017D, 611}, {0x017E, 500}, {0x017F,1000}, {0x01C0, 260}, - {0x01C1,1000}, {0x0300, 333}, {0x0305, 556}, {0x0306, 333}, - {0x0309,1000}, {0x030A, 333}, {0x030D,1000}, {0x0327, 333}, - {0x0329,1000}, {0x0332, 556}, {0x0333,1000}, {0x2002, 500}, - {0x2003,1000}, {0x2011, 333}, {0x2012, 556}, {0x2014,1000}, - {0x201A, 222}, {0x201B,1000}, {0x201E, 333}, {0x201F,1000}, - {0x2022, 350}, {0x2023,1000}, {0x2039, 333}, {0x203B,1000}, - {0x203E, 500}, {0x203F,1000}, {0x2044, 167}, {0x2045,1000}, - {0xFB01, 500}, {0xFB03,1000}, {0xFF61, 500}, {0xFFA0,1000}, - {0xFFE8, 500}, {0xFFE9,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_HeiseiMin_W3_widths[164] = -{ - {0x0000, 250}, {0x0021, 333}, {0x0022, 408}, {0x0023, 500}, - {0x0025, 833}, {0x0026, 778}, {0x0027, 180}, {0x0028, 333}, - {0x002A, 500}, {0x002B, 564}, {0x002C, 250}, {0x002D, 333}, - {0x002E, 250}, {0x002F, 278}, {0x0030, 500}, {0x003A, 278}, - {0x003C, 564}, {0x003F, 444}, {0x0040, 921}, {0x0041, 722}, - {0x0042, 667}, {0x0044, 722}, {0x0045, 611}, {0x0046, 556}, - {0x0047, 722}, {0x0049, 333}, {0x004A, 389}, {0x004B, 722}, - {0x004C, 611}, {0x004D, 889}, {0x004E, 722}, {0x0050, 556}, - {0x0051, 722}, {0x0052, 667}, {0x0053, 556}, {0x0054, 611}, - {0x0055, 722}, {0x0057, 944}, {0x0058, 722}, {0x005A, 611}, - {0x005B, 333}, {0x005C, 278}, {0x005D, 333}, {0x005E, 469}, - {0x005F, 500}, {0x0060, 333}, {0x0061, 444}, {0x0062, 500}, - {0x0063, 444}, {0x0064, 500}, {0x0065, 444}, {0x0066, 333}, - {0x0067, 500}, {0x0069, 278}, {0x006B, 500}, {0x006C, 278}, - {0x006D, 778}, {0x006E, 500}, {0x0072, 333}, {0x0073, 389}, - {0x0074, 278}, {0x0075, 500}, {0x0077, 722}, {0x0078, 500}, - {0x007A, 444}, {0x007B, 480}, {0x007C, 200}, {0x007D, 480}, - {0x007E, 333}, {0x007F,1000}, {0x00A1, 333}, {0x00A2, 500}, - {0x00A6, 200}, {0x00A7,1000}, {0x00A9, 760}, {0x00AA, 276}, - {0x00AB, 500}, {0x00AC, 564}, {0x00AE, 760}, {0x00AF, 333}, - {0x00B0,1000}, {0x00B2, 300}, {0x00B4,1000}, {0x00B5, 500}, - {0x00B6,1000}, {0x00B7, 250}, {0x00B8, 333}, {0x00B9, 300}, - {0x00BA, 310}, {0x00BB, 500}, {0x00BC, 750}, {0x00BF, 444}, - {0x00C0, 722}, {0x00C6, 889}, {0x00C7, 667}, {0x00C8, 611}, - {0x00CC, 333}, {0x00D0, 722}, {0x00D7,1000}, {0x00D8, 722}, - {0x00DE, 556}, {0x00DF, 500}, {0x00E0, 444}, {0x00E6, 667}, - {0x00E7, 444}, {0x00EC, 278}, {0x00F0, 500}, {0x00F7,1000}, - {0x00F8, 500}, {0x0100,1000}, {0x0131, 278}, {0x0132,1000}, - {0x0141, 611}, {0x0142, 278}, {0x0143,1000}, {0x0152, 889}, - {0x0153, 722}, {0x0154,1000}, {0x0160, 556}, {0x0161, 389}, - {0x0162,1000}, {0x0178, 722}, {0x0179,1000}, {0x017D, 611}, - {0x017E, 444}, {0x017F,1000}, {0x01C0, 200}, {0x01C1,1000}, - {0x0300, 333}, {0x0305, 500}, {0x0306, 333}, {0x0309,1000}, - {0x030A, 333}, {0x030D,1000}, {0x0327, 333}, {0x0329,1000}, - {0x0332, 500}, {0x0333,1000}, {0x2002, 500}, {0x2003,1000}, - {0x2011, 333}, {0x2012, 500}, {0x2014,1000}, {0x201A, 333}, - {0x201B,1000}, {0x201E, 444}, {0x201F,1000}, {0x2022, 350}, - {0x2023,1000}, {0x2039, 333}, {0x203B,1000}, {0x203E, 500}, - {0x203F,1000}, {0x2044, 167}, {0x2045,1000}, {0x2122, 980}, - {0x2123,1000}, {0xFB01, 556}, {0xFB03,1000}, {0xFF61, 500}, - {0xFFA0,1000}, {0xFFE8, 500}, {0xFFE9,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_HYGoThic_Medium_widths[68] = -{ - {0x0000, 333}, {0x0021, 416}, {0x0023, 833}, {0x0024, 666}, - {0x0025, 916}, {0x0026, 750}, {0x0027, 250}, {0x0028, 416}, - {0x002A, 583}, {0x002B, 833}, {0x002C, 375}, {0x002D, 833}, - {0x002E, 375}, {0x0030, 583}, {0x003A, 416}, {0x003C, 833}, - {0x003F, 583}, {0x0040,1000}, {0x0041, 666}, {0x0042, 708}, - {0x0043, 750}, {0x0045, 666}, {0x0046, 625}, {0x0047, 833}, - {0x0048, 750}, {0x0049, 291}, {0x004A, 541}, {0x004B, 708}, - {0x004C, 583}, {0x004D, 875}, {0x004E, 750}, {0x004F, 791}, - {0x0050, 666}, {0x0051, 791}, {0x0052, 708}, {0x0053, 666}, - {0x0054, 583}, {0x0055, 750}, {0x0056, 625}, {0x0057, 916}, - {0x0058, 625}, {0x005B, 416}, {0x005C, 375}, {0x005D, 416}, - {0x005E, 500}, {0x0061, 583}, {0x0062, 625}, {0x0063, 583}, - {0x0064, 625}, {0x0065, 583}, {0x0066, 375}, {0x0067, 625}, - {0x0068, 583}, {0x0069, 250}, {0x006B, 541}, {0x006C, 250}, - {0x006D, 916}, {0x006E, 625}, {0x0072, 333}, {0x0073, 541}, - {0x0074, 333}, {0x0075, 583}, {0x0076, 500}, {0x0077, 750}, - {0x0078, 500}, {0x007E, 750}, {0x007F,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_HYSMyeongJo_Medium_widths[67] = -{ - {0x0000, 278}, {0x0022, 355}, {0x0023, 556}, {0x0025, 889}, - {0x0026, 667}, {0x0027, 222}, {0x0028, 333}, {0x002A, 389}, - {0x002B, 584}, {0x002C, 278}, {0x002D, 333}, {0x002E, 278}, - {0x0030, 556}, {0x003A, 278}, {0x003C, 584}, {0x003F, 556}, - {0x0040,1015}, {0x0041, 667}, {0x0043, 722}, {0x0045, 667}, - {0x0046, 611}, {0x0047, 778}, {0x0048, 722}, {0x0049, 278}, - {0x004A, 500}, {0x004B, 667}, {0x004C, 556}, {0x004D, 833}, - {0x004E, 722}, {0x004F, 778}, {0x0050, 667}, {0x0051, 778}, - {0x0052, 722}, {0x0053, 667}, {0x0054, 611}, {0x0055, 722}, - {0x0056, 667}, {0x0057, 944}, {0x0058, 667}, {0x005A, 611}, - {0x005B, 278}, {0x005E, 469}, {0x005F, 556}, {0x0060, 222}, - {0x0061, 556}, {0x0063, 500}, {0x0064, 556}, {0x0066, 278}, - {0x0067, 556}, {0x0069, 222}, {0x006B, 500}, {0x006C, 222}, - {0x006D, 833}, {0x006E, 556}, {0x0072, 333}, {0x0073, 500}, - {0x0074, 278}, {0x0075, 556}, {0x0076, 500}, {0x0077, 722}, - {0x0078, 500}, {0x007B, 334}, {0x007C, 260}, {0x007D, 334}, - {0x007E, 584}, {0x007F,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_MSung_Light_widths[80] = -{ - {0x0000, 250}, {0x0022, 408}, {0x0023, 668}, {0x0024, 490}, - {0x0025, 875}, {0x0026, 698}, {0x0027, 250}, {0x0028, 240}, - {0x002A, 417}, {0x002B, 667}, {0x002C, 250}, {0x002D, 313}, - {0x002E, 250}, {0x002F, 520}, {0x0030, 500}, {0x003A, 250}, - {0x003C, 667}, {0x003F, 396}, {0x0040, 921}, {0x0041, 677}, - {0x0042, 615}, {0x0043, 719}, {0x0044, 760}, {0x0045, 625}, - {0x0046, 552}, {0x0047, 771}, {0x0048, 802}, {0x0049, 354}, - {0x004B, 781}, {0x004C, 604}, {0x004D, 927}, {0x004E, 750}, - {0x004F, 823}, {0x0050, 563}, {0x0051, 823}, {0x0052, 729}, - {0x0053, 542}, {0x0054, 698}, {0x0055, 771}, {0x0056, 729}, - {0x0057, 948}, {0x0058, 771}, {0x0059, 677}, {0x005A, 635}, - {0x005B, 344}, {0x005C, 520}, {0x005D, 344}, {0x005E, 469}, - {0x005F, 500}, {0x0060, 250}, {0x0061, 469}, {0x0062, 521}, - {0x0063, 427}, {0x0064, 521}, {0x0065, 438}, {0x0066, 271}, - {0x0067, 469}, {0x0068, 531}, {0x0069, 250}, {0x006B, 458}, - {0x006C, 240}, {0x006D, 802}, {0x006E, 531}, {0x006F, 500}, - {0x0070, 521}, {0x0072, 365}, {0x0073, 333}, {0x0074, 292}, - {0x0075, 521}, {0x0076, 458}, {0x0077, 677}, {0x0078, 479}, - {0x0079, 458}, {0x007A, 427}, {0x007B, 480}, {0x007C, 496}, - {0x007D, 480}, {0x007E, 667}, {0x007F,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_STSong_Light_widths[83] = -{ - {0x0000, 207}, {0x0021, 270}, {0x0022, 342}, {0x0023, 467}, - {0x0024, 462}, {0x0025, 797}, {0x0026, 710}, {0x0027, 239}, - {0x0028, 374}, {0x002A, 423}, {0x002B, 605}, {0x002C, 238}, - {0x002D, 375}, {0x002E, 238}, {0x002F, 334}, {0x0030, 462}, - {0x003A, 238}, {0x003C, 605}, {0x003F, 344}, {0x0040, 748}, - {0x0041, 684}, {0x0042, 560}, {0x0043, 695}, {0x0044, 739}, - {0x0045, 563}, {0x0046, 511}, {0x0047, 729}, {0x0048, 793}, - {0x0049, 318}, {0x004A, 312}, {0x004B, 666}, {0x004C, 526}, - {0x004D, 896}, {0x004E, 758}, {0x004F, 772}, {0x0050, 544}, - {0x0051, 772}, {0x0052, 628}, {0x0053, 465}, {0x0054, 607}, - {0x0055, 753}, {0x0056, 711}, {0x0057, 972}, {0x0058, 647}, - {0x0059, 620}, {0x005A, 607}, {0x005B, 374}, {0x005C, 333}, - {0x005D, 374}, {0x005E, 606}, {0x005F, 500}, {0x0060, 239}, - {0x0061, 417}, {0x0062, 503}, {0x0063, 427}, {0x0064, 529}, - {0x0065, 415}, {0x0066, 264}, {0x0067, 444}, {0x0068, 518}, - {0x0069, 241}, {0x006A, 230}, {0x006B, 495}, {0x006C, 228}, - {0x006D, 793}, {0x006E, 527}, {0x006F, 524}, {0x0071, 504}, - {0x0072, 338}, {0x0073, 336}, {0x0074, 277}, {0x0075, 517}, - {0x0076, 450}, {0x0077, 652}, {0x0078, 466}, {0x0079, 452}, - {0x007A, 407}, {0x007B, 370}, {0x007C, 258}, {0x007D, 370}, - {0x007E, 605}, {0x007F,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_HYSMyeongJoStd_Medium_widths[69] = -{ - {0x0000, 333}, {0x0021, 416}, {0x0023, 833}, {0x0024, 625}, - {0x0025, 916}, {0x0026, 833}, {0x0027, 250}, {0x0028, 500}, - {0x002B, 833}, {0x002C, 291}, {0x002D, 833}, {0x002E, 291}, - {0x002F, 375}, {0x0030, 625}, {0x003A, 333}, {0x003C, 833}, - {0x003E, 916}, {0x003F, 500}, {0x0040,1000}, {0x0041, 791}, - {0x0042, 708}, {0x0044, 750}, {0x0045, 708}, {0x0046, 666}, - {0x0047, 750}, {0x0048, 791}, {0x0049, 375}, {0x004A, 500}, - {0x004B, 791}, {0x004C, 666}, {0x004D, 916}, {0x004E, 791}, - {0x004F, 750}, {0x0050, 666}, {0x0051, 750}, {0x0052, 708}, - {0x0053, 666}, {0x0054, 791}, {0x0056, 750}, {0x0057,1000}, - {0x0058, 708}, {0x005A, 666}, {0x005B, 500}, {0x005C, 375}, - {0x005D, 500}, {0x0060, 333}, {0x0061, 541}, {0x0062, 583}, - {0x0063, 541}, {0x0064, 583}, {0x0066, 375}, {0x0067, 583}, - {0x0069, 291}, {0x006A, 333}, {0x006B, 583}, {0x006C, 291}, - {0x006D, 875}, {0x006E, 583}, {0x0072, 458}, {0x0073, 541}, - {0x0074, 375}, {0x0075, 583}, {0x0077, 833}, {0x0078, 625}, - {0x007A, 500}, {0x007B, 583}, {0x007E, 750}, {0x007F,1000}, - {0xFFFF,1000} -}; - -static pdc_interwidth pdf_KozMinPro_Regular_widths[265] = -{ - {0x0000, 278}, {0x0021, 299}, {0x0022, 353}, {0x0023, 614}, - {0x0025, 721}, {0x0026, 735}, {0x0027, 216}, {0x0028, 323}, - {0x002A, 449}, {0x002B, 529}, {0x002C, 219}, {0x002D, 306}, - {0x002E, 219}, {0x002F, 453}, {0x0030, 614}, {0x003A, 219}, - {0x003C, 529}, {0x003F, 486}, {0x0040, 744}, {0x0041, 646}, - {0x0042, 604}, {0x0043, 617}, {0x0044, 681}, {0x0045, 567}, - {0x0046, 537}, {0x0047, 647}, {0x0048, 738}, {0x0049, 320}, - {0x004A, 433}, {0x004B, 637}, {0x004C, 566}, {0x004D, 904}, - {0x004E, 710}, {0x004F, 716}, {0x0050, 605}, {0x0051, 716}, - {0x0052, 623}, {0x0053, 517}, {0x0054, 601}, {0x0055, 690}, - {0x0056, 668}, {0x0057, 990}, {0x0058, 681}, {0x0059, 634}, - {0x005A, 578}, {0x005B, 316}, {0x005C, 453}, {0x005D, 316}, - {0x005E, 529}, {0x005F, 500}, {0x0060, 387}, {0x0061, 509}, - {0x0062, 566}, {0x0063, 478}, {0x0064, 565}, {0x0065, 503}, - {0x0066, 337}, {0x0067, 549}, {0x0068, 580}, {0x0069, 275}, - {0x006A, 266}, {0x006B, 544}, {0x006C, 276}, {0x006D, 854}, - {0x006E, 579}, {0x006F, 550}, {0x0070, 578}, {0x0071, 566}, - {0x0072, 410}, {0x0073, 444}, {0x0074, 340}, {0x0075, 575}, - {0x0076, 512}, {0x0077, 760}, {0x0078, 503}, {0x0079, 529}, - {0x007A, 453}, {0x007B, 326}, {0x007C, 380}, {0x007D, 326}, - {0x007E, 387}, {0x007F,1000}, {0x00A1, 299}, {0x00A2, 614}, - {0x00A6, 380}, {0x00A7,1000}, {0x00A9, 738}, {0x00AA, 448}, - {0x00AB, 451}, {0x00AC, 529}, {0x00AE, 738}, {0x00AF, 387}, - {0x00B0,1000}, {0x00B2, 406}, {0x00B4,1000}, {0x00B5, 575}, - {0x00B6,1000}, {0x00B7, 219}, {0x00B8, 387}, {0x00B9, 406}, - {0x00BA, 460}, {0x00BB, 451}, {0x00BC, 934}, {0x00BF, 486}, - {0x00C0, 646}, {0x00C6, 880}, {0x00C7, 617}, {0x00C8, 567}, - {0x00CC, 320}, {0x00D0, 681}, {0x00D1, 710}, {0x00D2, 716}, - {0x00D7,1000}, {0x00D8, 716}, {0x00D9, 690}, {0x00DD, 634}, - {0x00DE, 605}, {0x00DF, 582}, {0x00E0, 509}, {0x00E6, 805}, - {0x00E7, 478}, {0x00E8, 503}, {0x00EC, 275}, {0x00F0, 550}, - {0x00F1, 579}, {0x00F2, 550}, {0x00F7,1000}, {0x00F8, 550}, - {0x00F9, 575}, {0x00FD, 529}, {0x00FE, 578}, {0x00FF, 529}, - {0x0100, 646}, {0x0101, 509}, {0x0102,1000}, {0x0112, 567}, - {0x0113, 503}, {0x0114,1000}, {0x011A, 567}, {0x011B, 503}, - {0x011C,1000}, {0x0128, 320}, {0x0129, 275}, {0x012A, 320}, - {0x012B, 275}, {0x012C,1000}, {0x0131, 275}, {0x0132,1000}, - {0x0141, 566}, {0x0142, 276}, {0x0143,1000}, {0x014B, 578}, - {0x014C, 716}, {0x014D, 550}, {0x014E,1000}, {0x0152, 903}, - {0x0153, 886}, {0x0154,1000}, {0x0160, 517}, {0x0161, 444}, - {0x0162,1000}, {0x0168, 690}, {0x0169, 575}, {0x016A, 690}, - {0x016B, 575}, {0x016C,1000}, {0x016E, 690}, {0x016F, 575}, - {0x0170,1000}, {0x0178, 634}, {0x0179,1000}, {0x017D, 578}, - {0x017E, 453}, {0x017F,1000}, {0x01C0, 380}, {0x01C1,1000}, - {0x01CD, 646}, {0x01CE, 509}, {0x01CF, 320}, {0x01D0, 275}, - {0x01D1, 716}, {0x01D2, 550}, {0x01D3, 690}, {0x01D4, 575}, - {0x01D5,1000}, {0x01FD, 805}, {0x01FE,1000}, {0x0251, 513}, - {0x0252,1000}, {0x0254, 478}, {0x0255,1000}, {0x0259, 503}, - {0x025A, 735}, {0x025B, 426}, {0x025C,1000}, {0x0275, 553}, - {0x0276,1000}, {0x0283, 594}, {0x0284,1000}, {0x028C, 512}, - {0x028D,1000}, {0x0292, 640}, {0x0293,1000}, {0x02D0, 284}, - {0x02D1,1000}, {0x0300, 387}, {0x0305, 445}, {0x0306, 387}, - {0x0309,1000}, {0x030A, 387}, {0x030D,1000}, {0x0327, 387}, - {0x0329,1000}, {0x0332, 500}, {0x0333,1000}, {0x0EBC, 567}, - {0x0EBD, 503}, {0x0EBE,1000}, {0x2002, 500}, {0x2003,1000}, - {0x2011, 306}, {0x2012, 500}, {0x2014,1000}, {0x201A, 216}, - {0x201B,1000}, {0x201E, 353}, {0x201F,1000}, {0x2022, 452}, - {0x2023,1000}, {0x2039, 291}, {0x203B,1000}, {0x203E, 500}, - {0x203F,1000}, {0x2044, 265}, {0x2045,1000}, {0x2070, 426}, - {0x2071,1000}, {0x2074, 426}, {0x207A,1000}, {0x2080, 426}, - {0x2081, 425}, {0x2084, 439}, {0x2085, 426}, {0x208A,1000}, - {0x20AC, 614}, {0x20AD,1000}, {0x2122, 842}, {0x2123,1000}, - {0x2126, 684}, {0x2127,1000}, {0x2153, 934}, {0x2155,1000}, - {0x215B, 934}, {0x215F,1000}, {0xFB00, 648}, {0xFB01, 588}, - {0xFB02, 589}, {0xFB03, 899}, {0xFB04, 903}, {0xFB05,1000}, - {0xFF61, 500}, {0xFFA0,1000}, {0xFFE8, 500}, {0xFFE9,1000}, - {0xFFFF,1000} -}; - -static pdc_interwidth pdf_MSungStd_Light_widths[82] = -{ - {0x0000, 250}, {0x0022, 408}, {0x0023, 668}, {0x0024, 490}, - {0x0025, 875}, {0x0026, 698}, {0x0027, 250}, {0x0028, 240}, - {0x002A, 417}, {0x002B, 667}, {0x002C, 250}, {0x002D, 313}, - {0x002E, 250}, {0x002F, 520}, {0x0030, 500}, {0x003A, 250}, - {0x003C, 667}, {0x003F, 396}, {0x0040, 921}, {0x0041, 677}, - {0x0042, 615}, {0x0043, 719}, {0x0044, 760}, {0x0045, 625}, - {0x0046, 552}, {0x0047, 771}, {0x0048, 802}, {0x0049, 354}, - {0x004B, 781}, {0x004C, 604}, {0x004D, 927}, {0x004E, 750}, - {0x004F, 823}, {0x0050, 563}, {0x0051, 823}, {0x0052, 729}, - {0x0053, 542}, {0x0054, 698}, {0x0055, 771}, {0x0056, 729}, - {0x0057, 948}, {0x0058, 771}, {0x0059, 677}, {0x005A, 635}, - {0x005B, 344}, {0x005C, 520}, {0x005D, 344}, {0x005E, 469}, - {0x005F, 500}, {0x0060, 250}, {0x0061, 469}, {0x0062, 521}, - {0x0063, 427}, {0x0064, 521}, {0x0065, 438}, {0x0066, 271}, - {0x0067, 469}, {0x0068, 531}, {0x0069, 250}, {0x006B, 458}, - {0x006C, 240}, {0x006D, 802}, {0x006E, 531}, {0x006F, 500}, - {0x0070, 521}, {0x0072, 365}, {0x0073, 333}, {0x0074, 292}, - {0x0075, 521}, {0x0076, 458}, {0x0077, 677}, {0x0078, 479}, - {0x0079, 458}, {0x007A, 427}, {0x007B, 480}, {0x007C, 496}, - {0x007D, 480}, {0x007E, 667}, {0x007F,1000}, {0x20AC, 500}, - {0x20AD,1000}, {0xFFFF,1000} -}; - -static pdc_interwidth pdf_STSongStd_Light_widths[89] = -{ - {0x0000, 207}, {0x0021, 270}, {0x0022, 342}, {0x0023, 467}, - {0x0024, 462}, {0x0025, 797}, {0x0026, 710}, {0x0027, 239}, - {0x0028, 374}, {0x002A, 423}, {0x002B, 605}, {0x002C, 238}, - {0x002D, 375}, {0x002E, 238}, {0x002F, 334}, {0x0030, 462}, - {0x003A, 238}, {0x003C, 605}, {0x003F, 344}, {0x0040, 748}, - {0x0041, 684}, {0x0042, 560}, {0x0043, 695}, {0x0044, 739}, - {0x0045, 563}, {0x0046, 511}, {0x0047, 729}, {0x0048, 793}, - {0x0049, 318}, {0x004A, 312}, {0x004B, 666}, {0x004C, 526}, - {0x004D, 896}, {0x004E, 758}, {0x004F, 772}, {0x0050, 544}, - {0x0051, 772}, {0x0052, 628}, {0x0053, 465}, {0x0054, 607}, - {0x0055, 753}, {0x0056, 711}, {0x0057, 972}, {0x0058, 647}, - {0x0059, 620}, {0x005A, 607}, {0x005B, 374}, {0x005C, 333}, - {0x005D, 374}, {0x005E, 606}, {0x005F, 500}, {0x0060, 239}, - {0x0061, 417}, {0x0062, 503}, {0x0063, 427}, {0x0064, 529}, - {0x0065, 415}, {0x0066, 264}, {0x0067, 444}, {0x0068, 518}, - {0x0069, 241}, {0x006A, 230}, {0x006B, 495}, {0x006C, 228}, - {0x006D, 793}, {0x006E, 527}, {0x006F, 524}, {0x0071, 504}, - {0x0072, 338}, {0x0073, 336}, {0x0074, 277}, {0x0075, 517}, - {0x0076, 450}, {0x0077, 652}, {0x0078, 466}, {0x0079, 452}, - {0x007A, 407}, {0x007B, 370}, {0x007C, 258}, {0x007D, 370}, - {0x007E, 605}, {0x007F,1000}, {0x00A5, 462}, {0x00A6,1000}, - {0x20AC, 462}, {0x20AD,1000}, {0x303F, 500}, {0x3040,1000}, - {0xFFFF,1000} -}; - -#endif /* PDF_CJKFONTWIDTHS_SUPPORTED */ - -/* Font descriptors for the preinstalled CID fonts */ - -static const pdc_core_metric pdf_cid_metrics[] = { - -/* Acrobat 4 standard fonts */ -/* ---------------------------------------------------------- */ -{ "HeiseiKakuGo-W5", /* FontName */ - 4L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_japanese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -92, /* llx */ - -250, /* lly */ - 1010, /* urx */ - 922, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -221, /* Descender */ - 114, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 163, /* numOfInter */ - pdf_HeiseiKakuGo_W5_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "HeiseiMin-W3", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_japanese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -123, /* llx */ - -257, /* lly */ - 1001, /* urx */ - 910, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 709, /* CapHeight */ - 450, /* xHeight */ - 723, /* Ascender */ - -241, /* Descender */ - 69, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 164, /* numOfInter */ - pdf_HeiseiMin_W3_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "HYGoThic-Medium", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_korean, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -6, /* llx */ - -145, /* lly */ - 1003, /* urx */ - 880, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 68, /* numOfInter */ - pdf_HYGoThic_Medium_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "HYSMyeongJo-Medium", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_korean, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -0, /* llx */ - -148, /* lly */ - 1001, /* urx */ - 880, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 67, /* numOfInter */ - pdf_HYSMyeongJo_Medium_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "MHei-Medium", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_traditional_chinese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -45, /* llx */ - -250, /* lly */ - 1015, /* urx */ - 887, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 67, /* numOfInter */ - pdf_HYSMyeongJo_Medium_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "MSung-Light", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_traditional_chinese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -160, /* llx */ - -259, /* lly */ - 1015, /* urx */ - 888, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 80, /* numOfInter */ - pdf_MSung_Light_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "STSong-Light", /* FontName */ - 4L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_simplified_chinese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -250, /* llx */ - -143, /* lly */ - 600, /* urx */ - 857, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 857, /* CapHeight */ - 599, /* xHeight */ - 857, /* Ascender */ - -143, /* Descender */ - 91, /* StdVW */ - 91, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 83, /* numOfInter */ - pdf_STSong_Light_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* Acrobat 5 standard fonts */ -/* ---------------------------------------------------------- */ -{ "HYSMyeongJoStd-Medium-Acro", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_korean, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -28, /* llx */ - -148, /* lly */ - 1001, /* urx */ - 880, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 69, /* numOfInter */ - pdf_HYSMyeongJoStd_Medium_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "KozMinPro-Regular-Acro", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_japanese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -195, /* llx */ - -272, /* lly */ - 1110, /* urx */ - 1075, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 265, /* numOfInter */ - pdf_KozMinPro_Regular_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "MSungStd-Light-Acro", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_traditional_chinese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -160, /* llx */ - -249, /* lly */ - 1015, /* urx */ - 1071, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 553, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 82, /* numOfInter */ - pdf_MSungStd_Light_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -}, - -/* ---------------------------------------------------------- */ -{ "STSongStd-Light-Acro", /* FontName */ - 6L, /* Font flags */ - pdc_CIDFontType0, /* font type */ - cc_simplified_chinese, /* Character collection */ - (float) 0.0, /* ItalicAngle */ - pdc_true, /* isFixedPitch */ - -134, /* llx */ - -254, /* lly */ - 1001, /* urx */ - 905, /* ury */ - -100, /* UnderlinePosition */ - 50, /* UnderlineThickness */ - 737, /* CapHeight */ - 535, /* xHeight */ - 752, /* Ascender */ - -271, /* Descender */ - 58, /* StdVW */ - 0, /* StdHW */ - -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - 89, /* numOfInter */ - pdf_STSongStd_Light_widths, /* ciw */ -#else /* PDF_CJKFONTWIDTHS_SUPPORTED */ - 0, - NULL, -#endif /* !PDF_CJKFONTWIDTHS_SUPPORTED */ - - 0, /* numOfGlyphs */ - (pdc_glyphwidth *) NULL, /* glw */ - -} - -}; - -#define SIZEOF_CID_METRICS \ - ((int) (sizeof(pdf_cid_metrics)/sizeof(pdc_core_metric))) -#define NUMBER_OF_CMAPS ((int) (sizeof(cmaps)/sizeof(pdf_cmap))) - -#endif /* P_CID_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_color.c b/src/libs/pdflib/libs/pdflib/p_color.c deleted file mode 100644 index aec4b48866..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_color.c +++ /dev/null @@ -1,936 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_color.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib color routines - * - */ - -#define P_COLOR_C - -#include "p_intern.h" -#include "p_font.h" - - - - -/* Avoid wrong error messages due to rounding artifacts. - * This doesn't do any harm since we truncate to 5 decimal places anyway - * when producing PDF output. - */ -#define EPSILON ((float) (1.0 + PDF_SMALLREAL)) - -static void pdf_check_color_values(PDF *p, pdf_colorspacetype type, - float c1, float c2, float c3, float c4); - -int -pdf_color_components(PDF *p, int slot) -{ - pdf_colorspace *cs; - int components = 0; - - cs = &p->colorspaces[slot]; - - switch (cs->type) { - case DeviceGray: - case Indexed: - components = 1; - break; - - case DeviceRGB: - components = 3; - break; - - case DeviceCMYK: - components = 4; - break; - - case PatternCS: - if (cs->val.pattern.base == pdc_undef) - components = 0; /* PaintType 1: colored pattern */ - else - components = pdf_color_components(p, cs->val.pattern.base); - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs->type), 0, 0, 0); - } - - return components; -} /* pdf_color_components */ - -void -pdf_write_color_values(PDF *p, pdf_color *color, pdf_drawmode drawmode) -{ - pdf_colorspace *cs = &p->colorspaces[color->cs]; - - switch (cs->type) { - case DeviceGray: - pdc_printf(p->out, "%f", color->val.gray); - - if (drawmode == pdf_fill) - pdc_puts(p->out, " g\n"); - else if (drawmode == pdf_stroke) - pdc_puts(p->out, " G\n"); - break; - - case DeviceRGB: - pdc_printf(p->out, "%f %f %f", - color->val.rgb.r, color->val.rgb.g, color->val.rgb.b); - - if (drawmode == pdf_fill) - pdc_puts(p->out, " rg\n"); - else if (drawmode == pdf_stroke) - pdc_puts(p->out, " RG\n"); - break; - - case DeviceCMYK: - pdc_printf(p->out, "%f %f %f %f", - color->val.cmyk.c, color->val.cmyk.m, - color->val.cmyk.y, color->val.cmyk.k); - - if (drawmode == pdf_fill) - pdc_puts(p->out, " k\n"); - else if (drawmode == pdf_stroke) - pdc_puts(p->out, " K\n"); - break; - - - case PatternCS: - if (drawmode == pdf_fill) { - if (p->pattern[color->val.pattern].painttype == 1) { - pdc_puts(p->out, "/Pattern cs"); - } else if (p->pattern[color->val.pattern].painttype == 2) { - pdc_printf(p->out, "/CS%d cs ", color->cs); - pdf_write_color_values(p, - &p->cstate[p->sl].fill, pdf_none); - } - pdc_printf(p->out, "/P%d scn\n", color->val.pattern); - - } else if (drawmode == pdf_stroke) { - if (p->pattern[color->val.pattern].painttype == 1) { - pdc_puts(p->out, "/Pattern CS"); - } else if (p->pattern[color->val.pattern].painttype == 2) { - pdc_printf(p->out, "/CS%d CS ", color->cs); - pdf_write_color_values(p, - &p->cstate[p->sl].stroke, pdf_none); - } - pdc_printf(p->out, "/P%d SCN\n", color->val.pattern); - } - - p->pattern[color->val.pattern].used_on_current_page = pdc_true; - break; - - - case Indexed: /* LATER */ - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", - p->colorspaces[color->cs].type), 0, 0, 0); - } -} /* pdf_write_color_values */ - -static pdc_bool -pdf_color_equal(PDF *p, pdf_color *c1, pdf_color *c2) -{ - pdf_colorspace *cs1; - - cs1 = &p->colorspaces[c1->cs]; - - if (c1->cs != c2->cs) - return pdc_false; - - switch (cs1->type) { - case DeviceGray: - return (c1->val.gray == c2->val.gray); - break; - - case DeviceRGB: - return (c1->val.rgb.r == c2->val.rgb.r && - c1->val.rgb.g == c2->val.rgb.g && - c1->val.rgb.b == c2->val.rgb.b); - break; - - case DeviceCMYK: - return (c1->val.cmyk.c == c2->val.cmyk.c && - c1->val.cmyk.m == c2->val.cmyk.m && - c1->val.cmyk.y == c2->val.cmyk.y && - c1->val.cmyk.k == c2->val.cmyk.k); - break; - - case Indexed: - return (c1->val.idx == c2->val.idx); - break; - - case PatternCS: - return (c1->val.pattern == c2->val.pattern); - break; - - - default: - break; - } - - return pdc_true; -} /* pdf_color_equal */ - -static pdc_bool -pdf_colorspace_equal(PDF *p, pdf_colorspace *cs1, pdf_colorspace *cs2) -{ - if (cs1->type != cs2->type) - return pdc_false; - - switch (cs1->type) { - case DeviceGray: - case DeviceRGB: - case DeviceCMYK: - return pdc_true; - break; - - - case Indexed: - return ((cs1->val.indexed.base == cs2->val.indexed.base) && - (cs1->val.indexed.palette_size==cs2->val.indexed.palette_size)&& - (cs1->val.indexed.colormap_id != PDC_BAD_ID && - cs1->val.indexed.colormap_id == cs2->val.indexed.colormap_id)); - break; - - case PatternCS: - return (cs1->val.pattern.base == cs2->val.pattern.base); - break; - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs1->type), 0, 0, 0); - } - - return pdc_false; -} /* pdf_colorspace_equal */ - -static void -pdf_grow_colorspaces(PDF *p) -{ - int i; - - p->colorspaces = (pdf_colorspace *) pdc_realloc(p->pdc, p->colorspaces, - sizeof(pdf_colorspace) * 2 * p->colorspaces_capacity, - "pdf_grow_colorspaces"); - - for (i = p->colorspaces_capacity; i < 2 * p->colorspaces_capacity; i++) { - p->colorspaces[i].used_on_current_page = pdc_false; - } - - p->colorspaces_capacity *= 2; -} - -int -pdf_add_colorspace(PDF *p, pdf_colorspace *cs, pdc_bool inuse) -{ - pdf_colorspace *cs_new; - static const char fn[] = "pdf_add_colorspace"; - int slot; - - for (slot = 0; slot < p->colorspaces_number; slot++) - { - if (pdf_colorspace_equal(p, &p->colorspaces[slot], cs)) - { - if (inuse) - p->colorspaces[slot].used_on_current_page = pdc_true; - return slot; - } - } - - slot = p->colorspaces_number; - - if (p->colorspaces_number >= p->colorspaces_capacity) - pdf_grow_colorspaces(p); - - cs_new = &p->colorspaces[slot]; - - cs_new->type = cs->type; - - /* don't allocate id for simple color spaces, since we don't write these */ - if (PDF_SIMPLE_COLORSPACE(cs)) { - cs_new->obj_id = PDC_BAD_ID; - cs_new->used_on_current_page = pdc_false; - - } else { - cs_new->obj_id = pdc_alloc_id(p->out); - cs_new->used_on_current_page = inuse; - } - - switch (cs_new->type) { - case DeviceGray: - case DeviceRGB: - case DeviceCMYK: - break; - - - case Indexed: - cs_new->val.indexed.base = cs->val.indexed.base; - cs_new->val.indexed.palette_size = cs->val.indexed.palette_size; - cs_new->val.indexed.colormap_id = pdc_alloc_id(p->out); - cs_new->val.indexed.colormap = - (pdf_colormap *) pdc_malloc(p->pdc, sizeof(pdf_colormap), fn); - memcpy(cs_new->val.indexed.colormap, cs->val.indexed.colormap, - sizeof(pdf_colormap)); - cs_new->val.indexed.colormap_done = pdc_false; - break; - - case PatternCS: - cs_new->val.pattern.base = cs->val.pattern.base; - break; - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs_new->type), 0, 0, 0); - } - - p->colorspaces_number++; - - return slot; -} /* pdf_add_colorspace */ - -void -pdf_init_cstate(PDF *p) -{ - pdf_cstate *cstate; - - cstate = &p->cstate[p->sl]; - - cstate->fill.cs = DeviceGray; - cstate->fill.val.gray = (float) 0.0; - - cstate->stroke.cs = DeviceGray; - cstate->stroke.val.gray = (float) 0.0; -} - -void -pdf_set_color_values(PDF *p, pdf_color *c, pdf_drawmode drawmode) -{ - pdf_color *current; - pdf_colorspace *cs; - - cs = &p->colorspaces[c->cs]; - - if (drawmode == pdf_stroke || drawmode == pdf_fillstroke) { - current = &p->cstate[p->sl].stroke; - - if (!pdf_color_equal(p, current, c) || PDF_FORCE_OUTPUT()) - { - if (PDF_GET_STATE(p) != pdf_state_document) - pdf_write_color_values(p, c, pdf_stroke); - - *current = *c; - } - } - if (drawmode == pdf_fill || drawmode == pdf_fillstroke) { - current = &p->cstate[p->sl].fill; - - if (!pdf_color_equal(p, current, c) || PDF_FORCE_OUTPUT()) - { - if (PDF_GET_STATE(p) != pdf_state_document) - pdf_write_color_values(p, c, pdf_fill); - - *current = *c; - } - } - - /* simple colorspaces don't get written */ - if (!PDF_SIMPLE_COLORSPACE(cs)) - cs->used_on_current_page = pdc_true; - -} /* pdf_set_color_values */ - -PDFLIB_API void PDFLIB_CALL -PDF_setgray_fill(PDF *p, float g) -{ - static const char fn[] = "PDF_setgray_fill"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, g)) - return; - - pdf_check_color_values(p, DeviceGray, g, (float) 0, (float) 0, (float) 0); - c.cs = DeviceGray; - c.val.gray = g; - pdf_set_color_values(p, &c, pdf_fill); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setgray_stroke(PDF *p, float g) -{ - static const char fn[] = "PDF_setgray_stroke"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, g)) - return; - - pdf_check_color_values(p, DeviceGray, g, (float) 0, (float) 0, (float) 0); - c.cs = DeviceGray; - c.val.gray = g; - pdf_set_color_values(p, &c, pdf_stroke); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setgray(PDF *p, float g) -{ - static const char fn[] = "PDF_setgray"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, g)) - return; - - pdf_check_color_values(p, DeviceGray, g, (float) 0, (float) 0, (float) 0); - c.cs = DeviceGray; - c.val.gray = g; - pdf_set_color_values(p, &c, pdf_fillstroke); -} - -/* RGB functions */ - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor_fill(PDF *p, float r, float g, float b) -{ - static const char fn[] = "PDF_setrgbcolor_fill"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g, %g)\n", - (void *) p, r, g, b)) - return; - - pdf_check_color_values(p, DeviceRGB, r, g, b, 0); - c.cs = DeviceRGB; - c.val.rgb.r = r; - c.val.rgb.g = g; - c.val.rgb.b = b; - pdf_set_color_values(p, &c, pdf_fill); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor_stroke(PDF *p, float r, float g, float b) -{ - static const char fn[] = "PDF_setrgbcolor_stroke"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g, %g)\n", - (void *) p, r, g, b)) - return; - - pdf_check_color_values(p, DeviceRGB, r, g, b, 0); - c.cs = DeviceRGB; - c.val.rgb.r = r; - c.val.rgb.g = g; - c.val.rgb.b = b; - pdf_set_color_values(p, &c, pdf_stroke); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor(PDF *p, float r, float g, float b) -{ - static const char fn[] = "PDF_setrgbcolor"; - pdf_color c; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g, %g)\n", - (void *) p, r, g, b)) - return; - - pdf_check_color_values(p, DeviceRGB, r, g, b, 0); - c.cs = DeviceRGB; - c.val.rgb.r = r; - c.val.rgb.g = g; - c.val.rgb.b = b; - pdf_set_color_values(p, &c, pdf_fillstroke); -} - -void -pdf_init_colorspaces(PDF *p) -{ - int i, slot; - pdf_colorspace cs; - - - p->colorspaces_number = 0; - p->colorspaces_capacity = COLORSPACES_CHUNKSIZE; - - p->colorspaces = (pdf_colorspace *) - pdc_malloc(p->pdc, sizeof(pdf_colorspace) * p->colorspaces_capacity, - "pdf_init_colorspaces"); - - for (i = 0; i < p->colorspaces_capacity; i++) { - p->colorspaces[i].used_on_current_page = pdc_false; - } - - /* - * Initialize a few slots with simple color spaces for easier use. - * These can be used without further ado: the slot number is identical - * to the enum value due to the ordering below. - */ - - cs.type = DeviceGray; - slot = pdf_add_colorspace(p, &cs, pdc_false); - cs.type = DeviceRGB; - slot = pdf_add_colorspace(p, &cs, pdc_false); - cs.type = DeviceCMYK; - slot = pdf_add_colorspace(p, &cs, pdc_false); - -} /* pdf_init_colorspaces */ - -void -pdf_write_page_colorspaces(PDF *p) -{ - int i, total = 0; - - for (i = 0; i < p->colorspaces_number; i++) - if (p->colorspaces[i].used_on_current_page) - total++; - - if (total > 0 - ) { - pdc_puts(p->out, "/ColorSpace"); - - pdc_begin_dict(p->out); /* color space names */ - - for (i = 0; i < p->colorspaces_number; i++) { - pdf_colorspace *cs = &p->colorspaces[i]; - - if (cs->used_on_current_page) { - cs->used_on_current_page = pdc_false; /* reset */ - - /* don't write simple color spaces as resource */ - if (!PDF_SIMPLE_COLORSPACE(cs)) - pdc_printf(p->out, "/CS%d %ld 0 R\n", i, cs->obj_id); - } - } - - - pdc_end_dict(p->out); /* color space names */ - } -} /* pdf_write_page_colorspaces */ - -void -pdf_write_function_dict(PDF *p, pdf_color *c0, pdf_color *c1, float N) -{ - pdf_colorspace *cs; - - cs = &p->colorspaces[c1->cs]; - - pdc_begin_dict(p->out); /* function dict */ - - pdc_puts(p->out, "/FunctionType 2\n"); - pdc_puts(p->out, "/Domain[0 1]\n"); - pdc_printf(p->out, "/N %f\n", N); - - switch (cs->type) { - - case DeviceGray: - pdc_puts(p->out, "/Range[0 1]\n"); - if (c0->val.gray != 0) pdc_printf(p->out, "/C0[%f]\n", c0->val.gray); - if (c1->val.gray != 1) pdc_printf(p->out, "/C1[%f]", c1->val.gray); - break; - - case DeviceRGB: - pdc_puts(p->out, "/Range[0 1 0 1 0 1]\n"); - pdc_printf(p->out, "/C0[%f %f %f]\n", - c0->val.rgb.r, c0->val.rgb.g, c0->val.rgb.b); - pdc_printf(p->out, "/C1[%f %f %f]", - c1->val.rgb.r, c1->val.rgb.g, c1->val.rgb.b); - break; - - case DeviceCMYK: - pdc_puts(p->out, "/Range[0 1 0 1 0 1 0 1]\n"); - pdc_printf(p->out, "/C0[%f %f %f %f]\n", - c0->val.cmyk.c, c0->val.cmyk.m, c0->val.cmyk.y, c0->val.cmyk.k); - pdc_printf(p->out, "/C1[%f %f %f %f]", - c1->val.cmyk.c, c1->val.cmyk.m, c1->val.cmyk.y, c1->val.cmyk.k); - break; - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs->type), 0, 0, 0); - } - - pdc_end_dict(p->out); /* function dict */ -} /* pdf_write_function_dict */ - -void -pdf_write_colormap(PDF *p, int slot) -{ - PDF_data_source src; - pdf_colorspace *cs, *base; - pdc_id length_id; - - cs = &p->colorspaces[slot]; - - if (cs->type != Indexed || cs->val.indexed.colormap_done == pdc_true) - return; - - base = &p->colorspaces[cs->val.indexed.base]; - - pdc_begin_obj(p->out, cs->val.indexed.colormap_id); /* colormap object */ - pdc_begin_dict(p->out); - - if (p->debug['a']) - pdc_puts(p->out, "/Filter/ASCIIHexDecode\n"); - else if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - /* Length of colormap object */ - length_id = pdc_alloc_id(p->out); - pdc_printf(p->out,"/Length %ld 0 R\n", length_id); - pdc_end_dict(p->out); - - src.init = NULL; - src.fill = pdf_data_source_buf_fill; - src.terminate = NULL; - - src.buffer_start = (unsigned char *) cs->val.indexed.colormap; - - src.buffer_length = (size_t) (cs->val.indexed.palette_size * - pdf_color_components(p, cs->val.indexed.base)); - - src.bytes_available = 0; - src.next_byte = NULL; - - /* Write colormap data */ - if (p->debug['a']) - pdf_ASCIIHexEncode(p, &src); - else { - pdf_copy_stream(p, &src, pdc_true); /* colormap data */ - } - - pdc_end_obj(p->out); /* colormap object */ - - pdc_put_pdfstreamlength(p->out, length_id); - - /* free the colormap now that it's written */ - pdc_free(p->pdc, cs->val.indexed.colormap); - cs->val.indexed.colormap = NULL; - cs->val.indexed.colormap_done = pdc_true; -} /* pdf_write_colormap */ - -void -pdf_write_colorspace(PDF *p, int slot, pdc_bool direct) -{ - pdf_colorspace *cs; - int base; - - if (slot < 0 || slot >= p->colorspaces_number) - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", slot), 0, 0, 0); - - cs = &p->colorspaces[slot]; - - /* we always write simple colorspaces directly */ - if (PDF_SIMPLE_COLORSPACE(cs)) - direct = pdc_true; - - if (!direct) { - pdc_printf(p->out, " %ld 0 R", cs->obj_id); - return; - } - - switch (cs->type) { - case DeviceGray: - pdc_printf(p->out, "/DeviceGray"); - break; - - case DeviceRGB: - pdc_printf(p->out, "/DeviceRGB"); - break; - - case DeviceCMYK: - pdc_printf(p->out, "/DeviceCMYK"); - break; - - - - case Indexed: - base = cs->val.indexed.base; - - pdc_puts(p->out, "[/Indexed"); - - pdf_write_colorspace(p, base, pdc_false); - pdc_puts(p->out, " "); - - pdc_printf(p->out, "%d %ld 0 R", cs->val.indexed.palette_size - 1, - cs->val.indexed.colormap_id); - pdc_puts(p->out, "]"); - break; - - case PatternCS: - pdc_printf(p->out, "[/Pattern"); - pdf_write_colorspace(p, cs->val.pattern.base, pdc_false); - pdc_puts(p->out, "]"); - break; - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs->type), 0, 0, 0); - } -} /* pdf_write_colorspace */ - -void -pdf_write_doc_colorspaces(PDF *p) -{ - int i; - - for (i = 0; i < p->colorspaces_number; i++) { - pdf_colorspace *cs = &p->colorspaces[i]; - - /* don't write simple color spaces as resource */ - if (PDF_SIMPLE_COLORSPACE(cs)) - continue; - - pdc_begin_obj(p->out, cs->obj_id); - pdf_write_colorspace(p, i, pdc_true); - pdc_puts(p->out, "\n"); - pdc_end_obj(p->out); /* color space resource */ - - pdf_write_colormap(p, i); /* write pending colormaps */ - } -} - -void -pdf_cleanup_colorspaces(PDF *p) -{ - int i; - - if (!p->colorspaces) - return; - - for (i = 0; i < p->colorspaces_number; i++) { - pdf_colorspace *cs = &p->colorspaces[i];; - - switch (cs->type) { - case DeviceGray: - case DeviceRGB: - case DeviceCMYK: - case PatternCS: - break; - - case Indexed: - if (cs->val.indexed.colormap) - pdc_free(p->pdc, cs->val.indexed.colormap); - break; - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", cs->type), 0, 0, 0); - } - } - - pdc_free(p->pdc, p->colorspaces); - p->colorspaces = NULL; -} - - - - - -PDFLIB_API int PDFLIB_CALL -PDF_makespotcolor(PDF *p, const char *spotname, int reserved) -{ - static const char fn[] = "PDF_makespotcolor"; - int slot = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_document), - "(p[%p], \"%s\", %d)", (void *) p, spotname, reserved)) - { - PDF_RETURN_HANDLE(p, slot) - } - - pdc_error(p->pdc, PDF_E_UNSUPP_SPOTCOLOR, 0, 0, 0, 0); - - PDF_RETURN_HANDLE(p, slot) -} - - - -static void -pdf_check_color_values( - PDF *p, - pdf_colorspacetype type, - float c1, float c2, float c3, float c4) -{ - switch (type) { - case DeviceGray: - if (c1 < 0.0 || c1 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c1", pdc_errprintf(p->pdc, "%f", c1), 0, 0); - break; - - case DeviceRGB: - if (c1 < 0.0 || c1 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c1", pdc_errprintf(p->pdc, "%f", c1), 0, 0); - if (c2 < 0.0 || c2 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c2", pdc_errprintf(p->pdc, "%f", c2), 0, 0); - if (c3 < 0.0 || c3 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c3", pdc_errprintf(p->pdc, "%f", c3), 0, 0); - - break; - - case DeviceCMYK: - if (c1 < 0.0 || c1 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c1", pdc_errprintf(p->pdc, "%f", c1), 0, 0); - if (c2 < 0.0 || c2 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c2", pdc_errprintf(p->pdc, "%f", c2), 0, 0); - if (c3 < 0.0 || c3 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c3", pdc_errprintf(p->pdc, "%f", c3), 0, 0); - - if (c4 < 0.0 || c4 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c4", pdc_errprintf(p->pdc, "%f", c4), 0, 0); - break; - - - - case PatternCS: - pdf_check_handle(p, (int) c1, pdc_patternhandle); - break; - - case Separation: - pdf_check_handle(p, (int) c1, pdc_colorhandle); - if (c2 < 0.0 || c2 > EPSILON ) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "c2", pdc_errprintf(p->pdc, "%f", c2), 0, 0); - break; - - case Indexed: - default: - break; - } -} /* pdf_check_color_values */ - -static const pdc_keyconn pdf_fstype_keylist[] = -{ - {"stroke", pdf_stroke}, - {"fill", pdf_fill}, - {"fillstroke", pdf_stroke | pdf_fill}, - {"both", pdf_stroke | pdf_fill}, - {NULL, 0} -}; - -void -pdf__setcolor( - PDF *p, - const char *fstype, - const char *colorspace, - float c1, float c2, float c3, float c4) -{ - pdf_color c; - pdf_drawmode drawmode = pdf_none; - pdf_colorspace cs; - int k; - - k = pdc_get_keycode_ci(fstype, pdf_fstype_keylist); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "fstype", fstype, 0, 0); - drawmode = (pdf_drawmode) k; - - k = pdc_get_keycode_ci(colorspace, pdf_colorspace_keylist); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "colorspace", colorspace, 0, 0); - cs.type = (pdf_colorspacetype) k; - - switch (cs.type) { - - case DeviceGray: - c.cs = cs.type; - c.val.gray = c1; - pdf_check_color_values(p, cs.type, c1, c2, c3, c4); - break; - - case DeviceRGB: - c.cs = cs.type; - c.val.rgb.r = c1; - c.val.rgb.g = c2; - c.val.rgb.b = c3; - pdf_check_color_values(p, cs.type, c1, c2, c3, c4); - break; - - case DeviceCMYK: - c.cs = cs.type; - c.val.cmyk.c = c1; - c.val.cmyk.m = c2; - c.val.cmyk.y = c3; - c.val.cmyk.k = c4; - pdf_check_color_values(p, cs.type, c1, c2, c3, c4); - break; - - - case PatternCS: - - c.val.pattern = (int) c1; - PDF_INPUT_HANDLE(p, c.val.pattern) - pdf_check_color_values(p, cs.type, c1, c2, c3, c4); - - if (p->pattern[c.val.pattern].painttype == 1) { - cs.val.pattern.base = pdc_undef; - c.cs = pdf_add_colorspace(p, &cs, pdc_false); - } else { - cs.val.pattern.base = p->cstate[p->sl].fill.cs; - c.cs = pdf_add_colorspace(p, &cs, pdc_true); - } - break; - - - default: - pdc_error(p->pdc, PDC_E_OPT_UNSUPP, colorspace, 0, 0, 0); - } - - pdf_set_color_values(p, &c, drawmode); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setcolor( - PDF *p, - const char *fstype, - const char *colorspace, - float c1, float c2, float c3, float c4) -{ - static const char fn[] = "PDF_setcolor"; - int legal_states; - - if (PDF_GET_STATE(p) == pdf_state_glyph && !pdf_get_t3colorized(p)) - legal_states = pdf_state_page | pdf_state_pattern | pdf_state_template; - else - legal_states = pdf_state_content | pdf_state_document; - - if (!pdf_enter_api(p, fn, (pdf_state) legal_states, - "(p[%p], \"%s\", \"%s\", %g, %g, %g, %g)\n", - (void *) p, fstype, colorspace, c1, c2, c3, c4)) - return; - - if (!fstype || !*fstype) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fstype", 0, 0, 0); - - if (!colorspace || !*colorspace) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "colorspace", 0, 0, 0); - - pdf__setcolor(p, fstype, colorspace, c1, c2, c3, c4); -} diff --git a/src/libs/pdflib/libs/pdflib/p_color.h b/src/libs/pdflib/libs/pdflib/p_color.h deleted file mode 100644 index a1238209c7..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_color.h +++ /dev/null @@ -1,155 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_color.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib color definitions - * - */ - -#ifndef P_COLOR_H -#define P_COLOR_H - -typedef enum { - NoColor = -1, DeviceGray = 0, DeviceRGB, DeviceCMYK, - CalGray, CalRGB, Lab, ICCBased, - Indexed, PatternCS, Separation, DeviceN -} pdf_colorspacetype; - -/* - * These are treated specially in the global colorspace list, and are not - * written as /ColorSpace resource since we always specify them directly. - * Pattern colorspace with base == pdc_undef means PaintType == 1. - */ -#define PDF_SIMPLE_COLORSPACE(cs) \ - ((cs)->type == DeviceGray || \ - (cs)->type == DeviceRGB || \ - (cs)->type == DeviceCMYK || \ - ((cs)->type == PatternCS && cs->val.pattern.base == pdc_undef)) - -/* Rendering Intents */ -typedef enum { - AutoIntent = 0, - AbsoluteColorimetric, - RelativeColorimetric, - Saturation, - Perceptual -} pdf_renderingintent; - -/* BlendModes */ -typedef enum { - BM_None = 0, - BM_Normal = 1<<0, - BM_Multiply = 1<<1, - BM_Screen = 1<<2, - BM_Overlay = 1<<3, - BM_Darken = 1<<4, - BM_Lighten = 1<<5, - BM_ColorDodge = 1<<6, - BM_ColorBurn = 1<<7, - BM_HardLight = 1<<8, - BM_SoftLight = 1<<9, - BM_Difference = 1<<10, - BM_Exclusion = 1<<11, - BM_Hue = 1<<12, - BM_Saturation = 1<<13, - BM_Color = 1<<14, - BM_Luminosity = 1<<15 -} pdf_blendmode; - - -struct pdf_pattern_s { - pdc_id obj_id; /* object id of this pattern */ - int painttype; /* colored (1) or uncolored (2) */ - pdc_bool used_on_current_page; /* this pattern used on current page */ -}; - -typedef enum { - pdf_none = 0, - pdf_fill, - pdf_stroke, - pdf_fillstroke -} pdf_drawmode; - -typedef pdc_byte pdf_colormap[256][3]; - -typedef struct pdf_colorspace_s pdf_colorspace; - -typedef struct { - int cs; /* slot of underlying color space */ - - union { - float gray; /* DeviceGray */ - int pattern; /* Pattern */ - int idx; /* Indexed */ - struct { /* DeviceRGB */ - float r; - float g; - float b; - } rgb; - struct { /* DeviceCMYK */ - float c; - float m; - float y; - float k; - } cmyk; - } val; -} pdf_color; - -struct pdf_colorspace_s { - pdf_colorspacetype type; /* color space type */ - - union { - struct { /* Indexed */ - int base; /* base color space */ - pdf_colormap *colormap; /* pointer to colormap */ - pdc_bool colormap_done; /* colormap already written to output */ - int palette_size; /* # of palette entries (not bytes!) */ - pdc_id colormap_id; /* object id of colormap */ - } indexed; - - struct { /* Pattern */ - int base; /* base color space for PaintType 2 */ - } pattern; - - } val; - - pdc_id obj_id; /* object id of this colorspace */ - pdc_bool used_on_current_page; /* this resource used on current page */ -}; - -typedef struct { - pdf_color fill; - pdf_color stroke; -} pdf_cstate; - -/* p_color.c */ -void pdf_init_cstate(PDF *p); -void pdf_init_colorspaces(PDF *p); -void pdf_write_page_colorspaces(PDF *p); -void pdf_write_function_dict(PDF *p, pdf_color *c0, pdf_color *c1, float N); -void pdf_write_doc_colorspaces(PDF *p); -void pdf_write_colorspace(PDF *p, int slot, pdc_bool direct); -void pdf_write_color_values(PDF *p, pdf_color *color, pdf_drawmode mode); -void pdf_set_color_values(PDF *p, pdf_color *c, pdf_drawmode drawmode); -int pdf_add_colorspace(PDF *p, pdf_colorspace *cs, pdc_bool inuse); -void pdf_cleanup_colorspaces(PDF *p); -void pdf_write_colormap(PDF *p, int slot); -int pdf_color_components(PDF *p, int slot); -int pdf__makespotcolor(PDF *p, const char *spotname); -void pdf__setcolor(PDF *p, const char *fstype, const char *colorspace, - float c1, float c2, float c3, float c4); - - -/* p_pattern.c */ -void pdf_grow_pattern(PDF *p); -#endif /* P_COLOR_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_draw.c b/src/libs/pdflib/libs/pdflib/p_draw.c deleted file mode 100644 index 328757c00d..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_draw.c +++ /dev/null @@ -1,554 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_draw.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib drawing routines - * - */ - -#include "p_intern.h" - -/* Path segment operators */ - -void -pdf_begin_path(PDF *p) -{ - if (PDF_GET_STATE(p) == pdf_state_path) - return; - - pdf_end_text(p); - p->contents = c_path; - PDF_PUSH_STATE(p, "pdf_begin_path", pdf_state_path); -} - -void -pdf_end_path(PDF *p) -{ - p->contents = c_page; - PDF_POP_STATE(p, "pdf_end_path"); - - p->gstate[p->sl].x = (float) 0.0; - p->gstate[p->sl].y = (float) 0.0; -} - -/* ----------------- Basic functions for API functions --------------*/ - -void -pdf__moveto(PDF *p, float x, float y) -{ - p->gstate[p->sl].startx = p->gstate[p->sl].x = x; - p->gstate[p->sl].starty = p->gstate[p->sl].y = y; - - pdf_begin_path(p); - pdc_printf(p->out, "%f %f m\n", x, y); -} - -void -pdf__rmoveto(PDF *p, float x, float y) -{ - float x_0 = p->gstate[p->sl].x; - float y_0 = p->gstate[p->sl].y; - - pdf__moveto(p, x_0 + x, y_0 + y); -} - -void -pdf__lineto(PDF *p, float x, float y) -{ - pdc_printf(p->out, "%f %f l\n", x, y); - - p->gstate[p->sl].x = x; - p->gstate[p->sl].y = y; -} - -void -pdf__rlineto(PDF *p, float x, float y) -{ - float x_0 = p->gstate[p->sl].x; - float y_0 = p->gstate[p->sl].y; - - pdf__lineto(p, x_0 + x, y_0 + y); -} - -void -pdf__curveto(PDF *p, - float x_1, float y_1, - float x_2, float y_2, - float x_3, float y_3) -{ - if (x_2 == x_3 && y_2 == y_3) /* second c.p. coincides with final point */ - pdc_printf(p->out, "%f %f %f %f y\n", x_1, y_1, x_3, y_3); - - else /* general case with four distinct points */ - pdc_printf(p->out, "%f %f %f %f %f %f c\n", - x_1, y_1, x_2, y_2, x_3, y_3); - - p->gstate[p->sl].x = x_3; - p->gstate[p->sl].y = y_3; -} - -void -pdf__rcurveto(PDF *p, - float x_1, float y_1, - float x_2, float y_2, - float x_3, float y_3) -{ - float x_0 = p->gstate[p->sl].x; - float y_0 = p->gstate[p->sl].y; - - pdf__curveto(p, x_0 + x_1, y_0 + y_1, - x_0 + x_2, y_0 + y_2, - x_0 + x_3, y_0 + y_3); -} - -void -pdf__rrcurveto(PDF *p, - float x_1, float y_1, - float x_2, float y_2, - float x_3, float y_3) -{ - pdf__rcurveto(p, x_1, y_1, - x_1 + x_2, y_1 + y_2, - x_1 + x_2 + x_3, y_1 + y_2 + y_3); -} - -void -pdf__hvcurveto(PDF *p, float x_1, float x_2, float y_2, float y_3) -{ - pdf__rrcurveto(p, x_1, 0, x_2, y_2, 0, y_3); -} - -void -pdf__vhcurveto(PDF *p, float y_1, float x_2, float y_2, float x_3) -{ - pdf__rrcurveto(p, 0, y_1, x_2, y_2, x_3, 0); -} - -void -pdf__rect(PDF *p, float x, float y, float width, float height) -{ - p->gstate[p->sl].startx = p->gstate[p->sl].x = x; - p->gstate[p->sl].starty = p->gstate[p->sl].y = y; - - pdf_begin_path(p); - pdc_printf(p->out, "%f %f %f %f re\n", x, y, width, p->ydirection * height); -} - -/* 4/3 * (1-cos 45°)/sin 45° = 4/3 * sqrt(2) - 1 */ -#define ARC_MAGIC ((float) 0.552284749) - -static void -pdf_short_arc(PDF *p, float x, float y, float r, float alpha, float beta) -{ - float bcp; - float cos_alpha, cos_beta, sin_alpha, sin_beta; - - alpha = (float) (alpha * PDC_M_PI / 180); - beta = (float) (beta * PDC_M_PI / 180); - - /* This formula yields ARC_MAGIC for alpha == 0, beta == 90 degrees */ - bcp = (float) (4.0/3 * (1 - cos((beta - alpha)/2)) / sin((beta - alpha)/2)); - - sin_alpha = (float) sin(alpha); - sin_beta = (float) sin(beta); - cos_alpha = (float) cos(alpha); - cos_beta = (float) cos(beta); - - pdf__curveto(p, - x + r * (cos_alpha - bcp * sin_alpha), /* p1 */ - y + r * (sin_alpha + bcp * cos_alpha), - x + r * (cos_beta + bcp * sin_beta), /* p2 */ - y + r * (sin_beta - bcp * cos_beta), - x + r * cos_beta, /* p3 */ - y + r * sin_beta); -} - -static void -pdf_orient_arc(PDF *p, float x, float y, float r, float alpha, float beta, - float orient) -{ - float rad_a = (float) (alpha * PDC_M_PI / 180); - float startx = (float) (x + r * cos(rad_a)); - float starty = (float) (y + r * sin(rad_a)); - - if (r < 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "r", pdc_errprintf(p->pdc, "%f", r), 0, 0); - - if (p->contents != c_path) - pdf__moveto(p, startx, starty); - else if ((p->gstate[p->sl].x != startx || p->gstate[p->sl].y != starty)) - pdf__lineto(p, startx, starty); - - if (orient > 0) - { - while (beta < alpha) - beta += 360; - - if (alpha == beta) - return; - - while (beta - alpha > 90) - { - pdf_short_arc(p, x, y, r, alpha, alpha + 90); - alpha += 90; - } - } - else - { - while (alpha < beta) - alpha += 360; - - if (alpha == beta) - return; - - while (alpha - beta > 90) - { - pdf_short_arc(p, x, y, r, alpha, alpha - 90); - alpha -= 90; - } - } - - if (alpha != beta) - pdf_short_arc(p, x, y, r, alpha, beta); -} - -void -pdf__arc(PDF *p, float x, float y, float r, float alpha, float beta) -{ - pdf_orient_arc(p, x, y, r, - p->ydirection * alpha, p->ydirection * beta, p->ydirection); -} - -void -pdf__arcn(PDF *p, float x, float y, float r, float alpha, float beta) -{ - pdf_orient_arc(p, x, y, r, - p->ydirection * alpha, p->ydirection * beta, -p->ydirection); -} - -void -pdf__circle(PDF *p, float x, float y, float r) -{ - if (r < 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "r", pdc_errprintf(p->pdc, "%f", r), 0, 0); - - /* - * pdf_begin_path() not required since we descend to other - * path segment functions. - */ - - /* draw four Bezier curves to approximate a circle */ - pdf__moveto(p, x + r, y); - pdf__curveto(p, x + r, y + r*ARC_MAGIC, x + r*ARC_MAGIC, y + r, x, y + r); - pdf__curveto(p, x - r*ARC_MAGIC, y + r, x - r, y + r*ARC_MAGIC, x - r, y); - pdf__curveto(p, x - r, y - r*ARC_MAGIC, x - r*ARC_MAGIC, y - r, x, y - r); - pdf__curveto(p, x + r*ARC_MAGIC, y - r, x + r, y - r*ARC_MAGIC, x + r, y); - - pdf__closepath(p); -} - -void -pdf__closepath(PDF *p) -{ - pdc_puts(p->out, "h\n"); - - p->gstate[p->sl].x = p->gstate[p->sl].startx; - p->gstate[p->sl].y = p->gstate[p->sl].starty; -} - -void -pdf__endpath(PDF *p) -{ - pdc_puts(p->out, "n\n"); - pdf_end_path(p); -} - -void -pdf__stroke(PDF *p) -{ - pdc_puts(p->out, "S\n"); - pdf_end_path(p); -} - -void -pdf__closepath_stroke(PDF *p) -{ - pdc_puts(p->out, "s\n"); - pdf_end_path(p); -} - -void -pdf__fill(PDF *p) -{ - if (p->fillrule == pdf_fill_winding) - pdc_puts(p->out, "f\n"); - else if (p->fillrule == pdf_fill_evenodd) - pdc_puts(p->out, "f*\n"); - - pdf_end_path(p); -} - -void -pdf__fill_stroke(PDF *p) -{ - if (p->fillrule == pdf_fill_winding) - pdc_puts(p->out, "B\n"); - else if (p->fillrule == pdf_fill_evenodd) - pdc_puts(p->out, "B*\n"); - - pdf_end_path(p); -} - -void -pdf__closepath_fill_stroke(PDF *p) -{ - if (p->fillrule == pdf_fill_winding) - pdc_puts(p->out, "b\n"); - else if (p->fillrule == pdf_fill_evenodd) - pdc_puts(p->out, "b*\n"); - - pdf_end_path(p); -} - -void -pdf__clip(PDF *p) -{ - if (p->fillrule == pdf_fill_winding) - pdc_puts(p->out, "W n\n"); - else if (p->fillrule == pdf_fill_evenodd) - pdc_puts(p->out, "W* n\n"); - - pdf_end_path(p); -} - -/* --------------------------- API functions ------------------------------*/ - -PDFLIB_API void PDFLIB_CALL -PDF_moveto(PDF *p, float x, float y) -{ - static const char fn[] = "PDF_moveto"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g)\n", (void *) p, x, y)) - { - pdf__moveto(p, x, y); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_rmoveto(PDF *p, float x, float y) -{ - static const char fn[] = "PDF_rmoveto"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g)\n", (void *) p, x, y)) - { - pdf__rmoveto(p, x, y); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_lineto(PDF *p, float x, float y) -{ - static const char fn[] = "PDF_lineto"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p], %g, %g)\n", - (void *) p, x, y)) - { - pdf__lineto(p, x, y); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_rlineto(PDF *p, float x, float y) -{ - static const char fn[] = "PDF_rlineto"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p], %g, %g)\n", - (void *) p, x, y)) - { - pdf__rlineto(p, x, y); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_curveto(PDF *p, - float x_1, float y_1, float x_2, float y_2, float x_3, float y_3) -{ - static const char fn[] = "PDF_curveto"; - - if (pdf_enter_api(p, fn, pdf_state_path, - "(p[%p], %g, %g, %g, %g, %g, %g)\n", - (void *) p, x_1, y_1, x_2, y_2, x_3, y_3)) - { - pdf__curveto(p, x_1, y_1, x_2, y_2, x_3, y_3); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_rcurveto(PDF *p, - float x_1, float y_1, float x_2, float y_2, float x_3, float y_3) -{ - static const char fn[] = "PDF_rcurveto"; - - if (pdf_enter_api(p, fn, pdf_state_path, - "(p[%p], %g, %g, %g, %g, %g, %g)\n", - (void *) p, x_1, y_1, x_2, y_2, x_3, y_3)) - { - pdf__rcurveto(p, x_1, y_1, x_2, y_2, x_3, y_3); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_rect(PDF *p, float x, float y, float width, float height) -{ - static const char fn[] = "PDF_rect"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g, %g, %g)\n", (void *) p, x, y, width, height)) - { - pdf__rect(p, x, y, width, height); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_arc(PDF *p, float x, float y, float r, float alpha, float beta) -{ - static const char fn[] = "PDF_arc"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g, %g, %g, %g)\n", (void *) p, x, y, r, alpha, beta)) - { - pdf__arc(p, x, y, r, alpha, beta); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_arcn(PDF *p, float x, float y, float r, float alpha, float beta) -{ - static const char fn[] = "PDF_arcn"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g, %g, %g, %g)\n", (void *) p, x, y, r, alpha, beta)) - { - pdf__arcn(p, x, y, r, alpha, beta); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_circle(PDF *p, float x, float y, float r) -{ - static const char fn[] = "PDF_circle"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_path), - "(p[%p], %g, %g, %g)\n", (void *) p, x, y, r)) - { - pdf__circle(p, x, y, r); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_closepath(PDF *p) -{ - static const char fn[] = "PDF_closepath"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__closepath(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_endpath(PDF *p) -{ - static const char fn[] = "PDF_endpath"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__endpath(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_stroke(PDF *p) -{ - static const char fn[] = "PDF_stroke"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__stroke(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_closepath_stroke(PDF *p) -{ - static const char fn[] = "PDF_closepath_stroke"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__closepath_stroke(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_fill(PDF *p) -{ - static const char fn[] = "PDF_fill"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__fill(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_fill_stroke(PDF *p) -{ - static const char fn[] = "PDF_fill_stroke"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__fill_stroke(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_closepath_fill_stroke(PDF *p) -{ - static const char fn[] = "PDF_closepath_fill_stroke"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__closepath_fill_stroke(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_clip(PDF *p) -{ - static const char fn[] = "PDF_clip"; - - if (pdf_enter_api(p, fn, pdf_state_path, "(p[%p])\n", (void *) p)) - { - pdf__clip(p); - } -} diff --git a/src/libs/pdflib/libs/pdflib/p_encoding.c b/src/libs/pdflib/libs/pdflib/p_encoding.c deleted file mode 100644 index 9d96fdc8ea..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_encoding.c +++ /dev/null @@ -1,945 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_encoding.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib encoding handling routines - * - */ - -#include "p_intern.h" -#include "p_font.h" - -#if defined(WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#endif /* WIN32 */ - - - -void -pdf__encoding_set_char(PDF *p, const char *encoding, int slot, - const char *glyphname, int uv) -{ - int enc; - pdc_encodingvector *ev; - char given; - - for (enc = (int) pdc_invalidenc + 1; enc < (int) pdc_firstvarenc; enc++) - { - if (!strcmp(encoding, pdc_get_fixed_encoding_name((pdc_encoding) enc))) - pdc_error(p->pdc, PDF_E_ENC_CANTCHANGE, encoding, 0, 0, 0); - } - - if (uv == 0) - { - given = 1; - uv = (int) pdf_insert_glyphname(p, glyphname); - } - else if (!glyphname || !*glyphname) - { - given = 0; - glyphname = pdf_insert_unicode(p, (pdc_ushort) uv); - } - else - { - const char *reg_glyphname; - pdc_ushort reg_uv; - - given = 1; - reg_glyphname = pdc_unicode2adobe((pdc_ushort) uv); - if (reg_glyphname) - { - if (strcmp(reg_glyphname, glyphname) && - p->debug['F'] == pdc_true) - { - pdc_warning(p->pdc, PDF_E_ENC_BADGLYPH, - glyphname, - pdc_errprintf(p->pdc, "0x%04X", uv), - reg_glyphname, 0); - } - - /* We take the registered name */ - } - else - { - reg_uv = pdc_adobe2unicode(glyphname); - if (reg_uv && reg_uv != (pdc_ushort) uv && - p->debug['F'] == pdc_true) - { - pdc_error(p->pdc, PDF_E_ENC_BADUNICODE, - pdc_errprintf(p->pdc, "0x%04X", uv), glyphname, - pdc_errprintf(p->pdc, "0x%04X", reg_uv), 0); - } - - /* We register the new unicode value */ - pdf_register_glyphname(p, glyphname, (pdc_ushort) uv); - } - } - - /* search for a registered encoding */ - enc = pdf_find_encoding(p, encoding); - if (enc >= p->encodings_capacity) - pdf_grow_encodings(p); - - if (enc == pdc_invalidenc) - { - enc = p->encodings_number; - p->encodings[enc].ev = pdc_new_encoding(p->pdc, encoding); - p->encodings[enc].ev->flags |= PDC_ENC_USER; - p->encodings[enc].ev->flags |= PDC_ENC_SETNAMES; - p->encodings[enc].ev->flags |= PDC_ENC_ALLOCCHARS; - p->encodings_number++; - } - else if (!(p->encodings[enc].ev->flags & PDC_ENC_USER)) - { - pdc_error(p->pdc, PDF_E_ENC_CANTCHANGE, encoding, 0, 0, 0); - } - else if (p->encodings[enc].ev->flags & PDC_ENC_USED) - { - pdc_error(p->pdc, PDF_E_ENC_INUSE, encoding, 0, 0, 0); - } - - /* Free character name */ - ev = p->encodings[enc].ev; - if (ev->chars[slot] != NULL) - pdc_free(p->pdc, ev->chars[slot]); - - /* Saving */ - ev->codes[slot] = (pdc_ushort) uv; - if (glyphname != NULL) - ev->chars[slot] = pdc_strdup(p->pdc, glyphname); - ev->given[slot] = given; -} - -PDFLIB_API void PDFLIB_CALL -PDF_encoding_set_char(PDF *p, const char *encoding, int slot, - const char *glyphname, int uv) -{ - static const char fn[] = "PDF_encoding_set_char"; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", %d, \"%s\", 0x%04X)\n", - (void *) p, encoding, slot, glyphname, uv)) - { - return; - } - - if (!encoding || !*encoding) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "encoding", 0, 0, 0); - - if (slot < 0 || slot > 255) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - if (uv < 0 || uv > PDC_MAX_UNICODE) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "uv", pdc_errprintf(p->pdc, "%d", uv), 0, 0); - - if (!glyphname || !*glyphname) - { - if (uv == 0) - pdc_error(p->pdc, PDF_E_ENC_GLYPHORCODE, 0, 0, 0, 0); - } - - pdf__encoding_set_char(p, encoding, slot, glyphname, uv); -} - -PDFLIB_API const char * PDFLIB_CALL -PDF_encoding_get_glyphname(PDF *p, const char *encoding, int slot) -{ - static const char fn[] = "PDF_encoding_get_glyphname"; - const char *name = NULL; - pdc_encoding enc; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", 0x%04X)", (void *) p, encoding, slot)) - { - name = ".notdef"; - pdc_trace(p->pdc, "[%s]\n", name); - return name; - } - - /* search for a registered encoding */ - enc = pdf_find_encoding(p, encoding); - - /* Unicode, glyphid or 8-bit encoding */ - if (enc == pdc_unicode) - { - if (slot < 0 || slot > PDC_MAX_UNICODE) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - name = pdf_unicode2glyphname(p, (pdc_ushort) slot); - } - else if (enc == pdc_glyphid) - { - int font = pdf_get_font(p); - if (font > -1) - { - if (slot < 0 || slot >= p->fonts[font].numOfCodes) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - if (p->fonts[font].encoding != pdc_glyphid) - pdc_error(p->pdc, PDF_E_ENC_BADFONT, - pdc_errprintf(p->pdc, "%d", font), - pdf_get_encoding_name(p, enc), 0, 0); - - if (p->fonts[font].GID2Name) - name = (const char *) p->fonts[font].GID2Name[slot]; - else if (p->fonts[font].GID2code) - name = pdf_unicode2glyphname(p, - (pdc_ushort) p->fonts[font].GID2code[slot]); - } - } - else - { - if (slot < 0 || slot >= 256) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - /* cid or builtin */ - if (enc < 0) - pdc_error(p->pdc, PDF_E_ENC_CANTQUERY, encoding, 0, 0, 0); - - if (enc >= p->encodings_number) - pdc_error(p->pdc, PDF_E_ENC_NOTFOUND, encoding, 0, 0, 0); - - pdf_set_encoding_glyphnames(p, enc); - - if (p->encodings[enc].ev->chars[slot]) - name = p->encodings[enc].ev->chars[slot]; - } - - if (!name) - name = ".notdef"; - pdc_trace(p->pdc, "[%s]\n", name); - return name; -} - -PDFLIB_API int PDFLIB_CALL -PDF_encoding_get_unicode(PDF *p, const char *encoding, int slot) -{ - static const char fn[] = "PDF_encoding_get_unicode"; - pdc_encoding enc; - int code = 0; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", 0x%04X)", (void *) p, encoding, slot)) - { - pdc_trace(p->pdc, "[%d]\n", code); - return code; - } - - /* search for a registered encoding */ - enc = pdf_find_encoding(p, encoding); - - /* Unicode, glyphid or 8-bit encoding */ - if (enc == pdc_unicode) - { - if (slot < 0 || slot > PDC_MAX_UNICODE) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - code = slot; - } - else if (enc == pdc_glyphid) - { - int font = pdf_get_font(p); - if (font > -1 && p->fonts[font].GID2code) - { - if (slot < 0 || slot >= p->fonts[font].numOfCodes) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - if (p->fonts[font].encoding != pdc_glyphid) - pdc_error(p->pdc, PDF_E_ENC_BADFONT, - pdc_errprintf(p->pdc, "%d", font), - pdf_get_encoding_name(p, enc), 0, 0); - - code = p->fonts[font].GID2code[slot]; - } - } - else - { - if (slot < 0 || slot > 255) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "slot", pdc_errprintf(p->pdc, "%d", slot), 0, 0); - - /* cid or builtin */ - if (enc < 0) - pdc_error(p->pdc, PDF_E_ENC_CANTQUERY, encoding, 0, 0, 0); - - if (enc >= p->encodings_number) - pdc_error(p->pdc, PDF_E_ENC_NOTFOUND, encoding, 0, 0, 0); - - code = (int) p->encodings[enc].ev->codes[slot]; - } - - pdc_trace(p->pdc, "[%d]\n", code); - return code; -} - - -/* - * Try to read an encoding from file. - * - * Return value: allocated encoding struct - * NULL: error - */ - -pdc_encodingvector * -pdf_read_encoding(PDF *p, const char *encoding, const char *filename) -{ - pdc_encodingvector *ev = NULL; - pdc_file *fp; - char **linelist; - char *line, glyphname[128]; - int slot, nlines = 0, l, i_uv; - pdc_ushort uv; - - enum state { - s_init, s_names, s_codes - } stat = s_init; - - if ((fp = pdf_fopen(p, filename, "encoding ", 0)) == NULL) - { - if (p->debug['F']) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } - else - { - nlines = pdc_read_textfile(p->pdc, fp, &linelist); - pdc_fclose(fp); - } - if (!nlines) - return ev; - - ev = pdc_new_encoding(p->pdc, encoding); - if (ev == NULL) - return ev; - - for (l = 0; l < nlines; l++) - { - line = linelist[l]; - if (stat == s_init) - { - if (sscanf(line, "0x%x", &i_uv) == 1) - stat = s_codes; - else - stat = s_names; - } - - if (stat == s_names) - { - i_uv = 0; - if ((sscanf(line, "%s 0x%x 0x%x", glyphname, &slot, &i_uv) != 3 && - sscanf(line, "%s %d 0x%x", glyphname, &slot, &i_uv) != 3) || - slot < 0 || slot >= 256 || - i_uv < 0 || i_uv > PDC_MAX_UNICODE) - { - if ((sscanf(line, "%s 0x%x", glyphname, &slot) != 2 && - sscanf(line, "%s %d", glyphname, &slot) != 2) || - slot < 0 || slot >= 256) - { - const char *stemp = pdc_errprintf(p->pdc, "%s", line); - pdc_cleanup_encoding(p->pdc, ev); - pdc_cleanup_stringlist(p->pdc, linelist); - ev = NULL; - if (p->debug['F'] == pdc_true) - pdc_error(p->pdc, PDF_E_ENC_BADLINE, - filename, stemp, 0, 0); - else - return ev; - } - uv = pdf_insert_glyphname(p, glyphname); - } - else - { - uv = (pdc_ushort) i_uv; - } - - ev->codes[slot] = uv; - ev->chars[slot] = pdc_strdup(p->pdc, glyphname); - ev->given[slot] = 1; - } - else - { - /* stat == s_codes - */ - if ((sscanf(line, "0x%x 0x%x", &i_uv, &slot) != 2 && - sscanf(line, "0x%x %d", &i_uv, &slot) != 2) || - slot < 0 || slot >= 256 || - i_uv < 0 || i_uv > PDC_MAX_UNICODE) - { - const char *stemp = pdc_errprintf(p->pdc, "%s", line); - pdc_cleanup_encoding(p->pdc, ev); - pdc_cleanup_stringlist(p->pdc, linelist); - ev = NULL; - if (p->debug['F'] == pdc_true) - pdc_error(p->pdc, PDF_E_ENC_BADLINE, - filename, stemp, 0, 0); - else - return ev; - } - - uv = (pdc_ushort) i_uv; - ev->codes[slot] = uv; - ev->chars[slot] = (char *) pdf_insert_unicode(p, uv); - } - } - - ev->flags |= PDC_ENC_FILE; - ev->flags |= PDC_ENC_SETNAMES; - if (stat == s_names) - ev->flags |= PDC_ENC_ALLOCCHARS; - - pdc_cleanup_stringlist(p->pdc, linelist); - - return ev; -} - -/* - * Try to generate an encoding from an Unicode code page. - * - * Return value: allocated encoding struct - * NULL: error - */ - -pdc_encodingvector * -pdf_generate_encoding(PDF *p, const char *encoding) -{ - pdc_encodingvector *ev = NULL; - pdc_ushort uv; - int i_uv1, i_uv2, slot; - size_t len; - - /* first unicode offset */ - len = strlen(encoding); - if (len >= 6 && !strncmp(encoding, "U+", 2) && - sscanf(&encoding[2], "%x", &i_uv1) == 1) - { - if (i_uv1 < 0 || i_uv1 > PDC_MAX_UNICODE) - return ev; - - /* second unicode offset */ - i_uv2 = -1; - if (len >= 12) - { - char *se = strstr(&encoding[6], "U+"); - if (se && sscanf(&se[2], "%x", &i_uv2) == 1) - { - if (i_uv2 < 0 || i_uv2 > PDC_MAX_UNICODE) - return ev; - } - } - uv = (pdc_ushort) i_uv1; - ev = pdc_new_encoding(p->pdc, encoding); - if (ev != NULL) - { - for (slot = 0; slot < 256; slot++) - { - if (i_uv2 > -1 && slot == 128) - uv = (pdc_ushort) i_uv2; - ev->codes[slot] = uv; - ev->chars[slot] = (char *) pdf_insert_unicode(p, uv); - uv++; - } - ev->flags |= PDC_ENC_GENERATE; - ev->flags |= PDC_ENC_SETNAMES; - } - } - - return ev; -} - -static const char * -pdf_subst_encoding_name(PDF *p, const char *encoding, char *buffer) -{ - (void) p; - (void) buffer; - - /* special case for the platform-specific host encoding */ - if (!strcmp(encoding, "host") || !strcmp(encoding, "auto")) - { - -#if defined(PDFLIB_EBCDIC) - return "ebcdic"; - -#elif defined(MAC) - return "macroman"; - -#elif defined(WIN32) - UINT cpident = GetACP(); - if (!strcmp(encoding, "auto")) - { - if (cpident == 10000) - strcpy(buffer, "macroman"); - else if (cpident == 20924) - strcpy(buffer, "ebcdic"); - else if (cpident >= 28590 && cpident <= 28599) - sprintf(buffer, "iso8859-%d", cpident-28590); - else if (cpident >= 28600 && cpident <= 28609) - sprintf(buffer, "iso8859-%d", cpident-28600+10); - else if (cpident == 1200 || cpident == 1201) - strcpy(buffer, "unicode"); - else - { - CPINFO CPInfo ; - - if (GetCPInfo(cpident, (LPCPINFO) &CPInfo) && - CPInfo.MaxCharSize == 1) - { - sprintf(buffer, "cp%d", cpident); - } - else - { - pdc_error(p->pdc, PDF_E_ENC_UNSUPP, - pdc_errprintf(p->pdc, "%d", cpident), 0, 0, 0); - } - } - encoding = buffer; - } - else - { - return "winansi"; - } -#endif - } - - /* These encodings will be mapped to winansi */ - if (!strcmp(encoding, "host") || - !strcmp(encoding, "auto") || - !strcmp(encoding, "cp1252")) - return "winansi"; - - return encoding; -} - -pdc_encoding -pdf_insert_encoding(PDF *p, const char *encoding) -{ - char *filename; - char buffer[32]; - pdc_encodingvector *ev = NULL; - pdc_encoding enc = (pdc_encoding) p->encodings_number; - - /* substituting encoding name */ - encoding = pdf_subst_encoding_name(p, encoding, buffer); - - /* check for an user-defined encoding */ - filename = pdf_find_resource(p, "Encoding", encoding); - if (filename) - ev = pdf_read_encoding(p, encoding, filename); - if (ev == NULL) - { - /* check for a generate encoding */ - ev = pdf_generate_encoding(p, encoding); - if (ev == NULL) - { - { - pdc_set_errmsg(p->pdc, PDF_E_ENC_NOTFOUND, encoding, 0, 0, 0); - - if (p->debug['F']) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_invalidenc; - } - } - } - p->encodings[enc].ev = ev; - p->encodings_number++; - - return enc; -} - -pdc_encoding -pdf_find_encoding(PDF *p, const char *encoding) -{ - int slot; - char buffer[32]; - - /* substituting encoding name */ - encoding = pdf_subst_encoding_name(p, encoding, buffer); - - /* search for a fixed encoding */ - for (slot = (pdc_encoding) pdc_invalidenc + 1; - slot < (pdc_encoding) pdc_firstvarenc; slot++) - { - if (!strcmp(encoding, pdc_get_fixed_encoding_name((pdc_encoding) slot))) - { - /* copy in-core encoding at fixed slots */ - if (slot >= 0 && p->encodings[slot].ev == NULL) - p->encodings[slot].ev = pdc_copy_core_encoding(p->pdc, encoding); - return((pdc_encoding) slot); - } - } - - /* search for a user defined encoding */ - for (slot = (pdc_encoding) pdc_firstvarenc; - slot < p->encodings_number; slot++) - { - if (p->encodings[slot].ev->apiname != NULL && - !strcmp(encoding, p->encodings[slot].ev->apiname)) - return((pdc_encoding) slot); - } - - if (slot >= p->encodings_capacity) - pdf_grow_encodings(p); - - /* search for an in-core encoding */ - p->encodings[slot].ev = pdc_copy_core_encoding(p->pdc, encoding); - if (p->encodings[slot].ev != NULL) - { - p->encodings_number++; - return((pdc_encoding) slot); - } - - return (pdc_invalidenc); -} - -const char * -pdf_get_encoding_name(PDF *p, pdc_encoding enc) -{ - const char *apiname = pdc_get_fixed_encoding_name(enc); - if (!apiname[0] && enc >= 0) - apiname = (const char *) p->encodings[enc].ev->apiname; - return apiname; -} - -void -pdf_set_encoding_glyphnames(PDF *p, pdc_encoding enc) -{ - pdc_encodingvector *ev = p->encodings[enc].ev; - int slot; - pdc_ushort uv; - - if (!(ev->flags & PDC_ENC_SETNAMES)) - { - ev->flags |= PDC_ENC_SETNAMES; - for (slot = 0; slot < 256; slot++) - { - uv = ev->codes[slot]; - ev->chars[slot] = (char *)pdf_unicode2glyphname(p, uv); - } - } -} - -pdc_bool -pdf_get_encoding_isstdflag(PDF *p, pdc_encoding enc) -{ - pdc_encodingvector *ev = p->encodings[enc].ev; - int slot; - pdc_bool isstd = pdc_true; - - if (!(ev->flags & PDC_ENC_INCORE) && !(ev->flags & PDC_ENC_STDNAMES)) - { - for (slot = 0; slot < 256; slot++) - { - if (!(ev->flags & PDC_ENC_SETNAMES)) - ev->chars[slot] = - (char *) pdf_unicode2glyphname(p, ev->codes[slot]); - if (isstd == pdc_true && ev->chars[slot]) - { - isstd = pdc_is_std_charname((char *) ev->chars[slot]); - if (isstd == pdc_false && (ev->flags & PDC_ENC_SETNAMES)) - break; - } - } - ev->flags |= PDC_ENC_SETNAMES; - if (isstd == pdc_true) - ev->flags |= PDC_ENC_STDNAMES; - } - - return (ev->flags & PDC_ENC_STDNAMES) ? pdc_true : pdc_false; -} - -pdc_ushort -pdf_glyphname2unicode(PDF *p, const char *glyphname) -{ - int lo, hi; - - /* Private glyph name table available */ - if (p->glyph_tab_size) - { - /* Searching for private glyph name */ - lo = 0; - hi = p->glyph_tab_size; - while (lo < hi) - { - int i = (lo + hi) / 2; - int cmp = strcmp(glyphname, p->name2unicode[i].glyphname); - - if (cmp == 0) - return p->name2unicode[i].code; - - if (cmp < 0) - hi = i; - else - lo = i + 1; - } - } - - /* Searching for glyph name in AGL */ - return pdc_adobe2unicode(glyphname); -} - -pdc_ushort -pdf_register_glyphname(PDF *p, const char *glyphname, pdc_ushort uv) -{ - static const char fn[] = "pdf_register_glyphname"; - char buf[16]; - int slot, slotname, slotuv; - - if (!glyphname) - return 0; - - /* Allocate private glyphname tables */ - if (!p->glyph_tab_capacity) - { - p->next_unicode = (pdc_ushort) 0xE000; /* Begin PUA */ - p->glyph_tab_size = 0; - p->glyph_tab_capacity = PRIVGLYPHS_CHUNKSIZE; - p->unicode2name = (pdc_glyph_tab *) pdc_malloc(p->pdc, - sizeof(pdc_glyph_tab) * p->glyph_tab_capacity, fn); - p->name2unicode = (pdc_glyph_tab *) pdc_malloc(p->pdc, - sizeof(pdc_glyph_tab) * p->glyph_tab_capacity, fn); - } - - /* Re-allocate private glyphname tables */ - if (p->glyph_tab_size == p->glyph_tab_capacity) - { - int n = p->glyph_tab_capacity + PRIVGLYPHS_CHUNKSIZE; - p->unicode2name = (pdc_glyph_tab *) pdc_realloc(p->pdc, - p->unicode2name, n * sizeof(pdc_glyph_tab), fn); - p->name2unicode = (pdc_glyph_tab *) pdc_realloc(p->pdc, - p->name2unicode, n * sizeof(pdc_glyph_tab), fn); - p->glyph_tab_capacity = n; - } - - /* Set reasonable glyph name "unixxxx" */ - if (!glyphname) - { - sprintf(buf, "uni%04X", uv); - glyphname = buf; - } - - /* Find slot so that new glyphname is sorted in to name table */ - for (slot = 0; slot < p->glyph_tab_size; slot++) - { - if (strcmp(glyphname, p->name2unicode[slot].glyphname) < 0) - break; - } - slotname = slot; - if (slot < p->glyph_tab_size) - { - for (slot = p->glyph_tab_size; slot > slotname; slot--) - { - p->name2unicode[slot].code = p->name2unicode[slot-1].code; - p->name2unicode[slot].glyphname = - p->name2unicode[slot-1].glyphname; - } - } - - /* Set reasonable unicode value in the case of "unixxxx" glyph names */ - if (!uv) - { - if (!strncmp(glyphname, "uni", 3)) - { - int i; - if (sscanf(glyphname, "uni%x", &i) == 1) - uv = (pdc_ushort) i; - } - if (!uv) - uv = p->next_unicode; - } - - if (uv >= p->next_unicode) - { - slotuv = p->glyph_tab_size; - p->next_unicode = (pdc_ushort) (uv + 1); - } - else - { - /* Find slot so that new unicode is sorted in to unicode table */ - for (slot = 0; slot < p->glyph_tab_size; slot++) - { - if (uv < p->unicode2name[slot].code) - break; - } - slotuv = slot; - if (slot < p->glyph_tab_size) - { - for (slot = p->glyph_tab_size; slot > slotuv; slot--) - { - p->unicode2name[slot].code = p->unicode2name[slot-1].code; - p->unicode2name[slot].glyphname = - p->unicode2name[slot-1].glyphname; - } - } - } - - p->name2unicode[slotname].code = uv; - p->name2unicode[slotname].glyphname = pdc_strdup(p->pdc, glyphname); - p->unicode2name[slotuv].code = uv; - p->unicode2name[slotuv].glyphname = p->name2unicode[slotname].glyphname; - - p->glyph_tab_size += 1; - - return uv; -} - -pdc_ushort -pdf_insert_glyphname(PDF *p, const char *glyphname) -{ - pdc_ushort uv; - - uv = pdf_glyphname2unicode(p, glyphname); - if (!uv) - uv = pdf_register_glyphname(p, glyphname, 0); - return uv; -} - -const char * -pdf_insert_unicode(PDF *p, pdc_ushort uv) -{ - const char *glyphname; - - glyphname = pdf_unicode2glyphname(p, uv); - if (!glyphname) - { - pdf_register_glyphname(p, NULL, uv); - glyphname = pdf_unicode2glyphname(p, uv); - } - return glyphname; -} - -const char * -pdf_unicode2glyphname(PDF *p, pdc_ushort uv) -{ - int lo, hi; - - /* Private unicode table available */ - if (p->glyph_tab_size) - { - /* Searching for private Unicode */ - lo = 0; - hi = p->glyph_tab_size; - while (lo < hi) - { - int i = (lo + hi) / 2; - - if (uv == p->unicode2name[i].code) - return p->unicode2name[i].glyphname; - - if (uv < p->unicode2name[i].code) - hi = i; - else - lo = i + 1; - } - } - - /* Searching for unicode value in AGL */ - return pdc_unicode2adobe(uv); -} - -void -pdf_init_encoding_ids(PDF *p) -{ - int slot; - - for (slot = 0; slot < p->encodings_capacity; slot++) - { - p->encodings[slot].id = PDC_BAD_ID; - p->encodings[slot].tounicode_id = PDC_BAD_ID; - } -} - -void -pdf_init_encodings(PDF *p) -{ - static const char fn[] = "pdf_init_encodings"; - int slot; - - p->encodings_capacity = ENCODINGS_CHUNKSIZE; - - p->encodings = (pdf_encoding *) pdc_malloc(p->pdc, - sizeof(pdf_encoding) * p->encodings_capacity, fn); - - for (slot = 0; slot < p->encodings_capacity; slot++) - p->encodings[slot].ev = NULL; - - /* we must reserve the first 4 slots for standard encodings, because - * the program identify their by index of p->encodings array! - */ - p->encodings_number = 4; - - /* init private glyphname tables */ - p->unicode2name = NULL; - p->name2unicode = NULL; - p->glyph_tab_capacity = 0; -} - -void -pdf_grow_encodings(PDF *p) -{ - static const char fn[] = "pdf_grow_encodings"; - int slot; - - p->encodings = (pdf_encoding *) pdc_realloc(p->pdc, p->encodings, - sizeof(pdf_encoding) * 2 * p->encodings_capacity, fn); - - p->encodings_capacity *= 2; - for (slot = p->encodings_number; slot < p->encodings_capacity; slot++) - { - p->encodings[slot].ev = NULL; - p->encodings[slot].id = PDC_BAD_ID; - p->encodings[slot].tounicode_id = PDC_BAD_ID; - } -} - -void -pdf_cleanup_encodings(PDF *p) -{ - int slot; - - if (!p->encodings) - return; - - for (slot = 0; slot < p->encodings_number; slot++) - { - if (p->encodings[slot].ev) - pdc_cleanup_encoding(p->pdc, p->encodings[slot].ev); - } - - if (p->encodings) - pdc_free(p->pdc, p->encodings); - p->encodings = NULL; - - /* clean up private glyphname tables */ - if (p->unicode2name) - { - for (slot = 0; slot < p->glyph_tab_size; slot++) - pdc_free(p->pdc, (char *)p->unicode2name[slot].glyphname); - - if (p->unicode2name) - pdc_free(p->pdc, p->unicode2name); - p->unicode2name = NULL; - } - - if (p->name2unicode) - pdc_free(p->pdc, p->name2unicode); - p->name2unicode = NULL; - p->glyph_tab_capacity = 0; -} - diff --git a/src/libs/pdflib/libs/pdflib/p_filter.c b/src/libs/pdflib/libs/pdflib/p_filter.c deleted file mode 100644 index bb038e94e3..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_filter.c +++ /dev/null @@ -1,152 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_filter.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * ASCII85 and Hex encoding for PDFlib - * - */ - -#include "p_intern.h" - -void -pdf_ASCIIHexEncode(PDF *p, PDF_data_source *src) -{ - static const char BinToHex[] = PDF_STRING_0123456789ABCDEF; - int CharsPerLine; - size_t i; - pdc_byte *data; - - CharsPerLine = 0; - - if (src->init) - src->init(p, src); - - while (src->fill(p, src)) - { - for (data=src->next_byte, i=src->bytes_available; i > 0; i--, data++) - { - pdc_putc(p->out, BinToHex[*data>>4]); /* first nibble */ - pdc_putc(p->out, BinToHex[*data & 0x0F]); /* second nibble */ - if ((CharsPerLine += 2) >= 64) { - pdc_putc(p->out, PDF_NEWLINE); - CharsPerLine = 0; - } - } - } - - if (src->terminate) - src->terminate(p, src); - - pdc_puts(p->out, ">\n"); /* EOD marker for PDF hex strings */ -} - -/* methods for constructing a data source from a file */ - -#define FILE_BUFSIZE 1024 - -void -pdf_data_source_file_init(PDF *p, PDF_data_source *src) -{ - pdc_file *fp; - - src->buffer_length = FILE_BUFSIZE; - src->buffer_start = (pdc_byte *) - pdc_malloc(p->pdc, src->buffer_length, "pdf_data_source_file_init"); - - fp = pdf_fopen(p, (const char *) src->private_data, "embedded ", - PDC_FILE_BINARY); - - if (fp == NULL) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - if (src->offset) - pdc_fseek(fp, src->offset, SEEK_SET); - - src->private_data = (void *) fp; - src->total = (long) 0; -} - -pdc_bool -pdf_data_source_file_fill(PDF *p, PDF_data_source *src) -{ - size_t bytes_needed; - (void) p; /* avoid compiler warning "unreferenced parameter" */ - - if (src->length != (long) 0 && src->total + FILE_BUFSIZE > src->length) - bytes_needed = (size_t) (src->length - src->total); - else - bytes_needed = FILE_BUFSIZE; - - src->next_byte = src->buffer_start; - src->bytes_available = pdc_fread(src->buffer_start, 1, - bytes_needed, (pdc_file *) (src->private_data)); - - src->total += (long) src->bytes_available; - - if (src->bytes_available == 0) - return pdc_false; - else - return pdc_true; -} - -void -pdf_data_source_file_terminate(PDF *p, PDF_data_source *src) -{ - pdc_free(p->pdc, (void *) src->buffer_start); - pdc_fclose((pdc_file *) src->private_data); - - if (src->length != (long) 0 && src->total != src->length) - pdc_error(p->pdc, PDC_E_IO_NODATA, "?", 0, 0, 0); -} - -/* methods for constructing a data source from a memory buffer */ - -int -pdf_data_source_buf_fill(PDF *p, PDF_data_source *src) -{ - (void) p; /* avoid compiler warning "unreferenced parameter" */ - - if (src->next_byte == NULL) { - src->next_byte = src->buffer_start; - src->bytes_available = src->buffer_length; - return pdc_true; - } - - return pdc_false; -} - -/* copy the complete contents of src to a stream */ -void -pdf_copy_stream(PDF *p, PDF_data_source *src, pdc_bool compress) -{ - int oldcompresslevel = pdc_get_compresslevel(p->out); - - if (!compress) - pdc_set_compresslevel(p->out, 0); - - if (src->init) - src->init(p, src); - - pdc_begin_pdfstream(p->out); - - while (src->fill(p, src)) - pdc_write(p->out, src->next_byte, src->bytes_available); - - pdc_end_pdfstream(p->out); - - if (src->terminate) - src->terminate(p, src); - - if (!compress) - pdc_set_compresslevel(p->out, oldcompresslevel); -} diff --git a/src/libs/pdflib/libs/pdflib/p_font.c b/src/libs/pdflib/libs/pdflib/p_font.c deleted file mode 100644 index ba423a0c63..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_font.c +++ /dev/null @@ -1,1516 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_font.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib font handling routines - * - */ - -#define P_FONT_C - -#include "p_intern.h" -#include "p_font.h" -#include "p_truetype.h" - - -static const pdc_keyconn pdf_extension_names[] = -{ - {".ttf", 1}, - {".otf", 1}, - {".afm", 2}, - {".pfm", 3}, - {".ttc", 1}, - {".TTF", 1}, - {".OTF", 1}, - {".AFM", 2}, - {".PFM", 3}, - {".TTC", 1}, - {".pfa", 4}, - {".pfb", 4}, - {".PFA", 4}, - {".PFB", 4}, - {NULL, 0} -}; - -static const pdc_keyconn pdf_fontstyle_pdfkeys[] = -{ - {"Normal", pdc_Normal}, - {"Bold", pdc_Bold}, - {"Italic", pdc_Italic}, - {"BoldItalic", pdc_BoldItalic}, - {NULL, 0} -}; - -const char * -pdf_get_fontname(PDF *p) -{ - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "fontname", 0, 0, 0); - - return p->fonts[p->tstate[p->sl].f].name; -} - -const char * -pdf_get_fontstyle(PDF *p) -{ - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "fontstyle", 0, 0, 0); - - return pdc_get_keyword(p->fonts[p->tstate[p->sl].f].style, - pdf_fontstyle_keylist); -} - -const char * -pdf_get_fontencoding(PDF *p) -{ - pdc_font *font; - const char *ret; - - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "fontencoding", 0, 0, 0); - - font = &p->fonts[p->tstate[p->sl].f]; - switch (font->encoding) - { - case pdc_cid: - ret = (const char *) font->cmapname; - break; - - default: - ret = pdf_get_encoding_name(p, font->encoding); - } - - return ret; -} - -int -pdf_get_monospace(PDF *p) -{ - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "fontstyle", 0, 0, 0); - - return p->fonts[p->tstate[p->sl].f].monospace; -} - -int -pdf_get_font(PDF *p) -{ - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "font", 0, 0, 0); - - return p->tstate[p->sl].f; -} - -static void -pdf_cleanup_font(PDF *p, pdc_font *font) -{ - if (font->imgname) - pdf_unlock_pvf(p, font->imgname); - pdc_cleanup_font_struct(p->pdc, font); -} - -void -pdf_cleanup_fonts(PDF *p) -{ - int slot; - - if (p->fonts) - { - for (slot = 0; slot < p->fonts_number; slot++) - pdf_cleanup_font(p, &p->fonts[slot]); - - if (p->fonts) - pdc_free(p->pdc, p->fonts); - p->fonts = NULL; - } -} - -void -pdf_init_fonts(PDF *p) -{ - p->fonts_number = 0; - p->fonts_capacity = FONTS_CHUNKSIZE; - - p->fonts = (pdc_font *) pdc_calloc(p->pdc, - sizeof(pdc_font) * p->fonts_capacity, "pdf_init_fonts"); - - p->t3font = (pdc_t3font *) NULL; - - pdf_init_encoding_ids(p); -} - -void -pdf_grow_fonts(PDF *p) -{ - p->fonts = (pdc_font *) pdc_realloc(p->pdc, p->fonts, - sizeof(pdc_font) * 2 * p->fonts_capacity, "pdf_grow_fonts"); - - p->fonts_capacity *= 2; -} - -int -pdf_init_newfont(PDF *p) -{ - pdc_font *font; - int slot; - - /* slot for font struct */ - slot = p->fonts_number; - if (slot >= p->fonts_capacity) - pdf_grow_fonts(p); - - /* initialize font struct */ - font = &p->fonts[slot]; - pdc_init_font_struct(p->pdc, font); - - /* inherite global settings */ - font->verbose = p->debug['F']; - font->verbose_open = font->verbose; - - return slot; -} - -static pdc_bool -pdf_get_metrics_core(PDF *p, pdc_font *font, const char *fontname, - pdc_encoding enc) -{ - const pdc_core_metric *metric; - - metric = pdc_get_core_metric(fontname); - if (metric != NULL) - { - /* Fill up the font struct */ - pdc_fill_font_metric(p->pdc, font, metric); - font->encoding = enc; - - /* Process metric data */ - if (pdf_process_metrics_data(p, font, fontname)) - { - if (!pdf_make_fontflag(p, font)) - return pdc_false; - - if (font->monospace) - { - pdc_set_errmsg(p->pdc, PDC_E_OPT_IGNORED, "monospace", 0, 0, 0); - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - return pdc_false; - } - return pdc_true; - } - } - return pdc_undef; -} - -pdc_bool -pdf_make_fontflag(PDF *p, pdc_font *font) -{ - (void) p; - - if (font->type != pdc_Type3) - { - if (font->isFixedPitch) - font->flags |= FIXEDWIDTH; - - if (font->isstdlatin == pdc_true || - font->encoding == pdc_winansi || - font->encoding == pdc_macroman || - font->encoding == pdc_ebcdic) - font->flags |= ADOBESTANDARD; - else - font->flags |= SYMBOL; - - if (font->italicAngle < 0 || - font->style == pdc_Italic || font->style == pdc_BoldItalic) - font->flags |= ITALIC; - if (font->italicAngle == 0 && font->flags & ITALIC) - font->italicAngle = PDC_DEF_ITALICANGLE; - - /* heuristic to identify (small) caps fonts */ - if (font->name && - (strstr(font->name, "Caps") || - !strcmp(font->name + strlen(font->name) - 2, "SC"))) - font->flags |= SMALLCAPS; - - if (font->style == pdc_Bold || font->style == pdc_BoldItalic) - font->StdVW = PDF_STEMV_BOLD; - - if (strstr(font->name, "Bold") || font->StdVW > PDF_STEMV_SEMIBOLD) - font->flags |= FORCEBOLD; - } - - if (font->style != pdc_Normal && - (font->embedding || font->type == pdc_Type1 || - font->type == pdc_MMType1 || font->type == pdc_Type3)) - { - pdc_set_errmsg(p->pdc, PDC_E_OPT_IGNORED, "fontstyle", 0, 0, 0); - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - return pdc_false; - } - return pdc_true; -} - -#define PDF_KERNING_FLAG PDC_OPT_UNSUPP - -#define PDF_SUBSETTING_FLAG PDC_OPT_UNSUPP -#define PDF_AUTOSUBSETT_FLAG PDC_OPT_UNSUPP - -#define PDF_AUTOCIDFONT_FLAG PDC_OPT_UNSUPP - -/* definitions of image options */ -static const pdc_defopt pdf_load_font_options[] = -{ - {"fontwarning", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"embedding", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"kerning", pdc_booleanlist, PDF_KERNING_FLAG, 1, 1, 0.0, 0.0, NULL}, - - {"subsetting", pdc_booleanlist, PDF_SUBSETTING_FLAG, 1, 1, 0.0, 0.0, - NULL}, - - {"autosubsetting", pdc_booleanlist, PDF_AUTOSUBSETT_FLAG, 1, 1, 0.0, 0.0, - NULL}, - - {"subsetlimit", pdc_floatlist, PDF_SUBSETTING_FLAG, 1, 1, 0.0, 100.0, - NULL}, - - {"subsetminsize", pdc_floatlist, PDF_SUBSETTING_FLAG, 1, 1, - 0.0, PDC_FLOAT_MAX, NULL}, - - {"autocidfont", pdc_booleanlist, PDF_AUTOCIDFONT_FLAG, 1, 1, 0.0, 0.0, - NULL}, - - {"unicodemap", pdc_booleanlist, PDF_AUTOCIDFONT_FLAG, 1, 1, 0.0, 0.0, - NULL}, - - {"fontstyle", pdc_keywordlist, 0, 1, 1, 0.0, 0.0, - pdf_fontstyle_keylist}, - - {"monospace", pdc_integerlist, 0, 1, 1, 1.0, 2048.0, - NULL}, - - PDC_OPT_TERMINATE -}; - -int -pdf__load_font(PDF *p, const char *fontname, int inlen, - const char *encoding, const char *optlist) -{ - static const char fn[] = "pdf__load_font"; - pdc_resopt *results; - pdc_encoding enc = pdc_invalidenc; - pdc_bool fontwarning; - pdc_bool kret; - int slot = -1; - size_t len; - int i; - int retval, inum; - pdc_font *font; - const char *extension = NULL; - char *fontname_p = NULL; - char *outfilename = NULL; - char *filename = NULL, testfilename[PDF_MAX_FONTNAME + 5]; - char *mmparam, mastername[PDF_MAX_FONTNAME + 1]; - - if (encoding == NULL || *encoding == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "encoding", 0, 0, 0); - - if (fontname == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0); - - /* Converting fontname to UTF-8 */ - if (inlen) - { - pdc_byte *utf8fontname; - pdc_text_format textformat = pdc_bytes2; - pdc_text_format targettextformat = pdc_utf8; - int outlen; - - if (pdc_convert_string(p->pdc, textformat, NULL, - (pdc_byte *) fontname, inlen, - &targettextformat, NULL, - &utf8fontname, &outlen, - PDC_CONV_WITHBOM | PDC_CONV_TRY7BYTES, - p->debug['F'])) - { - if (p->debug['F']) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - return -1; - } - - fontname = pdc_errprintf(p->pdc, "%s", utf8fontname); - pdc_free(p->pdc, utf8fontname); - } - - if (*fontname == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0); - - /* slot for new font struct */ - slot = pdf_init_newfont(p); - font = &p->fonts[slot]; - - /* parsing optlist */ - font->verbose = p->debug['F']; - if (optlist && strlen(optlist)) - { - results = pdc_parse_optionlist(p->pdc, optlist, pdf_load_font_options, - NULL, font->verbose); - if (!results) - return -1; - - /* save and check options */ - pdc_get_optvalues(p->pdc, "fontwarning", results, - &font->verbose, NULL); - - pdc_get_optvalues(p->pdc, "embedding", results, - &font->embedding, NULL); - - - - - if (pdc_get_optvalues(p->pdc, "fontstyle", results, &inum, NULL)) - font->style = (pdc_fontstyle) inum; - - pdc_get_optvalues(p->pdc, "monospace", results, - &font->monospace, NULL); - - pdc_cleanup_optionlist(p->pdc, results); - } - - /* search for a registered encoding */ - slot = -1; - kret = pdc_false; - fontwarning = p->debug['F']; - p->debug['F'] = (char) font->verbose; - enc = pdf_find_encoding(p, encoding); - - if (enc == pdc_unicode || enc == pdc_glyphid) - pdc_error(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); - - if (enc == pdc_invalidenc) - { - /* check the known CMap names */ - slot = pdf_handle_cidfont(p, fontname, encoding); - if (slot == -1) - { - /* look for a new encoding */ - enc = pdf_insert_encoding(p, encoding); - if (enc == pdc_invalidenc) - kret = pdc_true; - } - else - { - kret = pdc_true; - if (slot == -2) /* error occurred in pdf_handle_cidfont() */ - slot = -1; - } - } - p->debug['F'] = (char) fontwarning; - if (kret) - return slot; - - /* - * Look whether font is already in the cache. - * If a font with same encoding and same relevant options is found, - * return its descriptor. - * If a Type 3 font with the same name but different encoding - * is found, make a copy in a new slot and attach the requested encoding. - */ - - for (slot = 0; slot < p->fonts_number; slot++) - { - if (!strcmp(p->fonts[slot].apiname, fontname) && - p->fonts[slot].style == font->style) - { - if (p->fonts[slot].type == pdc_Type3) - { - if (enc < 0 ) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, - p->fonts[slot].name, - pdf_get_encoding_name(p, enc), 0, 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - if (p->fonts[slot].encoding != enc) - slot = pdf_handle_t3font(p, fontname, enc, slot); - - return slot; - } - else if (p->fonts[slot].monospace == font->monospace) - { - if (p->fonts[slot].encoding == enc) - { - return slot; - } - else if (p->fonts[slot].encoding >= 0) - { - char *encname, *adaptname; - int kc; - - /* Comparing apiname of encoding */ - if (!strcmp(encoding, p->fonts[slot].encapiname)) - return slot; - - /* Name of adapted to font encoding */ - encname = (char *) pdf_get_encoding_name(p, enc); - len = strlen(encname) + 1 + strlen(fontname) + 1; - adaptname = (char *) pdc_malloc(p->pdc, len, fn); - strcpy(adaptname, encname); - strcat(adaptname, PDC_ENC_MODSEPAR); - strcat(adaptname, fontname); - kc = strcmp(adaptname, - pdf_get_encoding_name(p, p->fonts[slot].encoding)); - pdc_free(p->pdc, adaptname); - if (!kc) - return slot; - } - } - } - } - - - /* Multiple Master handling: - * - strip MM parameters to build the master name - * - the master name is used to find the metrics - * - the instance name (client-supplied font name) is used in all places - * - although the master name is used for finding the metrics, the - * instance name is stored in the font struct. - */ - - len = strlen(fontname); - if (len > PDF_MAX_FONTNAME) - { - pdc_set_errmsg(p->pdc, PDC_E_ILLARG_TOOLONG, "fontname", - pdc_errprintf(p->pdc, "%d", PDF_MAX_FONTNAME), 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - strcpy(mastername, fontname); - - /* A Multiple Master font was requested */ - if ((mmparam = strstr(mastername, "MM_")) != NULL) - { - if (font->embedding) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_EMBEDMM, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - mmparam[2] = '\0'; /* strip the parameter from the master name */ - } - - /* Font with vertical writing mode */ - fontname_p = mastername; - if (mastername[0] == '@') - { - font->vertical = pdc_true; - fontname_p = &mastername[1]; - } - - /* API font name */ - font->apiname = pdc_strdup(p->pdc, fontname); - - /* Font file search hierarchy - * - Check "FontOutline" resource entry and check TrueType font - * - Check "FontAFM" resource entry - * - Check "FontPFM" resource entry - * - Check "HostFont" resource entry - * - Check available in-core metrics - * - Check host font - */ - retval = pdc_false; - while (1) - { -#ifdef PDF_TRUETYPE_SUPPORTED - /* Check specified TrueType file */ - filename = pdf_find_resource(p, "FontOutline", fontname_p); - if (filename) { - outfilename = filename; - retval = pdf_check_tt_font(p, filename, fontname_p, font); - if (retval == pdc_undef) { - retval = pdc_false; - break; - } - if (retval == pdc_true) { - retval = pdf_get_metrics_tt(p, font, fontname_p, enc, filename); - break; - } - } -#endif /* PDF_TRUETYPE_SUPPORTED */ - - /* Check specified AFM file */ - filename = pdf_find_resource(p, "FontAFM", fontname_p); - if (filename) { - retval = pdf_get_metrics_afm(p, font, fontname_p, enc, filename); - break; - } - - /* Check specified PFM file */ - filename = pdf_find_resource(p, "FontPFM", fontname_p); - if (filename) { - retval = pdf_get_metrics_pfm(p, font, fontname_p, enc, filename); - break; - } - - - - /* Check available in-core metrics */ - retval = pdf_get_metrics_core(p, font, fontname_p, enc); - if (retval != pdc_undef) break; - retval = pdc_false; - - - /* Search for a metric file */ - font->verbose_open = pdc_false; - filename = testfilename; - for (i = 0; i < 100; i++) - { - extension = pdf_extension_names[i].word; - if (!extension) break; - strcpy(testfilename, fontname_p); - strcat(testfilename, extension); - switch (pdf_extension_names[i].code) - { - case 1: - if (pdf_check_tt_font(p, filename, fontname_p, font) == - pdc_true) - retval = pdf_get_metrics_tt(p, font, fontname_p, enc, - filename); - break; - - case 2: - retval = pdf_get_metrics_afm(p, font, fontname_p, enc, - filename); - break; - - case 3: - retval = pdf_get_metrics_pfm(p, font, fontname_p, enc, - filename); - break; - } - if (retval == pdc_true) - { - if (pdf_extension_names[i].code == 1) - outfilename = filename; - break; - } - } - - if (retval == pdc_false) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_NOMETRICS, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } - break; - } - - if (retval == pdc_false) { - pdf_cleanup_font(p, font); - return -1; - } - - /* store instance name instead of master name in the font structure */ - if (mmparam) { - pdc_free(p->pdc, font->name); - font->name = pdc_strdup(p->pdc, fontname); - } - - /* If embedding was requested, check font file (or raise an exception) */ - font->verbose_open = font->verbose; - if (font->embedding) { - if (font->img == NULL) { - pdc_file *fp = NULL; - if (outfilename) { - if ((fp = pdf_fopen(p, outfilename, "font ", 0)) == NULL) - { - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - retval = pdc_false; - } - if ((font->type == pdc_Type1 || font->type == pdc_MMType1) && - (pdf_t1check_fontfile(p, font, fp) == pdc_undef)) { - pdc_fclose(fp); - retval = pdc_false; - } - } else { - outfilename = testfilename; - for (i = 0; i < 100; i++) { - extension = pdf_extension_names[i].word; - if (!extension) break; - strcpy(testfilename, fontname_p); - strcat(testfilename, extension); - if (pdf_extension_names[i].code == 4 && - (fp = pdf_fopen(p, outfilename, NULL, 0)) != NULL) { - if (pdf_t1check_fontfile(p, font, fp) != pdc_undef) - break; - pdc_fclose(fp); - fp = NULL; - } - } - if (fp == NULL) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_NOOUTLINE, fontname, - 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - retval = pdc_false; - } - } - if (retval == pdc_true) { - if (pdc_file_isvirtual(fp) == pdc_true) { - font->imgname = pdc_strdup(p->pdc, outfilename); - pdf_lock_pvf(p, font->imgname); - } - pdc_fclose(fp); - font->fontfilename = pdc_strdup(p->pdc, outfilename); - } - } - } else if (font->img) { - if (!font->imgname) { - pdc_free(p->pdc, font->img); - } else { - pdf_unlock_pvf(p, font->imgname); - pdc_free(p->pdc, font->imgname); - font->imgname = NULL; - } - font->img = NULL; - font->filelen = 0; - } - - if (retval && font->monospace && font->embedding) - { - pdc_set_errmsg(p->pdc, PDC_E_OPT_IGNORED, "monospace", 0, 0, 0); - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - retval = pdc_false; - } - - if (retval == pdc_false) { - pdf_cleanup_font(p, font); - return -1; - } - - /* Now everything is fine; fill the remaining font cache entries */ - - p->fonts_number++; - - font->verbose_open = pdc_true; - - font->encapiname = pdc_strdup(p->pdc, encoding); - - if (enc >= 0) - p->encodings[enc].ev->flags |= PDC_ENC_USED; - - font->obj_id = pdc_alloc_id(p->out); - - return slot; -} - -PDFLIB_API int PDFLIB_CALL -PDF_load_font(PDF *p, const char *fontname, int len, - const char *encoding, const char *optlist) -{ - static const char fn[] = "PDF_load_font"; - int slot = -1; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content), - "(p[%p], \"%s\", %d, \"%s\", \"%s\")", - (void *) p, pdc_strprint(p->pdc, fontname, len), len, encoding,optlist)) - { - slot = pdf__load_font(p, fontname, len, encoding, optlist); - } - - PDF_RETURN_HANDLE(p, slot) -} - -PDFLIB_API int PDFLIB_CALL -PDF_findfont(PDF *p, const char *fontname, const char *encoding, int embed) -{ - static const char fn[] = "PDF_findfont"; - char optlist[256]; - int slot = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content), - "(p[%p], \"%s\", \"%s\", %d)", (void *) p, fontname, encoding, embed)) - { - PDF_RETURN_HANDLE(p, slot) - } - - if (embed < 0 || embed > 1) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "embed", pdc_errprintf(p->pdc, "%d", embed), 0, 0); - - optlist[0] = 0; - if (embed) - strcat(optlist, "embedding true "); - - slot = pdf__load_font(p, fontname, 0, encoding, (const char *) optlist); - - PDF_RETURN_HANDLE(p, slot) -} - -PDFLIB_API int PDFLIB_CALL -PDF_get_glyphid(PDF *p, int font, int code) -{ - static const char fn[] = "PDF_get_glyphid"; - int gid = 0; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content | pdf_state_path), - "(p[%p], %d, %04X)", (void *) p, font, code)) - { - pdc_trace(p->pdc, "[%d]\n", gid); - return gid; - } - - PDF_INPUT_HANDLE(p, font) - if (font < 0 || font >= p->fonts_number) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "font", pdc_errprintf(p->pdc, "%d", font), 0, 0); - - if (code < 0 || code >= p->fonts[font].numOfCodes) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "code", pdc_errprintf(p->pdc, "%d", code), 0, 0); - - if (p->fonts[font].code2GID) - gid = p->fonts[font].code2GID[code]; - else - pdc_error(p->pdc, PDF_E_FONT_NOGLYPHID, p->fonts[font].apiname, 0, 0,0); - - pdc_trace(p->pdc, "[%d]\n", gid); - return gid; -} - - -static void -pdf_write_fontdescriptor( - PDF *p, - pdc_font *font, - pdc_id fontdescriptor_id, - pdc_id fontfile_id) -{ - /* - * Font descriptor object - */ - pdc_begin_obj(p->out, fontdescriptor_id); /* font descriptor obj */ - pdc_begin_dict(p->out); /* font descriptor dict */ - - pdc_puts(p->out, "/Type/FontDescriptor\n"); - pdc_printf(p->out, "/Ascent %d\n", font->ascender); - pdc_printf(p->out, "/CapHeight %d\n", font->capHeight); - pdc_printf(p->out, "/Descent %d\n", font->descender); - pdc_printf(p->out, "/Flags %ld\n", font->flags); - pdc_printf(p->out, "/FontBBox[%d %d %d %d]\n", - (int) font->llx, (int) font->lly, (int) font->urx, (int) font->ury); - - pdc_printf(p->out, "/FontName"); - pdc_put_pdfname(p->out, font->name, strlen(font->name)); - pdc_puts(p->out, "\n"); - - pdc_printf(p->out, "/ItalicAngle %d\n", (int) (font->italicAngle)); - pdc_printf(p->out, "/StemV %d\n", font->StdVW); - - if (font->StdHW > 0) - pdc_printf(p->out, "/StemH %d\n", font->StdHW); - - if (font->xHeight > 0) - pdc_printf(p->out, "/XHeight %d\n", font->xHeight); - - if (fontfile_id != PDC_BAD_ID) - { - switch(font->type) - { - case pdc_Type1: - case pdc_MMType1: - pdc_printf(p->out, "/FontFile %ld 0 R\n", fontfile_id); - break; - -#ifdef PDF_TRUETYPE_SUPPORTED - case pdc_TrueType: - case pdc_CIDFontType2: - pdc_printf(p->out, "/FontFile2 %ld 0 R\n", fontfile_id); - break; - - case pdc_Type1C: - case pdc_CIDFontType0: - pdc_printf(p->out, "/FontFile3 %ld 0 R\n", fontfile_id); - break; -#endif /* PDF_TRUETYPE_SUPPORTED */ - - default: - break; - } - } - - pdc_end_dict(p->out); /* font descriptor dict */ - pdc_end_obj(p->out); /* font descriptor obj */ -} - -static void -pdf_put_font(PDF *p, pdc_font *font) -{ - const char *fontname = font->name; - pdc_id fontdescriptor_id = PDC_BAD_ID; - pdc_id fontfile_id = PDC_BAD_ID; - pdc_id encoding_id = PDC_BAD_ID; - const char *Adobe_str = "\101\144\157\142\145"; - pdc_id descendant_id = PDC_BAD_ID; - pdc_encoding enc = font->encoding; - pdc_bool base_font = pdc_false; - pdc_bool comp_font = pdc_false; - float a = (float) 1.0; - PDF_data_source src; - int slot, i, j; - - /* - * This Type3 font has been defined, but never used. Ignore it. - * However, the font's object id has already been allocated. - * Write a dummy object in order to avoid a complaint - * of the object machinery. - */ - if (enc == pdc_invalidenc) - { - pdc_begin_obj(p->out, font->obj_id); /* dummy font obj */ - pdc_printf(p->out, "null %% unused Type 3 font '%s'\n", - font->apiname); - pdc_end_obj(p->out); - return; - } - - - /* ID for embedded font */ - if (font->embedding) - { - switch(font->type) - { - case pdc_Type1: - case pdc_MMType1: - case pdc_TrueType: - case pdc_CIDFontType2: - case pdc_Type1C: - case pdc_CIDFontType0: - fontfile_id = pdc_alloc_id(p->out); - break; - - default: - break; - } - } - else if (font->type == pdc_Type1) - { - const char *basename; - - /* check whether we have one of the base 14 fonts */ - for (slot = 0; ; slot++) - { - basename = pdc_get_base14_name(slot); - if (basename == NULL) - break; - if (!strcmp(basename, fontname)) - { - base_font = pdc_true; - break; - } - } - } - - /* - * Font dictionary - */ - pdc_begin_obj(p->out, font->obj_id); /* font obj */ - pdc_begin_dict(p->out); /* font dict */ - pdc_puts(p->out, "/Type/Font\n"); - - /* /Subtype */ - switch (font->type) - { - case pdc_Type1: - pdc_puts(p->out, "/Subtype/Type1\n"); - break; - - case pdc_MMType1: - pdc_puts(p->out, "/Subtype/MMType1\n"); - break; - - case pdc_TrueType: - pdc_puts(p->out, "/Subtype/TrueType\n"); - fontname = font->ttname; - break; - - case pdc_Type1C: - fontname = font->ttname; - pdc_puts(p->out, "/Subtype/Type1\n"); - break; - - case pdc_CIDFontType2: - case pdc_CIDFontType0: - fontname = font->ttname; - pdc_puts(p->out, "/Subtype/Type0\n"); - comp_font = pdc_true; - break; - - case pdc_Type3: - pdc_puts(p->out, "/Subtype/Type3\n"); - break; - } - - /* /Name */ - if (font->type == pdc_Type3) - { - /* - * The name is optional, but if we include it it will show up - * in Acrobat's font info box. However, if the same font name - * is used with different encodings Acrobat 4 will not be - * able to distinguish both. For this reason we add the - * encoding name to make the font name unique. - */ - pdc_puts(p->out, "/Name"); - pdc_put_pdfname(p->out, fontname, strlen(fontname)); - pdc_puts(p->out, "\n"); - } - - /* /BaseFont */ - switch (font->type) - { - case pdc_Type1: - case pdc_MMType1: - case pdc_TrueType: - case pdc_Type1C: - case pdc_CIDFontType2: - case pdc_CIDFontType0: - { - pdc_puts(p->out, "/BaseFont"); - pdc_put_pdfname(p->out, fontname, strlen(fontname)); - if (font->cmapname) - pdc_printf(p->out, "-%s", font->cmapname); - if (font->style != pdc_Normal && !comp_font) - pdc_printf(p->out, ",%s", - pdc_get_keyword(font->style, pdf_fontstyle_pdfkeys)); - pdc_puts(p->out, "\n"); - } - break; - - /* /FontBBox, /FontMatrix, /CharProcs /Resources */ - case pdc_Type3: - pdc_printf(p->out, "/FontBBox[%f %f %f %f]\n", - font->t3font->bbox.llx, font->t3font->bbox.lly, - font->t3font->bbox.urx, font->t3font->bbox.ury); - - pdc_printf(p->out, "/FontMatrix[%f %f %f %f %f %f]\n", - font->t3font->matrix.a, font->t3font->matrix.b, - font->t3font->matrix.c, font->t3font->matrix.d, - font->t3font->matrix.e, font->t3font->matrix.f); - pdc_printf(p->out, "/CharProcs %ld 0 R\n", font->t3font->charprocs_id); - pdc_printf(p->out, "/Resources %ld 0 R\n", font->t3font->res_id); - - /* We must apply a correctional factor since Type 3 fonts not - * necessarily use 1000 units per em. We apply the correction - * here, and store the 1000-based width values in the font in - * order to speed up PDF_stringwidth(). - */ - a = (float) 1000 * font->t3font->matrix.a; - break; - } - - /* /FontDescriptor, /FirstChar, /LastChar, /Widths */ - switch (font->type) - { - case pdc_Type1: - if (base_font == pdc_true) break; - case pdc_MMType1: - case pdc_TrueType: - case pdc_Type1C: - { - fontdescriptor_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/FontDescriptor %ld 0 R\n", fontdescriptor_id); - } - case pdc_Type3: - { - - pdc_puts(p->out, "/FirstChar 0\n"); - pdc_puts(p->out, "/LastChar 255\n"); - - pdc_puts(p->out, "/Widths[\n"); - for (i = 0; i < 16; i++) - { - for (j = 0; j < 16; j++) - pdc_printf(p->out, " %d", - (int) ((font->widths[16*i + j]) / a + 0.5)); - pdc_puts(p->out, "\n"); - } - pdc_puts(p->out, "]\n"); - } - break; - - default: - break; - } - - /* /Encoding */ - switch (font->type) - { - case pdc_Type1: - case pdc_MMType1: - case pdc_TrueType: - case pdc_Type1C: - if (enc == pdc_winansi) - { - pdc_printf(p->out, "/Encoding/WinAnsiEncoding\n"); - break; - } - if (enc == pdc_macroman && font->hasnomac == pdc_false) - { - pdc_printf(p->out, "/Encoding/MacRomanEncoding\n"); - break; - } - case pdc_Type3: - if (enc >= 0) - { - if (p->encodings[enc].id == PDC_BAD_ID) - p->encodings[enc].id = pdc_alloc_id(p->out); - encoding_id = p->encodings[enc].id; - } - if (encoding_id != PDC_BAD_ID) - pdc_printf(p->out, "/Encoding %ld 0 R\n", encoding_id); - break; - - case pdc_CIDFontType2: - case pdc_CIDFontType0: - if (font->cmapname) - pdc_printf(p->out, "/Encoding/%s\n", font->cmapname); - break; - } - - - /* /DescendantFonts */ - if (comp_font == pdc_true) - { - descendant_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/DescendantFonts[%ld 0 R]\n", descendant_id); - } - - pdc_end_dict(p->out); /* font dict */ - pdc_end_obj(p->out); /* font obj */ - - /* - * Encoding dictionary - */ - if (encoding_id != PDC_BAD_ID) - { - char *charname; - - pdc_begin_obj(p->out, encoding_id); /* encoding obj */ - pdc_begin_dict(p->out); /* encoding dict */ - - pdc_puts(p->out, "/Type/Encoding\n"); - - { - pdc_encodingvector *ev = p->encodings[enc].ev; - pdc_encodingvector *evb = NULL; - int islatin1 = - !strncmp((const char *) ev->apiname, "iso8859-1", - strlen("iso8859-1")); - - pdf_set_encoding_glyphnames(p, enc); - - if (!strncmp(ev->apiname, PDC_ENC_MODWINANSI, - strlen(PDC_ENC_MODWINANSI)) - || islatin1) - { - pdc_puts(p->out, "/BaseEncoding/WinAnsiEncoding\n"); - evb = p->encodings[pdc_winansi].ev; - if (!evb) - p->encodings[pdc_winansi].ev = - pdc_copy_core_encoding(p->pdc, "winansi"); - } - if (!strncmp(ev->apiname, PDC_ENC_MODMACROMAN, - strlen(PDC_ENC_MODMACROMAN))) - { - pdc_puts(p->out, "/BaseEncoding/MacRomanEncoding\n"); - evb = p->encodings[pdc_macroman].ev; - if (!evb) - p->encodings[pdc_macroman].ev = - pdc_copy_core_encoding(p->pdc, "macroman"); - } - - if (evb && font->type != pdc_Type3) - { - int iv = -1; - for (i = 0; i < font->numOfCodes; i++) - { - if ((ev->chars[i] && !evb->chars[i]) || - (!ev->chars[i] && evb->chars[i]) || - (ev->chars[i] && evb->chars[i] && - strcmp(ev->chars[i], evb->chars[i]))) - { - if (iv == -1) - pdc_puts(p->out, "/Differences["); - if (i > iv + 1) - pdc_printf(p->out, "%d", i); - charname = (char *) - ev->chars[i] ? ev->chars[i] : (char *) ".notdef"; - pdc_put_pdfname(p->out, charname, strlen(charname)); - pdc_puts(p->out, "\n"); - iv = i; - } - } - if (iv > -1) - pdc_puts(p->out, "]\n"); - } - else - { - pdc_puts(p->out, "/Differences[0"); - for (i = 0; i < font->numOfCodes; i++) - { - charname = (char *) ev->chars[i] ? - ev->chars[i] : (char *) ".notdef"; - pdc_put_pdfname(p->out, charname, strlen(charname)); - pdc_puts(p->out, "\n"); - } - pdc_puts(p->out, "]\n"); - } - } - - pdc_end_dict(p->out); /* encoding dict */ - pdc_end_obj(p->out); /* encoding obj */ - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); - } - - - /* - * CID fonts dictionary - */ - if (descendant_id != PDC_BAD_ID) - { - const char *tmpstr; - - pdc_begin_obj(p->out, descendant_id); /* CID font obj */ - pdc_begin_dict(p->out); /* CID font dict */ - pdc_puts(p->out, "/Type/Font\n"); - - /* /Subtype */ - if (font->type == pdc_CIDFontType0) - pdc_puts(p->out, "/Subtype/CIDFontType0\n"); - if (font->type == pdc_CIDFontType2) - pdc_puts(p->out, "/Subtype/CIDFontType2\n"); - - /* /BaseFont */ - pdc_puts(p->out, "/BaseFont"); - pdc_put_pdfname(p->out, fontname, strlen(fontname)); - if (font->style != pdc_Normal) - pdc_printf(p->out, ",%s", - pdc_get_keyword(font->style, pdf_fontstyle_pdfkeys)); - pdc_puts(p->out, "\n"); - - /* /CIDSystemInfo */ - tmpstr = pdf_get_ordering_cid(p, font); - pdc_puts(p->out, "/CIDSystemInfo<out, Adobe_str, (int) strlen(Adobe_str)); - pdc_puts(p->out, "/Ordering"); - pdc_put_pdfstring(p->out, tmpstr, (int) strlen(tmpstr)); - pdc_printf(p->out, "/Supplement %d>>\n", - pdf_get_supplement_cid(p, font)); - - /* /FontDescriptor */ - fontdescriptor_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/FontDescriptor %ld 0 R\n", fontdescriptor_id); - - /* /DW /W */ -#ifdef PDF_CJKFONTWIDTHS_SUPPORTED - if (enc == pdc_cid) - pdf_put_cidglyph_widths(p, font); -#endif /* PDF_CJKFONTWIDTHS_SUPPORTED */ - - - pdc_end_dict(p->out); /* CID font dict */ - pdc_end_obj(p->out); /* CID font obj */ - } - - /* - * FontDescriptor dictionary - */ - if (fontdescriptor_id != PDC_BAD_ID) - pdf_write_fontdescriptor(p, font, fontdescriptor_id, fontfile_id); - - /* - * Font embedding - */ - if (fontfile_id != PDC_BAD_ID) - { - pdc_id length_id = PDC_BAD_ID; - pdc_id length1_id = PDC_BAD_ID; - pdc_id length2_id = PDC_BAD_ID; - pdc_id length3_id = PDC_BAD_ID; - pdc_bool hexencode = pdc_false; - pdc_bool compress = pdc_false; - - /* Prepare embedding */ - switch(font->type) - { - case pdc_Type1: - case pdc_MMType1: - { - pdf_make_t1src(p, font, &src); - length1_id = pdc_alloc_id(p->out); - length2_id = pdc_alloc_id(p->out); - length3_id = pdc_alloc_id(p->out); - } - break; - -#ifdef PDF_TRUETYPE_SUPPORTED - case pdc_TrueType: - case pdc_CIDFontType2: - { - length1_id = pdc_alloc_id(p->out); - } - case pdc_Type1C: - case pdc_CIDFontType0: - { - src.private_data = (void *) font->fontfilename; - if (font->fontfilename) - { - /* Read the font from file */ - src.init = pdf_data_source_file_init; - src.fill = pdf_data_source_file_fill; - src.terminate = pdf_data_source_file_terminate; - switch(font->type) - { - case pdc_TrueType: - case pdc_CIDFontType2: - src.offset = (long) 0; - src.length = (long) 0; - break; - - case pdc_Type1C: - case pdc_CIDFontType0: - src.offset = font->cff_offset; - src.length = (long) font->cff_length; - break; - - default: - break; - } - } - else - { - /* Read the font from memory */ - src.init = NULL; - src.fill = pdf_data_source_buf_fill; - src.terminate = NULL; - switch(font->type) - { - case pdc_TrueType: - case pdc_CIDFontType2: - src.buffer_start = font->img; - src.buffer_length = font->filelen; - break; - - case pdc_Type1C: - case pdc_CIDFontType0: - src.buffer_start = font->img + font->cff_offset; - src.buffer_length = font->cff_length; - break; - - default: - break; - } - src.bytes_available = 0; - src.next_byte = NULL; - } - } - break; -#endif /* PDF_TRUETYPE_SUPPORTED */ - - default: - break; - } - - /* Embedded font stream dictionary */ - pdc_begin_obj(p->out, fontfile_id); /* Embedded font stream obj */ - pdc_begin_dict(p->out); /* Embedded font stream dict */ - - /* /Length, /Filter */ - length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", length_id); - switch(font->type) - { - case pdc_Type1: - case pdc_MMType1: - if (p->debug['a']) - { - hexencode = pdc_true; - pdc_puts(p->out, "/Filter/ASCIIHexDecode\n"); - } - break; - -#ifdef PDF_TRUETYPE_SUPPORTED - case pdc_TrueType: - case pdc_CIDFontType2: - case pdc_Type1C: - case pdc_CIDFontType0: - if (font->filelen != 0L) - { - compress = pdc_true; - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - } - break; -#endif /* PDF_TRUETYPE_SUPPORTED */ - - default: - break; - } - - /* /Length1, /Length2, Length3 */ - if (length1_id != PDC_BAD_ID) - pdc_printf(p->out, "/Length1 %ld 0 R\n", length1_id); - if (length2_id != PDC_BAD_ID) - pdc_printf(p->out, "/Length2 %ld 0 R\n", length2_id); - if (length3_id != PDC_BAD_ID) - pdc_printf(p->out, "/Length3 %ld 0 R\n", length3_id); - -#ifdef PDF_TRUETYPE_SUPPORTED - /* /Subtype */ - if(font->type == pdc_Type1C) - pdc_puts(p->out, "/Subtype/Type1C\n"); - if (font->type == pdc_CIDFontType0) - pdc_puts(p->out, "/Subtype/CIDFontType0C\n"); -#endif /* PDF_TRUETYPE_SUPPORTED */ - - pdc_end_dict(p->out); /* Embedded font stream dict */ - - /* Stream */ - if (hexencode == pdc_true) - pdf_ASCIIHexEncode(p, &src); - else - pdf_copy_stream(p, &src, compress); - - pdc_end_obj(p->out); /* Embedded font stream obj */ - - pdc_put_pdfstreamlength(p->out, length_id); - - /* Length objects */ - switch(font->type) - { - case pdc_Type1: - case pdc_MMType1: - pdf_put_length_objs(p, &src, length1_id, length2_id, length3_id); - break; - -#ifdef PDF_TRUETYPE_SUPPORTED - case pdc_TrueType: - case pdc_CIDFontType2: - if (compress) - { - pdc_begin_obj(p->out, length1_id); /* Length1 obj */ - pdc_printf(p->out, "%ld\n", (long) font->filelen); - pdc_end_obj(p->out); /* Length1 obj */ - } - else - { - /* same as /Length */ - pdc_put_pdfstreamlength(p->out, length1_id); - } - break; -#endif /* PDF_TRUETYPE_SUPPORTED */ - - default: - break; - } - } - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); -} - -void -pdf_write_doc_fonts(PDF *p) -{ - int slot; - - /* output pending font objects */ - for (slot = 0; slot < p->fonts_number; slot++) - { - switch(p->fonts[slot].type) - { - case pdc_Type1: - case pdc_MMType1: -#ifdef PDF_TRUETYPE_SUPPORTED - case pdc_TrueType: - case pdc_CIDFontType2: - case pdc_Type1C: -#endif /* PDF_TRUETYPE_SUPPORTED */ - case pdc_CIDFontType0: - case pdc_Type3: - pdf_put_font(p, &p->fonts[slot]); - break; - - default: - break; - } - } -} - -void -pdf_write_page_fonts(PDF *p) -{ - int i, total = 0; - - /* This doesn't really belong here, but all modules which write - * font resources also need this, so we include it here. - * Note that keeping track of ProcSets is considered obsolete - * starting with PDF 1.4, so we always include the full set. - */ - - pdc_puts(p->out, "/ProcSet[/PDF/ImageB/ImageC/ImageI/Text]\n"); - - for (i = 0; i < p->fonts_number; i++) - if (p->fonts[i].used_on_current_page == pdc_true) - total++; - - if (total > 0) - { - pdc_puts(p->out, "/Font"); - - pdc_begin_dict(p->out); /* font resource dict */ - - for (i = 0; i < p->fonts_number; i++) - if (p->fonts[i].used_on_current_page == pdc_true) { - p->fonts[i].used_on_current_page = pdc_false; /* reset */ - pdc_printf(p->out, "/F%d %ld 0 R\n", i, p->fonts[i].obj_id); - } - - pdc_end_dict(p->out); /* font resource dict */ - } -} diff --git a/src/libs/pdflib/libs/pdflib/p_font.h b/src/libs/pdflib/libs/pdflib/p_font.h deleted file mode 100644 index cfc7e13f7d..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_font.h +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_font.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file for the PDFlib font subsystem - * - */ - -#ifndef P_FONT_H -#define P_FONT_H - -#define PDF_DEFAULT_WIDTH 250 /* some reasonable default */ -#define PDF_DEFAULT_CIDWIDTH 1000 /* for CID fonts */ -#define PDF_DEFAULT_GLYPH 0x0020 /* space */ - -/* internal maximal length of fontnames */ -#define PDF_MAX_FONTNAME 128 - -/* last text rendering mode number */ -#define PDF_LAST_TRMODE 7 - -/* p_truetype.c */ -pdc_bool pdf_get_metrics_tt(PDF *p, pdc_font *font, - const char *fontname, pdc_encoding enc, - const char *filename); -int pdf_check_tt_font(PDF *p, const char *filename, - const char *fontname, pdc_font *font); -int pdf_check_tt_hostfont(PDF *p, const char *hostname); - -/* p_afm.c */ -pdc_bool pdf_process_metrics_data(PDF *p, pdc_font *font, - const char *fontname); -pdc_bool pdf_get_metrics_afm(PDF *p, pdc_font *font, - const char *fontname, pdc_encoding enc, - const char *filename); -pdc_bool pdf_get_core_metrics_afm(PDF *p, pdc_font *font, - pdc_core_metric *metric, const char *fontname, - const char *filename); - -/* p_pfm.c */ -pdc_bool pdf_check_pfm_encoding(PDF *p, pdc_font *font, - const char *fontname, pdc_encoding enc); -pdc_bool pdf_get_metrics_pfm(PDF *p, pdc_font *font, - const char *fontname, pdc_encoding enc, - const char *filename); - -/* p_cid.c */ -pdc_bool pdf_get_metrics_cid(PDF *p, pdc_font *font, - const char *fontname, - const char *encoding); -int pdf_handle_cidfont(PDF *p, const char *fontname, - const char *encoding); -const char* pdf_get_ordering_cid(PDF *p, pdc_font *font); -int pdf_get_supplement_cid(PDF *p, pdc_font *font); -void pdf_put_cidglyph_widths(PDF *p, pdc_font *font); - - -/* p_font.c */ -void pdf_init_fonts(PDF *p); -void pdf_grow_fonts(PDF *p); -int pdf_init_newfont(PDF *p); -void pdf_write_page_fonts(PDF *p); -void pdf_write_doc_fonts(PDF *p); -void pdf_cleanup_fonts(PDF *p); -int pdf__load_font(PDF *p, const char *fontname, int reserved, - const char *encoding, const char *optlist); -pdc_bool pdf_make_fontflag(PDF *p, pdc_font *font); -int pdf_get_font(PDF *p); -int pdf_get_monospace(PDF *p); -const char *pdf_get_fontname(PDF *p); -const char *pdf_get_fontstyle(PDF *p); -const char *pdf_get_fontencoding(PDF *p); - - -/* p_type1.c */ -int pdf_t1check_fontfile(PDF *p, pdc_font *font, pdc_file *fp); -PDF_data_source *pdf_make_t1src(PDF *p, pdc_font *font, - PDF_data_source *t1src); -void pdf_put_length_objs(PDF *p, PDF_data_source *t1src, - pdc_id length1_id, pdc_id length2_id, pdc_id length3_id); - -/* p_type3.c */ -void pdf_init_type3(PDF *p); -int pdf_get_t3colorized(PDF *p); -int pdf_handle_t3font(PDF *p, const char *fontname, pdc_encoding enc, - int oldslot); -void pdf__begin_font(PDF *p, const char *fontname, - float a, float b, float c, float d, float e, float f, - const char *optlist); -void pdf__end_font(PDF *p); -void pdf__begin_glyph(PDF *p, const char *glyphname, float wx, - float llx, float lly, float urx, float ury); -void pdf__end_glyph(PDF *p); - -#endif /* P_FONT_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_generr.h b/src/libs/pdflib/libs/pdflib/p_generr.h deleted file mode 100644 index 922451f126..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_generr.h +++ /dev/null @@ -1,402 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_generr.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib error messages - * - */ - -#if pdf_genNames -#define gen(n, num, nam, msg) PDF_E_##nam = num, -#elif pdf_genInfo -#define gen(n, num, nam, msg) { n, num, msg, (const char *) 0 }, - -#else -#error invalid inclusion of generator file -#endif - - -/* -------------------------------------------------------------------- */ -/* Configuration (20xx) */ -/* -------------------------------------------------------------------- */ - -gen(0, 2000, UNSUPP_CRYPT, "Encryption not supported in this configuration") - -gen(0, 2002, UNSUPP_KERNING, "Kerning not supported in this configuration") - -gen(0, 2004, UNSUPP_SUBSET, "Subsetting not supported in this configuration") - -gen(0, 2006, UNSUPP_PDFX, "PDF/X not supported in this configuration") - -gen(1, 2008, UNSUPP_IMAGE, "$1 images not supported in this configuration") - -gen(0, 2010, UNSUPP_ICC, "ICC profiles not supported in this configuration") - -gen(0, 2012, UNSUPP_UNICODE, - "Unicode and glyph id addressing not supported in this configuration") - -gen(0, 2014, UNSUPP_SPOTCOLOR, - "Spot colors not supported in this configuration") - -gen(0, 2016, UNSUPP_PDI, "PDF import (PDI) not supported in this configuration") - -gen(0, 2018, UNSUPP_BLOCK, - "Personalization with blocks not supported in this configuration") - - -/* -------------------------------------------------------------------- */ -/* Document, page, scoping and resource (21xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 2100, DOC_SCOPE, "Function must not be called in '$1' scope") - -gen(1, 2102, DOC_FUNCUNSUPP, "Function not supported for '$1'") - -gen(2, 2104, DOC_PDFVERSION, "$1 is not supported in PDF $2") - -gen(0, 2106, DOC_EMPTY, "Generated document doesn't contain any pages") - -gen(0, 2110, PAGE_SIZE_ACRO4, "Page size incompatible with Acrobat 4") - -gen(2, 2112, PAGE_BADBOX, "Illegal $1 [$2]") - -gen(0, 2114, PAGE_ILLCHGSIZE, - "Page size cannot be changed in top-down coordinate system") - -gen(2, 2120, RES_BADRES, "Bad resource specification '$1' for category '$2'") - -gen(2, 2122, DOC_SCOPE_GET, "Can't get parameter '$1' in '$2' scope") - -gen(2, 2124, DOC_SCOPE_SET, "Can't set parameter '$1' in '$2' scope") - - -/* -------------------------------------------------------------------- */ -/* Graphics and Text (22xx) */ -/* -------------------------------------------------------------------- */ - -gen(0, 2200, GSTATE_UNMATCHEDSAVE, "Unmatched save level") - -gen(0, 2202, GSTATE_RESTORE, "Invalid restore (no matching save level") - -gen(1, 2204, GSTATE_SAVELEVEL, "Too many save levels (max. $1)") - -/* Currently unused */ -gen(0, 2210, PATTERN_SELF, "Can't use a pattern within its own definition") - -gen(0, 2212, SHADING13, "Smooth shadings are not supported in PDF 1.3") - -gen(1, 2220, TEMPLATE_SELF, - "Can't place template handle $1 within its own definition") - -gen(1, 2230, TEXT_UNICODENOTSHOW, - "Can't show text character with Unicode value $1") - -gen(1, 2232, TEXT_GLYPHIDNOTSHOW, "Can't show text character with glyph ID $1") - -gen(1, 2234, TEXT_TOOLONG, "Text too long (max. $1)") - -gen(0, 2236, TEXT_TOOMANYCODES, "Too many different unicode values (> 256)") - -gen(0, 2238, TEXT_NOFONT, "No font set for text") - -gen(1, 2240, TEXT_NOFONT_PAR, "No font set for parameter '$1'") - - - -/* -------------------------------------------------------------------- */ -/* Color (23xx) */ -/* -------------------------------------------------------------------- */ - -gen(0, 2300, COLOR_SPOT, -"Spot color can not be based on a Pattern, Indexed, or Separation color space") - -gen(2, 2302, COLOR_BADSPOT, "Color name '$1' not found in $2 table") - -gen(0, 2304, COLOR_SPOTBW, "Alternate color for spot color is black or white") - -gen(1, 2306, COLOR_UNLIC_SPOTCOLOR, "$1 spot colors not licensed") - - - -/* -------------------------------------------------------------------- */ -/* Image (24xx) */ -/* -------------------------------------------------------------------- */ - -gen(2, 2400, IMAGE_CORRUPT, "Corrupt $1 image file '$2'") - -gen(3, 2402, IMAGE_NOPAGE, "Requested page $1 in $2 image '$3' not found") - -gen(2, 2404, IMAGE_BADDEPTH, - "Bad number of bits per pixel ($1) in image file '$2'") - -gen(1, 2406, IMAGE_BADMASK, - "Image '$1' not suitable as mask (has more than one color component)") - -gen(1, 2408, IMAGE_MASK1BIT13, - "Image '$1' with more than 1 bit is not supported as mask in PDF 1.3") - -gen(1, 2410, IMAGE_COLORMAP, "Couldn't read colormap in image '$1'") - -gen(2, 2412, IMAGE_BADCOMP, - "Bad number of color components ($1) in image '$2'") - -gen(1, 2414, IMAGE_COLORIZE, - "Can't colorize image '$1' with more than 1 component") - -gen(1, 2416, IMAGE_ICC, "Couldn't handle embedded ICC profile in image '$1'") - -gen(1, 2418, IMAGE_ICC2, - "ICC profile for image file '$1' doesn't match image data") - -gen(0, 2420, IMAGE_THUMB, "More than one thumbnail for this page") - -gen(1, 2422, IMAGE_THUMB_MULTISTRIP, - "Can't use multi-strip image $1 as thumbnail") - -gen(1, 2424, IMAGE_THUMB_CS, - "Unsupported color space in thumbnail image handle $1") - -gen(2, 2426, IMAGE_THUMB_SIZE, "Thumbnail image $1 larger than $2 pixels") - -gen(2, 2428, IMAGE_OPTUNSUPP, - "Option '$1' for $2 images will be ignored (not supported)") - -gen(2, 2430, IMAGE_OPTUNREAS, "Option '$1' for $2 images will be ignored") - -gen(2, 2432, IMAGE_OPTBADMASK, "Option '$1' has bad image mask $2") - -gen(1, 2434, IMAGE_UNKNOWN, "Unknown image type in file '$1'") - -gen(0, 2436, IMAGE_NOADJUST, - "Option 'adjustpage' must not be used in top-down system") - -gen(2, 2440, RAW_ILLSIZE, - "Size ($1 bytes) of raw image file '$2' doesn't match specified options") - -gen(1, 2444, BMP_VERSUNSUPP, - "Version of BMP image file '$1' not supported") - -gen(1, 2446, BMP_COMPUNSUPP, - "Compression in BMP image file '$1' not supported") - -gen(2, 2450, JPEG_COMPRESSION, - "JPEG compression scheme '$1' in file '$2' not supported in PDF") - -gen(1, 2452, JPEG_MULTISCAN, - "JPEG file '$1' contains multiple scans, which is not supported in PDF") - -gen(1, 2460, GIF_LZWOVERFLOW, "LZW code size overflow in GIF file '$1'") - -gen(1, 2462, GIF_LZWSIZE, - "Color palette in GIF file '$1' with fewer than 128 colors not supported") - -gen(1, 2464, GIF_INTERLACED, "Interlaced GIF image '$1' not supported") - -gen(2, 2470, TIFF_UNSUPP_CS, - "Couldn't open TIFF image '$1' (unsupported color space; photometric $2)") - -gen(2, 2472, TIFF_UNSUPP_PREDICT, - "Couldn't open TIFF image '$1' (unsupported predictor tag $2)") - -gen(1, 2474, TIFF_UNSUPP_LZW_TILED, - "Couldn't open TIFF image '$1' (tiled image with LZW compression)") - -gen(1, 2476, TIFF_UNSUPP_LZW_PLANES, - "Couldn't open TIFF image '$1' (separate planes with LZW compression)") - -gen(1, 2478, TIFF_UNSUPP_LZW_ALPHA, - "Couldn't open TIFF image '$1' (alpha channel with LZW compression)") - -gen(2, 2480, TIFF_UNSUPP_JPEG, - "Couldn't open TIFF image '$1' (JPEG compression scheme $2)") - -gen(1, 2482, TIFF_UNSUPP_JPEG_TILED, - "Couldn't open TIFF image '$1' (tiled image with JPEG compression)") - -gen(1, 2484, TIFF_UNSUPP_JPEG_ALPHA, - "Couldn't open TIFF image '$1' (alpha channel with JPEG compression)") - -gen(2, 2486, TIFF_UNSUPP_SEP_NONCMYK, - "Couldn't open TIFF image '$1' (unsupported inkset tag $2)") - -gen(1, 2488, TIFF_MASK_MULTISTRIP, "Can't mask multistrip TIFF image '$1'") - -gen(1, 2490, TIFF_MULTISTRIP_MASK, - "Can't use multistrip TIFF image '$1' as mask") - - -/* -------------------------------------------------------------------- */ -/* Font (25xx) */ -/* -------------------------------------------------------------------- */ - -gen(2, 2500, FONT_CORRUPT, "Corrupt $1 font file '$2'") - -gen(2, 2502, FONT_BADENC, "Font '$1' doesn't support '$2' encoding") - -gen(3, 2504, FONT_FORCEENC, "Using '$1' encoding instead of '$2' for font '$3'") - -gen(2, 2505, FONT_NEEDUCS2, - "Font '$2' requires UCS2-compatible CMap instead of '$1'") - -gen(2, 2506, FONT_FORCEEMBED, "Encoding '$1' for font '$2' requires embedding") - -gen(1, 2508, FONT_BADTEXTFORM, - "Current text format not allowed for builtin encoding") - -gen(1, 2510, FONT_HOSTNOTFOUND, "Host font '$1' not found") - -gen(1, 2512, FONT_TTHOSTNOTFOUND, "TrueType host font '$1' not found") - -gen(1, 2514, FONT_EMBEDMM, "Multiple Master font '$1' cannot be embedded") - -gen(1, 2516, FONT_NOMETRICS, "Metrics data for font '$1' not found") - -gen(1, 2518, FONT_NOOUTLINE, - "No file specified with outline data for font '$1'") - -gen(1, 2520, FONT_NOGLYPHID, "Font '$1' does not contain glyph IDs") - -gen(1, 2530, CJK_NOSTANDARD, "Unknown standard CJK font '$1'") - -gen(1, 2540, T3_BADBBOX, - "Bounding box values must be 0 for colorized Type 3 font '$1'") - -gen(2, 2542, T3_GLYPH, "Glyph '$1' already defined in Type 3 font '$2'") - -gen(1, 2544, T3_FONTEXISTS, "Font '$1' already exists") - -gen(3, 2550, T1_BADCHARSET, - "Encoding (dfCharSet $1) in font/PFM file '$2' not supported") - -/* Unused -gen(3, 2552, T1_PFMFONTNAME, - "Font name mismatch in PFM file '$1' ('$2' vs. '$3')") -*/ - -gen(2, 2554, T1_AFMBADKEY, - "Unknown key '$1' in AFM file '$2'") - -/* Unused -gen(3, 2556, T1_AFMFONTNAME, - "Font name mismatch in AFM file '$1' ('$2' vs. '$3')") -*/ - -gen(1, 2558, T1_NOFONT, "'$1' is not a PostScript Type 1 font") - -gen(1, 2560, TT_BITMAP, "TrueType bitmap Font '$1' not supported") - -gen(1, 2562, TT_NOFONT, "Font '$1' is not a TrueType or OpenType font") - -gen(1, 2564, TT_BADCMAP, "Font '$1' contains unknown encodings (cmaps) only") - -gen(1, 2566, TT_SYMBOLOS2, "Symbol font '$1' does not contain OS/2 table") - -gen(1, 2568, TT_EMBED, -"Couldn't embed font '$1' due to licensing restrictions in the font file") - -gen(0, 2570, TT_ASSERT1, "TrueType parser error") - -gen(1, 2572, TT_ASSERT2, "TrueType parser error in font '$1'") - -gen(2, 2574, TTC_NOTFOUND, - "Font '$1' not found in TrueType Collection file '$2'") - -gen(1, 2576, TT_NOGLYFDESC, - "TrueType font '$1' does not contain any character outlines") - -gen(1, 2578, TT_NONAME, "TrueType font '$1' contains only unsupported " - "font name records in naming table") - -gen(1, 2580, OT_CHARSET, "OpenType font '$1' contains no charset data") - -/* Unused -gen(3, 2582, OT_GLYPH, - "OpenType font '$1' does not contain glyph name '$2' from encoding '$3'") -*/ - -gen(2, 2584, TT_GLYPHIDNOTFOUND, - "Couldn't find glyph ID for Unicode value $1 in TrueType font '$2'") - - -/* -------------------------------------------------------------------- */ -/* Encoding (26xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 2600, ENC_NOTFOUND, "Couldn't find encoding '$1'") - -gen(1, 2602, ENC_UNSUPP, "Code page '$1' not supported") - -/* Unused -gen(2, 2604, ENC_ADAPT, "Encoding '$1' was adapted to font '$2'") -*/ - -gen(1, 2606, ENC_CANTQUERY, "Can't query encoding '$1'") - -gen(1, 2608, ENC_CANTCHANGE, "Can't change encoding '$1'") - -gen(1, 2610, ENC_INUSE, - "Encoding '$1' can't be changed since it has already been used") - -gen(2, 2612, ENC_TOOLONG, "Encoding name '$1' too long (max. $2)") - -gen(2, 2614, ENC_BADLINE, "Syntax error in encoding file '$1' (line '$2')") - -gen(0, 2616, ENC_GLYPHORCODE, "Glyph name or Unicode value required") - -gen(3, 2618, ENC_BADGLYPH, - "Glyph name '$1' for Unicode value $2 differs from AGL name '$3'") - -gen(3, 2620, ENC_BADUNICODE, - "Unicode value $1 for glyph name '$2' differs from AGL value $3") - -gen(2, 2622, ENC_BADFONT, - "Current font $1 wasn't specified with encoding '$2'") - - - - -/* -------------------------------------------------------------------- */ -/* Hypertext (28xx) */ -/* -------------------------------------------------------------------- */ - -gen(2, 2802, HYP_OPTIGNORE_FORTYPE, - "Option '$1' for destination type '$2' will be ignored") - -gen(1, 2804, HYP_OPTIGNORE_FORELEM, - "Option '$1' for hypertext function will be ignored") - - -/* -------------------------------------------------------------------- */ -/* Internal (29xx) */ -/* -------------------------------------------------------------------- */ - -gen(1, 2900, INT_BADSCOPE, "Bad scope '$1'") - -gen(1, 2902, INT_BADANNOT, "Bad annotation type '$1'") - -gen(1, 2904, INT_BADCS, "Unknown color space $1") - -gen(1, 2906, INT_BADALTERNATE, "Bad alternate color space $1") - -gen(1, 2908, INT_BADPROFILE, "Unknown number of profile components ($1)") - -gen(1, 2910, INT_SSTACK_OVER, "State stack overflow in function '$1'") - -gen(1, 2912, INT_SSTACK_UNDER, "State stack underflow in function '$1'") - -gen(3, 2914, INT_WRAPPER, "Error in PDFlib $1 wrapper function $2 ($3)") - - -#undef gen -#undef pdf_genNames -#undef pdf_genInfo diff --git a/src/libs/pdflib/libs/pdflib/p_gif.c b/src/libs/pdflib/libs/pdflib/p_gif.c deleted file mode 100644 index db4c08f880..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_gif.c +++ /dev/null @@ -1,513 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_gif.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * GIF processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -#ifndef PDF_GIF_SUPPORTED - -pdc_bool -pdf_is_GIF_file(PDF *p, pdc_file *fp) -{ - (void) p; - (void) fp; - - return pdc_false; -} - -int -pdf_process_GIF_data( - PDF *p, - int imageslot) -{ - (void) imageslot; - - pdc_warning(p->pdc, PDF_E_UNSUPP_IMAGE, "GIF", 0, 0, 0); - return -1; -} - -#else - -#define LOCALCOLORMAP 0x80 -#define BitSet(byteval, bitval) (((byteval) & (bitval)) == (bitval)) - -static int ReadColorMap(pdc_core *pdc, pdc_file *fp, - int number, pdf_colormap *buffer); -static int DoExtension(PDF *p, pdf_image *image, int label); -static int GetDataBlock(PDF *p, pdf_image *image, unsigned char *buf); - -static void -pdf_data_source_GIF_init(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - - src->buffer_length = 260; /* max. GIF "data sub-block" length */ - - src->buffer_start = (pdc_byte*) pdc_malloc(p->pdc, src->buffer_length, - "pdf_data_source_GIF_init"); - src->bytes_available= 0; - src->next_byte = src->buffer_start; - - /* init the LZW transformation vars */ - image->info.gif.c_size = 9; /* initial code size */ - image->info.gif.t_size = 257; /* initial "table" size */ - image->info.gif.i_buff = 0; /* input buffer */ - image->info.gif.i_bits = 0; /* input buffer empty */ - image->info.gif.o_bits = 0; /* output buffer empty */ -} /* pdf_data_source_GIF_init */ - -static pdc_bool -pdf_data_source_GIF_fill(PDF *p, PDF_data_source *src) -{ -#define c_size image->info.gif.c_size -#define t_size image->info.gif.t_size -#define i_buff image->info.gif.i_buff -#define i_bits image->info.gif.i_bits -#define o_buff image->info.gif.o_buff -#define o_bits image->info.gif.o_bits - - pdf_image * image = (pdf_image *) src->private_data; - pdc_file * fp = image->fp; - int n_bytes = pdc_fgetc(fp); - /* # of bytes to read */ - unsigned char * o_curr = src->buffer_start; - int c_mask = (1 << c_size) - 1; - pdc_bool flag13 = pdc_false; - - src->bytes_available = 0; - - if (n_bytes == EOF) - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "GIF", stemp, 0, 0); - } - - if (n_bytes == 0) - return pdc_false; - - for (/* */ ; /* */ ; /* */) - { - int w_bits = c_size; /* number of bits to write */ - int code; - - /* get at least c_size bits into i_buff */ - while (i_bits < c_size) - { - if (n_bytes-- == 0) - { - src->bytes_available = (size_t) (o_curr - src->buffer_start); - return pdc_true; - } - /* EOF will be caught later */ - i_buff |= pdc_fgetc(fp) << i_bits; - i_bits += 8; - } - code = i_buff & c_mask; - i_bits -= c_size; - i_buff >>= c_size; - - if (flag13 && code != 256 && code != 257) - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "GIF", stemp, 0, 0); - } - - if (o_bits > 0) - { - o_buff |= code >> (c_size - 8 + o_bits); - w_bits -= 8 - o_bits; - *(o_curr++) = (unsigned char) o_buff; - } - if (w_bits >= 8) - { - w_bits -= 8; - *(o_curr++) = (unsigned char) (code >> w_bits); - } - o_bits = w_bits; - if (o_bits > 0) - o_buff = code << (8 - o_bits); - - ++t_size; - if (code == 256) /* clear code */ - { - c_size = 9; - c_mask = (1 << c_size) - 1; - t_size = 257; - flag13 = pdc_false; - } - - if (code == 257) /* end code */ - { - src->bytes_available = (size_t) (o_curr - src->buffer_start); - return pdc_true; - } - - if (t_size == (1 << c_size)) - { - if (++c_size > 12) - { - --c_size; - flag13 = pdc_true; - } - else - c_mask = (1 << c_size) - 1; - } - } /* for (;;) */ - -#undef c_size -#undef t_size -#undef i_buff -#undef i_bits -#undef o_buff -#undef o_bits -} /* pdf_data_source_GIF_fill */ - -static void -pdf_data_source_GIF_terminate(PDF *p, PDF_data_source *src) -{ - pdc_free(p->pdc, (void *) src->buffer_start); -} - -#define PDF_STRING_GIF "\107\111\106" -#define PDF_STRING_87a "\070\067\141" -#define PDF_STRING_89a "\070\071\141" - -pdc_bool -pdf_is_GIF_file(PDF *p, pdc_file *fp) -{ - unsigned char buf[3]; - - (void) p; - - if (!PDC_OK_FREAD(fp, buf, 3) || - strncmp((const char *) buf, PDF_STRING_GIF, 3) != 0) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - return pdc_true; -} - -int -pdf_process_GIF_data( - PDF *p, - int imageslot) -{ - static const char fn[] = "pdf_process_GIF_data"; - unsigned char buf[16]; - char c; - int imageCount = 0; - char version[4]; - int errcode = 0; - pdf_image *image; - pdf_colorspace cs; - pdf_colormap colormap; - int slot; - - image = &p->images[imageslot]; - - - /* we invert this flag later */ - if (image->ignoremask) - image->transparent = pdc_true; - - if (image->page == pdc_undef) - image->page = 1; - - /* Error reading magic number or not a GIF file */ - if (pdf_is_GIF_file(p, image->fp) == pdc_false) { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_GIF_ERROR; - } - - /* Version number */ - if (! PDC_OK_FREAD(image->fp, buf, 3)) { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_GIF_ERROR; - } - strncpy(version, (const char *) buf, 3); - version[3] = '\0'; - if ((strcmp(version, PDF_STRING_87a) != 0) && - (strcmp(version, PDF_STRING_89a) != 0)) { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_GIF_ERROR; - } - - /* Failed to read screen descriptor */ - if (! PDC_OK_FREAD(image->fp, buf, 7)) { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_GIF_ERROR; - } - - cs.type = Indexed; - /* size of the global color table */ - cs.val.indexed.palette_size = 2 << (buf[4] & 0x07); - cs.val.indexed.base = DeviceRGB; - cs.val.indexed.colormap = &colormap; - cs.val.indexed.colormap_id = PDC_BAD_ID; - - if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */ - if (ReadColorMap(p->pdc, image->fp, - cs.val.indexed.palette_size, &colormap)) { - errcode = PDF_E_IMAGE_COLORMAP; - goto PDF_GIF_ERROR; - } - } - - /* translate the aspect ratio to PDFlib notation */ - if (buf[6] != 0) { - image->dpi_x = -(buf[6] + ((float) 15.0)) / ((float) 64.0); - image->dpi_y = (float) -1.0; - } - - for (/* */ ; /* */ ; /* */) { - /* EOF / read error in image data */ - if (!PDC_OK_FREAD(image->fp, &c, 1)) { - errcode = PDC_E_IO_NODATA; - goto PDF_GIF_ERROR; - } - -#define PDF_SEMICOLON ((char) 0x3b) /* ASCII ';' */ - - if (c == PDF_SEMICOLON) { /* GIF terminator */ - /* Not enough images found in file */ - if (imageCount < image->page) { - if (!imageCount) - errcode = PDF_E_IMAGE_CORRUPT; - else - errcode = PDF_E_IMAGE_NOPAGE; - goto PDF_GIF_ERROR; - } - break; - } - -#define PDF_EXCLAM ((char) 0x21) /* ASCII '!' */ - - if (c == PDF_EXCLAM) { /* Extension */ - if (!PDC_OK_FREAD(image->fp, &c, 1)) { - /* EOF / read error on extension function code */ - errcode = PDC_E_IO_NODATA; - goto PDF_GIF_ERROR; - } - DoExtension(p, image, (int) c); - continue; - } - -#define PDF_COMMA ((char) 0x2c) /* ASCII ',' */ - - if (c != PDF_COMMA) { /* Not a valid start character */ - /* Bogus character, ignoring */ - continue; - } - - ++imageCount; - - if (! PDC_OK_FREAD(image->fp, buf, 9)) { - /* Couldn't read left/top/width/height */ - errcode = PDC_E_IO_NODATA; - goto PDF_GIF_ERROR; - } - - image->components = 1; - image->bpc = 8; - image->width = (float) pdc_get_le_ushort(&buf[4]); - image->height = (float) pdc_get_le_ushort(&buf[6]); - - if (image->imagemask) - { - if (p->compatibility <= PDC_1_3) { - errcode = PDF_E_IMAGE_MASK1BIT13; - goto PDF_GIF_ERROR; - } else { - /* images with more than one bit will be written as /SMask, - * and don't require an /ImageMask entry. - */ - image->imagemask = pdc_false; - } - image->colorspace = DeviceGray; - } - -#define INTERLACE 0x40 - if (BitSet(buf[8], INTERLACE)) { - errcode = PDF_E_GIF_INTERLACED; - goto PDF_GIF_ERROR; - } - - if (BitSet(buf[8], LOCALCOLORMAP)) { - if (ReadColorMap(p->pdc, image->fp, - cs.val.indexed.palette_size, &colormap)) - { - errcode = PDF_E_IMAGE_COLORMAP; - goto PDF_GIF_ERROR; - } - } - - /* read the "LZW initial code size". - */ - if (!PDC_OK_FREAD(image->fp, buf, 1)) { - errcode = PDC_E_IO_NODATA; - goto PDF_GIF_ERROR; - } - if (buf[0] != 8) { - if (imageCount > 1) - errcode = PDF_E_IMAGE_NOPAGE; - else - errcode = PDF_E_GIF_LZWSIZE; - goto PDF_GIF_ERROR; - } - - if (imageCount == image->page) - break; - } - - image->src.init = pdf_data_source_GIF_init; - image->src.fill = pdf_data_source_GIF_fill; - image->src.terminate = pdf_data_source_GIF_terminate; - image->src.private_data = (void *) image; - - image->compression = lzw; - image->use_raw = pdc_true; - - image->params = (char *) pdc_malloc(p->pdc, PDF_MAX_PARAMSTRING, fn); - strcpy(image->params, "/EarlyChange 0"); - - image->in_use = pdc_true; /* mark slot as used */ - - slot = pdf_add_colorspace(p, &cs, pdc_false); - image->colorspace = (pdf_colorspacetype) slot; - - - - pdf_put_image(p, imageslot, pdc_true); - - return imageslot; - - PDF_GIF_ERROR: - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - switch (errcode) - { - case PDC_E_IO_NODATA: - case PDF_E_IMAGE_COLORMAP: - case PDF_E_GIF_INTERLACED: - case PDF_E_GIF_LZWSIZE: - pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0); - break; - - case PDC_E_IO_BADFORMAT: - pdc_set_errmsg(p->pdc, errcode, stemp, "GIF", 0, 0); - break; - - case PDF_E_IMAGE_CORRUPT: - pdc_set_errmsg(p->pdc, errcode, "GIF", stemp, 0, 0); - break; - - case PDF_E_IMAGE_NOPAGE: - pdc_set_errmsg(p->pdc, errcode, - pdc_errprintf(p->pdc, "%d", image->page), "GIF", stemp, 0); - break; - - case 0: /* error code and message already set */ - break; - } - } - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; -} /* pdf_open_GIF_data */ - -static int -ReadColorMap(pdc_core *pdc, pdc_file *fp, int number, pdf_colormap *buffer) -{ - int i; - unsigned char rgb[3]; - - (void) pdc; - - for (i = 0; i < number; ++i) { - if (! PDC_OK_FREAD(fp, rgb, sizeof(rgb))) { - return pdc_true; /* yk: true == error */ - } - - (*buffer)[i][0] = rgb[0] ; - (*buffer)[i][1] = rgb[1] ; - (*buffer)[i][2] = rgb[2] ; - } - return pdc_false; /* yk: false == ok. */ -} /* ReadColorMap */ - -static int -DoExtension(PDF *p, pdf_image *image, int label) -{ - pdc_byte buf[256]; - - switch ((unsigned char) label) { - case 0x01: /* Plain Text Extension */ - break; - - case 0xff: /* Application Extension */ - break; - - case 0xfe: /* Comment Extension */ - while (GetDataBlock(p, image, (unsigned char*) buf) != 0) { - /* */ - } - return pdc_false; - - case 0xf9: /* Graphic Control Extension */ - (void) GetDataBlock(p, image, (unsigned char*) buf); - - if ((buf[0] & 0x1) != 0) { - image->transparent = !image->transparent; - image->transval[0] = buf[3]; - } - - while (GetDataBlock(p, image, (unsigned char*) buf) != 0) { - /* */ ; - } - return pdc_false; - - default: - break; - } - - while (GetDataBlock(p, image, (unsigned char*) buf) != 0) { - /* */ ; - } - - return pdc_false; -} /* DoExtension */ - -static int -GetDataBlock(PDF *p, pdf_image *image, unsigned char *buf) -{ - unsigned char count; - pdc_file *fp = image->fp; - - if ((!PDC_OK_FREAD(fp, &count, 1)) || - ((count != 0) && (!PDC_OK_FREAD(fp, buf, count)))) - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "GIF", stemp, 0, 0); - } - - return count; -} /* GetDataBlock */ - -#endif /* PDF_GIF_SUPPORTED */ diff --git a/src/libs/pdflib/libs/pdflib/p_gstate.c b/src/libs/pdflib/libs/pdflib/p_gstate.c deleted file mode 100644 index bbe06ca09a..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_gstate.c +++ /dev/null @@ -1,645 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_gstate.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines dealing with the graphics states - * - */ - -#include "p_intern.h" - -/* ---------------------- matrix functions ----------------------------- */ - -void -pdf_concat_raw(PDF *p, pdc_matrix *m) -{ - if (pdc_is_identity_matrix(m)) - return; - - pdf_end_text(p); - - pdc_printf(p->out, "%f %f %f %f %f %f cm\n", - m->a, m->b, m->c, m->d, m->e, m->f); - - pdc_multiply_matrix(m, &p->gstate[p->sl].ctm); -} - -void -pdf_concat_raw_ob(PDF *p, pdc_matrix *m, pdc_bool blind) -{ - if (!blind) - pdf_concat_raw(p, m); - else - pdc_multiply_matrix(m, &p->gstate[p->sl].ctm); -} - -void -pdf_set_topdownsystem(PDF *p, float height) -{ - if (p->ydirection < (float) 0.0) - { - pdc_matrix m; - pdc_translation_matrix(0, height, &m); - pdf_concat_raw(p, &m); - pdc_scale_matrix(1, -1, &m); - pdf_concat_raw(p, &m); - pdf_set_horiz_scaling(p, 100); - } -} - -/* -------------------- Special graphics state ---------------------------- */ - -void -pdf_init_gstate(PDF *p) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - gs->ctm.a = (float) 1; - gs->ctm.b = (float) 0; - gs->ctm.c = (float) 0; - gs->ctm.d = (float) 1; - gs->ctm.e = (float) 0.0; - gs->ctm.f = (float) 0.0; - - gs->x = (float) 0.0; - gs->y = (float) 0.0; - - p->fillrule = pdf_fill_winding; - - gs->lwidth = (float) 1; - gs->lcap = 0; - gs->ljoin = 0; - gs->miter = (float) 10; - gs->flatness = (float) -1; /* -1 means "has not been set" */ - gs->dashed = pdc_false; -} - -void -pdf__save(PDF *p) -{ - if (p->sl == PDF_MAX_SAVE_LEVEL - 1) - pdc_error(p->pdc, PDF_E_GSTATE_SAVELEVEL, - pdc_errprintf(p->pdc, "%d", PDF_MAX_SAVE_LEVEL - 1), 0, 0, 0); - - pdf_end_text(p); - - pdc_puts(p->out, "q\n"); - - /* propagate states to next level */ - p->sl++; - memcpy(&p->gstate[p->sl], &p->gstate[p->sl - 1], sizeof(pdf_gstate)); - memcpy(&p->tstate[p->sl], &p->tstate[p->sl - 1], sizeof(pdf_tstate)); - memcpy(&p->cstate[p->sl], &p->cstate[p->sl - 1], sizeof(pdf_cstate)); -} - - -void -pdf__restore(PDF *p) -{ - if (p->sl == 0) - pdc_error(p->pdc, PDF_E_GSTATE_RESTORE, 0, 0, 0, 0); - - pdf_end_text(p); - - pdc_puts(p->out, "Q\n"); - - p->sl--; -} - -PDFLIB_API void PDFLIB_CALL -PDF_save(PDF *p) -{ - static const char fn[] = "PDF_save"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p])\n", (void *) p)) - return; - - pdf__save(p); -} - -PDFLIB_API void PDFLIB_CALL -PDF_restore(PDF *p) -{ - static const char fn[] = "PDF_restore"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p])\n", (void *) p)) - return; - - pdf__restore(p); -} - -PDFLIB_API void PDFLIB_CALL -PDF_translate(PDF *p, float tx, float ty) -{ - static const char fn[] = "PDF_translate"; - pdc_matrix m; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g)\n", - (void *) p, tx, ty)) - return; - - if (tx == (float) 0 && ty == (float) 0) - return; - - pdc_translation_matrix(tx, ty, &m); - - pdf_concat_raw(p, &m); -} - -PDFLIB_API void PDFLIB_CALL -PDF_scale(PDF *p, float sx, float sy) -{ - static const char fn[] = "PDF_scale"; - pdc_matrix m; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g)\n", - (void *) p, sx, sy)) - return; - - if (sx == (float) 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, "sx", "0", 0, 0); - - if (sy == (float) 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, "sy", "0", 0, 0); - - if (sx == (float) 1 && sy == (float) 1) - return; - - pdc_scale_matrix(sx, sy, &m); - - pdf_concat_raw(p, &m); -} - -PDFLIB_API void PDFLIB_CALL -PDF_rotate(PDF *p, float phi) -{ - static const char fn[] = "PDF_rotate"; - pdc_matrix m; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, phi)) - return; - - if (phi == (float) 0) - return; - - pdc_rotation_matrix(p->ydirection * phi, &m); - - pdf_concat_raw(p, &m); -} - -PDFLIB_API void PDFLIB_CALL -PDF_skew(PDF *p, float alpha, float beta) -{ - static const char fn[] = "PDF_skew"; - pdc_matrix m; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g)\n", - (void *) p, alpha, beta)) - return; - - if (alpha == (float) 0 && beta == (float) 0) - return; - - if (alpha > (float) 360 || alpha < (float) -360 || - alpha == (float) -90 || alpha == (float) -270 || - alpha == (float) 90 || alpha == (float) 270) { - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "alpha", pdc_errprintf(p->pdc, "%f", alpha), 0, 0); - } - - if (beta > (float) 360 || beta < (float) -360 || - beta == (float) -90 || beta == (float) -270 || - beta == (float) 90 || beta == (float) 270) { - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "beta", pdc_errprintf(p->pdc, "%f", beta), 0, 0); - } - - pdc_skew_matrix(p->ydirection * alpha, p->ydirection * beta, &m); - - pdf_concat_raw(p, &m); -} - -PDFLIB_API void PDFLIB_CALL -PDF_concat(PDF *p, float a, float b, float c, float d, float e, float f) -{ - static const char fn[] = "PDF_concat"; - pdc_matrix m; - float det = a * d - b * c; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], %g, %g, %g, %g, %g, %g)\n", (void *) p, a, b, c, d, e, f)) - { - return; - } - - if (fabs(det) < (float) PDF_SMALLREAL) - pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, - pdc_errprintf(p->pdc, "%f %f %f %f %f %f", a, b, c, d, e, f), - 0, 0, 0); - - m.a = (float) a; - m.b = (float) b; - m.c = (float) c; - m.d = (float) d; - m.e = (float) e; - m.f = (float) f; - - pdf_concat_raw(p, &m); -} - -void -pdf__setmatrix(PDF *p, pdc_matrix *n) -{ - pdc_matrix m; - float det = n->a * n->d - n->b * n->c; - - if (fabs(det) < (float) PDF_SMALLREAL) - pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, - pdc_errprintf(p->pdc, "%f %f %f %f %f %f", - n->a, n->b, n->c, n->d, n->e, n->f), - 0, 0, 0); - - pdc_invert_matrix(p->pdc, &m, &p->gstate[p->sl].ctm); - pdf_concat_raw(p, &m); - pdf_concat_raw(p, n); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setmatrix(PDF *p, float a, float b, float c, float d, float e, float f) -{ - static const char fn[] = "PDF_setmatrix"; - pdc_matrix m; - float det = a * d - b * c; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], %g, %g, %g, %g, %g, %g)\n", (void *) p, a, b, c, d, e, f)) - { - return; - } - - if (fabs(det) < (float) PDF_SMALLREAL) - pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, - pdc_errprintf(p->pdc, "%f %f %f %f %f %f", a, b, c, d, e, f), - 0, 0, 0); - - pdc_invert_matrix(p->pdc, &m, &p->gstate[p->sl].ctm); - pdf_concat_raw(p, &m); - - m.a = (float) a; - m.b = (float) b; - m.c = (float) c; - m.d = (float) d; - m.e = (float) e; - m.f = (float) f; - - pdf_concat_raw(p, &m); -} - -/* -------------------- General graphics state ---------------------------- */ - -/* definitions of dash options */ -static const pdc_defopt pdf_dashoptions[] = -{ - {"dasharray", pdc_floatlist, 0, 2, MAX_DASH_LENGTH, - PDC_FLOAT_PREC, PDC_FLOAT_MAX, NULL}, - - {"dashphase", pdc_floatlist, 0, 1, 1, 0.0, PDC_FLOAT_MAX, NULL}, - - PDC_OPT_TERMINATE -}; - -static void -pdf__setdashpattern(PDF *p, float *darray, int length, float phase) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - /* length == 0 or 1 means solid line */ - if (length < 2) - { - if (gs->dashed || PDF_FORCE_OUTPUT()) - { - pdc_puts(p->out, "[] 0 d\n"); - gs->dashed = pdc_false; - } - } - else - { - int i; - - pdc_puts(p->out, "["); - for (i = 0; i < length; i++) - { - pdc_printf(p->out, "%f ", darray[i]); - } - pdc_printf(p->out, "] %f d\n", phase); - gs->dashed = pdc_true; - } -} - -void -pdf__setdash(PDF *p, float b, float w) -{ - float darray[2]; - int length = 2; - - /* both zero means solid line */ - if (b == 0.0 && w == 0.0) - { - length = 0; - } - else - { - darray[0] = b; - darray[1] = w; - } - pdf__setdashpattern(p, darray, length, (float) 0.0); -} - -void -pdf__setflat(PDF *p, float flat) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - if (flat != gs->flatness || PDF_FORCE_OUTPUT()) - { - gs->flatness = flat; - pdc_printf(p->out, "%f i\n", flat); - } -} - -void -pdf__setlinejoin(PDF *p, int join) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - if (join != gs->ljoin || PDF_FORCE_OUTPUT()) - { - gs->ljoin = join; - pdc_printf(p->out, "%d j\n", join); - } -} - -void -pdf__setlinecap(PDF *p, int cap) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - if (cap != gs->lcap || PDF_FORCE_OUTPUT()) - { - gs->lcap = cap; - pdc_printf(p->out, "%d J\n", cap); - } -} - -void -pdf__setlinewidth(PDF *p, float width) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - if (width != gs->lwidth || PDF_FORCE_OUTPUT()) - { - gs->lwidth = width; - pdc_printf(p->out, "%f w\n", width); - } -} - -void -pdf__setmiterlimit(PDF *p, float miter) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - if (miter != gs->miter || PDF_FORCE_OUTPUT()) - { - gs->miter = miter; - pdc_printf(p->out, "%f M\n", miter); - } -} - - -PDFLIB_API void PDFLIB_CALL -PDF_setdash(PDF *p, float b, float w) -{ - static const char fn[] = "PDF_setdash"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g)\n", - (void *) p, b, w)) - return; - - if (b < (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "b", pdc_errprintf(p->pdc, "%f", b), 0, 0); - - if (w < (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "w", pdc_errprintf(p->pdc, "%f", w), 0, 0); - - pdf__setdash(p, b, w); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setpolydash(PDF *p, float *darray, int length) -{ - static const char fn[] = "PDF_setpolydash"; - - int i; - - for (i = 0; i < length; i++) - pdc_trace(p->pdc, "*(darray+%d) = %g;\n", i, darray[i]); - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], darray[%p], %d)\n", (void *) p, (void *) darray, length)) - { - return; - } - - if (length > 1) - { - /* sanity checks */ - if (!darray) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "darray", 0, 0, 0); - - if (length < 0 || length > MAX_DASH_LENGTH) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "length", pdc_errprintf(p->pdc, "%d", length), 0, 0); - - for (i = 0; i < length; i++) { - if (darray[i] < (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "darray[i]", pdc_errprintf(p->pdc, "%f", darray[i]), 0, 0); - } - } - - pdf__setdashpattern(p, darray, length, (float) 0.0); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setdashpattern(PDF *p, const char *optlist) -{ - static const char fn[] = "PDF_setdashpattern"; - pdc_resopt *results; - float *darray, phase; - int length; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\")\n", (void *) p, optlist)) - return; - - /* parsing optlist */ - results = pdc_parse_optionlist(p->pdc, optlist, pdf_dashoptions, NULL, - pdc_true); - - length = pdc_get_optvalues(p->pdc, "dasharray", results, - NULL, (void **) &darray); - - phase = (float) 0.0; - (void) pdc_get_optvalues(p->pdc, "dashphase", results, &phase, NULL); - - pdc_cleanup_optionlist(p->pdc, results); - - pdf__setdashpattern(p, darray, length, phase); - - if (darray) - pdc_free(p->pdc, darray); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setflat(PDF *p, float flat) -{ - static const char fn[] = "PDF_setflat"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, flat)) - return; - - if (flat < 0.0 || flat > 100.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "flat", pdc_errprintf(p->pdc, "%f", flat), 0, 0); - - pdf__setflat(p, flat); -} - - -PDFLIB_API void PDFLIB_CALL -PDF_setlinejoin(PDF *p, int join) -{ - static const char fn[] = "PDF_setlinejoin"; - const int LAST_JOIN = 2; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %d)\n", - (void *) p, join)) - return; - - if (join < 0 || join > LAST_JOIN) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "join", pdc_errprintf(p->pdc, "%d", join), 0, 0); - - pdf__setlinejoin(p, join); -} - - -PDFLIB_API void PDFLIB_CALL -PDF_setlinecap(PDF *p, int cap) -{ - static const char fn[] = "PDF_setlinecap"; - const int LAST_CAP = 2; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %d)\n", - (void *) p, cap)) - return; - - if (cap < 0 || cap > LAST_CAP) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "cap", pdc_errprintf(p->pdc, "%d", cap), 0, 0); - - pdf__setlinecap(p, cap); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setmiterlimit(PDF *p, float miter) -{ - static const char fn[] = "PDF_setmiterlimit"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, miter)) - return; - - if (miter < (float) 1.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "miter", pdc_errprintf(p->pdc, "%f", miter), 0, 0); - - pdf__setmiterlimit(p, miter); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setlinewidth(PDF *p, float width) -{ - static const char fn[] = "PDF_setlinewidth"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g)\n", - (void *) p, width)) - return; - - if (width <= (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "width", pdc_errprintf(p->pdc, "%f", width), 0, 0); - - pdf__setlinewidth(p, width); -} - -/* reset all gstate parameters except CTM -*/ -void -pdf_reset_gstate(PDF *p) -{ - pdf_gstate *gs = &p->gstate[p->sl]; - - - pdf__setcolor(p, "fillstroke", "gray", - (float) 0, (float) 0, (float) 0, (float) 0); - - - pdf__setlinewidth(p, 1); - pdf__setlinecap(p, 0); - pdf__setlinejoin(p, 0); - pdf__setmiterlimit(p, 10); - pdf__setdash(p, 0, 0); - - if (gs->flatness != (float) -1) - pdf__setflat(p, (float) 1.0); -} - -void -pdf__initgraphics(PDF *p) -{ - pdc_matrix inv_ctm; - - pdf_reset_gstate(p); - - pdc_invert_matrix(p->pdc, &inv_ctm, &p->gstate[p->sl].ctm); - pdf_concat_raw(p, &inv_ctm); - - /* This also resets the CTM which guards against rounding artifacts. */ - pdf_init_gstate(p); -} - -PDFLIB_API void PDFLIB_CALL -PDF_initgraphics(PDF *p) -{ - static const char fn[] = "PDF_initgraphics"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p])\n", (void *) p)) - return; - - pdf__initgraphics(p); -} diff --git a/src/libs/pdflib/libs/pdflib/p_hkscmyk.h b/src/libs/pdflib/libs/pdflib/p_hkscmyk.h deleted file mode 100644 index b507703382..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_hkscmyk.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_hkscmyk.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib HKS spot CMYK color table - * - * HKS is a registered trademark of - * HKS (Hostmann-Steinberg, K+E, Schmincke)-Warenzeichenverband e.V. - * Germany - * - */ - -#ifndef P_HKSCMYK_H -#define P_HKSCMYK_H - - -#endif /* P_HKSCMYK_H */ - diff --git a/src/libs/pdflib/libs/pdflib/p_hkslab.h b/src/libs/pdflib/libs/pdflib/p_hkslab.h deleted file mode 100644 index 5b195be17f..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_hkslab.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_hkslab.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib HKS spot LAB color table - * - * HKS is a registered trademark of - * HKS (Hostmann-Steinberg, K+E, Schmincke)-Warenzeichenverband e.V. - * Germany - * - */ - -#ifndef P_HKSLAB_H -#define P_HKSLAB_H - - -#endif /* P_HKSTAB_H */ - diff --git a/src/libs/pdflib/libs/pdflib/p_hostfont.c b/src/libs/pdflib/libs/pdflib/p_hostfont.c deleted file mode 100644 index 840aeb42da..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_hostfont.c +++ /dev/null @@ -1,23 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_hostfont.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib host font handling routines for Windows and Mac - * - */ - -#include "p_intern.h" -#include "p_font.h" -#include "p_truetype.h" - - diff --git a/src/libs/pdflib/libs/pdflib/p_hyper.c b/src/libs/pdflib/libs/pdflib/p_hyper.c deleted file mode 100644 index f1cfb4fdbf..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_hyper.c +++ /dev/null @@ -1,1264 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_hyper.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines for hypertext stuff: bookmarks, document info, transitions - * - */ - -#define P_HYPER_C - -#include "p_intern.h" - - -/* We can't work with pointers in the outline objects because - * the complete outline block may be reallocated. Therefore we use - * this simple mechanism for achieving indirection. - */ -#define COUNT(index) (p->outlines[index].count) -#define OPEN(index) (p->outlines[index].open) -#define LAST(index) (p->outlines[index].last) -#define PARENT(index) (p->outlines[index].parent) -#define FIRST(index) (p->outlines[index].first) -#define SELF(index) (p->outlines[index].self) -#define PREV(index) (p->outlines[index].prev) -#define NEXT(index) (p->outlines[index].next) - -struct pdf_outline_s { - pdc_id self; /* id of this outline object */ - pdc_id prev; /* previous entry at this level */ - pdc_id next; /* next entry at this level */ - int parent; /* ancestor's index */ - int first; /* first sub-entry */ - int last; /* last sub-entry */ - char *text; /* bookmark text */ - int count; /* number of open sub-entries */ - int open; /* whether or not to display children */ - pdf_dest dest; /* outline destination */ -}; - -struct pdf_info_s { - char *key; /* ASCII string */ - char *value; /* Unicode string */ - pdf_info *next; /* next info entry */ -}; - -struct pdf_name_s { - pdc_id obj_id; /* id of this name object */ - char * name; /* name string */ - int len; /* length of name string */ -}; - -void -pdf_init_outlines(PDF *p) -{ - p->outline_count = 0; -} - -/* Free outline entries */ -void -pdf_cleanup_outlines(PDF *p) -{ - int i; - - if (!p->outlines || p->outline_count == 0) - return; - - /* outlines[0] is the outline root object */ - for (i = 0; i <= p->outline_count; i++) - { - if (p->outlines[i].text) - pdc_free(p->pdc, p->outlines[i].text); - pdf_cleanup_destination(p, &p->outlines[i].dest); - } - - pdc_free(p->pdc, (void*) p->outlines); - - p->outlines = NULL; -} - -static const pdc_keyconn pdf_type_keylist[] = -{ - {"fixed", fixed}, - {"fitwindow", fitwindow}, - {"fitwidth", fitwidth}, - {"fitheight", fitheight}, - {"fitrect", fitrect}, - {"fitvisible", fitvisible}, - {"fitvisiblewidth", fitvisiblewidth}, - {"fitvisibleheight",fitvisibleheight}, - {"nameddest", nameddest}, - {"file", filedest}, - {NULL, 0} -}; - -#define PDF_MAXDESTLEN 64000 - -static const pdc_defopt pdf_destination_options[] = -{ - {"fitbbox", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL}, - - {"fitheight", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL}, - - {"fitpage", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL}, - - {"fitwidth", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL}, - - {"retain", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL}, - - {"type", pdc_keywordlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, pdf_type_keylist}, - - {"name", pdc_stringlist, PDC_OPT_NONE, 1, 1, 0.0, PDF_MAXDESTLEN, NULL}, - - /* page 0 means "current page" for PDF_add_bookmark() */ - {"page", pdc_integerlist, PDC_OPT_NONE, 1, 1, 0, INT_MAX, NULL}, - - /* Acrobat 5 supports a maximum zoom of 1600%, but we allow some more */ - {"zoom", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0.0, 10000, NULL}, - - {"left", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0.0, PDF_ACRO4_MAXPAGE, NULL}, - - {"right", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0.0, PDF_ACRO4_MAXPAGE, NULL}, - - {"bottom", pdc_floatlist, PDC_OPT_REQUIRIF1, 1, 1, 0.0, PDF_ACRO4_MAXPAGE, - NULL}, - - {"top", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0.0, PDF_ACRO4_MAXPAGE, NULL}, - - {"color", pdc_floatlist, PDC_OPT_NONE, 1, 3, 0.0, 1.0, NULL}, - - {"fontstyle", pdc_keywordlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, - pdf_fontstyle_keylist}, - - {"filename", pdc_stringlist, PDC_OPT_NONE, 1, 1, 0.0, PDF_FILENAMELEN, - NULL}, - - PDC_OPT_TERMINATE -}; - -void -pdf_init_destination(PDF *p, pdf_dest *dest) -{ - (void) p; - - dest->type = fitwindow; - dest->remote = pdc_false; - dest->page = 0; - dest->left = -1; - dest->right = -1; - dest->bottom = -1; - dest->top = -1; - dest->zoom = -1; - dest->name = NULL; - dest->color[0] = (float) 0.0; - dest->color[1] = (float) 0.0; - dest->color[2] = (float) 0.0; - dest->fontstyle = pdc_Normal; - dest->filename = NULL; -} - -static void -pdf_copy_destination(PDF *p, pdf_dest *dest, pdf_dest *source) -{ - *dest = *source; - if (source->name) - dest->name = pdc_strdup(p->pdc, source->name); - if (source->filename) - dest->filename = pdc_strdup(p->pdc, source->filename); -} - -void -pdf_cleanup_destination(PDF *p, pdf_dest *dest) -{ - if (dest->name) - pdc_free(p->pdc, dest->name); - dest->name = NULL; - if (dest->filename) - pdc_free(p->pdc, dest->filename); - dest->filename = NULL; -} - -void -pdf_parse_destination_optlist( - PDF *p, - const char *optlist, - pdf_dest *dest, - int page, - pdf_destuse destuse) -{ - pdc_resopt *results; - const char *keyword; - const char *type_name; - char **name = NULL; - char **filename = NULL; - int inum, minpage; - pdc_bool boolval; - - /* Defaults */ - pdf_init_destination(p, dest); - dest->page = page; - - /* parse option list */ - results = pdc_parse_optionlist(p->pdc, optlist, pdf_destination_options, - NULL, pdc_true); - - if (pdc_get_optvalues(p->pdc, "fitbbox", results, &boolval, NULL) && - boolval == pdc_true) - dest->type = fitvisible; - - if (pdc_get_optvalues(p->pdc, "fitheight", results, &boolval, NULL) && - boolval == pdc_true) - dest->type = fitheight; - - if (pdc_get_optvalues(p->pdc, "fitpage", results, &boolval, NULL) && - boolval == pdc_true) - dest->type = fitwindow; - - if (pdc_get_optvalues(p->pdc, "fitwidth", results, &boolval, NULL) && - boolval == pdc_true) - dest->type = fitwidth; - - if (pdc_get_optvalues(p->pdc, "retain", results, &boolval, NULL) && - boolval == pdc_true) - dest->type = fixed; - - if (pdc_get_optvalues(p->pdc, "type", results, &inum, NULL)) - dest->type = (pdf_desttype) inum; - type_name = pdc_get_keyword(dest->type, pdf_type_keylist); - - keyword = "name"; - if (pdc_get_optvalues(p->pdc, keyword, results, NULL, (void **) &name) && - dest->type != nameddest) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "page"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->page, NULL) && - dest->type == filedest) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "zoom"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->zoom, NULL) && - dest->type != fixed) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "left"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->left, NULL) && - (dest->type == fitwindow || dest->type == fitwidth || - dest->type == fitvisible || dest->type == fitvisiblewidth || - dest->type == nameddest || dest->type == filedest)) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "right"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->right, NULL) && - dest->type != fitrect) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "bottom"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->bottom, NULL) && - dest->type != fitrect) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "top"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->top, NULL) && - (dest->type == fitwindow || dest->type == fitheight || - dest->type == fitvisible || dest->type == fitvisibleheight || - dest->type == nameddest || dest->type == filedest)) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - keyword = "color"; - if (pdc_get_optvalues(p->pdc, keyword, results, &dest->color, NULL) && - destuse != pdf_bookmark) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORELEM, keyword, 0, 0, 0); - - keyword = "fontstyle"; - if (pdc_get_optvalues(p->pdc, keyword, results, &inum, NULL)) - { - dest->fontstyle = (pdc_fontstyle) inum; - if (destuse != pdf_bookmark) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORELEM, keyword, 0, 0, 0); - } - - keyword = "filename"; - if (pdc_get_optvalues(p->pdc, keyword, results, NULL, (void **) &filename) - && dest->type != filedest) - pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, - 0, 0); - - pdc_cleanup_optionlist(p->pdc, results); - - switch (dest->type) - { - case fitwidth: - /* Trick: we don't know the height of a future page yet, - * so we use a "large" value for top which will do for - * most pages. If it doesn't work, not much harm is done. - */ - if (dest->top == -1) - dest->top = 10000; - break; - - case fitrect: - case fitheight: - case fitvisiblewidth: - case fitvisibleheight: - if (dest->left == -1) - dest->left = 0; - if (dest->bottom == -1) - dest->bottom = 0; - if (dest->right == -1) - dest->right = 1000; - if (dest->top == -1) - dest->top = 1000; - break; - - case nameddest: - if (destuse == pdf_nameddest) - { - pdc_cleanup_stringlist(p->pdc, name); - pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, "type", type_name, 0, 0); - } - if (name) - { - dest->name = name[0]; - pdc_free(p->pdc, name); - name = NULL; - } - else - { - pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "name", 0, 0, 0); - } - break; - - case filedest: - if (destuse != pdf_bookmark) - { - pdc_cleanup_stringlist(p->pdc, filename); - pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, "type", type_name, 0, 0); - } - if (filename) - { - dest->filename = filename[0]; - pdc_free(p->pdc, filename); - filename = NULL; - } - else - { - pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "filename", 0, 0, 0); - } - break; - - default: - break; - } - - if (name) - pdc_cleanup_stringlist(p->pdc, name); - if (filename) - pdc_cleanup_stringlist(p->pdc, filename); - - /* check for minpage */ - minpage = (destuse == pdf_bookmark) ? 0 : 1; - switch (destuse) - { - case pdf_nameddest: - case pdf_locallink: - if (dest->page == 0) - dest->page = p->current_page; - case pdf_bookmark: - case pdf_openaction: - case pdf_remotelink: - if (dest->page < minpage) - { - pdc_error(p->pdc, PDC_E_ILLARG_HANDLE, "page", - pdc_errprintf(p->pdc, "%d", dest->page), 0, 0); - } - break; - } - - /* remote flag */ - if (destuse == pdf_remotelink) - dest->remote = pdc_true; -} - -void -pdf_write_destination(PDF *p, pdf_dest *dest) -{ - if (dest->type == nameddest) { - pdc_put_pdfstring(p->out, dest->name, (int) strlen(dest->name)); - pdc_puts(p->out, "\n"); - return; - } - - pdc_puts(p->out, "["); - - if (dest->remote) { - pdc_printf(p->out, "%d", dest->page - 1); /* zero-based */ - - } else { - /* preallocate page object id for a later page */ - if (dest->page > p->current_page) { - while (dest->page >= p->pages_capacity) - pdf_grow_pages(p); - - /* if this page has already been used as a link target - * it will already have an object id. Otherwise we allocate one. - */ - if (p->pages[dest->page] == PDC_BAD_ID) - p->pages[dest->page] = pdc_alloc_id(p->out); - } - pdc_printf(p->out, "%ld 0 R", p->pages[dest->page]); - } - - switch (dest->type) { - - case fixed: - pdc_puts(p->out, "/XYZ "); - - if (dest->left != -1) - pdc_printf(p->out, "%f ", dest->left); - else - pdc_puts(p->out, "null "); - - if (dest->top != -1) - pdc_printf(p->out, "%f ", dest->top); - else - pdc_puts(p->out, "null "); - - if (dest->zoom != -1) - pdc_printf(p->out, "%f", dest->zoom); - else - pdc_puts(p->out, "null"); - - break; - - case fitwindow: - pdc_puts(p->out, "/Fit"); - break; - - case fitwidth: - pdc_printf(p->out, "/FitH %f", dest->top); - break; - - case fitheight: - pdc_printf(p->out, "/FitV %f", dest->left); - break; - - case fitrect: - pdc_printf(p->out, "/FitR %f %f %f %f", - dest->left, dest->bottom, dest->right, dest->top); - break; - - case fitvisible: - pdc_puts(p->out, "/FitB"); - break; - - case fitvisiblewidth: - pdc_printf(p->out, "/FitBH %f", dest->top); - break; - - case fitvisibleheight: - pdc_printf(p->out, "/FitBV %f", dest->left); - break; - - default: - break; - } - - pdc_puts(p->out, "]"); -} - -static void -pdf_write_outline_dict(PDF *p, int entry) -{ - pdf_dest *dest = &p->outlines[entry].dest; - - pdc_begin_obj(p->out, SELF(entry)); /* outline object */ - pdc_begin_dict(p->out); - - pdc_printf(p->out, "/Parent %ld 0 R\n", SELF(PARENT(entry))); - - /* outline destination */ - if (dest->filename == NULL) - { - pdc_puts(p->out, "/Dest"); - pdf_write_destination(p, dest); - pdc_puts(p->out, "\n"); - } - else - { - pdc_puts(p->out, "/A"); - pdc_begin_dict(p->out); /* A dict */ - pdc_puts(p->out, "/Type/Action/S/Launch\n"); - pdc_puts(p->out, "/F"); - pdc_begin_dict(p->out); /* F dict */ - pdc_puts(p->out, "/Type/Filespec\n"); - pdc_printf(p->out, "/F"); - pdc_put_pdfstring(p->out, dest->filename, - (int) strlen(dest->filename)); - pdc_puts(p->out, "\n"); - pdc_end_dict(p->out); /* F dict */ - pdc_end_dict(p->out); /* A dict */ - } - - pdc_puts(p->out, "/Title"); /* outline text */ - pdc_put_pdfunistring(p->out, p->outlines[entry].text); - pdc_puts(p->out, "\n"); - - if (PREV(entry)) - pdc_printf(p->out, "/Prev %ld 0 R\n", PREV(entry)); - if (NEXT(entry)) - pdc_printf(p->out, "/Next %ld 0 R\n", NEXT(entry)); - - if (FIRST(entry)) { - pdc_printf(p->out, "/First %ld 0 R\n", SELF(FIRST(entry))); - pdc_printf(p->out, "/Last %ld 0 R\n", SELF(LAST(entry))); - } - if (COUNT(entry)) { - if (OPEN(entry)) - pdc_printf(p->out, "/Count %d\n", COUNT(entry)); /* open */ - else - pdc_printf(p->out, "/Count %d\n", -COUNT(entry));/* closed */ - } - - /* Color */ - if (dest->color[0] != 0.0 || dest->color[1] != 0.0 || dest->color[2] != 0.0) - pdc_printf(p->out, "/C [%f %f %f]\n", - dest->color[0], dest->color[1], dest->color[2]); - - /* FontStyle */ - if (dest->fontstyle != pdc_Normal) - { - int fontstyle = 0; - if (dest->fontstyle == pdc_Bold) - fontstyle = 2; - if (dest->fontstyle == pdc_Italic) - fontstyle = 1; - if (dest->fontstyle == pdc_BoldItalic) - fontstyle = 3; - pdc_printf(p->out, "/F %d\n", fontstyle); - } - - pdc_end_dict(p->out); - pdc_end_obj(p->out); /* outline object */ -} - -void -pdf_write_outlines(PDF *p) -{ - int i; - - if (p->outline_count == 0) /* no outlines: return */ - return; - - pdc_begin_obj(p->out, p->outlines[0].self); /* root outline object */ - pdc_begin_dict(p->out); - - if (p->outlines[0].count != 0) - pdc_printf(p->out, "/Count %d\n", COUNT(0)); - pdc_printf(p->out, "/First %ld 0 R\n", SELF(FIRST(0))); - pdc_printf(p->out, "/Last %ld 0 R\n", SELF(LAST(0))); - - pdc_end_dict(p->out); - pdc_end_obj(p->out); /* root outline object */ - -#define PDF_FLUSH_AFTER_MANY_OUTLINES 1000 /* ca. 50-100 KB */ - for (i = 1; i <= p->outline_count; i++) { - /* reduce memory usage for many outline entries */ - if (i % PDF_FLUSH_AFTER_MANY_OUTLINES) - pdc_flush_stream(p->out); - - pdf_write_outline_dict(p, i); - } -} - -void -pdf_write_outline_root(PDF *p) -{ - if (p->outline_count != 0) - pdc_printf(p->out, "/Outlines %ld 0 R\n", p->outlines[0].self); -} - -static int -pdf__add_bookmark(PDF *p, const char *text, int len, int parent, int open) -{ - pdf_outline *self; /* newly created outline */ - char *outtext; - - if (parent < 0 || parent > p->outline_count) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "parent", pdc_errprintf(p->pdc, "%d", parent), 0, 0); - - /* convert text string */ - outtext = pdf_convert_hypertext(p, text, len); - if (!outtext) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "text", 0, 0, 0); - - /* create the root outline object */ - if (p->outline_count == 0) { - p->outlines = (pdf_outline *) pdc_calloc(p->pdc, - sizeof(pdf_outline) * OUTLINE_CHUNKSIZE, "PDF_add_bookmark"); - p->outline_capacity = OUTLINE_CHUNKSIZE; - - /* populate the root outline object */ - p->outlines[0].self = pdc_alloc_id(p->out); - p->outlines[0].count = 0; - p->outlines[0].parent = 0; - p->outlines[0].open = 1; - - /* set the open mode show bookmarks if we have at least one, - * and the client didn't already set his own open mode. - */ - if (p->open_mode == open_auto) - p->open_mode = open_bookmarks; - } - - /* - * It's crucial to increase p->outline_count only after - * successfully having realloc()ed. Otherwise the error handler - * may try to free too much if the realloc goes wrong. - */ - if (p->outline_count+1 >= p->outline_capacity) { /* used up all space */ - p->outlines = (pdf_outline *) pdc_realloc(p->pdc, p->outlines, - sizeof(pdf_outline) * 2 * p->outline_capacity, - "PDF_add_bookmark"); - p->outline_capacity *= 2; - } - - p->outline_count++; - - self = &p->outlines[p->outline_count]; - - self->text = outtext; - - /* If the global parameter doesn't say otherwise we link to the - * current page. - */ - pdf_copy_destination(p, &self->dest, &p->bookmark_dest); - - /* 0 is a shortcut for "current page" */ - if (self->dest.page == 0) - self->dest.page = p->current_page; - - self->self = pdc_alloc_id(p->out); - self->first = 0; - self->last = 0; - self->prev = 0; - self->next = 0; - self->count = 0; - self->open = open; - self->parent = parent; - - /* insert new outline at the end of the chain or start a new chain */ - if (FIRST(parent) == 0) { - FIRST(parent) = p->outline_count; - } else { - self->prev = SELF(LAST(parent)); - NEXT(LAST(parent))= self->self; - } - - /* insert new outline as last child of parent in all cases */ - LAST(parent) = p->outline_count; - - /* increase the number of open sub-entries for all relevant ancestors */ - do { - COUNT(parent)++; - } while (OPEN(parent) && (parent = PARENT(parent)) != 0); - - return (p->outline_count); /* caller may use this as handle */ -} - -PDFLIB_API int PDFLIB_CALL -PDF_add_bookmark(PDF *p, const char *text, int parent, int open) -{ - static const char fn[] = "PDF_add_bookmark"; - int retval = 0; - - if (pdf_enter_api(p, fn, pdf_state_page, "(p[%p], \"%s\", %d, %d)", - (void *) p, pdc_strprint(p->pdc, text, 0), parent, open)) - { - int len = text ? (int) pdc_strlen(text) : 0; - retval = pdf__add_bookmark(p, text, len, parent, open); - } - pdc_trace(p->pdc, "[%d]\n", retval); - return retval; -} - -PDFLIB_API int PDFLIB_CALL -PDF_add_bookmark2(PDF *p, const char *text, int len, int parent, int open) -{ - static const char fn[] = "PDF_add_bookmark2"; - int retval = 0; - - if (pdf_enter_api(p, fn, pdf_state_page, "(p[%p], \"%s\", %d, %d, %d)", - (void *) p, pdc_strprint(p->pdc, text, len), len, parent, open)) - { - retval = pdf__add_bookmark(p, text, len, parent, open); - } - pdc_trace(p->pdc, "[%d]\n", retval); - return retval; -} - -void -pdf_feed_digest_info(PDF *p) -{ - pdf_info *info; - - if (p->Keywords) - pdc_update_digest(p->out, - (unsigned char *) p->Keywords, strlen(p->Keywords)); - - if (p->Subject) - pdc_update_digest(p->out, - (unsigned char *) p->Subject, strlen(p->Subject)); - - if (p->Title) - pdc_update_digest(p->out, - (unsigned char *) p->Title, strlen(p->Title)); - - if (p->Creator) - pdc_update_digest(p->out, - (unsigned char *) p->Creator, strlen(p->Creator)); - - if (p->Author) - pdc_update_digest(p->out, - (unsigned char *) p->Author, strlen(p->Author)); - - if (p->userinfo) { - for (info = p->userinfo; info != NULL; info = info->next) { - pdc_update_digest(p->out, - (unsigned char *) info->key, strlen(info->key)); - } - } -} - -void -pdf_init_info(PDF *p) -{ - p->Keywords = NULL; - p->Subject = NULL; - p->Title = NULL; - p->Creator = NULL; - p->Author = NULL; - p->userinfo = NULL; - - pdc_get_timestr(p->time_str); -} - -#define PDF_TRAPPED_TRUE "\124\162\165\145" -#define PDF_TRAPPED_FALSE "\106\141\154\163\145" -#define PDF_TRAPPED_UNKNOWN "\125\156\153\156\157\167\156" - -/* Set Info dictionary entries */ -static void -pdf__set_info(PDF *p, const char *key, const char *value, int len) -{ - static const char fn[] = "pdf__set_info"; - char *key_buf, *val_buf; - pdf_info *newentry; - - if (key == NULL || !*key) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); - - if (!strcmp(key, "Producer") || !strcmp(key, "CreationDate") || - !strcmp(key, "ModDate")) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "key", key, 0, 0); - - /* convert text string */ - val_buf = pdf_convert_hypertext(p, value, len); - if (!val_buf) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "value", 0, 0, 0); - - /* key_buf will be converted in pdf_printf() */ - key_buf = pdc_strdup(p->pdc, key); - if (!strcmp(key_buf, "Keywords")) { - if (p->Keywords) - pdc_free(p->pdc, p->Keywords); - p->Keywords = val_buf; - } else if (!strcmp(key_buf, "Subject")) { - if (p->Subject) - pdc_free(p->pdc, p->Subject); - p->Subject = val_buf; - } else if (!strcmp(key_buf, "Title")) { - if (p->Title) - pdc_free(p->pdc, p->Title); - p->Title = val_buf; - } else if (!strcmp(key_buf, "Creator")) { - if (p->Creator) - pdc_free(p->pdc, p->Creator); - p->Creator = val_buf; - } else if (!strcmp(key_buf, "Author")) { - if (p->Author) - pdc_free(p->pdc, p->Author); - p->Author = val_buf; - } else { /* user-defined keyword */ - /* special handling required for "Trapped" */ - if (!strcmp(key_buf, "Trapped")) { - if (strcmp(val_buf, PDF_TRAPPED_TRUE) && - strcmp(val_buf, PDF_TRAPPED_FALSE) && - strcmp(val_buf, PDF_TRAPPED_UNKNOWN)) - { - pdc_free(p->pdc, val_buf); - pdc_free(p->pdc, key_buf); - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - } - - newentry = (pdf_info *) - pdc_malloc(p->pdc, sizeof(pdf_info), fn); - newentry->key = key_buf; - newentry->value = val_buf; - newentry->next = p->userinfo; - - /* ordering doesn't matter so we insert at the beginning */ - p->userinfo = newentry; - - return; - } - - pdc_free(p->pdc, key_buf); -} - -/* Set Info dictionary entries */ -PDFLIB_API void PDFLIB_CALL -PDF_set_info(PDF *p, const char *key, const char *value) -{ - static const char fn[] = "PDF_set_info"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page), - "\t(p[%p], \"%s\", \"%s\")\n", - (void *) p, key, pdc_strprint(p->pdc, value, 0))) - { - int len = value ? (int) pdc_strlen(value) : 0; - pdf__set_info(p, key, value, len); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_info2(PDF *p, const char *key, const char *value, int len) -{ - static const char fn[] = "PDF_set_info2"; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page), - "(p[%p], \"%s\", \"%s\", %d)\n", - (void *) p, key, pdc_strprint(p->pdc, value, len), len)) - { - pdf__set_info(p, key, value, len); - } -} - -static void -pdf_init_names(PDF *p) -{ - int i; - - p->names_number = 0; - p->names_capacity = NAMES_CHUNKSIZE; - - p->names = (pdf_name *) pdc_malloc(p->pdc, - sizeof(pdf_name) * p->names_capacity, "pdf_init_names"); - - for (i = 0; i < p->names_capacity; i++) { - p->names[i].obj_id = PDC_BAD_ID; - p->names[i].name = NULL; - p->names[i].len = 0; - } -} - -static void -pdf_grow_names(PDF *p) -{ - int i; - - p->names = (pdf_name *) pdc_realloc(p->pdc, p->names, - sizeof(pdf_name) * 2 * p->names_capacity, "pdf_grow_names"); - - for (i = p->names_capacity; i < 2 * p->names_capacity; i++) { - p->names[i].obj_id = PDC_BAD_ID; - p->names[i].name = NULL; - p->names[i].len = 0; - } - - p->names_capacity *= 2; -} - -void -pdf_cleanup_names(PDF *p) -{ - int i; - - if (p->names == NULL) - return; - - for (i = 0; i < p->names_number; i++) { - pdc_free(p->pdc, p->names[i].name); - } - - pdc_free(p->pdc, p->names); - p->names = NULL; -} - -static int -name_compare( const void* a, const void* b) -{ - pdf_name *p1 = (pdf_name *) a; - pdf_name *p2 = (pdf_name *) b; - - return strcmp(p1->name, p2->name); -} - -pdc_id -pdf_write_names(PDF *p) -{ - pdc_id ret; - int i; - - /* nothing to do */ - if (p->names_number == 0) - return PDC_BAD_ID; - - - ret = pdc_begin_obj(p->out, PDC_NEW_ID); /* Names object */ - - qsort(p->names, (size_t) p->names_number, sizeof(pdf_name), name_compare); - - pdc_begin_dict(p->out); /* Node dict */ - - /* TODO: construct a balanced tree instead of a linear list */ - pdc_puts(p->out, "/Limits["); - pdc_put_pdfstring(p->out, p->names[0].name, p->names[0].len); - pdc_put_pdfstring(p->out, p->names[p->names_number-1].name, - p->names[p->names_number-1].len); - pdc_puts(p->out, "]\n"); - - pdc_puts(p->out, "/Names["); - - for (i = 0; i < p->names_number; i++) { - pdc_put_pdfstring(p->out, p->names[i].name, p->names[i].len); - pdc_printf(p->out, "%ld 0 R\n", p->names[i].obj_id); - } - - pdc_puts(p->out, "]"); - - pdc_end_dict(p->out); /* Node dict */ - - pdc_end_obj(p->out); /* Names object */ - - return ret; -} - -PDFLIB_API void PDFLIB_CALL -PDF_add_nameddest( - PDF *p, - const char *name, - int reserved, - const char *optlist) -{ - static const char fn[] = "PDF_add_nameddest"; - pdf_dest dest; - int i; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_page | pdf_state_document), - "(p[%p], %s, %d, \"%s\")\n", - (void *) p, name, reserved, optlist)) - { - return; - } - - if (!name || !*name) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "name", 0, 0, 0); - - if (p->names == NULL) - pdf_init_names(p); - - for (i = 0; i < p->names_number; i++) { - if (!strcmp(p->names[i].name, name)) - /* silently ignore duplicate destination names */ - return; - } - - if (p->names_number == p->names_capacity) - pdf_grow_names(p); - - pdf_parse_destination_optlist(p, optlist, &dest, 0, pdf_nameddest); - - /* interrupt the content stream if we are on a page */ - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_end_contents_section(p); - /* Dest object */ - p->names[p->names_number].obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); - p->names[p->names_number].name = (char *) pdc_strdup(p->pdc, name); - p->names[p->names_number].len = (int) strlen(name); - p->names_number++; - - pdc_begin_dict(p->out); /* Destination dict */ - - pdc_puts(p->out, "/D"); - pdf_write_destination(p, &dest); - pdc_puts(p->out, "\n"); - - pdc_end_dict(p->out); /* Destination dict */ - pdc_end_obj(p->out); /* Dest object */ - - /* continue the contents stream */ - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_begin_contents_section(p); -} - - - -pdc_id -pdf_write_info(PDF *p) -{ - char producer[256]; - pdf_info *info; - pdc_id info_id; - char * product = "PDFlib Lite"; - - info_id = pdc_begin_obj(p->out, PDC_NEW_ID); /* Info object */ - - pdc_begin_dict(p->out); - - /* - * Although it would be syntactically correct, we must not remove - * the space characters after the dictionary keys since this - * would break the PDF properties feature in Windows Explorer. - */ - - if (p->Keywords) { - pdc_puts(p->out, "/Keywords "); - pdc_put_pdfunistring(p->out, p->Keywords); - pdc_puts(p->out, "\n"); - } - if (p->Subject) { - pdc_puts(p->out, "/Subject "); - pdc_put_pdfunistring(p->out, p->Subject); - pdc_puts(p->out, "\n"); - } - if (p->Title) { - pdc_puts(p->out, "/Title "); - pdc_put_pdfunistring(p->out, p->Title); - pdc_puts(p->out, "\n"); - } - if (p->Creator) { - pdc_puts(p->out, "/Creator "); - pdc_put_pdfunistring(p->out, p->Creator); - pdc_puts(p->out, "\n"); - } - if (p->Author) { - pdc_puts(p->out, "/Author "); - pdc_put_pdfunistring(p->out, p->Author); - pdc_puts(p->out, "\n"); - } - if (p->userinfo) { - for (info = p->userinfo; info != NULL; info = info->next) { - pdc_put_pdfname(p->out, info->key, strlen(info->key)); - pdc_puts(p->out, " "); - - if (strcmp(info->key, "Trapped")) { - pdc_put_pdfunistring(p->out, info->value); - } else { - /* "Trapped" value is already encoded in PDFDocEncoding */ - pdc_put_pdfname(p->out, info->value, strlen(info->value)); - } - - pdc_puts(p->out, "\n"); - } - } - - pdc_puts(p->out, "/CreationDate "); - pdc_put_pdfstring(p->out, p->time_str, (int) strlen(p->time_str)); - pdc_puts(p->out, "\n"); - - - /* - * If you change the /Producer entry your license to use - * PDFlib will be void! - */ - - if (p->binding) - sprintf(producer, "%s %s (%s/%s)", product, - PDFLIB_VERSIONSTRING, p->binding, PDF_PLATFORM); - else - sprintf(producer, "%s %s (%s)", product, - PDFLIB_VERSIONSTRING, PDF_PLATFORM); - - pdc_puts(p->out, "/Producer "); - pdc_put_pdfstring(p->out, producer, (int) strlen(producer)); - pdc_puts(p->out, "\n"); - - pdc_end_dict(p->out); - pdc_end_obj(p->out); /* Info object */ - - return info_id; -} - -void -pdf_cleanup_info(PDF *p) -{ - pdf_info *info, *last; - - /* Free Info dictionary entries */ - if (p->Keywords) { - pdc_free(p->pdc, p->Keywords); - p->Keywords = NULL; - } - if (p->Subject) { - pdc_free(p->pdc, p->Subject); - p->Subject = NULL; - } - if (p->Title) { - pdc_free(p->pdc, p->Title); - p->Title = NULL; - } - if (p->Creator) { - pdc_free(p->pdc, p->Creator); - p->Creator = NULL; - } - if (p->Author) { - pdc_free(p->pdc, p->Author); - p->Author = NULL; - } - if (p->userinfo) { - for (info = p->userinfo; info != NULL; /* */) { - last = info; - info = info->next; - - pdc_free(p->pdc, last->key); - pdc_free(p->pdc, last->value); - pdc_free(p->pdc, last); - } - p->userinfo = NULL; - } -} - -/* Page transition effects */ - -static const pdc_keyconn pdf_transition_keylist[] = -{ - {"none", trans_none}, - {"split", trans_split}, - {"blinds", trans_blinds}, - {"box", trans_box}, - {"wipe", trans_wipe}, - {"dissolve", trans_dissolve}, - {"glitter", trans_glitter}, - {"replace", trans_replace}, - {NULL, 0} -}; - -static const pdc_keyconn pdf_transition_pdfkeylist[] = -{ - {"", trans_none}, - {"Split", trans_split}, - {"Blinds", trans_blinds}, - {"Box", trans_box}, - {"Wipe", trans_wipe}, - {"Dissolve", trans_dissolve}, - {"Glitter", trans_glitter}, - {"R", trans_replace}, - {NULL, 0} -}; - -void -pdf_init_transition(PDF *p) -{ - p->transition = trans_none; - p->duration = 0; -} - -/* set page display duration for current and future pages */ -void -pdf_set_duration(PDF *p, float t) -{ - p->duration = t; -} - -void -pdf_write_page_transition(PDF *p) -{ - if (p->transition != trans_none) { - pdc_puts(p->out, "/Trans"); - pdc_begin_dict(p->out); - pdc_printf(p->out, "/S/%s", - pdc_get_keyword(p->transition, pdf_transition_pdfkeylist)); - - pdc_end_dict(p->out); - } -} - -/* set transition mode for current and future pages */ - -void -pdf_set_transition(PDF *p, const char *type) -{ - if (type == NULL || !*type) - type = "none"; - p->transition = - (pdf_transition) pdc_get_keycode(type, pdf_transition_keylist); - if (p->transition == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, type, "transition", 0, 0); -} - -char * -pdf_convert_hypertext(PDF *p, const char *text, int len) -{ - pdc_encoding enc; - pdc_encodingvector *ev = NULL; - pdc_encodingvector *ev_pdfdoc = NULL; - pdc_byte *outtext = NULL; - pdc_text_format textformat = pdc_utf16be; - int outlen; - - if (text && len == 0) - len = (int) strlen(text); - if (text == NULL || len <= 0) - return NULL; - - /* encoding struct available */ - if (p->encodings) - { - /* User encoding */ - enc = p->hypertextencoding; - if (enc == pdc_invalidenc) - enc = pdf_find_encoding(p, "auto"); - if (enc == pdc_invalidenc) - enc = pdf_insert_encoding(p, "auto"); - if (enc >= 0) - ev = p->encodings[enc].ev; - - /* PDFDocEncoding */ - ev_pdfdoc = p->encodings[pdc_pdfdoc].ev; - if (ev_pdfdoc == NULL) - { - pdf_find_encoding(p, "pdfdoc"); - ev_pdfdoc = p->encodings[pdc_pdfdoc].ev; - } - } - - /* Convert hypertext string */ - pdc_convert_string(p->pdc, p->hypertextformat, ev, (pdc_byte *)text, len, - &textformat, ev_pdfdoc, &outtext, &outlen, - PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES, pdc_true); - - return (char *) outtext; -} diff --git a/src/libs/pdflib/libs/pdflib/p_icc.c b/src/libs/pdflib/libs/pdflib/p_icc.c deleted file mode 100644 index ca6217df81..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_icc.c +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_icc.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib ICC handling routines - * - * This software is based in part on the work of Graeme W. Gill - * - */ - -#include "p_intern.h" - -#if defined(WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#endif - - -PDFLIB_API int PDFLIB_CALL -PDF_load_iccprofile(PDF *p, const char *profilename, int reserved, - const char *optlist) -{ - static const char fn[] = "PDF_load_iccprofile"; - int slot = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content), - "(p[%p], \"%s\", %d, \"%s\")", - (void *) p, profilename, reserved, optlist)) - { - PDF_RETURN_HANDLE(p, slot) - } - - pdc_warning(p->pdc, PDF_E_UNSUPP_ICC, 0, 0, 0, 0); - - PDF_RETURN_HANDLE(p, slot) -} - diff --git a/src/libs/pdflib/libs/pdflib/p_icc.h b/src/libs/pdflib/libs/pdflib/p_icc.h deleted file mode 100644 index cfa12219f3..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_icc.h +++ /dev/null @@ -1,24 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_icc.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib ICC typedefs, structures, and enums - * - */ - -#ifndef P_ICC_H -#define P_ICC_H - - -#endif /* P_ICC_H */ - diff --git a/src/libs/pdflib/libs/pdflib/p_icc9809.h b/src/libs/pdflib/libs/pdflib/p_icc9809.h deleted file mode 100644 index 189d207a45..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_icc9809.h +++ /dev/null @@ -1,38 +0,0 @@ -/* $Id: p_icc9809.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file of ICC (name see note above) for ICClib and PDFlib - * - */ - -/* - * Note: Modified for use by icclib V2.00: - * - * Changed guard bands from ICC_H to ICC9809_H - * - * Replace tag last values 0xFFFFFFFFL with define icMaxTagVal, - * and define this to be -1, for better compiler compatibility. - * - * Add section to use machine specific INR & ORD to define - * the sizes of ic Numbers, if ORD is defined. - * - * Adding colorspaces 'MCH5-8' for Hexachrome and others. (Colorsync ?) - * Added the Positive/Negative and Color/BlackAndWhite Attribute bits - * - * I believe icMeasurementFlare as an enumeration is bogus in - * this file. It is meant to be a u16.16 number. - * - * Add Chromaticity Tag and Type from ICC.1A:1999-04, - * but there is no formal "icc.h" from the ICC that indicates - * what the names should be. - * - * Added Colorsync 2.5 specific VideoCardGamma defines. - * - * Graeme Gill. - */ - -/* Header file guard bands */ -#ifndef P_ICC9809_H -#define P_ICC9809_H - - -#endif /* P_ICC9809_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_icclib.c b/src/libs/pdflib/libs/pdflib/p_icclib.c deleted file mode 100644 index ca8c7cb268..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_icclib.c +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id: p_icclib.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * ICClib routines for PDFlib, slightly modified from the original ICClib. - * (see below). - * - */ - -/* - * International Color Consortium Format Library (icclib) - * For ICC profile version 3.4 - * - * Author: Graeme W. Gill - * Date: 2002/04/22 - * Version: 2.02 - * - * Copyright 1997 - 2002 Graeme W. Gill - * See Licence.txt file for conditions of use. - */ - -#include -#include -#include -#include -#include -#include -#include -#ifdef __sun -#include -#endif -#if defined(__IBMC__) && defined(_M_IX86) -#include -#endif - -/* PDFlib */ -#include "pc_core.h" diff --git a/src/libs/pdflib/libs/pdflib/p_icclib.h b/src/libs/pdflib/libs/pdflib/p_icclib.h deleted file mode 100644 index 9b6dbc179e..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_icclib.h +++ /dev/null @@ -1,19 +0,0 @@ -/* $Id: p_icclib.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * ICClib Header file icc.h for PDFlib - * - * $Log: p_icclib.h,v $ - * Revision 1.1 2004/10/06 17:46:49 laplace - * Added PDFlib lite 5.0.3 which is required to build the PDF printer driver. - * - * Revision 1.10 2003/03/03 12:46:43 tm - * Changed the licensing comment. - * - */ - -#ifndef P_ICCLIB_H -#define P_ICCLIB_H - - -#endif /* P_ICCLIB_H */ - diff --git a/src/libs/pdflib/libs/pdflib/p_image.c b/src/libs/pdflib/libs/pdflib/p_image.c deleted file mode 100644 index 11c58f0c64..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_image.c +++ /dev/null @@ -1,1762 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_image.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib image routines - * - */ - -#define P_IMAGE_C - -#include "p_intern.h" -#include "p_image.h" -#include "p_font.h" - -/* must be kept in sync with the pdf_compression enum in p_intern.h */ -static const char *pdf_filter_names[] = { - "", "LZWDecode", "RunLengthDecode", "CCITTFaxDecode", - "DCTDecode", "FlateDecode", "JBIG2Decode" -}; - -static const char *pdf_short_filter_names[] = { - "", "LZW", "RL", "CCF", "DCT", "Fl", "" -}; - -static void -pdf_init_image_struct(PDF *p, pdf_image *image) -{ - (void) p; - - /********** option variables *************/ - image->verbose = pdc_true; - image->bitreverse = pdc_false; - image->bpc = pdc_undef; - image->components = pdc_undef; - image->height_pixel = pdc_undef; - image->ignoremask = pdc_false; - image->doinline = pdc_false; - image->interpolate = pdc_false; - image->invert = pdc_false; - image->K = 0; - image->imagemask = pdc_false; - image->mask = pdc_undef; - image->ri = AutoIntent; - image->page = 1; - image->reference = pdf_ref_direct; - image->width_pixel = pdc_undef; - /*****************************************/ - - image->transparent = pdc_false; - image->compression = none; - image->predictor = pred_default; - image->in_use = pdc_false; - image->fp = (pdc_file *) NULL; - image->filename = (char *) NULL; - image->params = (char *) NULL; - image->dpi_x = (float) 0; - image->dpi_y = (float) 0; - image->strips = 1; - image->rowsperstrip = 1; - image->colorspace = pdc_undef; - image->dochandle = pdc_undef; /* this means "not a PDI page" */ - image->use_raw = pdc_false; - image->transval[0] = 0; - image->transval[1] = 0; - image->transval[2] = 0; - image->transval[3] = 0; -} - -void -pdf_init_images(PDF *p) -{ - int im; - - p->images_capacity = IMAGES_CHUNKSIZE; - - p->images = (pdf_image *) - pdc_malloc(p->pdc, - sizeof(pdf_image) * p->images_capacity, "pdf_init_images"); - - for (im = 0; im < p->images_capacity; im++) - pdf_init_image_struct(p, &(p->images[im])); -} - -void -pdf_grow_images(PDF *p) -{ - int im; - - p->images = (pdf_image *) pdc_realloc(p->pdc, p->images, - sizeof(pdf_image) * 2 * p->images_capacity, "pdf_grow_images"); - - for (im = p->images_capacity; im < 2 * p->images_capacity; im++) - pdf_init_image_struct(p, &(p->images[im])); - - p->images_capacity *= 2; -} - -void -pdf_cleanup_image(PDF *p, int im) -{ - /* clean up parameter string if necessary */ - if (p->images[im].params) { - pdc_free(p->pdc, p->images[im].params); - p->images[im].params = NULL; - } - - if (p->images[im].filename) { - pdc_free(p->pdc, p->images[im].filename); - p->images[im].filename = NULL; - } - - if (p->images[im].fp) { - pdc_fclose(p->images[im].fp); - p->images[im].fp = NULL; - } - - /* free the image slot and prepare for next use */ - pdf_init_image_struct(p, &(p->images[im])); -} - -void -pdf_cleanup_images(PDF *p) -{ - int im; - - if (!p->images) - return; - - /* Free images which the caller left open */ - - /* When we think of inter-document survival of images, - ** we MUST NOT FORGET that the current TIFF algorithm - ** depends on contiguous image slots for the image strips! - */ - for (im = 0; im < p->images_capacity; im++) - { - pdf_image *img = &p->images[im]; - - if (img->in_use) /* found used slot */ - pdf_cleanup_image(p, im); /* free image descriptor */ - } - - pdc_free(p->pdc, p->images); - p->images = NULL; -} - -void -pdf_init_xobjects(PDF *p) -{ - int idx; - - p->xobjects_number = 0; - - if (p->xobjects == (pdf_xobject *) 0) - { - p->xobjects_capacity = XOBJECTS_CHUNKSIZE; - - p->xobjects = (pdf_xobject *) - pdc_malloc(p->pdc, sizeof(pdf_xobject) * p->xobjects_capacity, - "pdf_init_xobjects"); - } - - for (idx = 0; idx < p->xobjects_capacity; idx++) - p->xobjects[idx].flags = 0; -} - -int -pdf_new_xobject(PDF *p, pdf_xobj_type type, pdc_id obj_id) -{ - static const char fn[] = "pdf_new_xobject"; - int i, slot = p->xobjects_number++; - - if (slot == p->xobjects_capacity) - { - p->xobjects = (pdf_xobject *) pdc_realloc(p->pdc, p->xobjects, - sizeof(pdf_xobject) * 2 * p->xobjects_capacity, fn); - - for (i = p->xobjects_capacity; i < 2 * p->xobjects_capacity; i++) - p->xobjects[i].flags = 0; - - p->xobjects_capacity *= 2; - } - - if (obj_id == PDC_NEW_ID) - obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); - - p->xobjects[slot].obj_id = obj_id; - p->xobjects[slot].type = type; - p->xobjects[slot].flags = xobj_flag_used; - - return slot; -} - -void -pdf_write_xobjects(PDF *p) -{ - if (p->xobjects_number > 0) - { - pdc_bool hit = pdc_false; - int i; - - for (i = 0; i < p->xobjects_capacity; ++i) - { - if (p->xobjects[i].flags & xobj_flag_write) - { - if (!hit) - { - pdc_puts(p->out, "/XObject"); - pdc_begin_dict(p->out); - hit = pdc_true; - } - - pdc_printf(p->out, "/I%d %ld 0 R\n", i, p->xobjects[i].obj_id); - p->xobjects[i].flags &= ~xobj_flag_write; - } - } - - if (hit) - pdc_end_dict(p->out); - } -} - -void -pdf_cleanup_xobjects(PDF *p) -{ - if (p->xobjects) { - pdc_free(p->pdc, p->xobjects); - p->xobjects = NULL; - } -} - -void -pdf_put_inline_image(PDF *p, int im) -{ - pdf_image *image; - pdc_matrix m; - PDF_data_source *src; - int i; - - image = &p->images[im]; - - /* Image object */ - - image->no = -1; - - pdf__save(p); - - pdc_scale_matrix(image->width, image->height, &m); - - pdf_concat_raw(p, &m); - - pdc_puts(p->out, "BI"); - - pdc_printf(p->out, "/W %d", (int) image->width); - pdc_printf(p->out, "/H %d", (int) image->height); - - if (image->imagemask == pdc_true) { - pdc_puts(p->out, "/IM true"); - - } else { - - pdc_printf(p->out, "/BPC %d", image->bpc); - - switch (p->colorspaces[image->colorspace].type) { - case DeviceGray: - pdc_printf(p->out, "/CS/G"); - break; - - case DeviceRGB: - pdc_printf(p->out, "/CS/RGB"); - break; - - case DeviceCMYK: - pdc_printf(p->out, "/CS/CMYK"); - break; - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", image->colorspace), 0, 0, 0); - break; - } - } - - if (image->compression != none) { - pdc_printf(p->out, "/F/%s", - pdf_short_filter_names[image->compression]); - } - - /* prepare precompressed (raw) image data */ - if (image->use_raw && - (image->params || - image->predictor != pred_default || - image->compression == ccitt)) { - - pdc_printf(p->out, "/DP[<<"); - - /* write EarlyChange */ - if (image->params) - pdc_puts(p->out, image->params); - - if (image->compression == ccitt) { - if (image->K != 0) - pdc_printf(p->out, "/K %d", image->K); - } - - if (image->compression == flate || image->compression == lzw) { - if (image->predictor != pred_default) { - pdc_printf(p->out, "/Predictor %d", (int) image->predictor); - pdc_printf(p->out, "/Columns %d", (int) image->width); - if (image->bpc != 8) - pdc_printf(p->out, "/BitsPerComponent %d", image->bpc); - - if (image->components != 1) /* 1 is default */ - pdc_printf(p->out, "/Colors %d", image->components); - } - } - - if (image->compression == ccitt) { - if ((int) image->width != 1728) /* CCITT default width */ - pdc_printf(p->out, "/Columns %d", (int) image->width); - - pdc_printf(p->out, "/Rows %d", (int) fabs(image->height)); - } - pdc_puts(p->out, ">>]"); /* DecodeParms dict and array */ - } - - if (image->invert) { - pdc_puts(p->out, "/D[1 0"); - for (i = 1; i < image->components; i++) - pdc_puts(p->out, " 1 0"); - pdc_puts(p->out, "]"); - } - - if (image->ri != AutoIntent) { - pdc_printf(p->out, "/Intent/%s", - pdc_get_keyword(image->ri, gs_renderingintents)); - } - - if (image->interpolate) { - pdc_puts(p->out, "/I true"); - } - - pdc_puts(p->out, " ID\n"); - - /* Write the actual image data to the content stream */ - - src = &image->src; - - /* We can't use pdf_copy_stream() here because it automatically - * generates a stream object, which is not correct for inline - * image data. - */ - if (src->init) - src->init(p, src); - - while (src->fill(p, src)) - pdc_write(p->out, src->next_byte, src->bytes_available); - - if (src->terminate) - src->terminate(p, src); - - pdc_puts(p->out, "EI\n"); - - pdf__restore(p); - - /* Do the equivalent of PDF_close_image() since the image handle - * cannot be re-used anyway. - */ - pdf_cleanup_image(p, im); -} - -void -pdf_put_image(PDF *p, int im, pdc_bool firststrip) -{ - pdc_id length_id; - pdf_image *image; - int i; - - image = &p->images[im]; - - /* Images may also be written to the output before the first page */ - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_end_contents_section(p); - - /* Image object */ - - image->no = pdf_new_xobject(p, image_xobject, PDC_NEW_ID); - - pdc_begin_dict(p->out); /* XObject */ - - pdc_puts(p->out, "/Subtype/Image\n"); - - pdc_printf(p->out, "/Width %d\n", (int) image->width); - pdc_printf(p->out, "/Height %d\n", (int) fabs(image->height)); - - /* - * Transparency handling - */ - - /* Masking by color: single transparent color value */ - if (image->transparent) { - pdf_colorspace *cs = &p->colorspaces[image->colorspace]; - - switch (cs->type) { - case Indexed: - case DeviceGray: - pdc_printf(p->out,"/Mask[%d %d]\n", - (int) image->transval[0], (int) image->transval[0]); - break; - - - case DeviceRGB: - pdc_printf(p->out,"/Mask[%d %d %d %d %d %d]\n", - (int) image->transval[0], (int) image->transval[0], - (int) image->transval[1], (int) image->transval[1], - (int) image->transval[2], (int) image->transval[2]); - break; - - case DeviceCMYK: - pdc_printf(p->out,"/Mask[%d %d %d %d %d %d %d %d]\n", - (int) image->transval[0], (int) image->transval[0], - (int) image->transval[1], (int) image->transval[1], - (int) image->transval[2], (int) image->transval[2], - (int) image->transval[3], (int) image->transval[3]); - break; - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", - (int) p->colorspaces[image->colorspace].type), 0, 0, 0); - } - - /* Masking by position: separate bitmap mask */ - } else if (image->mask != pdc_undef && p->images[image->mask].bpc > 1) { - pdc_printf(p->out, "/SMask %ld 0 R\n", - p->xobjects[p->images[image->mask].no].obj_id); - - } else if (image->mask != pdc_undef) { - pdc_printf(p->out, "/Mask %ld 0 R\n", - p->xobjects[p->images[image->mask].no].obj_id); - } - - /* - * /BitsPerComponent is optional for image masks according to the - * PDF reference, but some viewers require it nevertheless. - * We must therefore always write it. - */ - pdc_printf(p->out, "/BitsPerComponent %d\n", image->bpc); - - if (image->imagemask) { - pdc_puts(p->out, "/ImageMask true\n"); - - } else { - - switch (p->colorspaces[image->colorspace].type) { - case DeviceGray: - break; - - case DeviceRGB: - break; - - case DeviceCMYK: - break; - - case Indexed: - break; - - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", image->colorspace), 0, 0, 0); - } - - pdc_puts(p->out, "/ColorSpace"); - pdf_write_colorspace(p, image->colorspace, pdc_false); - pdc_puts(p->out, "\n"); - } - - if (image->invert) { - pdc_puts(p->out, "/Decode[1 0"); - for (i = 1; i < image->components; i++) - pdc_puts(p->out, " 1 0"); - pdc_puts(p->out, "]\n"); - } - - if (image->ri != AutoIntent) { - pdc_printf(p->out, "/Intent/%s\n", - pdc_get_keyword(image->ri, gs_renderingintents)); - } - - if (image->interpolate) { - pdc_puts(p->out, "/Interpolate true\n"); - } - - /* special case: referenced image data instead of direct data */ - if (image->reference != pdf_ref_direct) { - - if (image->compression != none) { - pdc_printf(p->out, "/FFilter[/%s]\n", - pdf_filter_names[image->compression]); - } - - if (image->compression == ccitt) { - pdc_puts(p->out, "/FDecodeParms[<<"); - - if ((int) image->width != 1728) /* CCITT default width */ - pdc_printf(p->out, "/Columns %d", (int) image->width); - - pdc_printf(p->out, "/Rows %d", (int) fabs(image->height)); - - if (image->K != 0) - pdc_printf(p->out, "/K %d", image->K); - - pdc_puts(p->out, ">>]\n"); - - } - - if (image->reference == pdf_ref_file) { - - /* LATER: make image file name platform-neutral: - * Change : to / on the Mac - * Change \ to / on Windows - */ - pdc_puts(p->out, "/F"); - pdc_put_pdfstring(p->out, image->filename, - (int) strlen(image->filename)); - pdc_puts(p->out, "/Length 0"); - - } else if (image->reference == pdf_ref_url) { - - pdc_puts(p->out, "/F<out, image->filename, - (int) strlen(image->filename)); - pdc_puts(p->out, ">>/Length 0"); - } - - pdc_end_dict(p->out); /* XObject */ - - /* We must avoid pdc_begin/end_pdfstream() here in order to - * generate a really empty stream. - */ - pdc_puts(p->out, "stream\n"); /* dummy image stream */ - pdc_puts(p->out, "endstream\n"); - - pdc_end_obj(p->out); /* XObject */ - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_begin_contents_section(p); - - return; - } - - /* - * Now the (more common) handling of actual image - * data to be included in the PDF output. - */ - /* do we need a filter (either ASCII or decompression)? */ - - if (p->debug['a']) { - pdc_puts(p->out, "/Filter[/ASCIIHexDecode"); - if (image->compression != none) - pdc_printf(p->out, "/%s", pdf_filter_names[image->compression]); - pdc_puts(p->out, "]\n"); - - } else { - /* force compression if not a recognized precompressed image format */ - if (!image->use_raw && pdc_get_compresslevel(p->out)) - image->compression = flate; - - if (image->compression != none) - pdc_printf(p->out, "/Filter/%s\n", - pdf_filter_names[image->compression]); - } - - /* prepare precompressed (raw) image data; avoid empty DecodeParms */ - if (image->use_raw && - (image->params || - image->predictor != pred_default || - image->compression == ccitt)) { - - if (p->debug['a']) - pdc_printf(p->out, "/DecodeParms[%s<<", "null"); - else - pdc_printf(p->out, "/DecodeParms<<"); - - /* write EarlyChange */ - if (image->params) - pdc_puts(p->out, image->params); - - if (image->compression == ccitt) { - if (image->K != 0) - pdc_printf(p->out, "/K %d", image->K); - } - - if (image->compression == flate || image->compression == lzw) { - if (image->predictor != pred_default) { - pdc_printf(p->out, "/Predictor %d", (int) image->predictor); - pdc_printf(p->out, "/Columns %d", (int) image->width); - if (image->bpc != 8) - pdc_printf(p->out, "/BitsPerComponent %d", image->bpc); - - if (image->components != 1) /* 1 is default */ - pdc_printf(p->out, "/Colors %d", image->components); - } - } - - if (image->compression == ccitt) { - if ((int) image->width != 1728) /* CCITT default width */ - pdc_printf(p->out, "/Columns %d", (int) image->width); - - pdc_printf(p->out, "/Rows %d", (int) fabs(image->height)); - } - - if (p->debug['a']) - pdc_puts(p->out, ">>]\n"); /* DecodeParms dict and array */ - else - pdc_puts(p->out, ">>\n"); /* DecodeParms dict */ - } - - /* Write the actual image data */ - length_id = pdc_alloc_id(p->out); - - pdc_printf(p->out,"/Length %ld 0 R\n", length_id); - pdc_end_dict(p->out); /* XObject */ - - /* image data */ - - if (p->debug['a']) - pdf_ASCIIHexEncode(p, &image->src); - else { - pdf_copy_stream(p, &image->src, !image->use_raw); /* image data */ - } - - pdc_end_obj(p->out); /* XObject */ - - pdc_put_pdfstreamlength(p->out, length_id); - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); - - /* - * Write colormap information for indexed color spaces - */ - if (firststrip && p->colorspaces[image->colorspace].type == Indexed) { - pdf_write_colormap(p, image->colorspace); - } - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_begin_contents_section(p); - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); -} - -void -pdf__fit_image(PDF *p, int im, float x, float y, const char *optlist) -{ - pdf_image *image; - int legal_states; - - pdf_check_handle(p, im, pdc_imagehandle); - - image = &p->images[im]; - - if (PDF_GET_STATE(p) == pdf_state_glyph && !pdf_get_t3colorized(p) && - image->imagemask == pdc_false) - legal_states = pdf_state_page | pdf_state_pattern | pdf_state_template; - else - legal_states = pdf_state_content; - PDF_CHECK_STATE(p, legal_states); - - if (PDF_GET_STATE(p) == pdf_state_template && im == p->templ) - pdc_error(p->pdc, PDF_E_TEMPLATE_SELF, - pdc_errprintf(p->pdc, "%d", im), 0, 0, 0); - - pdf_place_xobject(p, im, x, y, optlist); -} - -PDFLIB_API void PDFLIB_CALL -PDF_fit_image(PDF *p, int image, float x, float y, const char *optlist) -{ - static const char fn[] = "PDF_fit_image"; - - /* precise scope diagnosis in pdf__fit_image */ - if (pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], %d, %g, %g, \"%s\")\n", (void *) p, image, x, y, optlist)) - { - PDF_INPUT_HANDLE(p, image) - pdf__fit_image(p, image, x, y, optlist); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_place_image(PDF *p, int image, float x, float y, float scale) -{ - static const char fn[] = "PDF_place_image"; - - /* precise scope diagnosis in pdf__fit_image */ - if (pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], %d, %g, %g, %g)\n", (void *) p, image, x, y, scale)) - { - char optlist[32]; - sprintf(optlist, "dpi none scale %g", scale); - PDF_INPUT_HANDLE(p, image) - pdf__fit_image(p, image, x, y, optlist); - } -} - -/* definitions of place image options */ -static const pdc_defopt pdf_place_xobject_options[] = -{ - {"dpi", pdc_floatlist, 0, 1, 2, 0.0, INT_MAX, pdf_dpi_keylist}, - - {"scale", pdc_floatlist, PDC_OPT_NOZERO, 1, 2, PDC_FLOAT_MIN, PDC_FLOAT_MAX, - NULL}, - - {"orientate", pdc_keywordlist, 0, 1, 1, 0.0, 0.0, pdf_orientate_keylist}, - - {"boxsize", pdc_floatlist, 0, 2, 2, PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"rotate", pdc_floatlist, 0, 1, 1, PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"position", pdc_floatlist, 0, 1, 2, PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"fitmethod", pdc_keywordlist, 0, 1, 1, 0.0, 0.0, pdf_fitmethod_keylist}, - - {"distortionlimit", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0.0, 100.0, NULL}, - - {"adjustpage", pdc_booleanlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 0.0, NULL}, - - {"blind", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - PDC_OPT_TERMINATE -}; - -void -pdf_place_xobject(PDF *p, int im, float x, float y, const char *optlist) -{ - pdf_image *image; - pdc_resopt *results; - pdc_clientdata data; - pdc_matrix m; - pdc_fitmethod method; - pdc_vector imgscale, elemsize, elemscale, relpos, polyline[5]; - pdc_box fitbox, elembox; - pdc_scalar ss, scaley, rowsize = 1, lastratio = 1, minfscale; - pdc_bool adjustpage, hasresol; - pdc_bool blindmode; - pdc_bool negdir = pdc_false; - float dpi[2], scale[2], boxsize[2], position[2], angle, distortionlimit; - float dpi_x, dpi_y, tx = 0, ty = 0; - int orientangle, indangle; - int inum, num, is, ip, islast; - int imageno; - - image = &p->images[im]; - - /* has resolution (image_xobject) */ - hasresol = p->xobjects[image->no].type == image_xobject ? - pdc_true : pdc_false; - - /* defaults */ - orientangle = 0; - dpi[0] = dpi[1] = (float) 0.0; - scale[0] = scale[1] = (float) 1.0; - boxsize[0] = boxsize[1] = (float) 0.0; - position[0] = position[1] = (float) 0.0; - angle = (float) 0.0; - method = pdc_nofit; - distortionlimit = (float) 75.0; - adjustpage = pdc_false; - blindmode = pdc_false; - - /* parsing optlist */ - if (optlist && strlen(optlist)) - { - data.compatibility = p->compatibility; - results = pdc_parse_optionlist(p->pdc, optlist, - pdf_place_xobject_options, - &data, pdc_true); - - /* save and check options */ - if (hasresol) - dpi[0] = (float) dpi_internal; - if ((num = pdc_get_optvalues(p->pdc, "dpi", results, dpi, NULL)) > 0) - { - if (!hasresol && dpi[0] != (float) dpi_none) - pdc_warning(p->pdc, PDC_E_OPT_IGNORED, "dpi", 0, 0, 0); - else if (num == 1) - dpi[1] = dpi[0]; - } - - if (1 == pdc_get_optvalues(p->pdc, "scale", results, scale, NULL)) - scale[1] = scale[0]; - - pdc_get_optvalues(p->pdc, "orientate", results, &orientangle, NULL); - - pdc_get_optvalues(p->pdc, "boxsize", results, boxsize, NULL); - - pdc_get_optvalues(p->pdc, "rotate", results, &angle, NULL); - - if (1 == pdc_get_optvalues(p->pdc, "position", results, position, NULL)) - position[1] = position[0]; - - if (pdc_get_optvalues(p->pdc, "fitmethod", results, &inum, NULL)) - method = (pdc_fitmethod) inum; - - pdc_get_optvalues(p->pdc, "distortionlimit", results, - &distortionlimit, NULL); - - pdc_get_optvalues(p->pdc, "adjustpage", results, &adjustpage, NULL); - pdc_get_optvalues(p->pdc, "blind", results, &blindmode, NULL); - - pdc_cleanup_optionlist(p->pdc, results); - } - - /* calculation of image scale and size */ - imgscale.x = scale[0]; - imgscale.y = scale[1]; - if (hasresol) - { - if (dpi[0] == (float) dpi_internal) - { - dpi_x = image->dpi_x; - dpi_y = image->dpi_y; - if (dpi_x > 0 && dpi_y > 0) - { - imgscale.x *= 72.0 / dpi_x; - imgscale.y *= 72.0 / dpi_y; - } - else if (dpi_x < 0 && dpi_y < 0) - { - imgscale.y *= dpi_y / dpi_x; - } - } - else if (dpi[0] > 0) - { - imgscale.x *= 72.0 / dpi[0]; - imgscale.y *= 72.0 / dpi[1]; - } - rowsize = imgscale.y * image->rowsperstrip; - imgscale.x *= image->width; - imgscale.y *= image->height; - lastratio = (imgscale.y / rowsize) - (image->strips - 1); - elemsize.x = imgscale.x; - elemsize.y = imgscale.y; - } - else - { - elemsize.x = imgscale.x * image->width; - elemsize.y = imgscale.y * image->height; - } - - /* negative direction (e.g. BMP images) */ - if (image->height < 0) - { - elemsize.y = -elemsize.y; - negdir = pdc_true; - } - - /* minimal horizontal scaling factor */ - minfscale = distortionlimit / 100.0; - - /* orientation */ - indangle = orientangle / 90; - if (indangle % 2) - { - ss = elemsize.x; - elemsize.x = elemsize.y; - elemsize.y = ss; - } - - /* box for fitting */ - fitbox.ll.x = 0; - fitbox.ll.y = 0; - fitbox.ur.x = boxsize[0]; - fitbox.ur.y = boxsize[1]; - - /* relative position */ - relpos.x = position[0] / 100.0; - relpos.y = position[1] / 100.0; - - /* calculate image box */ - pdc_place_element(method, minfscale, &fitbox, &relpos, - &elemsize, &elembox, &elemscale); - - /* adjust page size */ - if (adjustpage && PDF_GET_STATE(p) == pdf_state_page) - { - float urx, ury, height; - - urx = (float) (2 * x + elembox.ur.x); - ury = (float) (2 * y + elembox.ur.y); - pdc_transform_point(&p->gstate[p->sl].ctm, - urx, ury, &p->width, &height); - p->height = (p->ydirection > 0) ? - height : p->height - p->ydirection * height; - if (p->height < p->ydirection * height / 2.0) - pdc_error(p->pdc, PDF_E_IMAGE_NOADJUST, 0, 0, 0, 0); - - p->CropBox.llx = 0.0f; - p->CropBox.lly = 0.0f; - p->CropBox.urx = p->width; - p->CropBox.ury = p->height; - - if ((p->width < PDF_ACRO4_MINPAGE || p->width > PDF_ACRO4_MAXPAGE || - p->height < PDF_ACRO4_MINPAGE || p->height > PDF_ACRO4_MAXPAGE)) - pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO4, 0, 0, 0, 0); - } - - if (!blindmode) - { - pdf_end_text(p); - pdf_begin_contents_section(p); - - pdf__save(p); - } - - /* reference point */ - pdc_translation_matrix(x, y, &m); - pdf_concat_raw_ob(p, &m, blindmode); - - /* clipping */ - if (!blindmode && (method == pdc_clip || method == pdc_slice)) - { - pdf__rect(p, 0, 0, boxsize[0], boxsize[1]); - pdf__clip(p); - } - - /* optional rotation */ - if (fabs((double)(angle)) > PDC_FLOAT_PREC) - { - pdc_rotation_matrix(p->ydirection * angle, &m); - pdf_concat_raw_ob(p, &m, blindmode); - } - - /* translation of element box */ - elembox.ll.y *= p->ydirection; - elembox.ur.y *= p->ydirection; - pdc_box2polyline(&elembox, polyline); - ip = indangle; - if (negdir) - { - ip = indangle - 1; - if (ip < 0) ip = 3; - } - tx = (float) polyline[ip].x; - ty = (float) polyline[ip].y; - pdc_translation_matrix(tx, ty, &m); - pdf_concat_raw_ob(p, &m, blindmode); - - /* orientation of image */ - if (orientangle != 0) - { - pdc_rotation_matrix(p->ydirection * orientangle, &m); - pdf_concat_raw_ob(p, &m, blindmode); - if (indangle % 2) - { - ss = elemscale.x; - elemscale.x = elemscale.y; - elemscale.y = ss; - } - } - - /* scaling of image */ - if (image->strips == 1) - scaley = p->ydirection * imgscale.y * elemscale.y; - else - scaley = p->ydirection * rowsize * elemscale.y; - pdc_scale_matrix((float)(imgscale.x * elemscale.x), (float) scaley, &m); - pdf_concat_raw_ob(p, &m, blindmode); - - if (!hasresol && !blindmode) - { - pdf_reset_gstate(p); - pdf_reset_tstate(p); - } - - - if (!blindmode) - { - /* last strip first */ - if (image->strips > 1 && lastratio != 1.0) - { - pdc_scale_matrix((float) 1.0, (float) lastratio, &m); - pdf_concat_raw(p, &m); - } - - /* put out image strips separately if available */ - islast = image->strips - 1; - imageno = image->no + islast; - for (is = islast; is >= 0; is--) - { - pdc_printf(p->out, "/I%d Do\n", imageno); - p->xobjects[imageno].flags |= xobj_flag_write; - if (image->strips > 1 && is > 0) - { - pdc_translation_matrix(0, 1, &m); - pdf_concat_raw(p, &m); - if (is == islast && lastratio != 1.0) - { - pdc_scale_matrix((float) 1.0, (float) (1. / lastratio), &m); - pdf_concat_raw(p, &m); - } - imageno--; - } - } - if (image->mask != pdc_undef) - p->xobjects[p->images[image->mask].no].flags |= xobj_flag_write; - - pdf__restore(p); - } -} - -#define MAX_THUMBNAIL_SIZE 106 - -PDFLIB_API void PDFLIB_CALL -PDF_add_thumbnail(PDF *p, int im) -{ - static const char fn[] = "PDF_add_thumbnail"; - pdf_image *image; - - if (!pdf_enter_api(p, fn, pdf_state_page, "(p[%p], %d)\n", (void *) p, im)) - return; - - PDF_INPUT_HANDLE(p, im) - pdf_check_handle(p, im, pdc_imagehandle); - - if (p->thumb_id != PDC_BAD_ID) - pdc_error(p->pdc, PDF_E_IMAGE_THUMB, 0, 0, 0, 0); - - image = &p->images[im]; - - if (image->strips > 1) - pdc_error(p->pdc, PDF_E_IMAGE_THUMB_MULTISTRIP, - pdc_errprintf(p->pdc, "%d", im), 0, 0, 0); - - if (image->width > MAX_THUMBNAIL_SIZE || image->height > MAX_THUMBNAIL_SIZE) - pdc_error(p->pdc, PDF_E_IMAGE_THUMB_SIZE, - pdc_errprintf(p->pdc, "%d", im), - pdc_errprintf(p->pdc, "%d", MAX_THUMBNAIL_SIZE), 0, 0); - - if (image->colorspace != (int) DeviceGray && - image->colorspace != (int) DeviceRGB && - image->colorspace != (int) Indexed) - pdc_error(p->pdc, PDF_E_IMAGE_THUMB_CS, - pdc_errprintf(p->pdc, "%d", im), 0, 0, 0); - - /* Add the image to the thumbnail key of the current page. */ - p->thumb_id = p->xobjects[image->no].obj_id; -} - -PDFLIB_API void PDFLIB_CALL -PDF_close_image(PDF *p, int image) -{ - static const char fn[] = "PDF_close_image"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page | pdf_state_font), - "(p[%p], %d)\n", (void *) p, image)) - { - return; - } - - PDF_INPUT_HANDLE(p, image) - pdf_check_handle(p, image, pdc_imagehandle); - - pdf_cleanup_image(p, image); -} - -/* interface for using image data directly in memory */ - -PDFLIB_API int PDFLIB_CALL -PDF_open_image( - PDF *p, - const char *type, - const char *source, - const char *data, - long length, - int width, - int height, - int components, - int bpc, - const char *params) -{ - static const char fn[] = "PDF_open_image"; - const char *filename = data; - char optlist[512]; - pdc_bool memory = pdc_false; - int retval = -1; - - /* precise scope diagnosis in pdf__load_image */ - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", \"%s\", data[%p], %ld, %d, %d, %d, %d, \"%s\")", - (void *) p, type, source, (void *) data, length, - width, height, components, bpc, params)) - { - PDF_RETURN_HANDLE(p, retval) - } - - if (type == NULL || *type == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "type", 0, 0, 0); - - if (source == NULL || *source == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "source", 0, 0, 0); - - if (!strcmp(type, "raw") && data == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "data", 0, 0, 0); - - /* create optlist */ - optlist[0] = 0; - sprintf(optlist,"width %d height %d components %d bpc %d ", - width, height, components, bpc); - - if (length < 0L) - { - strcat(optlist, "bitreverse true "); - length = -length; - } - - strcat(optlist, "reftype "); - if (!strcmp(source, "fileref")) - strcat(optlist, "fileref "); - else if (!strcmp(source, "memory")) - { - memory = pdc_true; - strcat(optlist, "direct "); - } - else if (!strcmp(source, "url")) - strcat(optlist, "url "); - - if (params != NULL && *params != '\0') - { - char **items; - int i, nitems; - - /* separator characters because of compatibility */ - nitems = pdc_split_stringlist(p->pdc, params, "\t :", &items); - for (i = 0; i < nitems; i++) - { - if (!strcmp(items[i], "invert")) - strcat(optlist, "invert true "); - else if (!strcmp(items[i], "ignoremask")) - strcat(optlist, "ignoremask true "); - else if (!strcmp(items[i], "inline")) - strcat(optlist, "inline true "); - else if (!strcmp(items[i], "interpolate")) - strcat(optlist, "interpolate true "); - else if (!strcmp(items[i], "mask")) - strcat(optlist, "mask true "); - else if (!strcmp(items[i], "/K")) - strcat(optlist, "K "); - else if (!strcmp(items[i], "/BlackIs1")) - strcat(optlist, "invert "); - else - strcat(optlist, items[i]); - } - pdc_cleanup_stringlist(p->pdc, items); - } - - /* create virtual file */ - if (memory) - { - filename = "__raw__image__data__"; - pdf__create_pvf(p, filename, 0, data, (size_t) length, ""); - } - - retval = pdf__load_image(p, type, filename, (const char *) optlist); - - if (memory) - (void) pdf__delete_pvf(p, filename, 0); - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API int PDFLIB_CALL -PDF_open_image_file( - PDF *p, - const char *type, - const char *filename, - const char *stringparam, - int intparam) -{ - static const char fn[] = "PDF_open_image_file"; - char optlist[256]; - int retval = -1; - - /* precise scope diagnosis in pdf__load_image */ - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", \"%s\", \"%s\", %d)", - (void *) p, type, filename, stringparam, intparam)) - { - PDF_RETURN_HANDLE(p, retval) - } - - optlist[0] = 0; - if (stringparam != NULL && *stringparam != '\0') - { - if (!strcmp(stringparam, "invert")) - strcpy(optlist, "invert true "); - else if (!strcmp(stringparam, "inline")) - strcpy(optlist, "inline true "); - else if (!strcmp(stringparam, "ignoremask")) - strcpy(optlist, "ignoremask true "); - else if (!strcmp(stringparam, "mask")) - strcpy(optlist, "mask true "); - else if (!strcmp(stringparam, "masked")) - sprintf(optlist, "masked %d ", intparam); - else if (!strcmp(stringparam, "colorize")) - sprintf(optlist, "colorize %d ", intparam); - else if (!strcmp(stringparam, "page")) - sprintf(optlist, "page %d ", intparam); - else if (!strcmp(stringparam, "iccprofile")) - sprintf(optlist, "iccprofile %d ", intparam); - } - - retval = pdf__load_image(p, type, filename, (const char *) optlist); - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API int PDFLIB_CALL -PDF_open_CCITT(PDF *p, const char *filename, int width, int height, - int BitReverse, int K, int BlackIs1) -{ - static const char fn[] = "PDF_open_CCITT"; - int retval = -1; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page | pdf_state_font), - "(p[%p], \"%s\", %d, %d, %d, %d, %d)", - (void *) p, filename, width, height, BitReverse, K, BlackIs1)) - { - /* create optlist */ - char optlist[256]; - sprintf(optlist,"width %d height %d bitreverse %s K %d invert %s", - width, height, PDC_BOOLSTR(BitReverse), K, PDC_BOOLSTR(BlackIs1)); - - retval = pdf__load_image(p, "CCITT", filename, (const char *) optlist); - } - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API int PDFLIB_CALL -PDF_load_image( - PDF *p, - const char *type, - const char *filename, - int reserved, - const char *optlist) -{ - static const char fn[] = "PDF_load_image"; - int retval = -1; - - /* precise scope diagnosis in pdf__load_image */ - if (pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", \"%s\", %d ,\"%s\")", - (void *) p, type, filename, reserved, optlist)) - { - retval = pdf__load_image(p, type, filename, optlist); - } - - PDF_RETURN_HANDLE(p, retval) -} - - -/* keywords for options 'reftype' */ -static const pdc_keyconn pdf_reftype_keys[] = -{ - {"direct", pdf_ref_direct}, - {"fileref", pdf_ref_file}, - {"url", pdf_ref_url}, - {NULL, 0} -}; - -/* allowed values for options 'bcp' */ -static const pdc_keyconn pdf_bpcvalues[] = -{ - {"1", 1}, {"2", 2}, {"4", 4}, {"8", 8}, {NULL, 0} -}; - -/* allowed values for options 'components' */ -static const pdc_keyconn pdf_compvalues[] = -{ - {"1", 1}, {"3", 3}, {"4", 4}, {NULL, 0} -}; - -#define PDF_ICCOPT_FLAG PDC_OPT_UNSUPP - -/* definitions of open image options */ -static const pdc_defopt pdf_open_image_options[] = -{ - {"bitreverse", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"bpc", pdc_integerlist, PDC_OPT_INTLIST, 1, 1, 1.0, 8.0, pdf_bpcvalues}, - - {"components", pdc_integerlist, PDC_OPT_INTLIST, 1, 1, 1.0, 4.0, - pdf_compvalues}, - - {"height", pdc_integerlist, 0, 1, 1, 1.0, INT_MAX, NULL}, - - {"honoriccprofile", pdc_booleanlist, PDF_ICCOPT_FLAG, 1, 1, 0.0, 0.0, NULL}, - - /* ordering of the next three options is significant */ - - {"iccprofile", pdc_iccprofilehandle, PDF_ICCOPT_FLAG, 1, 1, 1.0, 0.0, NULL}, - - {"colorize", pdc_colorhandle, PDC_OPT_IGNOREIF1, 1, 1, 0.0, 0.0, NULL}, - - {"mask", pdc_booleanlist, PDC_OPT_IGNOREIF2, 1, 1, 0.0, 0.0, NULL}, - - {"ignoremask", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"imagewarning", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"inline", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"interpolate", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"invert", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - {"K", pdc_integerlist, 0, 1, 1, -1.0, 1.0, NULL}, - - {"masked", pdc_imagehandle, 0, 1, 1, 0.0, 0.0, NULL}, - - {"page", pdc_integerlist, 0, 1, 1, 1.0, INT_MAX, NULL}, - - {"renderingintent", pdc_keywordlist, 0, 1, 1, 0.0, 0.0, - gs_renderingintents}, - - {"reftype", pdc_keywordlist, 0, 1, 1, 0.0, 0.0, pdf_reftype_keys}, - - {"width", pdc_integerlist, 0, 1, 1, 1.0, INT_MAX, NULL}, - - PDC_OPT_TERMINATE -}; - -int -pdf__load_image( - PDF *p, - const char *type, - const char *filename, - const char *optlist) -{ - const char *keyword = NULL; - char qualname[32]; - pdc_clientdata data; - pdc_resopt *results; - pdf_image_type imgtype; - int colorize = pdc_undef; - pdf_image *image; - pdc_bool indjpeg = pdc_false; - int legal_states = 0; - int k, inum, imageslot, retval = -1; - - if (type == NULL || *type == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "type", 0, 0, 0); - - if (filename == NULL || *filename == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - /* parsing image type */ - k = pdc_get_keycode_ci(type, pdf_image_keylist); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "type", type, 0, 0); - imgtype = (pdf_image_type) k; - type = pdc_get_keyword(imgtype, pdf_image_keylist); - - /* automatic check */ - if (imgtype == pdf_img_auto) - { - pdc_file *fp; - pdf_jpeg_info jpeg_info; - pdf_tiff_info tiff_info; - - if ((fp = pdf_fopen(p, filename, "", PDC_FILE_BINARY)) == NULL) - { - if (p->debug['i']) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - - if (pdf_is_BMP_file(p, fp)) - imgtype = pdf_img_bmp; - else if (pdf_is_GIF_file(p, fp)) - imgtype = pdf_img_gif; - else if (pdf_is_PNG_file(p, fp)) - imgtype = pdf_img_png; - else if (pdf_is_TIFF_file(p, fp, &tiff_info, pdc_true)) - imgtype = pdf_img_tiff; - else if (pdf_is_JPEG_file(p, fp, &jpeg_info)) - imgtype = pdf_img_jpeg; - else - { - pdc_fclose(fp); - - pdc_set_errmsg(p->pdc, PDF_E_IMAGE_UNKNOWN, filename, 0, 0, 0); - - if (p->debug['i']) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - pdc_fclose(fp); - type = pdc_get_keyword(imgtype, pdf_image_keylist); - } - - /* find free slot */ - for (imageslot = 0; imageslot < p->images_capacity; imageslot++) - if (!p->images[imageslot].in_use) - break; - - if (imageslot == p->images_capacity) - pdf_grow_images(p); - image = &p->images[imageslot]; - - /* inherit global flags */ - image->verbose = p->debug['i']; - image->ri = p->rendintent; - - /* parsing optlist */ - if (optlist && strlen(optlist)) - { - data.compatibility = p->compatibility; - data.maxcolor = p->colorspaces_number - 1; - data.maximage = p->images_capacity - 1; - data.hastobepos = p->hastobepos; - results = pdc_parse_optionlist(p->pdc, optlist, pdf_open_image_options, - &data, image->verbose); - if (!results) - return -1; - - /* save and check options */ - keyword = "imagewarning"; - pdc_get_optvalues(p->pdc, keyword, results, - &image->verbose, NULL); - keyword = "reftype"; - if (pdc_get_optvalues(p->pdc, keyword, results, &inum, NULL)) - { - image->reference = (pdf_ref_type) inum; - if (image->reference != pdf_ref_direct && - imgtype != pdf_img_ccitt && - imgtype != pdf_img_jpeg && - imgtype != pdf_img_raw) - { - if (image->verbose) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNSUPP, keyword, type, - 0, 0); - image->reference = pdf_ref_direct; - } - } - indjpeg = (imgtype == pdf_img_jpeg && - image->reference != pdf_ref_direct) ? pdc_true : pdc_false; - - keyword = "bpc"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->bpc, NULL)) - { - if (image->verbose && imgtype != pdf_img_raw && !indjpeg) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "components"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->components, NULL)) - { - if (image->verbose && imgtype != pdf_img_raw && !indjpeg) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "height"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->height_pixel, NULL)) - { - if (image->verbose && imgtype != pdf_img_ccitt && - imgtype != pdf_img_raw && !indjpeg) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "width"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->width_pixel, NULL)) - { - if (image->verbose && imgtype != pdf_img_raw && - imgtype != pdf_img_ccitt && !indjpeg) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "bitreverse"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->bitreverse, NULL)) - { - if (image->verbose && image->bitreverse && - (imgtype != pdf_img_ccitt || image->reference != pdf_ref_direct)) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "colorize"; - pdc_get_optvalues(p->pdc, keyword, results, &colorize, NULL); - - - keyword = "ignoremask"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->ignoremask, NULL)) - { - if (image->verbose && (imgtype == pdf_img_bmp || - imgtype == pdf_img_ccitt || - imgtype == pdf_img_raw)) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNSUPP, keyword, type, 0, 0); - } - - keyword = "inline"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->doinline, NULL) && image->doinline) - { - if (imgtype != pdf_img_ccitt && - imgtype != pdf_img_jpeg && - imgtype != pdf_img_raw) - { - if (image->verbose) - pdc_warning(p->pdc, - PDF_E_IMAGE_OPTUNSUPP, keyword, type, 0, 0); - image->doinline = pdc_false; - } - else if (image->verbose && image->reference != pdf_ref_direct) - { - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - image->doinline = pdc_false; - } - } - - keyword = "interpolate"; - pdc_get_optvalues(p->pdc, keyword, results, - &image->interpolate, NULL); - - keyword = "invert"; - pdc_get_optvalues(p->pdc, keyword, results, - &image->invert, NULL); - - keyword = "K"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->K, NULL)) - { - if (image->verbose && imgtype != pdf_img_ccitt) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNREAS, keyword, type, 0, 0); - } - - keyword = "mask"; - pdc_get_optvalues(p->pdc, keyword, results, - &image->imagemask, NULL); - - keyword = "masked"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->mask, NULL)) - { - if (!p->images[image->mask].in_use || - p->images[image->mask].strips != 1 || - (p->compatibility <= PDC_1_3 && - (p->images[image->mask].imagemask != pdc_true || - p->images[image->mask].bpc != 1))) - { - pdc_set_errmsg(p->pdc, PDF_E_IMAGE_OPTBADMASK, keyword, - pdc_errprintf(p->pdc, "%d", image->mask), 0, 0); - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - pdc_cleanup_optionlist(p->pdc, results); - pdf_cleanup_image(p, imageslot); - return -1; - } - } - - keyword = "renderingintent"; - if (pdc_get_optvalues(p->pdc, keyword, results, &inum, NULL)) - image->ri = (pdf_renderingintent) inum; - - keyword = "page"; - if (pdc_get_optvalues(p->pdc, keyword, results, - &image->page, NULL)) - { - if (imgtype != pdf_img_gif && imgtype != pdf_img_tiff) - { - if (image->page == 1) - { - if (image->verbose) - pdc_warning(p->pdc, PDF_E_IMAGE_OPTUNSUPP, keyword, - type, 0, 0); - } - else - { - pdc_set_errmsg(p->pdc, PDF_E_IMAGE_NOPAGE, - pdc_errprintf(p->pdc, "%d", image->page), type, - pdc_errprintf(p->pdc, "%s", filename), 0); - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - pdc_cleanup_optionlist(p->pdc, results); - pdf_cleanup_image(p, imageslot); - return -1; - } - } - } - - pdc_cleanup_optionlist(p->pdc, results); - } - - /* precise scope diagnosis */ - if (image->doinline) - legal_states = pdf_state_content; - else - legal_states = pdf_state_document | pdf_state_page | pdf_state_font; - PDF_CHECK_STATE(p, legal_states); - - /* required options */ - if (imgtype == pdf_img_raw || imgtype == pdf_img_ccitt || indjpeg) - { - keyword = ""; - if (image->height_pixel == pdc_undef) - keyword = "height"; - else if (image->width_pixel == pdc_undef) - keyword = "width"; - else - { - image->width = (float) image->width_pixel; - image->height = (float) image->height_pixel; - } - - if (imgtype == pdf_img_ccitt) - { - image->components = 1; - image->bpc = 1; - } - if (image->bpc == pdc_undef) - keyword = "bpc"; - else if (image->components == pdc_undef) - keyword = "components"; - - if (*keyword) - { - pdc_set_errmsg(p->pdc, PDC_E_OPT_NOTFOUND, keyword, 0, 0, 0); - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - pdf_cleanup_image(p, imageslot); - return -1; - } - } - - /* set colorspace */ - if (colorize != pdc_undef) - { - image->colorspace = colorize; - } - else if (image->imagemask == pdc_true) - { - image->colorspace = (int) DeviceGray; - } - else - { - switch(image->components) - { - case 1: - image->colorspace = DeviceGray; - break; - - case 3: - image->colorspace = DeviceRGB; - break; - - case 4: - image->colorspace = DeviceCMYK; - break; - - default: - break; - } - } - - /* try to open image file */ - if (image->reference == pdf_ref_direct) - { - strcpy(qualname, type); - strcat(qualname, " "); - image->fp = pdf_fopen(p, filename, qualname, PDC_FILE_BINARY); - - if (image->fp == NULL) - { - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - pdf_cleanup_image(p, imageslot); - return -1; - } - } - - /* copy filename */ - image->filename = pdc_strdup(p->pdc, filename); - - - /* call working function */ - switch (imgtype) - { - case pdf_img_bmp: - retval = pdf_process_BMP_data(p, imageslot); - break; - - case pdf_img_ccitt: - retval = pdf_process_CCITT_data(p, imageslot); - break; - - case pdf_img_gif: - retval = pdf_process_GIF_data(p, imageslot); - break; - - case pdf_img_jpeg: - retval = pdf_process_JPEG_data(p, imageslot); - break; - - case pdf_img_png: - retval = pdf_process_PNG_data(p, imageslot); - break; - - default: - case pdf_img_raw: - retval = pdf_process_RAW_data(p, imageslot); - break; - - case pdf_img_tiff: - retval = pdf_process_TIFF_data(p, imageslot); - break; - } - - /* cleanup */ - if (retval == -1) - { - pdf_cleanup_image(p, imageslot); - } - else - { - if (image->fp) - pdc_fclose(image->fp); - image->fp = NULL; - } - - return retval; -} diff --git a/src/libs/pdflib/libs/pdflib/p_image.h b/src/libs/pdflib/libs/pdflib/p_image.h deleted file mode 100644 index f426a8d049..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_image.h +++ /dev/null @@ -1,249 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_image.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Header file for the PDFlib image subsystem - * - */ - -#ifndef P_IMAGE_H -#define P_IMAGE_H - -#ifdef HAVE_LIBTIFF -#include "tiffio.h" -#endif - -#ifdef HAVE_LIBPNG -#include "png.h" -#endif - -/* Type of image reference */ -typedef enum -{ - pdf_img_auto, - pdf_img_bmp, - pdf_img_ccitt, - pdf_img_gif, - pdf_img_jpeg, - pdf_img_png, - pdf_img_raw, - pdf_img_tiff -} -pdf_image_type; - -#ifdef P_IMAGE_C -const pdc_keyconn pdf_image_keylist[] = -{ - {"AUTO", pdf_img_auto}, - {"BMP", pdf_img_bmp}, - {"CCITT", pdf_img_ccitt}, - {"GIF", pdf_img_gif}, - {"JPEG", pdf_img_jpeg}, - {"PNG", pdf_img_png}, - {"RAW", pdf_img_raw}, - {"TIFF", pdf_img_tiff}, - {NULL, 0} -}; -#endif /* P_IMAGE_C */ - -/* BMP specific image information */ -typedef struct pdf_bmp_info_t { - pdc_ulong compression; /* BMP compression */ - size_t rowbytes; /* length of row data */ - size_t rowbytes_pad; /* padded length of row data */ - size_t rowbytes_pdf; /* length of row data for PDF */ - size_t skiprows; /* number of rows to be skipped */ - pdc_byte *bitmap; /* bitmap buffer */ - pdc_byte *end; /* first byte above bitmap buffer */ - pdc_byte *pos; /* current position in bitmap buffer */ -} pdf_bmp_info; - -/* JPEG specific image information */ -typedef struct pdf_jpeg_info_t { - long startpos; /* start of image data in file */ -} pdf_jpeg_info; - -/* GIF specific image information */ -typedef struct pdf_gif_info_t { - int c_size; /* current code size (9..12) */ - int t_size; /* current table size (257...) */ - int i_buff; /* input buffer */ - int i_bits; /* # of bits in i_buff */ - int o_buff; /* output buffer */ - int o_bits; /* # of bits in o_buff */ -} pdf_gif_info; - - -/* PNG specific image information */ -typedef struct pdf_png_info_t { - size_t nbytes; /* number of bytes left */ - /* in current IDAT chunk */ -#ifdef HAVE_LIBPNG - png_structp png_ptr; - png_infop info_ptr; - png_uint_32 rowbytes; - pdc_byte *raster; - int cur_line; -#endif /* HAVE_LIBPNG */ -} pdf_png_info; - - -/* TIFF specific image information */ -typedef struct pdf_tiff_info_t { -#ifdef HAVE_LIBTIFF - TIFF *tif; /* pointer to TIFF data structure */ - uint32 *raster; /* frame buffer */ -#endif /* HAVE_LIBTIFF */ - - int cur_line; /* current image row or strip */ -} pdf_tiff_info; - -/* CCITT specific image information */ -typedef struct pdf_ccitt_info_t { - int BitReverse; /* reverse all bits prior to use */ -} pdf_ccitt_info; - -/* Type of image reference */ -typedef enum {pdf_ref_direct, pdf_ref_file, pdf_ref_url} pdf_ref_type; - -/* must be kept in sync with pdf_filter_names[] in p_image.c */ -typedef enum { none, lzw, runlength, ccitt, dct, flate, jbig2 } pdf_compression; - -typedef enum { pred_default = 1, pred_tiff = 2, pred_png = 15 } pdf_predictor; - -/* The image descriptor */ -struct pdf_image_s { - pdc_file *fp; /* image file pointer */ - char *filename; /* image file name or url */ - /* width and height in pixels, or in points for PDF pages and templates */ - float width; /* image width */ - float height; /* image height */ - pdf_compression compression; /* image compression type */ - int colorspace; /* image color space */ - - /*************************** option variables *****************************/ - pdc_bool verbose; /* put out warning/error messages */ - pdc_bool bitreverse; /* bitwise reversal of all bytes */ - int bpc; /* bits per color component */ - int components; /* number of color components */ - int height_pixel; /* image height in pixel */ - pdc_bool ignoremask; /* ignore any transparency information*/ - pdc_bool doinline; /* inline image */ - pdc_bool interpolate; /* interpolate image */ - pdc_bool invert; /* reverse black and white */ - int K; /* encoding type of CCITT */ - pdc_bool imagemask; /* create a mask from a 1-bit image */ - int mask; /* image number of image mask */ - pdf_renderingintent ri; /* rendering intent of image */ - int page; /* page number of TIFF image */ - pdf_ref_type reference; /* kind of image data reference */ - int width_pixel; /* image width in pixel */ - /**************************************************************************/ - - pdc_bool transparent; /* image is transparent */ - pdc_byte transval[4]; /* transparent color values */ - pdf_predictor predictor; /* predictor for lzw and flate */ - - float dpi_x; /* horiz. resolution in dots per inch */ - float dpi_y; /* vert. resolution in dots per inch */ - /* dpi is 0 if unknown */ - - pdc_bool in_use; /* image slot currently in use */ - - char *params; /* for TIFF */ - int strips; /* number of strips in image */ - int rowsperstrip; /* number of rows per strip */ - int pagehandle; /* PDI page handle */ - int dochandle; /* PDI document handle */ - pdc_usebox usebox; - pdc_bool use_raw; /* use raw (compressed) image data */ - - /* image format specific information */ - union { - pdf_bmp_info bmp; - pdf_jpeg_info jpeg; - pdf_gif_info gif; - pdf_png_info png; - pdf_tiff_info tiff; - pdf_ccitt_info ccitt; - } info; - - int no; /* PDF image number */ - PDF_data_source src; -}; - -/* xobject types */ -typedef enum { - image_xobject = 1 << 0, - form_xobject = 1 << 1, - pdi_xobject = 1 << 2 -} pdf_xobj_type; - -typedef enum { - xobj_flag_used = 1 << 0, /* in use */ - xobj_flag_write = 1 << 1 /* write at end of page */ -} pdf_xobj_flags; - -/* A PDF xobject */ -struct pdf_xobject_s { - pdc_id obj_id; /* object id of this xobject */ - int flags; /* bit mask of pdf_xobj_flags */ - pdf_xobj_type type; /* type of this xobject */ -}; - -/* p_bmp.c */ -int pdf_process_BMP_data(PDF *p, int imageslot); -pdc_bool pdf_is_BMP_file(PDF *p, pdc_file *fp); - -/* p_ccitt.c */ -int pdf_process_CCITT_data(PDF *p, int imageslot); -int pdf_process_RAW_data(PDF *p, int imageslot); - -/* p_gif.c */ -int pdf_process_GIF_data(PDF *p, int imageslot); -pdc_bool pdf_is_GIF_file(PDF *p, pdc_file *fp); - -/* p_jpeg.c */ -int pdf_process_JPEG_data(PDF *p, int imageslot); -pdc_bool pdf_is_JPEG_file(PDF *p, pdc_file *fp, pdf_jpeg_info *jpeg); - -/* p_png.c */ -int pdf_process_PNG_data(PDF *p, int imageslot); -pdc_bool pdf_is_PNG_file(PDF *p, pdc_file *fp); - -/* p_tiff.c */ -int pdf_process_TIFF_data(PDF *p, int imageslot); -pdc_bool pdf_is_TIFF_file(PDF *p, pdc_file *fp, pdf_tiff_info *tiff, - pdc_bool check); - - -/* p_image.c */ -int pdf_new_xobject(PDF *p, pdf_xobj_type type, pdc_id obj_id); -void pdf_grow_images(PDF *p); -void pdf_put_image(PDF *p, int im, pdc_bool firststrip); -void pdf_put_inline_image(PDF *p, int im); - -void pdf_init_images(PDF *p); -void pdf_cleanup_images(PDF *p); -void pdf_cleanup_image(PDF *p, int im); -void pdf_init_xobjects(PDF *p); -void pdf_write_xobjects(PDF *p); -void pdf_cleanup_xobjects(PDF *p); -void pdf_place_xobject(PDF *p, int im, float x, float y, - const char *optlist); -void pdf__fit_image(PDF *p, int im, float x, float y, const char *optlist); -int pdf__load_image(PDF *p, const char *type, const char *filename, - const char *optlist); - - -#endif /* P_IMAGE_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_intern.h b/src/libs/pdflib/libs/pdflib/p_intern.h deleted file mode 100644 index cc5b17a4a9..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_intern.h +++ /dev/null @@ -1,742 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_intern.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib internal definitions - * - */ - -#ifndef P_INTERN_H -#define P_INTERN_H - -#include "pdflib.h" - -#include "pc_util.h" -#include "pc_geom.h" -#include "pc_file.h" -#include "pc_sbuf.h" -#include "pc_font.h" -#include "pc_optparse.h" - -#include "p_color.h" -#include "p_keyconn.h" - -/* PDFlib error numbers. -*/ -enum -{ -#define pdf_genNames 1 -#include "p_generr.h" - - PDF_E_dummy -}; - -/* ------------------------ PDFlib feature configuration ------------------- */ - -/* changing the following is not recommended, and not supported */ - -/* BMP image support */ -#define PDF_BMP_SUPPORTED - -/* GIF image support */ -#define PDF_GIF_SUPPORTED - -/* JPEG image support */ -#define PDF_JPEG_SUPPORTED - -/* PNG image support, requires HAVE_LIBZ */ -#define HAVE_LIBPNG - -/* TIFF image support */ -#define HAVE_LIBTIFF - -/* TrueType font support */ -#define PDF_TRUETYPE_SUPPORTED - -/* support proportional widths for the standard CJK fonts */ -#define PDF_CJKFONTWIDTHS_SUPPORTED - - -/* ----------------------------------- macros ------------------------------- */ - -#define PDFLIBSERIAL "PDFLIBSERIAL" /* name of env var. */ - -/* - * Allocation chunk sizes. These don't affect the generated documents - * in any way. In order to save initial memory, however, you can lower - * the values. Increasing the values will bring some performance gain - * for large documents, but will waste memory for small ones. - */ -#define PAGES_CHUNKSIZE 512 /* pages */ -#define PNODES_CHUNKSIZE 64 /* page tree nodes */ -#define CONTENTS_CHUNKSIZE 64 /* page content streams */ -#define FONTS_CHUNKSIZE 16 /* document fonts */ -#define ENCODINGS_CHUNKSIZE 8 /* document encodings */ -#define XOBJECTS_CHUNKSIZE 128 /* document xobjects */ -#define IMAGES_CHUNKSIZE 128 /* document images */ -#define OUTLINE_CHUNKSIZE 256 /* document outlines */ -#define NAMES_CHUNKSIZE 256 /* names */ -#define PDI_CHUNKSIZE 16 /* PDI instances */ -#define COLORSPACES_CHUNKSIZE 16 /* color spaces */ -#define PATTERN_CHUNKSIZE 4 /* pattern */ -#define SHADINGS_CHUNKSIZE 4 /* shadings */ -#define EXTGSTATE_CHUNKSIZE 4 /* external graphic states */ -#define T3GLYPHS_CHUNKSIZE 256 /* type 3 font glyph table */ -#define PRIVGLYPHS_CHUNKSIZE 256 /* private glyph table */ -#define ICCPROFILE_CHUNKSIZE 4 /* ICC profiles */ - -/* The following shouldn't require any changes */ -#define PDF_MAX_SAVE_LEVEL 12 /* max number of save levels */ -#define PDF_FILENAMELEN 1024 /* maximum file name length */ -#define PDF_MAX_PARAMSTRING 256 /* image parameter string */ - -/* Acrobat limit for page dimensions */ -#define PDF_ACRO4_MINPAGE ((float) 3) /* 1/24 inch = 0.106 cm */ -#define PDF_ACRO4_MAXPAGE ((float) 14400) /* 200 inch = 508 cm */ - -/* --------------------- typedefs, enums and structs ------------------------ */ - -typedef enum {pdf_fill_winding, pdf_fill_evenodd} pdf_fillrule; -typedef enum { c_none, c_page, c_path, c_text } pdf_content_type; - -/* Transition types for page transition effects */ -typedef enum { - trans_none, trans_split, trans_blinds, trans_box, - trans_wipe, trans_dissolve, trans_glitter, trans_replace -} pdf_transition; - -/* Document open modes */ -typedef enum { - open_auto, open_none, open_bookmarks, open_thumbnails, open_fullscreen -} pdf_openmode; - -/* Destination uses */ -typedef enum { - pdf_openaction, - pdf_bookmark, - pdf_remotelink, - pdf_locallink, - pdf_nameddest -} pdf_destuse; - -/* Destination types for internal and external links */ -typedef enum { - fixed, - fitwindow, - fitwidth, - fitheight, - fitrect, - fitvisible, - fitvisiblewidth, - fitvisibleheight, - nameddest, - filedest -} pdf_desttype; - -/* Border styles for links */ -typedef enum { - border_solid, border_dashed, border_beveled, - border_inset, border_underlined -} pdf_border_style; - -/* configurable flush points */ -typedef enum { - pdf_flush_none = 0, /* end of document */ - pdf_flush_page = 1<<0, /* after page */ - pdf_flush_content = 1<<1, /* font, xobj, annots */ - pdf_flush_reserved1 = 1<<2, /* reserved */ - pdf_flush_reserved2 = 1<<3, /* reserved */ - pdf_flush_heavy = 1<<4 /* before realloc attempt */ -} pdf_flush_state; - -/* - * Internal PDFlib states for error checking. - * This enum must be kept in sync with the scope_names array in - * p_basic.c::pdf_current_scope. - */ -typedef enum { - pdf_state_object = 1<<0, /* outside any document */ - pdf_state_document = 1<<1, /* document */ - pdf_state_page = 1<<2, /* page description in a document */ - pdf_state_pattern = 1<<3, /* pattern in a document */ - pdf_state_template = 1<<4, /* template in a document */ - pdf_state_path = 1<<5, /* path in a page description */ - - pdf_state_font = 1<<7, /* font definition */ - pdf_state_glyph = 1<<8, /* glyph description in a font */ - pdf_state_error = 1<<9 /* in error cleanup */ -} pdf_state; - -#define pdf_state_content \ - (pdf_state) (pdf_state_page | pdf_state_pattern | \ - pdf_state_template | pdf_state_glyph) - -#define pdf_state_all \ - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page | \ - pdf_state_pattern | pdf_state_template | pdf_state_path | \ - pdf_state_font | pdf_state_glyph) - -#define PDF_STATE_STACK_SIZE 4 - -#define PDF_GET_STATE(p) \ - ((p)->state_stack[(p)->state_sp]) - -#define PDF_SET_STATE(p, s) \ - ((p)->state_stack[(p)->state_sp] = (s)) - -#define PDF_CHECK_STATE(p, s) \ - if ((((p)->state_stack[(p)->state_sp] & (s)) == 0)) \ - pdc_error(p->pdc, PDF_E_DOC_SCOPE, pdf_current_scope(p), 0, 0, 0) - -#define PDF_PUSH_STATE(p, fn, s) \ - if ((p)->state_sp == PDF_STATE_STACK_SIZE - 1) \ - pdc_error(p->pdc, PDF_E_INT_SSTACK_OVER, fn, 0, 0, 0); \ - else \ - (p)->state_stack[++(p)->state_sp] = (s) - -#define PDF_POP_STATE(p, fn) \ - if ((p)->state_sp == 0) \ - pdc_error(p->pdc, PDF_E_INT_SSTACK_UNDER, fn, 0, 0, 0); \ - else \ - --(p)->state_sp - -#define PDF_GET_EXTHANDLE(p, val) \ - (p->hastobepos ? val + 1 : val) - -#define PDF_INPUT_HANDLE(p, val) \ - if (p->hastobepos) val--; - -#define PDF_RETURN_HANDLE(p, val) \ - if (p->hastobepos) val++; \ - pdc_trace(p->pdc, "[%d]\n", val); \ - return val; - -#define PDF_RETURN_BOOLEAN(p, val) \ - return pdc_trace(p->pdc, "[%d]\n", \ - (val == -1 && p->hastobepos) ? 0 : val), \ - (val == -1 && p->hastobepos) ? 0 : val - -#ifndef PDI_DEFINED -#define PDI_DEFINED -typedef struct PDI_s PDI; /* The opaque PDI type */ -#endif - -typedef struct -{ - pdc_bool pdfx_ok; - PDI * pi; -} pdf_pdi; - -typedef enum { - HideToolbar = (1<<0), - HideMenubar = (1<<1), - HideWindowUI = (1<<2), - FitWindow = (1<<3), - CenterWindow = (1<<4), - DisplayDocTitle = (1<<5), - NonFullScreenPageModeOutlines= (1<<6), - NonFullScreenPageModeThumbs = (1<<7), - DirectionR2L = (1<<8) -} pdf_prefs_e; - -typedef struct { - int flags; - pdc_usebox ViewArea; - pdc_usebox ViewClip; - pdc_usebox PrintArea; - pdc_usebox PrintClip; -} pdf_prefs; - -/* Destination structure for bookmarks and links */ -typedef struct { - pdf_desttype type; - char *filename; /* name of a file to be launched */ - pdc_bool remote; /* local or remote target file */ - int page; /* target page number */ - char *name; /* destination name, only for type=nameddest */ - int len; /* length of the name string */ - float zoom; /* magnification */ - float left; - float right; - float bottom; - float top; - float color[3]; /* rgb color of bookmark text */ - pdc_fontstyle fontstyle; /* font style of bookmark text */ -} pdf_dest; - -typedef struct { - pdc_encodingvector *ev; /* encoding vector */ - pdc_id id; /* encoding object id */ - pdc_id tounicode_id; /* tounicode object ids */ -} pdf_encoding; - -/* Opaque types which are detailed in the respective modules */ -typedef struct pdf_xobject_s pdf_xobject; -typedef struct pdf_res_s pdf_res; -typedef struct pdf_category_s pdf_category; -typedef struct pdf_virtfile_s pdf_virtfile; -typedef struct pdf_annot_s pdf_annot; -typedef struct pdf_name_s pdf_name; -typedef struct pdf_info_s pdf_info; -typedef struct pdf_outline_s pdf_outline; -typedef struct pdf_image_s pdf_image; -typedef struct pdf_pattern_s pdf_pattern; -typedef struct pdf_shading_s pdf_shading; -typedef struct pdf_extgstateresource_s pdf_extgstateresource; - -/* -------------------- special graphics state -------------------- */ -typedef struct { - pdc_matrix ctm; /* current transformation matrix */ - float x; /* current x coordinate */ - float y; /* current y coordinate */ - - float startx; /* starting x point of the subpath */ - float starty; /* starting y point of the subpath */ - - float lwidth; /* line width */ - int lcap; /* line cap style */ - int ljoin; /* line join style */ - float miter; /* line join style */ - float flatness; /* line join style */ - pdc_bool dashed; /* line dashing in effect */ - - /* LATER: rendering intent and flatness */ -} pdf_gstate; - -/* ------------------------ text state ---------------------------- */ -typedef struct { - float c; /* character spacing */ - float w; /* word spacing */ - float h; /* horizontal scaling */ - float l; /* leading */ - int f; /* slot number of the current font */ - float fs; /* font size */ - pdc_matrix m; /* text matrix */ - float me; /* last text matrix component e */ - int mode; /* text rendering mode */ - float rise; /* text rise */ - pdc_matrix lm; /* text line matrix */ - pdc_bool potm; /* text matrix must be output at begin text */ -} pdf_tstate; - -/* Force graphics or color operator output, avoiding the optimization - * which checks whether the new value might be the same as the old. - * This is especially required for Type 3 glyph descriptions which - * inherit the surrounding page description's gstate parameters, - * and therefore even must write default values. - */ -#define PDF_FORCE_OUTPUT() (PDF_GET_STATE(p) == pdf_state_glyph) - -/* - * ************************************************************************* - * The core PDF document descriptor - * ************************************************************************* - */ - -struct PDF_s { - /* -------------------------- general stuff ------------------------ */ - unsigned long magic; /* poor man's integrity check */ - void (*freeproc)(PDF *p, void *mem); - pdc_core *pdc; /* core context */ - int compatibility; /* PDF version number * 10 */ - - char *binding; /* name of the language binding */ - pdc_bool hastobepos; /* return value has to be positiv */ - - pdf_state state_stack[PDF_STATE_STACK_SIZE]; - int state_sp; /* state stack pointer */ - - /* ------------------- PDF Info dictionary entries ----------------- */ - char time_str[PDC_TIME_SBUF_SIZE]; /* time string */ - char *Keywords; - char *Subject; - char *Title; - char *Creator; - char *Author; - pdf_info *userinfo; /* list of user-defined entries */ - - /* -------------- I/O, error handling and memory management ------------- */ - size_t (*writeproc)(PDF *p, void *data, size_t size); - void (*errorhandler)(PDF *p, int level, const char* msg); - void *opaque; /* user-specific, opaque data */ - - /* ------------------------- PDF import ---------------------------- */ - pdf_pdi *pdi; /* PDI context array */ - int pdi_capacity; /* currently allocated size */ - pdc_usebox pdi_usebox; - pdc_bool pdi_strict; /* strict PDF parser mode */ - pdc_sbuf * pdi_sbuf; /* string buffer for pdi parms */ - - /* ------------------------ resource stuff ------------------------- */ - pdf_category *resources; /* anchor for the resource list */ - pdc_bool resfilepending; /* to read resource file is pending */ - char *resourcefilename; /* name of the resource file */ - char *prefix; /* prefix for resource file names */ - - /* ---------------- virtual file system stuff ----------------------- */ - pdf_virtfile *filesystem; /* anchor for the virtual file system */ - - /* ------------------- hypertext bookkeeping ------------------- */ - pdf_openmode open_mode; /* document open mode */ - pdf_dest open_action; /* open action/first page display */ - pdf_dest bookmark_dest; /* destination for bookmarks */ - char *base; /* document base URI */ - - /* ------------------- PDF output bookkeeping ------------------- */ - pdc_output *out; /* output manager */ - pdc_id length_id; /* id of current stream's length*/ - pdf_flush_state flush; /* flush state */ - - /* ------------------- page bookkeeping ------------------- */ - pdc_id *pages; /* page ids */ - int pages_capacity; - int current_page; /* current page number (1-based) */ - - pdc_id *pnodes; /* page tree node ids */ - int pnodes_capacity; /* current # of entries in pnodes */ - int current_pnode; /* current node number (0-based) */ - int current_pnode_kids; /* current # of kids in current node */ - - - /* ------------------- document resources ------------------- */ - pdc_font *fonts; /* all fonts in document */ - int fonts_capacity; /* currently allocated size */ - int fonts_number; /* next available font number */ - - pdf_xobject *xobjects; /* all xobjects in document */ - int xobjects_capacity; /* currently allocated size */ - int xobjects_number; /* next available xobject slot */ - - pdf_colorspace *colorspaces; /* all color space resources */ - int colorspaces_capacity; /* currently allocated size */ - int colorspaces_number; /* next available color space number */ - - - pdf_pattern *pattern; /* all pattern resources */ - int pattern_capacity; /* currently allocated size */ - int pattern_number; /* next available pattern number */ - - pdf_shading *shadings; /* all shading resources */ - int shadings_capacity; /* currently allocated size */ - int shadings_number; /* next available shading number */ - - pdf_extgstateresource *extgstates; /* all ext. graphic state resources */ - int extgstates_capacity; /* currently allocated size */ - int extgstates_number; /* next available extgstate number */ - - pdf_image *images; /* all images in document */ - int images_capacity; /* currently allocated size */ - - /* ------------------- encodings ------------------- */ - pdf_encoding *encodings; /* all encodings in document */ - int encodings_capacity; /* currently allocated size */ - int encodings_number; /* next available encoding slot */ - - /* ------------------- document outline tree ------------------- */ - int outline_capacity; /* currently allocated size */ - int outline_count; /* total number of outlines */ - pdf_outline *outlines; /* dynamic array of outlines */ - - /* ------------------- name tree ------------------- */ - pdf_name *names; /* page ids */ - int names_capacity; - int names_number; /* next available names number */ - - /* ------------------- page specific stuff ------------------- */ - pdc_id res_id; /* id of this page's res dict */ - pdc_id *contents_ids; /* content sections' chain */ - int contents_ids_capacity; /* # of content sections */ - pdc_id next_content; /* # of current content section */ - pdf_content_type contents; /* type of current content section */ - pdf_transition transition; /* type of page transition */ - float duration; /* duration of page transition */ - pdf_prefs ViewerPreferences; /* bit mask with preferences */ - - pdc_t3font *t3font; /* type 3 font info */ - - pdf_annot *annots; /* annotation chain */ - - float width; /* MediaBox: current page's width */ - float height; /* MediaBox: current page's height */ - pdc_rectangle CropBox; - pdc_rectangle BleedBox; - pdc_rectangle TrimBox; - pdc_rectangle ArtBox; - pdc_id thumb_id; /* id of page's thumb, or PDC_BAD_ID */ - - float ydirection; /* direction of y axis of default */ - /* system rel. to viewport (1 or -1) */ - - pdc_bool usercoordinates; /* interprete rectangle coordinates */ - /* of hypertext funcs. in user space */ - - int sl; /* current save level */ - pdf_gstate gstate[PDF_MAX_SAVE_LEVEL]; /* graphics state */ - pdf_tstate tstate[PDF_MAX_SAVE_LEVEL]; /* text state */ - pdf_cstate cstate[PDF_MAX_SAVE_LEVEL]; /* color state */ - - - pdf_renderingintent rendintent; /* RenderingIntent */ - - pdc_bool preserveoldpantonenames;/* preserve old PANTONE names */ - pdc_bool spotcolorlookup; /* use internal look-up table for - * color values */ - - - /* ------------------------ template stuff ----------------------- */ - int templ; /* current template if in templ. state*/ - - /* ------------ other text and graphics-related stuff ------------ */ - /* leading, word, and character spacing are treated as a group */ - pdc_text_format textformat; /* text storage format */ - pdc_bool textparams_done; /* text parameters already set */ - pdc_bool underline; /* underline text */ - pdc_bool overline; /* overline text */ - pdc_bool strikeout; /* strikeout text */ - pdc_bool inheritgs; /* inherit gstate in templates */ - pdf_fillrule fillrule; /* nonzero or evenodd fill rule */ - pdc_byte *currtext; /* current allocated text string */ - - /* -------------- auxiliary API function parameters -------------- */ - /* PDF_add_launchlink() */ - char *launchlink_parameters; - char *launchlink_operation; - char *launchlink_defaultdir; - - /* ------------ hypertext encoding and storage format ------------ */ - pdc_encoding hypertextencoding; - pdc_text_format hypertextformat; - - /* -------------- annotation border style and color -------------- */ - pdf_border_style border_style; - float border_width; - float border_red; - float border_green; - float border_blue; - float border_dash1; - float border_dash2; - - /* ------------------------ miscellaneous ------------------------ */ - char debug[256]; /* debug flags */ - - /* -------------------- private glyph tables ---------------------- */ - pdc_glyph_tab *unicode2name; /* private unicode to glyphname table */ - pdc_glyph_tab *name2unicode; /* private glyphname to unicode table */ - int glyph_tab_capacity; /* currently allocated size */ - int glyph_tab_size; /* size of glyph tables */ - pdc_ushort next_unicode; /* next available unicode number */ - -}; - -/* Data source for images, compression, ASCII encoding, fonts, etc. */ -typedef struct PDF_data_source_s PDF_data_source; -struct PDF_data_source_s { - pdc_byte *next_byte; - size_t bytes_available; - void (*init)(PDF *, PDF_data_source *src); - int (*fill)(PDF *, PDF_data_source *src); - void (*terminate)(PDF *, PDF_data_source *src); - - pdc_byte *buffer_start; - size_t buffer_length; - void *private_data; - long offset; /* start of data to read */ - long length; /* length of data to read */ - long total; /* total bytes read so far */ -}; - -/* ------ Private functions for library-internal use only --------- */ - -/* p_basic.c */ -void pdf_begin_contents_section(PDF *p); -void pdf_end_contents_section(PDF *p); -void pdf_error(PDF *, int level, const char *fmt, ...); -pdc_bool pdf_enter_api(PDF *p, const char *funame, pdf_state s, - const char *fmt, ...); -const char * pdf_current_scope(PDF *p); -void pdf_grow_pages(PDF *p); -void pdf_check_handle(PDF *p, int value, pdc_opttype type); - -/* p_text.c */ -void pdf_init_tstate(PDF *p); -void pdf_reset_tstate(PDF *p); -void pdf_end_text(PDF *p); -void pdf_set_leading(PDF *p, float leading); -void pdf_set_text_rise(PDF *p, float rise); -void pdf_set_horiz_scaling(PDF *p, float scale); -void pdf_set_text_rendering(PDF *p, int mode); -void pdf_set_char_spacing(PDF *p, float spacing); -void pdf_set_word_spacing(PDF *p, float spacing); -float pdf_get_horiz_scaling(PDF *p); -float pdf_get_fontsize(PDF *p); -void pdf_output_kern_text(PDF *p, pdc_byte *text, int len, int charlen); -void pdf_put_textstring(PDF *p, pdc_byte *text, int len, int charlen); -void pdf_show_text(PDF *p, const char *text, int len, - const float *x_p, const float *y_p, pdc_bool cont); -float pdf__stringwidth(PDF *p, const char *text, int len, - int font, float size); -void pdf__setfont(PDF *p, int font, float fontsize); -void pdf__fit_textline(PDF *p, const char *text, int len, float x, float y, - const char *optlist); - -/* p_gstate.c */ -void pdf__save(PDF *p); -void pdf__restore(PDF *p); -void pdf_init_gstate(PDF *p); -void pdf_concat_raw(PDF *p, pdc_matrix *m); -void pdf_concat_raw_ob(PDF *p, pdc_matrix *m, pdc_bool blind); -void pdf_reset_gstate(PDF *p); -void pdf_set_topdownsystem(PDF *p, float height); -void pdf__setmatrix(PDF *p, pdc_matrix *n); - -/* p_extgstate.c */ -void pdf_init_extgstate(PDF *p); -void pdf_write_page_extgstates(PDF *p); -void pdf_write_doc_extgstates(PDF *p); -void pdf_cleanup_extgstates(PDF *p); - - - -/* p_filter.c */ -void pdf_ASCII85Encode(PDF *p, PDF_data_source *src); -void pdf_ASCIIHexEncode(PDF *p, PDF_data_source *src); -int pdf_data_source_buf_fill(PDF *p, PDF_data_source *src); - -void pdf_data_source_file_init(PDF *p, PDF_data_source *src); -int pdf_data_source_file_fill(PDF *p, PDF_data_source *src); -void pdf_data_source_file_terminate(PDF *p, PDF_data_source *src); - -void pdf_copy_stream(PDF *p, PDF_data_source *src, pdc_bool compress); - -/* p_annots.c */ -void pdf_init_annots(PDF *p); -void pdf_write_annots_root(PDF *p); -void pdf_init_page_annots(PDF *p); -void pdf_write_page_annots(PDF *p); -void pdf_cleanup_page_annots(PDF *p); -void pdf_cleanup_annots(PDF *p); - -/* p_draw.c */ -void pdf_begin_path(PDF *p); -void pdf_end_path(PDF *p); -void pdf__moveto(PDF *p, float x, float y); -void pdf__rmoveto(PDF *p, float x, float y); -void pdf__lineto(PDF *p, float x, float y); -void pdf__rlineto(PDF *p, float x, float y); -void pdf__curveto(PDF *p, float x_1, float y_1, - float x_2, float y_2, float x_3, float y_3); -void pdf__rcurveto(PDF *p, float x_1, float y_1, - float x_2, float y_2, float x_3, float y_3); -void pdf__rrcurveto(PDF *p, float x_1, float y_1, - float x_2, float y_2, float x_3, float y_3); -void pdf__hvcurveto(PDF *p, float x_1, float x_2, float y_2, float y_3); -void pdf__vhcurveto(PDF *p, float y_1, float x_2, float y_2, float x_3); -void pdf__rect(PDF *p, float x, float y, float width, float height); -void pdf__arc(PDF *p, float x, float y, float r, float alpha, float beta); -void pdf__arcn(PDF *p, float x, float y, float r, float alpha, float beta); -void pdf__circle(PDF *p, float x, float y, float r); -void pdf__closepath(PDF *p); -void pdf__endpath(PDF *p); -void pdf__stroke(PDF *p); -void pdf__closepath_stroke(PDF *p); -void pdf__fill(PDF *p); -void pdf__fill_stroke(PDF *p); -void pdf__closepath_fill_stroke(PDF *p); -void pdf__clip(PDF *p); - -/* p_gstate.c */ -void pdf__setdash(PDF *p, float b, float w); -void pdf__setflat(PDF *p, float flat); -void pdf__setlinejoin(PDF *p, int join); -void pdf__setlinecap(PDF *p, int cap); -void pdf__setlinewidth(PDF *p, float width); -void pdf__setmiterlimit(PDF *p, float miter); -void pdf__initgraphics(PDF *p); - -/* p_hyper.c */ -void pdf_init_destination(PDF *p, pdf_dest *dest); -void pdf_cleanup_destination(PDF *p, pdf_dest *dest); -void pdf_parse_destination_optlist(PDF *p, const char *optlist, - pdf_dest *dest, int page, pdf_destuse destuse); -void pdf_write_destination(PDF *p, pdf_dest *dest); - -void pdf_init_outlines(PDF *p); -void pdf_write_outlines(PDF *p); -void pdf_write_outline_root(PDF *p); -void pdf_cleanup_outlines(PDF *p); - -void pdf_init_transition(PDF *p); -void pdf_write_page_transition(PDF *p); - -void pdf_feed_digest_info(PDF *p); -void pdf_init_info(PDF *p); -pdc_id pdf_write_info(PDF *p); -void pdf_cleanup_info(PDF *p); - -void pdf_cleanup_names(PDF *p); -pdc_id pdf_write_names(PDF *p); - -void pdf_set_transition(PDF *p, const char *type); -void pdf_set_duration(PDF *p, float t); - -char *pdf_convert_hypertext(PDF *p, const char *text, int len); - - -/* p_resource.c */ -void pdf_add_resource(PDF *p, const char *category, const char *resource); -void pdf_cleanup_resources(PDF *p); -void pdf__create_pvf(PDF *p, const char *filename, int reserved, - const void *data, size_t size, const char *options); -int pdf__delete_pvf(PDF *p, const char *filename, int reserved); -char *pdf_find_resource(PDF *p, const char *category, const char *name); -void pdf_lock_pvf(PDF *p, const char *filename); -void pdf_unlock_pvf(PDF *p, const char *filename); -void pdf_cleanup_filesystem(PDF *p); -pdc_file *pdf_fopen(PDF *p, const char *filename, const char *qualifier, - int flags); - -/* p_encoding.c */ -void pdf__encoding_set_char(PDF *p, const char *encoding, int slot, - const char *glyphname, int uv); -pdc_encodingvector *pdf_generate_encoding(PDF *p, const char *encoding); -pdc_encodingvector *pdf_read_encoding(PDF *p, const char *encoding, - const char *filename); -pdc_ushort pdf_glyphname2unicode(PDF *p, const char *glyphname); -const char *pdf_unicode2glyphname(PDF *p, pdc_ushort uv); -pdc_ushort pdf_insert_glyphname(PDF *p, const char *glyphname); -const char *pdf_insert_unicode(PDF *p, pdc_ushort uv); -pdc_ushort pdf_register_glyphname(PDF *p, const char *glyphname, - pdc_ushort uv); -const char *pdf_get_encoding_name(PDF *p, pdc_encoding enc); -pdc_encoding pdf_insert_encoding(PDF *p, const char *encoding); -pdc_encoding pdf_find_encoding(PDF *p, const char *encoding); -void pdf_set_encoding_glyphnames(PDF *p, pdc_encoding enc); -pdc_bool pdf_get_encoding_isstdflag(PDF *p, pdc_encoding enc); -void pdf_init_encoding_ids(PDF *p); -void pdf_init_encodings(PDF *p); -void pdf_grow_encodings(PDF *p); -void pdf_cleanup_encodings(PDF *p); - -/* p_pattern.c */ -void pdf_init_pattern(PDF *p); -void pdf_write_page_pattern(PDF *p); -void pdf_cleanup_pattern(PDF *p); - -/* p_shading.c */ -void pdf_init_shadings(PDF *p); -void pdf_write_page_shadings(PDF *p); -void pdf_cleanup_shadings(PDF *p); - -/* p_xgstate.c */ -pdc_id pdf_get_gstate_id(PDF *p, int gstate); -#endif /* P_INTERN_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_jpeg.c b/src/libs/pdflib/libs/pdflib/p_jpeg.c deleted file mode 100644 index fd47380751..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_jpeg.c +++ /dev/null @@ -1,643 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_jpeg.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * JPEG processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -#ifndef PDF_JPEG_SUPPORTED - -pdc_bool -pdf_is_JPEG_file(PDF *p, pdc_file *fp, pdf_jpeg_info *jpeg) -{ - (void) p; - (void) fp; - - return pdc_false; -} - -int -pdf_process_JPEG_data( - PDF *p, - int imageslot) -{ - (void) imageslot; - - pdc_warning(p->pdc, PDF_E_UNSUPP_IMAGE, "JPEG", 0, 0, 0); - return -1; -} - -#else - -/* - * The following enum is stolen from the IJG JPEG library - * Comments added by tm. - * This table contains far too many names since PDFlib - * is rather simple-minded about markers. - */ - -typedef enum { /* JPEG marker codes */ - M_SOF0 = 0xc0, /* baseline DCT */ - M_SOF1 = 0xc1, /* extended sequential DCT */ - M_SOF2 = 0xc2, /* progressive DCT */ - M_SOF3 = 0xc3, /* lossless (sequential) */ - - M_SOF5 = 0xc5, /* differential sequential DCT */ - M_SOF6 = 0xc6, /* differential progressive DCT */ - M_SOF7 = 0xc7, /* differential lossless */ - - M_JPG = 0xc8, /* JPEG extensions */ - M_SOF9 = 0xc9, /* extended sequential DCT */ - M_SOF10 = 0xca, /* progressive DCT */ - M_SOF11 = 0xcb, /* lossless (sequential) */ - - M_SOF13 = 0xcd, /* differential sequential DCT */ - M_SOF14 = 0xce, /* differential progressive DCT */ - M_SOF15 = 0xcf, /* differential lossless */ - - M_DHT = 0xc4, /* define Huffman tables */ - - M_DAC = 0xcc, /* define arithmetic conditioning table */ - - M_RST0 = 0xd0, /* restart */ - M_RST1 = 0xd1, /* restart */ - M_RST2 = 0xd2, /* restart */ - M_RST3 = 0xd3, /* restart */ - M_RST4 = 0xd4, /* restart */ - M_RST5 = 0xd5, /* restart */ - M_RST6 = 0xd6, /* restart */ - M_RST7 = 0xd7, /* restart */ - - M_SOI = 0xd8, /* start of image */ - M_EOI = 0xd9, /* end of image */ - M_SOS = 0xda, /* start of scan */ - M_DQT = 0xdb, /* define quantization tables */ - M_DNL = 0xdc, /* define number of lines */ - M_DRI = 0xdd, /* define restart interval */ - M_DHP = 0xde, /* define hierarchical progression */ - M_EXP = 0xdf, /* expand reference image(s) */ - - M_APP0 = 0xe0, /* application marker, used for JFIF */ - M_APP1 = 0xe1, /* application marker, used for Exif */ - M_APP2 = 0xe2, /* application marker, used for FlashPix* - * and ICC Profiles */ - M_APP3 = 0xe3, /* application marker */ - M_APP4 = 0xe4, /* application marker */ - M_APP5 = 0xe5, /* application marker */ - M_APP6 = 0xe6, /* application marker */ - M_APP7 = 0xe7, /* application marker */ - M_APP8 = 0xe8, /* application marker, used for SPIFF */ - M_APP9 = 0xe9, /* application marker */ - M_APP10 = 0xea, /* application marker */ - M_APP11 = 0xeb, /* application marker */ - M_APP12 = 0xec, /* application marker */ - M_APP13 = 0xed, /* application marker, used by Photoshop*/ - M_APP14 = 0xee, /* application marker, used by Adobe */ - M_APP15 = 0xef, /* application marker */ - - M_JPG0 = 0xf0, /* reserved for JPEG extensions */ - M_JPG13 = 0xfd, /* reserved for JPEG extensions */ - M_COM = 0xfe, /* comment */ - - M_TEM = 0x01, /* temporary use */ - - M_ERROR = 0x100, /* dummy marker, internal use only */ - M_CONT = 0x101 /* dummy marker, internal use only */ -} JPEG_MARKER; - -#define JPEG_BUFSIZE 1024 - -static void -pdf_data_source_JPEG_init(PDF *p, PDF_data_source *src) -{ - pdf_image *image; - - image = (pdf_image *) src->private_data; - - src->buffer_start = (pdc_byte *) - pdc_malloc(p->pdc, JPEG_BUFSIZE, "PDF_data_source_JPEG_init"); - src->buffer_length = JPEG_BUFSIZE; - - pdc_fseek(image->fp, image->info.jpeg.startpos, SEEK_SET); -} - -static pdc_bool -pdf_data_source_JPEG_fill(PDF *p, PDF_data_source *src) -{ - pdf_image *image; - - (void) p; /* avoid compiler warning "unreferenced parameter" */ - - image = (pdf_image *) src->private_data; - - src->next_byte = src->buffer_start; - src->bytes_available = - pdc_fread(src->buffer_start, 1, JPEG_BUFSIZE, image->fp); - - if (src->bytes_available == 0) - return pdc_false; - else - return pdc_true; -} - -static void -pdf_data_source_JPEG_terminate(PDF *p, PDF_data_source *src) -{ - pdc_free(p->pdc, (void *) src->buffer_start); -} - -/* - * The following routine used to be a macro in its first incarnation: - * - * #define get_2bytes(fp) ((unsigned int) (getc(fp) << 8) + getc(fp)) - * - * However, this is bad programming since C doesn't guarantee - * the evaluation order of the getc() calls! As suggested by - * Murphy's law, there are indeed compilers which produce the wrong - * order of the getc() calls, e.g. the Metrowerks C compiler for BeOS. - * Since there are only a few calls we don't care about the performance - * penalty and use a simplistic C function which does the right thing. - */ - -/* read two byte parameter, MSB first */ -static unsigned int -get_2bytes(pdc_file *fp) -{ - unsigned int val; - val = (unsigned int) (pdc_fgetc(fp) << 8); - val += (unsigned int) pdc_fgetc(fp); - return val; -} - -static int -pdf_next_jpeg_marker(pdc_file *fp) -{ /* look for next JPEG Marker */ - int c; - - do { - do { /* skip to FF */ - if (pdc_feof(fp)) - return M_ERROR; /* dummy marker */ - c = pdc_fgetc(fp); - } while (c != 0xFF); - - do { /* skip repeated FFs */ - if (pdc_feof(fp)) - return M_ERROR; /* dummy marker */ - c = pdc_fgetc(fp); - } while (c == 0xFF); - } while (c == 0); /* repeat if FF/00 */ - - return c; -} - -pdc_bool -pdf_is_JPEG_file(PDF *p, pdc_file *fp, pdf_jpeg_info *jpeg) -{ - int c; - - (void) p; - -#if defined(MVS) && defined(I370) - jpeg->startpos = 0L; -#else - /* Tommy's special trick for Macintosh JPEGs: simply skip some */ - /* hundred bytes at the beginning of the file! */ - do { - do { /* skip if not FF */ - c = pdc_fgetc(fp); - } while (!pdc_feof(fp) && c != 0xFF); - - if (pdc_feof(fp)) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - - do { /* skip repeated FFs */ - c = pdc_fgetc(fp); - } while (c == 0xFF); - - /* remember start position */ - if ((jpeg->startpos = pdc_ftell(fp)) < 0L) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - - jpeg->startpos -= 2; /* subtract marker length */ - - if (c == M_SOI) { - pdc_fseek(fp, jpeg->startpos, SEEK_SET); - break; - } - } while (!pdc_feof(fp)); -#endif /* !MVS || !I370 */ - -#define BOGUS_LENGTH 768 - /* Heuristics: if we are that far from the start chances are - * it is a TIFF file with embedded JPEG data which we cannot - * handle - regard as hopeless... - */ - if (pdc_feof(fp) || jpeg->startpos > BOGUS_LENGTH) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - - return pdc_true; -} - -/* open JPEG image and analyze marker */ -int -pdf_process_JPEG_data( - PDF *p, - int imageslot) -{ - static const char fn[] = "pdf_process_JPEG_data"; - int b, c, unit; - unsigned long i, length; -#define APP_MAX 255 - unsigned char appstring[APP_MAX]; - pdc_byte *app13; - pdc_byte *s; - pdf_image *image; - pdc_bool adobeflag = pdc_false; - pdc_bool markers_done = pdc_false; - int errint = 0; - int errcode = 0; - - image = &p->images[imageslot]; - image->compression = dct; - image->use_raw = pdc_true; - - /* jpeg file not available */ - if (image->reference != pdf_ref_direct) - { - - image->in_use = pdc_true; /* mark slot as used */ - pdf_put_image(p, imageslot, pdc_true); - return imageslot; - } - - if (pdf_is_JPEG_file(p, image->fp, &image->info.jpeg) == pdc_false) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_JPEG_ERROR; - } - - image->src.init = pdf_data_source_JPEG_init; - image->src.fill = pdf_data_source_JPEG_fill; - image->src.terminate = pdf_data_source_JPEG_terminate; - image->src.private_data = (void *) image; - - /* process JPEG markers */ - while (!markers_done && (c = pdf_next_jpeg_marker(image->fp)) != M_EOI) { - - - switch (c) { - case M_ERROR: - /* The following are not supported in PDF 1.3 and above */ - case M_SOF3: - case M_SOF5: - case M_SOF6: - case M_SOF7: - case M_SOF9: - case M_SOF11: - case M_SOF13: - case M_SOF14: - case M_SOF15: - errint = c; - errcode = PDF_E_JPEG_COMPRESSION; - goto PDF_JPEG_ERROR; - - - /* SOF2 and SOF10 are progressive DCT */ - case M_SOF2: - case M_SOF10: - /* fallthrough */ - - case M_SOF0: - case M_SOF1: - (void) get_2bytes(image->fp); /* read segment length */ - - image->bpc = pdc_fgetc(image->fp); - image->height = (float) get_2bytes(image->fp); - image->width = (float) get_2bytes(image->fp); - image->components = pdc_fgetc(image->fp); - - /* - * No need to read more markers since multiscan detection - * not required for single-component images. - */ - if (image->components == 1) - markers_done = pdc_true; - - break; - - case M_APP0: /* check for JFIF marker with resolution */ - length = get_2bytes(image->fp); - - for (i = 0; i < length-2; i++) { /* get contents of marker */ - b = pdc_fgetc(image->fp); - if (i < APP_MAX) /* store marker in appstring */ - appstring[i] = (unsigned char) b; - } - - /* Check for JFIF application marker and read density values - * per JFIF spec version 1.02. - */ - -#define JFIF_ASPECT_RATIO 0 /* JFIF unit byte: aspect ratio only */ -#define JFIF_DOTS_PER_INCH 1 /* JFIF unit byte: dots per inch */ -#define JFIF_DOTS_PER_CM 2 /* JFIF unit byte: dots per cm */ - -#define PDF_STRING_JFIF "\112\106\111\106" - - if (length >= 14 && !strncmp(PDF_STRING_JFIF, (char *) appstring, 4)) { - unit = appstring[7]; /* resolution unit */ - /* resolution value */ - image->dpi_x = (float) ((appstring[8]<<8) + appstring[9]); - image->dpi_y = (float) ((appstring[10]<<8) + appstring[11]); - - if (image->dpi_x <= (float) 0.0 || image->dpi_y <= (float) 0.0) { - image->dpi_x = (float) 0.0; - image->dpi_y = (float) 0.0; - break; - } - - switch (unit) { - case JFIF_DOTS_PER_INCH: - break; - - case JFIF_DOTS_PER_CM: - image->dpi_x *= (float) 2.54; - image->dpi_y *= (float) 2.54; - break; - - case JFIF_ASPECT_RATIO: - image->dpi_x *= -1; - image->dpi_y *= -1; - break; - - default: /* unknown ==> ignore */ - /* */ ; - } - } - - break; - - -#ifdef NYI - /* LATER: read SPIFF marker */ - case M_APP8: /* check for SPIFF marker */ - - break; -#endif - - case M_APP13: /* check for Photoshop marker */ - length = get_2bytes(image->fp); - - /* get marker contents */ - length -= 2; /* account for two length bytes */ - app13 = (pdc_byte*)pdc_malloc(p->pdc, length, fn); - - if (!PDC_OK_FREAD(image->fp, app13, length)) { - pdc_free(p->pdc, app13); - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_JPEG_ERROR; - } - -#define PS_HEADER_LEN 14 -#define PDF_STRING_Photoshop "\120\150\157\164\157\163\150\157\160" -#define PDF_STRING_8BIM "\070\102\111\115" -#define RESOLUTION_INFO_ID 0x03ED /* resolution info resource block */ -#define PS_FIXED_TO_FLOAT(h, l) ((float) (h) + ((float) (l)/(1<<16))) - - /* Not a valid Photoshop marker */ - if (length < 9 || strncmp(PDF_STRING_Photoshop, (char *) app13, 9)) { - pdc_free(p->pdc, app13); - break; - } - - /* walk all image resource blocks and look for ResolutionInfo */ - for (s = app13 + PS_HEADER_LEN; s < app13 + length; /* */) { - long len; - unsigned int type; - - if (strncmp((char *) s, PDF_STRING_8BIM, 4)) - break; /* out of sync */ - s += 4; /* identifying string */ - - type = (unsigned int) ((s[0]<<8) + s[1]); - s += 2; /* resource type */ - - s += *s + ((*s & 1) ? 1 : 2); /* resource name */ - - len = (((((s[0]<<8) + s[1])<<8) + s[2])<<8) + s[3]; - s += 4; /* Size */ - - if (type == RESOLUTION_INFO_ID && len >= 16) { - image->dpi_x = - PS_FIXED_TO_FLOAT((s[0]<<8) + s[1], (s[2]<<8) + s[3]); - image->dpi_y = - PS_FIXED_TO_FLOAT((s[8]<<8) + s[9], (s[10]<<8) + s[11]); - break; - } - - s += len + ((len & 1) ? 1 : 0); /* Data */ - } - - pdc_free(p->pdc, app13); - break; - - case M_APP14: /* check for Adobe marker */ - length = get_2bytes(image->fp); - - for (i = 0; i < length-2; i++) { /* get contents of marker */ - b = pdc_fgetc(image->fp); - if (i < APP_MAX) /* store marker in appstring */ - appstring[i] = (unsigned char) b; - else - break; - } - - /* - * Check for Adobe application marker. It is known (per Adobe's TN5116) - * to contain the string "Adobe" at the start of the APP14 marker. - */ -#define PDF_STRING_Adobe "\101\144\157\142\145" - - if (length >= 12 && !strncmp(PDF_STRING_Adobe, (char *) appstring, 5)) - adobeflag = pdc_true; /* set Adobe flag */ - - break; - - case M_SOS: - markers_done = pdc_true; - length = get_2bytes(image->fp); - - /* - * If the scan doesn't contain all components it must be - * a multiscan image, which doesn't work in Acrobat. - */ - if (pdc_fgetc(image->fp) < image->components) { - errcode = PDF_E_JPEG_MULTISCAN; - goto PDF_JPEG_ERROR; - } - - /* account for the "number of components in scan" byte just read */ - for (length -= 3; length > 0; length--) { - if (pdc_feof(image->fp)) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_JPEG_ERROR; - } - (void) pdc_fgetc(image->fp); - } - break; - - case M_SOI: /* ignore markers without parameters */ - case M_EOI: - case M_TEM: - case M_RST0: - case M_RST1: - case M_RST2: - case M_RST3: - case M_RST4: - case M_RST5: - case M_RST6: - case M_RST7: - break; - - default: /* skip variable length markers */ - length = get_2bytes(image->fp); - for (length -= 2; length > 0; length--) { - if (pdc_feof(image->fp)) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_JPEG_ERROR; - } - (void) pdc_fgetc(image->fp); - } - break; - } - } - - /* do some sanity checks with the parameters */ - if (image->height <= 0 || image->width <= 0 || image->components <= 0) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_JPEG_ERROR; - } - - if (image->bpc != 8) { - errint = image->bpc; - errcode = PDF_E_IMAGE_BADDEPTH; - goto PDF_JPEG_ERROR; - } - - - { - switch (image->components) { - case 1: - /* spot color may have been applied */ - if (image->colorspace == pdc_undef) - image->colorspace = DeviceGray; - break; - - case 3: - image->colorspace = DeviceRGB; - break; - - case 4: - image->colorspace = DeviceCMYK; - break; - - default: - errint = image->components; - errcode = PDF_E_IMAGE_BADCOMP; - goto PDF_JPEG_ERROR; - } - } - - - if (image->imagemask) - { - if (image->components != 1) { - errcode = PDF_E_IMAGE_BADMASK; - goto PDF_JPEG_ERROR; - } - - if (p->compatibility <= PDC_1_3) { - errcode = PDF_E_IMAGE_MASK1BIT13; - goto PDF_JPEG_ERROR; - } else { - /* images with more than one bit will be written as /SMask, - * and don't require an /ImageMask entry. - */ - image->imagemask = pdc_false; - } - } - - /* special handling of Photoshop-generated CMYK JPEG files */ - if (adobeflag && p->colorspaces[image->colorspace].type == DeviceCMYK) { - image->invert = !image->invert; - } - - image->in_use = pdc_true; /* mark slot as used */ - - if (image->doinline) - pdf_put_inline_image(p, imageslot); - else - pdf_put_image(p, imageslot, pdc_true); - - return imageslot; - - PDF_JPEG_ERROR: - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - switch (errcode) - { - case PDF_E_IMAGE_ICC: - case PDF_E_IMAGE_ICC2: - case PDF_E_IMAGE_COLORIZE: - case PDF_E_JPEG_MULTISCAN: - case PDF_E_IMAGE_BADMASK: - pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0); - break; - - case PDC_E_IO_BADFORMAT: - pdc_set_errmsg(p->pdc, errcode, stemp, "JPEG", 0, 0); - break; - - case PDF_E_IMAGE_CORRUPT: - pdc_set_errmsg(p->pdc, errcode, "JPEG", stemp, 0, 0); - break; - - case PDF_E_JPEG_COMPRESSION: - case PDF_E_IMAGE_BADDEPTH: - case PDF_E_IMAGE_BADCOMP: - pdc_set_errmsg(p->pdc, errcode, - pdc_errprintf(p->pdc, "%d", errint), stemp, 0, 0); - break; - - case 0: /* error code and message already set */ - break; - } - } - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; -} - -#endif /* PDF_JPEG_SUPPORTED */ diff --git a/src/libs/pdflib/libs/pdflib/p_kerning.c b/src/libs/pdflib/libs/pdflib/p_kerning.c deleted file mode 100644 index 6237f20d31..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_kerning.c +++ /dev/null @@ -1,38 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_kerning.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib kerning routines - * - */ - -#include "p_intern.h" -#include "p_font.h" -#include "p_truetype.h" - - -PDFLIB_API float PDFLIB_CALL -PDF_get_kern_amount( PDF *p, int font, int firstchar, int secondchar) -{ - static const char fn[] = "PDF_get_kern_amount"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content | pdf_state_path), - "(p[%p], %d, %d, %d)", (void *) p, font, firstchar, secondchar)) - return (float) 0; - - pdc_warning(p->pdc, PDF_E_UNSUPP_KERNING, 0, 0, 0, 0); - - return (float) 0; -} - diff --git a/src/libs/pdflib/libs/pdflib/p_keyconn.h b/src/libs/pdflib/libs/pdflib/p_keyconn.h deleted file mode 100644 index 19db744d75..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_keyconn.h +++ /dev/null @@ -1,153 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_keyconn.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib shared keys connection lists - * - */ - -#ifndef P_KEYCONN_H -#define P_KEYCONN_H - -#if defined(P_IMAGE_C) || defined(P_XGSTATE_C) || defined(P_PARAMS_C) -static const pdc_keyconn gs_renderingintents[] = -{ - {"Auto", AutoIntent}, - {"AbsoluteColorimetric", AbsoluteColorimetric}, - {"RelativeColorimetric", RelativeColorimetric}, - {"Saturation", Saturation}, - {"Perceptual", Perceptual}, - {NULL, 0} -}; -#endif /* P_IMAGE_C || P_XGSTATE_C || P_PARAMS_C */ - -#if defined(P_XGSTATE_C) -static const pdc_keyconn gs_blendmodes[] = -{ - {"Normal", BM_Normal}, - {"Multiply", BM_Multiply}, - {"Screen", BM_Screen}, - {"Overlay", BM_Overlay}, - {"Darken", BM_Darken}, - {"Lighten", BM_Lighten}, - {"ColorDodge", BM_ColorDodge}, - {"ColorBurn", BM_ColorBurn}, - {"HardLight", BM_HardLight}, - {"SoftLight", BM_SoftLight}, - {"Difference", BM_Difference}, - {"Exclusion", BM_Exclusion}, - {"Hue", BM_Hue}, - {"Saturation", BM_Saturation}, - {"Color", BM_Color}, - {"Luminosity", BM_Luminosity}, - {NULL, 0} -}; -#endif /* P_XGSTATE_C */ - -#if defined(P_PDI_C) || defined(P_PARAMS_C) -static const pdc_keyconn pdf_usebox_keylist[] = -{ - {"art", use_art}, - {"bleed", use_bleed}, - {"crop", use_crop}, - {"media", use_media}, - {"trim", use_trim}, - {NULL, 0} -}; -#endif /* P_PDI_C || P_PARAMS_C */ - -#if defined(P_TEXT_C) || defined(P_PARAMS_C) || defined(P_BLOCK_C) -static const pdc_keyconn pdf_textformat_keylist[] = -{ - {"auto", pdc_auto}, - {"auto2", pdc_auto2}, - {"bytes", pdc_bytes}, - {"bytes2", pdc_bytes2}, - {"utf8", pdc_utf8}, - {"utf16", pdc_utf16}, - {"utf16be", pdc_utf16be}, - {"utf16le", pdc_utf16le}, - {NULL, 0} -}; -#endif /* P_TEXT_C || P_PARAMS_C || P_BLOCK_C */ - -#if defined(P_TEXT_C) || defined(P_IMAGE_C) || defined(P_BLOCK_C) -static const pdc_keyconn pdf_orientate_keylist[] = -{ - {"north", 0}, - {"west", 90}, - {"south", 180}, - {"east", 270}, - {NULL, 0} -}; -#endif /* P_TEXT_C || P_IMAGE_C || P_BLOCK_C */ - -#if defined(P_TEXT_C) || defined(P_IMAGE_C) || defined(P_BLOCK_C) -static const pdc_keyconn pdf_fitmethod_keylist[] = -{ - {"nofit", pdc_nofit}, - {"clip", pdc_clip}, - {"slice", pdc_slice}, - {"meet", pdc_meet}, - {"entire", pdc_entire}, - {"auto", pdc_tauto}, - {NULL, 0} -}; -#endif /* P_TEXT_C || P_IMAGE_C || P_BLOCK_C */ - -#if defined(P_FONT_C) || defined(P_HYPER_C) || defined(P_BLOCK_C) -static const pdc_keyconn pdf_fontstyle_keylist[] = -{ - {"normal", pdc_Normal}, - {"bold", pdc_Bold }, - {"italic", pdc_Italic}, - {"bolditalic", pdc_BoldItalic}, - {NULL, 0} -}; -#endif /* P_FONT_C || P_HYPER_C || P_BLOCK_C */ - -#if defined(P_COLOR_C) || defined(P_BLOCK_C) -static const pdc_keyconn pdf_colorspace_keylist[] = -{ - {"none", NoColor}, - {"gray", DeviceGray}, - {"rgb", DeviceRGB }, - {"cmyk", DeviceCMYK}, - {"spotname", Separation}, - {"spot", Separation}, - {"pattern", PatternCS}, - {"iccbasedgray", ICCBased}, - {"iccbasedrgb", ICCBased}, - {"iccbasedcmyk", ICCBased}, - {"lab", Lab}, - {NULL, 0} -}; -#endif /* P_COLOR_C || P_BLOCK_C */ - -#if defined(P_IMAGE_C) || defined(P_BLOCK_C) -typedef enum -{ - dpi_none = -999999, - dpi_internal = 0 -} -pdf_dpi_states; - -static const pdc_keyconn pdf_dpi_keylist[] = -{ - {"none", dpi_none}, - {"internal", dpi_internal}, - {NULL, 0} -}; -#endif /* P_IMAGE_C || P_BLOCK_C */ - -#endif /* P_KEYCONN_H */ diff --git a/src/libs/pdflib/libs/pdflib/p_pantlab.h b/src/libs/pdflib/libs/pdflib/p_pantlab.h deleted file mode 100644 index 041e7ea170..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_pantlab.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_pantlab.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib PANTONE spot LAB color table derived from - * PANTONE MATCHING SYSTEM - * - * PANTONE and PANTONE MATCHING SYSTEM is a registered trademark of - * Pantone,Inc. - * - */ - -#ifndef P_PANTLAB_H -#define P_PANTLAB_H - - -#endif /* P_PANTAB_H */ - diff --git a/src/libs/pdflib/libs/pdflib/p_params.c b/src/libs/pdflib/libs/pdflib/p_params.c deleted file mode 100644 index 656f402882..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_params.c +++ /dev/null @@ -1,1060 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_params.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib parameter handling - * - */ - -#define P_PARAMS_C - -#include "p_intern.h" -#include "p_font.h" -#include "p_image.h" - -/* - * PDF_get_parameter() and PDF_set_parameter() deal with strings, - * PDF_get_value() and PDF_set_value() deal with numerical values. - */ - -typedef struct -{ - char * name; /* parameter name */ - pdc_bool mod_zero; /* PDF_get_() modifier argument must be 0 */ - int get_scope; /* bit mask of legal states for PDF_get_() */ - int set_scope; /* bit mask of legal states for PDF_set_() */ -} pdf_parm_descr; - -static pdf_parm_descr parms[] = -{ -#define pdf_gen_parm_descr 1 -#include "p_params.h" -#undef pdf_gen_parm_descr - - { "", 0, 0, 0 } -}; - -enum -{ -#define pdf_gen_parm_enum 1 -#include "p_params.h" -#undef pdf_gen_parm_enum - - PDF_PARAMETER_LIMIT -}; - -static int -get_index(const char *key) -{ - int i; - - for (i = 0; i < PDF_PARAMETER_LIMIT; ++i) - if (strcmp(key, parms[i].name) == 0) - return i; - - return -1; -} - -static pdc_bool -pdf_bool_value(PDF *p, const char *key, const char *value) -{ - if (!strcmp(value, "true")) - return pdc_true; - - if (!strcmp(value, "false")) - return pdc_false; - - pdc_error(p->pdc, PDC_E_ILLARG_BOOL, key, value, 0, 0); - - return pdc_false; /* compilers love it */ -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_parameter(PDF *p, const char *key, const char *value) -{ - static const char fn[] = "PDF_set_parameter"; - pdc_usebox usebox = use_none; - pdc_text_format textformat = pdc_auto; - int i, k; - - if (key == NULL || !*key) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); - - i = get_index(key); - - if (!pdf_enter_api(p, fn, (pdf_state) pdf_state_all, - "(p[%p], \"%s\", \"%s\")\n", (void *) p, key, value)) - return; - - if (i == -1) - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - - if ((p->state_stack[p->state_sp] & parms[i].set_scope) == 0) - pdc_error(p->pdc, PDF_E_DOC_SCOPE_SET, key, pdf_current_scope(p), 0, 0); - - if (value == NULL) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "value", 0, 0, 0); - - switch (i) - { - case PDF_PARAMETER_PDIUSEBOX: - case PDF_PARAMETER_VIEWAREA: - case PDF_PARAMETER_VIEWCLIP: - case PDF_PARAMETER_PRINTAREA: - case PDF_PARAMETER_PRINTCLIP: - k = pdc_get_keycode(value, pdf_usebox_keylist); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - usebox = (pdc_usebox) k; - break; - - case PDF_PARAMETER_TEXTFORMAT: - case PDF_PARAMETER_HYPERTEXTFORMAT: - k = pdc_get_keycode(value, pdf_textformat_keylist); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - textformat = (pdc_text_format) k; - break; - } - - switch (i) - { - case PDF_PARAMETER_SEARCHPATH: - case PDF_PARAMETER_FONTAFM: - case PDF_PARAMETER_FONTPFM: - case PDF_PARAMETER_FONTOUTLINE: - case PDF_PARAMETER_HOSTFONT: - case PDF_PARAMETER_ENCODING: - case PDF_PARAMETER_ICCPROFILE: - case PDF_PARAMETER_STANDARDOUTPUTINTENT: - { - pdf_add_resource(p, key, value); - break; - } - - case PDF_PARAMETER_FLUSH: - if (p->binding != NULL && strcmp(p->binding, "C++")) - break; - - if (!strcmp(value, "none")) - p->flush = pdf_flush_none; - else if (!strcmp(value, "page")) - p->flush = (pdf_flush_state) (p->flush | pdf_flush_page); - else if (!strcmp(value, "content")) - p->flush = (pdf_flush_state) (p->flush | pdf_flush_content); - else if (!strcmp(value, "heavy")) - p->flush = (pdf_flush_state) (p->flush | pdf_flush_heavy); - else - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - - break; - - case PDF_PARAMETER_DEBUG: - { - const unsigned char *c; - - for (c = (const unsigned char *) value; *c; c++) { - p->debug[(int) *c] = 1; - - if (*c == 't') { - pdc_set_trace(p->pdc, "PDFlib " PDFLIB_VERSIONSTRING); - } - } - break; - } - - case PDF_PARAMETER_NODEBUG: - { - const unsigned char *c; - - for (c = (const unsigned char *) value; *c; c++) { - if (*c == 't') - pdc_set_trace(p->pdc, NULL); - - p->debug[(int) *c] = 0; - } - break; - } - - case PDF_PARAMETER_BINDING: - if (!p->binding) - p->binding = pdc_strdup(p->pdc, value); - break; - - case PDF_PARAMETER_HASTOBEPOS: - p->hastobepos = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_UNDERLINE: - p->underline = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_OVERLINE: - p->overline = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_STRIKEOUT: - p->strikeout = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_KERNING: - pdc_warning(p->pdc, PDF_E_UNSUPP_KERNING, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_AUTOSUBSETTING: - pdc_warning(p->pdc, PDF_E_UNSUPP_SUBSET, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_AUTOCIDFONT: - pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_UNICODEMAP: - pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_MASTERPASSWORD: - pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_USERPASSWORD: - pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_PERMISSIONS: - pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_COMPATIBILITY: - - if (!strcmp(value, "1.3")) - p->compatibility = PDC_1_3; - else if (!strcmp(value, "1.4")) - p->compatibility = PDC_1_4; - else if (!strcmp(value, "1.5")) - p->compatibility = PDC_1_5; - else - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - break; - - case PDF_PARAMETER_PDFX: - pdc_warning(p->pdc, PDF_E_UNSUPP_PDFX, 0, 0, 0, 0); - - break; - - - case PDF_PARAMETER_RESOURCEFILE: - if (p->resourcefilename) - { - pdc_free(p->pdc, p->resourcefilename); - p->resourcefilename = NULL; - } - p->resourcefilename = pdc_strdup(p->pdc, value); - p->resfilepending = pdc_true; - break; - - case PDF_PARAMETER_PREFIX: - if (p->prefix) - { - pdc_free(p->pdc, p->prefix); - p->prefix = NULL; - } - /* because of downward compatibility */ - p->prefix = pdc_strdup(p->pdc, &value[value[0] == '/' ? 1 : 0]); - break; - - case PDF_PARAMETER_WARNING: - pdc_set_warnings(p->pdc, pdf_bool_value(p, key, value)); - break; - - case PDF_PARAMETER_OPENWARNING: - p->debug['o'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_FONTWARNING: - p->debug['F'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_ICCWARNING: - p->debug['I'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_IMAGEWARNING: - p->debug['i'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_PDIWARNING: - p->debug['p'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_HONORICCPROFILE: - p->debug['e'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_GLYPHWARNING: - p->debug['g'] = (char) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_RENDERINGINTENT: - k = pdc_get_keycode(value, gs_renderingintents); - if (k == PDC_KEY_NOTFOUND) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - p->rendintent = (pdf_renderingintent) k; - break; - - case PDF_PARAMETER_PRESERVEOLDPANTONENAMES: - p->preserveoldpantonenames = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_SPOTCOLORLOOKUP: - p->spotcolorlookup = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_INHERITGSTATE: - p->inheritgs = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_PDISTRICT: - p->pdi_strict = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_PDIUSEBOX: - p->pdi_usebox = usebox; - break; - - case PDF_PARAMETER_PASSTHROUGH: - p->debug['P'] = (char) !pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_HIDETOOLBAR: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= HideToolbar; - break; - - case PDF_PARAMETER_HIDEMENUBAR: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= HideMenubar; - break; - - case PDF_PARAMETER_HIDEWINDOWUI: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= HideWindowUI; - break; - - case PDF_PARAMETER_FITWINDOW: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= FitWindow; - break; - - case PDF_PARAMETER_CENTERWINDOW: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= CenterWindow; - break; - - case PDF_PARAMETER_DISPLAYDOCTITLE: - if (pdf_bool_value(p, key, value)) - p->ViewerPreferences.flags |= DisplayDocTitle; - break; - - case PDF_PARAMETER_NONFULLSCREENPAGEMODE: - if (!strcmp(value, "useoutlines")) { - p->ViewerPreferences.flags |= NonFullScreenPageModeOutlines; - p->ViewerPreferences.flags &= ~NonFullScreenPageModeThumbs; - } else if (!strcmp(value, "usethumbs")) { - p->ViewerPreferences.flags &= ~NonFullScreenPageModeOutlines; - p->ViewerPreferences.flags |= NonFullScreenPageModeThumbs; - } else if (!strcmp(value, "usenone")) { - p->ViewerPreferences.flags &= ~NonFullScreenPageModeOutlines; - p->ViewerPreferences.flags &= ~NonFullScreenPageModeThumbs; - } else { - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - - break; - - case PDF_PARAMETER_DIRECTION: - if (!strcmp(value, "r2l")) { - p->ViewerPreferences.flags |= DirectionR2L; - } else if (!strcmp(value, "l2r")) { - p->ViewerPreferences.flags &= ~DirectionR2L; - } else { - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - break; - - case PDF_PARAMETER_VIEWAREA: - p->ViewerPreferences.ViewArea = usebox; - break; - - case PDF_PARAMETER_VIEWCLIP: - p->ViewerPreferences.ViewClip = usebox; - break; - - case PDF_PARAMETER_PRINTAREA: - p->ViewerPreferences.PrintArea = usebox; - break; - - case PDF_PARAMETER_PRINTCLIP: - p->ViewerPreferences.PrintClip = usebox; - break; - - case PDF_PARAMETER_TOPDOWN: - if (pdf_bool_value(p, key, value)) - p->ydirection = (float) -1.0; - else - p->ydirection = (float) 1.0; - break; - - case PDF_PARAMETER_USERCOORDINATES: - p->usercoordinates = pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_OPENACTION: - pdf_cleanup_destination(p, &p->open_action); - - pdf_parse_destination_optlist(p, - value, &p->open_action, 1, pdf_openaction); - break; - - case PDF_PARAMETER_OPENMODE: - if (!strcmp(value, "none")) { - p->open_mode = open_none; - } else if (!strcmp(value, "bookmarks")) { - p->open_mode = open_bookmarks; - } else if (!strcmp(value, "thumbnails")) { - p->open_mode = open_thumbnails; - } else if (!strcmp(value, "fullscreen")) { - p->open_mode = open_fullscreen; - } else { - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - break; - - case PDF_PARAMETER_BOOKMARKDEST: - pdf_cleanup_destination(p, &p->bookmark_dest); - - pdf_parse_destination_optlist(p, - value, &p->bookmark_dest, 0, pdf_bookmark); - break; - - case PDF_PARAMETER_FILLRULE: - if (!strcmp(value, "winding")) { - p->fillrule = pdf_fill_winding; - } else if (!strcmp(value, "evenodd")) { - p->fillrule = pdf_fill_evenodd; - } else { - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - break; - - case PDF_PARAMETER_TEXTFORMAT: - p->textformat = textformat; - break; - - case PDF_PARAMETER_HYPERTEXTFORMAT: - p->hypertextformat = textformat; - break; - - case PDF_PARAMETER_HYPERTEXTENCODING: - { - pdc_encoding enc; - - if (!*value) - { - enc = pdc_unicode; - } - else - { - enc = pdf_find_encoding(p, (const char *) value); - if (enc == pdc_invalidenc) - enc = pdf_insert_encoding(p, (const char *) value); - if (enc < 0 && enc != pdc_unicode) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); - } - p->hypertextencoding = enc; - break; - } - - /* deprecated */ - case PDF_PARAMETER_NATIVEUNICODE: - (void) pdf_bool_value(p, key, value); - break; - - case PDF_PARAMETER_TRANSITION: - pdf_set_transition(p, value); - break; - - case PDF_PARAMETER_BASE: - if (p->base) { - pdc_free(p->pdc, p->base); - p->base = NULL; - } - - p->base = pdc_strdup(p->pdc, value); - break; - - case PDF_PARAMETER_LAUNCHLINK_PARAMETERS: - if (p->launchlink_parameters) { - pdc_free(p->pdc, p->launchlink_parameters); - p->launchlink_parameters = NULL; - } - p->launchlink_parameters = pdc_strdup(p->pdc, value); - break; - - case PDF_PARAMETER_LAUNCHLINK_OPERATION: - if (p->launchlink_operation) { - pdc_free(p->pdc, p->launchlink_operation); - p->launchlink_operation = NULL; - } - p->launchlink_operation = pdc_strdup(p->pdc, value); - break; - - case PDF_PARAMETER_LAUNCHLINK_DEFAULTDIR: - if (p->launchlink_defaultdir) { - pdc_free(p->pdc, p->launchlink_defaultdir); - p->launchlink_defaultdir = NULL; - } - p->launchlink_defaultdir = pdc_strdup(p->pdc, value); - break; - - case PDF_PARAMETER_TRACE: - if (pdf_bool_value(p, key, value)) { - p->debug['t'] = 1; - pdc_set_trace(p->pdc, "PDFlib " PDFLIB_VERSIONSTRING); - } else { - pdc_set_trace(p->pdc, NULL); - p->debug['t'] = 0; - } - break; - - case PDF_PARAMETER_TRACEFILE: - pdc_set_tracefile(p->pdc, value); - break; - - case PDF_PARAMETER_TRACEMSG: - /* do nothing -- client-supplied string will show up in the trace */ - break; - - case PDF_PARAMETER_SERIAL: - case PDF_PARAMETER_LICENSE: - break; - - case PDF_PARAMETER_LICENSEFILE: - break; - - default: - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - break; - } /* switch */ -} /* PDF_set_parameter */ - -static float -pdf_value(PDF *p, const char *key, float value, int minver) -{ - if (p->compatibility < minver) - pdc_error(p->pdc, PDC_E_PAR_VERSION, - key, pdc_errprintf(p->pdc, "%d.%d", minver/10, minver%10), 0, 0); - - return value; -} - -static float -pdf_pos_value(PDF *p, const char *key, float value, int minver) -{ - if (p->compatibility < minver) - pdc_error(p->pdc, PDC_E_PAR_VERSION, - key, pdc_errprintf(p->pdc, "%d.%d", minver/10, minver%10), 0, 0); - - if (value <= (float) 0) - pdc_error(p->pdc, PDC_E_PAR_ILLVALUE, - pdc_errprintf(p->pdc, "%f", value), key, 0, 0); - - return value; -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_value(PDF *p, const char *key, float value) -{ - static const char fn[] = "PDF_set_value"; - int i; - int ivalue = (int) value; - - if (key == NULL || !*key) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); - - i = get_index(key); - - if (!pdf_enter_api(p, fn, (pdf_state) pdf_state_all, - "(p[%p], \"%s\", %g)\n", (void *) p, key, value)) - return; - - if (i == -1) - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - - if ((p->state_stack[p->state_sp] & parms[i].set_scope) == 0) - pdc_error(p->pdc, PDF_E_DOC_SCOPE_SET, key, pdf_current_scope(p), 0, 0); - - switch (i) - { - case PDF_PARAMETER_COMPRESS: - if (ivalue < 0 || ivalue > 9) - pdc_error(p->pdc, PDC_E_PAR_ILLVALUE, - pdc_errprintf(p->pdc, "%f", value), key, 0, 0); - - if (pdc_get_compresslevel(p->out) != ivalue) - { - /* - * We must restart the compression engine and start a new - * contents section if we're in the middle of a page. - */ - if (PDF_GET_STATE(p) == pdf_state_page) { - pdf_end_contents_section(p); - pdc_set_compresslevel(p->out, ivalue); - pdf_begin_contents_section(p); - } else - pdc_set_compresslevel(p->out, ivalue); - } - - break; - - case PDF_PARAMETER_FLOATDIGITS: - if (3 <= ivalue && ivalue <= 6) - pdc_set_floatdigits(p->pdc, ivalue); - else - pdc_error(p->pdc, PDC_E_PAR_ILLVALUE, - pdc_errprintf(p->pdc, "%d", ivalue), key, 0, 0); - break; - - case PDF_PARAMETER_PAGEWIDTH: - if (p->ydirection == -1) - pdc_error(p->pdc, PDF_E_PAGE_ILLCHGSIZE, 0, 0, 0, 0); - if (p->compatibility >= PDC_1_3 && - (value < PDF_ACRO4_MINPAGE || value > PDF_ACRO4_MAXPAGE)) - pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO4, 0, 0, 0, 0); - - p->width = pdf_pos_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_PAGEHEIGHT: - if (p->ydirection == -1) - pdc_error(p->pdc, PDF_E_PAGE_ILLCHGSIZE, 0, 0, 0, 0); - if (p->compatibility >= PDC_1_3 && - (value < PDF_ACRO4_MINPAGE || value > PDF_ACRO4_MAXPAGE)) - pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO4, 0, 0, 0, 0); - - p->height = pdf_pos_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_CROPBOX_LLX: - p->CropBox.llx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_CROPBOX_LLY: - p->CropBox.lly = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_CROPBOX_URX: - p->CropBox.urx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_CROPBOX_URY: - p->CropBox.ury = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_BLEEDBOX_LLX: - p->BleedBox.llx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_BLEEDBOX_LLY: - p->BleedBox.lly = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_BLEEDBOX_URX: - p->BleedBox.urx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_BLEEDBOX_URY: - p->BleedBox.ury = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_TRIMBOX_LLX: - p->TrimBox.llx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_TRIMBOX_LLY: - p->TrimBox.lly = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_TRIMBOX_URX: - p->TrimBox.urx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_TRIMBOX_URY: - p->TrimBox.ury = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_ARTBOX_LLX: - p->ArtBox.llx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_ARTBOX_LLY: - p->ArtBox.lly = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_ARTBOX_URX: - p->ArtBox.urx = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_ARTBOX_URY: - p->ArtBox.ury = pdf_value(p, key, value, PDC_1_3); - break; - - case PDF_PARAMETER_LEADING: - pdf_set_leading(p, value); - break; - - case PDF_PARAMETER_TEXTRISE: - pdf_set_text_rise(p, value); - break; - - case PDF_PARAMETER_HORIZSCALING: - pdf_set_horiz_scaling(p, value); - break; - - case PDF_PARAMETER_TEXTRENDERING: - pdf_set_text_rendering(p, (int) value); - break; - - case PDF_PARAMETER_CHARSPACING: - pdf_set_char_spacing(p, value); - break; - - case PDF_PARAMETER_WORDSPACING: - pdf_set_word_spacing(p, value); - break; - - case PDF_PARAMETER_DURATION: - pdf_set_duration(p, value); - break; - - case PDF_PARAMETER_DEFAULTGRAY: - break; - - case PDF_PARAMETER_DEFAULTRGB: - break; - - case PDF_PARAMETER_DEFAULTCMYK: - break; - - case PDF_PARAMETER_SETCOLOR_ICCPROFILEGRAY: - break; - - case PDF_PARAMETER_SETCOLOR_ICCPROFILERGB: - break; - - case PDF_PARAMETER_SETCOLOR_ICCPROFILECMYK: - break; - - case PDF_PARAMETER_SUBSETLIMIT: - pdc_warning(p->pdc, PDF_E_UNSUPP_SUBSET, 0, 0, 0, 0); - break; - - case PDF_PARAMETER_SUBSETMINSIZE: - pdc_warning(p->pdc, PDF_E_UNSUPP_SUBSET, 0, 0, 0, 0); - break; - - default: - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - break; - } /* switch */ -} /* PDF_set_value */ - -PDFLIB_API float PDFLIB_CALL -PDF_get_value(PDF *p, const char *key, float mod) -{ - static const char fn[] = "PDF_get_value"; - int i = -1; - int imod = (int) mod; - float result = (float) 0; - - /* some parameters can be retrieved with p == 0. - */ - if (key != NULL && (i = get_index(key)) != -1) - { - switch (i) - { - case PDF_PARAMETER_MAJOR: - result = PDFLIB_MAJORVERSION; - return result; - - case PDF_PARAMETER_MINOR: - result = PDFLIB_MINORVERSION; - return result; - - case PDF_PARAMETER_REVISION: - result = PDFLIB_REVISION; - return result; - } /* switch */ - } - - if (!pdf_enter_api(p, fn, (pdf_state) pdf_state_all, - "(p[%p], \"%s\", %g)", (void *) p, key, mod)) - return (float) 0; - - if (i == -1) - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - - if ((p->state_stack[p->state_sp] & parms[i].get_scope) == 0) - pdc_error(p->pdc, PDF_E_DOC_SCOPE_GET, key, pdf_current_scope(p), 0, 0); - - if (key == NULL || !*key) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); - - if (parms[i].mod_zero && mod != (float) 0) - pdc_error(p->pdc, PDC_E_PAR_ILLVALUE, - pdc_errprintf(p->pdc, "%f", mod), key, 0, 0); - - switch (i) - { - case PDF_PARAMETER_IMAGEWIDTH: - case PDF_PARAMETER_IMAGEHEIGHT: - case PDF_PARAMETER_RESX: - case PDF_PARAMETER_RESY: - PDF_INPUT_HANDLE(p, imod) - pdf_check_handle(p, imod, pdc_imagehandle); - break; - - case PDF_PARAMETER_FONTMAXCODE: - case PDF_PARAMETER_CAPHEIGHT: - case PDF_PARAMETER_ASCENDER: - case PDF_PARAMETER_DESCENDER: - PDF_INPUT_HANDLE(p, imod) - pdf_check_handle(p, imod, pdc_fonthandle); - break; - } - - switch (i) - { - case PDF_PARAMETER_PAGEWIDTH: - result = p->width; - break; - - case PDF_PARAMETER_PAGEHEIGHT: - result = p->height; - break; - - case PDF_PARAMETER_IMAGEWIDTH: - result = (float) (p->images[imod].width); - break; - - case PDF_PARAMETER_IMAGEHEIGHT: - result = (float) fabs((double) (p->images[imod].height)); - break; - - case PDF_PARAMETER_RESX: - result = (float) (p->images[imod].dpi_x); - break; - - case PDF_PARAMETER_RESY: - result = (float) (p->images[imod].dpi_y); - break; - - case PDF_PARAMETER_IMAGE_ICCPROFILE: - break; - - case PDF_PARAMETER_ICCCOMPONENTS: - break; - - case PDF_PARAMETER_CURRENTX: - result = (float) (p->gstate[p->sl].x); - break; - - case PDF_PARAMETER_CURRENTY: - result = (float) (p->gstate[p->sl].y); - break; - - case PDF_PARAMETER_TEXTX: - result = (float) (p->tstate[p->sl].m.e); - break; - - case PDF_PARAMETER_TEXTY: - result = (float) (p->tstate[p->sl].m.f); - break; - - case PDF_PARAMETER_WORDSPACING: - result = (float) (p->tstate[p->sl].w); - break; - - case PDF_PARAMETER_CHARSPACING: - result = (float) (p->tstate[p->sl].c); - break; - - case PDF_PARAMETER_HORIZSCALING: - result = pdf_get_horiz_scaling(p); - break; - - case PDF_PARAMETER_TEXTRISE: - result = (float) (p->tstate[p->sl].rise); - break; - - case PDF_PARAMETER_LEADING: - result = (float) (p->tstate[p->sl].l); - break; - - case PDF_PARAMETER_TEXTRENDERING: - result = (float) (p->tstate[p->sl].mode); - break; - - case PDF_PARAMETER_FONT: - result = (float) (pdf_get_font(p)); - if (p->hastobepos) result += 1; \ - break; - - case PDF_PARAMETER_MONOSPACE: - result = (float) pdf_get_monospace(p); - break; - - case PDF_PARAMETER_FONTSIZE: - result = (float) (pdf_get_fontsize(p)); - break; - - case PDF_PARAMETER_FONTMAXCODE: - result = (float) (p->fonts[imod].numOfCodes - 1); - break; - - case PDF_PARAMETER_CAPHEIGHT: - result = (float) (p->fonts[imod].capHeight / (float) 1000); - break; - - case PDF_PARAMETER_ASCENDER: - result = (float) (p->fonts[imod].ascender / (float) 1000); - break; - - case PDF_PARAMETER_DESCENDER: - result = (float) (p->fonts[imod].descender / (float) 1000); - break; - - case PDF_PARAMETER_SUBSETLIMIT: - break; - - default: - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - break; - } /* switch */ - - pdc_trace(p->pdc, "[%g]\n", result); - return result; -} /* PDF_get_value */ - -PDFLIB_API const char * PDFLIB_CALL -PDF_get_parameter(PDF *p, const char *key, float mod) -{ - static const char fn[] = "PDF_get_parameter"; - int i = -1; - const char *result = ""; - - /* some parameters can be retrieved with p == 0. - */ - if (key != NULL && (i = get_index(key)) != -1) - { - switch (i) - { - case PDF_PARAMETER_VERSION: - result = PDFLIB_VERSIONSTRING; - return result; - - case PDF_PARAMETER_PDI: - result = "false"; - return result; - } /* switch */ - } - - if (!pdf_enter_api(p, fn, (pdf_state) pdf_state_all, - "(p[%p], \"%s\", %g);", (void *) p, key, mod)) - return ""; - - if (key == NULL || !*key) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); - - if (i == -1) - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - - if ((p->state_stack[p->state_sp] & parms[i].get_scope) == 0) - pdc_error(p->pdc, PDF_E_DOC_SCOPE_GET, key, pdf_current_scope(p), 0, 0); - - if (parms[i].mod_zero && mod != (float) 0) - pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, - pdc_errprintf(p->pdc, "%f", mod), key, 0, 0); - - switch (i) - { - case PDF_PARAMETER_FONTNAME: - result = pdf_get_fontname(p); - break; - - case PDF_PARAMETER_FONTSTYLE: - result = pdf_get_fontstyle(p); - break; - - case PDF_PARAMETER_FONTENCODING: - result = pdf_get_fontencoding(p); - break; - - case PDF_PARAMETER_UNDERLINE: - result = PDC_BOOLSTR(p->underline); - break; - - case PDF_PARAMETER_OVERLINE: - result = PDC_BOOLSTR(p->overline); - break; - - case PDF_PARAMETER_STRIKEOUT: - result = PDC_BOOLSTR(p->strikeout); - break; - - case PDF_PARAMETER_INHERITGSTATE: - result = PDC_BOOLSTR(p->inheritgs); - break; - - case PDF_PARAMETER_SCOPE: - switch (p->state_stack[p->state_sp]) { - case pdf_state_object: result = "object"; break; - case pdf_state_document:result = "document"; break; - case pdf_state_page: result = "page"; break; - case pdf_state_pattern: result = "pattern"; break; - case pdf_state_template:result = "template"; break; - case pdf_state_path: result = "path"; break; - default: result = "(unknown)"; break; - } - break; - - case PDF_PARAMETER_TEXTFORMAT: - result = pdc_get_keyword(p->textformat, pdf_textformat_keylist); - break; - - case PDF_PARAMETER_HYPERTEXTFORMAT: - result = pdc_get_keyword(p->hypertextformat,pdf_textformat_keylist); - break; - - case PDF_PARAMETER_HYPERTEXTENCODING: - result = pdf_get_encoding_name(p, p->hypertextencoding); - break; - - default: - pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); - break; - } /* switch */ - - pdc_trace(p->pdc, "[%s]\n", result); - return result; -} /* PDF_get_parameter */ diff --git a/src/libs/pdflib/libs/pdflib/p_params.h b/src/libs/pdflib/libs/pdflib/p_params.h deleted file mode 100644 index a0fd73b734..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_params.h +++ /dev/null @@ -1,320 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_params.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib parameter table - * - */ - -#if pdf_gen_parm_enum -#define pdf_gen1(code, name, zero, scope) PDF_PARAMETER_##code, -#define pdf_gen2(code, name, zero, gscope, sscope) PDF_PARAMETER_##code, -#elif pdf_gen_parm_descr -#define pdf_gen1(code, name, zero, scope) \ - { name, zero, scope, scope }, -#define pdf_gen2(code, name, zero, gscope, sscope) \ - { name, zero, gscope, sscope }, -#else -#error invalid inclusion of generator file -#endif - -/* - List of unsupported debug parameters: - 2 disable the search for Windows 2000/XP's color directory via mscms.dll - a ASCIIHex output for fonts and images - c trace calloc calls - e extract embedded ICC profiles from image files - f trace free calls - F throw an exception if a font is unavailable (instead of returning -1); - g throw an exception if a glyph cannot be shown; - h disable host font processing - i throw an exception when an image is unavailable - I throw an exception if a ICC is unavailable (instead of returning -1); - m trace malloc calls - o throw an exception if the PDF output file can't be opened - P disable pass-through mode for TIFF images - p throw an exception if an imported PDF is unavailable - r trace realloc calls - t API function name and parameter logging to tracefile enabled - - On by default: e F I -*/ - - -/* - * ---------------------------------------------------------------------- - * Setup - * ---------------------------------------------------------------------- - */ - -pdf_gen1(OPENWARNING, "openwarning", 1, pdf_state_all) -pdf_gen1(COMPRESS, "compress", 1, pdf_state_page | pdf_state_document) -pdf_gen1(FLUSH, "flush", 1, pdf_state_all) -pdf_gen1(RESOURCEFILE, "resourcefile", 1, pdf_state_all) -pdf_gen1(COMPATIBILITY, "compatibility",1, pdf_state_object) -pdf_gen1(PDFX, "pdfx", 1, pdf_state_object) -pdf_gen1(PREFIX, "prefix", 1, pdf_state_all) -pdf_gen1(SEARCHPATH, "SearchPath", 1, pdf_state_all) -pdf_gen1(ASCIIFILE, "asciifile", 1, pdf_state_all) -pdf_gen1(WARNING, "warning", 1, pdf_state_all) -pdf_gen1(LICENSE, "license", 1, pdf_state_object) -pdf_gen1(LICENSEFILE, "licensefile", 1, pdf_state_object) -pdf_gen1(TRACE, "trace", 1, pdf_state_all) -pdf_gen1(TRACEFILE, "tracefile", 1, pdf_state_all) -pdf_gen1(TRACEMSG, "tracemsg", 1, pdf_state_all) - -/* Unsupported */ -pdf_gen1(SERIAL, "serial", 1, pdf_state_object) -pdf_gen1(FLOATDIGITS, "floatdigits", 1, pdf_state_all) -pdf_gen1(BINDING, "binding", 1, pdf_state_all) -pdf_gen1(HASTOBEPOS, "hastobepos", 1, pdf_state_all) -pdf_gen1(DEBUG, "debug", 1, pdf_state_all) -pdf_gen1(NODEBUG, "nodebug", 1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Versioning - * ---------------------------------------------------------------------- - */ - -pdf_gen1(MAJOR, "major", 1, pdf_state_all) -pdf_gen1(MINOR, "minor", 1, pdf_state_all) -pdf_gen1(REVISION, "revision", 1, pdf_state_all) -pdf_gen1(VERSION, "version", 1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Page - * ---------------------------------------------------------------------- - */ - -pdf_gen1(PAGEWIDTH, "pagewidth", 1, pdf_state_page | pdf_state_path) -pdf_gen1(PAGEHEIGHT, "pageheight", 1, pdf_state_page | pdf_state_path) -pdf_gen1(CROPBOX_LLX, "CropBox/llx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(CROPBOX_LLY, "CropBox/lly", 1, pdf_state_page | pdf_state_path) -pdf_gen1(CROPBOX_URX, "CropBox/urx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(CROPBOX_URY, "CropBox/ury", 1, pdf_state_page | pdf_state_path) -pdf_gen1(BLEEDBOX_LLX, "BleedBox/llx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(BLEEDBOX_LLY, "BleedBox/lly", 1, pdf_state_page | pdf_state_path) -pdf_gen1(BLEEDBOX_URX, "BleedBox/urx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(BLEEDBOX_URY, "BleedBox/ury", 1, pdf_state_page | pdf_state_path) -pdf_gen1(TRIMBOX_LLX, "TrimBox/llx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(TRIMBOX_LLY, "TrimBox/lly", 1, pdf_state_page | pdf_state_path) -pdf_gen1(TRIMBOX_URX, "TrimBox/urx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(TRIMBOX_URY, "TrimBox/ury", 1, pdf_state_page | pdf_state_path) -pdf_gen1(ARTBOX_LLX, "ArtBox/llx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(ARTBOX_LLY, "ArtBox/lly", 1, pdf_state_page | pdf_state_path) -pdf_gen1(ARTBOX_URX, "ArtBox/urx", 1, pdf_state_page | pdf_state_path) -pdf_gen1(ARTBOX_URY, "ArtBox/ury", 1, pdf_state_page | pdf_state_path) - - -/* - * ---------------------------------------------------------------------- - * Font - * ---------------------------------------------------------------------- - */ - -pdf_gen1(FONTAFM, "FontAFM", 1, pdf_state_all) -pdf_gen1(FONTPFM, "FontPFM", 1, pdf_state_all) -pdf_gen1(FONTOUTLINE, "FontOutline", 1, pdf_state_all) -pdf_gen1(HOSTFONT, "HostFont", 1, pdf_state_all) -pdf_gen1(ENCODING, "Encoding", 1, pdf_state_all) -pdf_gen1(FONTWARNING, "fontwarning", 1, pdf_state_all) -pdf_gen1(KERNING, "kerning", 1, pdf_state_all) -pdf_gen1(SUBSETLIMIT, "subsetlimit", 1, pdf_state_all) -pdf_gen1(SUBSETMINSIZE, "subsetminsize",1, pdf_state_all) -pdf_gen1(AUTOSUBSETTING,"autosubsetting",1, pdf_state_all) -pdf_gen1(AUTOCIDFONT, "autocidfont", 1, pdf_state_all) -pdf_gen1(FONT, "font", 1, pdf_state_content) -pdf_gen1(FONTSIZE, "fontsize", 1, pdf_state_content) -pdf_gen1(FONTNAME, "fontname", 1, pdf_state_content) -pdf_gen1(FONTSTYLE, "fontstyle", 1, pdf_state_content) -pdf_gen1(FONTENCODING, "fontencoding", 1, pdf_state_content) -pdf_gen1(MONOSPACE, "monospace", 1, pdf_state_content) -pdf_gen1(FONTMAXCODE, "fontmaxcode", 0, pdf_state_all) -pdf_gen1(CAPHEIGHT, "capheight", 0, pdf_state_all) -pdf_gen1(ASCENDER, "ascender", 0, pdf_state_all) -pdf_gen1(DESCENDER, "descender", 0, pdf_state_all) -pdf_gen1(UNICODEMAP, "unicodemap", 1, pdf_state_all) - -/* deprecated */ -pdf_gen1(NATIVEUNICODE, "nativeunicode",1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Text - * ---------------------------------------------------------------------- - */ - -pdf_gen1(TEXTX, "textx", 1, pdf_state_content) -pdf_gen1(TEXTY, "texty", 1, pdf_state_content) -pdf_gen1(LEADING, "leading", 1, pdf_state_content) -pdf_gen1(TEXTRISE, "textrise", 1, pdf_state_content) -pdf_gen1(HORIZSCALING, "horizscaling", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(TEXTRENDERING, "textrendering",1, pdf_state_content) -pdf_gen1(CHARSPACING, "charspacing", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(WORDSPACING, "wordspacing", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(UNDERLINE, "underline", 1, pdf_state_content) -pdf_gen1(OVERLINE, "overline", 1, pdf_state_content) -pdf_gen1(STRIKEOUT, "strikeout", 1, pdf_state_content) -pdf_gen1(TEXTFORMAT, "textformat", 1, pdf_state_all) -pdf_gen1(GLYPHWARNING, "glyphwarning", 1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Graphics - * ---------------------------------------------------------------------- - */ - -pdf_gen1(CURRENTX, "currentx", 1, pdf_state_content | pdf_state_path) -pdf_gen1(CURRENTY, "currenty", 1, pdf_state_content | pdf_state_path) -pdf_gen1(FILLRULE, "fillrule", 1, pdf_state_content) -pdf_gen1(SCOPE, "scope", 1, pdf_state_all) -pdf_gen1(TOPDOWN, "topdown", 1, pdf_state_document) - - -/* - * ---------------------------------------------------------------------- - * Color - * ---------------------------------------------------------------------- - */ - -pdf_gen1(SETCOLOR_ICCPROFILEGRAY, "setcolor:iccprofilegray", 1, - pdf_state_document | pdf_state_content) -pdf_gen1(SETCOLOR_ICCPROFILERGB, "setcolor:iccprofilergb", 1, - pdf_state_document | pdf_state_content) -pdf_gen1(SETCOLOR_ICCPROFILECMYK, "setcolor:iccprofilecmyk", 1, - pdf_state_document | pdf_state_content) -pdf_gen1(IMAGE_ICCPROFILE,"image:iccprofile", 0, - pdf_state_path | pdf_state_content | pdf_state_document) -pdf_gen1(ICCWARNING, "iccwarning", 1, pdf_state_all) -pdf_gen1(HONORICCPROFILE, "honoriccprofile", 1, pdf_state_all) -pdf_gen1(ICCCOMPONENTS, "icccomponents", 0, pdf_state_all) -pdf_gen1(ICCPROFILE, "ICCProfile", 1, pdf_state_all) -pdf_gen1(STANDARDOUTPUTINTENT, "StandardOutputIntent", 1, pdf_state_all) -pdf_gen1(RENDERINGINTENT, "renderingintent", 1, pdf_state_all) - -pdf_gen1(DEFAULTRGB, "defaultrgb", 1, pdf_state_content | pdf_state_path) -pdf_gen1(DEFAULTGRAY, "defaultgray", 1, pdf_state_content | pdf_state_path) -pdf_gen1(DEFAULTCMYK, "defaultcmyk", 1, pdf_state_content | pdf_state_path) - -pdf_gen1(PRESERVEOLDPANTONENAMES, "preserveoldpantonenames", 1, pdf_state_all) -pdf_gen1(SPOTCOLORLOOKUP, "spotcolorlookup", 1, pdf_state_all) - -/* - * ---------------------------------------------------------------------- - * Image - * ---------------------------------------------------------------------- - */ - -pdf_gen1(IMAGEWARNING, "imagewarning", 1, pdf_state_all) -pdf_gen1(PASSTHROUGH, "passthrough", 1, pdf_state_all) -pdf_gen1(IMAGEWIDTH, "imagewidth", 0, - pdf_state_path | pdf_state_content | pdf_state_document) -pdf_gen1(IMAGEHEIGHT, "imageheight", 0, - pdf_state_path | pdf_state_content | pdf_state_document) -pdf_gen1(RESX, "resx", 0, - pdf_state_path | pdf_state_content | pdf_state_document) -pdf_gen1(RESY, "resy", 0, - pdf_state_path | pdf_state_content | pdf_state_document) - -/* deprecated */ -pdf_gen1(INHERITGSTATE, "inheritgstate",1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * PDI - * ---------------------------------------------------------------------- - */ - -pdf_gen1(PDI, "pdi", 1, pdf_state_all) -pdf_gen1(PDIWARNING, "pdiwarning", 1, pdf_state_all) -pdf_gen1(PDIUSEBOX, "pdiusebox", 1, pdf_state_all) -pdf_gen1(PDISTRICT, "pdistrict", 1, pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Hypertext - * ---------------------------------------------------------------------- - */ - -pdf_gen1(HYPERTEXTFORMAT, "hypertextformat", 1, pdf_state_all) -pdf_gen1(HYPERTEXTENCODING, "hypertextencoding", 1, pdf_state_all) -pdf_gen1(USERCOORDINATES, "usercoordinates", 1, pdf_state_all) - -pdf_gen1(HIDETOOLBAR, "hidetoolbar", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(HIDEMENUBAR, "hidemenubar", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(HIDEWINDOWUI, "hidewindowui", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(FITWINDOW, "fitwindow", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(CENTERWINDOW, "centerwindow", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(DISPLAYDOCTITLE, "displaydoctitle", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(NONFULLSCREENPAGEMODE, "nonfullscreenpagemode", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(DIRECTION, "direction", 1, - pdf_state_content | pdf_state_document) - -pdf_gen1(VIEWAREA, "viewarea", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(VIEWCLIP, "viewclip", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(PRINTAREA, "printarea", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(PRINTCLIP, "printclip", 1, - pdf_state_content | pdf_state_document) - -pdf_gen1(OPENACTION, "openaction", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(OPENMODE, "openmode", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(BOOKMARKDEST, "bookmarkdest", 1, - pdf_state_content | pdf_state_document) -pdf_gen1(TRANSITION, "transition", 1, pdf_state_all) -pdf_gen1(DURATION, "duration", 1, pdf_state_all) -pdf_gen1(BASE, "base", 1, - pdf_state_content | pdf_state_document) - -pdf_gen1(LAUNCHLINK_PARAMETERS, "launchlink:parameters", 1, - pdf_state_all) -pdf_gen1(LAUNCHLINK_OPERATION, "launchlink:operation", 1, - pdf_state_all) -pdf_gen1(LAUNCHLINK_DEFAULTDIR, "launchlink:defaultdir", 1, - pdf_state_all) - - -/* - * ---------------------------------------------------------------------- - * Security - * ---------------------------------------------------------------------- - */ - -pdf_gen1(USERPASSWORD, "userpassword", 1, pdf_state_object) -pdf_gen1(MASTERPASSWORD,"masterpassword",1, pdf_state_object) -pdf_gen1(PERMISSIONS, "permissions", 1, pdf_state_object) - -#undef pdf_gen1 -#undef pdf_gen2 diff --git a/src/libs/pdflib/libs/pdflib/p_pattern.c b/src/libs/pdflib/libs/pdflib/p_pattern.c deleted file mode 100644 index 9a4b10e9e7..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_pattern.c +++ /dev/null @@ -1,216 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_pattern.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib pattern routines - * - */ - -#include "p_intern.h" -#include "p_image.h" -#include "p_font.h" - -void -pdf_init_pattern(PDF *p) -{ - int i; - - p->pattern_number = 0; - p->pattern_capacity = PATTERN_CHUNKSIZE; - - p->pattern = (pdf_pattern *) pdc_malloc(p->pdc, - sizeof(pdf_pattern) * p->pattern_capacity, "pdf_init_pattern"); - - for (i = 0; i < p->pattern_capacity; i++) { - p->pattern[i].used_on_current_page = pdc_false; - p->pattern[i].obj_id = PDC_BAD_ID; - } -} - -void -pdf_grow_pattern(PDF *p) -{ - int i; - - p->pattern = (pdf_pattern *) pdc_realloc(p->pdc, p->pattern, - sizeof(pdf_pattern) * 2 * p->pattern_capacity, "pdf_grow_pattern"); - - for (i = p->pattern_capacity; i < 2 * p->pattern_capacity; i++) { - p->pattern[i].used_on_current_page = pdc_false; - p->pattern[i].obj_id = PDC_BAD_ID; - } - - p->pattern_capacity *= 2; -} - -void -pdf_write_page_pattern(PDF *p) -{ - int i, total = 0; - - for (i = 0; i < p->pattern_number; i++) - if (p->pattern[i].used_on_current_page) - total++; - - if (total > 0) { - pdc_puts(p->out, "/Pattern"); - - pdc_begin_dict(p->out); /* pattern */ - - for (i = 0; i < p->pattern_number; i++) { - if (p->pattern[i].used_on_current_page) { - p->pattern[i].used_on_current_page = pdc_false; /* reset */ - pdc_printf(p->out, "/P%d %ld 0 R\n", i, p->pattern[i].obj_id); - } - } - - pdc_end_dict(p->out); /* pattern */ - } -} - -void -pdf_cleanup_pattern(PDF *p) -{ - if (p->pattern) { - pdc_free(p->pdc, p->pattern); - p->pattern = NULL; - } -} - -/* Start a new pattern definition. */ -PDFLIB_API int PDFLIB_CALL -PDF_begin_pattern( - PDF *p, - float width, - float height, - float xstep, - float ystep, - int painttype) -{ - static const char fn[] = "PDF_begin_pattern"; - int slot = -1; - - if (!pdf_enter_api(p, fn, pdf_state_document, - "(p[%p], %g, %g, %g, %g, %d)", - (void *) p, width, height, xstep, ystep, painttype)) - { - PDF_RETURN_HANDLE(p, slot) - } - - if (width <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "width", 0, 0, 0); - - if (height <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "height", 0, 0, 0); - - if (painttype != 1 && painttype != 2) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "painttype", pdc_errprintf(p->pdc, "%d", painttype), 0, 0); - - if (p->pattern_number == p->pattern_capacity) - pdf_grow_pattern(p); - - p->pattern[p->pattern_number].obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); - p->pattern[p->pattern_number].painttype = painttype; - - p->height = height; - p->width = width; - p->thumb_id = PDC_BAD_ID; - PDF_PUSH_STATE(p, fn, pdf_state_pattern); - p->next_content = 0; - p->contents = c_page; - p->sl = 0; - - pdf_init_tstate(p); - pdf_init_gstate(p); - pdf_init_cstate(p); - - pdc_begin_dict(p->out); /* pattern dict*/ - - p->res_id = pdc_alloc_id(p->out); - - pdc_puts(p->out, "/PatternType 1\n"); /* tiling pattern */ - - /* colored or uncolored pattern */ - pdc_printf(p->out, "/PaintType %d\n", painttype); - pdc_puts(p->out, "/TilingType 1\n"); /* constant spacing */ - - pdc_printf(p->out, "/BBox[0 0 %f %f]\n", p->width, p->height); - - pdc_printf(p->out, "/XStep %f\n", xstep); - pdc_printf(p->out, "/YStep %f\n", ystep); - - pdc_printf(p->out, "/Resources %ld 0 R\n", p->res_id); - - p->length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", p->length_id); - - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - pdc_end_dict(p->out); /* pattern dict*/ - pdc_begin_pdfstream(p->out); - - p->next_content++; - - slot = p->pattern_number; - p->pattern_number++; - - /* top-down y-coordinates */ - pdf_set_topdownsystem(p, height); - - PDF_RETURN_HANDLE(p, slot) -} - -/* Finish the pattern definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_pattern(PDF *p) -{ - static const char fn[] = "PDF_end_pattern"; - - if (!pdf_enter_api(p, fn, pdf_state_pattern, "(p[%p])\n", (void *) p)) - return; - - /* check whether pdf__save() and pdf__restore() calls are balanced */ - if (p->sl > 0) - pdc_error(p->pdc, PDF_E_GSTATE_UNMATCHEDSAVE, 0, 0, 0, 0); - - pdf_end_text(p); - p->contents = c_none; - - pdc_end_pdfstream(p->out); - pdc_end_obj(p->out); /* pattern */ - - pdc_put_pdfstreamlength(p->out, p->length_id); - - pdc_begin_obj(p->out, p->res_id); /* Resource object */ - pdc_begin_dict(p->out); /* Resource dict */ - - pdf_write_page_fonts(p); /* Font resources */ - - pdf_write_page_colorspaces(p); /* Color space resources */ - - pdf_write_page_pattern(p); /* Pattern resources */ - - pdf_write_xobjects(p); /* XObject resources */ - - pdf_write_page_extgstates(p); /* ExtGState resources */ - - pdc_end_dict(p->out); /* resource dict */ - pdc_end_obj(p->out); /* resource object */ - - PDF_POP_STATE(p, fn); - - if (p->flush & pdf_flush_page) - pdc_flush_stream(p->out); -} diff --git a/src/libs/pdflib/libs/pdflib/p_pdi.c b/src/libs/pdflib/libs/pdflib/p_pdi.c deleted file mode 100644 index 4b10467637..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_pdi.c +++ /dev/null @@ -1,201 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_pdi.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDF import routines (require the PDI library) - * - */ - -#define P_PDI_C - -#include "p_intern.h" - - -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi( - PDF *p, - const char *filename, - const char *optlist, - int reserved) -{ - static const char fn[] = "PDF_open_pdi"; - int retval = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page), - "(p[%p], \"%s\", \"%s\", %d)", - (void *) p, filename, optlist, reserved)) - { - PDF_RETURN_HANDLE(p, retval) - } - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi_callback( - PDF *p, - void *opaque, - size_t filesize, - size_t (*readproc)(void *opaque, void *buffer, size_t size), - int (*seekproc)(void *opaque, long offset), - const char *optlist) -{ - static const char fn[] = "PDF_open_pdi_callback"; - int retval = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page), - "(p[%p], opaque[%p], %ld, readproc[%p], seekproc[%p] \"%s\")", - (void *)p, opaque, filesize, readproc, seekproc, optlist)) - { - PDF_RETURN_HANDLE(p, retval) - } - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API void PDFLIB_CALL -PDF_close_pdi(PDF *p, int doc) -{ - static const char fn[] = "PDF_close_pdi"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page), - "(p[%p], %d)\n", (void *) p, doc)) - return; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return; -} - -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi_page( PDF *p, int doc, int page, const char *optlist) -{ - static const char fn[] = "PDF_open_pdi_page"; - int retval = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page), - "(p[%p], %d, %d, \"%s\")", (void *) p, doc, page, optlist)) - { - PDF_RETURN_HANDLE(p, retval) - } - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API void PDFLIB_CALL -PDF_fit_pdi_page(PDF *p, int page, float x, float y, const char *optlist) -{ - static const char fn[] = "PDF_fit_pdi_page"; - - /* precise scope diagnosis in pdf__place_image */ - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], %d, %g, %g, \"%s\")\n", (void *) p, page, x, y, optlist)) - return; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return; -} - -PDFLIB_API void PDFLIB_CALL -PDF_place_pdi_page(PDF *p, int page, float x, float y, float sx, float sy) -{ - static const char fn[] = "PDF_place_pdi_page"; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], %d, %g, %g, %g, %g)\n", (void *) p, page, x, y, sx, sy)) - return; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return; -} - -PDFLIB_API void PDFLIB_CALL -PDF_close_pdi_page(PDF *p, int page) -{ - static const char fn[] = "PDF_close_pdi_page"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page), - "(p[%p], %d)\n", (void *) p, page)) - return; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return; -} - -PDFLIB_API const char *PDFLIB_CALL -PDF_get_pdi_parameter( - PDF *p, - const char *key, - int doc, - int page, - int idx, - int *len) -{ - static const char fn[] = "PDF_get_pdi_parameter"; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", %d, %d, %d, len[%p])\n", - (void *) p, key, doc, page, idx, len)) - return (const char *) NULL; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return (const char *) NULL; -} - -PDFLIB_API float PDFLIB_CALL -PDF_get_pdi_value(PDF *p, const char *key, int doc, int page, int idx) -{ - static const char fn[] = "PDF_get_pdi_value"; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", %d, %d, %d)\n", - (void *) p, key, doc, page, idx)) - return (float) 0; - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - return (float) 0; -} - -PDFLIB_API int PDFLIB_CALL -PDF_process_pdi(PDF *p, int doc, int page, const char *optlist) -{ - static const char fn[] = "PDF_process_pdi"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document), - "(p[%p], %d, %d, %s)\n", (void *) p, doc, page, optlist)) - { - PDF_RETURN_BOOLEAN(p, -1); - } - - pdc_error(p->pdc, PDF_E_UNSUPP_PDI, 0, 0, 0, 0); - - PDF_RETURN_BOOLEAN(p, -1); -} - diff --git a/src/libs/pdflib/libs/pdflib/p_pfm.c b/src/libs/pdflib/libs/pdflib/p_pfm.c deleted file mode 100644 index c459291c2c..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_pfm.c +++ /dev/null @@ -1,349 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_pfm.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines for fast reading of PFM font metrics files - * - */ - -#include "p_intern.h" -#include "p_font.h" - -/* read data types from the PFM */ -#define PFM_BYTE(offset) pfm[offset] -#define PFM_WORD(offset) PDC_GET_WORD(&pfm[offset]) -#define PFM_SHORT(offset) PDC_GET_SHORT(&pfm[offset]) -#define PFM_DWORD(offset) PDC_GET_DWORD3(&pfm[offset]) - -/* Offsets in the buffer containing the various PFM structures */ -#define header_base 0 -#define header_dfVersion (PFM_WORD(header_base + 0)) -#define header_dfSize (PFM_DWORD(header_base + 2)) -#define header_dfAscent (PFM_WORD(header_base + 74)) -#define header_dfItalic (PFM_BYTE(header_base + 80)) -#define header_dfWeight (PFM_WORD(header_base + 83)) -#define header_dfCharSet (PFM_BYTE(header_base + 85)) -#define header_dfPitchAndFamily (PFM_BYTE(header_base + 90)) -#define header_dfMaxWidth (PFM_WORD(header_base + 93)) -#define header_dfFirstChar (PFM_BYTE(header_base + 95)) -#define header_dfLastChar (PFM_BYTE(header_base + 96)) -#define header_dfDefaultChar (PFM_BYTE(header_base + 97)) - -#define ext_base 117 -#define ext_dfExtentTable (PFM_DWORD(ext_base + 6)) -#define ext_dfKernPairs (PFM_DWORD(ext_base + 14)) -#define ext_dfKernTrack (PFM_DWORD(ext_base + 18)) -#define ext_dfDriverInfo (PFM_DWORD(ext_base + 22)) - -#define etm_base 147 -#define etmCapHeight (PFM_SHORT(etm_base + 14)) -#define etmXHeight (PFM_SHORT(etm_base + 16)) -#define etmLowerCaseAscent (PFM_SHORT(etm_base + 18)) -#define etmLowerCaseDescent (PFM_SHORT(etm_base + 20)) -#define etmSlant (PFM_SHORT(etm_base + 22)) -#define etmUnderlineOffset (PFM_SHORT(etm_base + 32)) -#define etmUnderlineWidth (PFM_SHORT(etm_base + 34)) - -#define dfDevice 199 - -/* Windows font descriptor flags */ -#define PDF_FIXED_PITCH 0x01 /* Fixed width font; rarely used flag */ - -#define PDF_DONTCARE 0x00 /* Don't care or don't know. */ -#define PDF_ROMAN 0x10 /* Variable stroke width, serifed */ -#define PDF_SWISS 0x20 /* Variable stroke width, sans-serifed */ -#define PDF_MODERN 0x30 /* fixed pitch */ -#define PDF_SCRIPT 0x40 /* Cursive, etc. */ -#define PDF_DECORATIVE 0x50 /* Old English, etc. */ - -/* Windows character set flags */ -#define PFM_ANSI_CHARSET 0 /* seems to imply codepage 1250/1252 */ -#define PFM_SYMBOL_CHARSET 2 -#define PFM_SHIFTJIS_CHARSET 128 -#define PFM_OEM_CHARSET 255 - -#define PDF_STRING_PostScript \ - ((const char*) "\120\157\163\164\123\143\162\151\160\164") - -/* - * Kerning pairs - */ -typedef struct kern_ { - pdc_byte first; /* First character */ - pdc_byte second; /* Second character */ - pdc_byte kern[2]; /* Kern distance */ -} KERN; - -pdc_bool -pdf_check_pfm_encoding(PDF *p, pdc_font *font, const char *fontname, - pdc_encoding enc) -{ - const char *encname; - pdc_encoding enc_old = enc; - int islatin1 = 0; - - /* Font encoding */ - switch (font->encoding) - { - case PFM_ANSI_CHARSET: - font->encoding = pdc_winansi; - font->isstdlatin = pdc_true; - break; - - case PFM_SYMBOL_CHARSET: - font->encoding = pdc_builtin; - font->isstdlatin = pdc_false; - break; - - default: - pdc_set_errmsg(p->pdc, PDF_E_T1_BADCHARSET, - pdc_errprintf(p->pdc, "%d", font->encoding), fontname, 0, 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* iso8859-1 */ - if (enc > 0) - { - islatin1 = !strcmp(pdf_get_encoding_name(p, enc), "iso8859-1"); - if (font->encoding == pdc_winansi) - font->encoding = enc; - } - - /* Unicode encoding */ - if (enc == pdc_unicode) - { - enc = pdf_find_encoding(p, "iso8859-1"); - font->encoding = enc; - islatin1 = 1; - } - - /* Unallowed encoding */ - encname = pdc_errprintf(p->pdc, "%s", pdf_get_encoding_name(p, enc_old)); - if (enc < pdc_builtin) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, fontname, encname, 0, 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - if (font->verbose == pdc_true) - { - if (enc != pdc_winansi && !islatin1 && - font->encoding != pdc_builtin) - { - pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, - pdf_get_encoding_name(p, pdc_winansi), encname, fontname, 0); - } - if (enc != pdc_builtin && font->encoding == pdc_builtin) - { - pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, - pdf_get_encoding_name(p, pdc_builtin), encname, fontname, 0); - } - } - - return pdc_true; -} - - -/* - * Currently we do not populate the following fields correctly: - * - serif flag - */ - -static pdc_bool -pdf_parse_pfm(PDF *p, pdc_file *fp, pdc_font *font) -{ - static const char fn[] = "pdf_parse_pfm"; - size_t length; - pdc_byte *pfm; - pdc_bool ismem; - int i, dfFirstChar, dfLastChar, default_width; - float w; - unsigned long dfExtentTable; - - /* read whole file and close it */ - pfm = (pdc_byte *) pdc_freadall(fp, &length, &ismem); - pdc_fclose(fp); - - /* check whether this is really a valid PostScript PFM file */ - if (pfm == NULL || - (header_dfVersion != 0x100 && header_dfVersion != 0x200) || - dfDevice > length || - strncmp((const char *) pfm + dfDevice, PDF_STRING_PostScript, 10) || - ext_dfDriverInfo > length) { - - if (!ismem) - pdc_free(p->pdc, pfm); - return pdc_false; - } - - /* fetch relevant data from the PFM */ - font->type = pdc_Type1; - w = header_dfWeight / (float) 65; - font->StdVW = (int) (PDF_STEMV_MIN + w * w); - - font->name = pdc_strdup(p->pdc, (const char *)pfm + ext_dfDriverInfo); - - switch (header_dfPitchAndFamily & 0xF0) { - case PDF_ROMAN: - font->flags |= SERIF; - break; - case PDF_MODERN: - /* Has to be ignored, contrary to MS's specs */ - break; - case PDF_SCRIPT: - font->flags |= SCRIPT; - break; - case PDF_DECORATIVE: - /* the dfCharSet flag lies in this case... */ - header_dfCharSet = PFM_SYMBOL_CHARSET; - break; - case PDF_SWISS: - case PDF_DONTCARE: - default: - break; - } - - /* temporarily */ - font->encoding = (pdc_encoding) header_dfCharSet; - - - dfFirstChar = header_dfFirstChar; - dfLastChar = header_dfLastChar; - dfExtentTable = ext_dfExtentTable; - - /* - * Some rare PFMs do not contain any ExtentTable if the fixed pitch flag - * is set. Use the dfMaxWidth entry for all glyphs in this case. - * If the user forced the font to be monospaced we use this value instead. - */ - if ((!(header_dfPitchAndFamily & PDF_FIXED_PITCH) && dfExtentTable == 0) || - font->monospace) - { - font->isFixedPitch = pdc_true; - default_width = font->monospace ? font->monospace : header_dfMaxWidth; - } else { - - /* default values -- don't take the width of the default character */ - default_width = PDF_DEFAULT_WIDTH; - } - - font->widths = (int *) pdc_calloc(p->pdc, - font->numOfCodes * sizeof(int), fn); - for (i = 0; i < font->numOfCodes; i++) - font->widths[i] = default_width; - - if (!font->isFixedPitch) - { - if (ext_dfExtentTable == 0 || - ext_dfExtentTable + 2 * (header_dfLastChar-header_dfFirstChar) + 1 > - length){ - if (!ismem) - pdc_free(p->pdc, pfm); - return pdc_false; - } - - for (i = dfFirstChar; i <= dfLastChar; i++) - font->widths[i] = - (int) PFM_WORD(dfExtentTable + 2 * (i - dfFirstChar)); - /* - * Check whether the font is actually monospaced - * (the fixed pitch flag is not necessarily set) - */ - default_width = font->widths[dfFirstChar]; - - for (i = dfFirstChar+1; i <= dfLastChar; i++) - if (default_width != font->widths[i]) - break; - - if (i == dfLastChar + 1) - font->isFixedPitch = pdc_true; - } - - font->italicAngle = - (header_dfItalic ? etmSlant/((float) 10.0) : (float) 0.0); - font->capHeight = etmCapHeight; - font->xHeight = etmXHeight; - font->descender = -etmLowerCaseDescent; - if (font->descender > 0) - font->descender = 0; - font->ascender = (int) header_dfAscent; - - font->underlinePosition = -etmUnderlineOffset; - font->underlineThickness = etmUnderlineWidth; - - font->llx = (float) -200; - font->lly = (float) font->descender; - font->urx = (float) header_dfMaxWidth; - font->ury = (float) font->ascender; - - /* try to fix broken entries */ - if (font->lly > font->ury) - font->ury = font->lly + 200; - if (font->llx > font->urx) - font->urx = 1000; - - - if (!ismem) - pdc_free(p->pdc, pfm); - - return pdc_true; -} - -pdc_bool -pdf_get_metrics_pfm( - PDF *p, - pdc_font *font, - const char *fontname, - pdc_encoding enc, - const char *filename) -{ - pdc_file *pfmfile; - - /* open PFM file */ - pfmfile = pdf_fopen(p, filename, "PFM ", PDC_FILE_BINARY); - if (pfmfile == NULL) - { - if (font->verbose_open) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* Read PFM metrics */ - if (!pdf_parse_pfm(p, pfmfile, font)) - { - pdc_set_errmsg(p->pdc, PDF_E_FONT_CORRUPT, "PFM", filename, 0, 0); - - if (font->verbose == pdc_true) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* Check encoding */ - if (!pdf_check_pfm_encoding(p, font, fontname, enc)) - return pdc_false; - - if (!pdf_make_fontflag(p, font)) - return pdc_false; - - return pdc_true; -} diff --git a/src/libs/pdflib/libs/pdflib/p_png.c b/src/libs/pdflib/libs/pdflib/p_png.c deleted file mode 100644 index e02e221503..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_png.c +++ /dev/null @@ -1,724 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_png.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PNG processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -/* SPNG - Simple PNG -** -** The items below, prefixed with spng_, or SPNG_, establish a replacement -** for LIBPNG that works very fast, but processes simple PNG images only: -** - bit_depth <= 8 (no 16-bit) -** - interlace_type 0 (no interlacing) -** - color_type 0, 2, or 3 (no alpha-channel); color type 3 requires -** libpng for palette processing -*/ -#define SPNG_SIGNATURE "\211\120\116\107\015\012\032\012" - -#define SPNG_CHUNK_IHDR 0x49484452 -#define SPNG_CHUNK_PLTE 0x504C5445 -#define SPNG_CHUNK_tRNS 0x74524E53 -#define SPNG_CHUNK_IDAT 0x49444154 -#define SPNG_CHUNK_IEND 0x49454E44 - -/* spng_init() return codes -*/ -#define SPNG_ERR_OK 0 /* no error */ -#define SPNG_ERR_NOPNG 1 /* bad PNG signature */ -#define SPNG_ERR_FMT 2 /* bad PNG file format */ - -typedef struct -{ - /* from IHDR: - */ - int width; - int height; - pdc_byte bit_depth; - pdc_byte color_type; - pdc_byte compr_type; - pdc_byte filter_type; - pdc_byte interlace_type; -} spng_info; - -static int -spng_getint(pdc_file *fp) -{ - unsigned char buf[4]; - - if (!PDC_OK_FREAD(fp, buf, 4)) - return -1; - - return (int) pdc_get_be_long(buf); -} /* spng_getint */ - -static int -spng_init(PDF *p, pdf_image *image, spng_info *spi) -{ - pdc_file *fp = image->fp; - char buf[8]; - - (void) p; - - /* check signature - */ - if (!PDC_OK_FREAD(fp, buf, 8) || - strncmp(buf, SPNG_SIGNATURE, 8) != 0) - return SPNG_ERR_NOPNG; - - /* read IHDR - */ - if (spng_getint(fp) != 13 || - spng_getint(fp) != SPNG_CHUNK_IHDR) - return SPNG_ERR_FMT; - - spi->width = spng_getint(fp); - spi->height = spng_getint(fp); - - if (!PDC_OK_FREAD(fp, buf, 5)) - return SPNG_ERR_FMT; - - spi->bit_depth = (pdc_byte) buf[0]; - spi->color_type = (pdc_byte) buf[1]; - spi->compr_type = (pdc_byte) buf[2]; - spi->filter_type = (pdc_byte) buf[3]; - spi->interlace_type = (pdc_byte) buf[4]; - - (void) spng_getint(fp); /* CRC */ - - /* decide whether this image is "simple". - */ -#ifdef HAVE_LIBPNG - if (spi->bit_depth > 8 || spi->color_type > 3 || spi->interlace_type != 0) -#else - if (spi->bit_depth > 8 || spi->color_type > 2 || spi->interlace_type != 0) -#endif /* !HAVE_LIBPNG */ - { - image->use_raw = pdc_false; - return SPNG_ERR_OK; - } - else - image->use_raw = pdc_true; - - /* read (or skip) all chunks up to the first IDAT. - */ - for (/* */ ; /* */ ; /* */) - { - int len = spng_getint(fp); - int type = spng_getint(fp); - - switch (type) - { - case SPNG_CHUNK_IDAT: /* prepare data xfer */ - image->info.png.nbytes = (size_t) len; - return SPNG_ERR_OK; - - case -1: - return SPNG_ERR_FMT; - - /* if we decide to live without LIBPNG, - ** we should handle these cases, too. - */ - case SPNG_CHUNK_tRNS: /* transparency chunk */ - case SPNG_CHUNK_PLTE: /* read in palette */ - - default: - pdc_fseek(fp, len + 4, SEEK_CUR); - /* skip data & CRC */ - break; - } /* switch */ - } - - return SPNG_ERR_OK; -} /* spng_init */ - -static void -pdf_png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - pdc_file *fp = (pdc_file *) png_ptr->io_ptr; - char *filename = (char *) pdc_file_name(fp); - - if (!PDC_OK_FREAD(fp, data, length)) - { - pdc_core *pdc = pdc_file_getpdc(fp); - - pdc_error(pdc, PDF_E_IMAGE_CORRUPT, "PNG", filename, 0, 0); - } -} - -#define PDF_PNG_BUFFERSIZE 8192 - -static void -pdf_data_source_PNG_init(PDF *p, PDF_data_source *src) -{ - static const char fn[] = "pdf_data_source_PNG_init"; - pdf_image *image = (pdf_image *) src->private_data; - -#ifdef HAVE_LIBPNG - if (image->use_raw) - { -#endif - src->buffer_length = PDF_PNG_BUFFERSIZE; - src->buffer_start = (pdc_byte *) - pdc_malloc(p->pdc, src->buffer_length, fn); - src->bytes_available = 0; - src->next_byte = src->buffer_start; - -#ifdef HAVE_LIBPNG - } - else - { - image->info.png.cur_line = 0; - src->buffer_length = image->info.png.rowbytes; - } -#endif -} - -#undef min -#define min(a, b) (((a) < (b)) ? (a) : (b)) - -static void -spng_error(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "PNG", image->filename, 0, 0); -} /* spng_error */ - -static pdc_bool -pdf_data_source_PNG_fill(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - -#ifdef HAVE_LIBPNG - if (image->use_raw) - { -#endif - pdc_file * fp = image->fp; - size_t buf_avail = src->buffer_length; - pdc_byte *scan = src->buffer_start; - - src->bytes_available = 0; - - if (image->info.png.nbytes == 0) - return pdc_false; - - do - { - size_t nbytes = min(image->info.png.nbytes, buf_avail); - - if (!PDC_OK_FREAD(fp, scan, nbytes)) - spng_error(p, src); - - src->bytes_available += nbytes; - scan += nbytes; - buf_avail -= nbytes; - - if ((image->info.png.nbytes -= nbytes) == 0) - { - /* proceed to next IDAT chunk - */ - (void) spng_getint(fp); /* CRC */ - image->info.png.nbytes = - (size_t) spng_getint(fp); /* length */ - - if (spng_getint(fp) != SPNG_CHUNK_IDAT) - { - image->info.png.nbytes = 0; - return pdc_true; - } - } - } while (buf_avail); - -#ifdef HAVE_LIBPNG - } - else - { - if (image->info.png.cur_line == image->height) - return pdc_false; - - src->next_byte = image->info.png.raster + - image->info.png.cur_line * image->info.png.rowbytes; - - src->bytes_available = src->buffer_length; - - image->info.png.cur_line++; - } -#endif /* HAVE_LIBPNG */ - - return pdc_true; -} - -static void -pdf_data_source_PNG_terminate(PDF *p, PDF_data_source *src) -{ - pdf_image *image = (pdf_image *) src->private_data; - -#ifdef HAVE_LIBPNG - if (image->use_raw) - { -#endif - pdc_free(p->pdc, (void *) src->buffer_start); - -#ifdef HAVE_LIBPNG - } -#endif -} - -#ifdef HAVE_LIBPNG -/* - * We suppress libpng's warning message by supplying - * our own error and warning handlers -*/ -static void -pdf_libpng_warning_handler(png_structp png_ptr, png_const_charp message) -{ - (void) png_ptr; /* avoid compiler warning "unreferenced parameter" */ - (void) message; /* avoid compiler warning "unreferenced parameter" */ - - /* do nothing */ - return; -} - -/* - * use the libpng portability aid in an attempt to overcome version differences - */ -#ifndef png_jmpbuf -#define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) -#endif - -static void -pdf_libpng_error_handler(png_structp png_ptr, png_const_charp message) -{ - (void) message; /* avoid compiler warning "unreferenced parameter" */ - - longjmp(png_jmpbuf(png_ptr), 1); -} - -static void * -pdf_libpng_malloc(png_structp png_ptr, size_t size) -{ - PDF *p = (PDF *)png_ptr->mem_ptr; - - return pdc_malloc(p->pdc, size, "libpng"); -} - -static void -pdf_libpng_free(png_structp png_ptr, void *mem) -{ - PDF *p = (PDF *)png_ptr->mem_ptr; - - pdc_free(p->pdc, mem); -} - -pdc_bool -pdf_is_PNG_file(PDF *p, pdc_file *fp) -{ - pdc_byte sig[8]; - - (void) p; - - if (!PDC_OK_FREAD(fp, sig, 8) || !png_check_sig(sig, 8)) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - return pdc_true; -} - -int -pdf_process_PNG_data( - PDF *p, - int imageslot) -{ - static const char *fn = "pdf_process_PNG_data"; - pdc_file *save_fp; - spng_info s_info; - - png_uint_32 width, height, ui; - png_bytep *row_pointers, trans; - png_color_8p sig_bit; - png_color_16p trans_values; - int bit_depth, color_type, i, num_trans; - float dpi_x, dpi_y; - pdf_image *image; - volatile int errcode = 0; - pdf_colorspace cs; - pdf_colormap *colormap; - volatile int slot; - - image = &p->images[imageslot]; - - /* - * We can install our own memory handlers in libpng since - * our PNG library is specially extended to support this. - * A custom version of libpng without support for - * png_create_read_struct_2() is no longer supported. - */ - - image->info.png.png_ptr = - png_create_read_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp) NULL, - pdf_libpng_error_handler, pdf_libpng_warning_handler, - p, (png_malloc_ptr) pdf_libpng_malloc, - (png_free_ptr) pdf_libpng_free); - - if (!image->info.png.png_ptr) { - pdc_error(p->pdc, PDC_E_MEM_OUT, fn, 0, 0, 0); - } - - image->info.png.info_ptr = png_create_info_struct(image->info.png.png_ptr); - - if (image->info.png.info_ptr == NULL) { - png_destroy_read_struct(&image->info.png.png_ptr, - (png_infopp) NULL, (png_infopp) NULL); - pdc_error(p->pdc, PDC_E_MEM_OUT, fn, 0, 0, 0); - } - - if (setjmp(png_jmpbuf(image->info.png.png_ptr))) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_PNG_ERROR; - } - - if (pdf_is_PNG_file(p, image->fp) == pdc_false) { - errcode = PDC_E_IO_BADFORMAT; - goto PDF_PNG_ERROR; - } - - /* from file or from file or memory */ - png_set_read_fn(image->info.png.png_ptr, image->fp, pdf_png_read_data); - - png_set_sig_bytes(image->info.png.png_ptr, 8); - png_read_info(image->info.png.png_ptr, image->info.png.info_ptr); - png_get_IHDR(image->info.png.png_ptr, image->info.png.info_ptr, - &width, &height, &bit_depth, &color_type, NULL, NULL, NULL); - - image->width = (float) width; - image->height = (float) height; - - /* reduce 16-bit images to 8 bit since PDF stops at 8 bit */ - if (bit_depth == 16) { - png_set_strip_16(image->info.png.png_ptr); - bit_depth = 8; - } - - image->bpc = bit_depth; - - /* - * Since PDF doesn't support a real alpha channel but only binary - * tranparency ("poor man's alpha"), we do our best and treat - * alpha values of up to 50% as transparent, and values above 50% - * as opaque. - * - * Since this behaviour is not exactly what the image author had in mind, - * it should probably be made user-configurable. - * - */ -#define ALPHA_THRESHOLD 128 - - switch (color_type) { - case PNG_COLOR_TYPE_GRAY_ALPHA: - /* LATER: construct mask from alpha channel */ - /* - png_set_IHDR(image->info.png.png_ptr, image->info.png.info_ptr, - width, height, bit_depth, PNG_COLOR_MASK_ALPHA, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, - PNG_FILTER_TYPE_DEFAULT); - */ - png_set_strip_alpha(image->info.png.png_ptr); - /* fall through */ - - case PNG_COLOR_TYPE_GRAY: - if (png_get_sBIT(image->info.png.png_ptr, - image->info.png.info_ptr, &sig_bit)) { - png_set_shift(image->info.png.png_ptr, sig_bit); - } - - image->colorspace = DeviceGray; - - image->components = 1; - break; - - case PNG_COLOR_TYPE_RGB_ALPHA: - /* LATER: construct mask from alpha channel */ - png_set_strip_alpha(image->info.png.png_ptr); - /* fall through */ - - case PNG_COLOR_TYPE_RGB: - if (image->colorspace == pdc_undef) - image->colorspace = DeviceRGB; - image->components = 3; - - break; - - case PNG_COLOR_TYPE_PALETTE: - png_get_PLTE(image->info.png.png_ptr, image->info.png.info_ptr, - (png_colorp*) &colormap, &cs.val.indexed.palette_size); - - image->components = 1; - - /* This case should arguably be prohibited. However, we allow - * it and take the palette indices 0 and 1 as the mask, - * disregarding any color values in the palette. - */ - if (image->imagemask) { - image->colorspace = DeviceGray; - break; - } - - cs.type = Indexed; - cs.val.indexed.base = DeviceRGB; - cs.val.indexed.colormap = colormap; - cs.val.indexed.colormap_id = PDC_BAD_ID; - slot = pdf_add_colorspace(p, &cs, pdc_false); - - image->colorspace = (pdf_colorspacetype) slot; - - - break; - } - - if (image->imagemask) - { - if (image->components != 1) { - errcode = PDF_E_IMAGE_BADMASK; - goto PDF_PNG_ERROR; - } - - if (p->compatibility <= PDC_1_3) { - if (image->components != 1 || image->bpc != 1) { - errcode = PDF_E_IMAGE_MASK1BIT13; - goto PDF_PNG_ERROR; - } - } else if (image->bpc > 1) { - /* images with more than one bit will be written as /SMask, - * and don't require an /ImageMask entry. - */ - image->imagemask = pdc_false; - } - image->colorspace = DeviceGray; - } - - /* we invert this flag later */ - if (image->ignoremask) - image->transparent = pdc_true; - - /* let libpng expand interlaced images */ - (void) png_set_interlace_handling(image->info.png.png_ptr); - - /* read the physical dimensions chunk to find the resolution values */ - dpi_x = (float) png_get_x_pixels_per_meter(image->info.png.png_ptr, - image->info.png.info_ptr); - dpi_y = (float) png_get_y_pixels_per_meter(image->info.png.png_ptr, - image->info.png.info_ptr); - - if (dpi_x != 0 && dpi_y != 0) { /* absolute values */ - image->dpi_x = dpi_x * (float) PDC_INCH2METER; - image->dpi_y = dpi_y * (float) PDC_INCH2METER; - - } else { /* aspect ratio */ - image->dpi_y = -png_get_pixel_aspect_ratio(image->info.png.png_ptr, - image->info.png.info_ptr); - - if (image->dpi_y == (float) 0) /* unknown */ - image->dpi_x = (float) 0; - else - image->dpi_x = (float) -1.0; - } - - /* read the transparency chunk */ - if (png_get_valid(image->info.png.png_ptr, image->info.png.info_ptr, - PNG_INFO_tRNS)) { - png_get_tRNS(image->info.png.png_ptr, image->info.png.info_ptr, - &trans, &num_trans, &trans_values); - if (num_trans > 0) { - if (color_type == PNG_COLOR_TYPE_GRAY) { - image->transparent = !image->transparent; - /* LATER: scale down 16-bit transparency values ? */ - image->transval[0] = (pdc_byte) trans_values[0].gray; - - } else if (color_type == PNG_COLOR_TYPE_RGB) { - image->transparent = !image->transparent; - /* LATER: scale down 16-bit transparency values ? */ - image->transval[0] = (pdc_byte) trans_values[0].red; - image->transval[1] = (pdc_byte) trans_values[0].green; - image->transval[2] = (pdc_byte) trans_values[0].blue; - - } else if (color_type == PNG_COLOR_TYPE_PALETTE) { - /* we use the first transparent entry in the tRNS palette */ - for (i = 0; i < num_trans; i++) { - if ((pdc_byte) trans[i] < ALPHA_THRESHOLD) { - image->transparent = !image->transparent; - image->transval[0] = (pdc_byte) i; - break; - } - } - } - } - } - - - - png_read_update_info(image->info.png.png_ptr, image->info.png.info_ptr); - - image->info.png.rowbytes = - png_get_rowbytes(image->info.png.png_ptr, image->info.png.info_ptr); - - image->info.png.raster = (pdc_byte *) - pdc_calloc(p->pdc,image->info.png.rowbytes * height, fn); - - row_pointers = (png_bytep *) - pdc_malloc(p->pdc, height * sizeof(png_bytep), fn); - - for (ui = 0; ui < height; ui++) { - row_pointers[ui] = - image->info.png.raster + ui * image->info.png.rowbytes; - } - - /* try the simple way: - */ - save_fp = image->fp; - - image->src.init = pdf_data_source_PNG_init; - image->src.fill = pdf_data_source_PNG_fill; - image->src.terminate = pdf_data_source_PNG_terminate; - image->src.private_data = (void *) image; - - - image->fp = pdf_fopen(p, image->filename, NULL, PDC_FILE_BINARY); - if (image->fp != NULL && - spng_init(p, image, &s_info) == SPNG_ERR_OK && image->use_raw) - { - pdc_fclose(save_fp); - image->predictor = pred_png; - image->compression = flate; - } - else - { - if (image->fp != (pdc_file *) 0) - pdc_fclose(image->fp); - - image->fp = save_fp; - - /* fetch the actual image data */ - png_read_image(image->info.png.png_ptr, row_pointers); - } - - image->in_use = pdc_true; /* mark slot as used */ - - pdf_put_image(p, imageslot, pdc_true); - - pdc_free(p->pdc, image->info.png.raster); - pdc_free(p->pdc, row_pointers); - - png_destroy_read_struct(&image->info.png.png_ptr, - &image->info.png.info_ptr, NULL); - - return imageslot; - - PDF_PNG_ERROR: - png_destroy_read_struct(&image->info.png.png_ptr, - &image->info.png.info_ptr, NULL); - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - switch (errcode) - { - case PDF_E_IMAGE_ICC: - case PDF_E_IMAGE_ICC2: - case PDF_E_IMAGE_MASK1BIT13: - case PDF_E_IMAGE_BADMASK: - pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0); - break; - - case PDC_E_IO_BADFORMAT: - pdc_set_errmsg(p->pdc, errcode, stemp, "PNG", 0, 0); - break; - - case PDF_E_IMAGE_CORRUPT: - pdc_set_errmsg(p->pdc, errcode, "PNG", stemp, 0, 0); - break; - - case 0: /* error code and message already set */ - break; - } - } - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; -} - -#else /* !HAVE_LIBPNG */ - -pdc_bool -pdf_is_PNG_file(PDF *p, pdc_file *fp) -{ - return pdc_false; -} - -/* simple built-in PNG reader without libpng */ - -int -pdf_process_PNG_data( - PDF *p, - int imageslot) -{ - static const char fn[] = "pdf_process_PNG_data"; - spng_info s_info; - pdf_image *image; - - image = &p->images[imageslot]; - - image->src.init = pdf_data_source_PNG_init; - image->src.fill = pdf_data_source_PNG_fill; - image->src.terminate = pdf_data_source_PNG_terminate; - image->src.private_data = (void *) image; - - if (spng_init(p, image, &s_info) == SPNG_ERR_OK && image->use_raw) - { - image->predictor = pred_png; - image->compression = flate; - - image->width = (float) s_info.width; - image->height = (float) s_info.height; - image->bpc = s_info.bit_depth; - - image->components = 3; - - /* other types are rejected in spng_init() */ - image->colorspace = - (s_info.color_type == 0 ? DeviceGray : DeviceRGB); - - } - else - { - pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "PNG", 0, 0, 0); - - if (image->verbose) - pdc_warning(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - - image->in_use = pdc_true; /* mark slot as used */ - - pdf_put_image(p, imageslot, pdc_true); - - return imageslot; - -} - -#endif /* !HAVE_LIBPNG */ diff --git a/src/libs/pdflib/libs/pdflib/p_resource.c b/src/libs/pdflib/libs/pdflib/p_resource.c deleted file mode 100644 index af06577071..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_resource.c +++ /dev/null @@ -1,746 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_resource.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib resource routines - * - */ - -#include - -#include "p_intern.h" - -#if defined(WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#endif - -#define RESOURCEFILE "PDFLIBRESOURCE" /* name of env var. */ - -#ifndef MVS -#define DEFAULTRESOURCEFILE "pdflib.upr" -#else -#define DEFAULTRESOURCEFILE "upr" -#endif - -struct pdf_res_s { - char *name; - char *value; - pdf_res *prev; - pdf_res *next; -}; - -struct pdf_category_s { - char *category; - pdf_res *kids; - pdf_category *next; -}; - -struct pdf_virtfile_s { - char *name; - const void *data; - size_t size; - pdc_bool iscopy; - int lockcount; - pdf_virtfile *next; -}; - -typedef enum { - pdf_FontOutline, - pdf_FontAFM, - pdf_FontPFM, - pdf_HostFont, - pdf_Encoding, - pdf_ICCProfile, - pdf_StandardOutputIntent, - pdf_SearchPath -} pdf_rescategory; - -static const pdc_keyconn pdf_rescategories[] = -{ - {"FontOutline", pdf_FontOutline}, - {"FontAFM", pdf_FontAFM}, - {"FontPFM", pdf_FontPFM}, - {"HostFont", pdf_HostFont}, - {"Encoding", pdf_Encoding}, - {"ICCProfile", pdf_ICCProfile}, - {"StandardOutputIntent", pdf_StandardOutputIntent}, - {"SearchPath", pdf_SearchPath}, - {NULL, 0} -}; - -static void -pdf_read_resourcefile(PDF *p, const char *filename) -{ - pdc_file *fp = NULL; - char **linelist; - char *line; - char *category = NULL; - char *uprfilename = NULL; -#if defined(AS400) || defined(WIN32) -#define BUFSIZE 2048 - char buffer[BUFSIZE]; -#ifdef WIN32 - char regkey[128]; - HKEY hKey = NULL; - DWORD size, lType; -#endif -#endif - int il, nlines = 0, nextcat, begin; - -#ifdef WIN32 - -/* don't add patchlevel's to registry searchpath */ -#define stringiz1(x) #x -#define stringiz(x) stringiz1(x) - -#define PDFLIBKEY "Software\\PDFlib\\PDFlib\\" - - strcpy(regkey, PDFLIBKEY); - strcat(regkey, PDFLIB_VERSIONSTRING); - - /* process registry entries */ - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, regkey, 0L, - (REGSAM) KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) - { - size = BUFSIZE - 2; - if (RegQueryValueExA(hKey, "SearchPath", (LPDWORD) NULL, - &lType, (LPBYTE) buffer, &size) - == ERROR_SUCCESS && *buffer) - { - char **pathlist; - int ip, np; - - np = pdc_split_stringlist(p->pdc, buffer, - ";", &pathlist); - for (ip = 0; ip < np; ip++) - pdf_add_resource(p, "SearchPath", pathlist[ip]); - pdc_cleanup_stringlist(p->pdc, pathlist); - } - - size = BUFSIZE - 2; - if (RegQueryValueExA(hKey, "prefix", (LPDWORD) NULL, - &lType, (LPBYTE) buffer, &size) - == ERROR_SUCCESS && *buffer) - { - /* '/' because of downward compatibility */ - if (p->prefix) - { - pdc_free(p->pdc, p->prefix); - p->prefix = NULL; - } - p->prefix = pdc_strdup(p->pdc, - &buffer[buffer[0] == '/' ? 1 : 0]); - } - - RegCloseKey(hKey); - } -#endif /* WIN32 */ - -#ifdef AS400 - strcpy (buffer, "/pdflib/"); - strcat (buffer, PDFLIB_VERSIONSTRING); - il = (int) strlen(buffer); - strcat (buffer, "/fonts"); - pdf_add_resource(p, "SearchPath", buffer); - strcpy(&buffer[il], "/bind/data"); - pdf_add_resource(p, "SearchPath", buffer); -#endif /* AS400 */ - - /* searching for name of upr file */ - uprfilename = (char *)filename; - if (!uprfilename || *uprfilename == '\0') - { - /* user-supplied upr file */ - uprfilename = pdc_getenv(RESOURCEFILE); - if (!uprfilename || *uprfilename == '\0') - { - uprfilename = DEFAULTRESOURCEFILE; - - /* user-supplied upr file */ - fp = pdf_fopen(p, uprfilename, NULL, 0); - if (fp == NULL) - { - uprfilename = NULL; -#ifdef WIN32 - /* process registry entries */ - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, regkey, 0L, - (REGSAM) KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) - { - size = BUFSIZE - 2; - if (RegQueryValueExA(hKey, "resourcefile", (LPDWORD) NULL, - &lType, (LPBYTE) buffer, &size) - == ERROR_SUCCESS && *buffer) - { - uprfilename = buffer; - } - - RegCloseKey(hKey); - } -#endif /* WIN32 */ - } - } - - if (!uprfilename || *uprfilename == '\0') - return; - - if (p->resourcefilename) - { - pdc_free(p->pdc, p->resourcefilename); - p->resourcefilename = NULL; - } - p->resourcefilename = pdc_strdup(p->pdc, uprfilename); - } - - /* read upr file */ - if ((fp == NULL) && ((fp = pdf_fopen(p, uprfilename, "UPR ", 0)) == NULL)) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - nlines = pdc_read_textfile(p->pdc, fp, &linelist); - pdc_fclose(fp); - - if (!nlines) return; - - /* Lines loop */ - begin = 1; - nextcat = 0; - for (il = 0; il < nlines; il++) - { - line = linelist[il]; - - /* Next category */ - if (line[0] == '.' && strlen(line) == 1) - { - begin = 0; - nextcat = 1; - continue; - } - - /* Skip category list */ - if (begin) continue; - - /* Prefiex or category expected */ - if (nextcat) - { - /* Directory prefix */ - if (line[0] == '/') - { - if (p->prefix) - { - pdc_free(p->pdc, p->prefix); - p->prefix = NULL; - } - p->prefix = pdc_strdup(p->pdc, &line[1]); - continue; - } - - /* Ressource Category */ - category = line; - nextcat = 0; - continue; - } - - /* Add resource */ - pdf_add_resource(p, category, line); - } - - pdc_cleanup_stringlist(p->pdc, linelist); -} - -void -pdf_add_resource(PDF *p, const char *category, const char *resource) -{ - static const char fn[] = "pdf_add_resource"; - pdf_rescategory rescat; - pdf_category *cat, *lastcat = NULL; - pdf_res *res, *lastres = NULL; - char *name; - char *value; - char *prefix = NULL; - size_t len; - int k, absolut; - - /* We no longer raise an error but silently ignore unknown categories */ - k = pdc_get_keycode(category, pdf_rescategories); - if (k == PDC_KEY_NOTFOUND) - return; - rescat = (pdf_rescategory) k; - - /* Read resource configuration file if it is pending */ - if (p->resfilepending) - { - p->resfilepending = pdc_false; - pdf_read_resourcefile(p, p->resourcefilename); - } - - /* Find start of this category's resource list, if the category exists */ - for (cat = p->resources; cat != (pdf_category *) NULL; cat = cat->next) - { - lastcat = cat; - if (!strcmp(cat->category, category)) - break; - } - if (cat == NULL) - { - cat = (pdf_category *) pdc_malloc(p->pdc, sizeof(pdf_category), fn); - cat->category = pdc_strdup(p->pdc, category); - cat->kids = NULL; - cat->next = NULL; - - if (lastcat) - lastcat->next = cat; - else - p->resources = cat; - } - - /* Determine name and value of resource */ - absolut = 0; - len = strlen(resource); - value = strchr(resource, '='); - if (value) - { - len = (size_t) (value - resource); - value++; - if (*value == '=') - { - absolut = 1; - value++; - } - - /* file name is assumed */ - if (value[0] != '\0' && value[0] == '.' && value[1] == '/') - { - value += 2; - } - } - - /* Copy resource name */ - name = (char *) pdc_malloc(p->pdc, len + 1, fn); - strncpy(name, resource, len); - name[len] = 0; - pdc_strtrim(name); - - /* Find resource name in resource list */ - for (res = cat->kids; res != (pdf_res *) NULL; res = res->next) - { - if (!strcmp(res->name, name)) - break; - lastres = res; - } - - /* New resource */ - if (res) - { - pdc_free(p->pdc, name); - } - else - { - res = (pdf_res *) pdc_calloc(p->pdc, sizeof(pdf_res), fn); - if (lastres) - lastres->next = res; - else - cat->kids = res; - res->prev = lastres; - res->name = name; - } - - /* New value */ - if (res->value) - pdc_free(p->pdc, res->value); - res->value = NULL; - if (!value) - { - value = ""; - } - else if (!absolut && p->prefix) - { - /* Directory prefix */ - prefix = p->prefix; - if (prefix[0] != '\0' && prefix[0] == '.' && prefix[1] == '/') - prefix += 2; - if (prefix) - { - len = strlen(prefix) + strlen(value) + 6; - res->value = (char *) pdc_malloc(p->pdc, len, fn); - pdc_file_fullname(prefix, value, res->value); - } - } - if (!res->value) - { - res->value = pdc_strdup(p->pdc, value); - pdc_str2trim(res->value); - } - -#undef PDF_TEST_RESOURCE -#ifdef PDF_TEST_RESOURCE - printf("%s.%s: '%s'\n", category, res->name, res->value); -#endif - - switch (rescat) - { - case pdf_FontOutline: - case pdf_FontAFM: - case pdf_FontPFM: - case pdf_HostFont: - case pdf_Encoding: - case pdf_ICCProfile: - if (!strlen(res->name) || !strlen(res->value)) - pdc_error(p->pdc, PDF_E_RES_BADRES, resource, category, 0, 0); - break; - - default: - break; - } -} - -char * -pdf_find_resource(PDF *p, const char *category, const char *name) -{ - pdf_category *cat; - pdf_res *res; - - /* Read resource configuration file if it is pending */ - if (p->resfilepending) - { - p->resfilepending = pdc_false; - pdf_read_resourcefile(p, p->resourcefilename); - } - - for (cat = p->resources; cat != (pdf_category *) NULL; cat = cat->next) - { - if (!strcmp(cat->category, category)) - { - for (res = cat->kids; res != (pdf_res *)NULL; res = res->next) - { - if (!strcmp(res->name, name)) - { - return res->value; - } - } - } - } - - return NULL; -} - -void -pdf_cleanup_resources(PDF *p) -{ - pdf_category *cat, *lastcat; - pdf_res *res, *lastres; - - for (cat = p->resources; cat != (pdf_category *) NULL; /* */) { - for (res = cat->kids; res != (pdf_res *) NULL; /* */) { - lastres = res; - res = lastres->next; - pdc_free(p->pdc, lastres->name); - if (lastres->value) - pdc_free(p->pdc, lastres->value); - pdc_free(p->pdc, lastres); - } - lastcat = cat; - cat = lastcat->next; - pdc_free(p->pdc, lastcat->category); - pdc_free(p->pdc, lastcat); - } - - p->resources = NULL; -} - -static pdf_virtfile * -pdf_find_pvf(PDF *p, const char *filename, pdf_virtfile **lastvfile) -{ - pdf_virtfile *vfile; - - if (lastvfile != NULL) - *lastvfile = NULL; - for (vfile = p->filesystem; vfile != NULL; vfile = vfile->next) - { - if (!strcmp(vfile->name, filename)) - return vfile; - if (lastvfile != NULL) - *lastvfile = vfile; - } - return NULL; -} - -/* definitions of pvf options */ -static const pdc_defopt pdf_create_pvf_options[] = -{ - {"copy", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - PDC_OPT_TERMINATE -}; - -void -pdf__create_pvf(PDF *p, const char *filename, int reserved, - const void *data, size_t size, const char *optlist) -{ - static const char fn[] = "pdf__create_pvf"; - pdc_bool iscopy = pdc_false; - pdf_virtfile *vfile, *lastvfile = NULL; - pdc_resopt *results; - - (void) reserved; - - /* Parse optlist */ - results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_pvf_options, - NULL, pdc_true); - pdc_get_optvalues(p->pdc, "copy", results, &iscopy, NULL); - pdc_cleanup_optionlist(p->pdc, results); - - /* Find virtual file in file system */ - vfile = pdf_find_pvf(p, filename, &lastvfile); - - /* Name already exists */ - if (vfile != NULL) - pdc_error(p->pdc, PDC_E_PVF_NAMEEXISTS, filename, 0, 0, 0); - - /* New virtual file */ - vfile = (pdf_virtfile *) pdc_calloc(p->pdc, sizeof(pdf_virtfile), fn); - if (lastvfile) - lastvfile->next = vfile; - else - p->filesystem = vfile; - - /* Fill up file struct */ - vfile->name = pdc_strdup(p->pdc, filename); - if (iscopy == pdc_true) - { - vfile->data = (const void *) pdc_malloc(p->pdc, size, fn); - memcpy((void *) vfile->data, data, size); - } - else - { - vfile->data = data; - } - vfile->size = size; - vfile->iscopy = iscopy; - vfile->lockcount = 0; - vfile->next = NULL; -} - -int -pdf__delete_pvf(PDF *p, const char *filename, int reserved) -{ - pdf_virtfile *vfile, *lastvfile = NULL; - - (void) reserved; - - /* Find virtual file in file system */ - vfile = pdf_find_pvf(p, filename, &lastvfile); - if (vfile) - { - /* File exists but locked */ - if (vfile->lockcount > 0) - { - return pdc_undef; - } - - /* Delete */ - if (vfile->iscopy == pdc_true) - { - pdc_free(p->pdc, (void *) vfile->data); - vfile->data = NULL; - } - pdc_free(p->pdc, vfile->name); - if (lastvfile) - lastvfile->next = vfile->next; - else - p->filesystem = vfile->next; - pdc_free(p->pdc, vfile); - } - - return pdc_true; -} - -PDFLIB_API void PDFLIB_CALL -PDF_create_pvf(PDF *p, const char *filename, int reserved, - const void *data, size_t size, const char *optlist) -{ - static const char fn[] = "PDF_create_pvf"; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", %d, \"%p\", %d, \"%s\")\n", - (void *) p, filename, reserved, data, size, optlist)) - { - return; - } - - if (filename == NULL || *filename == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - if (!data) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "data", 0, 0, 0); - - if (!size) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "size", 0, 0, 0); - - pdf__create_pvf(p, filename, reserved, data, size, optlist); -} - -PDFLIB_API int PDFLIB_CALL -PDF_delete_pvf(PDF *p, const char *filename, int reserved) -{ - static const char fn[] = "PDF_delete_pvf"; - pdc_bool retval = pdc_true; - - if (!pdf_enter_api(p, fn, pdf_state_all, - "(p[%p], \"%s\", %d)", - (void *) p, filename, reserved)) - { - PDF_RETURN_BOOLEAN(p, retval); - } - - if (filename == NULL || *filename == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0); - - retval = pdf__delete_pvf(p, filename, reserved); - - PDF_RETURN_BOOLEAN(p, retval); -} - -void -pdf_lock_pvf(PDF *p, const char *filename) -{ - pdf_virtfile *vfile = pdf_find_pvf(p, filename, NULL); - if (vfile) - (vfile->lockcount)++; -} - -void -pdf_unlock_pvf(PDF *p, const char *filename) -{ - pdf_virtfile *vfile = pdf_find_pvf(p, filename, NULL); - if (vfile) - (vfile->lockcount)--; -} - -void -pdf_cleanup_filesystem(PDF *p) -{ - pdf_virtfile *vfile, *nextvfile; - - for (vfile = p->filesystem; vfile != NULL; /* */) - { - nextvfile = vfile->next; - if (vfile->iscopy == pdc_true && vfile->data) - pdc_free(p->pdc, (void *) vfile->data); - if (vfile->name) - pdc_free(p->pdc, vfile->name); - pdc_free(p->pdc, vfile); - vfile = nextvfile; - } - p->filesystem = NULL; -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma unmanaged -#endif -pdc_file * -pdf_fopen(PDF *p, const char *filename, const char *qualifier, int flags) -{ - const pdc_byte *data = NULL; - size_t size = 0; - pdf_virtfile *vfile; - - vfile = pdf_find_pvf(p, filename, NULL); - if (vfile) - { - size = vfile->size; - data = (const pdc_byte *) vfile->data; - return pdc_fopen(p->pdc, filename, qualifier, data, size, flags); - } - else - { - pdf_category *cat; - - /* Bad filename */ - if (!*filename || !strcmp(filename, ".") || !strcmp(filename, "..")) - { - pdc_set_errmsg(p->pdc, PDC_E_IO_ILLFILENAME, filename, 0, 0, 0); - return NULL; - } - - /* Read resource configuration file if it is pending */ - if (p->resfilepending) - { - p->resfilepending = pdc_false; - pdf_read_resourcefile(p, p->resourcefilename); - } - -#ifdef PDF_TEST_RESOURCE - printf("Search for file '%s'\n", filename); -#endif - - /* Searching resource category */ - for (cat = p->resources; cat != (pdf_category *) NULL; cat = cat->next) - if (!strcmp(cat->category, "SearchPath")) break; - - if (!cat) - { - /* No resource category */ - return pdc_fopen(p->pdc, filename, qualifier, NULL, 0, flags); - } - else - { - pdf_res *res = cat->kids; - pdf_res *lastres = cat->kids; - char *pathname = NULL; - char fullname[PDC_FILENAMELEN]; - FILE *fp = NULL; - int errnum = PDC_E_IO_RDOPEN_NF; - - /* Find last SearchPath entry */ - while (res != (pdf_res *) NULL) - { - lastres = res; - res = res->next; - } - - /* First local search and then search with concatenated - * filename with search paths one after another backwards - */ - while (1) - { - /* Test opening */ - pdc_file_fullname(pathname, filename, fullname); - -#ifdef PDF_TEST_RESOURCE - printf(" pathname '%s' -> fullname: '%s'\n", pathname, fullname); -#endif - fp = fopen(fullname, READBMODE); - if (fp) - { - /* File found */ - fclose(fp); - return - pdc_fopen(p->pdc, fullname, qualifier, NULL, 0, flags); - } - errnum = pdc_get_fopen_errnum(p->pdc, PDC_E_IO_RDOPEN); - if (errno != 0 && errnum != PDC_E_IO_RDOPEN_NF) break; - - if (lastres == (pdf_res *) NULL) - break; - - pathname = lastres->name; - lastres = lastres->prev; - } - - pdc_set_errmsg(p->pdc, errnum, qualifier, filename, 0, 0); - return NULL; - } - } -} -#if defined(_MSC_VER) && defined(_MANAGED) -#pragma managed -#endif diff --git a/src/libs/pdflib/libs/pdflib/p_shading.c b/src/libs/pdflib/libs/pdflib/p_shading.c deleted file mode 100644 index 34dbfd8477..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_shading.c +++ /dev/null @@ -1,381 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_shading.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib routines for smooth shading - * - */ - -#include "p_intern.h" -#include "p_font.h" - -typedef enum -{ - shnone = 0, - axial = 2, - radial = 3 -} pdf_shadingtype_e; - -struct pdf_shading_s { - pdc_id obj_id; /* object id of this shading */ - pdc_bool used_on_current_page; /* this shading used on current page */ -}; - -void -pdf_init_shadings(PDF *p) -{ - int i; - - p->shadings_number = 0; - p->shadings_capacity = SHADINGS_CHUNKSIZE; - - p->shadings = (pdf_shading *) pdc_malloc(p->pdc, - sizeof(pdf_shading) * p->shadings_capacity, "pdf_init_shadings"); - - for (i = 0; i < p->shadings_capacity; i++) { - p->shadings[i].used_on_current_page = pdc_false; - p->shadings[i].obj_id = PDC_BAD_ID; - } -} - -static void -pdf_grow_shadings(PDF *p) -{ - int i; - - p->shadings = (pdf_shading *) pdc_realloc(p->pdc, p->shadings, - sizeof(pdf_shading) * 2 * p->shadings_capacity, "pdf_grow_shadings"); - - for (i = p->shadings_capacity; i < 2 * p->shadings_capacity; i++) { - p->shadings[i].used_on_current_page = pdc_false; - p->shadings[i].obj_id = PDC_BAD_ID; - } - - p->shadings_capacity *= 2; -} - -void -pdf_write_page_shadings(PDF *p) -{ - int i, total = 0; - - for (i = 0; i < p->shadings_number; i++) - if (p->shadings[i].used_on_current_page) - total++; - - if (total > 0) { - pdc_puts(p->out, "/Shading"); - - pdc_begin_dict(p->out); /* Shading */ - - for (i = 0; i < p->shadings_number; i++) { - if (p->shadings[i].used_on_current_page) { - p->shadings[i].used_on_current_page = pdc_false; /* reset */ - pdc_printf(p->out, "/Sh%d %ld 0 R\n", i, p->shadings[i].obj_id); - } - } - - pdc_end_dict(p->out); /* Shading */ - } -} - -void -pdf_cleanup_shadings(PDF *p) -{ - if (p->shadings) { - pdc_free(p->pdc, p->shadings); - p->shadings = NULL; - } -} - -static const pdc_defopt pdf_shading_pattern_options[] = -{ - {"gstate", pdc_gstatehandle, 0, 1, 1, 0, 0, NULL}, - PDC_OPT_TERMINATE -}; - -PDFLIB_API int PDFLIB_CALL -PDF_shading_pattern(PDF *p, int shading, const char *optlist) -{ - static const char fn[] = "PDF_shading_pattern"; - pdc_resopt *results; - pdc_clientdata data; - int gstate = -1; - int retval = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page | pdf_state_font), - "(p[%p], %d, \"%s\")", (void *) p, shading, optlist)) { - PDF_RETURN_HANDLE(p, retval) - } - - if (p->compatibility == PDC_1_3) - pdc_error(p->pdc, PDF_E_SHADING13, 0, 0, 0, 0); - - PDF_INPUT_HANDLE(p, shading) - pdf_check_handle(p, shading, pdc_shadinghandle); - - if (optlist && strlen(optlist)) { - data.maxgstate = p->extgstates_number - 1; - data.hastobepos = p->hastobepos; - - results = pdc_parse_optionlist(p->pdc, - optlist, pdf_shading_pattern_options, &data, pdc_true); - - (void) pdc_get_optvalues(p->pdc, "gstate", results, &gstate, NULL); - - pdc_cleanup_optionlist(p->pdc, results); - } - - if (p->pattern_number == p->pattern_capacity) - pdf_grow_pattern(p); - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_end_contents_section(p); - - /* Pattern object */ - p->pattern[p->pattern_number].obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); - - /* Shadings don't have a painttype, but this signals to the - * code which writes the pattern usage that no color values - * will be required when setting the pattern color space. - */ - p->pattern[p->pattern_number].painttype = 1; - - pdc_begin_dict(p->out); /* Pattern dict*/ - - pdc_puts(p->out, "/PatternType 2\n"); /* shading pattern */ - - pdc_printf(p->out, "/Shading %ld 0 R\n", p->shadings[shading].obj_id); - - p->shadings[shading].used_on_current_page = pdc_true; - - if (gstate != -1) { - pdc_printf(p->out, "/ExtGState %ld 0 R\n", - pdf_get_gstate_id(p, gstate)); - } - - pdc_end_dict(p->out); /* Pattern dict*/ - pdc_end_obj(p->out); /* Pattern object */ - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_begin_contents_section(p); - - retval = p->pattern_number; - p->pattern_number++; - PDF_RETURN_HANDLE(p, retval) -} - -PDFLIB_API void PDFLIB_CALL -PDF_shfill(PDF *p, int shading) -{ - static const char fn[] = "PDF_shfill"; - int legal_states; - - if (PDF_GET_STATE(p) == pdf_state_glyph && !pdf_get_t3colorized(p)) - legal_states = pdf_state_page | pdf_state_pattern | pdf_state_template; - - else if (PDF_GET_STATE(p) == pdf_state_pattern && - p->pattern[p->pattern_number-1].painttype == 2) - legal_states = pdf_state_page | pdf_state_glyph | pdf_state_template; - - else - legal_states = pdf_state_content; - - if (!pdf_enter_api(p, fn, (pdf_state) legal_states, - "(p[%p], %d)\n", (void *) p, shading)) - return; - - if (p->compatibility == PDC_1_3) - pdc_error(p->pdc, PDF_E_SHADING13, 0, 0, 0, 0); - - PDF_INPUT_HANDLE(p, shading) - pdf_check_handle(p, shading, pdc_shadinghandle); - - if (PDF_GET_STATE(p) == pdf_state_path) - pdf_end_path(p); - - pdf_end_text(p); - - pdc_printf(p->out, "/Sh%d sh\n", shading); - - p->shadings[shading].used_on_current_page = pdc_true; -} - -static const pdc_defopt pdf_shading_options[] = -{ - {"N", pdc_floatlist, PDC_OPT_NOZERO, 1, 1, 0, PDC_FLOAT_MAX, NULL}, - {"r0", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0, PDC_FLOAT_MAX, NULL}, - {"r1", pdc_floatlist, PDC_OPT_NONE, 1, 1, 0, PDC_FLOAT_MAX, NULL}, - {"extend0", pdc_booleanlist, PDC_OPT_NONE, 0, 1, 0, 1, NULL}, - {"extend1", pdc_booleanlist, PDC_OPT_NONE, 0, 1, 0, 0, NULL}, - {"antialias", pdc_booleanlist, PDC_OPT_NONE, 0, 1, 0, 0, NULL}, - PDC_OPT_TERMINATE -}; - -PDFLIB_API int PDFLIB_CALL -PDF_shading( - PDF *p, - const char *type, - float x_0, float y_0, - float x_1, float y_1, - float c_1, float c_2, float c_3, float c_4, - const char *optlist) -{ - static const char fn[] = "PDF_shading"; - pdf_shadingtype_e shtype = shnone; - pdf_color *color0, color1; - pdf_colorspace *cs; - pdc_resopt *results; - float N = (float) 1.0; - float r_0, r_1; - pdc_bool extend0 = pdc_false, extend1 = pdc_false, antialias = pdc_false; - int retval = -1; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_page | pdf_state_font), - "(p[%p], \"%s\", \"%s\")", - (void *) p, type, optlist)) - { - PDF_RETURN_HANDLE(p, retval) - } - - if (p->compatibility == PDC_1_3) - pdc_error(p->pdc, PDF_E_SHADING13, 0, 0, 0, 0); - - if (!strcmp(type, "axial")) { - shtype = axial; - - } else if (!strcmp(type, "radial")) { - shtype = radial; - - } else - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "type", type, 0, 0); - - color0 = &p->cstate[p->sl].fill; - - color1.cs = color0->cs; - - cs = &p->colorspaces[color0->cs]; - - switch (cs->type) { - case DeviceGray: - color1.val.gray = c_1; - break; - - case DeviceRGB: - color1.val.rgb.r = c_1; - color1.val.rgb.g = c_2; - color1.val.rgb.b = c_3; - break; - - case DeviceCMYK: - color1.val.cmyk.c = c_1; - color1.val.cmyk.m = c_2; - color1.val.cmyk.y = c_3; - color1.val.cmyk.k = c_4; - break; - - - - default: - pdc_error(p->pdc, PDF_E_INT_BADCS, - pdc_errprintf(p->pdc, "%d", color0->cs), 0, 0, 0); - } - - if (optlist && strlen(optlist)) { - results = pdc_parse_optionlist(p->pdc, - optlist, pdf_shading_options, NULL, pdc_true); - - (void) pdc_get_optvalues(p->pdc, "N", results, &N, NULL); - - (void) pdc_get_optvalues(p->pdc, "antialias", results, &antialias,NULL); - - if (shtype == radial) { - if (pdc_get_optvalues(p->pdc, "r0", results, &r_0, NULL) != 1) - pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "r0", 0, 0, 0); - - if (pdc_get_optvalues(p->pdc, "r1", results, &r_1, NULL) != 1) - pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "r1", 0, 0, 0); - } - - if (shtype == axial) { - if (pdc_get_optvalues(p->pdc, "r0", results, &r_0, NULL) == 1) - pdc_warning(p->pdc, PDC_E_OPT_IGNORED, "r0", 0, 0, 0); - - if (pdc_get_optvalues(p->pdc, "r1", results, &r_1, NULL) == 1) - pdc_warning(p->pdc, PDC_E_OPT_IGNORED, "r1", 0, 0, 0); - } - - if (shtype == radial || shtype == axial) { - pdc_get_optvalues(p->pdc, "extend0", results, &extend0, NULL); - pdc_get_optvalues(p->pdc, "extend1", results, &extend1, NULL); - } - - pdc_cleanup_optionlist(p->pdc, results); - } - - if (p->shadings_number == p->shadings_capacity) - pdf_grow_shadings(p); - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_end_contents_section(p); - - /* Shading object */ - p->shadings[p->shadings_number].obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); - - pdc_begin_dict(p->out); /* Shading dict*/ - - pdc_printf(p->out, "/ShadingType %d\n", (int) shtype); - - pdc_printf(p->out, "/ColorSpace"); - pdf_write_colorspace(p, color1.cs, pdc_false); - pdc_puts(p->out, "\n"); - - if (antialias) - pdc_printf(p->out, "/AntiAlias true\n"); - - switch (shtype) { - case axial: /* Type 2 */ - pdc_printf(p->out, "/Coords[%f %f %f %f]\n", x_0, y_0, x_1, y_1); - if (extend0 || extend1) - pdc_printf(p->out, "/Extend[%s %s]\n", - extend0 ? "true" : "false", extend1 ? "true" : "false"); - pdc_puts(p->out, "/Function"); - pdf_write_function_dict(p, color0, &color1, N); - break; - - case radial: /* Type 3 */ - pdc_printf(p->out, "/Coords[%f %f %f %f %f %f]\n", - x_0, y_0, r_0, x_1, y_1, r_1); - if (extend0 || extend1) - pdc_printf(p->out, "/Extend[%s %s]\n", - extend0 ? "true" : "false", extend1 ? "true" : "false"); - pdc_puts(p->out, "/Function"); - pdf_write_function_dict(p, color0, &color1, N); - break; - - default: - break; - } - - pdc_end_dict(p->out); /* Shading dict */ - pdc_end_obj(p->out); /* Shading object */ - - if (PDF_GET_STATE(p) == pdf_state_page) - pdf_begin_contents_section(p); - - retval = p->shadings_number; - p->shadings_number++; - PDF_RETURN_HANDLE(p, retval) -} diff --git a/src/libs/pdflib/libs/pdflib/p_subsett.c b/src/libs/pdflib/libs/pdflib/p_subsett.c deleted file mode 100644 index 63c7be9b15..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_subsett.c +++ /dev/null @@ -1,26 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_subsett.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib subsetting routines - * - */ - -#include - -#include "p_intern.h" -#include "p_font.h" -#include "p_truetype.h" - -#include "pc_md5.h" - diff --git a/src/libs/pdflib/libs/pdflib/p_template.c b/src/libs/pdflib/libs/pdflib/p_template.c deleted file mode 100644 index 7ed8977c3e..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_template.c +++ /dev/null @@ -1,140 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_template.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib template routines - * - */ - -#include "p_intern.h" -#include "p_image.h" -#include "p_font.h" - -/* Start a new template definition. */ -PDFLIB_API int PDFLIB_CALL -PDF_begin_template(PDF *p, float width, float height) -{ - static const char fn[] = "PDF_begin_template"; - pdf_image *image; - int im = -1; - - if (!pdf_enter_api(p, fn, pdf_state_document, "(p[%p], %g, %g)", - (void *) p, width, height)) - { - PDF_RETURN_HANDLE(p, im) - } - - if (width <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "width", 0, 0, 0); - - if (height <= 0) - pdc_error(p->pdc, PDC_E_ILLARG_POSITIVE, "height", 0, 0, 0); - - for (im = 0; im < p->images_capacity; im++) - if (!p->images[im].in_use) /* found free slot */ - break; - - if (im == p->images_capacity) - pdf_grow_images(p); - - image = &p->images[im]; - image->in_use = pdc_true; /* mark slot as used */ - image->no = pdf_new_xobject(p, form_xobject, PDC_NEW_ID); - image->width = width; - image->height = height; - - p->height = height; - p->width = width; - p->thumb_id = PDC_BAD_ID; - PDF_PUSH_STATE(p, fn, pdf_state_template); - p->templ = im; /* remember the current template id */ - p->next_content = 0; - p->contents = c_page; - p->sl = 0; - - pdf_init_tstate(p); - pdf_init_gstate(p); - pdf_init_cstate(p); - - pdc_begin_dict(p->out); /* form xobject dict*/ - pdc_puts(p->out, "/Type/XObject\n"); - pdc_puts(p->out, "/Subtype/Form\n"); - - /* contrary to the PDF reference /FormType and /Matrix are required! */ - pdc_printf(p->out, "/FormType 1\n"); - pdc_printf(p->out, "/Matrix[1 0 0 1 0 0]\n"); - - p->res_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Resources %ld 0 R\n", p->res_id); - - pdc_printf(p->out, "/BBox[0 0 %f %f]\n", p->width, p->height); - - p->length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", p->length_id); - - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - pdc_end_dict(p->out); /* form xobject dict*/ - pdc_begin_pdfstream(p->out); - - p->next_content++; - - /* top-down y-coordinates */ - pdf_set_topdownsystem(p, height); - - PDF_RETURN_HANDLE(p, im) -} - -/* Finish the template definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_template(PDF *p) -{ - static const char fn[] = "PDF_end_template"; - - if (!pdf_enter_api(p, fn, pdf_state_template, "(p[%p])\n", (void *) p)) - return; - - /* check whether pdf__save() and pdf__restore() calls are balanced */ - if (p->sl > 0) - pdc_error(p->pdc, PDF_E_GSTATE_UNMATCHEDSAVE, 0, 0, 0, 0); - - pdf_end_text(p); - p->contents = c_none; - - pdc_end_pdfstream(p->out); - pdc_end_obj(p->out); /* form xobject */ - - pdc_put_pdfstreamlength(p->out, p->length_id); - - pdc_begin_obj(p->out, p->res_id); /* Resource object */ - pdc_begin_dict(p->out); /* Resource dict */ - - pdf_write_page_fonts(p); /* Font resources */ - - pdf_write_page_colorspaces(p); /* Color space resources */ - - pdf_write_page_pattern(p); /* Pattern resources */ - - pdf_write_xobjects(p); /* XObject resources */ - - pdf_write_page_extgstates(p); /* ExtGState resources */ - - pdc_end_dict(p->out); /* resource dict */ - pdc_end_obj(p->out); /* resource object */ - - PDF_POP_STATE(p, fn); - - if (p->flush & pdf_flush_page) - pdc_flush_stream(p->out); -} diff --git a/src/libs/pdflib/libs/pdflib/p_text.c b/src/libs/pdflib/libs/pdflib/p_text.c deleted file mode 100644 index 7fbc576b6b..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_text.c +++ /dev/null @@ -1,1632 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_text.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib text routines - * - */ - -#define P_TEXT_C - -#include "p_intern.h" -#include "p_font.h" - -/* ------------------------ Text object operators ------------------------ */ - -static void -pdf_begin_text(PDF *p) -{ - if (p->contents != c_text) - { - p->contents = c_text; - p->textparams_done = pdc_false; - - pdc_puts(p->out, "BT\n"); - - /* BT resets the current point, text matrix, and line matrix */ - p->gstate[p->sl].x = (float) 0.0; - p->gstate[p->sl].y = (float) 0.0; - } -} - -static void -pdf_put_textmatrix(PDF *p) -{ - pdc_matrix *m = &p->tstate[p->sl].m; - - pdc_printf(p->out, "%f %f %f %f %f %f Tm\n", - m->a, m->b, m->c, m->d, m->e, m->f); - p->tstate[p->sl].me = p->tstate[p->sl].m.e; - p->tstate[p->sl].potm = pdc_false; -} - -void -pdf_end_text(PDF *p) -{ - if (p->contents != c_text) - return; - - p->contents = c_page; - - pdc_puts(p->out, "ET\n"); - p->tstate[p->sl].potm = pdc_true; -} - -/* ------------------------ Text state operators ------------------------ */ - -/* Initialize the text state at the beginning of each page */ -void -pdf_init_tstate(PDF *p) -{ - pdf_tstate *ts; - - ts = &p->tstate[p->sl]; - - ts->c = (float) 0; - ts->w = (float) 0; - ts->h = (float) 1; - ts->l = (float) 0; - ts->f = -1; - ts->fs = (float) 0; - - ts->m.a = (float) 1; - ts->m.b = (float) 0; - ts->m.c = (float) 0; - ts->m.d = (float) 1; - ts->m.e = (float) 0; - ts->m.f = (float) 0; - ts->me = (float) 0; - - ts->mode = 0; - ts->rise = (float) 0; - - ts->lm.a = (float) 1; - ts->lm.b = (float) 0; - ts->lm.c = (float) 0; - ts->lm.d = (float) 1; - ts->lm.e = (float) 0; - ts->lm.f = (float) 0; - - ts->potm = pdc_false; - - p->underline = pdc_false; - p->overline = pdc_false; - p->strikeout = pdc_false; - p->textparams_done = pdc_false; -} - -/* reset the text state */ -void -pdf_reset_tstate(PDF *p) -{ - float ydirection = p->ydirection; - p->ydirection = (float) 1.0; - - pdf_set_horiz_scaling(p, 100); - pdf_set_leading(p, 0); - pdf_set_text_rise(p, 0); - pdf_end_text(p); - - p->ydirection = ydirection; -} - -/* character spacing for justified lines */ -void -pdf_set_char_spacing(PDF *p, float spacing) -{ - spacing *= p->ydirection; - if (PDF_GET_STATE(p) == pdf_state_document) - { - p->tstate[p->sl].c = spacing; - return; - } - - /* - * We take care of spacing values != 0 in the text output functions, - * but must explicitly reset here. - */ - if (spacing == (float) 0) { - pdf_begin_text(p); - pdc_printf(p->out, "%f Tc\n", spacing); - } - - p->tstate[p->sl].c = spacing; - p->textparams_done = pdc_false; -} - -/* word spacing for justified lines */ -void -pdf_set_word_spacing(PDF *p, float spacing) -{ - spacing *= p->ydirection; - if (PDF_GET_STATE(p) == pdf_state_document) - { - p->tstate[p->sl].w = spacing; - return; - } - - /* - * We take care of spacing values != 0 in the text output functions, - * but must explicitly reset here. - */ - if (spacing == (float) 0) { - pdf_begin_text(p); - pdc_printf(p->out, "%f Tw\n", spacing); - } - - p->tstate[p->sl].w = spacing; - p->textparams_done = pdc_false; -} - -void -pdf_set_horiz_scaling(PDF *p, float scale) -{ - if (scale == (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "horizscaling", pdc_errprintf(p->pdc, "%f", scale), 0, 0); - - scale *= p->ydirection; - if (PDF_GET_STATE(p) == pdf_state_document) - { - p->tstate[p->sl].h = scale / (float) 100.0; - return; - } - - if (scale == 100 * p->tstate[p->sl].h && !PDF_FORCE_OUTPUT()) - return; - - pdf_begin_text(p); - pdc_printf(p->out, "%f Tz\n", scale); - - p->tstate[p->sl].h = scale / (float) 100.0; -} - -float -pdf_get_horiz_scaling(PDF *p) -{ - return (float) (p->ydirection * p->tstate[p->sl].h * 100); -} - -void -pdf_set_leading(PDF *p, float l) -{ - l *= p->ydirection; - if (l == p->tstate[p->sl].l && !PDF_FORCE_OUTPUT()) - return; - - p->tstate[p->sl].l = l; - p->textparams_done = pdc_false; -} - -void -pdf_set_text_rendering(PDF *p, int mode) -{ - if (mode < 0 || mode > PDF_LAST_TRMODE) - pdc_error(p->pdc, PDC_E_ILLARG_INT, - "textrendering", pdc_errprintf(p->pdc, "%d", mode), 0, 0); - - if (mode == p->tstate[p->sl].mode && !PDF_FORCE_OUTPUT()) - return; - - pdf_begin_text(p); - pdc_printf(p->out, "%d Tr\n", mode); - - p->tstate[p->sl].mode = mode; -} - -void -pdf_set_text_rise(PDF *p, float rise) -{ - rise *= p->ydirection; - if (PDF_GET_STATE(p) == pdf_state_document) - { - p->tstate[p->sl].rise = rise; - return; - } - - if (rise == p->tstate[p->sl].rise && !PDF_FORCE_OUTPUT()) - return; - - pdf_begin_text(p); - pdc_printf(p->out, "%f Ts\n", rise); - - p->tstate[p->sl].rise = rise; -} - -/* Text positioning operators */ - -PDFLIB_API void PDFLIB_CALL -PDF_set_text_matrix(PDF *p, - float a, float b, float c, float d, float e, float f) -{ - static const char fn[] = "PDF_set_text_matrix"; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_content | pdf_state_document), - "(p[%p], %g, %g, %g, %g, %g, %g)\n", (void *) p, a, b, c, d, e, f)) - { - return; - } - - p->tstate[p->sl].m.a = a; - p->tstate[p->sl].m.b = b; - p->tstate[p->sl].m.c = c; - p->tstate[p->sl].m.d = d; - p->tstate[p->sl].m.e = e; - p->tstate[p->sl].m.f = f; - - if (PDF_GET_STATE(p) != pdf_state_document) - { - pdf_begin_text(p); - pdf_put_textmatrix(p); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_text_pos(PDF *p, float x, float y) -{ - static const char fn[] = "PDF_set_text_pos"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g)\n", - (void *) p, x, y)) - return; - - p->tstate[p->sl].m.e = x; - p->tstate[p->sl].m.f = y; - - p->tstate[p->sl].lm.e = x; - p->tstate[p->sl].lm.f = y; - - pdf_begin_text(p); - pdf_put_textmatrix(p); -} - -/* String width calculations */ - -static float -pdf_str_width(PDF *p, pdc_byte *text, int len, int charlen, - int font, float fontsize) -{ - int i; - pdc_font *currfont = &p->fonts[font]; - pdc_ushort uv; - pdc_ushort *ustext = (pdc_ushort *) text; - float chwidth = (float) 0.0, width = (float) 0.0; - pdc_bool haswidths = (currfont->widths != NULL); - - /* We cannot handle empty strings and fonts with unknown - * code size - especially CID fonts with no UCS-2 CMap */ - if (!len || !currfont->codeSize) - return width; - - for (i = 0; i < len/charlen; i++) - { - if (charlen == 1) - uv = (pdc_ushort) text[i]; - else - uv = ustext[i]; - - /* take word spacing parameter into account at each blank */ - if (currfont->codeSize == 1 && uv == (pdc_ushort) PDF_SPACE) - width += p->tstate[p->sl].w; - - /* start by adding in the width of the character */ - if (currfont->monospace) - { - chwidth = (float) currfont->monospace; - } - else if (haswidths) - { - chwidth = (float) currfont->widths[uv]; - } - width += fontsize * chwidth / ((float) 1000); - - - /* now add the character spacing parameter */ - width += p->tstate[p->sl].c; - } - - /* take current text matrix and horizontal scaling factor into account */ - width = width * p->tstate[p->sl].m.a * p->tstate[p->sl].h; - - return width; -} - -/* Convert and check input text string. - * The function returns a pointer to an allocated buffer - * containing the converted string. - * The caller is responsible for freeing this buffer. - * If return value is NULL error was occurred. - */ -static pdc_byte * -pdf_check_textstring(PDF *p, const char *text, int len, int font, - pdc_bool textflow, pdc_bool calcwidth, - int *outlen, int *outcharlen) -{ - pdc_font *currfont = &p->fonts[font]; - pdc_byte *outtext; - pdc_text_format textformat, targettextformt; - int maxlen, charlen = 1; - int codesize = abs(currfont->codeSize); - - (void) textflow; - - /* Convert to 8-bit or UTF-16 text string */ - textformat = p->textformat; - if (textformat == pdc_auto && codesize <= 1) - textformat = pdc_bytes; - else if (textformat == pdc_auto2 && codesize <= 1) - textformat = pdc_bytes2; - targettextformt = pdc_utf16; - pdc_convert_string(p->pdc, textformat, NULL, (pdc_byte *)text, len, - &targettextformt, NULL, &outtext, outlen, - PDC_CONV_NOBOM | PDC_CONV_KEEPBYTES, pdc_true); - textformat = targettextformt; - - if (outtext && *outlen) - { - /* 2 byte storage length of a character */ - if (textformat == pdc_utf16) - { - if (codesize <= 1 && currfont->encoding == pdc_builtin) - pdc_error(p->pdc, PDF_E_FONT_BADTEXTFORM, 0, 0, 0, 0); - charlen = 2; - } - - /* Maximal text string length - found out emprirically! */ - maxlen = (codesize == 1) ? PDF_MAXARRAYSIZE : PDF_MAXDICTSIZE; - if (!calcwidth && *outlen > maxlen) - { - pdc_warning(p->pdc, PDF_E_TEXT_TOOLONG, - pdc_errprintf(p->pdc, "%d", maxlen), 0, 0, 0); - *outlen = maxlen; - } - - } - *outcharlen = charlen; - - return outtext; -} - -float -pdf__stringwidth(PDF *p, const char *text, int len, int font, float fontsize) -{ - pdc_byte *utext; - int charlen; - float result = (float) 0.0; - - if (text && len == 0) - len = (int) strlen(text); - if (text == NULL || len <= 0) - return result; - - pdf_check_handle(p, font, pdc_fonthandle); - - if (fontsize == (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, "fontsize", "0", 0, 0); - - /* convert text string */ - fontsize *= p->ydirection; - utext = pdf_check_textstring(p, text, len, font, pdc_false, pdc_true, - &len, &charlen); - if (utext) - { - p->currtext = utext; - result = pdf_str_width(p, utext, len, charlen, font, fontsize); - p->currtext = NULL; - pdc_free(p->pdc, utext); - } - return result; -} - -PDFLIB_API float PDFLIB_CALL -PDF_stringwidth(PDF *p, const char *text, int font, float fontsize) -{ - static const char fn[] = "PDF_stringwidth"; - float result = (float) 0.0; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content | pdf_state_path), - "(p[%p], \"%s\", %d, %g)", - (void *) p, pdc_strprint(p->pdc, text, 0), font, fontsize)) - { - int len = text ? (int) strlen(text) : 0; - PDF_INPUT_HANDLE(p, font) - result = pdf__stringwidth(p, text, len, font, fontsize); - } - pdc_trace(p->pdc, "[%g]\n", result); - return result; -} - -PDFLIB_API float PDFLIB_CALL -PDF_stringwidth2(PDF *p, const char *text, int len, int font, float fontsize) -{ - static const char fn[] = "PDF_stringwidth2"; - float result = (float) 0.0; - - if (pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content | pdf_state_path), - "(p[%p], \"%s\", %d, %d, %g)", - (void *) p, pdc_strprint(p->pdc, text, len), len, font, fontsize)) - { - PDF_INPUT_HANDLE(p, font) - result = pdf__stringwidth(p, text, len, font, fontsize); - } - pdc_trace(p->pdc, "[%g]\n", result); - return result; -} - - -/* ------------------------ Text control functions ------------------------ */ - -static void -pdf_underline(PDF *p, float x, float y, float length) -{ - float delta_y, xscale, yscale; - double linewidth; - pdf_tstate *ts; - - ts = &p->tstate[p->sl]; - - xscale = (float) fabs((double) ts->m.a); - yscale = (float) fabs((double) ts->m.d); - - linewidth = fabs(ts->fs * p->fonts[ts->f].underlineThickness / 1000.0 * - ts->h * (xscale > yscale ? xscale : yscale)); - - delta_y = (ts->fs * p->fonts[ts->f].underlinePosition / 1000 + ts->rise) * - (float) fabs((double) ts->h) * (xscale > yscale ? xscale : yscale); - - pdf__save(p); - - pdf__setlinewidth(p, (float) linewidth); - pdf__setlinecap(p, 0); - pdf__setdash(p, 0, 0); - pdf__moveto(p, x, y + delta_y); - pdf__lineto(p, x + length, y + delta_y); - pdf__stroke(p); - - pdf__restore(p); -} - -static void -pdf_overline(PDF *p, float x, float y, float length) -{ - float delta_y, xscale, yscale, lineheight; - double linewidth; - pdf_tstate *ts; - - ts = &p->tstate[p->sl]; - - xscale = (float) fabs((double) ts->m.a); - yscale = (float) fabs((double) ts->m.d); - - linewidth = fabs(ts->fs * p->fonts[ts->f].underlineThickness / 1000.0 * - ts->h * (xscale > yscale ? xscale : yscale)); - - lineheight = ((float) p->fonts[ts->f].ascender/1000) * ts->fs; - - delta_y = (ts->fs * p->fonts[ts->f].underlinePosition / 1000 - ts->rise) * - (float) fabs((double) ts->h) * (xscale > yscale ? xscale : yscale); - - pdf__save(p); - - pdf__setlinewidth(p, (float)linewidth); - pdf__setlinecap(p, 0); - pdf__setdash(p, 0, 0); - pdf__moveto(p, x, y + lineheight - delta_y); - pdf__lineto(p, x + length, y + lineheight - delta_y); - pdf__stroke(p); - - pdf__restore(p); -} - -static void -pdf_strikeout(PDF *p, float x, float y, float length) -{ - float delta_y, xscale, yscale, lineheight; - double linewidth; - pdf_tstate *ts; - - ts = &p->tstate[p->sl]; - - xscale = (float) fabs((double) ts->m.a); - yscale = (float) fabs((double) ts->m.d); - - linewidth = fabs(ts->fs * p->fonts[ts->f].underlineThickness / 1000.0 * - ts->h * (xscale > yscale ? xscale : yscale)); - - lineheight = ((float) p->fonts[ts->f].ascender/1000) * ts->fs; - - delta_y = (ts->fs * p->fonts[ts->f].underlinePosition / 1000 + ts->rise) * - (float) fabs((double) ts->h) * (xscale > yscale ? xscale : yscale); - pdf__save(p); - - pdf__setlinewidth(p, (float)linewidth); - pdf__setlinecap(p, 0); - pdf__setdash(p, 0, 0); - pdf__moveto(p, x, y + lineheight/2 + delta_y); - pdf__lineto(p, x + length, y + lineheight/2 + delta_y); - pdf__stroke(p); - - pdf__restore(p); -} - -/* ------------------------ font operator ------------------------ */ - -void -pdf__setfont(PDF *p, int font, float fontsize) -{ - /* make font the current font */ - p->fonts[font].used_on_current_page = pdc_true; - p->tstate[p->sl].fs = p->ydirection * fontsize; - p->tstate[p->sl].f = font; - - pdf_begin_text(p); - pdc_printf(p->out, "/F%d %f Tf\n", font, p->tstate[p->sl].fs); - pdf_set_leading(p, fontsize); -} - -PDFLIB_API void PDFLIB_CALL -PDF_setfont(PDF *p, int font, float fontsize) -{ - static const char fn[] = "PDF_setfont"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %d, %g)\n", - (void *) p, font, fontsize)) - return; - - /* Check parameters */ - PDF_INPUT_HANDLE(p, font) - pdf_check_handle(p, font, pdc_fonthandle); - - if (fontsize == (float) 0.0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, "fontsize", "0", 0, 0); - - pdf__setfont(p, font, fontsize); -} - -float -pdf_get_fontsize(PDF *p) -{ - if (p->fonts_number == 0 || p->tstate[p->sl].f == -1) /* no font set */ - pdc_error(p->pdc, PDF_E_TEXT_NOFONT_PAR, "fontsize", 0, 0, 0); - - - return p->ydirection * p->tstate[p->sl].fs; -} - -/* ------------------------ Text rendering operators ------------------------ */ - - -void -pdf_put_textstring(PDF *p, pdc_byte *text, int len, int charlen) -{ - (void) charlen; - - pdc_put_pdfstring(p->out, (const char *) text, len); -} - - -static void -pdf_output_text(PDF *p, pdc_byte *text, int len, int charlen) -{ - { - pdf_put_textstring(p, text, len, charlen); - pdc_puts(p->out, "Tj\n"); - } -} - -#define PDF_RENDERMODE_FILLCLIP 4 - -static void -pdf_place_text(PDF *p, pdc_byte *utext, int len, int charlen, - float x, float y, float width, pdc_bool cont) -{ - pdf_tstate *ts = &p->tstate[p->sl]; - - if (width) - { - if (p->underline) - pdf_underline(p, x, y, width); - if (p->overline) - pdf_overline(p, x, y, width); - if (p->strikeout) - pdf_strikeout(p, x, y, width); - } - - pdf_begin_text(p); - if (ts->potm) - pdf_put_textmatrix(p); - - /* set leading, word, and character spacing if required */ - if (!p->textparams_done) - { - pdc_printf(p->out, "%f TL\n", ts->l); - - if (ts->w != (float) 0) - pdc_printf(p->out,"%f Tw\n", ts->w); - - if (ts->c != (float) 0) - pdc_printf(p->out,"%f Tc\n", ts->c); - - p->textparams_done = pdc_true; - } - - /* text output */ - if (!cont) - { - pdf_output_text(p, utext, len, charlen); - } - else - { - { - pdf_put_textstring(p, utext, len, charlen); - pdc_puts(p->out, "'\n"); - } - } - - if (ts->mode >= PDF_RENDERMODE_FILLCLIP) - pdf_end_text(p); - - ts->m.e += width; - if (cont) ts->m.f -= ts->l; -} - -void -pdf_show_text( - PDF *p, - const char *text, - int len, - const float *x_p, - const float *y_p, - pdc_bool cont) -{ - static const char *fn = "pdf_show_text"; - pdf_tstate *ts = &p->tstate[p->sl]; - pdc_byte *utext = NULL; - int charlen = 1; - float x, y, width; - - if (x_p != NULL) - { - x = *x_p; - y = *y_p; - ts->m.e = x; - ts->m.f = y; - ts->lm.e = x; - ts->lm.f = y; - ts->potm = pdc_true; - } - else if (cont) - { - ts->m.e = ts->lm.e; - x = ts->m.e; - y = ts->m.f - ts->l; - - /* we must output line begin if necessary */ - if (fabs((double) (ts->me - ts->lm.e)) > PDC_FLOAT_PREC) - ts->potm = pdc_true; - } - else - { - x = ts->m.e; - y = ts->m.f; - } - - if (text && len == 0) - len = (int) strlen(text); - if (text == NULL || len <= 0) - { - if (cont) - len = 0; - else - return; - } - - /* no font set */ - if (ts->f == -1) - pdc_error(p->pdc, PDF_E_TEXT_NOFONT, 0, 0, 0, 0); - - width = 0; - if (len) - { - /* convert text string */ - utext = pdf_check_textstring(p, text, len, ts->f, pdc_false, pdc_false, - &len, &charlen); - if (!utext) - return; - - p->currtext = utext; - - /* length of text */ - width = pdf_str_width(p, utext, len, charlen, ts->f, ts->fs); - } - else - { - utext = (pdc_byte *) pdc_calloc(p->pdc, 2, fn); - p->currtext = utext; - } - - /* place text */ - pdf_place_text(p, utext, len, charlen, x, y, width, cont); - - p->currtext = NULL; - if (utext) - pdc_free(p->pdc, utext); -} - -PDFLIB_API void PDFLIB_CALL -PDF_show(PDF *p, const char *text) -{ - static const char fn[] = "PDF_show"; - if (pdf_enter_api(p, fn, pdf_state_content, "(p[%p], \"%s\")\n", - (void *) p, pdc_strprint(p->pdc, text, 0))) - { - int len = text ? (int) strlen(text) : 0; - pdf_show_text(p, text, len, NULL, NULL, pdc_false); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_show2(PDF *p, const char *text, int len) -{ - static const char fn[] = "PDF_show2"; - if (pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\", %d)\n", - (void *) p, pdc_strprint(p->pdc, text, len), len)) - { - pdf_show_text(p, text, len, NULL, NULL, pdc_false); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_show_xy(PDF *p, const char *text, float x, float y) -{ - static const char fn[] = "PDF_show_xy"; - if (pdf_enter_api(p, fn, pdf_state_content, "(p[%p], \"%s\", %g, %g)\n", - (void *) p, pdc_strprint(p->pdc, text, 0), x, y)) - { - int len = text ? (int) strlen(text) : 0; - pdf_show_text(p, text, len, &x, &y, pdc_false); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_show_xy2(PDF *p, const char *text, int len, float x, float y) -{ - static const char fn[] = "PDF_show_xy2"; - if (pdf_enter_api(p, fn, pdf_state_content, "(p[%p], \"%s\", %d, %g, %g)\n", - (void *) p, pdc_strprint(p->pdc, text, len), len, x, y)) - { - pdf_show_text(p, text, len, &x, &y, pdc_false); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_continue_text(PDF *p, const char *text) -{ - static const char fn[] = "PDF_continue_text"; - if (pdf_enter_api(p, fn, pdf_state_content, "(p[%p], \"%s\")\n", - (void *) p, pdc_strprint(p->pdc, text, 0))) - { - int len = text ? (int) strlen(text) : 0; - pdf_show_text(p, text, len, NULL, NULL, pdc_true); - } -} - -PDFLIB_API void PDFLIB_CALL -PDF_continue_text2(PDF *p, const char *text, int len) -{ - static const char fn[] = "PDF_continue_text2"; - if (pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\", %d)\n", - (void *) p, pdc_strprint(p->pdc, text, len), len)) - { - pdf_show_text(p, text, len, NULL, NULL, pdc_true); - } -} - - -/* ----------------------- Text fitting routines ------------------------ */ - -#define PDF_KERNING_FLAG PDC_OPT_UNSUPP - -/* definitions of fit text options */ -static const pdc_defopt pdf_fit_textline_options[] = -{ - {"font", pdc_fonthandle, PDC_OPT_NONE, 1, 1, - 0, 0, NULL}, - - {"fontsize", pdc_floatlist, PDC_OPT_REQUIRIF1 | PDC_OPT_NOZERO, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"textrendering", pdc_integerlist, PDC_OPT_NONE, 1, 1, - 0, PDF_LAST_TRMODE, NULL}, - - {"wordspacing", pdc_floatlist, PDC_OPT_NONE, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"charspacing", pdc_floatlist, PDC_OPT_NONE, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"horizscaling", pdc_floatlist, PDC_OPT_NOZERO, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"textrise", pdc_floatlist, PDC_OPT_NONE, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"underline", pdc_booleanlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, NULL}, - - {"overline", pdc_booleanlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, NULL}, - - {"strikeout", pdc_booleanlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, NULL}, - - {"kerning", pdc_booleanlist, PDF_KERNING_FLAG, 1, 1, - 0.0, 0.0, NULL}, - - {"textformat", pdc_keywordlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, pdf_textformat_keylist}, - - {"margin", pdc_floatlist, PDC_OPT_NONE, 1, 2, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"orientate", pdc_keywordlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, pdf_orientate_keylist}, - - {"boxsize", pdc_floatlist, PDC_OPT_NONE, 2, 2, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"rotate", pdc_floatlist, PDC_OPT_NONE, 1, 1, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"position", pdc_floatlist, PDC_OPT_NONE, 1, 2, - PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, - - {"fitmethod", pdc_keywordlist, PDC_OPT_NONE, 1, 1, - 0.0, 0.0, pdf_fitmethod_keylist}, - - {"distortionlimit", pdc_floatlist, PDC_OPT_NONE, 1, 1, - 0.0, 100.0, NULL}, - - PDC_OPT_TERMINATE -}; - -void -pdf__fit_textline(PDF *p, const char *text, int len, float x, float y, - const char *optlist) -{ - pdc_byte *utext = (pdc_byte *) ""; - pdc_resopt *results; - pdc_clientdata data; - pdc_text_format textformat_save = p->textformat; - pdc_bool underline_save = p->underline; - pdc_bool overline_save = p->overline; - pdc_bool strikeout_save = p->strikeout; - int charlen; - - int font; - float fontsize; - int textrendering, ntextrendering; - float textrise, wordspacing, charspacing, horizscaling; - int nfontsize, ntextrise, nwordspacing, ncharspacing, nhorizscaling; - float margin[2], boxsize[2], position[2], angle, distortionlimit; - pdc_fitmethod method; - int inum, orientangle, indangle; - - if (text && len == 0) - len = (int) strlen(text); - if (text == NULL || len <= 0) - return; - - /* defaults */ - font = p->tstate[p->sl].f; - fontsize = p->tstate[p->sl].fs; - orientangle = 0; - margin[0] = margin[1] = (float) 0.0; - boxsize[0] = boxsize[1] = (float) 0.0; - position[0] = position[1] = (float) 0.0; - angle = (float) 0.0; - method = pdc_nofit; - distortionlimit = (float) 75.0; - - /* parsing optlist */ - data.compatibility = p->compatibility; - data.maxfont = p->fonts_number - 1; - data.hastobepos = p->hastobepos; - results = pdc_parse_optionlist(p->pdc, optlist, pdf_fit_textline_options, - &data, pdc_true); - - /* save options */ - pdc_get_optvalues(p->pdc, "font", results, &font, NULL); - - nfontsize = pdc_get_optvalues(p->pdc, "fontsize", results, - &fontsize, NULL); - - ntextrendering = pdc_get_optvalues(p->pdc, "textrendering", results, - &textrendering, NULL); - - nwordspacing = pdc_get_optvalues(p->pdc, "wordspacing", results, - &wordspacing, NULL); - - ncharspacing = pdc_get_optvalues(p->pdc, "charspacing", results, - &charspacing, NULL); - - nhorizscaling = pdc_get_optvalues(p->pdc, "horizscaling", results, - &horizscaling, NULL); - - ntextrise = pdc_get_optvalues(p->pdc, "textrise", results, - &textrise, NULL); - - pdc_get_optvalues(p->pdc, "underline", results, &p->underline, NULL); - - pdc_get_optvalues(p->pdc, "overline", results, &p->overline, NULL); - - pdc_get_optvalues(p->pdc, "strikeout", results, &p->strikeout, NULL); - - - if (pdc_get_optvalues(p->pdc, "textformat", results, &inum, NULL)) - p->textformat = (pdc_text_format) inum; - - if (1 == pdc_get_optvalues(p->pdc, "margin", results, margin, NULL)) - margin[1] = margin[0]; - - pdc_get_optvalues(p->pdc, "orientate", results, &orientangle, NULL); - - pdc_get_optvalues(p->pdc, "boxsize", results, boxsize, NULL); - - pdc_get_optvalues(p->pdc, "rotate", results, &angle, NULL); - - pdc_get_optvalues(p->pdc, "distortionlimit", results, - &distortionlimit, NULL); - - if (1 == pdc_get_optvalues(p->pdc, "position", results, position, NULL)) - position[1] = position[0]; - - if (pdc_get_optvalues(p->pdc, "fitmethod", results, &inum, NULL)) - method = (pdc_fitmethod) inum; - - pdc_cleanup_optionlist(p->pdc, results); - - /* save graphic state */ - pdf__save(p); - - while (1) - { - pdf_tstate *ts = &p->tstate[p->sl]; - pdc_matrix m; - pdc_vector elemsize, elemscale, elemmargin, relpos, polyline[5]; - pdc_box fitbox, elembox; - pdc_scalar ss, minfscale; - float width, height, tx = 0, ty = 0; - - /* font size */ - if (nfontsize) - { - pdf__setfont(p, font, fontsize); - fontsize = p->tstate[p->sl].fs; - } - - /* no font set */ - if (p->tstate[p->sl].f == -1) - pdc_error(p->pdc, PDF_E_TEXT_NOFONT, 0, 0, 0, 0); - - /* convert text string */ - utext = pdf_check_textstring(p, text, len, font, pdc_false, pdc_false, - &len, &charlen); - if (utext == NULL || len == 0) - break; - p->currtext = utext; - - /* text rendering */ - if (ntextrendering) - pdf_set_text_rendering(p, textrendering); - - /* options for text width and height */ - if (nwordspacing) - pdf_set_word_spacing(p, wordspacing); - if (ncharspacing) - pdf_set_char_spacing(p, charspacing); - if (nhorizscaling) - pdf_set_horiz_scaling(p, horizscaling); - if (ntextrise) - pdf_set_text_rise(p, textrise); - - /* minimal horizontal scaling factor */ - minfscale = distortionlimit / 100.0; - - /* text width */ - width = pdf_str_width(p, utext, len, charlen, font, fontsize); - if (width < PDF_SMALLREAL) - break; - elemmargin.x = margin[0]; - elemsize.x = width + 2 * elemmargin.x; - - /* text height */ - height = (float) fabs((p->fonts[ts->f].capHeight / 1000.0f) * ts->fs); - elemmargin.y = margin[1]; - elemsize.y = height + 2 * elemmargin.y; - - /* orientation */ - indangle = orientangle / 90; - if (indangle % 2) - { - ss = elemsize.x; - elemsize.x = elemsize.y; - elemsize.y = ss; - } - - /* box for fitting */ - fitbox.ll.x = 0; - fitbox.ll.y = 0; - fitbox.ur.x = boxsize[0]; - fitbox.ur.y = boxsize[1]; - - /* relative position */ - relpos.x = position[0] / 100.0; - relpos.y = position[1] / 100.0; - - /* calculate image box */ - pdc_place_element(method, minfscale, &fitbox, &relpos, - &elemsize, &elembox, &elemscale); - - /* reference point */ - pdc_translation_matrix(x, y, &m); - pdf_concat_raw(p, &m); - - /* clipping */ - if (method == pdc_clip || method == pdc_slice) - { - pdf__rect(p, 0, 0, boxsize[0], boxsize[1]); - pdf__clip(p); - } - - /* optional rotation */ - if (fabs((double)(angle)) > PDC_FLOAT_PREC) - { - pdc_rotation_matrix(p->ydirection * angle, &m); - pdf_concat_raw(p, &m); - } - - /* translation of element box */ - elembox.ll.y *= p->ydirection; - elembox.ur.y *= p->ydirection; - pdc_box2polyline(&elembox, polyline); - tx = (float) polyline[indangle].x; - ty = (float) polyline[indangle].y; - pdc_translation_matrix(tx, ty, &m); - pdf_concat_raw(p, &m); - - /* orientation of text */ - if (orientangle != 0) - { - pdc_rotation_matrix(p->ydirection * orientangle, &m); - pdf_concat_raw(p, &m); - if (indangle % 2) - { - ss = elemscale.x; - elemscale.x = elemscale.y; - elemscale.y = ss; - } - } - - if (elemscale.x != 1 || elemscale.y != 1) - { - pdc_scale_matrix((float) elemscale.x, (float) elemscale.y, &m); - pdf_concat_raw(p, &m); - } - - /* place text */ - x = (float) elemmargin.x; - y = (float) elemmargin.y; - p->tstate[p->sl].m.e = x; - p->tstate[p->sl].m.f = y; - p->tstate[p->sl].lm.e = x; - p->tstate[p->sl].lm.f = y; - p->tstate[p->sl].potm = pdc_true; - pdf_place_text(p, utext, len, charlen, x, y, width, pdc_false); - - break; - } - - /* restore graphic state */ - pdf__restore(p); - p->underline = underline_save; - p->overline = overline_save; - p->strikeout = strikeout_save; - p->textformat = textformat_save; - p->currtext = NULL; - if (utext) - pdc_free(p->pdc, utext); -} - -PDFLIB_API void PDFLIB_CALL -PDF_fit_textline(PDF *p, const char *text, int len, float x, float y, - const char *optlist) -{ - static const char fn[] = "PDF_fit_textline"; - - if (pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\", %d, %g, %g, \"%s\")\n", - (void *) p, pdc_strprint(p->pdc, text, len), len, x, y, optlist)) - { - pdf__fit_textline(p, text, len, x, y, optlist); - } -} - -/* ----------------------- Text formatting routines ------------------------ */ - -/* text alignment modes */ -typedef enum { pdf_align_left, pdf_align_right, pdf_align_center, - pdf_align_justify, pdf_align_fulljustify -} pdf_alignment; - -/* this helper function returns the width of the null-terminated string -** 'text' for the current font and size EXCLUDING the last character's -** additional charspacing. -*/ -static float -pdf_swidth(PDF *p, const char *text) -{ - pdf_tstate *ts = &p->tstate[p->sl]; - - return pdf_str_width(p, (pdc_byte *)text, (int) strlen(text), 1, - ts->f, ts->fs) - ts->c * ts->m.a * ts->h; -} - -static void -pdf_show_aligned(PDF *p, const char *text, float x, float y, pdf_alignment mode) -{ - if (!text) - return; - - switch (mode) { - case pdf_align_left: - case pdf_align_justify: - case pdf_align_fulljustify: - /* nothing extra here... */ - break; - - case pdf_align_right: - x -= pdf_swidth(p, text); - break; - - case pdf_align_center: - x -= pdf_swidth(p, text) / 2; - break; - } - - pdf_show_text(p, text, (int) strlen(text), &x, &y, pdc_false); -} - -static int -pdf__show_boxed( - PDF *p, - const char *text, - int totallen, - float left, - float bottom, - float width, - float height, - const char *hmode, - const char *feature) -{ - float textwidth, old_word_spacing, curx, cury; - pdc_bool prematureexit; /* return because box is too small */ - int curTextPos; /* character currently processed */ - int lastdone; /* last input character processed */ - int toconv = totallen; - pdf_tstate *ts = &p->tstate[p->sl]; - pdc_byte *utext = NULL; - pdc_text_format textformat = p->textformat; - pdf_alignment mode = pdf_align_left; - pdc_bool blind = pdc_false; - - if (hmode == NULL || *hmode == '\0') - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "hmode", 0, 0, 0); - - if (!strcmp(hmode, "left")) - mode = pdf_align_left; - else if (!strcmp(hmode, "right")) - mode = pdf_align_right; - else if (!strcmp(hmode, "center")) - mode = pdf_align_center; - else if (!strcmp(hmode, "justify")) - mode = pdf_align_justify; - else if (!strcmp(hmode, "fulljustify")) - mode = pdf_align_fulljustify; - else - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "hmode", hmode, 0, 0); - - if (feature != NULL && *feature != '\0') - { - if (!strcmp(feature, "blind")) - blind = pdc_true; - else - pdc_error(p->pdc, PDC_E_ILLARG_STRING, "feature", feature, 0, 0); - } - - /* no font set */ - if (ts->f == -1) - pdc_error(p->pdc, PDF_E_TEXT_NOFONT, 0, 0, 0, 0); - - if (width == 0 && height != 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "width", pdc_errprintf(p->pdc, "%f", width), 0, 0); - - if (width != 0 && height == 0) - pdc_error(p->pdc, PDC_E_ILLARG_FLOAT, - "height", pdc_errprintf(p->pdc, "%f", height), 0, 0); - - /* we cannot handle several encodings */ - if (p->fonts[ts->f].encoding == pdc_unicode) - { - pdc_error(p->pdc, PDF_E_DOC_FUNCUNSUPP, "Unicode", 0, 0, 0); - } - - if (p->fonts[ts->f].encoding == pdc_glyphid) - { - pdc_error(p->pdc, PDF_E_DOC_FUNCUNSUPP, "glyphid", 0, 0, 0); - } - - if (p->fonts[ts->f].encoding == pdc_cid) - { - pdc_error(p->pdc, PDF_E_DOC_FUNCUNSUPP, "CID", 0, 0, 0); - } - - if (p->fonts[ts->f].encoding == pdc_ebcdic) - { - pdc_error(p->pdc, PDF_E_DOC_FUNCUNSUPP, "EBCDIC", 0, 0, 0); - } - - /* convert text string */ - if (toconv) - { - int charlen; - utext = pdf_check_textstring(p, text, totallen, ts->f, pdc_true, - pdc_true, &totallen, &charlen); - if (!utext) - return 0; - - utext[totallen] = 0; - text = (const char *) utext; - p->textformat = pdc_bytes; - } - - /* text length */ - if (!totallen) - totallen = (int) strlen(text); - - /* special case for a single aligned line */ - if (width == 0 && height == 0) - { - if (!blind) - pdf_show_aligned(p, text, left, bottom, mode); - - if (toconv) - { - pdc_free(p->pdc, utext); - p->textformat = textformat; - } - return 0; - } - - old_word_spacing = ts->w; - - curx = left; - cury = bottom + p->ydirection * height; - prematureexit = pdc_false; - curTextPos = 0; - lastdone = 0; - - /* switch curx for right and center justification */ - if (mode == pdf_align_right) - curx += width; - else if (mode == pdf_align_center) - curx += (width / 2); - -#define MAX_CHARS_IN_LINE 2048 - - /* loop until all characters processed, or box full */ - - while ((curTextPos < totallen) && !prematureexit) { - /* buffer for constructing the line */ - char linebuf[MAX_CHARS_IN_LINE]; - int curCharsInLine = 0; /* # of chars in constructed line */ - int lastWordBreak = 0; /* the last seen space char */ - int wordBreakCount = 0; /* # of blanks in this line */ - - /* loop over the input string */ - while (curTextPos < totallen) { - if (curCharsInLine >= MAX_CHARS_IN_LINE) - pdc_error(p->pdc, PDC_E_ILLARG_TOOLONG, "(text line)", - pdc_errprintf(p->pdc, "%d", MAX_CHARS_IN_LINE-1), 0, 0); - - /* abandon DOS line-ends */ - if (text[curTextPos] == PDF_RETURN && - text[curTextPos+1] == PDF_NEWLINE) - curTextPos++; - - /* if it's a forced line break draw the line */ - if (text[curTextPos] == PDF_NEWLINE || - text[curTextPos] == PDF_RETURN) { - - cury -= ts->l; /* adjust cury by leading */ - - if (p->ydirection * (cury - bottom) < 0) { - prematureexit = pdc_true; /* box full */ - break; - } - - linebuf[curCharsInLine] = 0; /* terminate the line */ - - /* check whether the line is too long */ - ts->w = (float) 0.0; - textwidth = pdf_swidth(p, linebuf); - - /* the forced break occurs too late for this line */ - if (textwidth > width) { - if (wordBreakCount == 0) { /* no blank found */ - prematureexit = pdc_true; - break; - } - linebuf[lastWordBreak] = 0; /* terminate at last blank */ - if (curTextPos > 0 && text[curTextPos-1] == PDF_RETURN) - --curTextPos; - curTextPos -= (curCharsInLine - lastWordBreak); - - if (!blind) { - textwidth = pdf_swidth(p, linebuf); - if (wordBreakCount != 1 && - (mode == pdf_align_justify || - mode == pdf_align_fulljustify)) { - pdf_set_word_spacing(p, - p->ydirection * (width - textwidth) / - ((wordBreakCount - 1) * ts->h * ts->m.a)); - } - else - pdf_set_word_spacing(p, (float) 0.0); - pdf_show_aligned(p, linebuf, curx, cury, mode); - } - - } else if (!blind) { - - if (mode == pdf_align_fulljustify && wordBreakCount > 0) { - pdf_set_word_spacing(p, - p->ydirection * (width - textwidth) / - (wordBreakCount * ts->h * ts->m.a)); - } else { - pdf_set_word_spacing(p, (float) 0.0); - } - - pdf_show_aligned(p, linebuf, curx, cury, mode); - } - - lastdone = curTextPos; - curCharsInLine = lastWordBreak = wordBreakCount = 0; - curTextPos++; - - } else if (text[curTextPos] == PDF_SPACE) { - linebuf[curCharsInLine] = 0; /* terminate the line */ - ts->w = (float) 0.0; - - /* line too long ==> break at last blank */ - if (pdf_swidth(p, linebuf) > width) { - cury -= ts->l; /* adjust cury by leading */ - - if (p->ydirection * (cury - bottom) < 0) { - prematureexit = pdc_true; /* box full */ - break; - } - - linebuf[lastWordBreak] = 0; /* terminate at last blank */ - curTextPos -= (curCharsInLine - lastWordBreak - 1); - - if (lastWordBreak == 0) - curTextPos--; - - /* LATER: * force break if wordBreakCount == 1, - * i.e., no blank - */ - if (wordBreakCount == 0) { - prematureexit = pdc_true; - break; - } - - /* adjust word spacing for full justify */ - if (wordBreakCount != 1 && (mode == pdf_align_justify || - mode == pdf_align_fulljustify)) { - ts->w = (float) 0.0; - textwidth = pdf_swidth(p, linebuf); - if (!blind) { - pdf_set_word_spacing(p, - p->ydirection * (width - textwidth) / - ((wordBreakCount - 1) * ts->h * ts->m.a)); - } - } - else if (!blind) { - pdf_set_word_spacing(p, (float) 0.0); - } - - - lastdone = curTextPos; - if (!blind) - pdf_show_aligned(p, linebuf, curx, cury, mode); - curCharsInLine = lastWordBreak = wordBreakCount = 0; - - } else { - /* blank found, and line still fits */ - wordBreakCount++; - lastWordBreak = curCharsInLine; - linebuf[curCharsInLine++] = text[curTextPos++]; - } - - } else { - /* regular character ==> store in buffer */ - linebuf[curCharsInLine++] = text[curTextPos++]; - } - } - - if (prematureexit) { - break; /* box full */ - } - - /* if there is anything left in the buffer, draw it */ - if (curTextPos >= totallen && curCharsInLine != 0) { - cury -= ts->l; /* adjust cury for line height */ - - if (p->ydirection * (cury - bottom) < 0) { - prematureexit = pdc_true; /* box full */ - break; - } - - linebuf[curCharsInLine] = 0; /* terminate the line */ - - /* check if the last line is too long */ - ts->w = (float) 0.0; - textwidth = pdf_swidth(p, linebuf); - - if (textwidth > width) { - if (wordBreakCount == 0) - { - prematureexit = pdc_true; - break; - } - - linebuf[lastWordBreak] = 0; /* terminate at last blank */ - curTextPos -= (curCharsInLine - lastWordBreak - 1); - - /* recalculate the width */ - textwidth = pdf_swidth(p, linebuf); - - /* adjust word spacing for full justify */ - if (wordBreakCount != 1 && (mode == pdf_align_justify || - mode == pdf_align_fulljustify)) { - if (!blind) { - pdf_set_word_spacing(p, - p->ydirection * (width - textwidth) / - ((wordBreakCount - 1) * ts->h * ts->m.a)); - } - } - - } else if (!blind) { - - if (mode == pdf_align_fulljustify && wordBreakCount) { - pdf_set_word_spacing(p, - p->ydirection * (width - textwidth) / - (wordBreakCount * ts->h * ts->m.a)); - } else { - pdf_set_word_spacing(p, (float) 0.0); - } - } - - lastdone = curTextPos; - if (!blind) - pdf_show_aligned(p, linebuf, curx, cury, mode); - curCharsInLine = lastWordBreak = wordBreakCount = 0; - } - } - - if (!blind) - pdf_set_word_spacing(p, old_word_spacing); - - /* return number of remaining characters */ - - while (text[lastdone] == PDF_SPACE) - ++lastdone; - - if ((text[lastdone] == PDF_RETURN || - text[lastdone] == PDF_NEWLINE) && text[lastdone+1] == 0) - ++lastdone; - - if (toconv) - { - pdc_free(p->pdc, utext); - p->textformat = textformat; - } - - return (int) (totallen - lastdone); -} - -PDFLIB_API int PDFLIB_CALL -PDF_show_boxed( - PDF *p, - const char *text, - float left, - float bottom, - float width, - float height, - const char *hmode, - const char *feature) -{ - static const char fn[] = "PDF_show_boxed"; - int remchars; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\", %g, %g, %g, %g, \"%s\", \"%s\")", - (void *) p, pdc_strprint(p->pdc, text, 0), - left, bottom, width, height, hmode, feature)) - { - return 0; - } - - if (text == NULL || *text == '\0') { - pdc_trace(p->pdc, "[%d]\n", 0); - return 0; - } - - remchars = pdf__show_boxed(p, text, 0, left, bottom, - width, height, hmode, feature); - - pdc_trace(p->pdc, "[%d]\n", remchars); - return remchars; -} - -PDFLIB_API int PDFLIB_CALL -PDF_show_boxed2( - PDF *p, - const char *text, - int len, - float left, - float bottom, - float width, - float height, - const char *hmode, - const char *feature) -{ - static const char fn[] = "PDF_show_boxed2"; - int remchars; - - if (!pdf_enter_api(p, fn, pdf_state_content, - "(p[%p], \"%s\", %d, %g, %g, %g, %g, \"%s\", \"%s\")", - (void *) p, pdc_strprint(p->pdc, text, len), len, - left, bottom, width, height, hmode, feature)) - { - return 0; - } - - if (text == NULL || len == 0) { - pdc_trace(p->pdc, "[%d]\n", 0); - return 0; - } - - remchars = pdf__show_boxed(p, text, len, left, bottom, - width, height, hmode, feature); - - pdc_trace(p->pdc, "[%d]\n", remchars); - return remchars; -} - diff --git a/src/libs/pdflib/libs/pdflib/p_tiff.c b/src/libs/pdflib/libs/pdflib/p_tiff.c deleted file mode 100644 index ebc65f40f5..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_tiff.c +++ /dev/null @@ -1,883 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_tiff.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * TIFF processing for PDFlib - * - */ - -#include "p_intern.h" -#include "p_image.h" - -#ifndef HAVE_LIBTIFF - -pdc_bool -pdf_is_TIFF_file(PDF *p, pdc_file *fp, pdf_tiff_info *tiff, pdc_false) -{ - (void) p; - (void) fp; - (void) tiff; - - return pdc_false; -} - -int -pdf_process_TIFF_data( - PDF *p, - int imageslot) -{ - (void) imageslot; - - pdc_warning(p->pdc, PDF_E_UNSUPP_IMAGE, "TIFF", 0, 0, 0); - return -1; -} - -#else - -#include "tiffiop.h" -static tsize_t -pdf_libtiff_read(void* fd, tdata_t buf, tsize_t size) -{ - pdc_file *fp = (pdc_file *) fd; - - return ((tsize_t) pdc_fread(buf, 1, (size_t) size, fp)); -} - -static toff_t -pdf_libtiff_seek(void* fd, toff_t off, int whence) -{ - pdc_file *fp = (pdc_file *) fd; - - return ((toff_t) pdc_fseek(fp, (long) off, whence)); -} - -static int -pdf_libtiff_close(void* fd) -{ - (void) fd; - - /* pdc_fclose(fp); this happens in caller function */ - - return 0; -} - -static toff_t -pdf_libtiff_size(void* fd) -{ - pdc_file *fp = (pdc_file *) fd; - - return (toff_t) pdc_file_size(fp); -} - -static void * -pdf_libtiff_malloc(TIFF *t, tsize_t size) -{ - PDF *p = (PDF*) t->pdflib_opaque; - return pdc_malloc(p->pdc, (size_t)size, "libtiff"); -} - -static void * -pdf_libtiff_realloc(TIFF *t, tdata_t mem, tsize_t size) -{ - PDF *p = (PDF*) t->pdflib_opaque; - return(pdc_realloc(p->pdc, (void*)mem, (size_t)size, "libtiff")); -} - -static void -pdf_libtiff_free(TIFF *t, tdata_t mem) -{ - PDF *p = (PDF*) t->pdflib_opaque; - pdc_free(p->pdc, (void*)mem); -} - -static void -pdf_data_source_TIFF_init(PDF *p, PDF_data_source *src) -{ - pdf_image *image; - - image = (pdf_image *) src->private_data; - - if (image->strips == 1) - image->info.tiff.cur_line = 0; - - if (image->use_raw) { - /* malloc is done in the fill function */ - src->buffer_length = (size_t) 0; - src->buffer_start = (pdc_byte *) NULL; - } else { - src->buffer_length = (size_t) (image->components * image->width); - src->buffer_start = (pdc_byte *) - pdc_malloc(p->pdc, src->buffer_length, "pdf_data_source_TIFF_init"); - } -} - -static pdc_bool -pdf_data_source_TIFF_fill(PDF *p, PDF_data_source *src) -{ - pdf_image *image; - int col; - pdc_byte *dest; - uint16 fillorder; - uint32 *s, *bc; - - image = (pdf_image *) src->private_data; - - if (image->use_raw) { - if (image->info.tiff.cur_line == image->strips) - return pdc_false; - - TIFFGetField(image->info.tiff.tif, TIFFTAG_STRIPBYTECOUNTS, &bc); - - if (bc[image->info.tiff.cur_line] > src->buffer_length) { - src->buffer_length = bc[image->info.tiff.cur_line]; - src->buffer_start = (pdc_byte *) - pdc_realloc(p->pdc, src->buffer_start, - src->buffer_length, "pdf_data_source_TIFF_fill"); - } - - if (TIFFReadRawStrip(image->info.tiff.tif, - (tstrip_t) image->info.tiff.cur_line, - (tdata_t) src->buffer_start, - (tsize_t) bc[image->info.tiff.cur_line]) == -1) { - - pdc_free(p->pdc, (void *) src->buffer_start); - TIFFClose(image->info.tiff.tif); - image->fp = NULL; - pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "TIFF", "?", 0, 0); - } - - src->next_byte = src->buffer_start; - src->bytes_available = bc[image->info.tiff.cur_line]; - - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_FILLORDER, &fillorder) - && (fillorder == FILLORDER_LSB2MSB)) { - TIFFReverseBits((unsigned char *) src->buffer_start, - (unsigned long) src->bytes_available); - } - - if (image->strips > 1) { - /* only a single strip of a multi-strip image */ - image->info.tiff.cur_line = image->strips; - } else - image->info.tiff.cur_line++; - - } else { - if (image->info.tiff.cur_line++ == image->height) - return pdc_false; - - src->next_byte = src->buffer_start; - src->bytes_available = src->buffer_length; - - dest = src->buffer_start; - s = image->info.tiff.raster + - ((int)image->height - image->info.tiff.cur_line) * - (int) image->width; - - switch (image->components) { - case 1: - for (col = 0; col < image->width; col++, s++) { - *dest++ = (pdc_byte) TIFFGetR(*s); - } - break; - - case 3: - for (col = 0; col < image->width; col++, s++) { - *dest++ = (pdc_byte) TIFFGetR(*s); - *dest++ = (pdc_byte) TIFFGetG(*s); - *dest++ = (pdc_byte) TIFFGetB(*s); - } - break; - - case 4: - for (col = 0; col < image->width; col++, s++) { - unsigned char* t = (unsigned char*)&(*s); - *dest++ = (pdc_byte) t[0]; - *dest++ = (pdc_byte) t[1]; - *dest++ = (pdc_byte) t[2]; - *dest++ = (pdc_byte) t[3]; - } - break; - - default: - pdc_error(p->pdc, PDF_E_IMAGE_BADCOMP, - pdc_errprintf(p->pdc, "%d", image->components), - image->filename, 0, 0); - } - } - - return pdc_true; -} - -static void -pdf_data_source_TIFF_terminate(PDF *p, PDF_data_source *src) -{ - pdc_free(p->pdc, (void *) src->buffer_start); -} - -static int -pdf_check_colormap(int n, uint16* r, uint16* g, uint16* b) -{ - while (n-- > 0) - if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) - return(16); - return(8); -} - -pdc_bool -pdf_is_TIFF_file(PDF *p, pdc_file *fp, pdf_tiff_info *tiff_info, pdc_bool check) -{ - const char *filename; - - /* Suppress all warnings and error messages */ - (void) TIFFSetErrorHandler(NULL); - (void) TIFFSetWarningHandler(NULL); - - filename = pdc_file_name(fp); - tiff_info->tif = TIFFClientOpen(filename, "r", - (void *)fp, - pdf_libtiff_read, NULL, - pdf_libtiff_seek, pdf_libtiff_close, pdf_libtiff_size, - NULL, NULL, (void *)p, - pdf_libtiff_malloc, pdf_libtiff_realloc, pdf_libtiff_free, - NULL, NULL); - if (tiff_info->tif == NULL) { - pdc_fseek(fp, 0L, SEEK_SET); - return pdc_false; - } - if (check) - TIFFClose(tiff_info->tif); - return pdc_true; -} - -int -pdf_process_TIFF_data( - PDF *p, - int imageslot) -{ - static const char *fn = "pdf_process_TIFF_data"; - uint32 w, h; - uint16 unit, bpc, compression, photometric, inkset, extra, *sinfo; - uint16 planarconfig, predictor; - uint16 *rmap, *gmap, *bmap; - uint32 group3opts; - tsample_t components; - size_t npixels; - pdf_image *image; - float res_x, res_y; - pdf_colorspace cs; - int slot; - int strip; - int errint = 0; - int errcode = 0; - pdc_bool isopen = pdc_false; - - image = &p->images[imageslot]; - - if (pdf_is_TIFF_file(p, image->fp, &image->info.tiff, pdc_false) - == pdc_false) { - errcode = PDF_E_IMAGE_CORRUPT; - goto PDF_TIFF_ERROR; - } - image->info.tiff.tif->tif_fd = (FILE*)image->fp; - isopen = pdc_true; - - if (image->page != 1) { - if (TIFFSetDirectory(image->info.tiff.tif, (tdir_t) (image->page - 1)) - != 1) { - errint = image->page; - errcode = PDF_E_IMAGE_NOPAGE; - goto PDF_TIFF_ERROR; - } - } - - TIFFGetField(image->info.tiff.tif, TIFFTAG_COMPRESSION, &compression); - - if (compression == COMPRESSION_OJPEG || - compression == COMPRESSION_JPEG) { - /* can't handle these yet */ - errint = compression; - errcode = PDF_E_TIFF_UNSUPP_JPEG; - goto PDF_TIFF_ERROR; - } - - photometric = 255; /* dummy value */ - - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_PHOTOMETRIC, &photometric) && - (photometric == PHOTOMETRIC_YCBCR || - photometric == PHOTOMETRIC_CIELAB || - photometric == PHOTOMETRIC_MASK)) { - /* can't handle these */ - errint = photometric; - errcode = PDF_E_TIFF_UNSUPP_CS; - goto PDF_TIFF_ERROR; - } - - TIFFGetField(image->info.tiff.tif, TIFFTAG_IMAGEWIDTH, &w); - TIFFGetField(image->info.tiff.tif, TIFFTAG_IMAGELENGTH, &h); - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_BITSPERSAMPLE, &bpc); - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_SAMPLESPERPIXEL, - &components); - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_EXTRASAMPLES, - &extra, &sinfo); - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_PLANARCONFIG, - &planarconfig); - - if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8) { - /* PDF doesn't support other values of the color depth */ - errint = bpc; - errcode = PDF_E_IMAGE_BADDEPTH; - goto PDF_TIFF_ERROR; - } - - image->width = (float) w; - image->height = (float) h; - image->components = components; - image->strips = 1; - image->bpc = bpc; - - /* fetch the resolution values if found in the file */ - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_XRESOLUTION, &res_x) && - TIFFGetField(image->info.tiff.tif, TIFFTAG_YRESOLUTION, &res_y) && - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_RESOLUTIONUNIT, - &unit) && - res_x > 0 && res_y > 0) { - - if (unit == RESUNIT_INCH) { - image->dpi_x = res_x; - image->dpi_y = res_y; - - } else if (unit == RESUNIT_CENTIMETER) { - image->dpi_x = res_x * (float) 2.54; - image->dpi_y = res_y * (float) 2.54; - - } else if (unit == RESUNIT_NONE) { - image->dpi_x = -res_x; - image->dpi_y = -res_y; - } - } - - if (compression != COMPRESSION_LZW && p->debug['P']) - compression = (uint16) 0; /* dummy: disable pass-through mode */ - - /* find out whether we can use the compressed raw data directly */ - switch ((int) compression) { - case COMPRESSION_CCITTRLE: - case COMPRESSION_CCITTRLEW: - if (TIFFIsTiled(image->info.tiff.tif)) { - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - image->params = (char *) pdc_malloc(p->pdc, PDF_MAX_PARAMSTRING, - fn); - - strcpy(image->params, "/EndOfBlock false"); - strcat(image->params, "/EncodedByteAlign true"); - - if (photometric == PHOTOMETRIC_MINISBLACK) - strcat(image->params, "/BlackIs1 true"); - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = ccitt; - image->bpc = 1; - image->use_raw = pdc_true; - break; - - case COMPRESSION_CCITTFAX3: - if (TIFFIsTiled(image->info.tiff.tif)) { - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - image->params = (char *) pdc_malloc(p->pdc, PDF_MAX_PARAMSTRING, - fn); - strcpy(image->params, ""); - - /* The following contains three code segments which are - * disabled. - * Apparently, and contrary to my reading of the specs, - * the following can not be deduced from the respective - * TIFF entry or option: - * - I expected /EndOfBlock and /EndOfLine to be always - * true for CCITTFAX3 images. - * - * - /EncodedByteAlign can not reliably be deduced from - * GROUP3OPT_FILLBITS; - * - * - /BlackIs1 can not reliably be deduced from - * PHOTOMETRIC_MINISBLACK; - * - * From practical experience, the respective lines are - * disabled, but I don't have any clear explanation for this. - * A few TIFF images still don't work with this setting, - * unfortunately. - */ - - /* SEE ABOVE! - strcpy(image->params, "/EndOfBlock false"); - strcat(image->params, "/EndOfLine true"); - */ - /* - strcat(image->params, "/DamagedRowsBeforeError 1"); - */ - - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_GROUP3OPTIONS, - &group3opts)) { - /* /K = 0 (= G3,1D) is default */ - if (group3opts & GROUP3OPT_2DENCODING) - strcat(image->params, "/K 1"); - - /* SEE ABOVE! - if (group3opts & GROUP3OPT_FILLBITS) - strcat(image->params, "/EncodedByteAlign true"); - */ - } - - /* SEE ABOVE! - if ((photometric == PHOTOMETRIC_MINISBLACK)) - strcat(image->params, "/BlackIs1 true"); - */ - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = ccitt; - image->bpc = 1; - image->use_raw = pdc_true; - break; - - case COMPRESSION_CCITTFAX4: - if (TIFFIsTiled(image->info.tiff.tif)) { - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - image->params = (char *) pdc_malloc(p->pdc, PDF_MAX_PARAMSTRING, - fn); - - strcpy(image->params, "/K -1"); - - if (photometric == PHOTOMETRIC_MINISBLACK) - strcat(image->params, "/BlackIs1 true"); - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = ccitt; - image->bpc = 1; - image->use_raw = pdc_true; - break; - - case COMPRESSION_NONE: - /* - * can't use multiple data sources in raw mode, or deal with tiles - */ - if ((planarconfig == PLANARCONFIG_SEPARATE && components > 1) || - TIFFIsTiled(image->info.tiff.tif)) { - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - if (extra != 0) - image->components -= extra; /* ignore the extra channels */ - - image->use_raw = pdc_false; - image->bpc = 8; - break; - - case COMPRESSION_LZW: - - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_PREDICTOR, - &predictor)) { - if (predictor != pred_default && predictor != pred_tiff) { - errint = predictor; - errcode = PDF_E_TIFF_UNSUPP_PREDICT; - goto PDF_TIFF_ERROR; - } else - image->predictor = (pdf_predictor) predictor; - } - - if (TIFFIsTiled(image->info.tiff.tif)) { - errcode = PDF_E_TIFF_UNSUPP_LZW_TILED; - goto PDF_TIFF_ERROR; - } - - if (planarconfig == PLANARCONFIG_SEPARATE && components > 1) { - errcode = PDF_E_TIFF_UNSUPP_LZW_PLANES; - goto PDF_TIFF_ERROR; - } - - if (extra != 0) { - errcode = PDF_E_TIFF_UNSUPP_LZW_ALPHA; - goto PDF_TIFF_ERROR; - } - - if (photometric == PHOTOMETRIC_MINISWHITE) - image->invert = !image->invert; - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = lzw; - image->use_raw = pdc_true; - break; - - case COMPRESSION_PACKBITS: - /* - * can't pass through extra bits or use multiple data sources - * in raw mode - */ - if (extra != 0 || - (planarconfig == PLANARCONFIG_SEPARATE && components > 1) || - TIFFIsTiled(image->info.tiff.tif)) { - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - if (photometric == PHOTOMETRIC_MINISWHITE) - image->invert = !image->invert; - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = runlength; - image->use_raw = pdc_true; - break; - - case COMPRESSION_DEFLATE: - case COMPRESSION_ADOBE_DEFLATE: - if (extra != 0 || - (planarconfig == PLANARCONFIG_SEPARATE && components > 1) || - TIFFIsTiled(image->info.tiff.tif)) { - image->components -= extra; /* ignore the extra channels */ - image->use_raw = pdc_false; - image->bpc = 8; - break; - } - - if (TIFFGetField(image->info.tiff.tif, TIFFTAG_PREDICTOR, - &predictor)) { - if (predictor != pred_default && predictor != pred_tiff) { - errint = predictor; - errcode = PDF_E_TIFF_UNSUPP_PREDICT; - goto PDF_TIFF_ERROR; - } else - image->predictor = (pdf_predictor) predictor; - } - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = flate; - image->use_raw = pdc_true; - break; - -#ifdef PDF_NYI - /* dead code, doesn't work yet */ - case COMPRESSION_OJPEG: - case COMPRESSION_JPEG: - if (TIFFIsTiled(image->info.tiff.tif)) { - errcode = PDF_E_TIFF_UNSUPP_JPEG_TILED; - goto PDF_TIFF_ERROR; - } - - if (extra != 0 || - (planarconfig == PLANARCONFIG_SEPARATE && components > 1) || - TIFFIsTiled(image->info.tiff.tif)) { - errcode = PDF_E_UNSUPP_JPEG_ALPHA; - goto PDF_TIFF_ERROR; - } - - image->strips = (int) TIFFNumberOfStrips(image->info.tiff.tif); - image->compression = dct; - image->use_raw = pdc_true; - break; -#endif /* !PDF_NYI */ - - default: - image->use_raw = pdc_false; - image->bpc = 8; - } - - /* palette images are automatically converted to RGB by tifflib */ - if (image->components == 1 && !image->use_raw && - TIFFGetField(image->info.tiff.tif, TIFFTAG_COLORMAP, - &rmap, &gmap, &bmap)) { - image->components = 3; - } - - if (image->imagemask) - { - if (image->components != 1) { - errcode = PDF_E_IMAGE_BADMASK; - goto PDF_TIFF_ERROR; - } - - if (p->compatibility <= PDC_1_3) { - if (image->components != 1 || image->bpc != 1) { - errcode = PDF_E_IMAGE_MASK1BIT13; - goto PDF_TIFF_ERROR; - } - } else if (image->bpc > 1) { - /* images with more than one bit will be written as /SMask, - * and don't require an /ImageMask entry. - */ - image->imagemask = pdc_false; - } - } - - if (image->mask != pdc_undef) - { - if (image->strips != 1) { - errcode = PDF_E_TIFF_MASK_MULTISTRIP; - goto PDF_TIFF_ERROR; - } - } - - if (image->colorspace == pdc_undef) - { - switch (image->components) { - case 1: - image->colorspace = DeviceGray; - break; - - case 3: - if (photometric == PHOTOMETRIC_CIELAB) { - errint = photometric; - errcode = PDF_E_TIFF_UNSUPP_CS; - goto PDF_TIFF_ERROR; - } else - image->colorspace = DeviceRGB; - break; - - case 4: - if (photometric == PHOTOMETRIC_SEPARATED) { - TIFFGetFieldDefaulted(image->info.tiff.tif, TIFFTAG_INKSET, - &inkset); - if (inkset != INKSET_CMYK) { - errint = inkset; - errcode = PDF_E_TIFF_UNSUPP_SEP_NONCMYK; - goto PDF_TIFF_ERROR; - } - image->colorspace = DeviceCMYK; - } else { - /* if it's not separated it must be RGB with alpha */ - image->components = 3; - image->colorspace = DeviceRGB; - image->compression = none; - } - break; - - default: - errint = image->components; - errcode = PDF_E_IMAGE_BADCOMP; - goto PDF_TIFF_ERROR; - } - } - - - image->src.private_data = (void *) image; - image->src.init = pdf_data_source_TIFF_init; - image->src.fill = pdf_data_source_TIFF_fill; - image->src.terminate = pdf_data_source_TIFF_terminate; - - if (image->use_raw) { - uint32 row, rowsperstrip; - - /* must handle colormap ourselves */ - if (photometric == PHOTOMETRIC_PALETTE) { - int i; - pdf_colormap colormap; - - if (!TIFFGetField(image->info.tiff.tif, TIFFTAG_COLORMAP, - &rmap, &gmap, &bmap)) { - errcode = PDF_E_IMAGE_COLORMAP; - goto PDF_TIFF_ERROR; - } - - cs.type = Indexed; - cs.val.indexed.palette_size = 1 << bpc; - cs.val.indexed.colormap = &colormap; - cs.val.indexed.colormap_id = PDC_BAD_ID; - - cs.val.indexed.base = DeviceRGB; - -#define CVT(x) (uint16) (((x) * 255) / ((1L<<16)-1)) - if (pdf_check_colormap(cs.val.indexed.palette_size, - rmap, gmap, bmap) == 16) - { - /* convert colormap to 8 bit values */ - for (i = 0; i < cs.val.indexed.palette_size; i++) { - rmap[i] = CVT(rmap[i]); - gmap[i] = CVT(gmap[i]); - bmap[i] = CVT(bmap[i]); - } - } -#undef CVT - - for (i = 0; i < cs.val.indexed.palette_size; i++) { - colormap[i][0] = (pdc_byte) rmap[i]; - colormap[i][1] = (pdc_byte) gmap[i]; - colormap[i][2] = (pdc_byte) bmap[i]; - } - - image->components = 1; - - slot = pdf_add_colorspace(p, &cs, pdc_false); - image->colorspace = (pdf_colorspacetype) slot; - - - } - - - if (image->strips > image->height) - image->strips = (int) image->height; - - if (TIFFGetFieldDefaulted(image->info.tiff.tif, - TIFFTAG_ROWSPERSTRIP, &rowsperstrip) == 1 && (int) rowsperstrip - != -1) - image->rowsperstrip = (int) rowsperstrip; - else - image->rowsperstrip = (int) image->height; - - /* - * The first strip must be handled separately because it carries the - * colormap for indexed images. Other strips reuse this colormap. - */ - image->info.tiff.cur_line = 0; - image->height = (float) - (image->rowsperstrip > (int) h ? (int) h : image->rowsperstrip); - pdf_put_image(p, imageslot, pdc_true); - - for (row = (uint32) image->rowsperstrip, strip = 1; - row < h; row += (uint32) image->rowsperstrip, strip++) { - - image->height = (float) (row+image->rowsperstrip > h ? - (int) (h - row) : image->rowsperstrip); - - /* - * tell pdf_data_source_TIFF_fill() to read only data of the - * current strip - */ - image->info.tiff.cur_line = strip; - pdf_put_image(p, imageslot, pdc_false); - } - - image->height = (float) h; - image->no -= (image->strips - 1); /* number of first strip */ - - } else { - - - image->info.tiff.raster = (uint32 *) NULL; - - if (p->colorspaces[image->colorspace].type != DeviceCMYK && - !(p->colorspaces[image->colorspace].type == ICCBased && - image->components == 4) && - p->colorspaces[image->colorspace].type != Lab) { - npixels = (size_t) (w * h); - image->info.tiff.raster = (uint32 *) pdc_malloc(p->pdc, - (size_t) (npixels * sizeof (uint32)), "pdf_open_TIFF"); - - if (!TIFFReadRGBAImage(image->info.tiff.tif, - w, h, image->info.tiff.raster, 1)) { - pdc_free(p->pdc, (void *) image->info.tiff.raster); - errcode = PDC_E_IO_NODATA; - goto PDF_TIFF_ERROR; - } - } else { - int linecounter = 0; - - npixels = (size_t) (TIFFScanlineSize(image->info.tiff.tif) * h); - image->info.tiff.raster = (uint32 *) - pdc_malloc(p->pdc, (size_t) npixels, "pdf_open_TIFF"); - - while (linecounter < image->height) { - if (TIFFReadScanline(image->info.tiff.tif, - (tdata_t) (image->info.tiff.raster + - ((int)image->height - linecounter - 1) * (int)image->width), - (uint32) linecounter, (tsample_t) 0) == -1) { - - pdc_free(p->pdc, (void *) image->info.tiff.raster); - errcode = PDC_E_IO_NODATA; - goto PDF_TIFF_ERROR; - } - linecounter++; - } - } - - pdf_put_image(p, imageslot, pdc_true); - - if (image->info.tiff.raster) - pdc_free(p->pdc, (void *) image->info.tiff.raster); - } - - image->in_use = pdc_true; /* mark slot as used */ - - TIFFClose(image->info.tiff.tif); - - return imageslot; - - PDF_TIFF_ERROR: - if (isopen) - TIFFClose(image->info.tiff.tif); - { - const char *stemp = pdc_errprintf(p->pdc, "%s", image->filename); - switch (errcode) - { - case PDC_E_IO_NODATA: - case PDF_E_IMAGE_ICC: - case PDF_E_IMAGE_ICC2: - case PDF_E_IMAGE_MASK1BIT13: - case PDF_E_TIFF_UNSUPP_LZW_TILED: - case PDF_E_TIFF_UNSUPP_LZW_PLANES: - case PDF_E_TIFF_UNSUPP_LZW_ALPHA: - case PDF_E_TIFF_UNSUPP_JPEG_TILED: - case PDF_E_TIFF_UNSUPP_JPEG_ALPHA: - case PDF_E_IMAGE_COLORIZE: - case PDF_E_TIFF_MASK_MULTISTRIP: - case PDF_E_IMAGE_COLORMAP: - case PDF_E_IMAGE_BADMASK: - pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0); - break; - - case PDF_E_IMAGE_CORRUPT: - pdc_set_errmsg(p->pdc, errcode, "TIFF", stemp, 0, 0); - break; - - case PDF_E_IMAGE_BADDEPTH: - case PDF_E_IMAGE_BADCOMP: - pdc_set_errmsg(p->pdc, errcode, - pdc_errprintf(p->pdc, "%d", errint), stemp, 0, 0); - break; - - case PDF_E_IMAGE_NOPAGE: - pdc_set_errmsg(p->pdc, errcode, - pdc_errprintf(p->pdc, "%d", errint), "TIFF", stemp, 0); - break; - - case PDF_E_TIFF_UNSUPP_JPEG: - case PDF_E_TIFF_UNSUPP_CS: - case PDF_E_TIFF_UNSUPP_PREDICT: - case PDF_E_TIFF_UNSUPP_SEP_NONCMYK: - pdc_set_errmsg(p->pdc, errcode, - stemp, pdc_errprintf(p->pdc, "%d", errint), 0, 0); - break; - - case 0: /* error code and message already set */ - break; - } - } - - if (image->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; -} - -#endif /* HAVE_LIBTIFF */ diff --git a/src/libs/pdflib/libs/pdflib/p_truetype.c b/src/libs/pdflib/libs/pdflib/p_truetype.c deleted file mode 100644 index b315c9a0e6..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_truetype.c +++ /dev/null @@ -1,1872 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_truetype.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib TrueType handling routines - * - */ - -#include "p_intern.h" -#include "p_font.h" -#include "p_truetype.h" - -#ifdef PDF_TRUETYPE_SUPPORTED - - -void -tt_assert(PDF *p, tt_file *ttf) -{ - const char *filename = ttf->filename; - const char *fontname = ttf->fontname; - - pdf_cleanup_tt(p, ttf); /* this will not free ttf->filename/fontname */ - - if (filename) - pdc_error(p->pdc, PDF_E_TT_ASSERT1, filename, 0, 0, 0); - else if (fontname) - pdc_error(p->pdc, PDF_E_TT_ASSERT1, fontname, 0, 0, 0); - else - pdc_error(p->pdc, PDF_E_TT_ASSERT2, 0, 0, 0, 0); -} /* tt_assert */ - -void -tt_error(PDF *p, tt_file *ttf) -{ - const char *filename = ttf->filename; - const char *fontname = ttf->fontname; - const char *qualifier = "TrueType"; - - pdf_cleanup_tt(p, ttf); /* this will not free ttf->filename/fontname */ - - if (filename) - pdc_error(p->pdc, PDF_E_FONT_CORRUPT, qualifier, filename, 0, 0); - else if (fontname) - pdc_error(p->pdc, PDF_E_FONT_CORRUPT, qualifier, fontname, 0, 0); - else - pdc_error(p->pdc, PDF_E_FONT_CORRUPT, qualifier, "?", 0, 0); - -} /* tt_error */ - -void -tt_seek(PDF *p, tt_file *ttf, long offset) -{ - if (ttf->incore) - { - TT_IOCHECK(p, ttf, ttf->img + (tt_ulong) offset <= ttf->end); - ttf->pos = ttf->img + (tt_ulong) offset; - } - else - TT_IOCHECK(p, ttf, pdc_fseek(ttf->fp, offset, SEEK_SET) == 0); -} - -void -tt_read(PDF *p, tt_file *ttf, void *buf, unsigned int nbytes) -{ - if (ttf->incore) - { - TT_IOCHECK(p, ttf, ttf->pos + (tt_ulong) nbytes <= ttf->end); - memcpy(buf, ttf->pos, (size_t) nbytes); - ttf->pos += (tt_ulong) nbytes; - } - else - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, nbytes)); -} - -long -tt_tell(PDF *p, tt_file *ttf) -{ - (void) p; - if (ttf->incore) - return (long) (ttf->pos - ttf->img); - else - return pdc_ftell(ttf->fp); -} - -tt_ushort -tt_get_ushort(PDF *p, tt_file *ttf) -{ - tt_byte *pos, buf[2]; - - if (ttf->incore) - { - pos = ttf->pos; - TT_IOCHECK(p, ttf, (ttf->pos += 2) <= ttf->end); - } - else - { - pos = buf; - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, 2)); - } - - return pdc_get_be_ushort(pos); -} - -tt_short -tt_get_short(PDF *p, tt_file *ttf) -{ - tt_byte *pos, buf[2]; - - if (ttf->incore) - { - pos = ttf->pos; - TT_IOCHECK(p, ttf, (ttf->pos += 2) <= ttf->end); - } - else - { - pos = buf; - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, 2)); - } - - return pdc_get_be_short(pos); -} - -tt_ulong -tt_get_ulong3(PDF *p, tt_file *ttf) -{ - tt_byte *pos, buf[3]; - - if (ttf->incore) - { - pos = ttf->pos; - TT_IOCHECK(p, ttf, (ttf->pos += 3) <= ttf->end); - } - else - { - pos = buf; - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, 3)); - } - - return pdc_get_be_ulong3(pos); -} - -tt_ulong -tt_get_ulong(PDF *p, tt_file *ttf) -{ - tt_byte *pos, buf[4]; - - if (ttf->incore) - { - pos = ttf->pos; - TT_IOCHECK(p, ttf, (ttf->pos += 4) <= ttf->end); - } - else - { - pos = buf; - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, 4)); - } - - return pdc_get_be_ulong(pos); -} - -tt_long -tt_get_long(PDF *p, tt_file *ttf) -{ - tt_byte *pos, buf[4]; - - if (ttf->incore) - { - pos = ttf->pos; - TT_IOCHECK(p, ttf, (ttf->pos += 4) <= ttf->end); - } - else - { - pos = buf; - TT_IOCHECK(p, ttf, PDC_OK_FREAD(ttf->fp, buf, 4)); - } - - return pdc_get_be_long(pos); -} - -tt_ulong -tt_get_offset(PDF *p, tt_file *ttf, tt_byte offsize) -{ - tt_byte buf; - - switch (offsize) - { - case 1: - tt_read(p, ttf, &buf, 1); - return (tt_ulong) buf; - - case 2: - return (tt_ulong) tt_get_ushort(p, ttf); - - case 3: - return (tt_ulong) tt_get_ulong3(p, ttf); - - case 4: - return (tt_ulong) tt_get_ulong(p, ttf); - } - return 0; -} - -static void -tt_get_dirent(PDF *p, tt_dirent *dirent, tt_file *ttf) -{ - tt_read(p, ttf, dirent->tag, 4); - dirent->tag[4] = 0; - dirent->checksum = tt_get_ulong(p, ttf); - dirent->offset = tt_get_ulong(p, ttf); - dirent->length = tt_get_ulong(p, ttf); -} /* tt_get_dirent */ - - -int -tt_tag2idx(tt_file *ttf, char *tag) -{ - int i; - - for (i = 0; i < ttf->n_tables; ++i) - if (strcmp(ttf->dir[i].tag, tag) == 0) - return i; - - return -1; -} /* tt_tag2idx */ - -static void -tt_get_cmap0(PDF *p, tt_file *ttf, tt_cmap0_6 *cm0_6) -{ - static const char *fn = "tt_get_cmap0"; - tt_ushort c; - tt_byte buf[256]; - - cm0_6->length = tt_get_ushort(p, ttf); - cm0_6->language = tt_get_ushort(p, ttf); - cm0_6->glyphIdArray = (tt_ushort *) 0; - - /* These are not used in format 0 */ - cm0_6->firstCode = 0; - cm0_6->entryCount = 256; - - cm0_6->glyphIdArray = (tt_ushort *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * 256), fn); - - tt_read(p, ttf, buf, 256); - - for (c = 0; c < 256; c++) - cm0_6->glyphIdArray[c] = (tt_ushort) buf[c]; - -} /* tt_get_cmap0 */ - -static void -tt_get_cmap6(PDF *p, tt_file *ttf, tt_cmap0_6 *cm0_6) -{ - static const char *fn = "tt_get_cmap6"; - tt_ushort c, last; - - cm0_6->length = tt_get_ushort(p, ttf); - cm0_6->language = tt_get_ushort(p, ttf); - cm0_6->firstCode = tt_get_ushort(p, ttf); - cm0_6->entryCount = tt_get_ushort(p, ttf); - cm0_6->glyphIdArray = (tt_ushort *) 0; - - last = (tt_ushort) (cm0_6->firstCode + cm0_6->entryCount); - - cm0_6->glyphIdArray = (tt_ushort *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * last), fn); - - /* default for codes outside the range specified in this table */ - for (c = 0; c < last; c++) - cm0_6->glyphIdArray[c] = (tt_ushort) 0; - - for (c = cm0_6->firstCode; c < last; c++) - cm0_6->glyphIdArray[c] = tt_get_ushort(p, ttf); - -} /* tt_get_cmap6 */ - -static void -tt_get_cmap4(PDF *p, tt_file *ttf, tt_cmap4 *cm4) -{ - static const char *fn = "tt_get_cmap4"; - int i, segs; - - /* the instruction order is critical for cleanup after exceptions! - */ - cm4->endCount = (tt_ushort *) 0; - cm4->startCount = (tt_ushort *) 0; - cm4->idDelta = (tt_short *) 0; - cm4->idRangeOffs = (tt_ushort *) 0; - cm4->glyphIdArray = (tt_ushort *) 0; - - cm4->format = tt_get_ushort(p, ttf); - TT_IOCHECK(p, ttf, cm4->format == 4); - cm4->length = tt_get_ushort(p, ttf); - cm4->version = tt_get_ushort(p, ttf); - cm4->segCountX2 = tt_get_ushort(p, ttf); - cm4->searchRange = tt_get_ushort(p, ttf); - cm4->entrySelector = tt_get_ushort(p, ttf); - cm4->rangeShift = tt_get_ushort(p, ttf); - - segs = cm4->segCountX2 / 2; - - cm4->numGlyphIds = (tt_ushort)( - ((cm4->length - ( 16L + 8L * segs )) & 0xFFFFU) / 2); - - TT_IOCHECK(p, ttf, 0 <= cm4->numGlyphIds); - - cm4->endCount = - (tt_ushort *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * segs), fn); - cm4->startCount = - (tt_ushort *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * segs), fn); - cm4->idDelta = - (tt_short *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * segs), fn); - cm4->idRangeOffs = - (tt_ushort *) - pdc_malloc(p->pdc, (size_t) (sizeof (tt_ushort) * segs), fn); - - if (cm4->numGlyphIds) - { - cm4->glyphIdArray = (tt_ushort *) - pdc_malloc(p->pdc, - (size_t) (sizeof (tt_ushort) * cm4->numGlyphIds), fn); - } - - for (i = 0; i < segs; ++i) - cm4->endCount[i] = tt_get_ushort(p, ttf); - - TT_IOCHECK(p, ttf, cm4->endCount[segs - 1] == 0xFFFF); - - (void) tt_get_ushort(p, ttf); /* padding */ - for (i = 0; i < segs; ++i) cm4->startCount[i] = tt_get_ushort(p, ttf); - for (i = 0; i < segs; ++i) cm4->idDelta[i] = tt_get_short(p, ttf); - for (i = 0; i < segs; ++i) cm4->idRangeOffs[i] = tt_get_ushort(p, ttf); - - for (i = 0; i < cm4->numGlyphIds; ++i) - cm4->glyphIdArray[i] = tt_get_ushort(p, ttf); - - /* empty cmap */ - if (segs == 1 && cm4->endCount[0] == cm4->startCount[0]) - { - cm4->segCountX2 = 0; - pdc_free(p->pdc, cm4->endCount); - cm4->endCount = (tt_ushort *) 0; - pdc_free(p->pdc, cm4->startCount); - cm4->startCount = (tt_ushort *) 0; - pdc_free(p->pdc, cm4->idDelta); - cm4->idDelta = (tt_short *) 0; - pdc_free(p->pdc, cm4->idRangeOffs); - cm4->idRangeOffs = (tt_ushort *) 0; - if (cm4->numGlyphIds) - { - pdc_free(p->pdc, cm4->glyphIdArray); - cm4->glyphIdArray = (tt_ushort *) 0; - } - } - -} /* tt_get_cmap4 */ - -/* convert unicode to glyph ID using cmap4. */ -static int -tt_unicode2gidx4(PDF *p, tt_file *ttf, unsigned int uv) -{ - tt_cmap4 * cm4; - int segs; - int i; - int gidx = 0; - - TT_ASSERT(p, ttf, ttf->tab_cmap != (tt_tab_cmap *) 0); - TT_ASSERT(p, ttf, ttf->tab_cmap->win != (tt_cmap4 *) 0); - - cm4 = ttf->tab_cmap->win; - segs = cm4->segCountX2 / 2; - - for (i = 0; i < segs; ++i) - if (uv <= cm4->endCount[i]) - break; - - TT_IOCHECK(p, ttf, i != segs); - if (uv < cm4->startCount[i] || uv == 0xFFFF) - return 0; - - if (cm4->idRangeOffs[i] == 0) - gidx = (int)((uv + cm4->idDelta[i]) & 0xFFFF); - else - { - int idx = (int) cm4->idRangeOffs[i] / 2 - + (int) (uv - cm4->startCount[i]) - (segs - i); - - if (idx < 0 || idx >= cm4->numGlyphIds) - { - if (ttf->font->verbose) - pdc_warning(p->pdc, PDF_E_TT_GLYPHIDNOTFOUND, - pdc_errprintf(p->pdc, "x%04X", uv), - ttf->fontname, 0, 0); - return 0; - } - - if (cm4->glyphIdArray[idx] == 0) - return 0; - else - gidx = (int)((cm4->glyphIdArray[idx] + cm4->idDelta[i]) & 0xFFFF); - } - - /* this is necessary because of some Mac fonts (e.g. Hiragino) */ - return (gidx < ttf->tab_maxp->numGlyphs) ? gidx : 0; - -} /* tt_unicode2gidx4 */ - -/* convert 8-bit code to glyph ID */ -static int -tt_code2gidx(PDF *p, tt_file *ttf, pdc_font *font, int code) -{ - pdc_encoding enc = font->encoding; - pdc_ushort uv = 0; - int gidx = 0; - - - if (enc == pdc_macroman && ttf->tab_cmap->mac) - { - if (code > -1 && code < (int) (ttf->tab_cmap->mac->firstCode + - ttf->tab_cmap->mac->entryCount)) - gidx = ttf->tab_cmap->mac->glyphIdArray[code]; - } - else if (font->isstdlatin == pdc_false) - { - /* This would be an Apple font with an encoding different - * from macroman. - */ - if (!ttf->tab_OS_2) - { - const char *fontname = ttf->fontname; - - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_SYMBOLOS2, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return -1; - } - - /* e.g. WingDings has usFirstChar = 0xF020, but we must start - ** at 0xF000. I haven't seen non-symbol fonts with a usFirstChar - ** like that; perhaps we have to apply similar tricks then... - */ - uv = (pdc_ushort) (code + - (ttf->tab_OS_2->usFirstCharIndex & 0xFF00)); - gidx = tt_unicode2gidx4(p, ttf, (unsigned int) uv); - } - else - { - pdc_encodingvector *ev = p->encodings[enc].ev; - uv = ev->codes[code]; - if (uv) - { - gidx = tt_unicode2gidx4(p, ttf, (unsigned int) uv); - } - } - - return gidx; - -} /* tt_code2gidx */ - -void -tt_get_tab_cmap(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_cmap"; - tt_tab_cmap *tp = (tt_tab_cmap *) - pdc_malloc(p->pdc, sizeof (tt_tab_cmap), fn); - int idx = tt_tag2idx(ttf, pdf_str_cmap); - int i; - tt_ulong offset; - tt_ushort numEncTabs; - tt_ushort tableFormat; - - /* the instruction order is critical for cleanup after exceptions! - */ - tp->win = (tt_cmap4 *) 0; - tp->mac = (tt_cmap0_6 *) 0; - ttf->tab_cmap = tp; - - TT_IOCHECK(p, ttf, idx != -1); - offset = ttf->dir[idx].offset; - tt_seek(p, ttf, (long) offset); - - (void) tt_get_ushort(p, ttf); /* version */ - numEncTabs = tt_get_ushort(p, ttf); - - for (i = 0; i < numEncTabs; ++i) - { - tt_ushort platformID = tt_get_ushort(p, ttf); - tt_ushort encodingID = tt_get_ushort(p, ttf); - tt_ulong offsetEncTab = tt_get_ulong(p, ttf); - tt_long pos = tt_tell(p, ttf); - - tt_seek(p, ttf, (long) (offset + offsetEncTab)); - - if (platformID == tt_pfid_mac && encodingID == tt_wenc_symbol) - { - tableFormat = tt_get_ushort(p, ttf); - - /* we currently do not support cmaps - ** other than format 0 and 6 for Macintosh cmaps. - */ - - if (tableFormat == 0 && tp->mac == (tt_cmap0_6 *) 0) - { - tp->mac = (tt_cmap0_6 *) - pdc_malloc(p->pdc, sizeof (tt_cmap0_6), fn); - tp->mac->format = 0; - tt_get_cmap0(p, ttf, tp->mac); - } - else if (tableFormat == 6 && tp->mac == (tt_cmap0_6 *) 0) - { - tp->mac = (tt_cmap0_6 *) - pdc_malloc(p->pdc, sizeof (tt_cmap0_6), fn); - tp->mac->format = 6; - tt_get_cmap6(p, ttf, tp->mac); - } - } - else if (platformID == tt_pfid_win && - (encodingID == tt_wenc_symbol || encodingID == tt_wenc_text)) - { - TT_IOCHECK(p, ttf, tp->win == (tt_cmap4 *) 0); - tp->win = (tt_cmap4 *) pdc_malloc(p->pdc, sizeof (tt_cmap4), fn); - tt_get_cmap4(p, ttf, tp->win); - if (tp->win->segCountX2) - tp->win->encodingID = encodingID; - else - { - pdc_free(p->pdc, tp->win); - tp->win = (tt_cmap4 *) 0; - } - } - - tt_seek(p, ttf, pos); - } /* for */ -} /* tt_get_tab_cmap */ - -void -tt_get_tab_head(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_head"; - tt_tab_head *tp = (tt_tab_head *) - pdc_malloc(p->pdc, sizeof (tt_tab_head), fn); - int idx = tt_tag2idx(ttf, pdf_str_head); - - ttf->tab_head = tp; - TT_IOCHECK(p, ttf, idx != -1); - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->version = tt_get_fixed(p, ttf); - tp->fontRevision = tt_get_fixed(p, ttf); - tp->checkSumAdjustment = tt_get_ulong(p, ttf); - tp->magicNumber = tt_get_ulong(p, ttf); - tp->flags = tt_get_ushort(p, ttf); - tp->unitsPerEm = tt_get_ushort(p, ttf); - tp->created[1] = tt_get_ulong(p, ttf); - tp->created[0] = tt_get_ulong(p, ttf); - tp->modified[1] = tt_get_ulong(p, ttf); - tp->modified[0] = tt_get_ulong(p, ttf); - tp->xMin = tt_get_fword(p, ttf); - tp->yMin = tt_get_fword(p, ttf); - tp->xMax = tt_get_fword(p, ttf); - tp->yMax = tt_get_fword(p, ttf); - tp->macStyle = tt_get_ushort(p, ttf); - tp->lowestRecPPEM = tt_get_ushort(p, ttf); - tp->fontDirectionHint = tt_get_short(p, ttf); - tp->indexToLocFormat = tt_get_short(p, ttf); - tp->glyphDataFormat = tt_get_short(p, ttf); -} /* tt_get_tab_head */ - -static void -tt_get_tab_hhea(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_hhea"; - tt_tab_hhea *tp = (tt_tab_hhea *) - pdc_malloc(p->pdc, sizeof (tt_tab_hhea), fn); - int idx = tt_tag2idx(ttf, pdf_str_hhea); - - ttf->tab_hhea = tp; - TT_IOCHECK(p, ttf, idx != -1); - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->version = tt_get_fixed(p, ttf); - tp->ascender = tt_get_fword(p, ttf); - tp->descender = tt_get_fword(p, ttf); - tp->lineGap = tt_get_fword(p, ttf); - tp->advanceWidthMax = tt_get_ufword(p, ttf); - tp->minLeftSideBearing = tt_get_fword(p, ttf); - tp->minRightSideBearing = tt_get_fword(p, ttf); - tp->xMaxExtent = tt_get_fword(p, ttf); - tp->caretSlopeRise = tt_get_short(p, ttf); - tp->caretSlopeRun = tt_get_short(p, ttf); - tp->res1 = tt_get_short(p, ttf); - tp->res2 = tt_get_short(p, ttf); - tp->res3 = tt_get_short(p, ttf); - tp->res4 = tt_get_short(p, ttf); - tp->res5 = tt_get_short(p, ttf); - tp->metricDataFormat = tt_get_short(p, ttf); - tp->numberOfHMetrics = tt_get_ushort(p, ttf); -} /* tt_get_tab_hhea */ - -static void -tt_get_tab_hmtx(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_hmtx"; - tt_tab_hmtx *tp = (tt_tab_hmtx *) - pdc_malloc(p->pdc, sizeof (tt_tab_hmtx), fn); - int idx = tt_tag2idx(ttf, pdf_str_hmtx); - int n_metrics; - int n_lsbs; - int i; - - TT_ASSERT(p, ttf, ttf->tab_hhea != 0); - TT_ASSERT(p, ttf, ttf->tab_maxp != 0); - - /* the instruction order is critical for cleanup after exceptions! - */ - tp->metrics = 0; - tp->lsbs = 0; - ttf->tab_hmtx = tp; - - TT_IOCHECK(p, ttf, idx != -1); - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - n_metrics = ttf->tab_hhea->numberOfHMetrics; - n_lsbs = ttf->tab_maxp->numGlyphs - n_metrics; - - TT_IOCHECK(p, ttf, n_metrics != 0); - TT_IOCHECK(p, ttf, n_lsbs >= 0); - tp->metrics = (tt_metric *) - pdc_malloc(p->pdc, n_metrics * sizeof (tt_metric), fn); - - for (i = 0; i < n_metrics; ++i) - { - tp->metrics[i].advanceWidth = tt_get_ufword(p, ttf); - tp->metrics[i].lsb = tt_get_fword(p, ttf); - } - - if (n_lsbs == 0) - tp->lsbs = (tt_fword *) 0; - else - { - tp->lsbs = (tt_fword *) - pdc_malloc(p->pdc, n_lsbs * sizeof (tt_fword), fn); - for (i = 0; i < n_lsbs; ++i) - tp->lsbs[i] = tt_get_fword(p, ttf); - } -} /* tt_get_tab_hmtx */ - - - -pdc_bool -tt_get_tab_CFF_(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_CFF_"; - int idx = tt_tag2idx(ttf, pdf_str_CFF_); - - if (idx != -1) - { - /* CFF table found */ - ttf->tab_CFF_ = (tt_tab_CFF_ *) - pdc_malloc(p->pdc, sizeof (tt_tab_CFF_), fn); - ttf->tab_CFF_->offset = ttf->dir[idx].offset; - ttf->tab_CFF_->length = ttf->dir[idx].length; - } - else - { - idx = tt_tag2idx(ttf, pdf_str_glyf); - if (idx == -1 || !ttf->dir[idx].length) - { - const char *fontname = ttf->fontname; - pdc_bool verbose = ttf->font->verbose; - - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_NOGLYFDESC, fontname, 0, 0, 0); - - if (verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - idx = -1; - } - - - return pdc_true; - -} /* tt_get_tab_CFF_ */ - -static int -tt_gidx2width(PDF *p, tt_file *ttf, int gidx) -{ - TT_ASSERT(p, ttf, ttf->tab_hmtx != (tt_tab_hmtx *) 0); - TT_ASSERT(p, ttf, ttf->tab_head != (tt_tab_head *) 0); - TT_ASSERT(p, ttf, ttf->tab_hhea != (tt_tab_hhea *) 0); - - { - int n_metrics = ttf->tab_hhea->numberOfHMetrics; - - if (gidx >= n_metrics) - gidx = n_metrics - 1; - if (ttf->font->monospace) - return ttf->font->monospace; - else - return PDF_TT2PDF(ttf->tab_hmtx->metrics[gidx].advanceWidth); - } -} /* tt_gidx2width */ - - -void -tt_get_tab_maxp(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_maxp"; - tt_tab_maxp *tp = (tt_tab_maxp *) - pdc_malloc(p->pdc, sizeof (tt_tab_maxp), fn); - int idx = tt_tag2idx(ttf, pdf_str_maxp); - - ttf->tab_maxp = tp; - TT_IOCHECK(p, ttf, idx != -1); - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->version = tt_get_fixed(p, ttf); - tp->numGlyphs = tt_get_ushort(p, ttf); - tp->maxPoints = tt_get_ushort(p, ttf); - tp->maxContours = tt_get_ushort(p, ttf); - tp->maxCompositePoints = tt_get_ushort(p, ttf); - tp->maxCompositeContours = tt_get_ushort(p, ttf); - tp->maxZones = tt_get_ushort(p, ttf); - tp->maxTwilightPoints = tt_get_ushort(p, ttf); - tp->maxStorage = tt_get_ushort(p, ttf); - tp->maxFunctionDefs = tt_get_ushort(p, ttf); - tp->maxInstructionDefs = tt_get_ushort(p, ttf); - tp->maxStackElements = tt_get_ushort(p, ttf); - tp->maxSizeOfInstructions = tt_get_ushort(p, ttf); - tp->maxComponentElements = tt_get_ushort(p, ttf); - tp->maxComponentDepth = tt_get_ushort(p, ttf); -} /* tt_get_tab_maxp */ - -static pdc_bool -tt_get_tab_name(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_name"; - tt_tab_name *tp; - int idx; - int i, j, k, namid, irec, irec4 = -1, irec6 = -1; - size_t len; - tt_nameref *namerec = NULL, lastnamerec; - char *localname = NULL; - tt_ulong offs; - - idx = tt_tag2idx(ttf, pdf_str_name); - - /* not obligatory */ - if (idx == -1) - return pdc_false; - - /* the instruction order is critical for cleanup after exceptions! - */ - tp = (tt_tab_name *) pdc_malloc(p->pdc, sizeof (tt_tab_name), fn); - tp->namerecords = NULL; - tp->englishname4 = NULL; - tp->englishname6 = NULL; - ttf->tab_name = tp; - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->format = tt_get_ushort(p, ttf); - - /* Format 0 is the only document one, but some Apple fonts use 65535. - * This is very consequent since it follows Microsoft's lead in - * disregarding one's own published specifications. - */ - TT_IOCHECK(p, ttf, (tp->format == 0 || tp->format == 65535)); - - tp->numNameRecords = (tt_ushort) - tt_get_offset(p, ttf, sizeof(tt_ushort)); - tp->offsetStrings = tt_get_ushort(p, ttf); - offs = ttf->dir[idx].offset + tp->offsetStrings; - - len = tp->numNameRecords * sizeof (tt_nameref); - tp->namerecords = (tt_nameref *) pdc_malloc(p->pdc, len, fn); - - for (i = 0; i < tp->numNameRecords; ++i) - { - tt_ushort platformID = tt_get_ushort(p, ttf); - tt_ushort encodingID = tt_get_ushort(p, ttf); - tt_ushort languageID = tt_get_ushort(p, ttf); - tt_ushort nameID = tt_get_ushort(p, ttf); - tt_ushort stringLength = tt_get_ushort(p, ttf); - tt_ushort stringOffset = tt_get_ushort(p, ttf); - - (void) encodingID; /* avoid compiler warning */ - - namerec = &tp->namerecords[i]; - namerec->platform = platformID; - namerec->language = languageID; - namerec->namid = nameID; - namerec->length = stringLength; - namerec->offset = stringOffset; - } - - namid = 4; - for (k = 0; k < 2; k++) - { - lastnamerec.platform = 0; - lastnamerec.language = 0; - lastnamerec.namid = 0; - lastnamerec.length = 0; - lastnamerec.offset = 0; - - for (i = 0; i < tp->numNameRecords; ++i) - { - namerec = &tp->namerecords[i]; - if (!namerec->length || namerec->namid != namid) continue; - - /* TTC font search */ - if (ttf->utf16fontname) - { - /* read font name */ - localname = - (char *) pdc_calloc(p->pdc, (size_t) namerec->length, fn); - tt_seek(p, ttf, (long) (offs + namerec->offset)); - tt_read(p, ttf, localname, (unsigned int) namerec->length); - - if (namerec->platform == tt_pfid_win && - namerec->length == ttf->fnamelen && - !memcmp(localname, ttf->utf16fontname, - (size_t) ttf->fnamelen)) - { - /* font found */ - pdc_free(p->pdc, localname); - return pdc_true; - } - pdc_free(p->pdc, localname); - } - - /* search for the records with english names */ - else - { - /* we take the names from platformID 3 (Microsoft) or - * 1 (Macintosh). We favor Macintosh and then Microsoft - * with American English (LanguageID = 0x0409 = 1033) - */ - if ((lastnamerec.language != 0x0409 || - lastnamerec.platform != tt_pfid_win) && - (namerec->platform == tt_pfid_win || - (namerec->platform == tt_pfid_mac && - namerec->language == 0))) - { - lastnamerec = *namerec; - - /* We simulate always English */ - if (namerec->platform == tt_pfid_mac) - lastnamerec.language = 0x0409; - - if (namid == 4) irec4 = i; - if (namid == 6) irec6 = i; - } - } - } - namid = 6; - } - - /* TTC font not found */ - if (ttf->utf16fontname) return pdc_false; - - /* English font names */ - namid = 4; - irec = irec4; - for (k = 0; k < 2; k++) - { - if (irec == -1) continue; - namerec = &tp->namerecords[irec]; - - /* read font name */ - len = (size_t) (namerec->length + 1); - localname = (char *) pdc_calloc(p->pdc, (size_t) len, fn); - tt_seek(p, ttf, (long) (offs + namerec->offset)); - tt_read(p, ttf, localname, (unsigned int) namerec->length); - - /* low byte picking */ - if (namerec->platform == tt_pfid_win) - { - for (j = 0; j < namerec->length / 2; j++) - { - /* We don't support wide character names */ - if (localname[2*j] != 0) - { - pdc_free(p->pdc, localname); - localname = NULL; - break; - } - localname[j] = localname[2*j + 1]; - } - if (localname) - localname[j] = 0; - } - - /* We observed this in EUDC fonts */ - if (localname && !strcmp(localname, "\060\060")) - { - pdc_free(p->pdc, localname); - localname = NULL; - } - - if (namid == 4 && localname) - tp->englishname4 = localname; - else if (namid == 6 && localname) - tp->englishname6 = localname; - - namid = 6; - irec = irec6; - } - - /* font name 4 (full font name) is required */ - if (tp->englishname6 == NULL && tp->englishname4 == NULL) - { - const char *fontname = ttf->fontname; - pdc_bool verbose = ttf->font->verbose; - - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_NONAME, fontname, 0, 0, 0); - - if (verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - if (tp->englishname4 == NULL) - tp->englishname4 = pdc_strdup(p->pdc, tp->englishname6); - if (tp->englishname6 == NULL) - tp->englishname6 = pdc_strdup(p->pdc, tp->englishname4); - - return pdc_true; -} /* tt_get_tab_name */ - -void -tt_get_tab_OS_2(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_OS_2"; - tt_tab_OS_2 *tp; - int idx; - - idx = tt_tag2idx(ttf, pdf_str_OS_2); - - /* Some Apple fonts don't have an OS/2 table */ - if (idx == -1) - return; - - tp = (tt_tab_OS_2 *) pdc_malloc(p->pdc, sizeof (tt_tab_OS_2), fn); - ttf->tab_OS_2 = tp; - - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->version = tt_get_ushort(p, ttf); - tp->xAvgCharWidth = tt_get_short(p, ttf); - tp->usWeightClass = tt_get_ushort(p, ttf); - tp->usWidthClass = tt_get_ushort(p, ttf); - tp->fsType = tt_get_ushort(p, ttf); - tp->ySubscriptXSize = tt_get_short(p, ttf); - tp->ySubscriptYSize = tt_get_short(p, ttf); - tp->ySubscriptXOffset = tt_get_short(p, ttf); - tp->ySubscriptYOffset = tt_get_short(p, ttf); - tp->ySuperscriptXSize = tt_get_short(p, ttf); - tp->ySuperscriptYSize = tt_get_short(p, ttf); - tp->ySuperscriptXOffset = tt_get_short(p, ttf); - tp->ySuperscriptYOffset = tt_get_short(p, ttf); - tp->yStrikeoutSize = tt_get_short(p, ttf); - tp->yStrikeoutPosition = tt_get_short(p, ttf); - tp->sFamilyClass = tt_get_ushort(p, ttf); - - tt_read(p, ttf, tp->panose, 10); - - tp->ulUnicodeRange1 = tt_get_ulong(p, ttf); - tp->ulUnicodeRange2 = tt_get_ulong(p, ttf); - tp->ulUnicodeRange3 = tt_get_ulong(p, ttf); - tp->ulUnicodeRange4 = tt_get_ulong(p, ttf); - - tt_read(p, ttf, tp->achVendID, 4); - - tp->fsSelection = tt_get_ushort(p, ttf); - tp->usFirstCharIndex = tt_get_ushort(p, ttf); - tp->usLastCharIndex = tt_get_ushort(p, ttf); - tp->sTypoAscender = tt_get_short(p, ttf); - tp->sTypoDescender = tt_get_short(p, ttf); - tp->sTypoLineGap = tt_get_short(p, ttf); - tp->usWinAscent = tt_get_ushort(p, ttf); - tp->usWinDescent = tt_get_ushort(p, ttf); - - if (tp->version >= 1) - { - tp->ulCodePageRange[0] = tt_get_ulong(p, ttf); - tp->ulCodePageRange[1] = tt_get_ulong(p, ttf); - } - else - { - tp->ulCodePageRange[0] = 0; - tp->ulCodePageRange[1] = 0; - } - - if (tp->version >= 2) - { - tp->sxHeight = tt_get_short(p, ttf); - tp->sCapHeight = tt_get_short(p, ttf); - tp->usDefaultChar = tt_get_ushort(p, ttf); - tp->usBreakChar = tt_get_ushort(p, ttf); - tp->usMaxContext = tt_get_ushort(p, ttf); - } - else - { - tp->sxHeight = 0; - tp->sCapHeight = 0; - tp->usDefaultChar = 0; - tp->usBreakChar = 0; - tp->usMaxContext = 0; - } - - /* there are fonts with inconsistent usFirstCharIndex */ - if (ttf->tab_cmap && ttf->tab_cmap->win && - tp->usFirstCharIndex != ttf->tab_cmap->win->startCount[0]) - ttf->tab_OS_2->usFirstCharIndex = ttf->tab_cmap->win->startCount[0]; - -} /* tt_get_tab_OS_2 */ - -static void -tt_get_tab_post(PDF *p, tt_file *ttf) -{ - static const char *fn = "tt_get_tab_post"; - tt_tab_post *tp = (tt_tab_post *) - pdc_malloc(p->pdc, sizeof (tt_tab_post), fn); - int idx = tt_tag2idx(ttf, pdf_str_post); - - ttf->tab_post = tp; - TT_IOCHECK(p, ttf, idx != -1); - tt_seek(p, ttf, (long) ttf->dir[idx].offset); - - tp->formatType = tt_get_fixed(p, ttf); - tp->italicAngle = tt_get_fixed(p, ttf) / (float) 65536.0; - tp->underlinePosition = tt_get_fword(p, ttf); - tp->underlineThickness = tt_get_fword(p, ttf); - tp->isFixedPitch = tt_get_ulong(p, ttf); - tp->minMemType42 = tt_get_ulong(p, ttf); - tp->maxMemType42 = tt_get_ulong(p, ttf); - tp->minMemType1 = tt_get_ulong(p, ttf); - tp->maxMemType1 = tt_get_ulong(p, ttf); -} /* tt_get_tab_post */ - -tt_file * -pdf_init_tt(PDF *p) -{ - static const char *fn = "pdf_init_tt"; - - tt_file *ttf = (tt_file *) - pdc_malloc(p->pdc, (size_t) sizeof (tt_file), fn); - - ttf->check = pdc_false; - ttf->incore = pdc_false; - ttf->img = NULL; - ttf->end = 0; - ttf->pos = 0; - - ttf->fp = (pdc_file *) 0; - ttf->n_tables = 0; - ttf->offset = 0; - ttf->dir = (tt_dirent *) 0; - - ttf->tab_cmap = (tt_tab_cmap *) 0; - ttf->tab_head = (tt_tab_head *) 0; - ttf->tab_hhea = (tt_tab_hhea *) 0; - ttf->tab_hmtx = (tt_tab_hmtx *) 0; - ttf->tab_maxp = (tt_tab_maxp *) 0; - ttf->tab_name = (tt_tab_name *) 0; - ttf->tab_post = (tt_tab_post *) 0; - ttf->tab_OS_2 = (tt_tab_OS_2 *) 0; - ttf->tab_CFF_ = (tt_tab_CFF_ *) 0; - - ttf->GID2Code = (tt_ushort *) 0; - ttf->hasGlyphNames = 0; - ttf->hasEncoding = 0; - - - ttf->utf16fontname = (char *) 0; - - return ttf; - -} /* pdf_init_tt */ - -#define PDF_O ((char) 0x4f) /* ASCII 'O' */ -#define PDF_T ((char) 0x54) /* ASCII 'T' */ - -#define PDF_t ((char) 0x74) /* ASCII 't' */ -#define PDF_r ((char) 0x72) /* ASCII 'r' */ -#define PDF_u ((char) 0x75) /* ASCII 'u' */ -#define PDF_e ((char) 0x65) /* ASCII 'e' */ - -#define PDF_c ((char) 0x63) /* ASCII 'c' */ -#define PDF_f ((char) 0x66) /* ASCII 'f' */ - -pdc_bool -pdf_test_tt_font(tt_byte *img, tt_ulong *n_fonts) -{ - tt_ushort n_tables; - - /* The TrueType (including OpenType/TT) "version" is always 0x00010000 */ - if (!(img[0] == 0x00 && img[1] == 0x01 && - img[2] == 0x00 && img[3] == 0x00)) - { - /* The OpenType/CFF version is always 'OTTO' */ - if (!(img[0] == PDF_O && img[1] == PDF_T && - img[2] == PDF_T && img[3] == PDF_O)) - { - /* Old Apple fonts have 'true' */ - if (!(img[0] == PDF_t && img[1] == PDF_r && - img[2] == PDF_u && img[3] == PDF_e)) - { - /* TrueType Collection */ - if (n_fonts == NULL || - !(img[0] == PDF_t && img[1] == PDF_t && - img[2] == PDF_c && img[3] == PDF_f)) - return pdc_false; - - /* Version is always 0x00010000 or 0x00020000 */ - if (!(img[4] == 0x00 && (img[5] == 0x01 || img[5] == 0x02) && - img[6] == 0x00 && img[7] == 0x00)) - return pdc_false; - - /* Number of fonts */ - *n_fonts = pdc_get_be_ulong(&img[8]); - return pdc_true; - } - } - } - - /* Number of tables */ - n_tables = pdc_get_be_ushort(&img[4]); - if (n_tables < 8 && n_tables > 64) /* max. 32 tables ? */ - return pdc_false; - - /* Further check of the next 6 bytes not implemented */ - - return pdc_true; -} - -pdc_bool -pdf_read_offset_tab(PDF *p, tt_file *ttf) -{ - static const char *fn = "pdf_get_tab_offset"; - tt_byte img[TT_OFFSETTAB_SIZE]; - int i; - - /* Check */ - tt_read(p, ttf, img, TT_OFFSETTAB_SIZE); - if (pdf_test_tt_font(img, NULL) == pdc_false) - { - const char *filename = ttf->filename; - pdc_bool verbose = ttf->font->verbose; - - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_NOFONT, filename, 0, 0, 0); - - if (verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* number of table directories */ - ttf->n_tables = pdc_get_be_ushort(&img[4]); - - /* set up table directory */ - ttf->dir = (tt_dirent *) pdc_malloc(p->pdc, - (size_t) (ttf->n_tables * sizeof (tt_dirent)), fn); - - tt_seek(p, ttf, (long) (ttf->offset + TT_OFFSETTAB_SIZE)); - - for (i = 0; i < ttf->n_tables; ++i) - tt_get_dirent(p, ttf->dir + i, ttf); - - /* make sure this isn't a bitmap-only Mac font */ - if (tt_tag2idx(ttf, pdf_str_bhed) != -1) - { - const char *fontname = ttf->fontname; - pdc_bool verbose = ttf->font->verbose; - - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_BITMAP, fontname, 0, 0, 0); - - if (verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - return pdc_true; - -} /* pdf_read_offset_tab */ - -static pdc_bool -pdf_read_tt(PDF *p, tt_file *ttf, pdc_font *font) -{ - (void) font; - - if (pdf_read_offset_tab(p, ttf) == pdc_false) - return pdc_false; - - /* These are all required TrueType tables; optional tables are not read. - ** - ** There's no error return; pdf_cleanup_tt() is called by all subroutines - ** before exceptions are thrown. LATER: It is a known bug that pdc_malloc() - ** exceptions can't be caught and will lead to resource leaks in this - ** context! - */ - tt_get_tab_cmap(p, ttf); - tt_get_tab_head(p, ttf); - tt_get_tab_hhea(p, ttf); - tt_get_tab_maxp(p, ttf); - tt_get_tab_hmtx(p, ttf); /* MUST be read AFTER hhea & maxp! */ - if (tt_get_tab_name(p, ttf) == pdc_false) - return pdc_false; - tt_get_tab_post(p, ttf); - tt_get_tab_OS_2(p, ttf); /* may be missing from some Apple fonts */ - - /* this is an optional table, present only in OpenType fonts */ - if (tt_get_tab_CFF_(p, ttf) == pdc_false) - return pdc_false; - - - return pdc_true; - -} /* pdf_read_tt */ - -void -pdf_cleanup_tt(PDF *p, tt_file *ttf) -{ - if (ttf->check == pdc_false && ttf->fp != (pdc_file *) 0) - pdc_fclose(ttf->fp); - - if (ttf->dir != (tt_dirent *) 0) - pdc_free(p->pdc, ttf->dir); - ttf->dir = (tt_dirent *) 0; - - - if (ttf->tab_head != (tt_tab_head *) 0) - pdc_free(p->pdc, ttf->tab_head); - if (ttf->tab_hhea != (tt_tab_hhea *) 0) - pdc_free(p->pdc, ttf->tab_hhea); - if (ttf->tab_maxp != (tt_tab_maxp *) 0) - pdc_free(p->pdc, ttf->tab_maxp); - if (ttf->tab_OS_2 != (tt_tab_OS_2 *) 0) - pdc_free(p->pdc, ttf->tab_OS_2); - if (ttf->tab_CFF_ != (tt_tab_CFF_ *) 0) - pdc_free(p->pdc, ttf->tab_CFF_); - if (ttf->tab_post != (tt_tab_post *) 0) - pdc_free(p->pdc, ttf->tab_post); - - if (ttf->tab_cmap != (tt_tab_cmap *) 0) - { - if (ttf->tab_cmap->mac != (tt_cmap0_6 *) 0) { - if (ttf->tab_cmap->mac->glyphIdArray) - pdc_free(p->pdc, ttf->tab_cmap->mac->glyphIdArray); - pdc_free(p->pdc, ttf->tab_cmap->mac); - } - - if (ttf->tab_cmap->win != (tt_cmap4 *) 0) - { - tt_cmap4 *cm4 = (tt_cmap4 *) ttf->tab_cmap->win; - - if (cm4->endCount != 0) pdc_free(p->pdc, cm4->endCount); - if (cm4->startCount != 0) pdc_free(p->pdc, cm4->startCount); - if (cm4->idDelta != 0) pdc_free(p->pdc, cm4->idDelta); - if (cm4->idRangeOffs != 0) pdc_free(p->pdc, cm4->idRangeOffs); - if (cm4->glyphIdArray != 0) pdc_free(p->pdc, cm4->glyphIdArray); - - pdc_free(p->pdc, cm4); - } - - pdc_free(p->pdc, ttf->tab_cmap); - } - - if (ttf->tab_hmtx != (tt_tab_hmtx *) 0) - { - if (ttf->tab_hmtx->metrics != (tt_metric *) 0) - pdc_free(p->pdc, ttf->tab_hmtx->metrics); - if (ttf->tab_hmtx->lsbs != (tt_fword *) 0) - pdc_free(p->pdc, ttf->tab_hmtx->lsbs); - pdc_free(p->pdc, ttf->tab_hmtx); - } - - if (ttf->tab_name != (tt_tab_name *) 0) - { - if (ttf->tab_name->namerecords != (tt_nameref *) 0) - pdc_free(p->pdc, ttf->tab_name->namerecords); - if (ttf->tab_name->englishname4 != (char *) 0) - pdc_free(p->pdc, ttf->tab_name->englishname4); - if (ttf->tab_name->englishname6 != (char *) 0) - pdc_free(p->pdc, ttf->tab_name->englishname6); - pdc_free(p->pdc, ttf->tab_name); - } - ttf->tab_name = (tt_tab_name *) 0; - - if (ttf->GID2Code != (tt_ushort *) 0) - pdc_free(p->pdc, ttf->GID2Code); - - - /* Note: do not clean up ttf->img since the data belongs to font->img - */ - - if (ttf->check == pdc_false) - pdc_free(p->pdc, ttf); - -} /* pdf_cleanup_tt */ - - -static void -pdf_set_tt_fontvalues(PDF *p, tt_file *ttf, pdc_font *font) -{ - float w; - - (void) p; - - font->llx = (float) PDF_TT2PDF(ttf->tab_head->xMin); - font->lly = (float) PDF_TT2PDF(ttf->tab_head->yMin); - font->urx = (float) PDF_TT2PDF(ttf->tab_head->xMax); - font->ury = (float) PDF_TT2PDF(ttf->tab_head->yMax); - - font->italicAngle = (float) ttf->tab_post->italicAngle; - font->isFixedPitch = (pdc_bool) ttf->tab_post->isFixedPitch; - font->underlinePosition = PDF_TT2PDF(ttf->tab_post->underlinePosition); - font->underlineThickness = PDF_TT2PDF(ttf->tab_post->underlineThickness); - - if (ttf->tab_OS_2) { - - w = ttf->tab_OS_2->usWeightClass / (float) 65; - font->StdVW = (int) (PDF_STEMV_MIN + w * w); - - /* some Apple fonts have zero values in the OS/2 table */ - if (ttf->tab_OS_2->sTypoAscender) - font->ascender = PDF_TT2PDF(ttf->tab_OS_2->sTypoAscender); - else - font->ascender = PDF_TT2PDF(ttf->tab_hhea->ascender); - - if (ttf->tab_OS_2->sTypoDescender) - font->descender = PDF_TT2PDF(ttf->tab_OS_2->sTypoDescender); - else - font->descender = PDF_TT2PDF(ttf->tab_hhea->descender); - - /* sCapHeight and sxHeight are only valid if version >= 2 */ - if (ttf->tab_OS_2->version >= 2 && ttf->tab_OS_2->sCapHeight) { - font->capHeight = PDF_TT2PDF(ttf->tab_OS_2->sCapHeight); - } else { - font->capHeight = font->ascender; /* an educated guess */ - } - - if (ttf->tab_OS_2->version >= 2 && ttf->tab_OS_2->sxHeight) { - font->xHeight = PDF_TT2PDF(ttf->tab_OS_2->sxHeight); - } else { - /* guess */ - font->xHeight = (int) ((float) 0.66 * font->ascender); - } - - } else { - -#define PDF_MACSTYLE_BOLD 0x01 - - if (ttf->tab_head->macStyle & PDF_MACSTYLE_BOLD) - font->StdVW = PDF_STEMV_BOLD; - else - font->StdVW = PDF_STEMV_NORMAL; - - /* The OS/2 table is missing from some Apple fonts */ - font->ascender = PDF_TT2PDF(ttf->tab_hhea->ascender); - font->descender = PDF_TT2PDF(ttf->tab_hhea->descender); - - /* estimate the remaining values from the known ones */ - font->xHeight = (int) ((float) 0.66 * font->descender); - font->capHeight = font->ascender; - } -} - -#ifdef PDF_UNUSED - -static pdc_bool -tt_supports_cp(char *name, unsigned *cp_range) -{ - typedef struct - { - const char * s; - int i; - } str_int; - - static const str_int n2i[] = - { - { "1250", TT_CP1250 }, - { "1251", TT_CP1251 }, - { "1252", TT_CP1252 }, - { "1253", TT_CP1253 }, - { "1254", TT_CP1254 }, - { "1255", TT_CP1255 }, - { "1256", TT_CP1256 }, - { "1257", TT_CP1257 }, - { "1258", TT_CP1258 }, - { "1361", TT_CP1361 }, - { "437", TT_CP437 }, - { "708", TT_CP708 }, - { "737", TT_CP737 }, - { "775", TT_CP775 }, - { "850", TT_CP850 }, - { "852", TT_CP852 }, - { "855", TT_CP855 }, - { "857", TT_CP857 }, - { "860", TT_CP860 }, - { "861", TT_CP861 }, - { "862", TT_CP862 }, - { "863", TT_CP863 }, - { "864", TT_CP864 }, - { "865", TT_CP865 }, - { "866", TT_CP866 }, - { "869", TT_CP869 }, - { "874", TT_CP874 }, - { "932", TT_CP932 }, - { "936", TT_CP936 }, - { "949", TT_CP949 }, - { "950", TT_CP950 }, - }; - - int lo = 0; - int hi = (sizeof n2i) / (sizeof (str_int)); - - while (lo != hi) - { - int idx = (lo + hi) / 2; - int cmp = strcmp(name, n2i[idx].s); - - if (cmp == 0) - { - int i = n2i[idx].i; - - return (cp_range[i > 31] & (1 << (i & 0x1F))) != 0; - } - - if (cmp < 0) - hi = idx; - else - lo + idx + 1; - } - - return pdc_false; -} /* tt_supports_cp */ - -#endif /* PDF_UNUSED */ - -pdc_bool -pdf_get_metrics_tt(PDF *p, pdc_font *font, const char *fontname, - pdc_encoding enc, const char *filename) -{ - static const char *fn = "pdf_get_metrics_tt"; - float filesize; - int foundChars, code, ncodes, nwidths, gidx = 0; - tt_file *ttf; - pdc_bool retval; - - /* - * Initialisation - */ - ttf = pdf_init_tt(p); - ttf->incore = pdc_true; - ttf->img = (tt_byte *) font->img; - ttf->pos = ttf->img; - ttf->end = ttf->img + font->filelen; - filesize = (float) (font->filelen / 1024.0); - - ttf->filename = filename; - ttf->fontname = fontname; - ttf->font = font; - - /* - * Read font file - */ - retval = pdf_read_tt(p, ttf, font); - if (retval == pdc_false) - return pdc_false; - - /* - * Font type - */ - if (ttf->tab_CFF_) { - font->type = pdc_Type1C; - font->cff_offset = (long) ttf->tab_CFF_->offset; - font->cff_length = ttf->tab_CFF_->length; - } else { - font->type = pdc_TrueType; - } - - /* These tables are not present in OT fonts */ - if (font->type != pdc_Type1C) { - TT_IOCHECK(p, ttf, tt_tag2idx(ttf, pdf_str_glyf) != -1); - TT_IOCHECK(p, ttf, tt_tag2idx(ttf, pdf_str_loca) != -1); - } - - /* Number of Glyphs */ - if (ttf->tab_maxp->numGlyphs <= 1) - { - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_NOGLYFDESC, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - /* - * Encoding - */ - font->isstdlatin = pdc_true; - if (ttf->tab_cmap->mac && !ttf->tab_cmap->win) - { - /* MacRoman font */ - if (enc >= pdc_builtin && enc != pdc_macroman) - { - if (font->verbose) - { - pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, - pdf_get_encoding_name(p, pdc_macroman), - pdf_get_encoding_name(p, enc), fontname, 0); - } - enc = pdc_macroman; - } - if (!p->encodings[pdc_macroman].ev) - p->encodings[pdc_macroman].ev = - pdc_copy_core_encoding(p->pdc, "macroman"); - } - else if (ttf->tab_cmap->win) - { - if (ttf->tab_cmap->win->encodingID == tt_wenc_symbol) - { - /* Symbol font */ - font->isstdlatin = pdc_false; - - /* 8-bit encoding: We enforce builtin encoding */ - if (enc >= 0) - { - if (font->verbose) - { - pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, - pdf_get_encoding_name(p, pdc_builtin), - pdf_get_encoding_name(p, enc), fontname, 0); - } - enc = pdc_builtin; - } - } - else if (!ttf->tab_cmap->mac) - { - /* has no MacRoman cmap */ - font->hasnomac = pdc_true; - } - } - else - { - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_BADCMAP, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - font->encoding = enc; - - - /* builtin encoding but text font */ - if (enc == pdc_builtin && font->isstdlatin == pdc_true) - { - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, - fontname, pdf_get_encoding_name(p, enc), 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - - /* /FontName in FontDescriptor */ - font->name = pdc_strdup(p->pdc, ttf->tab_name->englishname4); - - /* /BaseFont name */ - font->ttname = pdc_strdup(p->pdc, ttf->tab_name->englishname6); - - -#define PDF_RESTRICTED_TT_EMBEDDING 0x02 - /* check embedding flags */ - if ((font->embedding) && ttf->tab_OS_2 && - ttf->tab_OS_2->fsType == PDF_RESTRICTED_TT_EMBEDDING) - { - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_TT_EMBED, fontname, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - - - /* Save font values */ - pdf_set_tt_fontvalues(p, ttf, font); - - /* Allocate encoding dependent arrays */ - font->numOfGlyphs = ttf->tab_maxp->numGlyphs; - ncodes = font->numOfCodes; - nwidths = font->numOfCodes; - - - font->code2GID = (pdc_ushort *) pdc_calloc(p->pdc, - font->numOfCodes * sizeof (pdc_ushort), fn); - ttf->GID2Code = (tt_ushort *) pdc_calloc(p->pdc, - font->numOfGlyphs * sizeof (tt_ushort), fn); - if (nwidths) - font->widths = (int *) pdc_calloc(p->pdc, nwidths * sizeof(int), fn); - - - /* - * Build the char width tables for the font, set mappings GID <-> Code, - * and count the characters. - */ - foundChars = 0; - for (code = 0; code < ncodes; code++) - { - gidx = tt_code2gidx(p, ttf, font, code); - if (gidx == -1) - return pdc_false; - if (gidx) - { - /* we prefer the first occurence of gidx (SPACE vs. NBSP) */ - if (!ttf->GID2Code[gidx]) - ttf->GID2Code[gidx] = (tt_ushort) code; - if (font->GID2code) - font->GID2code[gidx] = (tt_ushort) code; - foundChars++; - } - - switch (enc) - { - - default: - font->widths[code] = tt_gidx2width(p, ttf, gidx); - break; - } - - font->code2GID[code] = (pdc_ushort) gidx; - } - - /* No characters found */ - if (!foundChars) - { - pdf_cleanup_tt(p, ttf); - pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, fontname, - pdf_get_encoding_name(p, enc), 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_false; - } - else - { - - - pdf_cleanup_tt(p, ttf); - } - - if (!pdf_make_fontflag(p, font)) - return pdc_false; - - return pdc_true; -} - -static pdc_bool -pdf_check_and_read_ttc(PDF *p, pdc_file *fp, - const char *filename, const char *fontname, - pdc_font *font, tt_ulong n_fonts) -{ - static const char *fn = "pdf_check_and_read_ttc"; - tt_file *ttf; - char *utf16fontname = NULL; - char *fontname_p = (char *) fontname; - pdc_bool retval = pdc_false; - pdc_text_format textformat = pdc_bytes; - pdc_text_format targettextformat = pdc_utf16be; - int i, inlen, outlen; - - /* initialize */ - ttf = pdf_init_tt(p); - ttf->check = pdc_true; - ttf->fp = fp; - ttf->filename = filename; - ttf->fontname = fontname; - ttf->font = font; - - /* create UTF-16-BE font name string for searching in font file */ - inlen = (int) strlen(fontname_p); - if (pdc_is_utf8_unicode(fontname_p)) - textformat = pdc_utf8; - if (pdc_convert_string(p->pdc, textformat, NULL, - (pdc_byte *) fontname_p, inlen, - &targettextformat, NULL, - (pdc_byte **) &utf16fontname, &outlen, - PDC_CONV_NOBOM, font->verbose)) - { - pdf_cleanup_tt(p, ttf); - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - return pdc_false; - } - - /* search font */ - for (i = 0; i < (int)n_fonts; ++i) - { - if (i) pdf_cleanup_tt(p, ttf); - - tt_seek(p, ttf, (long) (TT_OFFSETTAB_SIZE + i * sizeof(tt_ulong))); - ttf->offset = tt_get_ulong(p, ttf); - tt_seek(p, ttf, (long) ttf->offset); - - /* Offset Table */ - if (!pdf_read_offset_tab(p, ttf)) - break; - - /* font name match in Naming Table */ - ttf->utf16fontname = utf16fontname; - ttf->fnamelen = outlen; - if (tt_get_tab_name(p, ttf)) - break; - } - pdc_free(p->pdc, utf16fontname); - - /* font found */ - if (i < (int)n_fonts) - { - tt_byte *pos; - tt_ulong headlen, dirlen, tablen, length, offset; - - /* create file in memory */ - tablen = 0; - dirlen = 4 * sizeof(tt_ulong); - headlen = (tt_ulong) (TT_OFFSETTAB_SIZE + ttf->n_tables * dirlen); - font->filelen = headlen; - for (i = 0; i < ttf->n_tables; i++) - { - length = ttf->dir[i].length; - if (length > tablen) tablen = length; - font->filelen += length; - } - font->img = (pdc_byte *) pdc_malloc(p->pdc, font->filelen, fn); - - /* read font file */ - tt_seek(p, ttf, (long) ttf->offset); - tt_read(p, ttf, font->img, headlen); - pos = font->img + headlen; - for (i = 0; i < ttf->n_tables; i++) - { - length = ttf->dir[i].length; - tt_seek(p, ttf, (long) ttf->dir[i].offset); - tt_read(p, ttf, pos, length); - ttf->dir[i].offset = (unsigned int) (pos - font->img); - pos += length; - } - - /* correct offsets in Table Directory */ - pos = font->img + TT_OFFSETTAB_SIZE + 2 * sizeof(tt_ulong); - for (i = 0; i < ttf->n_tables; i++) - { - offset = ttf->dir[i].offset; - pos[0] = (tt_byte) (offset >> 24); - pos[1] = (tt_byte) (offset >> 16); - pos[2] = (tt_byte) (offset >> 8); - pos[3] = (tt_byte) (offset); - pos += dirlen; - } - retval = pdc_true; - } - else - { - pdc_set_errmsg(p->pdc, PDF_E_TTC_NOTFOUND, fontname, filename, 0, 0); - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } - - ttf->check = pdc_false; - pdf_cleanup_tt(p, ttf); - return retval; -} - -int -pdf_check_tt_font(PDF *p, const char *filename, const char *fontname, - pdc_font *font) -{ - pdc_file *fp; - tt_byte img[TT_OFFSETTAB_SIZE]; - pdc_bool ismem = pdc_false; - tt_ulong n_fonts = 0; - int retval = pdc_undef; - - if ((fp = pdf_fopen(p, filename, "font ", PDC_FILE_BINARY)) == NULL) - { - if (font->verbose_open) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } - else - { - retval = pdc_false; - if (PDC_OK_FREAD(fp, img, TT_OFFSETTAB_SIZE)) - { - retval = pdf_test_tt_font(img, &n_fonts); - if (retval == pdc_true) - { - if (n_fonts > 1) - { - retval = pdf_check_and_read_ttc(p, fp, filename, fontname, - font, n_fonts); - } - else - { - font->img = (pdc_byte *) - pdc_freadall(fp, &font->filelen, &ismem); - pdc_fclose(fp); - } - if (retval == pdc_true) - { - if (font->filelen == 0) - { - pdc_set_errmsg(p->pdc, - PDC_E_IO_NODATA, filename, 0, 0, 0); - - if (font->verbose) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - retval = pdc_false; - } - else if (ismem) - { - font->imgname = pdc_strdup(p->pdc, filename); - pdf_lock_pvf(p, font->imgname); - } - } - fp = NULL; - } - } - if (fp) pdc_fclose(fp); - } - - return retval; -} - - -#endif /* PDF_TRUETYPE_SUPPORTED */ diff --git a/src/libs/pdflib/libs/pdflib/p_truetype.h b/src/libs/pdflib/libs/pdflib/p_truetype.h deleted file mode 100644 index eb83597fa5..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_truetype.h +++ /dev/null @@ -1,437 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_truetype.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib TrueType typedefs, structures, and enums - * - */ - -typedef unsigned char tt_byte; -typedef char tt_char; -typedef unsigned short tt_ushort; -typedef short tt_short; -typedef unsigned int tt_ulong; -typedef int tt_long; - -typedef long tt_fixed; -typedef short tt_fword; -typedef unsigned short tt_ufword; - -#define tt_get_fixed tt_get_long -#define tt_get_fword tt_get_short -#define tt_get_ufword tt_get_ushort - -#undef ROUND -#define ROUND(x) (((x) < 0) ? ceil((x) - 0.5) : floor((x) + 0.5)) - -#define TT_XKERNPAIR_CHUNKSIZE 256 - -#define TT_NUMSTDSTRINGS 391 - -#define TT_OFFSETTAB_SIZE 12 - -#define TT_MINUSEDCHARS_SIZE 32 - -typedef struct -{ - char tag[5]; - tt_ulong checksum; - tt_ulong offset; - tt_ulong length; -} tt_dirent; - -typedef enum -{ - tt_pfid_apple, - tt_pfid_mac, - tt_pfid_iso, - tt_pfid_win -} tt_platform_id; - -typedef enum -{ - tt_wenc_symbol, - tt_wenc_text -} tt_win_encoding_id; - -/* format 4 encoding table: -*/ -typedef struct -{ - tt_ushort encodingID; - tt_ushort format; - tt_ushort length; - tt_ushort version; - tt_ushort segCountX2; /* segCount * 2 */ - tt_ushort searchRange; - tt_ushort entrySelector; - tt_ushort rangeShift; - tt_ushort * endCount; /* [segCount] */ - tt_ushort * startCount; /* [segCount] */ - tt_short * idDelta; /* [segCount] */ - tt_ushort * idRangeOffs; /* [segCount] */ - int numGlyphIds; - tt_ushort * glyphIdArray; -} tt_cmap4; - -/* combined data structure for format 0 and format 6 encoding tables: -*/ -typedef struct -{ - tt_ushort format; - tt_ushort length; - tt_ushort language; - tt_ushort firstCode; - tt_ushort entryCount; - tt_ushort *glyphIdArray; -} tt_cmap0_6; - -typedef struct -{ - tt_ushort version; - tt_ushort numEncTabs; - - tt_cmap4 *win; - tt_cmap0_6 *mac; -} tt_tab_cmap; - -typedef struct -{ - tt_fixed version; - tt_fixed fontRevision; - tt_ulong checkSumAdjustment; - tt_ulong magicNumber; - tt_ushort flags; - tt_ushort unitsPerEm; - tt_ulong created[2]; - tt_ulong modified[2]; - tt_fword xMin, yMin; - tt_fword xMax, yMax; - tt_ushort macStyle; - tt_ushort lowestRecPPEM; - tt_short fontDirectionHint; - tt_short indexToLocFormat; - tt_short glyphDataFormat; -} tt_tab_head; - -typedef struct -{ - tt_fixed version; - tt_fword ascender; - tt_fword descender; - tt_fword lineGap; - tt_ufword advanceWidthMax; - tt_fword minLeftSideBearing; - tt_fword minRightSideBearing; - tt_fword xMaxExtent; - tt_short caretSlopeRise; - tt_short caretSlopeRun; - tt_short res1; - tt_short res2; - tt_short res3; - tt_short res4; - tt_short res5; - tt_short metricDataFormat; - tt_ushort numberOfHMetrics; -} tt_tab_hhea; - -typedef struct -{ - tt_ufword advanceWidth; - tt_fword lsb; -} tt_metric; - -typedef struct -{ - tt_metric * metrics; - tt_fword * lsbs; -} tt_tab_hmtx; - -typedef struct -{ - tt_fixed version; - tt_ushort numGlyphs; - tt_ushort maxPoints; - tt_ushort maxContours; - tt_ushort maxCompositePoints; - tt_ushort maxCompositeContours; - tt_ushort maxZones; - tt_ushort maxTwilightPoints; - tt_ushort maxStorage; - tt_ushort maxFunctionDefs; - tt_ushort maxInstructionDefs; - tt_ushort maxStackElements; - tt_ushort maxSizeOfInstructions; - tt_ushort maxComponentElements; - tt_ushort maxComponentDepth; -} tt_tab_maxp; - -typedef struct -{ - tt_ushort platform; - tt_ushort language; - tt_ushort namid; - tt_ushort length; - tt_ushort offset; -} tt_nameref; - -typedef struct -{ - tt_ushort format; - tt_ushort numNameRecords; - tt_ushort offsetStrings; - tt_nameref *namerecords; - char *englishname4; - char *englishname6; -} tt_tab_name; - -typedef struct -{ - tt_ushort version; - tt_short xAvgCharWidth; - tt_ushort usWeightClass; - tt_ushort usWidthClass; - tt_ushort fsType; /* tt_short? */ - tt_short ySubscriptXSize; - tt_short ySubscriptYSize; - tt_short ySubscriptXOffset; - tt_short ySubscriptYOffset; - tt_short ySuperscriptXSize; - tt_short ySuperscriptYSize; - tt_short ySuperscriptXOffset; - tt_short ySuperscriptYOffset; - tt_short yStrikeoutSize; - tt_short yStrikeoutPosition; - tt_ushort sFamilyClass; /* ttt_short? */ - tt_byte panose[10]; - tt_ulong ulUnicodeRange1; - tt_ulong ulUnicodeRange2; - tt_ulong ulUnicodeRange3; - tt_ulong ulUnicodeRange4; - tt_char achVendID[4]; - tt_ushort fsSelection; - tt_ushort usFirstCharIndex; - tt_ushort usLastCharIndex; - - /* tt_ushort according to spec; obviously a spec bug. - */ - tt_short sTypoAscender; - tt_short sTypoDescender; - tt_short sTypoLineGap; - - tt_ushort usWinAscent; - tt_ushort usWinDescent; - - /* if version >= 1 - */ - tt_ulong ulCodePageRange[2]; - - /* if version >= 2 (according to OpenType spec) - */ - tt_short sxHeight; - tt_short sCapHeight; - tt_ushort usDefaultChar; - tt_ushort usBreakChar; - tt_ushort usMaxContext; -} tt_tab_OS_2; - -typedef struct -{ - tt_ushort sid; - tt_byte *string; -} tt_string_tab; - -typedef struct -{ - tt_ulong offset; - tt_ulong length; -} tt_tab_CFF_; - -typedef struct -{ - tt_fixed formatType; - double italicAngle; - tt_fword underlinePosition; - tt_fword underlineThickness; - tt_ulong isFixedPitch; - tt_ulong minMemType42; - tt_ulong maxMemType42; - tt_ulong minMemType1; - tt_ulong maxMemType1; - -} tt_tab_post; - -typedef struct -{ - tt_ushort start; - tt_ushort end; - tt_ushort cclass; -} tt_record_classrange; - -typedef struct -{ - tt_ushort left; - tt_ushort right; - tt_short value; - tt_short dominant; -} tt_xkern_pair; - -typedef struct -{ - tt_xkern_pair *pairs; - int capacity; - int number; -} tt_xkern_pair_list; - -typedef struct -{ - pdc_bool check; /* check for fontname */ - pdc_bool incore; /* whole font in-core */ - tt_byte * img; /* in-core TT font file image */ - tt_byte * end; /* first byte above image buf */ - tt_byte * pos; /* current "file" position */ - pdc_file * fp; - - int n_tables; - tt_ulong offset; - tt_dirent * dir; - - /* "required" tables: - */ - tt_tab_cmap *tab_cmap; - tt_tab_head *tab_head; - tt_tab_hhea *tab_hhea; - tt_tab_hmtx *tab_hmtx; - tt_tab_maxp *tab_maxp; - tt_tab_name *tab_name; - tt_tab_post *tab_post; - tt_tab_OS_2 *tab_OS_2; - tt_tab_CFF_ *tab_CFF_; - - tt_ushort *GID2Code; /* [ttf->tab_maxp->numGlyphs] */ - /* glyphid: Code = Unicode */ - int hasGlyphNames; - int hasEncoding; - - - const char *filename; /* font file name */ - const char *fontname; /* font API name */ - char *utf16fontname; /* UTF-16-BE font name for TTC fonts */ - int fnamelen; /* font name length */ - pdc_font *font; -} tt_file; - -/* TrueType table names, defined as octal codes */ -#define pdf_str_ttcf "\164\164\143\146" -#define pdf_str_bhed "\142\150\145\144" -#define pdf_str_CFF_ "\103\106\106\040" -#define pdf_str_cvt_ "\143\166\164\040" -#define pdf_str_cmap "\143\155\141\160" -#define pdf_str_fpgm "\146\160\147\155" -#define pdf_str_glyf "\147\154\171\146" -#define pdf_str_GPOS "\107\120\117\123" -#define pdf_str_head "\150\145\141\144" -#define pdf_str_hhea "\150\150\145\141" -#define pdf_str_hmtx "\150\155\164\170" -#define pdf_str_kern "\153\145\162\156" -#define pdf_str_loca "\154\157\143\141" -#define pdf_str_maxp "\155\141\170\160" -#define pdf_str_name "\156\141\155\145" -#define pdf_str_OS_2 "\117\123\057\062" /* OS/2 */ -#define pdf_str_post "\160\157\163\164" -#define pdf_str_prep "\160\162\145\160" - -/* Windows code page numbers */ -#define TT_CP1252 0 /* Latin 1 */ -#define TT_CP1250 1 /* Latin 2: Eastern Europe */ -#define TT_CP1251 2 /* Cyrillic */ -#define TT_CP1253 3 /* Greek */ -#define TT_CP1254 4 /* Turkish */ -#define TT_CP1255 5 /* Hebrew */ -#define TT_CP1256 6 /* Arabic */ -#define TT_CP1257 7 /* Windows Baltic */ -#define TT_CP1258 8 /* Vietnamese */ -#define TT_CP874 16 /* Thai */ -#define TT_CP932 17 /* JIS/Japan */ -#define TT_CP936 18 /* Chinese: Simplified chars--PRC and Singapore */ -#define TT_CP949 19 /* Korean Wansung */ -#define TT_CP950 20 /* Chinese: Traditional chars--Taiwan and Hong Kong */ -#define TT_CP1361 21 /* Korean Johab */ -#define TT_CP869 48 /* IBM Greek */ -#define TT_CP866 49 /* MS-DOS Russian */ -#define TT_CP865 50 /* MS-DOS Nordic */ -#define TT_CP864 51 /* Arabic */ -#define TT_CP863 52 /* MS-DOS Canadian French */ -#define TT_CP862 53 /* Hebrew */ -#define TT_CP861 54 /* MS-DOS Icelandic */ -#define TT_CP860 55 /* MS-DOS Portuguese */ -#define TT_CP857 56 /* IBM Turkish */ -#define TT_CP855 57 /* IBM Cyrillic; primarily Russian */ -#define TT_CP852 58 /* Latin 2 */ -#define TT_CP775 59 /* MS-DOS Baltic */ -#define TT_CP737 60 /* Greek; former 437 G */ -#define TT_CP708 61 /* Arabic; ASMO 708 */ -#define TT_CP850 62 /* WE/Latin 1 */ -#define TT_CP437 63 /* US */ - -/* Composite font flags. */ -/* See Reference of OpenType: glyf - Glyf Data */ -#define ARGS_ARE_WORDS 0x001 -#define ARGS_ARE_XY_VALUES 0x002 -#define ROUND_XY_TO_GRID 0x004 -#define WE_HAVE_A_SCALE 0x008 -/* reserved 0x010 */ -#define MORE_COMPONENTS 0x020 -#define WE_HAVE_AN_XY_SCALE 0x040 -#define WE_HAVE_A_2X2 0x080 -#define WE_HAVE_INSTR 0x100 -#define USE_MY_METRICS 0x200 - - -/* Functions */ - -#define PDF_TT2PDF(v) (int) ROUND(v * 1000.0f / ttf->tab_head->unitsPerEm) - -#define TT_ASSERT(p, ttf, cond) \ - ((cond) ? (void) 0 : tt_assert(p, ttf)) - -#define TT_IOCHECK(p, ttf, cond) \ - ((cond) ? (void) 0 : tt_error(p, ttf)) - -tt_file *pdf_init_tt(PDF *p); -pdc_bool pdf_read_offset_tab(PDF *p, tt_file *ttf); -pdc_bool pdf_test_tt_font(tt_byte *img, tt_ulong *n_fonts); -void pdf_cleanup_tt(PDF *p, tt_file *ttf); - -int tt_tag2idx(tt_file *ttf, char *tag); -void tt_get_tab_maxp(PDF *p, tt_file *ttf); -void tt_get_tab_head(PDF *p, tt_file *ttf); -void tt_get_tab_cmap(PDF *p, tt_file *ttf); -pdc_bool tt_get_tab_CFF_(PDF *p, tt_file *ttf); -void tt_get_tab_OS_2(PDF *p, tt_file *ttf); - - - -void tt_assert(PDF *p, tt_file *ttf); -void tt_error(PDF *p, tt_file *ttf); -void tt_seek(PDF *p, tt_file *ttf, long offset); -void tt_read(PDF *p, tt_file *ttf, void *buf, unsigned int nbytes); -long tt_tell(PDF *p, tt_file *ttf); -tt_ushort tt_get_ushort(PDF *p, tt_file *ttf); -tt_short tt_get_short(PDF *p, tt_file *ttf); -tt_ulong tt_get_ulong3(PDF *p, tt_file *ttf); -tt_ulong tt_get_ulong(PDF *p, tt_file *ttf); -tt_long tt_get_long(PDF *p, tt_file *ttf); -tt_ulong tt_get_offset(PDF *p, tt_file *ttf, tt_byte offsize); - - diff --git a/src/libs/pdflib/libs/pdflib/p_type1.c b/src/libs/pdflib/libs/pdflib/p_type1.c deleted file mode 100644 index e2b5f1327e..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_type1.c +++ /dev/null @@ -1,383 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_type1.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib Type1 font handling routines - * - */ - -#include "p_intern.h" -#include "p_font.h" - - -/* Type 1 font portions: ASCII, encrypted, zeros */ -typedef enum { t1_ascii, t1_encrypted, t1_zeros } pdf_t1portion; - -typedef struct { - pdf_t1portion portion; - size_t length[4]; - pdc_file *fontfile; - pdc_byte *img; /* in-core Type1 font file image */ - pdc_byte *end; /* first byte above image buf */ - pdc_byte *pos; /* current "file" position */ -} t1_private_data; - - -#define PFA_TESTBYTE 4 - -#define PFA_STARTSEQU "%!PS" - -#define PDF_CURRENTFILE "currentfile eexec" - - -#define LINEBUFLEN 256 - -/* - * PFA files are assumed to be encoded in host format. Therefore - * we must use literal strings and characters for interpreting the - * font file. - */ - -static int -PFA_data_fill(PDF *p, PDF_data_source *src) -{ - static const char *fn = "PFA_data_fill"; -#ifndef PDFLIB_EBCDIC - static const char HexToBin['F' - '0' + 1] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, - 0, 10, 11, 12, 13, 14, 15 - }; -#else -#endif - char *s, *c; - int i; - int len; - t1_private_data *t1_private; - pdf_t1portion t1portion; - - t1_private = (t1_private_data *) src->private_data; - - if (src->buffer_start == NULL) { - src->buffer_start = (pdc_byte *) pdc_malloc(p->pdc, LINEBUFLEN + 1, fn); - src->buffer_length = LINEBUFLEN; - } - - - if ((s = pdc_fgets_comp((char *) src->buffer_start, LINEBUFLEN, - t1_private->fontfile)) == NULL) - return pdc_false; - - /* set unix line end */ - len = (int) strlen(s); - s[len] = '\n'; - len++; - s[len] = 0; - - /* check for line of zeros: set t1_zero flag if found */ - if (*s == '0') { - for (i = 0; s[i] == '0'; i++) { - /* */ ; - } - if (s[i] == '\n') - t1_private->portion = t1_zeros; - } - - /* check whether font data portion follows: set t1_encrypted flag later */ - t1portion = t1_private->portion; - if (t1_private->portion != t1_encrypted && - !strncmp((const char *)s, PDF_CURRENTFILE, strlen(PDF_CURRENTFILE))) - t1portion = t1_encrypted; - - src->next_byte = src->buffer_start; - - switch (t1_private->portion) { - case t1_ascii: - t1_private->length[1] += (size_t) len; - src->bytes_available = (size_t) len; - break; - - case t1_encrypted: - src->bytes_available = 0; - - /* Convert to upper case for safe binary conversion */ - for (c = s; *c != '\n'; c++) { - *c = (char) toupper(*c); - } - - /* convert ASCII to binary in-place */ - for (i=0; s[i] != '\n'; i += 2) { - if ((!isxdigit(s[i]) && !isspace(s[i])) || - (!isxdigit(s[i+1]) && !isspace(s[i+1]))) { - pdc_fclose(t1_private->fontfile); - pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFA", - "?", 0, 0); - } -#ifndef PDFLIB_EBCDIC - s[i/2] = (char) (16*HexToBin[s[i]-'0'] + HexToBin[s[i+1]-'0']); -#else -#endif - src->bytes_available++; - } - t1_private->length[2] += src->bytes_available; - break; - - case t1_zeros: - t1_private->length[3] += (size_t) len; - src->bytes_available = (size_t) len; - break; - } - - t1_private->portion = t1portion; - - return pdc_true; -} - -#define PFB_MARKER 0x80 -#define PFB_ASCII 1 -#define PFB_BINARY 2 -#define PFB_EOF 3 - -int -pdf_t1check_fontfile(PDF *p, pdc_font *font, pdc_file *fp) -{ - unsigned char magic[PFA_TESTBYTE]; - const char *stemp = NULL; - - - if (fp) - { - pdc_fread(magic, 1, PFA_TESTBYTE, fp); - stemp = pdc_file_name(fp); - } - else if (font->img) - { - strncpy((char *) magic, (const char *)font->img, PFA_TESTBYTE); - stemp = font->name; - } - - /* try to identify PFA files */ - if (magic[0] != PFB_MARKER) - { - char startsequ[5]; - - strcpy(startsequ, PFA_STARTSEQU); - - if (strncmp((const char *) magic, startsequ, PFA_TESTBYTE)) - { - pdc_set_errmsg(p->pdc, PDF_E_T1_NOFONT, stemp, 0, 0, 0); - - if (font->verbose_open) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - - return pdc_undef; - } - return pdc_false; - } - return pdc_true; -} - -static int -pdf_t1getc(t1_private_data *t1) -{ - int val; - - if (t1->fontfile) { - return pdc_fgetc(t1->fontfile); - } - val = (int) *t1->pos; - t1->pos++; - - return val; -} - -static pdc_bool -pdf_read_pfb_segment(PDF *p, PDF_data_source *src, t1_private_data *t1, int i) -{ - static const char *fn = "pdf_read_pfb_segment"; - size_t length, len; - - length = (size_t) (pdf_t1getc(t1) & 0xff); - length |= (size_t) (pdf_t1getc(t1) & 0xff) << 8; - length |= (size_t) (pdf_t1getc(t1) & 0xff) << 16; - length |= (size_t) (pdf_t1getc(t1) & 0xff) << 24; - - if (src->buffer_start) - pdc_free(p->pdc, (void *) src->buffer_start); - src->buffer_start = (pdc_byte *) pdc_malloc(p->pdc, length, fn); - - if (t1->fontfile) { - len = pdc_fread(src->buffer_start, 1, length, t1->fontfile); - } else { - len = length; - if (t1->pos + len > t1->end) - len = (unsigned int)(t1->end - t1->pos); - memcpy(src->buffer_start, t1->pos, len); - t1->pos += len; - } - - t1->length[i] = len; - src->next_byte = src->buffer_start; - src->bytes_available = len; - - return (len != length) ? pdc_true : pdc_false;; -} - -static int -PFB_data_fill(PDF *p, PDF_data_source *src) -{ - t1_private_data *t1; - unsigned char c, type; - pdc_bool err = pdc_false; - - t1 = (t1_private_data *) src->private_data; - - c = (unsigned char) pdf_t1getc(t1); - type = (unsigned char) pdf_t1getc(t1); - - if (t1->length[1] == (size_t) 0) { - if (c != PFB_MARKER || type != PFB_ASCII) { - err = pdc_true; - } else { - err = pdf_read_pfb_segment(p, src, t1, 1); - } - - } else if (t1->length[2] == (size_t) 0) { - if (c != PFB_MARKER || type != PFB_BINARY) { - err = pdc_true; - } else { - err = pdf_read_pfb_segment(p, src, t1, 2); - } - - } else if (t1->length[3] == 0) { - if (c != PFB_MARKER || type != PFB_ASCII) { - err = pdc_true; - } else { - err = pdf_read_pfb_segment(p, src, t1, 3); - } - } else if (c != PFB_MARKER || type != PFB_EOF) { - err = pdc_true; - } else { - return pdc_false; - } - - if (err) { - if (t1->fontfile) - pdc_fclose(t1->fontfile); - pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFB", "?", 0, 0); - } - - return pdc_true; -} - -static void -t1data_terminate(PDF *p, PDF_data_source *src) -{ - pdc_free(p->pdc, (void *) src->buffer_start); -} - -static void -t1data_init(PDF *p, PDF_data_source *src) -{ - t1_private_data *t1_private; - - (void) p; - - t1_private = (t1_private_data *) src->private_data; - - t1_private->portion = t1_ascii; - t1_private->length[1] = (size_t) 0; - t1_private->length[2] = (size_t) 0; - t1_private->length[3] = (size_t) 0; - - src->buffer_start = NULL; -} - - -PDF_data_source* -pdf_make_t1src (PDF *p, pdc_font *font, PDF_data_source *t1src) -{ - static const char *fn = "pdf_make_t1src"; - t1_private_data *t1_private; - pdc_file *fontfile = NULL; - int ispfb; - - - if (font->fontfilename) - { - fontfile = pdf_fopen(p, font->fontfilename, "PostScript Type 1 ", - PDC_FILE_BINARY); - if (fontfile == NULL) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } - - ispfb = pdf_t1check_fontfile(p, font, fontfile); - if (ispfb == pdc_undef) - return NULL; - - t1src->private_data = (unsigned char *) - pdc_malloc(p->pdc, sizeof(t1_private_data), fn); - t1_private = (t1_private_data *) t1src->private_data; - - if (font->fontfilename) { - pdc_fclose(fontfile); - if (ispfb) - t1_private->fontfile = pdf_fopen(p, font->fontfilename, "PFB ", - PDC_FILE_BINARY); - else - t1_private->fontfile = pdf_fopen(p, font->fontfilename, "PFA ", 0); - - if (t1_private->fontfile == NULL) - pdc_error(p->pdc, -1, 0, 0, 0, 0); - } else if (font->img) { - - t1_private->fontfile = NULL; - t1_private->img = font->img; - t1_private->pos = font->img; - t1_private->end = font->img + font->filelen; - - } else { - return NULL; - } - - t1src->init = t1data_init; - t1src->fill = ispfb ? PFB_data_fill : PFA_data_fill; - t1src->terminate = t1data_terminate; - - return t1src; -} - -void -pdf_put_length_objs(PDF *p, PDF_data_source *t1src, - pdc_id length1_id, pdc_id length2_id, pdc_id length3_id) -{ - pdc_begin_obj(p->out, length1_id); /* Length1 object */ - pdc_printf(p->out, "%ld\n", - (long) ((t1_private_data *) t1src->private_data)->length[1]); - pdc_end_obj(p->out); - - pdc_begin_obj(p->out, length2_id); /* Length2 object */ - pdc_printf(p->out, "%ld\n", - (long) ((t1_private_data *) t1src->private_data)->length[2]); - pdc_end_obj(p->out); - - pdc_begin_obj(p->out, length3_id); /* Length3 object */ - pdc_printf(p->out, "%ld\n", - (long) ((t1_private_data *) t1src->private_data)->length[3]); - pdc_end_obj(p->out); - - - if (((t1_private_data *) t1src->private_data)->fontfile) - pdc_fclose(((t1_private_data *) t1src->private_data)->fontfile); - - pdc_free(p->pdc, (void *) t1src->private_data); -} diff --git a/src/libs/pdflib/libs/pdflib/p_type3.c b/src/libs/pdflib/libs/pdflib/p_type3.c deleted file mode 100644 index 7d00c16efb..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_type3.c +++ /dev/null @@ -1,476 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_type3.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Routines for Type 3 (user-defined) fonts - * - */ - -#include "p_intern.h" -#include "p_font.h" -#include "p_image.h" - -int -pdf_get_t3colorized(PDF *p) -{ - return p->t3font->colorized; -} - -static void -pdf_init_t3font_struct(PDF *p, pdc_t3font *t3font, int glyph_capacity) -{ - static char fn[] = "pdf_init_t3font_struct"; - int i; - - /* statement order is critical for cleanup! - */ - t3font->fontname = NULL; - t3font->next_glyph = 0; - t3font->capacity = glyph_capacity; - t3font->glyphs = (pdc_t3glyph *) 0; - t3font->glyphs = (pdc_t3glyph *) - pdc_malloc(p->pdc, t3font->capacity * sizeof (pdc_t3glyph), fn); - - for (i = 0; i < t3font->capacity; i++) - t3font->glyphs[i].name = NULL; - - t3font->charprocs_id = PDC_BAD_ID; - - t3font->bbox.llx = 0; - t3font->bbox.lly = 0; - t3font->bbox.urx = 0; - t3font->bbox.ury = 0; -} - -static int -name2width(pdc_t3font *t3font, const char *name) -{ - int i; - - for (i = 0; i < t3font->next_glyph; ++i) { - if (t3font->glyphs[i].name && name && - !strcmp(t3font->glyphs[i].name, name)) - return (int) (t3font->glyphs[i].width + 0.5); - } - - return 0; -} - -/* - * We found a Type 3 font in the cache, but its encoding doesn't match. - * Make a copy of the font in a new slot, and attach the new encoding. - */ - -int -pdf_handle_t3font(PDF *p, const char *fontname, pdc_encoding enc, int oldslot) -{ - static const char fn[] = "pdf_handle_t3font"; - char *fname; - int slot, i; - unsigned int namlen; - pdc_font *oldfont, *newfont; - pdc_encodingvector *ev = p->encodings[enc].ev; - - oldfont = &p->fonts[oldslot]; - - /* slot of new font struct - initialized in pdf__load_font */ - slot = p->fonts_number; - newfont = &p->fonts[slot]; - - /* font name incl. encoding name */ - namlen = strlen(fontname) + (int) strlen(ev->apiname) + 2; - fname = (char *) pdc_malloc(p->pdc, namlen, fn); - sprintf(fname, "%s.%s", fontname, ev->apiname); - - /* - * This is a fresh font which has never been used. - * Enter the new encoding, and we're done. - */ - if (oldfont->encoding == pdc_invalidenc) { - - oldfont->encoding = enc; - - for (i = 0; i < oldfont->numOfCodes; i++) { - oldfont->widths[i] = - name2width(oldfont->t3font, ev->chars[i]); - if (newfont->monospace && oldfont->widths[i]) - oldfont->widths[i] = newfont->monospace; - } - ev->flags |= PDC_ENC_USED; - - oldfont->name = fname; - - return oldslot; - } - - p->fonts_number++; - - /* copy the complete font structure */ - memcpy(newfont, oldfont, sizeof(pdc_font)); - - /* make copies of relevant strings to ensure correct cleanup */ - newfont->name = fname; - newfont->apiname = pdc_strdup(p->pdc, fontname); - - /* modify relevant entries */ - newfont->used_on_current_page = pdc_false; - newfont->encoding = enc; - newfont->obj_id = pdc_alloc_id(p->out); - - newfont->t3font = (pdc_t3font*)pdc_malloc(p->pdc, sizeof(pdc_t3font), fn); - pdf_init_t3font_struct(p, newfont->t3font, oldfont->t3font->capacity); - - /* copy relevant entries of Type 3 structure */ - newfont->t3font->charprocs_id = oldfont->t3font->charprocs_id; - newfont->t3font->res_id = oldfont->t3font->res_id; - newfont->t3font->colorized = oldfont->t3font->colorized; - memcpy(&newfont->t3font->matrix, &oldfont->t3font->matrix, - sizeof(pdc_matrix)); - memcpy(&newfont->t3font->bbox, &oldfont->t3font->bbox, - sizeof(pdc_rectangle)); - - /* copy the glyph/width list from oldfont to newfont */ - newfont->t3font->next_glyph = oldfont->t3font->next_glyph; - for (i = 0; i < newfont->t3font->next_glyph; ++i) { - newfont->t3font->glyphs[i].width = - oldfont->t3font->glyphs[i].width; - newfont->t3font->glyphs[i].charproc_id = - oldfont->t3font->glyphs[i].charproc_id; - newfont->t3font->glyphs[i].name = - pdc_strdup(p->pdc, oldfont->t3font->glyphs[i].name); - } - - newfont->widths = (int *) pdc_calloc(p->pdc, - newfont->numOfCodes * sizeof(int), fn); - for (i = 0; i < newfont->numOfCodes; i++) { - newfont->widths[i] = - name2width(newfont->t3font, p->encodings[enc].ev->chars[i]); - if (newfont->monospace && oldfont->widths[i]) - newfont->widths[i] = newfont->monospace; - } - p->encodings[enc].ev->flags |= PDC_ENC_USED; - - return slot; -} - -/* definitions of begin font options */ -static const pdc_defopt pdf_begin_font_options[] = -{ - {"colorized", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL}, - - PDC_OPT_TERMINATE -}; - -void -pdf__begin_font( - PDF *p, - const char *fontname, - float a, float b, float c, float d, float e, float f, - const char *optlist) -{ - static const char fn[] = "pdf__begin_font"; - pdc_resopt *results; - pdc_font *font; - float det; - int colorized = pdc_false; - int slot; - - /* parsing optlist */ - results = pdc_parse_optionlist(p->pdc, optlist, pdf_begin_font_options, - NULL, pdc_true); - pdc_get_optvalues(p->pdc, "colorized", results, &colorized, NULL); - pdc_cleanup_optionlist(p->pdc, results); - - det = a*d - b*c; - - if (det == 0) - pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, - pdc_errprintf(p->pdc, "%f %f %f %f %f %f", a, b, c, d, e, f), - 0, 0, 0); - - /* look for an already existing font */ - for (slot = 0; slot < p->fonts_number; slot++) - { - if (!strcmp(p->fonts[slot].apiname, fontname)) - { - pdc_error(p->pdc, PDF_E_T3_FONTEXISTS, fontname, 0, 0, 0); - } - } - - PDF_SET_STATE(p, pdf_state_font); - - pdf_init_tstate(p); - pdf_init_gstate(p); - pdf_init_cstate(p); - - /* slot for new font struct */ - slot = pdf_init_newfont(p); - font = &p->fonts[slot]; - p->fonts_number++; - - /* - * We store the new font in a font slot marked with "invalidenc" encoding. - * When the font is used for the first time we modify the encoding. - * Later uses will make a copy if the encoding is different. - */ - - font->type = pdc_Type3; - font->obj_id = pdc_alloc_id(p->out); - - font->name = NULL; - font->apiname = pdc_strdup(p->pdc, fontname); - font->encoding = pdc_invalidenc; /* initially there is no encoding */ - font->widths = (int *) pdc_calloc(p->pdc, - font->numOfCodes * sizeof(int), fn); - - font->t3font = (pdc_t3font*) pdc_malloc(p->pdc, sizeof(pdc_t3font), fn); - pdf_init_t3font_struct(p, font->t3font, T3GLYPHS_CHUNKSIZE); - - font->t3font->fontname = pdc_strdup(p->pdc, fontname); - font->t3font->colorized = colorized; - - /* the resource id is needed until the font dict is written */ - font->t3font->res_id = pdc_alloc_id(p->out); - - font->t3font->matrix.a = a; - font->t3font->matrix.b = b; - font->t3font->matrix.c = c; - font->t3font->matrix.d = d; - font->t3font->matrix.e = e; - font->t3font->matrix.f = f; - - /* We won't receive glyph bounding box values for colorized true, - * so we use the font matrix to get an approximation instead. - * - * Writing the font matrix should be optional according to the - * PDF reference, but we must write it in order to work around a - * display bug in Acrobat. - */ - if (font->t3font->colorized == pdc_true) { - font->t3font->bbox.llx = 0; - font->t3font->bbox.lly = 0; - font->t3font->bbox.urx = (d-b)/det; - font->t3font->bbox.ury = (a-c)/det; - } - - /* - * We must store a pointer to the current font because its glyph - * definitions may use other fonts and we would be unable to find - * "our" current font again. This pointer lives throughout the - * font definition, and will be reset in PDF_end_font() below. - */ - p->t3font = font->t3font; -} - -void -pdf__end_font(PDF *p) -{ - int i; - pdc_t3font *t3font; - - PDF_SET_STATE(p, pdf_state_document); - - t3font = p->t3font; - - t3font->charprocs_id = pdc_alloc_id(p->out); - pdc_begin_obj(p->out, t3font->charprocs_id); /* CharProcs dict */ - pdc_begin_dict(p->out); - - for (i = 0; i < t3font->next_glyph; i++) { - pdc_put_pdfname(p->out, - t3font->glyphs[i].name, strlen(t3font->glyphs[i].name)); - pdc_printf(p->out, " %ld 0 R\n", t3font->glyphs[i].charproc_id); - } - - pdc_end_dict(p->out); - pdc_end_obj(p->out); /* CharProcs dict */ - - pdc_begin_obj(p->out, t3font->res_id); - pdc_begin_dict(p->out); /* Resource dict */ - - pdf_write_page_fonts(p); /* Font resources */ - - pdf_write_page_colorspaces(p); /* Color space resources */ - - pdf_write_page_pattern(p); /* Pattern resources */ - - pdf_write_xobjects(p); /* XObject resources */ - - pdc_end_dict(p->out); /* Resource dict */ - pdc_end_obj(p->out); /* Resource object */ - - p->t3font = (pdc_t3font *) NULL; - - if (p->flush & pdf_flush_content) - pdc_flush_stream(p->out); -} - -void -pdf__begin_glyph( - PDF *p, - const char *glyphname, - float wx, float llx, float lly, float urx, float ury) -{ - static const char fn[] = "pdf__begin_glyph"; - pdc_t3font *t3font; - pdc_t3glyph *glyph; - int i; - - t3font = p->t3font; - - if (t3font->colorized == pdc_true && - (llx != (float) 0 || lly != (float) 0 || - urx != (float) 0 || ury != (float) 0)) - pdc_error(p->pdc, PDF_E_T3_BADBBOX, t3font->fontname, 0, 0, 0); - - PDF_SET_STATE(p, pdf_state_glyph); - - for (i = 0; i < t3font->next_glyph; ++i) { - if (!strcmp(t3font->glyphs[i].name, glyphname)) { - pdc_error(p->pdc, PDF_E_T3_GLYPH, glyphname, - t3font->fontname, 0, 0); - } - } - - if (t3font->next_glyph == t3font->capacity) { - t3font->capacity *= 2; - t3font->glyphs = (pdc_t3glyph *) pdc_realloc(p->pdc, t3font->glyphs, - t3font->capacity * sizeof (pdc_t3glyph), fn); - } - - glyph = &t3font->glyphs[t3font->next_glyph]; - glyph->charproc_id = pdc_begin_obj(p->out, PDC_NEW_ID); - glyph->name = pdc_strdup(p->pdc, glyphname); - - /* see comment in p_font.c for explanation */ - glyph->width = 1000 * wx * t3font->matrix.a; - - /* if the strdup above fails, cleanup won't touch this slot. */ - ++t3font->next_glyph; - - p->contents = c_page; - /* glyph description */ - pdc_begin_dict(p->out); /* glyph description dict */ - - p->length_id = pdc_alloc_id(p->out); - pdc_printf(p->out, "/Length %ld 0 R\n", p->length_id); - - if (pdc_get_compresslevel(p->out)) - pdc_puts(p->out, "/Filter/FlateDecode\n"); - - pdc_end_dict(p->out); /* glyph description dict */ - - pdc_begin_pdfstream(p->out); /* glyph description stream */ - - p->next_content++; - - if (t3font->colorized == pdc_true) - pdc_printf(p->out, "%f 0 d0\n", wx); - else { - pdc_printf(p->out, "%f 0 %f %f %f %f d1\n", wx, llx, lly, urx, ury); - - /* adjust the font's bounding box */ - if (llx < t3font->bbox.llx) - t3font->bbox.llx = llx; - if (lly < t3font->bbox.lly) - t3font->bbox.lly = lly; - if (urx > t3font->bbox.urx) - t3font->bbox.urx = urx; - if (ury > t3font->bbox.ury) - t3font->bbox.ury = ury; - } -} - -void -pdf__end_glyph(PDF *p) -{ - PDF_SET_STATE(p, pdf_state_font); - - /* check whether pdf__save() and pdf__restore() calls are balanced */ - if (p->sl > 0) - pdc_error(p->pdc, PDF_E_GSTATE_UNMATCHEDSAVE, 0, 0, 0, 0); - - pdf_end_text(p); - p->contents = c_none; - - pdc_end_pdfstream(p->out); /* glyph description stream */ - pdc_end_obj(p->out); /* glyph description */ - - pdc_put_pdfstreamlength(p->out, p->length_id); -} - -PDFLIB_API void PDFLIB_CALL -PDF_begin_font( - PDF *p, - const char *fontname, int reserved, - float a, float b, float c, float d, float e, float f, - const char *optlist) -{ - static const char fn[] = "PDF_begin_font"; - - if (!pdf_enter_api(p, fn, pdf_state_document, - "(p[%p], \"%s\", %d, %g, %g, %g, %g, %g, %g, \"%s\")\n", - (void *) p, fontname, reserved, a, b, c, d, e, f, optlist)) - return; - - if (!fontname || !*fontname) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0); - - pdf__begin_font(p, fontname, a, b, c, d, e, f, optlist); -} - -PDFLIB_API void PDFLIB_CALL -PDF_end_font(PDF *p) -{ - static const char fn[] = "PDF_end_font"; - - if (!pdf_enter_api(p, fn, pdf_state_font, "(p[%p])\n", (void *) p)) - return; - - pdf__end_font(p); -} - -PDFLIB_API void PDFLIB_CALL -PDF_begin_glyph( - PDF *p, - const char *glyphname, - float wx, float llx, float lly, float urx, float ury) -{ - static const char fn[] = "PDF_begin_glyph"; - - if (!pdf_enter_api(p, fn, pdf_state_font, - "(p[%p], \"%s\", %g, %g, %g, %g, %g)\n", - (void *) p, glyphname, wx, llx, lly, urx, ury)) - return; - - pdf__begin_glyph(p, glyphname, wx, llx, lly, urx, ury); -} - -PDFLIB_API void PDFLIB_CALL -PDF_end_glyph(PDF *p) -{ - static const char fn[] = "PDF_end_glyph"; - - if (!pdf_enter_api(p, fn, pdf_state_glyph, "(p[%p])\n", (void *) p)) - return; - - pdf__end_glyph(p); -} - - -void -pdf_init_type3(PDF *p) -{ - p->t3font = NULL; -} - diff --git a/src/libs/pdflib/libs/pdflib/p_xgstate.c b/src/libs/pdflib/libs/pdflib/p_xgstate.c deleted file mode 100644 index 508a4696d3..0000000000 --- a/src/libs/pdflib/libs/pdflib/p_xgstate.c +++ /dev/null @@ -1,468 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: p_xgstate.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Extended graphics state handling - * - */ - -#define P_XGSTATE_C - -#include "p_intern.h" - -/* external graphic state */ -struct pdf_extgstateresource_s -{ - pdc_id obj_id; /* object id of this resource */ - pdc_bool used_on_current_page; /* this resource used on current page */ - - pdc_id font_obj; /* font to use */ - float font_size; /* at what size */ - - float line_width; - int line_cap; - int line_join; - float miter_limit; - float* dash_array; - int dash_count; - float dash_phase; - - pdf_renderingintent ri; - pdc_bool stroke_adjust; - pdc_bool overprint_stroke; - pdc_bool overprint_fill; - int overprint_mode; - - /* - The following entries which take functions are not implemented - since PDFlib has no concept of a function at this time. - - BG - black generation - BG2 - black generation - UCR - undercolor-removal - UCR2 - undercolor-removal - TR - transfer - TR2 - transfer - HT - halftone - */ - - float flatness; - float smoothness; - - /* PDF 1.4 additions */ - pdf_blendmode blendmode; /* blend mode */ - float opacity_fill; /* fill opacity level */ - float opacity_stroke; /* stroke opacity level */ - pdc_bool alpha_is_shape; - pdc_bool text_knockout; -}; - -pdc_id -pdf_get_gstate_id(PDF *p, int gstate) -{ - /* TODO: is this required for ExtGStates used in Shadings? */ - p->extgstates[gstate].used_on_current_page = pdc_true; - - return (p->extgstates[gstate].obj_id); -} - -/* Definitions of Explicit Graphics State options */ -static const pdc_defopt pdf_create_gstate_options[] = -{ - {"alphaisshape", pdc_booleanlist, PDC_OPT_PDC_1_4, 1, 1, 0.0, 0.0, NULL}, - - {"blendmode", pdc_keywordlist, PDC_OPT_BUILDOR | PDC_OPT_PDC_1_4, 1, 20, - 0.0, 0.0, gs_blendmodes}, - -/* These features do not work in Acrobat (5.0.1) - {"dasharray", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 8, - PDF_SMALLREAL, PDC_FLOAT_MAX, NULL}, - - {"dashphase", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, - 0.0, PDC_FLOAT_MAX, NULL}, - - {"fontsize", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, - PDF_SMALLREAL, PDC_FLOAT_MAX, NULL}, - - {"font", pdc_fonthandle, PDC_OPT_PDC_1_3 | PDC_OPT_REQUIRIF1, 1, 1, - 0, 0, NULL}, -*/ - - {"flatness", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, - PDF_SMALLREAL, PDC_FLOAT_MAX, NULL}, - - {"linecap", pdc_integerlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 2.0, NULL}, - - {"linejoin", pdc_integerlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 2.0, NULL}, - - {"linewidth", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, - PDF_SMALLREAL, PDC_FLOAT_MAX, NULL}, - - {"miterlimit", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, 1.0, PDC_FLOAT_MAX, - NULL}, - - {"opacityfill", pdc_floatlist, PDC_OPT_PDC_1_4, 1, 1, 0.0, 1.0, NULL}, - - {"opacitystroke", pdc_floatlist, PDC_OPT_PDC_1_4, 1, 1, 0.0, 1.0, NULL}, - - {"overprintfill", pdc_booleanlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 0.0, NULL}, - - {"overprintmode", pdc_integerlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 1.0, NULL}, - - {"overprintstroke", pdc_booleanlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 0.0, NULL}, - - {"renderingintent", pdc_keywordlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 0.0, - gs_renderingintents}, - - {"smoothness", pdc_floatlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 1.0, NULL}, - - {"strokeadjust", pdc_booleanlist, PDC_OPT_PDC_1_3, 1, 1, 0.0, 0.0, NULL}, - - {"textknockout", pdc_booleanlist, PDC_OPT_PDC_1_4, 1, 1, 0.0, 0.0, NULL}, - - PDC_OPT_TERMINATE -}; - -static void -pdf_init_extgstateresource(pdf_extgstateresource *egsr) -{ - egsr->used_on_current_page = pdc_false; - - /* we need to tell which parms have been set and which haven't, - ** so we initialize to invalid values. even boolean parms are - ** declared as integers, so we can set them to -1 here. - */ - egsr->font_obj = PDC_NEW_ID; - egsr->font_size = pdc_undef; - - egsr->line_width = pdc_undef; - egsr->line_cap = pdc_undef; - egsr->line_join = pdc_undef; - egsr->miter_limit = pdc_undef; - - egsr->dash_array = NULL; - egsr->dash_count = 0; - egsr->dash_phase = (float) 0.0; - - egsr->ri = AutoIntent; - egsr->stroke_adjust = pdc_undef; - egsr->overprint_stroke = pdc_undef; - egsr->overprint_fill = pdc_undef; - egsr->overprint_mode = pdc_undef; - egsr->flatness = pdc_undef; - egsr->smoothness = pdc_undef; - - egsr->blendmode = BM_None; - egsr->opacity_stroke = pdc_undef; - egsr->opacity_fill = pdc_undef; - egsr->alpha_is_shape = pdc_undef; - egsr->text_knockout = pdc_undef; -} - -static void -pdf_grow_extgstates(PDF *p) -{ - int i; - - p->extgstates = (pdf_extgstateresource *) pdc_realloc(p->pdc, p->extgstates, - sizeof(pdf_extgstateresource) * 2 * p->extgstates_capacity, - "pdf_grow_extgstates"); - - for (i = p->extgstates_capacity; i < 2 * p->extgstates_capacity; i++) { - pdf_init_extgstateresource( &p->extgstates[i] ); - } - - p->extgstates_capacity *= 2; -} - -void -pdf_init_extgstate(PDF *p) -{ - int i; - - p->extgstates_number = 0; - p->extgstates_capacity = EXTGSTATE_CHUNKSIZE; - - p->extgstates = (pdf_extgstateresource *) - pdc_malloc(p->pdc, sizeof(pdf_extgstateresource) * p->extgstates_capacity, - "pdf_init_extgstates"); - - for (i = 0; i < p->extgstates_capacity; i++) { - pdf_init_extgstateresource( &p->extgstates[i] ); - } -} - -void -pdf_write_page_extgstates(PDF *p) -{ - int i, total = 0; - - for (i = 0; i < p->extgstates_number; i++) - if (p->extgstates[i].used_on_current_page) - total++; - - if (total > 0) { - pdc_puts(p->out, "/ExtGState"); - - pdc_begin_dict(p->out); /* ExtGState names */ - - for (i = 0; i < p->extgstates_number; i++) { - if (p->extgstates[i].used_on_current_page) { - p->extgstates[i].used_on_current_page = pdc_false; /* reset */ - pdc_printf(p->out, "/GS%d %ld 0 R\n", - i, p->extgstates[i].obj_id); - } - } - - pdc_end_dict(p->out); /* ExtGState names */ - } -} - -void -pdf_write_doc_extgstates(PDF *p) -{ - int i, j; - - pdf_extgstateresource *gs; - - for (i = 0; i < p->extgstates_number; i++) - { - gs = &p->extgstates[i]; - - pdc_begin_obj(p->out, gs->obj_id); /* ExtGState resource */ - pdc_begin_dict(p->out); - - pdc_puts(p->out, "/Type/ExtGState\n"); - - if (gs->font_obj != PDC_NEW_ID) - pdc_printf(p->out, "/Font[%ld 0 R %f]\n", - gs->font_obj, gs->font_size); - - if (gs->line_width != pdc_undef) - pdc_printf(p->out, "/LW %f\n", gs->line_width); - - if (gs->line_cap != pdc_undef) - pdc_printf(p->out, "/LC %d\n", gs->line_cap); - - if (gs->line_join != pdc_undef) - pdc_printf(p->out, "/LJ %d\n", gs->line_join); - - if (gs->miter_limit != pdc_undef) - pdc_printf(p->out, "/ML %f\n", gs->miter_limit); - - if (gs->dash_count > 0) - { - pdc_printf(p->out, "/D[["); - - for (j = 0; j < gs->dash_count; ++j) - pdc_printf(p->out, "%f ", gs->dash_array[j]); - - pdc_printf(p->out, "] %f]\n", gs->dash_phase); - /* but see page 157 of PDF Reference: integer */ - } - - if (gs->ri != AutoIntent) - pdc_printf(p->out, "/RI/%s\n", - pdc_get_keyword((long) gs->ri, gs_renderingintents)); - - if (gs->stroke_adjust != pdc_undef) - pdc_printf(p->out, "/SA %s\n", - gs->stroke_adjust ? "true" : "false"); - - if (gs->overprint_stroke != pdc_undef) - pdc_printf(p->out, "/OP %s\n", - gs->overprint_stroke ? "true" : "false"); - - if (gs->overprint_fill != pdc_undef) - pdc_printf(p->out, "/op %s\n", - gs->overprint_fill ? "true" : "false"); - else if (gs->overprint_stroke == pdc_true) - pdc_puts(p->out, "/op false\n"); - - if (gs->overprint_mode != pdc_undef) - pdc_printf(p->out, "/OPM %d\n", gs->overprint_mode); - - if (gs->flatness != pdc_undef) - pdc_printf(p->out, "/FL %f\n", gs->flatness); - - if (gs->smoothness != pdc_undef) - pdc_printf(p->out, "/SM %f\n", gs->smoothness); - - if (gs->opacity_fill != pdc_undef) - pdc_printf(p->out, "/ca %f\n", gs->opacity_fill); - - if (gs->blendmode != BM_None) { - const char *modename; - - pdc_printf(p->out, "/BM["); - for (j = 0; ; j++) { - modename = gs_blendmodes[j].word; - if (!modename) break; - if (gs->blendmode & gs_blendmodes[j].code) - pdc_printf(p->out, "/%s", modename); - } - pdc_printf(p->out, "]\n"); - } - - if (gs->opacity_stroke != pdc_undef) - pdc_printf(p->out, "/CA %f\n", gs->opacity_stroke); - - if (gs->alpha_is_shape != pdc_undef) - pdc_printf(p->out, "/AIS %s\n", - gs->alpha_is_shape ? "true" : "false"); - - if (gs->text_knockout != pdc_undef) - pdc_printf(p->out, "/TK %s\n", - gs->text_knockout ? "true" : "false"); - - pdc_end_dict(p->out); - pdc_end_obj(p->out); /* ExtGState resource */ - } -} - -void -pdf_cleanup_extgstates(PDF *p) -{ - int i; - - if (!p->extgstates) - return; - - for (i = 0; i < p->extgstates_number; i++) { - if (p->extgstates[i].dash_array) - pdc_free(p->pdc, p->extgstates[i].dash_array); - } - - pdc_free(p->pdc, p->extgstates); - p->extgstates = NULL; -} - -PDFLIB_API int PDFLIB_CALL -PDF_create_gstate(PDF *p, const char *optlist) -{ - static const char fn[] = "PDF_create_gstate"; - pdf_extgstateresource *gs; - int slot = -1; - int font = pdc_undef; - int inum; - pdc_clientdata data; - pdc_resopt *results; - - if (!pdf_enter_api(p, fn, - (pdf_state) (pdf_state_document | pdf_state_content), - "(p[%p], \"%s\")", (void *) p, optlist)) - { - PDF_RETURN_HANDLE(p, slot) - } - - if (optlist == NULL || !*optlist) - pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "optlist", 0, 0, 0); - - slot = p->extgstates_number; - if (slot == p->extgstates_capacity) - pdf_grow_extgstates(p); - - p->extgstates_number++; - gs = &p->extgstates[slot]; - gs->obj_id = pdc_alloc_id(p->out); - - /* parsing optlist */ - data.compatibility = p->compatibility; - data.maxfont = p->fonts_number - 1; - data.hastobepos = p->hastobepos; - results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_gstate_options, - &data, pdc_true); - - pdc_get_optvalues(p->pdc, "alphaisshape", results, - &gs->alpha_is_shape, NULL); - - if (pdc_get_optvalues(p->pdc, "blendmode", results, - &inum, NULL)) - gs->blendmode = (pdf_blendmode) inum; - - gs->dash_count = pdc_get_optvalues(p->pdc, "dasharray", results, - NULL, (void **) &gs->dash_array); - - pdc_get_optvalues(p->pdc, "dashphase", results, - &gs->dash_phase, NULL); - - pdc_get_optvalues(p->pdc, "flatness", results, - &gs->flatness, NULL); - - pdc_get_optvalues(p->pdc, "font", results, &font, NULL); - if (font != pdc_undef) - gs->font_obj = p->fonts[font].obj_id; - - pdc_get_optvalues(p->pdc, "fontsize", results, - &gs->font_size, NULL); - - pdc_get_optvalues(p->pdc, "linecap", results, - &gs->line_cap, NULL); - - pdc_get_optvalues(p->pdc, "linejoin", results, - &gs->line_join, NULL); - - pdc_get_optvalues(p->pdc, "linewidth", results, - &gs->line_width, NULL); - - pdc_get_optvalues(p->pdc, "miterlimit", results, - &gs->miter_limit, NULL); - - pdc_get_optvalues(p->pdc, "opacityfill", results, - &gs->opacity_fill, NULL); - - pdc_get_optvalues(p->pdc, "opacitystroke", results, - &gs->opacity_stroke, NULL); - - pdc_get_optvalues(p->pdc, "overprintfill", results, - &gs->overprint_fill, NULL); - - pdc_get_optvalues(p->pdc, "overprintmode", results, - &gs->overprint_mode, NULL); - - pdc_get_optvalues(p->pdc, "overprintstroke", results, - &gs->overprint_stroke, NULL); - - if (pdc_get_optvalues(p->pdc, "renderingintent", results, - &inum, NULL)) - gs->ri = (pdf_renderingintent) inum; - - pdc_get_optvalues(p->pdc, "smoothness", results, - &gs->smoothness, NULL); - - pdc_get_optvalues(p->pdc, "strokeadjust", results, - &gs->stroke_adjust, NULL); - - pdc_get_optvalues(p->pdc, "textknockout", results, - &gs->text_knockout, NULL); - - pdc_cleanup_optionlist(p->pdc, results); - - PDF_RETURN_HANDLE(p, slot) -} - -PDFLIB_API void PDFLIB_CALL -PDF_set_gstate(PDF *p, int gstate) -{ - static const char fn[] = "PDF_set_gstate"; - - if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %d)\n", - (void *) p, gstate)) - return; - - PDF_INPUT_HANDLE(p, gstate) - pdf_check_handle(p, gstate, pdc_gstatehandle); - - pdc_printf(p->out, "/GS%d gs\n", gstate); - p->extgstates[gstate].used_on_current_page = pdc_true; -} diff --git a/src/libs/pdflib/libs/pdflib/pdf.dsp b/src/libs/pdflib/libs/pdflib/pdf.dsp deleted file mode 100644 index 1bc1db2326..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdf.dsp +++ /dev/null @@ -1,303 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=pdf - Win32 Debug DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdf.mak" CFG="pdf - Win32 Debug DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdf - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "pdf - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "pdf - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdf - Win32 Release DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "pdf - Win32 Debug DLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /U "PDF_FEATURE_PDI" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdf.lib" - -!ELSEIF "$(CFG)" == "pdf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdf.lib" - -!ELSEIF "$(CFG)" == "pdf - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"pdf.lib" - -!ELSEIF "$(CFG)" == "pdf - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /U "PDF_FEATURE_PDI" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_EXPORTS" /U "PDF_FEATURE_PDI" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdf.lib" -# ADD LIB32 /nologo /out:"pdf.lib" - -!ELSEIF "$(CFG)" == "pdf - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /D "PDFLIB_EXPORTS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdf.lib" -# ADD LIB32 /nologo /out:"pdf.lib" - -!ENDIF - -# Begin Target - -# Name "pdf - Win32 Release" -# Name "pdf - Win32 Debug" -# Name "pdf - Win32 Release mtDLL" -# Name "pdf - Win32 Release DLL" -# Name "pdf - Win32 Debug DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\p_afm.c -# End Source File -# Begin Source File - -SOURCE=.\p_annots.c -# End Source File -# Begin Source File - -SOURCE=.\p_block.c -# End Source File -# Begin Source File - -SOURCE=.\p_bmp.c -# End Source File -# Begin Source File - -SOURCE=.\p_ccitt.c -# End Source File -# Begin Source File - -SOURCE=.\p_cid.c -# End Source File -# Begin Source File - -SOURCE=.\p_color.c -# End Source File -# Begin Source File - -SOURCE=.\p_draw.c -# End Source File -# Begin Source File - -SOURCE=.\p_encoding.c -# End Source File -# Begin Source File - -SOURCE=.\p_filter.c -# End Source File -# Begin Source File - -SOURCE=.\p_font.c -# End Source File -# Begin Source File - -SOURCE=.\p_gif.c -# End Source File -# Begin Source File - -SOURCE=.\p_gstate.c -# End Source File -# Begin Source File - -SOURCE=.\p_hostfont.c -# End Source File -# Begin Source File - -SOURCE=.\p_hyper.c -# End Source File -# Begin Source File - -SOURCE=.\p_icc.c -# End Source File -# Begin Source File - -SOURCE=.\p_icclib.c -# End Source File -# Begin Source File - -SOURCE=.\p_image.c -# End Source File -# Begin Source File - -SOURCE=.\p_jpeg.c -# End Source File -# Begin Source File - -SOURCE=.\p_kerning.c -# End Source File -# Begin Source File - -SOURCE=.\p_params.c -# End Source File -# Begin Source File - -SOURCE=.\p_pattern.c -# End Source File -# Begin Source File - -SOURCE=.\p_pdi.c -# End Source File -# Begin Source File - -SOURCE=.\p_pfm.c -# End Source File -# Begin Source File - -SOURCE=.\p_png.c -# End Source File -# Begin Source File - -SOURCE=.\p_resource.c -# End Source File -# Begin Source File - -SOURCE=.\p_shading.c -# End Source File -# Begin Source File - -SOURCE=.\p_subsett.c -# End Source File -# Begin Source File - -SOURCE=.\p_template.c -# End Source File -# Begin Source File - -SOURCE=.\p_text.c -# End Source File -# Begin Source File - -SOURCE=.\p_tiff.c -# End Source File -# Begin Source File - -SOURCE=.\p_truetype.c -# End Source File -# Begin Source File - -SOURCE=.\p_type1.c -# End Source File -# Begin Source File - -SOURCE=.\p_type3.c -# End Source File -# Begin Source File - -SOURCE=.\p_xgstate.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/pdflib.dsp b/src/libs/pdflib/libs/pdflib/pdflib.dsp deleted file mode 100644 index a29a58ae92..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib.dsp +++ /dev/null @@ -1,117 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdflib" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=pdflib - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdflib.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdflib.mak" CFG="pdflib - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdflib - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "pdflib - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "pdflib - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdflib - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "pdflib - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../png" /I "../flate" /I "../tiff" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "pdflib - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "pdflib - Win32 Release" -# Name "pdflib - Win32 Debug" -# Name "pdflib - Win32 Release mtDLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\p_basic.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/pdflib.h b/src/libs/pdflib/libs/pdflib/pdflib.h deleted file mode 100644 index 563035f711..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib.h +++ /dev/null @@ -1,1301 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflib.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib public function and constant declarations - * - */ - -#ifndef PDFLIB_H -#define PDFLIB_H - -#include -#include - - -/* - * ---------------------------------------------------------------------- - * Setup, mostly Windows calling conventions and DLL stuff - * ---------------------------------------------------------------------- - */ - -#ifdef WIN32 - -#if !defined(PDFLIB_CALL) -#define PDFLIB_CALL __cdecl -#endif - -#if !defined(PDFLIB_API) -#ifdef PDFLIB_EXPORTS -#define PDFLIB_API __declspec(dllexport) /* prepare a DLL (internal use only) */ - -#elif defined(PDFLIB_DLL) -#define PDFLIB_API __declspec(dllimport) /* PDFlib clients: import PDFlib DLL */ - -#else /* !PDFLIB_DLL */ -#define PDFLIB_API /* */ /* default: generate or use static library */ - -#endif /* !PDFLIB_DLL */ -#endif /* !PDFLIB_API */ - -#else /* !WIN32 */ - -#if ((defined __IBMC__ || defined __IBMCPP__) && defined __DLL__ && defined OS2) - #define PDFLIB_CALL _Export - #define PDFLIB_API -#endif /* IBM VisualAge C++ DLL */ - -#ifndef PDFLIB_CALL -#define PDFLIB_CALL -#endif -#ifndef PDFLIB_API -#define PDFLIB_API -#endif - -#endif /* !WIN32 */ - - -/* export all symbols for a shared library on the Mac */ -#if defined(__MWERKS__) && defined(PDFLIB_EXPORTS) -#pragma export on -#endif - - -/* Make our declarations C++ compatible */ -#ifdef __cplusplus -extern "C" { -#endif - - -/* Define the basic PDF type. This is used opaquely at the API level. */ -#if !defined(PDF) || defined(ACTIVEX) -typedef struct PDF_s PDF; -#endif /* !PDF */ - -/* The API structure with function pointers. */ -typedef struct PDFlib_api_s PDFlib_api; - -/* - * The version defines below may be used to check the version of the - * include file against the library. - */ - -/* do not change this (version.sh will do it for you :) */ -#define PDFLIB_MAJORVERSION 5 /* PDFlib major version number */ -#define PDFLIB_MINORVERSION 0 /* PDFlib minor version number */ -#define PDFLIB_REVISION 3 /* PDFlib revision number */ -#define PDFLIB_VERSIONSTRING "5.0.3" /* The whole bunch */ - - -/* {{{ p_annots.c: file attachments, notes, and links - * ---------------------------------------------------------------------- - */ - -/* Add a launch annotation (to a target of arbitrary file type). */ -PDFLIB_API void PDFLIB_CALL -PDF_add_launchlink(PDF *p, float llx, float lly, float urx, float ury, - const char *filename); - -/* Add a link annotation to a target within the current PDF file. */ -PDFLIB_API void PDFLIB_CALL -PDF_add_locallink(PDF *p, float llx, float lly, float urx, float ury, - int page, const char *optlist); - -/* Add a note annotation. icon is one of of "comment", "insert", "note", - * "paragraph", "newparagraph", "key", or "help". */ -PDFLIB_API void PDFLIB_CALL -PDF_add_note(PDF *p, float llx, float lly, float urx, float ury, - const char *contents, const char *title, const char *icon, int open); - -PDFLIB_API void PDFLIB_CALL -PDF_add_note2(PDF *p, float llx, float lly, float urx, float ury, - const char *contents, int len_cont, const char *title, int len_title, - const char *icon, int open); - -/* Add a file link annotation (to a PDF target). */ -PDFLIB_API void PDFLIB_CALL -PDF_add_pdflink(PDF *p, float llx, float lly, float urx, float ury, - const char *filename, int page, const char *optlist); - -/* Add a weblink annotation to a target URL on the Web. */ -PDFLIB_API void PDFLIB_CALL -PDF_add_weblink(PDF *p, float llx, float lly, float urx, float ury, - const char *url); - -/* Add a file attachment annotation. icon is one of "graph", "paperclip", - * "pushpin", or "tag". */ -PDFLIB_API void PDFLIB_CALL -PDF_attach_file(PDF *p, float llx, float lly, float urx, float ury, - const char *filename, const char *description, const char *author, - const char *mimetype, const char *icon); - -PDFLIB_API void PDFLIB_CALL -PDF_attach_file2(PDF *p, float llx, float lly, float urx, float ury, - const char *filename, int reserved, const char *description, int len_descr, - const char *author, int len_auth, const char *mimetype, const char *icon); - -/* Set the border color for all kinds of annotations. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_border_color(PDF *p, float red, float green, float blue); - -/* Set the border dash style for all kinds of annotations. See PDF_setdash(). */ -PDFLIB_API void PDFLIB_CALL -PDF_set_border_dash(PDF *p, float b, float w); - -/* Set the border style for all kinds of annotations. style is "solid" or - * "dashed". */ -PDFLIB_API void PDFLIB_CALL -PDF_set_border_style(PDF *p, const char *style, float width); -/* }}} */ - - -/* {{{ p_basic.c: general functions - * ---------------------------------------------------------------------- - */ - -/* Add a new page to the document. */ -PDFLIB_API void PDFLIB_CALL -PDF_begin_page(PDF *p, float width, float height); - -/* Boot PDFlib (recommended although currently not required). */ -PDFLIB_API void PDFLIB_CALL -PDF_boot(void); - -/* Close the generated PDF file, and release all document-related resources. */ -PDFLIB_API void PDFLIB_CALL -PDF_close(PDF *p); - -/* Delete the PDFlib object, and free all internal resources. */ -PDFLIB_API void PDFLIB_CALL -PDF_delete(PDF *p); - -/* Finish the page. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_page(PDF *p); - -/* Retrieve a structure with PDFlib API function pointers (mainly for DLLs). - * Although this function is published here, it is not supposed to be used - * directly by clients. Use PDF_new_dl() (in pdflibdl.c) instead. */ -PDFLIB_API const PDFlib_api * PDFLIB_CALL -PDF_get_api(void); - -/* Get the name of the API function which threw the last exception or failed. */ -PDFLIB_API const char * PDFLIB_CALL -PDF_get_apiname(PDF *p); - -/* Get the contents of the PDF output buffer. The result must be used by - * the client before calling any other PDFlib function. */ -PDFLIB_API const char * PDFLIB_CALL -PDF_get_buffer(PDF *p, long *size); - -/* Get the descriptive text of the last thrown exception, or the reason of - * a failed function call. */ -PDFLIB_API const char * PDFLIB_CALL -PDF_get_errmsg(PDF *p); - -/* Get the number of the last thrown exception, or the reason of a failed - * function call. */ -PDFLIB_API int PDFLIB_CALL -PDF_get_errnum(PDF *p); - -/* Depreceated: use PDF_get_value() */ -PDFLIB_API int PDFLIB_CALL -PDF_get_majorversion(void); - -/* Depreceated: use PDF_get_value() */ -PDFLIB_API int PDFLIB_CALL -PDF_get_minorversion(void); - -/* Fetch the opaque application pointer stored in PDFlib. */ -PDFLIB_API void * PDFLIB_CALL -PDF_get_opaque(PDF *p); - -/* Create a new PDFlib object, using default error handling and memory - management. */ -PDFLIB_API PDF * PDFLIB_CALL -PDF_new(void); - -/* Create a new PDFlib object with client-supplied error handling and memory - * allocation routines. */ -typedef void (*errorproc_t)(PDF *p1, int errortype, const char *msg); -typedef void* (*allocproc_t)(PDF *p2, size_t size, const char *caller); -typedef void* (*reallocproc_t)(PDF *p3, - void *mem, size_t size, const char *caller); -typedef void (*freeproc_t)(PDF *p4, void *mem); - -PDFLIB_API PDF * PDFLIB_CALL -PDF_new2(errorproc_t errorhandler, allocproc_t allocproc, - reallocproc_t reallocproc, freeproc_t freeproc, void *opaque); - -/* Create a new PDF file using the supplied file name. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_file(PDF *p, const char *filename); - -/* Open a new PDF file associated with p, using the supplied file handle. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_fp(PDF *p, FILE *fp); - -/* Open a new PDF in memory, and install a callback for fetching the data. */ -typedef size_t (*writeproc_t)(PDF *p1, void *data, size_t size); -PDFLIB_API void PDFLIB_CALL -PDF_open_mem(PDF *p, writeproc_t writeproc); - -/* Shut down PDFlib (recommended although currently not required). */ -PDFLIB_API void PDFLIB_CALL -PDF_shutdown(void); - -/* - * Error classes are deprecated; use PDF_TRY/PDF_CATCH instead. - * Note that old-style error handlers are still supported, but - * they will always receive type PDF_NonfatalError (for warnings) - * or PDF_UnknownError (for other exceptions). - */ - -#define PDF_MemoryError 1 -#define PDF_IOError 2 -#define PDF_RuntimeError 3 -#define PDF_IndexError 4 -#define PDF_TypeError 5 -#define PDF_DivisionByZero 6 -#define PDF_OverflowError 7 -#define PDF_SyntaxError 8 -#define PDF_ValueError 9 -#define PDF_SystemError 10 - -#define PDF_NonfatalError 11 -#define PDF_UnknownError 12 - -/* }}} */ - - -/*{{{ p_block.c: Variable Data Processing with blocks (requires the PDI library) - * -------------------------------------------------------------------------- - */ - -/* Process an image block according to its properties. */ -PDFLIB_API int PDFLIB_CALL -PDF_fill_imageblock(PDF *p, int page, const char *blockname, - int image, const char *optlist); - -/* Process a PDF block according to its properties. */ -PDFLIB_API int PDFLIB_CALL -PDF_fill_pdfblock(PDF *p, int page, const char *blockname, - int contents, const char *optlist); - -/* Process a text block according to its properties. */ -PDFLIB_API int PDFLIB_CALL -PDF_fill_textblock(PDF *p, int page, const char *blockname, - const char *text, int len, const char *optlist); -/* }}} */ - - -/* {{{ p_color.c: color handling - * ---------------------------------------------------------------------- - */ - -/* Make a named spot color from the current color. */ -PDFLIB_API int PDFLIB_CALL -PDF_makespotcolor(PDF *p, const char *spotname, int reserved); - -/* Set the current color space and color. fstype is "fill", "stroke", -or "fillstroke". - */ -PDFLIB_API void PDFLIB_CALL -PDF_setcolor(PDF *p, const char *fstype, const char *colorspace, - float c1, float c2, float c3, float c4); - -/* The following six functions are deprecated, use PDF_setcolor() instead. */ -PDFLIB_API void PDFLIB_CALL -PDF_setgray(PDF *p, float gray); - -PDFLIB_API void PDFLIB_CALL -PDF_setgray_fill(PDF *p, float gray); - -PDFLIB_API void PDFLIB_CALL -PDF_setgray_stroke(PDF *p, float gray); - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor(PDF *p, float red, float green, float blue); - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor_fill(PDF *p, float red, float green, float blue); - -PDFLIB_API void PDFLIB_CALL -PDF_setrgbcolor_stroke(PDF *p, float red, float green, float blue); -/* }}} */ - - -/* {{{ p_draw.c: path construction, painting, and clipping - * ---------------------------------------------------------------------- - */ - -/* Draw a counterclockwise circular arc from alpha to beta degrees. */ -PDFLIB_API void PDFLIB_CALL -PDF_arc(PDF *p, float x, float y, float r, float alpha, float beta); - -/* Draw a clockwise circular arc from alpha to beta degrees. */ -PDFLIB_API void PDFLIB_CALL -PDF_arcn(PDF *p, float x, float y, float r, float alpha, float beta); - -/* Draw a circle with center (x, y) and radius r. */ -PDFLIB_API void PDFLIB_CALL -PDF_circle(PDF *p, float x, float y, float r); - -/* Use the current path as clipping path. */ -PDFLIB_API void PDFLIB_CALL -PDF_clip(PDF *p); - -/* Close the current path. */ -PDFLIB_API void PDFLIB_CALL -PDF_closepath(PDF *p); - -/* Close the path, fill, and stroke it. */ -PDFLIB_API void PDFLIB_CALL -PDF_closepath_fill_stroke(PDF *p); - -/* Close the path, and stroke it. */ -PDFLIB_API void PDFLIB_CALL -PDF_closepath_stroke(PDF *p); - -/* Draw a Bezier curve from the current point, using 3 more control points. */ -PDFLIB_API void PDFLIB_CALL -PDF_curveto(PDF *p, - float x_1, float y_1, float x_2, float y_2, float x_3, float y_3); - -/* End the current path without filling or stroking it. */ -PDFLIB_API void PDFLIB_CALL -PDF_endpath(PDF *p); - -/* Fill the interior of the path with the current fill color. */ -PDFLIB_API void PDFLIB_CALL -PDF_fill(PDF *p); - -/* Fill and stroke the path with the current fill and stroke color. */ -PDFLIB_API void PDFLIB_CALL -PDF_fill_stroke(PDF *p); - -/* Draw a line from the current point to (x, y). */ -PDFLIB_API void PDFLIB_CALL -PDF_lineto(PDF *p, float x, float y); - -/* Draw a line from the current point to (cp + (x, y)) (unsupported). */ -PDFLIB_API void PDFLIB_CALL -PDF_rlineto(PDF *p, float x, float y); - -/* Set the current point. */ -PDFLIB_API void PDFLIB_CALL -PDF_moveto(PDF *p, float x, float y); - -/* Draw a Bezier curve from the current point using relative coordinates - (unsupported). */ -PDFLIB_API void PDFLIB_CALL -PDF_rcurveto(PDF *p, - float x_1, float y_1, float x_2, float y_2, float x_3, float y_3); - -/* Draw a rectangle at lower left (x, y) with width and height. */ -PDFLIB_API void PDFLIB_CALL -PDF_rect(PDF *p, float x, float y, float width, float height); - -/* Set the new current point relative the old current point (unsupported). */ -PDFLIB_API void PDFLIB_CALL -PDF_rmoveto(PDF *p, float x, float y); - -/* Stroke the path with the current color and line width, and clear it. */ -PDFLIB_API void PDFLIB_CALL -PDF_stroke(PDF *p); - -/* }}} */ - - -/* {{{ p_encoding.c: encoding handling - * ---------------------------------------------------------------------- - */ - -/* Request a glyph name from a custom encoding (unsupported). */ -PDFLIB_API const char * PDFLIB_CALL -PDF_encoding_get_glyphname(PDF *p, const char *encoding, int slot); - -/* Request a glyph unicode value from a custom encoding (unsupported). */ -PDFLIB_API int PDFLIB_CALL -PDF_encoding_get_unicode(PDF *p, const char *encoding, int slot); - -/* Add a glyph name to a custom encoding. */ -PDFLIB_API void PDFLIB_CALL -PDF_encoding_set_char(PDF *p, const char *encoding, int slot, - const char *glyphname, int uv); -/* }}} */ - - -/* {{{ p_font.c: text and font handling - * ---------------------------------------------------------------------- - */ - -/* Search a font, and prepare it for later use. PDF_load_font() is - * recommended. */ -PDFLIB_API int PDFLIB_CALL -PDF_findfont(PDF *p, const char *fontname, const char *encoding, int embed); - -/* Request a glyph ID value from a font (unsupported). */ -PDFLIB_API int PDFLIB_CALL -PDF_get_glyphid(PDF *p, int font, int code); - -/* Open and search a font, and prepare it for later use. */ -PDFLIB_API int PDFLIB_CALL -PDF_load_font(PDF *p, const char *fontname, int len, - const char *encoding, const char *optlist); - -/* Set the current font in the given size, using a font handle returned by - * PDF_load_font(). */ -PDFLIB_API void PDFLIB_CALL -PDF_setfont(PDF *p, int font, float fontsize); -/* }}} */ - - -/* {{{ p_gstate.c: graphics state - * ---------------------------------------------------------------------- - */ - -/* Maximum length of dash arrays */ -#define MAX_DASH_LENGTH 8 - -/* Concatenate a matrix to the current transformation matrix. */ -PDFLIB_API void PDFLIB_CALL -PDF_concat(PDF *p, float a, float b, float c, float d, float e, float f); - -/* Reset all color and graphics state parameters to their defaults. */ -PDFLIB_API void PDFLIB_CALL -PDF_initgraphics(PDF *p); - -/* Restore the most recently saved graphics state. */ -PDFLIB_API void PDFLIB_CALL -PDF_restore(PDF *p); - -/* Rotate the coordinate system by phi degrees. */ -PDFLIB_API void PDFLIB_CALL -PDF_rotate(PDF *p, float phi); - -/* Save the current graphics state. */ -PDFLIB_API void PDFLIB_CALL -PDF_save(PDF *p); - -/* Scale the coordinate system. */ -PDFLIB_API void PDFLIB_CALL -PDF_scale(PDF *p, float sx, float sy); - -/* Set the current dash pattern to b black and w white units. */ -PDFLIB_API void PDFLIB_CALL -PDF_setdash(PDF *p, float b, float w); - -/* Set a more complicated dash pattern defined by an optlist. */ -PDFLIB_API void PDFLIB_CALL -PDF_setdashpattern(PDF *p, const char *optlist); - -/* Set the flatness to a value between 0 and 100 inclusive. */ -PDFLIB_API void PDFLIB_CALL -PDF_setflat(PDF *p, float flatness); - -/* Set the linecap parameter to a value between 0 and 2 inclusive. */ -PDFLIB_API void PDFLIB_CALL -PDF_setlinecap(PDF *p, int linecap); - -/* Set the linejoin parameter to a value between 0 and 2 inclusive. */ -PDFLIB_API void PDFLIB_CALL -PDF_setlinejoin(PDF *p, int linejoin); - -/* Set the current linewidth to width. */ -PDFLIB_API void PDFLIB_CALL -PDF_setlinewidth(PDF *p, float width); - -/* Explicitly set the current transformation matrix. */ -PDFLIB_API void PDFLIB_CALL -PDF_setmatrix(PDF *p, float a, float b, float c, float d, float e, float f); - -/* Set the miter limit to a value greater than or equal to 1. */ -PDFLIB_API void PDFLIB_CALL -PDF_setmiterlimit(PDF *p, float miter); - -/* Deprecated, use PDF_setdashpattern() instead. */ -PDFLIB_API void PDFLIB_CALL -PDF_setpolydash(PDF *p, float *dasharray, int length); - -/* Skew the coordinate system in x and y direction by alpha and beta degrees. */ -PDFLIB_API void PDFLIB_CALL -PDF_skew(PDF *p, float alpha, float beta); - -/* Translate the origin of the coordinate system. */ -PDFLIB_API void PDFLIB_CALL -PDF_translate(PDF *p, float tx, float ty); -/* }}} */ - - -/* {{{ p_hyper.c: bookmarks and document info fields - * ---------------------------------------------------------------------- - */ - -/* Add a nested bookmark under parent, or a new top-level bookmark if - * parent = 0. Returns a bookmark descriptor which may be - * used as parent for subsequent nested bookmarks. If open = 1, child - * bookmarks will be folded out, and invisible if open = 0. */ -PDFLIB_API int PDFLIB_CALL -PDF_add_bookmark(PDF *p, const char *text, int parent, int open); - -PDFLIB_API int PDFLIB_CALL -PDF_add_bookmark2(PDF *p, const char *text, int len, int parent, int open); - -/* Create a named destination on an arbitrary page in the current document. */ -PDFLIB_API void PDFLIB_CALL -PDF_add_nameddest(PDF *p, const char *name, int reserved, const char *optlist); - -/* Fill document information field key with value. key is one of "Subject", - * "Title", "Creator", "Author", "Keywords", or a user-defined key. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_info(PDF *p, const char *key, const char *value); - -PDFLIB_API void PDFLIB_CALL -PDF_set_info2(PDF *p, const char *key, const char *value, int len); -/* }}} */ - - -/* {{{ p_icc.c: ICC profile handling - * ---------------------------------------------------------------------- - */ - -/* Search an ICC profile, and prepare it for later use. */ -PDFLIB_API int PDFLIB_CALL -PDF_load_iccprofile(PDF *p, const char *profilename, int reserved, - const char *optlist); -/* }}} */ - - -/* {{{ p_image.c: image handling - * ---------------------------------------------------------------------- - */ - -/* Add an existing image as thumbnail for the current page. */ -PDFLIB_API void PDFLIB_CALL -PDF_add_thumbnail(PDF *p, int image); - -/* Close an image retrieved with PDF_load_image(). */ -PDFLIB_API void PDFLIB_CALL -PDF_close_image(PDF *p, int image); - -/* Place an image or template at (x, y) with various options. */ -PDFLIB_API void PDFLIB_CALL -PDF_fit_image(PDF *p, int image, float x, float y, const char *optlist); - -/* Open a (disk-based or virtual) image file with various options. */ -PDFLIB_API int PDFLIB_CALL -PDF_load_image(PDF *p, const char *imagetype, const char *filename, - int reserved, const char *optlist); - -/* Deprecated, use PDF_load_image() instead. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_CCITT(PDF *p, const char *filename, int width, int height, - int BitReverse, int K, int BlackIs1); - -/* Deprecated, use PDF_load_image() with virtual files instead. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_image(PDF *p, const char *imagetype, const char *source, - const char *data, long length, int width, int height, int components, - int bpc, const char *params); - -/* Deprecated, use PDF_load_image() instead. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_image_file(PDF *p, const char *imagetype, const char *filename, - const char *stringparam, int intparam); - -/* Deprecated, use PDF_fit_image() instead. */ -PDFLIB_API void PDFLIB_CALL -PDF_place_image(PDF *p, int image, float x, float y, float scale); -/* }}} */ - - -/* {{{ p_kerning.c: font kerning - * ---------------------------------------------------------------------- - */ - -/* Request the amount of kerning between two characters in a specified font. - (unsupported) */ -PDFLIB_API float PDFLIB_CALL -PDF_get_kern_amount(PDF *p, int font, int firstchar, int secondchar); -/* }}} */ - - -/* {{{ p_params.c: parameter handling - * ---------------------------------------------------------------------- - */ - -/* Get the contents of some PDFlib parameter with string type. */ -PDFLIB_API const char * PDFLIB_CALL -PDF_get_parameter(PDF *p, const char *key, float modifier); - -/* Get the value of some PDFlib parameter with float type. */ -PDFLIB_API float PDFLIB_CALL -PDF_get_value(PDF *p, const char *key, float modifier); - -/* Set some PDFlib parameter with string type. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_parameter(PDF *p, const char *key, const char *value); - -/* Set the value of some PDFlib parameter with float type. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_value(PDF *p, const char *key, float value); -/* }}} */ - - -/* {{{ p_pattern.c: pattern definition - * ---------------------------------------------------------------------- - */ - -/* Start a new pattern definition. */ -PDFLIB_API int PDFLIB_CALL -PDF_begin_pattern(PDF *p, - float width, float height, float xstep, float ystep, int painttype); - -/* Finish a pattern definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_pattern(PDF *p); -/* }}} */ - - -/* {{{ p_pdi.c: PDF import (requires the PDI library) - * ---------------------------------------------------------------------- - */ - -/* Close all open page handles, and close the input PDF document. */ -PDFLIB_API void PDFLIB_CALL -PDF_close_pdi(PDF *p, int doc); - -/* Close the page handle, and free all page-related resources. */ -PDFLIB_API void PDFLIB_CALL -PDF_close_pdi_page(PDF *p, int page); - -/* Place an imported PDF page with the lower left corner at (x, y) with - * various options. */ -PDFLIB_API void PDFLIB_CALL -PDF_fit_pdi_page(PDF *p, int page, float x, float y, const char *optlist); - -/* Get the contents of some PDI document parameter with string type. */ -PDFLIB_API const char *PDFLIB_CALL -PDF_get_pdi_parameter(PDF *p, const char *key, int doc, int page, - int reserved, int *len); - -/* Get the contents of some PDI document parameter with numerical type. */ -PDFLIB_API float PDFLIB_CALL -PDF_get_pdi_value(PDF *p, const char *key, int doc, int page, int reserved); - -/* Open a (disk-based or virtual) PDF document and prepare it for later use. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi(PDF *p, const char *filename, const char *optlist, int reserved); - -/* Open an existing PDF document with callback functions for file access. */ -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi_callback(PDF *p, void *opaque, size_t filesize, - size_t (*readproc)(void *opaque, void *buffer, size_t size), - int (*seekproc)(void *opaque, long offset), - const char *optlist); - -/* Prepare a page for later use with PDF_place_pdi_page(). */ -PDFLIB_API int PDFLIB_CALL -PDF_open_pdi_page(PDF *p, int doc, int pagenumber, const char *optlist); - -/* Deprecated, use PDF_fit_pdi_page( ) instead. */ -PDFLIB_API void PDFLIB_CALL -PDF_place_pdi_page(PDF *p, int page, float x, float y, float sx, float sy); - -/* Perform various actions on a PDI document. */ -PDFLIB_API int PDFLIB_CALL -PDF_process_pdi(PDF *p, int doc, int page, const char *optlist); -/* }}} */ - - -/* {{{ p_resource.c: resources and virtual file system handling - * ---------------------------------------------------------------------- - */ - -/* Create a new virtual file. */ -PDFLIB_API void PDFLIB_CALL -PDF_create_pvf(PDF *p, const char *filename, int reserved, - const void *data, size_t size, const char *optlist); - -/* Delete a virtual file. */ -PDFLIB_API int PDFLIB_CALL -PDF_delete_pvf(PDF *p, const char *filename, int reserved); -/* }}} */ - - -/* {{{ p_shading.c: shadings - * ---------------------------------------------------------------------- - */ - -/* Define a color blend (smooth shading) from the current fill color to the - * supplied color. */ -PDFLIB_API int PDFLIB_CALL -PDF_shading(PDF *p, - const char *shtype, - float x_0, float y_0, - float x_1, float y_1, - float c_1, float c_2, float c_3, float c_4, - const char *optlist); - -/* Define a shading pattern using a shading object. */ -PDFLIB_API int PDFLIB_CALL -PDF_shading_pattern(PDF *p, int shading, const char *optlist); - -/* Fill an area with a shading, based on a shading object. */ -PDFLIB_API void PDFLIB_CALL -PDF_shfill(PDF *p, int shading); -/* }}} */ - - -/* {{{ p_template.c: template definition - * ---------------------------------------------------------------------- - */ - -/* Start a new template definition. */ -PDFLIB_API int PDFLIB_CALL -PDF_begin_template(PDF *p, float width, float height); - -/* Finish a template definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_template(PDF *p); -/* }}} */ - - -/* {{{ p_text.c: text output - * ---------------------------------------------------------------------- - */ - -/* Function duplicates with explicit string length for use with -strings containing null characters. These are for C and C++ clients only, -but are used internally for the other language bindings. */ - -/* Print text at the next line. The spacing between lines is determined by - * the "leading" parameter. */ -PDFLIB_API void PDFLIB_CALL -PDF_continue_text(PDF *p, const char *text); - -/* Same as PDF_continue_text but with explicit string length. */ -PDFLIB_API void PDFLIB_CALL -PDF_continue_text2(PDF *p, const char *text, int len); - -/* Place a single text line at (x, y) with various options. */ -PDFLIB_API void PDFLIB_CALL -PDF_fit_textline(PDF *p, const char *text, int len, float x, float y, - const char *optlist); - -/* This function is unsupported, and not considered part of the PDFlib API! */ -PDFLIB_API void PDFLIB_CALL -PDF_set_text_matrix(PDF *p, - float a, float b, float c, float d, float e, float f); - -/* Set the text output position. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_text_pos(PDF *p, float x, float y); - -/* Print text in the current font and size at the current position. */ -PDFLIB_API void PDFLIB_CALL -PDF_show(PDF *p, const char *text); - -/* Same as PDF_show() but with explicit string length. */ -PDFLIB_API void PDFLIB_CALL -PDF_show2(PDF *p, const char *text, int len); - -/* Format text in the current font and size into the supplied text box - * according to the requested formatting mode, which must be one of - * "left", "right", "center", "justify", or "fulljustify". If width and height - * are 0, only a single line is placed at the point (left, top) in the - * requested mode. */ -PDFLIB_API int PDFLIB_CALL -PDF_show_boxed(PDF *p, const char *text, float left, float top, - float width, float height, const char *hmode, const char *feature); - -/* Same as PDF_show_boxed() but with explicit string length. - (unsupported) */ -PDFLIB_API int PDFLIB_CALL -PDF_show_boxed2(PDF *p, const char *text, int len, float left, float top, - float width, float height, const char *hmode, const char *feature); - -/* Print text in the current font at (x, y). */ -PDFLIB_API void PDFLIB_CALL -PDF_show_xy(PDF *p, const char *text, float x, float y); - -/* Same as PDF_show_xy() but with explicit string length. */ -PDFLIB_API void PDFLIB_CALL -PDF_show_xy2(PDF *p, const char *text, int len, float x, float y); - -/* Return the width of text in an arbitrary font. */ -PDFLIB_API float PDFLIB_CALL -PDF_stringwidth(PDF *p, const char *text, int font, float fontsize); - -/* Same as PDF_stringwidth but with explicit string length. */ -PDFLIB_API float PDFLIB_CALL -PDF_stringwidth2(PDF *p, const char *text, int len, int font, float fontsize); -/* }}} */ - - -/* {{{ p_type3.c: Type 3 (user-defined) fonts - * ---------------------------------------------------------------------- - */ - -/* Start a type 3 font definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_begin_font(PDF *p, const char *fontname, int reserved, - float a, float b, float c, float d, float e, float f, const char *optlist); - -/* Start a type 3 glyph definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_begin_glyph(PDF *p, const char *glyphname, float wx, - float llx, float lly, float urx, float ury); - -/* Terminate a type 3 font definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_font(PDF *p); - -/* Terminate a type 3 glyph definition. */ -PDFLIB_API void PDFLIB_CALL -PDF_end_glyph(PDF *p); -/* }}} */ - - -/* {{{ p_xgstate.c: explicit graphic states - * ---------------------------------------------------------------------- - */ - -/* Create a gstate object definition. */ -PDFLIB_API int PDFLIB_CALL -PDF_create_gstate(PDF *p, const char *optlist); - -/* Activate a gstate object. */ -PDFLIB_API void PDFLIB_CALL -PDF_set_gstate(PDF *p, int gstate); -/* }}} */ - - -typedef struct -{ - jmp_buf jbuf; -} pdf_jmpbuf; - - -/* - * ---------------------------------------------------------------------- - * PDFlib API structure with function pointers to all API functions - * ---------------------------------------------------------------------- - */ - -/* The API structure with pointers to all PDFlib API functions */ -struct PDFlib_api_s { - /* version numbers for checking the DLL against client code */ - size_t sizeof_PDFlib_api; /* size of this structure */ - - int major; /* PDFlib major version number */ - int minor; /* PDFlib minor version number */ - int revision; /* PDFlib revision number */ - - int reserved; /* reserved */ - - /* {{{ p_annots.c: file attachments, notes, and links */ - void (PDFLIB_CALL * PDF_add_launchlink)(PDF *p, - float llx, float lly, float urx, - float ury, const char *filename); - void (PDFLIB_CALL * PDF_add_locallink)(PDF *p, - float llx, float lly, float urx, - float ury, int page, const char *optlist); - void (PDFLIB_CALL * PDF_add_note)(PDF *p, float llx, float lly, - float urx, float ury, const char *contents, const char *title, - const char *icon, int open); - void (PDFLIB_CALL * PDF_add_note2) (PDF *p, float llx, float lly, - float urx, float ury, const char *contents, int len_cont, - const char *title, int len_title, const char *icon, int open); - void (PDFLIB_CALL * PDF_add_pdflink)(PDF *p, - float llx, float lly, float urx, - float ury, const char *filename, int page, const char *optlist); - void (PDFLIB_CALL * PDF_add_weblink)(PDF *p, - float llx, float lly, float urx, float ury, const char *url); - void (PDFLIB_CALL * PDF_attach_file)(PDF *p, float llx, float lly, - float urx, float ury, const char *filename, - const char *description, - const char *author, const char *mimetype, const char *icon); - void (PDFLIB_CALL * PDF_attach_file2) (PDF *p, float llx, float lly, - float urx, float ury, const char *filename, int reserved, - const char *description, int len_descr, const char *author, - int len_auth, const char *mimetype, const char *icon); - void (PDFLIB_CALL * PDF_set_border_color)(PDF *p, - float red, float green, float blue); - void (PDFLIB_CALL * PDF_set_border_dash)(PDF *p, float b, float w); - - void (PDFLIB_CALL * PDF_set_border_style)(PDF *p, - const char *style, float width); - /* }}} */ - - /* {{{ p_basic.c: general functions */ - void (PDFLIB_CALL * PDF_begin_page)(PDF *p, float width, - float height); - void (PDFLIB_CALL * PDF_boot)(void); - void (PDFLIB_CALL * PDF_close)(PDF *p); - void (PDFLIB_CALL * PDF_delete)(PDF *); - void (PDFLIB_CALL * PDF_end_page)(PDF *p); - const PDFlib_api * (PDFLIB_CALL * PDF_get_api)(void); - const char * (PDFLIB_CALL * PDF_get_apiname) (PDF *p); - const char * (PDFLIB_CALL * PDF_get_buffer)(PDF *p, long *size); - const char * (PDFLIB_CALL * PDF_get_errmsg) (PDF *p); - int (PDFLIB_CALL * PDF_get_errnum) (PDF *p); - int (PDFLIB_CALL * PDF_get_majorversion)(void); - int (PDFLIB_CALL * PDF_get_minorversion)(void); - void * (PDFLIB_CALL * PDF_get_opaque)(PDF *p); - PDF* (PDFLIB_CALL * PDF_new)(void); - PDF* (PDFLIB_CALL * PDF_new2)(errorproc_t errorhandler, - allocproc_t allocproc, - reallocproc_t reallocproc, - freeproc_t freeproc, void *opaque); - int (PDFLIB_CALL * PDF_open_file)(PDF *p, const char *filename); - int (PDFLIB_CALL * PDF_open_fp)(PDF *p, FILE *fp); - void (PDFLIB_CALL * PDF_open_mem)(PDF *p, writeproc_t writeproc); - void (PDFLIB_CALL * PDF_shutdown)(void); - pdf_jmpbuf * (PDFLIB_CALL * pdf_jbuf)(PDF *p); - void (PDFLIB_CALL * pdf_exit_try)(PDF *p); - int (PDFLIB_CALL * pdf_catch)(PDF *p); - void (PDFLIB_CALL * pdf_rethrow)(PDF *p); - - /* }}} */ - - /* {{{ p_block.c: Variable Data Processing with blocks */ - int (PDFLIB_CALL * PDF_fill_imageblock) (PDF *p, int page, - const char *blockname, int image, const char *optlist); - int (PDFLIB_CALL * PDF_fill_pdfblock) (PDF *p, int page, - const char *blockname, int contents, const char *optlist); - int (PDFLIB_CALL * PDF_fill_textblock) (PDF *p, int page, - const char *blockname, const char *text, int len, - const char *optlist); - /* }}} */ - - /* {{{ p_color.c: color handling */ - int (PDFLIB_CALL * PDF_makespotcolor)(PDF *p, const char *spotname, - int reserved); - void (PDFLIB_CALL * PDF_setcolor)(PDF *p, - const char *fstype, const char *colorspace, - float c1, float c2, float c3, float c4); - void (PDFLIB_CALL * PDF_setgray)(PDF *p, float gray); - void (PDFLIB_CALL * PDF_setgray_stroke)(PDF *p, float gray); - void (PDFLIB_CALL * PDF_setgray_fill)(PDF *p, float gray); - void (PDFLIB_CALL * PDF_setrgbcolor)(PDF *p, float red, float green, - float blue); - void (PDFLIB_CALL * PDF_setrgbcolor_fill)(PDF *p, - float red, float green, float blue); - void (PDFLIB_CALL * PDF_setrgbcolor_stroke)(PDF *p, - float red, float green, float blue); - /* }}} */ - - /* {{{ p_draw.c: path construction, painting, and clipping */ - void (PDFLIB_CALL * PDF_arc)(PDF *p, float x, float y, - float r, float alpha, float beta); - void (PDFLIB_CALL * PDF_arcn)(PDF *p, float x, float y, - float r, float alpha, float beta); - void (PDFLIB_CALL * PDF_circle)(PDF *p, float x, float y, float r); - void (PDFLIB_CALL * PDF_clip)(PDF *p); - void (PDFLIB_CALL * PDF_closepath)(PDF *p); - void (PDFLIB_CALL * PDF_closepath_fill_stroke)(PDF *p); - void (PDFLIB_CALL * PDF_closepath_stroke)(PDF *p); - void (PDFLIB_CALL * PDF_curveto)(PDF *p, float x_1, float y_1, - float x_2, float y_2, float x_3, float y_3); - void (PDFLIB_CALL * PDF_endpath)(PDF *p); - void (PDFLIB_CALL * PDF_fill)(PDF *p); - void (PDFLIB_CALL * PDF_fill_stroke)(PDF *p); - void (PDFLIB_CALL * PDF_lineto)(PDF *p, float x, float y); - void (PDFLIB_CALL * PDF_moveto)(PDF *p, float x, float y); - void (PDFLIB_CALL * PDF_rect)(PDF *p, float x, float y, - float width, float height); - void (PDFLIB_CALL * PDF_stroke)(PDF *p); - /* }}} */ - - /* {{{ p_encoding.c: encoding handling */ - void (PDFLIB_CALL * PDF_encoding_set_char) (PDF *p, const char *encoding, - int slot, const char *glyphname, int uv); - /* }}} */ - - /* {{{ p_font.c: text and font handling */ - int (PDFLIB_CALL * PDF_findfont)(PDF *p, const char *fontname, - const char *encoding, int embed); - int (PDFLIB_CALL * PDF_load_font)(PDF *p, const char *fontname, - int len, const char *encoding, const char *optlist); - void (PDFLIB_CALL * PDF_setfont)(PDF *p, int font, float fontsize); - /* }}} */ - - /* {{{ p_gstate.c graphics state */ - void (PDFLIB_CALL * PDF_concat)(PDF *p, float a, float b, - float c, float d, float e, float f); - void (PDFLIB_CALL * PDF_initgraphics)(PDF *p); - void (PDFLIB_CALL * PDF_restore)(PDF *p); - void (PDFLIB_CALL * PDF_rotate)(PDF *p, float phi); - void (PDFLIB_CALL * PDF_save)(PDF *p); - void (PDFLIB_CALL * PDF_scale)(PDF *p, float sx, float sy); - void (PDFLIB_CALL * PDF_setdash)(PDF *p, float b, float w); - void (PDFLIB_CALL * PDF_setdashpattern) (PDF *p, const char *optlist); - void (PDFLIB_CALL * PDF_setflat)(PDF *p, float flatness); - void (PDFLIB_CALL * PDF_setlinecap)(PDF *p, int linecap); - void (PDFLIB_CALL * PDF_setlinejoin)(PDF *p, int linejoin); - void (PDFLIB_CALL * PDF_setlinewidth)(PDF *p, float width); - void (PDFLIB_CALL * PDF_setmatrix)(PDF *p, float a, float b, - float c, float d, float e, float f); - void (PDFLIB_CALL * PDF_setmiterlimit)(PDF *p, float miter); - void (PDFLIB_CALL * PDF_setpolydash)(PDF *p, float *dasharray, - int length); - void (PDFLIB_CALL * PDF_skew)(PDF *p, float alpha, float beta); - void (PDFLIB_CALL * PDF_translate)(PDF *p, float tx, float ty); - /* }}} */ - - /* {{{ p_hyper.c: bookmarks and document info fields */ - int (PDFLIB_CALL * PDF_add_bookmark)(PDF *p, const char *text, - int parent, int open); - int (PDFLIB_CALL * PDF_add_bookmark2) (PDF *p, const char *text, int len, - int parent, int open); - void (PDFLIB_CALL * PDF_add_nameddest) (PDF *p, const char *name, - int reserved, const char *optlist); - void (PDFLIB_CALL * PDF_set_info)(PDF *p, const char *key, - const char *value); - void (PDFLIB_CALL * PDF_set_info2) (PDF *p, const char *key, - const char *value, int len); - /* }}} */ - - /* {{{ p_icc.c: ICC profile handling */ - int (PDFLIB_CALL * PDF_load_iccprofile)(PDF *p, const char *profilename, - int reserved, const char *optlist); - /* }}} */ - - /* {{{ p_image.c: image handling */ - void (PDFLIB_CALL * PDF_add_thumbnail)(PDF *p, int image); - void (PDFLIB_CALL * PDF_close_image)(PDF *p, int image); - void (PDFLIB_CALL * PDF_fit_image) (PDF *p, int image, float x, float y, - const char *optlist); - int (PDFLIB_CALL * PDF_load_image) (PDF *p, const char *imagetype, - const char *filename, int reserved, const char *optlist); - int (PDFLIB_CALL * PDF_open_CCITT)(PDF *p, const char *filename, - int width, int height, - int BitReverse, int K, int BlackIs1); - int (PDFLIB_CALL * PDF_open_image)(PDF *p, const char *imagetype, - const char *source, const char *data, long length, int width, - int height, int components, int bpc, const char *params); - int (PDFLIB_CALL * PDF_open_image_file)(PDF *p, const char *imagetype, - const char *filename, const char *stringparam, int intparam); - void (PDFLIB_CALL * PDF_place_image)(PDF *p, int image, - float x, float y, float scale); - /* }}} */ - - /* {{{ p_kerning.c: font kerning */ - /* }}} */ - - /* {{{ p_params.c: parameter handling */ - const char* (PDFLIB_CALL * PDF_get_parameter)(PDF *p, - const char *key, float modifier); - float (PDFLIB_CALL * PDF_get_value)(PDF *p, const char *key, - float modifier); - void (PDFLIB_CALL * PDF_set_parameter)(PDF *p, - const char *key, const char *value); - void (PDFLIB_CALL * PDF_set_value)(PDF *p, const char *key, - float value); - /* }}} */ - - /* {{{ p_pattern.c: pattern definition */ - int (PDFLIB_CALL * PDF_begin_pattern)(PDF *p, - float width, float height, - float xstep, float ystep, int painttype); - void (PDFLIB_CALL * PDF_end_pattern)(PDF *p); - /* }}} */ - - /* {{{ p_pdi.c: PDF import (requires the PDI library) */ - void (PDFLIB_CALL * PDF_close_pdi)(PDF *p, int doc); - void (PDFLIB_CALL * PDF_close_pdi_page)(PDF *p, int page); - void (PDFLIB_CALL * PDF_fit_pdi_page) (PDF *p, int page, float x, - float y, const char *optlist); - const char * (PDFLIB_CALL * PDF_get_pdi_parameter)(PDF *p, - const char *key, int doc, int page, int reserved, int *len); - float (PDFLIB_CALL * PDF_get_pdi_value)(PDF *p, const char *key, - int doc, int page, int reserved); - int (PDFLIB_CALL * PDF_open_pdi)(PDF *p, const char *filename, - const char *optlist, int reserved); - int (PDFLIB_CALL * PDF_open_pdi_callback) (PDF *p, void *opaque, - size_t filesize, size_t (*readproc)(void *opaque, void *buffer, - size_t size), int (*seekproc)(void *opaque, long offset), - const char *optlist); - int (PDFLIB_CALL * PDF_open_pdi_page)(PDF *p, - int doc, int pagenumber, const char *optlist); - void (PDFLIB_CALL * PDF_place_pdi_page)(PDF *p, int page, - float x, float y, float sx, float sy); - int (PDFLIB_CALL * PDF_process_pdi)(PDF *p, - int doc, int page, const char *optlist); - /* }}} */ - - /* {{{ p_resource.c: resources and virtual file system handling */ - void (PDFLIB_CALL * PDF_create_pvf)(PDF *p, const char *filename, - int reserved, const void *data, size_t size, - const char *options); - int (PDFLIB_CALL * PDF_delete_pvf)(PDF *p, const char *filename, - int reserved); - /* }}} */ - - /* {{{ p_shading.c: shadings */ - int (PDFLIB_CALL * PDF_shading) (PDF *p, const char *shtype, float x_0, - float y_0, float x_1, float y_1, float c_1, float c_2, float c_3, - float c_4, const char *optlist); - int (PDFLIB_CALL * PDF_shading_pattern) (PDF *p, int shading, - const char *optlist); - void (PDFLIB_CALL * PDF_shfill) (PDF *p, int shading); - /* }}} */ - - /* {{{ p_template.c: template definition */ - int (PDFLIB_CALL * PDF_begin_template)(PDF *p, - float width, float height); - void (PDFLIB_CALL * PDF_end_template)(PDF *p); - /* }}} */ - - /* {{{ p_text.c: text output */ - void (PDFLIB_CALL * PDF_continue_text)(PDF *p, const char *text); - void (PDFLIB_CALL * PDF_continue_text2)(PDF *p, const char *text, - int len); - void (PDFLIB_CALL * PDF_fit_textline)(PDF *p, const char *text, - int len, float x, float y, const char *optlist); - void (PDFLIB_CALL * PDF_set_text_pos)(PDF *p, float x, float y); - void (PDFLIB_CALL * PDF_show)(PDF *p, const char *text); - void (PDFLIB_CALL * PDF_show2)(PDF *p, const char *text, int len); - int (PDFLIB_CALL * PDF_show_boxed)(PDF *p, const char *text, - float left, float top, float width, float height, - const char *hmode, const char *feature); - void (PDFLIB_CALL * PDF_show_xy)(PDF *p, const char *text, float x, - float y); - void (PDFLIB_CALL * PDF_show_xy2)(PDF *p, const char *text, - int len, float x, float y); - float (PDFLIB_CALL * PDF_stringwidth)(PDF *p, - const char *text, int font, float fontsize); - float (PDFLIB_CALL * PDF_stringwidth2)(PDF *p, const char *text, - int len, int font, float fontsize); - /* }}} */ - - /* {{{ p_type3.c: Type 3 (user-defined) fonts */ - void (PDFLIB_CALL * PDF_begin_font)(PDF *p, const char *fontname, - int reserved, float a, float b, float c, float d, float e, float f, - const char *optlist); - void (PDFLIB_CALL * PDF_begin_glyph)(PDF *p, const char *glyphname, - float wx, float llx, float lly, float urx, float ury); - void (PDFLIB_CALL * PDF_end_font)(PDF *p); - void (PDFLIB_CALL * PDF_end_glyph)(PDF *p); - /* }}} */ - - /* {{{ p_xgstate.c: explicit graphic states */ - int (PDFLIB_CALL * PDF_create_gstate) (PDF *p, const char *optlist); - void (PDFLIB_CALL * PDF_set_gstate) (PDF *p, int gstate); - /* }}} */ -}; - -/* - * ---------------------------------------------------------------------- - * page size formats - * ---------------------------------------------------------------------- - */ - -/* The page sizes are only available to the C and C++ bindings */ -#define a0_width (float) 2380.0 -#define a0_height (float) 3368.0 -#define a1_width (float) 1684.0 -#define a1_height (float) 2380.0 -#define a2_width (float) 1190.0 -#define a2_height (float) 1684.0 -#define a3_width (float) 842.0 -#define a3_height (float) 1190.0 -#define a4_width (float) 595.0 -#define a4_height (float) 842.0 -#define a5_width (float) 421.0 -#define a5_height (float) 595.0 -#define a6_width (float) 297.0 -#define a6_height (float) 421.0 -#define b5_width (float) 501.0 -#define b5_height (float) 709.0 -#define letter_width (float) 612.0 -#define letter_height (float) 792.0 -#define legal_width (float) 612.0 -#define legal_height (float) 1008.0 -#define ledger_width (float) 1224.0 -#define ledger_height (float) 792.0 -#define p11x17_width (float) 792.0 -#define p11x17_height (float) 1224.0 - - -/* - * ---------------------------------------------------------------------- - * exception handling with try/catch implementation - * ---------------------------------------------------------------------- - */ - -/* Set up an exception handling frame; must always be paired with PDF_CATCH().*/ - -#define PDF_TRY(p) if (p) { if (setjmp(pdf_jbuf(p)->jbuf) == 0) - -/* Inform the exception machinery that a PDF_TRY() will be left without - entering the corresponding PDF_CATCH( ) clause. */ -#define PDF_EXIT_TRY(p) pdf_exit_try(p) - -/* Catch an exception; must always be paired with PDF_TRY(). */ -#define PDF_CATCH(p) } if (pdf_catch(p)) - -/* Re-throw an exception to another handler. */ -#define PDF_RETHROW(p) pdf_rethrow(p) - -/* - * ---------------------------------------------------------------------- - * End of public declarations - * ---------------------------------------------------------------------- - */ - - -/* - * ---------------------------------------------------------------------- - * Private stuff, do not use explicitly but only via the above macros! - * ---------------------------------------------------------------------- - */ - -PDFLIB_API pdf_jmpbuf * PDFLIB_CALL -pdf_jbuf(PDF *p); - -PDFLIB_API void PDFLIB_CALL -pdf_exit_try(PDF *p); - -PDFLIB_API int PDFLIB_CALL -pdf_catch(PDF *p); - -PDFLIB_API void PDFLIB_CALL -pdf_rethrow(PDF *p); - -PDFLIB_API void PDFLIB_CALL -pdf_throw(PDF *p, const char *binding, const char *apiname, const char *errmsg); - - -/* - * ---------------------------------------------------------------------- - * End of useful stuff - * ---------------------------------------------------------------------- - */ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#if defined(__MWERKS__) && defined(PDFLIB_EXPORTS) -#pragma export off -#endif - -#endif /* PDFLIB_H */ - -/* - * vim600: sw=4 fdm=marker - */ diff --git a/src/libs/pdflib/libs/pdflib/pdflib.rc b/src/libs/pdflib/libs/pdflib/pdflib.rc deleted file mode 100644 index b2fb6c4d1b..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib.rc +++ /dev/null @@ -1,117 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) -#ifdef _WIN32 -LANGUAGE LANG_GERMAN, SUBLANG_GERMAN -#pragma code_page(1252) -#endif //_WIN32 - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,0,3,3 - PRODUCTVERSION 5,0,3,3 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "www.pdflib.com\0" - VALUE "CompanyName", "PDFlib GmbH\0" - VALUE "FileDescription", "PDFlib - a library for generating PDF on the fly\0" - VALUE "FileVersion", "5.0.0\0" - VALUE "LegalCopyright", "Copyright © 1997-2001 PDFlib GmbH\0" - VALUE "OriginalFilename", "pdflib.dll\0" - VALUE "ProductName", "PDFlib for Windows\0" - VALUE "ProductVersion", "5.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resrc1.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""resource.h""\r\n" - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - IDRETRY "pdflib" -END - -#endif // German (Germany) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/libs/pdflib/libs/pdflib/pdflib_dll.dsp b/src/libs/pdflib/libs/pdflib/pdflib_dll.dsp deleted file mode 100644 index d066e4376d..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib_dll.dsp +++ /dev/null @@ -1,76 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdflib_dll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=pdflib_dll - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdflib_dll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdflib_dll.mak" CFG="pdflib_dll - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdflib_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Release_dll" -# PROP Intermediate_Dir "Release_dll" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../flate" /I "../tiff" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /D "PDFLIB_PSP_BUILD" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../flate" /I "../tiff" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:3.1 /dll /pdb:none /machine:I386 /out:"Release_dll/pdflib.dll" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:3.1 /dll /pdb:none /machine:I386 /out:"Release_dll/pdflib.dll" -# SUBTRACT LINK32 /debug /nodefaultlib -# Begin Target - -# Name "pdflib_dll - Win32 Release" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\p_basic.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\pdflib.rc -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/pdflib_pdi.dsp b/src/libs/pdflib/libs/pdflib/pdflib_pdi.dsp deleted file mode 100644 index 571066ba71..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib_pdi.dsp +++ /dev/null @@ -1,120 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdflib_pdi" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=pdflib_pdi - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdflib_pdi.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdflib_pdi.mak" CFG="pdflib_pdi - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdflib_pdi - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "pdflib_pdi - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "pdflib_pdi - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdflib_pdi - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"Release/pdflib.lib" - -!ELSEIF "$(CFG)" == "pdflib_pdi - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"Debug/pdflib.lib" - -!ELSEIF "$(CFG)" == "pdflib_pdi - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FD /c -# SUBTRACT BASE CPP /YX -# ADD CPP /nologo /MD /W3 /O2 /I "../png" /I "../flate" /I "../tiff" /I "../pdi" /I "../pdcore" /I "../pdpage" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"pdflib.lib" -# ADD LIB32 /nologo /out:"Release_mtDLL\pdflib.lib" - -!ENDIF - -# Begin Target - -# Name "pdflib_pdi - Win32 Release" -# Name "pdflib_pdi - Win32 Debug" -# Name "pdflib_pdi - Win32 Release mtDLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\p_basic.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/pdflib_pdi_dll.dsp b/src/libs/pdflib/libs/pdflib/pdflib_pdi_dll.dsp deleted file mode 100644 index 0eb9444570..0000000000 --- a/src/libs/pdflib/libs/pdflib/pdflib_pdi_dll.dsp +++ /dev/null @@ -1,115 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdflib_pdi_dll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=pdflib_pdi_dll - Win32 Debug DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdflib_pdi_dll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdflib_pdi_dll.mak" CFG="pdflib_pdi_dll - Win32 Debug DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdflib_pdi_dll - Win32 Release DLL" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "pdflib_pdi_dll - Win32 Debug DLL" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdflib_pdi_dll - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /Z7 /O2 /I "../flate" /I "../tiff" /I "../pdi" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /FD /c -# SUBTRACT BASE CPP /YX -# ADD CPP /nologo /MT /W3 /Z7 /O2 /I "../flate" /I "../tiff" /I "../pdi" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:5.0 /dll /pdb:none /machine:I386 /out:"Release_dll/pdflib.dll" -# SUBTRACT BASE LINK32 /debug /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:5.0 /dll /pdb:none /machine:I386 /out:"Release_dll/pdflib.dll" -# SUBTRACT LINK32 /debug /nodefaultlib - -!ELSEIF "$(CFG)" == "pdflib_pdi_dll - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../flate" /I "../tiff" /I "../pdi" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /FR /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../flate" /I "../tiff" /I "../pdi" /I "../png" /I "../pdcore" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_MT" /D "PDFLIB_EXPORTS" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:5.0 /dll /pdb:none /debug /machine:I386 /out:"Debug_dll/pdflib.dll" -# SUBTRACT BASE LINK32 /nodefaultlib -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x55300000" /version:5.0 /dll /pdb:none /debug /machine:I386 /out:"Debug_dll/pdflib.dll" -# SUBTRACT LINK32 /nodefaultlib - -!ENDIF - -# Begin Target - -# Name "pdflib_pdi_dll - Win32 Release DLL" -# Name "pdflib_pdi_dll - Win32 Debug DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\p_basic.c -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\pdflib.rc -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/pdflib/resource.h b/src/libs/pdflib/libs/pdflib/resource.h deleted file mode 100644 index 82733d8246..0000000000 --- a/src/libs/pdflib/libs/pdflib/resource.h +++ /dev/null @@ -1,18 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by pdflib.rc -// - -// Next default values for new objects -// -/* $Id: resource.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/libs/pdflib/libs/png/Jamfile b/src/libs/pdflib/libs/png/Jamfile deleted file mode 100644 index 64a23bb71f..0000000000 --- a/src/libs/pdflib/libs/png/Jamfile +++ /dev/null @@ -1,23 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs png ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs flate ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs pdcore ] ; - -UseLibraryHeaders pdflib ; - -StaticLibrary libpdf.a : - png.c - pngerror.c - pngget.c - pngmem.c - pngread.c - pngrio.c - pngrtran.c - pngrutil.c - pngset.c - pngtrans.c - pngvcrd.c -; - diff --git a/src/libs/pdflib/libs/png/Makefile b/src/libs/pdflib/libs/png/Makefile deleted file mode 100644 index 9e7937acdb..0000000000 --- a/src/libs/pdflib/libs/png/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Makefile for libpng 1.2.5 -# This generates a libtool convenience library -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -include ../../config/mkcommon.inc - -LIBNAME = $(PNGLIBLINK) -INCLUDES = $(ZLIBINC) $(PDCORELIBINC) - -SRC = \ - $(srcdir)/png.c \ - $(srcdir)/pngset.c \ - $(srcdir)/pngget.c \ - $(srcdir)/pngrutil.c \ - $(srcdir)/pngtrans.c \ - $(srcdir)/pngread.c \ - $(srcdir)/pngrio.c \ - $(srcdir)/pngrtran.c \ - $(srcdir)/pngmem.c \ - $(srcdir)/pngerror.c - -OBJS = \ - $(srcdir)/png$(LO) \ - $(srcdir)/pngset$(LO) \ - $(srcdir)/pngget$(LO) \ - $(srcdir)/pngrutil$(LO) \ - $(srcdir)/pngtrans$(LO) \ - $(srcdir)/pngread$(LO) \ - $(srcdir)/pngrio$(LO) \ - $(srcdir)/pngrtran$(LO) \ - $(srcdir)/pngmem$(LO) \ - $(srcdir)/pngerror$(LO) - -include ../../config/mklibs.inc - -# Automatically generated dependencies diff --git a/src/libs/pdflib/libs/png/png.c b/src/libs/pdflib/libs/png/png.c deleted file mode 100644 index 1ada0a8960..0000000000 --- a/src/libs/pdflib/libs/png/png.c +++ /dev/null @@ -1,808 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: png.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* png.c - location for general purpose libpng functions - * - * libpng version 1.2.5 - October 3, 2002 - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - */ - -#define PNG_INTERNAL -#define PNG_NO_EXTERN -#include "png.h" - -/* Generate a compiler error if there is an old png.h in the search path. */ -typedef version_1_2_5 Your_png_h_is_not_version_1_2_5; - -/* Version information for C files. This had better match the version - * string defined in png.h. */ - -#ifdef PNG_USE_GLOBAL_ARRAYS -/* png_libpng_ver was changed to a function in version 1.0.5c */ -const char png_libpng_ver[18] = "1.2.5"; - -/* png_sig was changed to a function in version 1.0.5c */ -/* Place to hold the signature string for a PNG file. */ -const png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; - -/* Invoke global declarations for constant strings for known chunk types */ -PNG_IHDR; -PNG_IDAT; -PNG_IEND; -PNG_PLTE; -PNG_bKGD; -PNG_cHRM; -PNG_gAMA; -PNG_hIST; -PNG_iCCP; -PNG_iTXt; -PNG_oFFs; -PNG_pCAL; -PNG_sCAL; -PNG_pHYs; -PNG_sBIT; -PNG_sPLT; -PNG_sRGB; -PNG_tEXt; -PNG_tIME; -PNG_tRNS; -PNG_zTXt; - -/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ - -/* start of interlace block */ -const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; - -/* offset to next interlace block */ -const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; - -/* start of interlace block in the y direction */ -const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; - -/* offset to next interlace block in the y direction */ -const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; - -/* width of interlace block (used in assembler routines only) */ -#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW -const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; -#endif - -/* Height of interlace block. This is not currently used - if you need - * it, uncomment it here and in png.h -const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1}; -*/ - -/* Mask to determine which pixels are valid in a pass */ -const int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; - -/* Mask to determine which pixels to overwrite while displaying */ -const int FARDATA png_pass_dsp_mask[] - = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; - -#endif - -/* Tells libpng that we have already handled the first "num_bytes" bytes - * of the PNG file signature. If the PNG data is embedded into another - * stream we can set num_bytes = 8 so that libpng will not attempt to read - * or write any of the magic bytes before it starts on the IHDR. - */ - -void PNGAPI -png_set_sig_bytes(png_structp png_ptr, int num_bytes) -{ - png_debug(1, "in png_set_sig_bytes\n"); - if (num_bytes > 8) - png_error(png_ptr, "Too many bytes for PNG signature."); - - png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes); -} - -/* Checks whether the supplied bytes match the PNG signature. We allow - * checking less than the full 8-byte signature so that those apps that - * already read the first few bytes of a file to determine the file type - * can simply check the remaining bytes for extra assurance. Returns - * an integer less than, equal to, or greater than zero if sig is found, - * respectively, to be less than, to match, or be greater than the correct - * PNG signature (this is the same behaviour as strcmp, memcmp, etc). - */ -int PNGAPI -png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check) -{ - png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; - if (num_to_check > 8) - num_to_check = 8; - else if (num_to_check < 1) - return (0); - - if (start > 7) - return (0); - - if (start + num_to_check > 8) - num_to_check = 8 - start; - - return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check))); -} - -/* (Obsolete) function to check signature bytes. It does not allow one - * to check a partial signature. This function might be removed in the - * future - use png_sig_cmp(). Returns true (nonzero) if the file is a PNG. - */ -int PNGAPI -png_check_sig(png_bytep sig, int num) -{ - return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num)); -} - -/* Function to allocate memory for zlib and clear it to 0. */ -#ifdef PNG_1_0_X -voidpf PNGAPI -#else -voidpf /* private */ -#endif -png_zalloc(voidpf png_ptr, uInt items, uInt size) -{ - png_uint_32 num_bytes = (png_uint_32)items * size; - png_voidp ptr; - png_structp p = (png_structp) png_ptr; - png_uint_32 save_flags=p->flags; - - p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; - ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes); - p->flags=save_flags; - -#ifndef PNG_NO_ZALLOC_ZERO - if (ptr == NULL) - return ((voidpf)ptr); - - if (num_bytes > (png_uint_32)0x8000L) - { - png_memset(ptr, 0, (png_size_t)0x8000L); - png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0, - (png_size_t)(num_bytes - (png_uint_32)0x8000L)); - } - else - { - png_memset(ptr, 0, (png_size_t)num_bytes); - } -#endif - return ((voidpf)ptr); -} - -/* function to free memory for zlib */ -#ifdef PNG_1_0_X -void PNGAPI -#else -void /* private */ -#endif -png_zfree(voidpf png_ptr, voidpf ptr) -{ - png_free((png_structp)png_ptr, (png_voidp)ptr); -} - -/* Reset the CRC variable to 32 bits of 1's. Care must be taken - * in case CRC is > 32 bits to leave the top bits 0. - */ -void /* PRIVATE */ -png_reset_crc(png_structp png_ptr) -{ - png_ptr->crc = crc32(0, Z_NULL, 0); -} - -/* Calculate the CRC over a section of data. We can only pass as - * much data to this routine as the largest single buffer size. We - * also check that this data will actually be used before going to the - * trouble of calculating it. - */ -void /* PRIVATE */ -png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length) -{ - int need_crc = 1; - - if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ - { - if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == - (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) - need_crc = 0; - } - else /* critical */ - { - if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) - need_crc = 0; - } - - if (need_crc) - png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length); -} - -/* Allocate the memory for an info_struct for the application. We don't - * really need the png_ptr, but it could potentially be useful in the - * future. This should be used in favour of malloc(sizeof(png_info)) - * and png_info_init() so that applications that want to use a shared - * libpng don't have to be recompiled if png_info changes size. - */ -png_infop PNGAPI -png_create_info_struct(png_structp png_ptr) -{ - png_infop info_ptr; - - png_debug(1, "in png_create_info_struct\n"); - if(png_ptr == NULL) return (NULL); -#ifdef PNG_USER_MEM_SUPPORTED - info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO, - png_ptr->malloc_fn, png_ptr->mem_ptr); -#else - info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); -#endif - if (info_ptr != NULL) - png_info_init_3(&info_ptr, sizeof(png_info)); - - return (info_ptr); -} - -/* This function frees the memory associated with a single info struct. - * Normally, one would use either png_destroy_read_struct() or - * png_destroy_write_struct() to free an info struct, but this may be - * useful for some applications. - */ -void PNGAPI -png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr) -{ - png_infop info_ptr = NULL; - - png_debug(1, "in png_destroy_info_struct\n"); - if (info_ptr_ptr != NULL) - info_ptr = *info_ptr_ptr; - - if (info_ptr != NULL) - { - png_info_destroy(png_ptr, info_ptr); - -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn, - png_ptr->mem_ptr); -#else - png_destroy_struct((png_voidp)info_ptr); -#endif - *info_ptr_ptr = NULL; - } -} - -/* Initialize the info structure. This is now an internal function (0.89) - * and applications using it are urged to use png_create_info_struct() - * instead. - */ -/* PDFlib GmbH -#undef png_info_init -*/ -void PNGAPI -png_info_init(png_infop info_ptr) -{ - /* We only come here via pre-1.0.12-compiled applications */ - png_info_init_3(&info_ptr, 0); -} - -void PNGAPI -png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size) -{ - png_infop info_ptr = *ptr_ptr; - - png_debug(1, "in png_info_init_3\n"); - - if(sizeof(png_info) > png_info_struct_size) - { - png_destroy_struct(info_ptr); - info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); - *ptr_ptr = info_ptr; - } - - /* set everything to 0 */ - png_memset(info_ptr, 0, sizeof (png_info)); -} - -#ifdef PNG_FREE_ME_SUPPORTED -void PNGAPI -png_data_freer(png_structp png_ptr, png_infop info_ptr, - int freer, png_uint_32 mask) -{ - png_debug(1, "in png_data_freer\n"); - if (png_ptr == NULL || info_ptr == NULL) - return; - if(freer == PNG_DESTROY_WILL_FREE_DATA) - info_ptr->free_me |= mask; - else if(freer == PNG_USER_WILL_FREE_DATA) - info_ptr->free_me &= ~mask; - else - png_warning(png_ptr, - "Unknown freer parameter in png_data_freer."); -} -#endif - -void PNGAPI -png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, - int num) -{ - png_debug(1, "in png_free_data\n"); - if (png_ptr == NULL || info_ptr == NULL) - return; - -#if defined(PNG_TEXT_SUPPORTED) -/* free text item num or (if num == -1) all text items */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_TEXT) & info_ptr->free_me) -#else -if (mask & PNG_FREE_TEXT) -#endif -{ - if (num != -1) - { - if (info_ptr->text && info_ptr->text[num].key) - { - png_free(png_ptr, info_ptr->text[num].key); - info_ptr->text[num].key = NULL; - } - } - else - { - int i; - for (i = 0; i < info_ptr->num_text; i++) - png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i); - png_free(png_ptr, info_ptr->text); - info_ptr->text = NULL; - info_ptr->num_text=0; - } -} -#endif - -#if defined(PNG_tRNS_SUPPORTED) -/* free any tRNS entry */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_TRNS) & info_ptr->free_me) -#else -if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS)) -#endif -{ - png_free(png_ptr, info_ptr->trans); - info_ptr->valid &= ~PNG_INFO_tRNS; -#ifndef PNG_FREE_ME_SUPPORTED - png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; -#endif - info_ptr->trans = NULL; -} -#endif - -#if defined(PNG_sCAL_SUPPORTED) -/* free any sCAL entry */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_SCAL) & info_ptr->free_me) -#else -if (mask & PNG_FREE_SCAL) -#endif -{ -#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) - png_free(png_ptr, info_ptr->scal_s_width); - png_free(png_ptr, info_ptr->scal_s_height); - info_ptr->scal_s_width = NULL; - info_ptr->scal_s_height = NULL; -#endif - info_ptr->valid &= ~PNG_INFO_sCAL; -} -#endif - -#if defined(PNG_pCAL_SUPPORTED) -/* free any pCAL entry */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_PCAL) & info_ptr->free_me) -#else -if (mask & PNG_FREE_PCAL) -#endif -{ - png_free(png_ptr, info_ptr->pcal_purpose); - png_free(png_ptr, info_ptr->pcal_units); - info_ptr->pcal_purpose = NULL; - info_ptr->pcal_units = NULL; - if (info_ptr->pcal_params != NULL) - { - int i; - for (i = 0; i < (int)info_ptr->pcal_nparams; i++) - { - png_free(png_ptr, info_ptr->pcal_params[i]); - info_ptr->pcal_params[i]=NULL; - } - png_free(png_ptr, info_ptr->pcal_params); - info_ptr->pcal_params = NULL; - } - info_ptr->valid &= ~PNG_INFO_pCAL; -} -#endif - -#if defined(PNG_iCCP_SUPPORTED) -/* free any iCCP entry */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_ICCP) & info_ptr->free_me) -#else -if (mask & PNG_FREE_ICCP) -#endif -{ - png_free(png_ptr, info_ptr->iccp_name); - png_free(png_ptr, info_ptr->iccp_profile); - info_ptr->iccp_name = NULL; - info_ptr->iccp_profile = NULL; - info_ptr->valid &= ~PNG_INFO_iCCP; -} -#endif - -#if defined(PNG_sPLT_SUPPORTED) -/* free a given sPLT entry, or (if num == -1) all sPLT entries */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_SPLT) & info_ptr->free_me) -#else -if (mask & PNG_FREE_SPLT) -#endif -{ - if (num != -1) - { - if(info_ptr->splt_palettes) - { - png_free(png_ptr, info_ptr->splt_palettes[num].name); - png_free(png_ptr, info_ptr->splt_palettes[num].entries); - info_ptr->splt_palettes[num].name = NULL; - info_ptr->splt_palettes[num].entries = NULL; - } - } - else - { - if(info_ptr->splt_palettes_num) - { - int i; - for (i = 0; i < (int)info_ptr->splt_palettes_num; i++) - png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i); - - png_free(png_ptr, info_ptr->splt_palettes); - info_ptr->splt_palettes = NULL; - info_ptr->splt_palettes_num = 0; - } - info_ptr->valid &= ~PNG_INFO_sPLT; - } -} -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_UNKN) & info_ptr->free_me) -#else -if (mask & PNG_FREE_UNKN) -#endif -{ - if (num != -1) - { - if(info_ptr->unknown_chunks) - { - png_free(png_ptr, info_ptr->unknown_chunks[num].data); - info_ptr->unknown_chunks[num].data = NULL; - } - } - else - { - int i; - - if(info_ptr->unknown_chunks_num) - { - for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++) - png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i); - - png_free(png_ptr, info_ptr->unknown_chunks); - info_ptr->unknown_chunks = NULL; - info_ptr->unknown_chunks_num = 0; - } - } -} -#endif - -#if defined(PNG_hIST_SUPPORTED) -/* free any hIST entry */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_HIST) & info_ptr->free_me) -#else -if ((mask & PNG_FREE_HIST) && (png_ptr->flags & PNG_FLAG_FREE_HIST)) -#endif -{ - png_free(png_ptr, info_ptr->hist); - info_ptr->hist = NULL; - info_ptr->valid &= ~PNG_INFO_hIST; -#ifndef PNG_FREE_ME_SUPPORTED - png_ptr->flags &= ~PNG_FLAG_FREE_HIST; -#endif -} -#endif - -/* free any PLTE entry that was internally allocated */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_PLTE) & info_ptr->free_me) -#else -if ((mask & PNG_FREE_PLTE) && (png_ptr->flags & PNG_FLAG_FREE_PLTE)) -#endif -{ - png_zfree(png_ptr, info_ptr->palette); - info_ptr->palette = NULL; - info_ptr->valid &= ~PNG_INFO_PLTE; -#ifndef PNG_FREE_ME_SUPPORTED - png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; -#endif - info_ptr->num_palette = 0; -} - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* free any image bits attached to the info structure */ -#ifdef PNG_FREE_ME_SUPPORTED -if ((mask & PNG_FREE_ROWS) & info_ptr->free_me) -#else -if (mask & PNG_FREE_ROWS) -#endif -{ - if(info_ptr->row_pointers) - { - int row; - for (row = 0; row < (int)info_ptr->height; row++) - { - png_free(png_ptr, info_ptr->row_pointers[row]); - info_ptr->row_pointers[row]=NULL; - } - png_free(png_ptr, info_ptr->row_pointers); - info_ptr->row_pointers=NULL; - } - info_ptr->valid &= ~PNG_INFO_IDAT; -} -#endif - -#ifdef PNG_FREE_ME_SUPPORTED - if(num == -1) - info_ptr->free_me &= ~mask; - else - info_ptr->free_me &= ~(mask & ~PNG_FREE_MUL); -#endif -} - -/* This is an internal routine to free any memory that the info struct is - * pointing to before re-using it or freeing the struct itself. Recall - * that png_free() checks for NULL pointers for us. - */ -void /* PRIVATE */ -png_info_destroy(png_structp png_ptr, png_infop info_ptr) -{ - png_debug(1, "in png_info_destroy\n"); - - png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - if (png_ptr->num_chunk_list) - { - png_free(png_ptr, png_ptr->chunk_list); - png_ptr->chunk_list=NULL; - png_ptr->num_chunk_list=0; - } -#endif - - png_info_init_3(&info_ptr, sizeof(png_info)); -} - -/* This function returns a pointer to the io_ptr associated with the user - * functions. The application should free any memory associated with this - * pointer before png_write_destroy() or png_read_destroy() are called. - */ -png_voidp PNGAPI -png_get_io_ptr(png_structp png_ptr) -{ - return (png_ptr->io_ptr); -} - -#if !defined(PNG_NO_STDIO) -/* Initialize the default input/output functions for the PNG file. If you - * use your own read or write routines, you can call either png_set_read_fn() - * or png_set_write_fn() instead of png_init_io(). If you have defined - * PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't - * necessarily available. - */ -void PNGAPI -png_init_io(png_structp png_ptr, png_FILE_p fp) -{ - png_debug(1, "in png_init_io\n"); - png_ptr->io_ptr = (png_voidp)fp; -} -#endif - -#if defined(PNG_TIME_RFC1123_SUPPORTED) -/* Convert the supplied time into an RFC 1123 string suitable for use in - * a "Creation Time" or other text-based time string. - */ -png_charp PNGAPI -png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime) -{ - static PNG_CONST char short_months[12][4] = - {"Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - - if (png_ptr->time_buffer == NULL) - { - png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29* - sizeof(char))); - } - -#if defined(_WIN32_WCE) - { - wchar_t time_buf[29]; - wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"), - ptime->day % 32, short_months[(ptime->month - 1) % 12], - ptime->year, ptime->hour % 24, ptime->minute % 60, - ptime->second % 61); - WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29, - NULL, NULL); - } -#else -#ifdef USE_FAR_KEYWORD - { - char near_time_buf[29]; - sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000", - ptime->day % 32, short_months[(ptime->month - 1) % 12], - ptime->year, ptime->hour % 24, ptime->minute % 60, - ptime->second % 61); - png_memcpy(png_ptr->time_buffer, near_time_buf, - 29*sizeof(char)); - } -#else - sprintf(png_ptr->time_buffer, "%d %s %d %02d:%02d:%02d +0000", - ptime->day % 32, short_months[(ptime->month - 1) % 12], - ptime->year, ptime->hour % 24, ptime->minute % 60, - ptime->second % 61); -#endif -#endif /* _WIN32_WCE */ - return ((png_charp)png_ptr->time_buffer); -} -#endif /* PNG_TIME_RFC1123_SUPPORTED */ - -#if 0 -/* Signature string for a PNG file. */ -png_bytep PNGAPI -png_sig_bytes(void) -{ - return ((png_bytep)"\211\120\116\107\015\012\032\012"); -} -#endif - -png_charp PNGAPI -png_get_copyright(png_structp png_ptr) -{ - if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */ - return ((png_charp) "\n libpng version 1.2.5 - October 3, 2002\n\ - Copyright (c) 1998-2002 Glenn Randers-Pehrson\n\ - Copyright (c) 1996-1997 Andreas Dilger\n\ - Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n"); - return ((png_charp) ""); -} - -/* The following return the library version as a short string in the - * format 1.0.0 through 99.99.99zz. To get the version of *.h files used - * with your application, print out PNG_LIBPNG_VER_STRING, which is defined - * in png.h. - */ - -png_charp PNGAPI -png_get_libpng_ver(png_structp png_ptr) -{ - /* Version of *.c files used when building libpng */ - if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ - return((png_charp) "1.2.5"); - return((png_charp) "1.2.5"); -} - -png_charp PNGAPI -png_get_header_ver(png_structp png_ptr) -{ - /* Version of *.h files used when building libpng */ - if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ - return((png_charp) PNG_LIBPNG_VER_STRING); - return((png_charp) PNG_LIBPNG_VER_STRING); -} - -png_charp PNGAPI -png_get_header_version(png_structp png_ptr) -{ - /* Returns longer string containing both version and date */ - if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ - return((png_charp) PNG_HEADER_VERSION_STRING); - return((png_charp) PNG_HEADER_VERSION_STRING); -} - -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -int PNGAPI -png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name) -{ - /* check chunk_name and return "keep" value if it's on the list, else 0 */ - int i; - png_bytep p; - if((png_ptr == NULL && chunk_name == NULL) || png_ptr->num_chunk_list<=0) - return 0; - p=png_ptr->chunk_list+png_ptr->num_chunk_list*5-5; - for (i = png_ptr->num_chunk_list; i; i--, p-=5) - if (!png_memcmp(chunk_name, p, 4)) - return ((int)*(p+4)); - return 0; -} -#endif - -/* This function, added to libpng-1.0.6g, is untested. */ -int PNGAPI -png_reset_zstream(png_structp png_ptr) -{ - return (inflateReset(&png_ptr->zstream)); -} - -/* This function was added to libpng-1.0.7 */ -png_uint_32 PNGAPI -png_access_version_number(void) -{ - /* Version of *.c files used when building libpng */ - return((png_uint_32) 10205L); -} - - -#if !defined(PNG_1_0_X) -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) - /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ -/* this INTERNAL function was added to libpng 1.2.0 */ -void /* PRIVATE */ -png_init_mmx_flags (png_structp png_ptr) -{ - png_ptr->mmx_rowbytes_threshold = 0; - png_ptr->mmx_bitdepth_threshold = 0; - -# if (defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)) - - png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_COMPILED; - - if (png_mmx_support() > 0) { - png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU -# ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW - | PNG_ASM_FLAG_MMX_READ_COMBINE_ROW -# endif -# ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE - | PNG_ASM_FLAG_MMX_READ_INTERLACE -# endif -# ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW - ; -# else - | PNG_ASM_FLAG_MMX_READ_FILTER_SUB - | PNG_ASM_FLAG_MMX_READ_FILTER_UP - | PNG_ASM_FLAG_MMX_READ_FILTER_AVG - | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; - - png_ptr->mmx_rowbytes_threshold = PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT; - png_ptr->mmx_bitdepth_threshold = PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT; -# endif - } else { - png_ptr->asm_flags &= ~( PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU - | PNG_MMX_READ_FLAGS - | PNG_MMX_WRITE_FLAGS ); - } - -# else /* !((PNGVCRD || PNGGCCRD) && PNG_ASSEMBLER_CODE_SUPPORTED)) */ - - /* clear all MMX flags; no support is compiled in */ - png_ptr->asm_flags &= ~( PNG_MMX_FLAGS ); - -# endif /* ?(PNGVCRD || PNGGCCRD) */ -} - -#endif /* !(PNG_ASSEMBLER_CODE_SUPPORTED) */ - -/* this function was added to libpng 1.2.0 */ -#if !defined(PNG_USE_PNGGCCRD) && \ - !(defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)) -int PNGAPI -png_mmx_support(void) -{ - return -1; -} -#endif -#endif /* PNG_1_0_X */ diff --git a/src/libs/pdflib/libs/png/png.dsp b/src/libs/pdflib/libs/png/png.dsp deleted file mode 100644 index 9d8c910374..0000000000 --- a/src/libs/pdflib/libs/png/png.dsp +++ /dev/null @@ -1,203 +0,0 @@ -# Microsoft Developer Studio Project File - Name="png" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=png - Win32 Debug DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "png.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "png.mak" CFG="png - Win32 Debug DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "png - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "png - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "png - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE "png - Win32 Release DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "png - Win32 Debug DLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "png - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../flate" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"libpng.lib" - -!ELSEIF "$(CFG)" == "png - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../flate" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"libpng.lib" - -!ELSEIF "$(CFG)" == "png - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../flate" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "../flate" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"libpng.lib" -# ADD LIB32 /nologo /out:"ibpng.lib" - -!ELSEIF "$(CFG)" == "png - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../flate" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../flate" /I "../pdcore" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"libpng.lib" -# ADD LIB32 /nologo /out:"libpng.lib" - -!ELSEIF "$(CFG)" == "png - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../flate" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../flate" /I "../pdcore" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"libpng.lib" -# ADD LIB32 /nologo /out:"libpng.lib" - -!ENDIF - -# Begin Target - -# Name "png - Win32 Release" -# Name "png - Win32 Debug" -# Name "png - Win32 Release mtDLL" -# Name "png - Win32 Release DLL" -# Name "png - Win32 Debug DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\png.c -# End Source File -# Begin Source File - -SOURCE=.\pngerror.c -# End Source File -# Begin Source File - -SOURCE=.\pngget.c -# End Source File -# Begin Source File - -SOURCE=.\pngmem.c -# End Source File -# Begin Source File - -SOURCE=.\pngread.c -# End Source File -# Begin Source File - -SOURCE=.\pngrio.c -# End Source File -# Begin Source File - -SOURCE=.\pngrtran.c -# End Source File -# Begin Source File - -SOURCE=.\pngrutil.c -# End Source File -# Begin Source File - -SOURCE=.\pngset.c -# End Source File -# Begin Source File - -SOURCE=.\pngtrans.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/png/png.h b/src/libs/pdflib/libs/png/png.h deleted file mode 100644 index 32bb0c2c3c..0000000000 --- a/src/libs/pdflib/libs/png/png.h +++ /dev/null @@ -1,3289 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: png.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* png.h - header file for PNG reference library - * - * libpng version 1.2.5 - October 3, 2002 - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * Authors and maintainers: - * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat - * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.2.5 - October 3, 2002: Glenn - * See also "Contributing Authors", below. - * - * Note about libpng version numbers: - * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: - * - * source png.h png.h shared-lib - * version string int version - * ------- ------ ----- ---------- - * 0.89c "1.0 beta 3" 0.89 89 1.0.89 - * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] - * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] - * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] - * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] - * 0.97c 0.97 97 2.0.97 - * 0.98 0.98 98 2.0.98 - * 0.99 0.99 98 2.0.99 - * 0.99a-m 0.99 99 2.0.99 - * 1.00 1.00 100 2.1.0 [100 should be 10000] - * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] - * 1.0.1 png.h string is 10001 2.1.0 - * 1.0.1a-e identical to the 10002 from here on, the shared library - * 1.0.2 source version) 10002 is 2.V where V is the source code - * 1.0.2a-b 10003 version, except as noted. - * 1.0.3 10003 - * 1.0.3a-d 10004 - * 1.0.4 10004 - * 1.0.4a-f 10005 - * 1.0.5 (+ 2 patches) 10005 - * 1.0.5a-d 10006 - * 1.0.5e-r 10100 (not source compatible) - * 1.0.5s-v 10006 (not binary compatible) - * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) - * 1.0.6d-f 10007 (still binary incompatible) - * 1.0.6g 10007 - * 1.0.6h 10007 10.6h (testing xy.z so-numbering) - * 1.0.6i 10007 10.6i - * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) - * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) - * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) - * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) - * 1.0.7 1 10007 (still compatible) - * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 - * 1.0.8rc1 1 10008 2.1.0.8rc1 - * 1.0.8 1 10008 2.1.0.8 - * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 - * 1.0.9rc1 1 10009 2.1.0.9rc1 - * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 - * 1.0.9rc2 1 10009 2.1.0.9rc2 - * 1.0.9 1 10009 2.1.0.9 - * 1.0.10beta1 1 10010 2.1.0.10beta1 - * 1.0.10rc1 1 10010 2.1.0.10rc1 - * 1.0.10 1 10010 2.1.0.10 - * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 - * 1.0.11rc1 1 10011 2.1.0.11rc1 - * 1.0.11 1 10011 2.1.0.11 - * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 - * 1.0.12rc1 2 10012 2.1.0.12rc1 - * 1.0.12 2 10012 2.1.0.12 - * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) - * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 - * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 - * 1.2.0rc1 3 10200 3.1.2.0rc1 - * 1.2.0 3 10200 3.1.2.0 - * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 - * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 - * 1.2.1 3 10201 3.1.2.1 - * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 - * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 - * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 - * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 - * 1.0.13 10 10013 10.so.0.1.0.13 - * 1.2.2 12 10202 12.so.0.1.2.2 - * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 - * 1.2.3 12 10203 12.so.0.1.2.3 - * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 - * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 - * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 - * 1.0.14 10 10014 10.so.0.1.0.14 - * 1.2.4 13 10204 12.so.0.1.2.4 - * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 - * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 - * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 - * 1.0.15 10 10015 10.so.0.1.0.15 - * 1.2.5 13 10205 12.so.0.1.2.5 - * - * Henceforth the source version will match the shared-library major - * and minor numbers; the shared-library major version number will be - * used for changes in backward compatibility, as it is intended. The - * PNG_LIBPNG_VER macro, which is not used within libpng but is available - * for applications, is an unsigned integer of the form xyyzz corresponding - * to the source version x.y.z (leading zeros in y and z). Beta versions - * were given the previous public release number plus a letter, until - * version 1.0.6j; from then on they were given the upcoming public - * release number plus "betaNN" or "rcN". - * - * Binary incompatibility exists only when applications make direct access - * to the info_ptr or png_ptr members through png.h, and the compiled - * application is loaded with a different version of the library. - * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). - * - * See libpng.txt or libpng.3 for more information. The PNG specification - * is available as RFC 2083 - * and as a W3C Recommendation - */ - -/* - * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: - * - * If you modify libpng you may insert additional notices immediately following - * this sentence. - * - * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are - * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are - * distributed according to the same disclaimer and license as libpng-1.0.6 - * with the following individuals added to the list of Contributing Authors - * - * Simon-Pierre Cadieux - * Eric S. Raymond - * Gilles Vollant - * - * and with the following additions to the disclaimer: - * - * There is no warranty against interference with your enjoyment of the - * library or against infringement. There is no warranty that our - * efforts or the library will fulfill any of your particular purposes - * or needs. This library is provided with all faults, and the entire - * risk of satisfactory quality, performance, accuracy, and effort is with - * the user. - * - * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are - * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson - * Distributed according to the same disclaimer and license as libpng-0.96, - * with the following individuals added to the list of Contributing Authors: - * - * Tom Lane - * Glenn Randers-Pehrson - * Willem van Schaik - * - * libpng versions 0.89, June 1996, through 0.96, May 1997, are - * Copyright (c) 1996, 1997 Andreas Dilger - * Distributed according to the same disclaimer and license as libpng-0.88, - * with the following individuals added to the list of Contributing Authors: - * - * John Bowler - * Kevin Bracey - * Sam Bushell - * Magnus Holmgren - * Greg Roelofs - * Tom Tanner - * - * libpng versions 0.5, May 1995, through 0.88, January 1996, are - * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. - * - * For the purposes of this copyright and license, "Contributing Authors" - * is defined as the following set of individuals: - * - * Andreas Dilger - * Dave Martindale - * Guy Eric Schalnat - * Paul Schmidt - * Tim Wegner - * - * The PNG Reference Library is supplied "AS IS". The Contributing Authors - * and Group 42, Inc. disclaim all warranties, expressed or implied, - * including, without limitation, the warranties of merchantability and of - * fitness for any purpose. The Contributing Authors and Group 42, Inc. - * assume no liability for direct, indirect, incidental, special, exemplary, - * or consequential damages, which may result from the use of the PNG - * Reference Library, even if advised of the possibility of such damage. - * - * Permission is hereby granted to use, copy, modify, and distribute this - * source code, or portions hereof, for any purpose, without fee, subject - * to the following restrictions: - * - * 1. The origin of this source code must not be misrepresented. - * - * 2. Altered versions must be plainly marked as such and - * must not be misrepresented as being the original source. - * - * 3. This Copyright notice may not be removed or altered from - * any source or altered source distribution. - * - * The Contributing Authors and Group 42, Inc. specifically permit, without - * fee, and encourage the use of this source code as a component to - * supporting the PNG file format in commercial products. If you use this - * source code in a product, acknowledgment is not required but would be - * appreciated. - */ - -/* - * A "png_get_copyright" function is available, for convenient use in "about" - * boxes and the like: - * - * printf("%s",png_get_copyright(NULL)); - * - * Also, the PNG logo (in PNG format, of course) is supplied in the - * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). - */ - -/* - * Libpng is OSI Certified Open Source Software. OSI Certified is a - * certification mark of the Open Source Initiative. - */ - -/* - * The contributing authors would like to thank all those who helped - * with testing, bug fixes, and patience. This wouldn't have been - * possible without all of you. - * - * Thanks to Frank J. T. Wojcik for helping with the documentation. - */ - -/* - * Y2K compliance in libpng: - * ========================= - * - * October 3, 2002 - * - * Since the PNG Development group is an ad-hoc body, we can't make - * an official declaration. - * - * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.2.5 are Y2K compliant. It is my belief that earlier - * versions were also Y2K compliant. - * - * Libpng only has three year fields. One is a 2-byte unsigned integer - * that will hold years up to 65535. The other two hold the date in text - * format, and will hold years up to 9999. - * - * The integer is - * "png_uint_16 year" in png_time_struct. - * - * The strings are - * "png_charp time_buffer" in png_struct and - * "near_time_buffer", which is a local character string in png.c. - * - * There are seven time-related functions: - * png.c: png_convert_to_rfc_1123() in png.c - * (formerly png_convert_to_rfc_1152() in error) - * png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c - * png_convert_from_time_t() in pngwrite.c - * png_get_tIME() in pngget.c - * png_handle_tIME() in pngrutil.c, called in pngread.c - * png_set_tIME() in pngset.c - * png_write_tIME() in pngwutil.c, called in pngwrite.c - * - * All handle dates properly in a Y2K environment. The - * png_convert_from_time_t() function calls gmtime() to convert from system - * clock time, which returns (year - 1900), which we properly convert to - * the full 4-digit year. There is a possibility that applications using - * libpng are not passing 4-digit years into the png_convert_to_rfc_1123() - * function, or that they are incorrectly passing only a 2-digit year - * instead of "year - 1900" into the png_convert_from_struct_tm() function, - * but this is not under our control. The libpng documentation has always - * stated that it works with 4-digit years, and the APIs have been - * documented as such. - * - * The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned - * integer to hold the year, and can hold years as large as 65535. - * - * zlib, upon which libpng depends, is also Y2K compliant. It contains - * no date-related code. - * - * Glenn Randers-Pehrson - * libpng maintainer - * PNG Development Group - */ - -#ifndef PNG_H -#define PNG_H - -/* This is not the place to learn how to use libpng. The file libpng.txt - * describes how to use libpng, and the file example.c summarizes it - * with some code on which to build. This file is useful for looking - * at the actual function definitions and structure components. - */ - -/* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.2.5" - -#define PNG_LIBPNG_VER_SONUM 0 -#define PNG_LIBPNG_VER_DLLNUM %DLLNUM% - -/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ -#define PNG_LIBPNG_VER_MAJOR 1 -#define PNG_LIBPNG_VER_MINOR 2 -#define PNG_LIBPNG_VER_RELEASE 5 -/* This should match the numeric part of the final component of - * PNG_LIBPNG_VER_STRING, omitting any leading zero: */ - -#define PNG_LIBPNG_VER_BUILD 0 - -#define PNG_LIBPNG_BUILD_ALPHA 1 -#define PNG_LIBPNG_BUILD_BETA 2 -#define PNG_LIBPNG_BUILD_RC 3 -#define PNG_LIBPNG_BUILD_STABLE 4 -#define PNG_LIBPNG_BUILD_TYPEMASK 7 -#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with STABLE only */ -#define PNG_LIBPNG_BUILD_TYPE 4 - -/* Careful here. At one time, Guy wanted to use 082, but that would be octal. - * We must not include leading zeros. - * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only - * version 1.0.0 was mis-numbered 100 instead of 10000). From - * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ -#define PNG_LIBPNG_VER 10205 /* 1.2.5 */ - -#ifndef PNG_VERSION_INFO_ONLY - -/* include the compression library's header */ -#include "zlib.h" - -/* include all user configurable info, including optional assembler routines */ -#include "pngconf.h" - -/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* This file is arranged in several sections. The first section contains - * structure and type definitions. The second section contains the external - * library functions, while the third has the internal library functions, - * which applications aren't expected to use directly. - */ - -#ifndef PNG_NO_TYPECAST_NULL -#define int_p_NULL (int *)NULL -#define png_bytep_NULL (png_bytep)NULL -#define png_bytepp_NULL (png_bytepp)NULL -#define png_doublep_NULL (png_doublep)NULL -#define png_error_ptr_NULL (png_error_ptr)NULL -#define png_flush_ptr_NULL (png_flush_ptr)NULL -#define png_free_ptr_NULL (png_free_ptr)NULL -#define png_infopp_NULL (png_infopp)NULL -#define png_malloc_ptr_NULL (png_malloc_ptr)NULL -#define png_read_status_ptr_NULL (png_read_status_ptr)NULL -#define png_rw_ptr_NULL (png_rw_ptr)NULL -#define png_structp_NULL (png_structp)NULL -#define png_uint_16p_NULL (png_uint_16p)NULL -#define png_voidp_NULL (png_voidp)NULL -#define png_write_status_ptr_NULL (png_write_status_ptr)NULL -#else -#define int_p_NULL NULL -#define png_bytep_NULL NULL -#define png_bytepp_NULL NULL -#define png_doublep_NULL NULL -#define png_error_ptr_NULL NULL -#define png_flush_ptr_NULL NULL -#define png_free_ptr_NULL NULL -#define png_infopp_NULL NULL -#define png_malloc_ptr_NULL NULL -#define png_read_status_ptr_NULL NULL -#define png_rw_ptr_NULL NULL -#define png_structp_NULL NULL -#define png_uint_16p_NULL NULL -#define png_voidp_NULL NULL -#define png_write_status_ptr_NULL NULL -#endif - -/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ -#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) -/* Version information for C files, stored in png.c. This had better match - * the version above. - */ -#ifdef PNG_USE_GLOBAL_ARRAYS -PNG_EXPORT_VAR (const char) png_libpng_ver[18]; - /* need room for 99.99.99beta99z */ -#else -#define png_libpng_ver png_get_header_ver(NULL) -#endif - -#ifdef PNG_USE_GLOBAL_ARRAYS -/* This was removed in version 1.0.5c */ -/* Structures to facilitate easy interlacing. See png.c for more details */ -PNG_EXPORT_VAR (const int FARDATA) png_pass_start[7]; -PNG_EXPORT_VAR (const int FARDATA) png_pass_inc[7]; -PNG_EXPORT_VAR (const int FARDATA) png_pass_ystart[7]; -PNG_EXPORT_VAR (const int FARDATA) png_pass_yinc[7]; -PNG_EXPORT_VAR (const int FARDATA) png_pass_mask[7]; -PNG_EXPORT_VAR (const int FARDATA) png_pass_dsp_mask[7]; -#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW -PNG_EXPORT_VAR (const int FARDATA) png_pass_width[7]; -#endif -/* This isn't currently used. If you need it, see png.c for more details. -PNG_EXPORT_VAR (const int FARDATA) png_pass_height[7]; -*/ -#endif - -#endif /* PNG_NO_EXTERN */ - -/* Three color definitions. The order of the red, green, and blue, (and the - * exact size) is not important, although the size of the fields need to - * be png_byte or png_uint_16 (as defined below). - */ -typedef struct png_color_struct -{ - png_byte red; - png_byte green; - png_byte blue; -} png_color; -typedef png_color FAR * png_colorp; -typedef png_color FAR * FAR * png_colorpp; - -typedef struct png_color_16_struct -{ - png_byte index; /* used for palette files */ - png_uint_16 red; /* for use in red green blue files */ - png_uint_16 green; - png_uint_16 blue; - png_uint_16 gray; /* for use in grayscale files */ -} png_color_16; -typedef png_color_16 FAR * png_color_16p; -typedef png_color_16 FAR * FAR * png_color_16pp; - -typedef struct png_color_8_struct -{ - png_byte red; /* for use in red green blue files */ - png_byte green; - png_byte blue; - png_byte gray; /* for use in grayscale files */ - png_byte alpha; /* for alpha channel files */ -} png_color_8; -typedef png_color_8 FAR * png_color_8p; -typedef png_color_8 FAR * FAR * png_color_8pp; - -/* - * The following two structures are used for the in-core representation - * of sPLT chunks. - */ -typedef struct png_sPLT_entry_struct -{ - png_uint_16 red; - png_uint_16 green; - png_uint_16 blue; - png_uint_16 alpha; - png_uint_16 frequency; -} png_sPLT_entry; -typedef png_sPLT_entry FAR * png_sPLT_entryp; -typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp; - -/* When the depth of the sPLT palette is 8 bits, the color and alpha samples - * occupy the LSB of their respective members, and the MSB of each member - * is zero-filled. The frequency member always occupies the full 16 bits. - */ - -typedef struct png_sPLT_struct -{ - png_charp name; /* palette name */ - png_byte depth; /* depth of palette samples */ - png_sPLT_entryp entries; /* palette entries */ - png_int_32 nentries; /* number of palette entries */ -} png_sPLT_t; -typedef png_sPLT_t FAR * png_sPLT_tp; -typedef png_sPLT_t FAR * FAR * png_sPLT_tpp; - -#ifdef PNG_TEXT_SUPPORTED -/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, - * and whether that contents is compressed or not. The "key" field - * points to a regular zero-terminated C string. The "text", "lang", and - * "lang_key" fields can be regular C strings, empty strings, or NULL pointers. - * However, the * structure returned by png_get_text() will always contain - * regular zero-terminated C strings (possibly empty), never NULL pointers, - * so they can be safely used in printf() and other string-handling functions. - */ -typedef struct png_text_struct -{ - int compression; /* compression value: - -1: tEXt, none - 0: zTXt, deflate - 1: iTXt, none - 2: iTXt, deflate */ - png_charp key; /* keyword, 1-79 character description of "text" */ - png_charp text; /* comment, may be an empty string (ie "") - or a NULL pointer */ - png_size_t text_length; /* length of the text string */ -#ifdef PNG_iTXt_SUPPORTED - png_size_t itxt_length; /* length of the itxt string */ - png_charp lang; /* language code, 0-79 characters - or a NULL pointer */ - png_charp lang_key; /* keyword translated UTF-8 string, 0 or more - chars or a NULL pointer */ -#endif -} png_text; -typedef png_text FAR * png_textp; -typedef png_text FAR * FAR * png_textpp; -#endif - -/* Supported compression types for text in PNG files (tEXt, and zTXt). - * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ -#define PNG_TEXT_COMPRESSION_NONE_WR -3 -#define PNG_TEXT_COMPRESSION_zTXt_WR -2 -#define PNG_TEXT_COMPRESSION_NONE -1 -#define PNG_TEXT_COMPRESSION_zTXt 0 -#define PNG_ITXT_COMPRESSION_NONE 1 -#define PNG_ITXT_COMPRESSION_zTXt 2 -#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ - -/* png_time is a way to hold the time in an machine independent way. - * Two conversions are provided, both from time_t and struct tm. There - * is no portable way to convert to either of these structures, as far - * as I know. If you know of a portable way, send it to me. As a side - * note - PNG has always been Year 2000 compliant! - */ -typedef struct png_time_struct -{ - png_uint_16 year; /* full year, as in, 1995 */ - png_byte month; /* month of year, 1 - 12 */ - png_byte day; /* day of month, 1 - 31 */ - png_byte hour; /* hour of day, 0 - 23 */ - png_byte minute; /* minute of hour, 0 - 59 */ - png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ -} png_time; -typedef png_time FAR * png_timep; -typedef png_time FAR * FAR * png_timepp; - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -/* png_unknown_chunk is a structure to hold queued chunks for which there is - * no specific support. The idea is that we can use this to queue - * up private chunks for output even though the library doesn't actually - * know about their semantics. - */ -typedef struct png_unknown_chunk_t -{ - png_byte name[5]; - png_byte *data; - png_size_t size; - - /* libpng-using applications should NOT directly modify this byte. */ - png_byte location; /* mode of operation at read time */ -} -png_unknown_chunk; -typedef png_unknown_chunk FAR * png_unknown_chunkp; -typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp; -#endif - -/* png_info is a structure that holds the information in a PNG file so - * that the application can find out the characteristics of the image. - * If you are reading the file, this structure will tell you what is - * in the PNG file. If you are writing the file, fill in the information - * you want to put into the PNG file, then call png_write_info(). - * The names chosen should be very close to the PNG specification, so - * consult that document for information about the meaning of each field. - * - * With libpng < 0.95, it was only possible to directly set and read the - * the values in the png_info_struct, which meant that the contents and - * order of the values had to remain fixed. With libpng 0.95 and later, - * however, there are now functions that abstract the contents of - * png_info_struct from the application, so this makes it easier to use - * libpng with dynamic libraries, and even makes it possible to use - * libraries that don't have all of the libpng ancillary chunk-handing - * functionality. - * - * In any case, the order of the parameters in png_info_struct should NOT - * be changed for as long as possible to keep compatibility with applications - * that use the old direct-access method with png_info_struct. - * - * The following members may have allocated storage attached that should be - * cleaned up before the structure is discarded: palette, trans, text, - * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile, - * splt_palettes, scal_unit, row_pointers, and unknowns. By default, these - * are automatically freed when the info structure is deallocated, if they were - * allocated internally by libpng. This behavior can be changed by means - * of the png_data_freer() function. - * - * More allocation details: all the chunk-reading functions that - * change these members go through the corresponding png_set_* - * functions. A function to clear these members is available: see - * png_free_data(). The png_set_* functions do not depend on being - * able to point info structure members to any of the storage they are - * passed (they make their own copies), EXCEPT that the png_set_text - * functions use the same storage passed to them in the text_ptr or - * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns - * functions do not make their own copies. - */ -typedef struct png_info_struct -{ - /* the following are necessary for every PNG file */ - png_uint_32 width; /* width of image in pixels (from IHDR) */ - png_uint_32 height; /* height of image in pixels (from IHDR) */ - png_uint_32 valid; /* valid chunk data (see PNG_INFO_ below) */ - png_uint_32 rowbytes; /* bytes needed to hold an untransformed row */ - png_colorp palette; /* array of color values (valid & PNG_INFO_PLTE) */ - png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */ - png_uint_16 num_trans; /* number of transparent palette color (tRNS) */ - png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */ - png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */ - /* The following three should have been named *_method not *_type */ - png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */ - png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */ - png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ - - /* The following is informational only on read, and not used on writes. */ - png_byte channels; /* number of data channels per pixel (1, 2, 3, 4) */ - png_byte pixel_depth; /* number of bits per pixel */ - png_byte spare_byte; /* to align the data, and for future use */ - png_byte signature[8]; /* magic bytes read by libpng from start of file */ - - /* The rest of the data is optional. If you are reading, check the - * valid field to see if the information in these are valid. If you - * are writing, set the valid field to those chunks you want written, - * and initialize the appropriate fields below. - */ - -#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) - /* The gAMA chunk describes the gamma characteristics of the system - * on which the image was created, normally in the range [1.0, 2.5]. - * Data is valid if (valid & PNG_INFO_gAMA) is non-zero. - */ - float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */ -#endif - -#if defined(PNG_sRGB_SUPPORTED) - /* GR-P, 0.96a */ - /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */ - png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */ -#endif - -#if defined(PNG_TEXT_SUPPORTED) - /* The tEXt, and zTXt chunks contain human-readable textual data in - * uncompressed, compressed, and optionally compressed forms, respectively. - * The data in "text" is an array of pointers to uncompressed, - * null-terminated C strings. Each chunk has a keyword that describes the - * textual data contained in that chunk. Keywords are not required to be - * unique, and the text string may be empty. Any number of text chunks may - * be in an image. - */ - int num_text; /* number of comments read/to write */ - int max_text; /* current size of text array */ - png_textp text; /* array of comments read/to write */ -#endif /* PNG_TEXT_SUPPORTED */ - -#if defined(PNG_tIME_SUPPORTED) - /* The tIME chunk holds the last time the displayed image data was - * modified. See the png_time struct for the contents of this struct. - */ - png_time mod_time; -#endif - -#if defined(PNG_sBIT_SUPPORTED) - /* The sBIT chunk specifies the number of significant high-order bits - * in the pixel data. Values are in the range [1, bit_depth], and are - * only specified for the channels in the pixel data. The contents of - * the low-order bits is not specified. Data is valid if - * (valid & PNG_INFO_sBIT) is non-zero. - */ - png_color_8 sig_bit; /* significant bits in color channels */ -#endif - -#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \ -defined(PNG_READ_BACKGROUND_SUPPORTED) - /* The tRNS chunk supplies transparency data for paletted images and - * other image types that don't need a full alpha channel. There are - * "num_trans" transparency values for a paletted image, stored in the - * same order as the palette colors, starting from index 0. Values - * for the data are in the range [0, 255], ranging from fully transparent - * to fully opaque, respectively. For non-paletted images, there is a - * single color specified that should be treated as fully transparent. - * Data is valid if (valid & PNG_INFO_tRNS) is non-zero. - */ - png_bytep trans; /* transparent values for paletted image */ - png_color_16 trans_values; /* transparent color for non-palette image */ -#endif - -#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - /* The bKGD chunk gives the suggested image background color if the - * display program does not have its own background color and the image - * is needs to composited onto a background before display. The colors - * in "background" are normally in the same color space/depth as the - * pixel data. Data is valid if (valid & PNG_INFO_bKGD) is non-zero. - */ - png_color_16 background; -#endif - -#if defined(PNG_oFFs_SUPPORTED) - /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards - * and downwards from the top-left corner of the display, page, or other - * application-specific co-ordinate space. See the PNG_OFFSET_ defines - * below for the unit types. Valid if (valid & PNG_INFO_oFFs) non-zero. - */ - png_int_32 x_offset; /* x offset on page */ - png_int_32 y_offset; /* y offset on page */ - png_byte offset_unit_type; /* offset units type */ -#endif - -#if defined(PNG_pHYs_SUPPORTED) - /* The pHYs chunk gives the physical pixel density of the image for - * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_ - * defines below). Data is valid if (valid & PNG_INFO_pHYs) is non-zero. - */ - png_uint_32 x_pixels_per_unit; /* horizontal pixel density */ - png_uint_32 y_pixels_per_unit; /* vertical pixel density */ - png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */ -#endif - -#if defined(PNG_hIST_SUPPORTED) - /* The hIST chunk contains the relative frequency or importance of the - * various palette entries, so that a viewer can intelligently select a - * reduced-color palette, if required. Data is an array of "num_palette" - * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST) - * is non-zero. - */ - png_uint_16p hist; -#endif - -#ifdef PNG_cHRM_SUPPORTED - /* The cHRM chunk describes the CIE color characteristics of the monitor - * on which the PNG was created. This data allows the viewer to do gamut - * mapping of the input image to ensure that the viewer sees the same - * colors in the image as the creator. Values are in the range - * [0.0, 0.8]. Data valid if (valid & PNG_INFO_cHRM) non-zero. - */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - float x_white; - float y_white; - float x_red; - float y_red; - float x_green; - float y_green; - float x_blue; - float y_blue; -#endif -#endif - -#if defined(PNG_pCAL_SUPPORTED) - /* The pCAL chunk describes a transformation between the stored pixel - * values and original physical data values used to create the image. - * The integer range [0, 2^bit_depth - 1] maps to the floating-point - * range given by [pcal_X0, pcal_X1], and are further transformed by a - * (possibly non-linear) transformation function given by "pcal_type" - * and "pcal_params" into "pcal_units". Please see the PNG_EQUATION_ - * defines below, and the PNG-Group's PNG extensions document for a - * complete description of the transformations and how they should be - * implemented, and for a description of the ASCII parameter strings. - * Data values are valid if (valid & PNG_INFO_pCAL) non-zero. - */ - png_charp pcal_purpose; /* pCAL chunk description string */ - png_int_32 pcal_X0; /* minimum value */ - png_int_32 pcal_X1; /* maximum value */ - png_charp pcal_units; /* Latin-1 string giving physical units */ - png_charpp pcal_params; /* ASCII strings containing parameter values */ - png_byte pcal_type; /* equation type (see PNG_EQUATION_ below) */ - png_byte pcal_nparams; /* number of parameters given in pcal_params */ -#endif - -/* New members added in libpng-1.0.6 */ -#ifdef PNG_FREE_ME_SUPPORTED - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - /* storage for unknown chunks that the library doesn't recognize. */ - png_unknown_chunkp unknown_chunks; - png_size_t unknown_chunks_num; -#endif - -#if defined(PNG_iCCP_SUPPORTED) - /* iCCP chunk data. */ - png_charp iccp_name; /* profile name */ - png_charp iccp_profile; /* International Color Consortium profile data */ - /* Note to maintainer: should be png_bytep */ - png_uint_32 iccp_proflen; /* ICC profile data length */ - png_byte iccp_compression; /* Always zero */ -#endif - -#if defined(PNG_sPLT_SUPPORTED) - /* data on sPLT chunks (there may be more than one). */ - png_sPLT_tp splt_palettes; - png_uint_32 splt_palettes_num; -#endif - -#if defined(PNG_sCAL_SUPPORTED) - /* The sCAL chunk describes the actual physical dimensions of the - * subject matter of the graphic. The chunk contains a unit specification - * a byte value, and two ASCII strings representing floating-point - * values. The values are width and height corresponsing to one pixel - * in the image. This external representation is converted to double - * here. Data values are valid if (valid & PNG_INFO_sCAL) is non-zero. - */ - png_byte scal_unit; /* unit of physical scale */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - double scal_pixel_width; /* width of one pixel */ - double scal_pixel_height; /* height of one pixel */ -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_charp scal_s_width; /* string containing height */ - png_charp scal_s_height; /* string containing width */ -#endif -#endif - -#if defined(PNG_INFO_IMAGE_SUPPORTED) - /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */ - /* Data valid if (valid & PNG_INFO_IDAT) non-zero */ - png_bytepp row_pointers; /* the image bits */ -#endif - -#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED) - png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */ -#endif - -#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED) - png_fixed_point int_x_white; - png_fixed_point int_y_white; - png_fixed_point int_x_red; - png_fixed_point int_y_red; - png_fixed_point int_x_green; - png_fixed_point int_y_green; - png_fixed_point int_x_blue; - png_fixed_point int_y_blue; -#endif - -} png_info; - -typedef png_info FAR * png_infop; -typedef png_info FAR * FAR * png_infopp; - -/* Maximum positive integer used in PNG is (2^31)-1 */ -#define PNG_MAX_UINT ((png_uint_32)0x7fffffffL) - -/* These describe the color_type field in png_info. */ -/* color type masks */ -#define PNG_COLOR_MASK_PALETTE 1 -#define PNG_COLOR_MASK_COLOR 2 -#define PNG_COLOR_MASK_ALPHA 4 - -/* color types. Note that not all combinations are legal */ -#define PNG_COLOR_TYPE_GRAY 0 -#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) -#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) -#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) -#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) -/* aliases */ -#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA -#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA - -/* This is for compression type. PNG 1.0-1.2 only define the single type. */ -#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ -#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE - -/* This is for filter type. PNG 1.0-1.2 only define the single type. */ -#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ -#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ -#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE - -/* These are for the interlacing type. These values should NOT be changed. */ -#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ -#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ -#define PNG_INTERLACE_LAST 2 /* Not a valid value */ - -/* These are for the oFFs chunk. These values should NOT be changed. */ -#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ -#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ -#define PNG_OFFSET_LAST 2 /* Not a valid value */ - -/* These are for the pCAL chunk. These values should NOT be changed. */ -#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ -#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ -#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ -#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ -#define PNG_EQUATION_LAST 4 /* Not a valid value */ - -/* These are for the sCAL chunk. These values should NOT be changed. */ -#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ -#define PNG_SCALE_METER 1 /* meters per pixel */ -#define PNG_SCALE_RADIAN 2 /* radians per pixel */ -#define PNG_SCALE_LAST 3 /* Not a valid value */ - -/* These are for the pHYs chunk. These values should NOT be changed. */ -#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ -#define PNG_RESOLUTION_METER 1 /* pixels/meter */ -#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ - -/* These are for the sRGB chunk. These values should NOT be changed. */ -#define PNG_sRGB_INTENT_PERCEPTUAL 0 -#define PNG_sRGB_INTENT_RELATIVE 1 -#define PNG_sRGB_INTENT_SATURATION 2 -#define PNG_sRGB_INTENT_ABSOLUTE 3 -#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ - -/* This is for text chunks */ -#define PNG_KEYWORD_MAX_LENGTH 79 - -/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ -#define PNG_MAX_PALETTE_LENGTH 256 - -/* These determine if an ancillary chunk's data has been successfully read - * from the PNG header, or if the application has filled in the corresponding - * data in the info_struct to be written into the output file. The values - * of the PNG_INFO_ defines should NOT be changed. - */ -#define PNG_INFO_gAMA 0x0001 -#define PNG_INFO_sBIT 0x0002 -#define PNG_INFO_cHRM 0x0004 -#define PNG_INFO_PLTE 0x0008 -#define PNG_INFO_tRNS 0x0010 -#define PNG_INFO_bKGD 0x0020 -#define PNG_INFO_hIST 0x0040 -#define PNG_INFO_pHYs 0x0080 -#define PNG_INFO_oFFs 0x0100 -#define PNG_INFO_tIME 0x0200 -#define PNG_INFO_pCAL 0x0400 -#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ -#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ -#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ -#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ -#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ - -/* This is used for the transformation routines, as some of them - * change these values for the row. It also should enable using - * the routines for other purposes. - */ -typedef struct png_row_info_struct -{ - png_uint_32 width; /* width of row */ - png_uint_32 rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ - png_byte pixel_depth; /* bits per pixel (depth * channels) */ -} png_row_info; - -typedef png_row_info FAR * png_row_infop; -typedef png_row_info FAR * FAR * png_row_infopp; - -/* These are the function types for the I/O functions and for the functions - * that allow the user to override the default I/O functions with his or her - * own. The png_error_ptr type should match that of user-supplied warning - * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. - */ -typedef struct png_struct_def png_struct; -typedef png_struct FAR * png_structp; - -typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); -typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); -typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); -typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, - int)); -typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, - int)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp,png_infop)); -typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); -typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, - png_uint_32, int)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, - png_row_infop, png_bytep)); -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) -typedef int (PNGAPI *png_user_chunk_ptr) - PNGARG((png_structp, png_unknown_chunkp)); -#endif -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); -#endif - -/* Transform masks for the high-level interface */ -#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ -#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ -#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ -#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ -#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ -#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ -#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ -#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ -#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ -#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ -#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ -#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ -#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ - -/* Flags for MNG supported features */ -#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 -#define PNG_FLAG_MNG_FILTER_64 0x04 -#define PNG_ALL_MNG_FEATURES 0x05 - -typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); -typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); - -/* The structure that holds the information to read and write PNG files. - * The only people who need to care about what is inside of this are the - * people who will be modifying the library for their own special needs. - * It should NOT be accessed directly by an application, except to store - * the jmp_buf. - */ - -struct png_struct_def -{ -#ifdef PNG_SETJMP_SUPPORTED - jmp_buf jmpbuf; /* used in png_error */ -#endif - png_error_ptr error_fn; /* function for printing errors and aborting */ - png_error_ptr warning_fn; /* function for printing warnings */ - png_voidp error_ptr; /* user supplied struct for error functions */ - png_rw_ptr write_data_fn; /* function for writing output data */ - png_rw_ptr read_data_fn; /* function for reading input data */ - png_voidp io_ptr; /* ptr to application struct for I/O functions */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) - png_user_transform_ptr read_user_transform_fn; /* user read transform */ -#endif - -#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) - png_user_transform_ptr write_user_transform_fn; /* user write transform */ -#endif - -/* These were added in libpng-1.0.2 */ -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) - png_voidp user_transform_ptr; /* user supplied struct for user transform */ - png_byte user_transform_depth; /* bit depth of user transformed pixels */ - png_byte user_transform_channels; /* channels in user transformed pixels */ -#endif -#endif - - png_uint_32 mode; /* tells us where we are in the PNG file */ - png_uint_32 flags; /* flags indicating various things to libpng */ - png_uint_32 transformations; /* which transformations to perform */ - - z_stream zstream; /* pointer to decompression structure (below) */ - png_bytep zbuf; /* buffer for zlib */ - png_size_t zbuf_size; /* size of zbuf */ - int zlib_level; /* holds zlib compression level */ - int zlib_method; /* holds zlib compression method */ - int zlib_window_bits; /* holds zlib compression window bits */ - int zlib_mem_level; /* holds zlib compression memory level */ - int zlib_strategy; /* holds zlib compression strategy */ - - png_uint_32 width; /* width of image in pixels */ - png_uint_32 height; /* height of image in pixels */ - png_uint_32 num_rows; /* number of rows in current pass */ - png_uint_32 usr_width; /* width of row at start of write */ - png_uint_32 rowbytes; /* size of row in bytes */ - png_uint_32 irowbytes; /* size of current interlaced row in bytes */ - png_uint_32 iwidth; /* width of current interlaced row in pixels */ - png_uint_32 row_number; /* current row in interlace pass */ - png_bytep prev_row; /* buffer to save previous (unfiltered) row */ - png_bytep row_buf; /* buffer to save current (unfiltered) row */ - png_bytep sub_row; /* buffer to save "sub" row when filtering */ - png_bytep up_row; /* buffer to save "up" row when filtering */ - png_bytep avg_row; /* buffer to save "avg" row when filtering */ - png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ - png_row_info row_info; /* used for transformation routines */ - - png_uint_32 idat_size; /* current IDAT size for read */ - png_uint_32 crc; /* current chunk CRC value */ - png_colorp palette; /* palette from the input file */ - png_uint_16 num_palette; /* number of color entries in palette */ - png_uint_16 num_trans; /* number of transparency values */ - png_byte chunk_name[5]; /* null-terminated name of current chunk */ - png_byte compression; /* file compression type (always 0) */ - png_byte filter; /* file filter type (always 0) */ - png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ - png_byte pass; /* current interlace pass (0 - 6) */ - png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ - png_byte color_type; /* color type of file */ - png_byte bit_depth; /* bit depth of file */ - png_byte usr_bit_depth; /* bit depth of users row */ - png_byte pixel_depth; /* number of bits per pixel */ - png_byte channels; /* number of channels in file */ - png_byte usr_channels; /* channels at start of write */ - png_byte sig_bytes; /* magic bytes read/written from start of file */ - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -#ifdef PNG_LEGACY_SUPPORTED - png_byte filler; /* filler byte for pixel expansion */ -#else - png_uint_16 filler; /* filler bytes for pixel expansion */ -#endif -#endif - -#if defined(PNG_bKGD_SUPPORTED) - png_byte background_gamma_type; -# ifdef PNG_FLOATING_POINT_SUPPORTED - float background_gamma; -# endif - png_color_16 background; /* background color in screen gamma space */ -#if defined(PNG_READ_GAMMA_SUPPORTED) - png_color_16 background_1; /* background normalized to gamma 1.0 */ -#endif -#endif /* PNG_bKGD_SUPPORTED */ - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) - png_flush_ptr output_flush_fn;/* Function for flushing output */ - png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ - png_uint_32 flush_rows; /* number of rows written since last flush */ -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - float gamma; /* file gamma value */ - float screen_gamma; /* screen gamma value (display_exponent) */ -#endif -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_bytep gamma_table; /* gamma table for 8-bit depth files */ - png_bytep gamma_from_1; /* converts from 1.0 to screen */ - png_bytep gamma_to_1; /* converts from file to 1.0 */ - png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ - png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ - png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) - png_color_8 sig_bit; /* significant bits in each available channel */ -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) - png_color_8 shift; /* shift for significant bit tranformation */ -#endif - -#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ - || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_bytep trans; /* transparency values for paletted files */ - png_color_16 trans_values; /* transparency values for non-paletted files */ -#endif - - png_read_status_ptr read_row_fn; /* called after each row is decoded */ - png_write_status_ptr write_row_fn; /* called after each row is encoded */ -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED - png_progressive_info_ptr info_fn; /* called after header data fully read */ - png_progressive_row_ptr row_fn; /* called after each prog. row is decoded*/ - png_progressive_end_ptr end_fn; /* called after image is complete */ - png_bytep save_buffer_ptr; /* current location in save_buffer */ - png_bytep save_buffer; /* buffer for previously read data */ - png_bytep current_buffer_ptr; /* current location in current_buffer */ - png_bytep current_buffer; /* buffer for recently used data */ - png_uint_32 push_length; /* size of current input chunk */ - png_uint_32 skip_length; /* bytes to skip in input data */ - png_size_t save_buffer_size; /* amount of data now in save_buffer */ - png_size_t save_buffer_max; /* total size of save_buffer */ - png_size_t buffer_size; /* total amount of available input data */ - png_size_t current_buffer_size; /* amount of data now in current_buffer */ - int process_mode; /* what push library is currently doing */ - int cur_palette; /* current push library palette index */ - -# if defined(PNG_TEXT_SUPPORTED) - png_size_t current_text_size; /* current size of text input data */ - png_size_t current_text_left; /* how much text left to read in input */ - png_charp current_text; /* current text chunk buffer */ - png_charp current_text_ptr; /* current location in current_text */ -# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ - -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) -/* for the Borland special 64K segment handler */ - png_bytepp offset_table_ptr; - png_bytep offset_table; - png_uint_16 offset_table_number; - png_uint_16 offset_table_count; - png_uint_16 offset_table_count_free; -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) - png_bytep palette_lookup; /* lookup table for dithering */ - png_bytep dither_index; /* index translation for palette files */ -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) - png_uint_16p hist; /* histogram */ -#endif - -#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) - png_byte heuristic_method; /* heuristic for row filter selection */ - png_byte num_prev_filters; /* number of weights for previous rows */ - png_bytep prev_filters; /* filter type(s) of previous row(s) */ - png_uint_16p filter_weights; /* weight(s) for previous line(s) */ - png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ - png_uint_16p filter_costs; /* relative filter calculation cost */ - png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ -#endif - -#if defined(PNG_TIME_RFC1123_SUPPORTED) - png_charp time_buffer; /* String to hold RFC 1123 time text */ -#endif - -/* New members added in libpng-1.0.6 */ - -#ifdef PNG_FREE_ME_SUPPORTED - png_uint_32 free_me; /* flags items libpng is responsible for freeing*/ -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) - png_voidp user_chunk_ptr; - png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - int num_chunk_list; - png_bytep chunk_list; -#endif - -/* New members added in libpng-1.0.3 */ -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - png_byte rgb_to_gray_status; - /* These were changed from png_byte in libpng-1.0.6 */ - png_uint_16 rgb_to_gray_red_coeff; - png_uint_16 rgb_to_gray_green_coeff; - png_uint_16 rgb_to_gray_blue_coeff; -#endif - -/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ - defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* changed from png_byte to png_uint_32 at version 1.2.0 */ -#ifdef PNG_1_0_X - png_byte mng_features_permitted; -#else - png_uint_32 mng_features_permitted; -#endif /* PNG_1_0_X */ -#endif - -/* New member added in libpng-1.0.7 */ -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_fixed_point int_gamma; -#endif - -/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) - png_byte filter_type; -#endif - -#if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD)) -/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ - png_uint_32 row_buf_size; -#endif - -/* New members added in libpng-1.2.0 */ -#if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) - png_byte mmx_bitdepth_threshold; - png_uint_32 mmx_rowbytes_threshold; - png_uint_32 asm_flags; -#endif - -/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ -#ifdef PNG_USER_MEM_SUPPORTED - png_voidp mem_ptr; /* user supplied struct for mem functions*/ - png_malloc_ptr malloc_fn; /* function for allocating memory */ - png_free_ptr free_fn; /* function for freeing memory */ -#endif - -/* New member added in libpng-1.0.13 and 1.2.0 */ - png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ - -#if defined(PNG_READ_DITHER_SUPPORTED) -/* The following three members were added at version 1.0.14 and 1.2.4 */ - png_bytep dither_sort; /* working sort array */ - png_bytep index_to_palette; /* where the original index currently is */ - /* in the palette */ - png_bytep palette_to_index; /* which original index points to this */ - /* palette color */ -#endif - -}; - - -/* This prevents a compiler error in png.c if png.c and png.h are both at - version 1.2.5 - */ -typedef png_structp version_1_2_5; - -typedef png_struct FAR * FAR * png_structpp; - -/* Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng.txt for the - * full explanation, see example.c for the summary. This just provides - * a simple one line description of the use of each function. - */ - -/* Returns the version number of the library */ -extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); - -/* Tell lib we have already handled the first magic bytes. - * Handling more than 8 bytes from the beginning of the file is an error. - */ -extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, - int num_bytes)); - -/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a - * PNG file. Returns zero if the supplied bytes match the 8-byte PNG - * signature, and non-zero otherwise. Having num_to_check == 0 or - * start > 7 will always fail (ie return non-zero). - */ -extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, - png_size_t num_to_check)); - -/* Simple signature checking function. This is the same as calling - * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). - */ -extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); - -/* Allocate and initialize png_ptr struct for reading, and any other memory. */ -extern PNG_EXPORT(png_structp,png_create_read_struct) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn)); - -/* Allocate and initialize png_ptr struct for writing, and any other memory */ -extern PNG_EXPORT(png_structp,png_create_write_struct) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn)); - -extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) - PNGARG((png_structp png_ptr)); - -extern PNG_EXPORT(void,png_set_compression_buffer_size) - PNGARG((png_structp png_ptr, png_uint_32 size)); - -/* Reset the compression stream */ -extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); - -/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ -#ifdef PNG_USER_MEM_SUPPORTED -extern PNG_EXPORT(png_structp,png_create_read_struct_2) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -extern PNG_EXPORT(png_structp,png_create_write_struct_2) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -#endif - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_bytep data, png_size_t length)); - -/* Write the start of a PNG chunk - length and chunk name. */ -extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_uint_32 length)); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); - -/* Allocate and initialize the info structure */ -extern PNG_EXPORT(png_infop,png_create_info_struct) - PNGARG((png_structp png_ptr)); - -/* Initialize the info structure (old interface - DEPRECATED) */ -extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); -/* PDFlb GmbH -#undef png_info_init -#define png_info_init(info_ptr) png_info_init_3(&info_ptr, sizeof(png_info)); -*/ -extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, - png_size_t png_info_struct_size)); - -/* Writes all the PNG information before the image. */ -extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr)); -extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* read the information before the actual image data. */ -extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#if defined(PNG_TIME_RFC1123_SUPPORTED) -extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) - PNGARG((png_structp png_ptr, png_timep ptime)); -#endif - -#if !defined(_WIN32_WCE) -/* "time.h" functions are not supported on WindowsCE */ -#if defined(PNG_WRITE_tIME_SUPPORTED) -/* convert from a struct tm to png_time */ -extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, - struct tm FAR * ttime)); - -/* convert from time_t to png_time. Uses gmtime() */ -extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, - time_t ttime)); -#endif /* PNG_WRITE_tIME_SUPPORTED */ -#endif /* _WIN32_WCE */ - -#if defined(PNG_READ_EXPAND_SUPPORTED) -/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* Use blue, green, red order for pixels. */ -extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -/* Expand the grayscale to 24-bit RGB if necessary. */ -extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -/* Reduce RGB to grayscale. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, - int error_action, double red, double green )); -#endif -extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green )); -extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp - png_ptr)); -#endif - -extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, - png_colorp palette)); - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -/* Add a filler byte to 24-bit RGB images. */ -extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, - png_uint_32 filler, int flags)); -/* The values of the PNG_FILLER_ defines should NOT be changed */ -#define PNG_FILLER_BEFORE 0 -#define PNG_FILLER_AFTER 1 -#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* Swap bytes in 16-bit depth files. */ -extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) -/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) ||defined(PNG_WRITE_PACKSWAP_SUPPORTED) -/* Swap packing order of pixels in bytes. */ -extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -/* Converts files to legal bit depths. */ -extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, - png_color_8p true_bits)); -#endif - -#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ - defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* Have the code handle the interlacing. Returns the number of passes. */ -extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -/* Invert monochrome files */ -extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -/* Handle alpha and tRNS by replacing with a background color. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, - png_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)); -#endif -#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 -#define PNG_BACKGROUND_GAMMA_SCREEN 1 -#define PNG_BACKGROUND_GAMMA_FILE 2 -#define PNG_BACKGROUND_GAMMA_UNIQUE 3 -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -/* strip the second byte of information from a 16-bit depth file. */ -extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -/*Turn on dithering, and reduce the palette to the number of colors available.*/ -extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette, int maximum_colors, - png_uint_16p histogram, int full_dither)); -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -/* Handle gamma correction. Screen_gamma=(display_exponent) */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, - double screen_gamma, double default_file_gamma)); -#endif -#endif - -#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ -/* Deprecated and will be removed. Use png_permit_mng_features() instead. */ -extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, - int empty_plte_permitted)); -#endif - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -/* Set how many lines between output flushes - 0 for no flushing */ -extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); -/* Flush the current PNG output buffer */ -extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); -#endif - -/* optional update palette with requested transformations */ -extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); - -/* optional call to update the users info structure */ -extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* read one or more rows of image data. */ -extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); - -/* read a row of data. */ -extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, - png_bytep row, - png_bytep display_row)); - -/* read the whole image into memory at once. */ -extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, - png_bytepp image)); - -/* write a row of image data */ -extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, - png_bytep row)); - -/* write a few rows of image data */ -extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_uint_32 num_rows)); - -/* write the image data */ -extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, - png_bytepp image)); - -/* writes the end of the PNG file. */ -extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* read the end of the PNG file. */ -extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* free any memory associated with the png_info_struct */ -extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, - png_infopp info_ptr_ptr)); - -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp - png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); - -/* free all memory used by the read (old method - NOT DLL EXPORTED) */ -extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, - png_infop end_info_ptr)); - -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_write_struct) - PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); - -/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ -extern void png_write_destroy PNGARG((png_structp png_ptr)); - -/* set the libpng method of handling chunk CRC errors */ -extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, - int crit_action, int ancil_action)); - -/* Values for png_set_crc_action() to say how to handle CRC errors in - * ancillary and critical chunks, and whether to use the data contained - * therein. Note that it is impossible to "discard" data in a critical - * chunk. For versions prior to 0.90, the action was always error/quit, - * whereas in version 0.90 and later, the action for CRC errors in ancillary - * chunks is warn/discard. These values should NOT be changed. - * - * value action:critical action:ancillary - */ -#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ -#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ -#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ -#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ -#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ -#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ - -/* These functions give the user control over the scan-line filtering in - * libpng and the compression methods used by zlib. These functions are - * mainly useful for testing, as the defaults should work with most users. - * Those users who are tight on memory or want faster performance at the - * expense of compression can modify them. See the compression library - * header file (zlib.h) for an explination of the compression functions. - */ - -/* set the filtering method(s) used by libpng. Currently, the only valid - * value for "method" is 0. - */ -extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, - int filters)); - -/* Flags for png_set_filter() to say which filters to use. The flags - * are chosen so that they don't conflict with real filter types - * below, in case they are supplied instead of the #defined constants. - * These values should NOT be changed. - */ -#define PNG_NO_FILTERS 0x00 -#define PNG_FILTER_NONE 0x08 -#define PNG_FILTER_SUB 0x10 -#define PNG_FILTER_UP 0x20 -#define PNG_FILTER_AVG 0x40 -#define PNG_FILTER_PAETH 0x80 -#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ - PNG_FILTER_AVG | PNG_FILTER_PAETH) - -/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. - * These defines should NOT be changed. - */ -#define PNG_FILTER_VALUE_NONE 0 -#define PNG_FILTER_VALUE_SUB 1 -#define PNG_FILTER_VALUE_UP 2 -#define PNG_FILTER_VALUE_AVG 3 -#define PNG_FILTER_VALUE_PAETH 4 -#define PNG_FILTER_VALUE_LAST 5 - -#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ -/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ - * defines, either the default (minimum-sum-of-absolute-differences), or - * the experimental method (weighted-minimum-sum-of-absolute-differences). - * - * Weights are factors >= 1.0, indicating how important it is to keep the - * filter type consistent between rows. Larger numbers mean the current - * filter is that many times as likely to be the same as the "num_weights" - * previous filters. This is cumulative for each previous row with a weight. - * There needs to be "num_weights" values in "filter_weights", or it can be - * NULL if the weights aren't being specified. Weights have no influence on - * the selection of the first row filter. Well chosen weights can (in theory) - * improve the compression for a given image. - * - * Costs are factors >= 1.0 indicating the relative decoding costs of a - * filter type. Higher costs indicate more decoding expense, and are - * therefore less likely to be selected over a filter with lower computational - * costs. There needs to be a value in "filter_costs" for each valid filter - * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't - * setting the costs. Costs try to improve the speed of decompression without - * unduly increasing the compressed image size. - * - * A negative weight or cost indicates the default value is to be used, and - * values in the range [0.0, 1.0) indicate the value is to remain unchanged. - * The default values for both weights and costs are currently 1.0, but may - * change if good general weighting/cost heuristics can be found. If both - * the weights and costs are set to 1.0, this degenerates the WEIGHTED method - * to the UNWEIGHTED method, but with added encoding time/computation. - */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, - int heuristic_method, int num_weights, png_doublep filter_weights, - png_doublep filter_costs)); -#endif -#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ - -/* Heuristic used for row filter selection. These defines should NOT be - * changed. - */ -#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ -#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ -#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ -#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ - -/* Set the library compression level. Currently, valid values range from - * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 - * (0 - no compression, 9 - "maximal" compression). Note that tests have - * shown that zlib compression levels 3-6 usually perform as well as level 9 - * for PNG images, and do considerably fewer caclulations. In the future, - * these values may not correspond directly to the zlib compression levels. - */ -extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, - int level)); - -extern PNG_EXPORT(void,png_set_compression_mem_level) - PNGARG((png_structp png_ptr, int mem_level)); - -extern PNG_EXPORT(void,png_set_compression_strategy) - PNGARG((png_structp png_ptr, int strategy)); - -extern PNG_EXPORT(void,png_set_compression_window_bits) - PNGARG((png_structp png_ptr, int window_bits)); - -extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, - int method)); - -/* These next functions are called for input/output, memory, and error - * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, - * and call standard C I/O routines such as fread(), fwrite(), and - * fprintf(). These functions can be made to use other I/O routines - * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng.txt for - * more information. - */ - -#if !defined(PNG_NO_STDIO) -/* Initialize the input/output for the PNG file to the default functions. */ -extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr,png_FILE_p fp)); -#endif - -/* Replace the (error and abort), and warning functions with user - * supplied functions. If no messages are to be printed you must still - * write and use replacement functions. The replacement error_fn should - * still do a longjmp to the last setjmp location if you are using this - * method of error handling. If error_fn or warning_fn is NULL, the - * default function will be used. - */ - -extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, - png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); - -/* Return the user pointer associated with the error functions */ -extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); - -/* Replace the default data output functions with a user supplied one(s). - * If buffered output is not used, then output_flush_fn can be set to NULL. - * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time - * output_flush_fn will be ignored (and thus can be NULL). - */ -extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); - -/* Replace the default data input function with a user supplied one. */ -extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr read_data_fn)); - -/* Return the user pointer associated with the I/O functions */ -extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); - -extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, - png_read_status_ptr read_row_fn)); - -extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, - png_write_status_ptr write_row_fn)); - -#ifdef PNG_USER_MEM_SUPPORTED -/* Replace the default memory allocation functions with user supplied one(s). */ -extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -/* Return the user pointer associated with the memory functions */ -extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr read_user_transform_fn)); -#endif - -#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr write_user_transform_fn)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp - png_ptr, png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels)); -/* Return the user pointer associated with the user transform functions */ -extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) - PNGARG((png_structp png_ptr)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp - png_ptr)); -#endif - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -/* Sets the function callbacks for the push reader, and a pointer to a - * user-defined structure available to the callback functions. - */ -extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, - png_voidp progressive_ptr, - png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, - png_progressive_end_ptr end_fn)); - -/* returns the user pointer associated with the push read functions */ -extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) - PNGARG((png_structp png_ptr)); - -/* function to be called when data becomes available */ -extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); - -/* function that combines rows. Not very much different than the - * png_combine_row() call. Is this even used????? - */ -extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, - png_bytep old_row, png_bytep new_row)); -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, - png_uint_32 size)); - -#if defined(PNG_1_0_X) -# define png_malloc_warn png_malloc -#else -/* Added at libpng version 1.2.4 */ -extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, - png_uint_32 size)); -#endif - -/* frees a pointer allocated by png_malloc() */ -extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); - -#if defined(PNG_1_0_X) -/* Function to allocate memory for zlib. */ -extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, - uInt size)); - -/* Function to free memory for zlib */ -extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); -#endif - -/* Free data that was allocated internally */ -extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 free_me, int num)); -#ifdef PNG_FREE_ME_SUPPORTED -/* Reassign responsibility for freeing existing data, whether allocated - * by libpng or by the application */ -extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, - png_infop info_ptr, int freer, png_uint_32 mask)); -#endif -/* assignments for png_data_freer */ -#define PNG_DESTROY_WILL_FREE_DATA 1 -#define PNG_SET_WILL_FREE_DATA 1 -#define PNG_USER_WILL_FREE_DATA 2 -/* Flags for png_ptr->free_me and info_ptr->free_me */ -#define PNG_FREE_HIST 0x0008 -#define PNG_FREE_ICCP 0x0010 -#define PNG_FREE_SPLT 0x0020 -#define PNG_FREE_ROWS 0x0040 -#define PNG_FREE_PCAL 0x0080 -#define PNG_FREE_SCAL 0x0100 -#define PNG_FREE_UNKN 0x0200 -#define PNG_FREE_LIST 0x0400 -#define PNG_FREE_PLTE 0x1000 -#define PNG_FREE_TRNS 0x2000 -#define PNG_FREE_TEXT 0x4000 -#define PNG_FREE_ALL 0x7fff -#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ - -#ifdef PNG_USER_MEM_SUPPORTED -extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, - png_uint_32 size)); -extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, - png_voidp ptr)); -#endif - -extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, - png_voidp s1, png_voidp s2, png_uint_32 size)); - -extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, - png_voidp s1, int value, png_uint_32 size)); - -#if defined(USE_FAR_KEYWORD) /* memory model conversion function */ -extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, - int check)); -#endif /* USE_FAR_KEYWORD */ - -/* Fatal error in PNG image of libpng - can't continue */ -extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); - -/* The same, but the chunk name is prepended to the error string. */ -extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); - -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); - -/* Non-fatal error in libpng, chunk name is prepended to message. */ -extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); - -/* The png_set_ functions are for storing values in the png_info_struct. - * Similarly, the png_get_ calls are used to read values from the - * png_info_struct, either storing the parameters in the passed variables, or - * setting pointers into the png_info_struct where the data is stored. The - * png_get_ functions return a non-zero value if the data was available - * in info_ptr, or return zero and do not change any of the parameters if the - * data was not available. - * - * These functions should be used instead of directly accessing png_info - * to avoid problems with future changes in the size and internal layout of - * png_info_struct. - */ -/* Returns "flag" if chunk data is valid in info_ptr. */ -extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, -png_infop info_ptr, png_uint_32 flag)); - -/* Returns number of bytes needed to hold a transformed row. */ -extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* Returns row_pointers, which is an array of pointers to scanlines that was -returned from png_read_png(). */ -extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, -png_infop info_ptr)); -/* Set row_pointers, which is an array of pointers to scanlines for use -by png_write_png(). */ -extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytepp row_pointers)); -#endif - -/* Returns number of color channels in image. */ -extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* Returns image width in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image height in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image bit_depth. */ -extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image color_type. */ -extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image filter_type. */ -extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image interlace_type. */ -extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image compression_type. */ -extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -#endif - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -#endif /* PNG_EASY_ACCESS_SUPPORTED */ - -/* Returns pointer to signature string read from PNG header */ -extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p *background)); -#endif - -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p background)); -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point - *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, - png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point - *int_blue_x, png_fixed_point *int_blue_y)); -#endif -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double white_x, double white_y, double red_x, - double red_y, double green_x, double green_y, double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *file_gamma)); -#endif -extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_file_gamma)); -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double file_gamma)); -#endif -extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma)); -#endif - -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p *hist)); -#endif - -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p hist)); -#endif - -extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, - int *bit_depth, int *color_type, int *interlace_method, - int *compression_method, int *filter_method)); - -extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_method, int compression_method, - int filter_method)); - -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, - int *unit_type)); -#endif - -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, - int unit_type)); -#endif - -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, - int *type, int *nparams, png_charp *units, png_charpp *params)); -#endif - -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, - int type, int nparams, png_charp units, png_charpp params)); -#endif - -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); -#endif - -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); -#endif - -extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp *palette, int *num_palette)); - -extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp palette, int num_palette)); - -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p *sig_bit)); -#endif - -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p sig_bit)); -#endif - -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *intent)); -#endif - -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); -extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); -#endif - -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charpp name, int *compression_type, - png_charpp profile, png_uint_32 *proflen)); - /* Note to maintainer: profile should be png_bytepp */ -#endif - -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp name, int compression_type, - png_charp profile, png_uint_32 proflen)); - /* Note to maintainer: profile should be png_bytep */ -#endif - -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tpp entries)); -#endif - -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tp entries, int nentries)); -#endif - -#if defined(PNG_TEXT_SUPPORTED) -/* png_get_text also returns the number of text chunks in *num_text */ -extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp *text_ptr, int *num_text)); -#endif - -/* - * Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. - */ - -#if defined(PNG_TEXT_SUPPORTED) -extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); -#endif - -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep *mod_time)); -#endif - -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep mod_time)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep *trans, int *num_trans, - png_color_16p *trans_values)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep trans, int num_trans, - png_color_16p trans_values)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -#endif - -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, double *width, double *height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); -#endif -#endif -#endif /* PNG_sCAL_SUPPORTED */ - -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, double width, double height)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); -#endif -#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -/* provide a list of chunks and how they are to be handled, if the built-in - handling or default unknown chunk handling is not desired. Any chunks not - listed will be handled in the default manner. The IHDR and IEND chunks - must not be listed. - keep = 0: follow default behavour - = 1: do not keep - = 2: keep only if safe-to-copy - = 3: keep even if unsafe-to-copy -*/ -extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp - png_ptr, int keep, png_bytep chunk_list, int num_chunks)); -extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); -extern PNG_EXPORT(void, png_set_unknown_chunk_location) - PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); -extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp - png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); -#endif -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep - chunk_name)); -#endif - -/* Png_free_data() will turn off the "valid" flag for anything it frees. - If you need to turn it off for a chunk that your application has freed, - you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ -extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, - png_infop info_ptr, int mask)); - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* The "params" pointer is currently not used and is for future expansion. */ -extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -#endif - -/* Define PNG_DEBUG at compile time for debugging information. Higher - * numbers for PNG_DEBUG mean more debugging information. This has - * only been added since version 0.95 so it is not implemented throughout - * libpng yet, but more support will be added as needed. - */ -#ifdef PNG_DEBUG -#if (PNG_DEBUG > 0) -#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) -#include -#if (PNG_DEBUG > 1) -#define png_debug(l,m) _RPT0(_CRT_WARN,m) -#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) -#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) -#endif -#else /* PNG_DEBUG_FILE || !_MSC_VER */ -#ifndef PNG_DEBUG_FILE -#define PNG_DEBUG_FILE stderr -#endif /* PNG_DEBUG_FILE */ -#if (PNG_DEBUG > 1) -#define png_debug(l,m) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ -} -#define png_debug1(l,m,p1) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ -} -#define png_debug2(l,m,p1,p2) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ -} -#endif /* (PNG_DEBUG > 1) */ -#endif /* _MSC_VER */ -#endif /* (PNG_DEBUG > 0) */ -#endif /* PNG_DEBUG */ -#ifndef png_debug -#define png_debug(l, m) -#endif -#ifndef png_debug1 -#define png_debug1(l, m, p1) -#endif -#ifndef png_debug2 -#define png_debug2(l, m, p1, p2) -#endif - -extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void)); - -extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_header_version) - PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); - -#ifdef PNG_MNG_FEATURES_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp - png_ptr, png_uint_32 mng_features_permitted)); -#endif - -/* Added to version 1.2.0 */ -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 -#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 -#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 -#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 -#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 -#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 -#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ - -#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ - | PNG_ASM_FLAG_MMX_READ_INTERLACE \ - | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ - | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ - | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ - | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) -#define PNG_MMX_WRITE_FLAGS ( 0 ) - -#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ - | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ - | PNG_MMX_READ_FLAGS \ - | PNG_MMX_WRITE_FLAGS ) - -#define PNG_SELECT_READ 1 -#define PNG_SELECT_WRITE 2 - - -#if !defined(PNG_1_0_X) -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) - PNGARG((int flag_select, int *compilerID)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) - PNGARG((int flag_select)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flags) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) - PNGARG((png_structp png_ptr)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_asm_flags) - PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_mmx_thresholds) - PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, - png_uint_32 mmx_rowbytes_threshold)); - -#endif /* PNG_1_0_X */ -#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ - -#if !defined(PNG_1_0_X) -/* png.c, pnggccrd.c, or pngvcrd.c */ -extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); - -/* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. */ -#ifdef PNG_ERROR_NUMBERS_SUPPORTED -extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp - png_ptr, png_uint_32 strip_mode)); -#endif -#endif /* PNG_1_0_X */ - -/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs*/ - -#define PNG_HEADER_VERSION_STRING \ - " libpng version 1.2.5 - October 3, 2002 (header)\n" - -#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED -/* With these routines we avoid an integer divide, which will be slower on - * most machines. However, it does take more operations than the corresponding - * divide method, so it may be slower on a few RISC systems. There are two - * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. - * - * Note that the rounding factors are NOT supposed to be the same! 128 and - * 32768 are correct for the NODIV code; 127 and 32767 are correct for the - * standard method. - * - * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] - */ - - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ - -# define png_composite(composite, fg, alpha, bg) \ - { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ - + (png_uint_16)(bg)*(png_uint_16)(255 - \ - (png_uint_16)(alpha)) + (png_uint_16)128); \ - (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } - -# define png_composite_16(composite, fg, alpha, bg) \ - { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ - + (png_uint_32)(bg)*(png_uint_32)(65535L - \ - (png_uint_32)(alpha)) + (png_uint_32)32768L); \ - (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } - -#else /* standard method using integer division */ - -# define png_composite(composite, fg, alpha, bg) \ - (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ - (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ - (png_uint_16)127) / 255) - -# define png_composite_16(composite, fg, alpha, bg) \ - (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ - (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ - (png_uint_32)32767) / (png_uint_32)65535L) - -#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ - -/* These next functions are used internally in the code. They generally - * shouldn't be used unless you are writing code to add or replace some - * functionality in libpng. More information about most functions can - * be found in the files where the functions are located. - */ - -#if defined(PNG_INTERNAL) - -/* Various modes of operation. Note that after an init, mode is set to - * zero automatically when the structure is created. - */ -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_HAVE_IDAT 0x04 -#define PNG_AFTER_IDAT 0x08 -#define PNG_HAVE_IEND 0x10 -#define PNG_HAVE_gAMA 0x20 -#define PNG_HAVE_cHRM 0x40 -#define PNG_HAVE_sRGB 0x80 -#define PNG_HAVE_CHUNK_HEADER 0x100 -#define PNG_WROTE_tIME 0x200 -#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 -#define PNG_BACKGROUND_IS_GRAY 0x800 -#define PNG_HAVE_PNG_SIGNATURE 0x1000 - -/* flags for the transformations the PNG library does on the image data */ -#define PNG_BGR 0x0001 -#define PNG_INTERLACE 0x0002 -#define PNG_PACK 0x0004 -#define PNG_SHIFT 0x0008 -#define PNG_SWAP_BYTES 0x0010 -#define PNG_INVERT_MONO 0x0020 -#define PNG_DITHER 0x0040 -#define PNG_BACKGROUND 0x0080 -#define PNG_BACKGROUND_EXPAND 0x0100 - /* 0x0200 unused */ -#define PNG_16_TO_8 0x0400 -#define PNG_RGBA 0x0800 -#define PNG_EXPAND 0x1000 -#define PNG_GAMMA 0x2000 -#define PNG_GRAY_TO_RGB 0x4000 -#define PNG_FILLER 0x8000L -#define PNG_PACKSWAP 0x10000L -#define PNG_SWAP_ALPHA 0x20000L -#define PNG_STRIP_ALPHA 0x40000L -#define PNG_INVERT_ALPHA 0x80000L -#define PNG_USER_TRANSFORM 0x100000L -#define PNG_RGB_TO_GRAY_ERR 0x200000L -#define PNG_RGB_TO_GRAY_WARN 0x400000L -#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ - -/* flags for png_create_struct */ -#define PNG_STRUCT_PNG 0x0001 -#define PNG_STRUCT_INFO 0x0002 - -/* Scaling factor for filter heuristic weighting calculations */ -#define PNG_WEIGHT_SHIFT 8 -#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) -#define PNG_COST_SHIFT 3 -#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) - -/* flags for the png_ptr->flags rather than declaring a byte for each one */ -#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 -#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 -#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 -#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 -#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 -#define PNG_FLAG_ZLIB_FINISHED 0x0020 -#define PNG_FLAG_ROW_INIT 0x0040 -#define PNG_FLAG_FILLER_AFTER 0x0080 -#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 -#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 -#define PNG_FLAG_CRC_CRITICAL_USE 0x0400 -#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 -#define PNG_FLAG_FREE_PLTE 0x1000 -#define PNG_FLAG_FREE_TRNS 0x2000 -#define PNG_FLAG_FREE_HIST 0x4000 -#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L -#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L -#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L -#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L -#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L -#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L - -/* For use in png_set_keep_unknown, png_handle_as_unknown */ -#define HANDLE_CHUNK_AS_DEFAULT 0 -#define HANDLE_CHUNK_NEVER 1 -#define HANDLE_CHUNK_IF_SAFE 2 -#define HANDLE_CHUNK_ALWAYS 3 - -#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ - PNG_FLAG_CRC_ANCILLARY_NOWARN) - -#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ - PNG_FLAG_CRC_CRITICAL_IGNORE) - -#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ - PNG_FLAG_CRC_CRITICAL_MASK) - -/* save typing and make code easier to understand */ -#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ - abs((int)((c1).green) - (int)((c2).green)) + \ - abs((int)((c1).blue) - (int)((c2).blue))) - -/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ -#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) -/* place to hold the signature string for a PNG file. */ -#ifdef PNG_USE_GLOBAL_ARRAYS - PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8]; -#else -#define png_sig png_sig_bytes(NULL) -#endif -#endif /* PNG_NO_EXTERN */ - -/* Constant strings for known chunk types. If you need to add a chunk, - * define the name here, and add an invocation of the macro in png.c and - * wherever it's needed. - */ -#define PNG_IHDR const png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} -#define PNG_IDAT const png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} -#define PNG_IEND const png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} -#define PNG_PLTE const png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} -#define PNG_bKGD const png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} -#define PNG_cHRM const png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} -#define PNG_gAMA const png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} -#define PNG_hIST const png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} -#define PNG_iCCP const png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} -#define PNG_iTXt const png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} -#define PNG_oFFs const png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} -#define PNG_pCAL const png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} -#define PNG_sCAL const png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} -#define PNG_pHYs const png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} -#define PNG_sBIT const png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} -#define PNG_sPLT const png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} -#define PNG_sRGB const png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} -#define PNG_tEXt const png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} -#define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} -#define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} -#define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} - -#ifdef PNG_USE_GLOBAL_ARRAYS -PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5]; -PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5]; -#endif /* PNG_USE_GLOBAL_ARRAYS */ - - -/* Inline macros to do direct reads of bytes from the input buffer. These - * require that you are using an architecture that uses PNG byte ordering - * (MSB first) and supports unaligned data storage. I think that PowerPC - * in big-endian mode and 680x0 are the only ones that will support this. - * The x86 line of processors definitely do not. The png_get_int_32() - * routine also assumes we are using two's complement format for negative - * values, which is almost certainly true. - */ -#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) -# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) -# define png_get_int_32(buf) ( *((png_int_32p) (buf))) -# endif -# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) -# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) -#else -# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) -PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf)); -# endif -PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf)); -PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf)); -#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ - -/* Initialize png_ptr struct for reading, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_read_struct instead). - */ -extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); -#undef png_read_init -#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, sizeof(png_struct)); -extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); - -/* Initialize png_ptr struct for writing, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_write_struct instead). - */ -extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); -#undef png_write_init -#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, sizeof(png_struct)); -extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); - -/* Allocate memory for an internal libpng struct */ -PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); - -/* Free memory from internal libpng struct */ -PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); - -PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr - malloc_fn, png_voidp mem_ptr)); -PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, - png_free_ptr free_fn, png_voidp mem_ptr)); - -/* Free any memory that info_ptr points to and reset struct. */ -PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_1_0_X -/* Function to allocate memory for zlib. */ -PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); - -/* Function to free memory for zlib */ -PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); - -/* Next four functions are used internally as callbacks. PNGAPI is required - * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ - -PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif - -PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -#if !defined(PNG_NO_STDIO) -PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); -#endif -#endif -#else /* PNG_1_0_X */ -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif -#endif /* PNG_1_0_X */ - -/* Reset the CRC variable */ -PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); - -/* Write the "data" buffer to whatever output you are using. */ -PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read data from whatever input you are using into the "data" buffer */ -PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read bytes into buf, and update png_ptr->crc */ -PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, - png_size_t length)); - -/* Decompress data in a chunk that uses compression */ -#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ - defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) -PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, - int comp_type, png_charp chunkdata, png_size_t chunklength, - png_size_t prefix_length, png_size_t *data_length)); -#endif - -/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ -PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); - -/* Read the CRC from the file and compare it to the libpng calculated CRC */ -PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); - -/* Calculate the CRC over a section of data. Note that we are only - * passing a maximum of 64K on systems that have this as a memory limit, - * since this is the maximum buffer size we can specify. - */ -PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, - png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); -#endif - - -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). - * The only currently known PNG chunks that use signed numbers are - * the ancillary extension chunks, oFFs and pCAL. - */ -PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i)); - -#if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) -PNG_EXTERN void png_save_int_32 PNGARG((png_bytep buf, png_int_32 i)); -#endif - -/* Place a 16-bit number into a buffer in PNG byte order. - * The parameter is declared unsigned int, not png_uint_16, - * just to avoid potential problems on pre-ANSI C compilers. - */ -PNG_EXTERN void png_save_uint_16 PNGARG((png_bytep buf, unsigned int i)); - -/* simple function to write the signature */ -PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); - -/* write various chunks */ - -/* Write the IHDR chunk, and update the png_struct with the necessary - * information. - */ -PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, - png_uint_32 height, - int bit_depth, int color_type, int compression_method, int filter_method, - int interlace_method)); - -PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, - png_uint_32 num_pal)); - -PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); - -#if defined(PNG_WRITE_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, - png_fixed_point file_gamma)); -#endif -#endif - -#if defined(PNG_WRITE_sBIT_SUPPORTED) -PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, - int color_type)); -#endif - -#if defined(PNG_WRITE_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, - double white_x, double white_y, - double red_x, double red_y, double green_x, double green_y, - double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, - png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif -#endif - -#if defined(PNG_WRITE_sRGB_SUPPORTED) -PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, - int intent)); -#endif - -#if defined(PNG_WRITE_iCCP_SUPPORTED) -PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, - png_charp name, int compression_type, - png_charp profile, int proflen)); - /* Note to maintainer: profile should be png_bytep */ -#endif - -#if defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, - png_sPLT_tp palette)); -#endif - -#if defined(PNG_WRITE_tRNS_SUPPORTED) -PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, - png_color_16p values, int number, int color_type)); -#endif - -#if defined(PNG_WRITE_bKGD_SUPPORTED) -PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, - png_color_16p values, int color_type)); -#endif - -#if defined(PNG_WRITE_hIST_SUPPORTED) -PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, - int num_hist)); -#endif - -#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ - defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, - png_charp key, png_charpp new_key)); -#endif - -#if defined(PNG_WRITE_tEXt_SUPPORTED) -PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len)); -#endif - -#if defined(PNG_WRITE_zTXt_SUPPORTED) -PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len, int compression)); -#endif - -#if defined(PNG_WRITE_iTXt_SUPPORTED) -PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, - int compression, png_charp key, png_charp lang, png_charp lang_key, - png_charp text)); -#endif - -#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ -PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); -#endif - -#if defined(PNG_WRITE_oFFs_SUPPORTED) -PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, - png_int_32 x_offset, png_int_32 y_offset, int unit_type)); -#endif - -#if defined(PNG_WRITE_pCAL_SUPPORTED) -PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, - png_int_32 X0, png_int_32 X1, int type, int nparams, - png_charp units, png_charpp params)); -#endif - -#if defined(PNG_WRITE_pHYs_SUPPORTED) -PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, - png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, - int unit_type)); -#endif - -#if defined(PNG_WRITE_tIME_SUPPORTED) -PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, - png_timep mod_time)); -#endif - -#if defined(PNG_WRITE_sCAL_SUPPORTED) -#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) -PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, - int unit, double width, double height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, - int unit, png_charp width, png_charp height)); -#endif -#endif -#endif - -/* Called when finished processing a row of data */ -PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); - -/* Internal use only. Called before first row of data */ -PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); -#endif - -/* combine a row of data, dealing with alpha, etc. if requested */ -PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, - int mask)); - -#if defined(PNG_READ_INTERLACING_SUPPORTED) -/* expand an interlaced row */ -/* OLD pre-1.0.9 interface: -PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass, png_uint_32 transformations)); - */ -PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); -#endif - -/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ - -#if defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* grab pixels out of a row for an interlaced pass */ -PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass)); -#endif - -/* unfilter a row */ -PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, - png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); - -/* Choose the best filter to use and filter the row data */ -PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, - png_row_infop row_info)); - -/* Write out the filtered row. */ -PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, - png_bytep filtered_row)); -/* finish a row while reading, dealing with interlacing passes, etc. */ -PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); - -/* initialize the row buffers, etc. */ -PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); -/* optional call to update the users info structure */ -PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* these are the functions that do the transformations */ -#if defined(PNG_READ_FILLER_SUPPORTED) -PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 filler, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ - defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) ||defined(PNG_WRITE_PACKSWAP_SUPPORTED) -PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop - row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) -PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p sig_bits)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, - png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); - -# if defined(PNG_CORRECT_PALETTE_SUPPORTED) -PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette)); -# endif -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_WRITE_PACK_SUPPORTED) -PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 bit_depth)); -#endif - -#if defined(PNG_WRITE_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p bit_depth)); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background, - png_color_16p background_1, - png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, - png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, - png_uint_16pp gamma_16_to_1, int gamma_shift)); -#else -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background)); -#endif -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, - png_bytep gamma_table, png_uint_16pp gamma_16_table, - int gamma_shift)); -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) -PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, - png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); -PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, - png_bytep row, png_color_16p trans_value)); -#endif - -/* The following decodes the appropriate chunks, and does error correction, - * then calls the appropriate callback for the chunk if it is valid. - */ - -/* decode the IHDR chunk */ -PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); - -#if defined(PNG_READ_bKGD_SUPPORTED) -PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_cHRM_SUPPORTED) -PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_gAMA_SUPPORTED) -PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_hIST_SUPPORTED) -PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_iCCP_SUPPORTED) -extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_iCCP_SUPPORTED */ - -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_oFFs_SUPPORTED) -PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pCAL_SUPPORTED) -PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pHYs_SUPPORTED) -PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sBIT_SUPPORTED) -PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sCAL_SUPPORTED) -PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sPLT_SUPPORTED) -extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_sPLT_SUPPORTED */ - -#if defined(PNG_READ_sRGB_SUPPORTED) -PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tIME_SUPPORTED) -PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tRNS_SUPPORTED) -PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); - -PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, - png_bytep chunk_name)); - -/* handle the transformations for reading and writing */ -PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); - -PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, - png_uint_32 length)); -PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); -PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif - -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -/* png.c */ /* PRIVATE */ -PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); -#endif -/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ - -#endif /* PNG_INTERNAL */ - -#ifdef __cplusplus -} -#endif - -#endif /* PNG_VERSION_INFO_ONLY */ -/* do not put anything past this line */ -#endif /* PNG_H */ diff --git a/src/libs/pdflib/libs/png/pngasmrd.h b/src/libs/pdflib/libs/png/pngasmrd.h deleted file mode 100644 index 36407b6080..0000000000 --- a/src/libs/pdflib/libs/png/pngasmrd.h +++ /dev/null @@ -1,13 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngasmrd.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngasmrd.h - assembler version of utilities to read a PNG file - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 2002 Glenn Randers-Pehrson - * - */ - -/* This file is obsolete in libpng-1.0.9 and later; its contents now appear - * at the end of pngconf.h. - */ diff --git a/src/libs/pdflib/libs/png/pngconf.h b/src/libs/pdflib/libs/png/pngconf.h deleted file mode 100644 index 64a43bd109..0000000000 --- a/src/libs/pdflib/libs/png/pngconf.h +++ /dev/null @@ -1,1656 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngconf.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngconf.h - machine configurable file for libpng - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - */ - -/* Any machine specific code is near the front of this file, so if you - * are configuring libpng for a machine, you may want to read the section - * starting here down to where it starts to typedef png_color, png_text, - * and png_info. - */ - -#ifndef PNGCONF_H -#define PNGCONF_H - -#define PNG_STATIC /* PDFlib GmbH: always create a static lib under Cygwin */ - -#define PNG_PREFIX /* PDFlib GmbH: use private function names */ -#define PNG_USER_MEM_SUPPORTED /* PDFlib GmbH: allow private alloc functions */ -#define PNG_NO_WRITE_SUPPORTED /* PDFlib GmbH: we don't need write support */ -#define PNG_NO_ERROR_NUMBERS /* PDFlib GmbH: we don't need this */ - -/* PDFlib GmbH: prefix public PNG names with pdf_ */ -/* Make sure to observe the limit of 31 characters for function names! */ -#ifdef PNG_PREFIX -#define png_IDAT pdf_png_IDAT -#define png_IEND pdf_png_IEND -#define png_IHDR pdf_png_IHDR -#define png_PLTE pdf_png_PLTE -#define png_access_version_number pdf_png_access_version_number -#define png_bKGD pdf_png_bKGD -#define png_cHRM pdf_png_cHRM -#define png_calculate_crc pdf_png_calculate_crc -#define png_check_sig pdf_png_check_sig -#define png_convert_to_rfc1123 pdf_png_convert_to_rfc1123 -#define png_create_info_struct pdf_png_create_info_struct -#define png_data_freer pdf_png_data_freer -#define png_destroy_info_struct pdf_png_destroy_info_struct -#define png_free_data pdf_png_free_data -#define png_gAMA pdf_png_gAMA -#define png_get_copyright pdf_png_get_copyright -#define png_get_header_ver pdf_png_get_header_ver -#define png_get_header_version pdf_png_get_header_version -#define png_get_io_ptr pdf_png_get_io_ptr -#define png_get_libpng_ver pdf_png_get_libpng_ver -#define png_hIST pdf_png_hIST -#define png_handle_as_unknown pdf_png_handle_as_unknown -#define png_iCCP pdf_png_iCCP -#define png_iTXt pdf_png_iTXt -#define png_info_destroy pdf_png_info_destroy -#define png_info_init pdf_png_info_init -#define png_info_init_3 pdf_png_info_init_3 -#define png_init_io pdf_png_init_io -#define png_init_mmx_flags pdf_png_init_mmx_flags -#define png_libpng_ver pdf_png_libpng_ver -#define png_mmx_support pdf_png_mmx_support -#define png_oFFs pdf_png_oFFs -#define png_pCAL pdf_png_pCAL -#define png_pHYs pdf_png_pHYs -#define png_pass_dsp_mask pdf_png_pass_dsp_mask -#define png_pass_inc pdf_png_pass_inc -#define png_pass_mask pdf_png_pass_mask -#define png_pass_start pdf_png_pass_start -#define png_pass_yinc pdf_png_pass_yinc -#define png_pass_ystart pdf_png_pass_ystart -#define png_reset_crc pdf_png_reset_crc -#define png_reset_zstream pdf_png_reset_zstream -#define png_sBIT pdf_png_sBIT -#define png_sCAL pdf_png_sCAL -#define png_sPLT pdf_png_sPLT -#define png_sRGB pdf_png_sRGB -#define png_set_sig_bytes pdf_png_set_sig_bytes -#define png_sig pdf_png_sig -#define png_sig_cmp pdf_png_sig_cmp -#define png_tEXt pdf_png_tEXt -#define png_tIME pdf_png_tIME -#define png_tRNS pdf_png_tRNS -#define png_zTXt pdf_png_zTXt -#define png_zalloc pdf_png_zalloc -#define png_zfree pdf_png_zfree -#define png_permit_empty_plte pdf_png_permit_empty_plte -#define png_permit_mng_features pdf_png_permit_mng_features -#define png_set_IHDR pdf_png_set_IHDR -#define png_set_PLTE pdf_png_set_PLTE -#define png_set_asm_flags pdf_png_set_asm_flags -#define png_set_bKGD pdf_png_set_bKGD -#define png_set_cHRM pdf_png_set_cHRM -#define png_set_cHRM_fixed pdf_png_set_cHRM_fixed - -/* Note: function name shortened to facilitate porting */ -#define png_set_compression_buffer_size pdf_png_set_comp_buffer_size - -#define png_set_gAMA pdf_png_set_gAMA -#define png_set_gAMA_fixed pdf_png_set_gAMA_fixed -#define png_set_hIST pdf_png_set_hIST -#define png_set_iCCP pdf_png_set_iCCP -#define png_set_invalid pdf_png_set_invalid -#define png_set_keep_unknown_chunks pdf_png_set_keep_unknown_chunks -#define png_set_mmx_thresholds pdf_png_set_mmx_thresholds -#define png_set_oFFs pdf_png_set_oFFs -#define png_set_pCAL pdf_png_set_pCAL -#define png_set_pHYs pdf_png_set_pHYs -#define png_set_read_user_chunk_fn pdf_png_set_read_user_chunk_fn -#define png_set_rows pdf_png_set_rows -#define png_set_sBIT pdf_png_set_sBIT -#define png_set_sCAL pdf_png_set_sCAL -#define png_set_sPLT pdf_png_set_sPLT -#define png_set_sRGB pdf_png_set_sRGB -#define png_set_sRGB_gAMA_and_cHRM pdf_png_set_sRGB_gAMA_and_cHRM -#define png_set_tIME pdf_png_set_tIME -#define png_set_tRNS pdf_png_set_tRNS -#define png_set_text pdf_png_set_text -#define png_set_text_2 pdf_png_set_text_2 - -/* Note: function name shortened to facilitate porting */ -#define png_set_unknown_chunk_location pdf_png_set_unk_chunk_location - -#define png_set_unknown_chunks pdf_png_set_unknown_chunks -#define png_get_IHDR pdf_png_get_IHDR -#define png_get_PLTE pdf_png_get_PLTE -#define png_get_asm_flagmask pdf_png_get_asm_flagmask -#define png_get_asm_flags pdf_png_get_asm_flags -#define png_get_bKGD pdf_png_get_bKGD -#define png_get_bit_depth pdf_png_get_bit_depth -#define png_get_cHRM pdf_png_get_cHRM -#define png_get_cHRM_fixed pdf_png_get_cHRM_fixed -#define png_get_channels pdf_png_get_channels -#define png_get_color_type pdf_png_get_color_type - -/* Note: function name shortened to facilitate porting */ -#define png_get_compression_buffer_size pdf_png_get_comp_buffer_size - -#define png_get_compression_type pdf_png_get_compression_type -#define png_get_filter_type pdf_png_get_filter_type -#define png_get_gAMA pdf_png_get_gAMA -#define png_get_gAMA_fixed pdf_png_get_gAMA_fixed -#define png_get_hIST pdf_png_get_hIST -#define png_get_iCCP pdf_png_get_iCCP -#define png_get_image_height pdf_png_get_image_height -#define png_get_image_width pdf_png_get_image_width -#define png_get_interlace_type pdf_png_get_interlace_type - -/* Note: function name shortened to facilitate porting */ -#define png_get_mmx_bitdepth_threshold pdf_png_get_mmx_bitdpth_thresh - -#define png_get_mmx_flagmask pdf_png_get_mmx_flagmask - -/* Note: function name shortened to facilitate porting */ -#define png_get_mmx_rowbytes_threshold pdf_png_get_mmx_rowbytes_thresh - -#define png_get_oFFs pdf_png_get_oFFs -#define png_get_pCAL pdf_png_get_pCAL -#define png_get_pHYs pdf_png_get_pHYs -#define png_get_pixel_aspect_ratio pdf_png_get_pixel_aspect_ratio -#define png_get_pixels_per_meter pdf_png_get_pixels_per_meter -#define png_get_rgb_to_gray_status pdf_png_get_rgb_to_gray_status -#define png_get_rowbytes pdf_png_get_rowbytes -#define png_get_rows pdf_png_get_rows -#define png_get_sBIT pdf_png_get_sBIT -#define png_get_sCAL pdf_png_get_sCAL -#define png_get_sPLT pdf_png_get_sPLT -#define png_get_sRGB pdf_png_get_sRGB -#define png_get_signature pdf_png_get_signature -#define png_get_tIME pdf_png_get_tIME -#define png_get_tRNS pdf_png_get_tRNS -#define png_get_text pdf_png_get_text -#define png_get_unknown_chunks pdf_png_get_unknown_chunks -#define png_get_user_chunk_ptr pdf_png_get_user_chunk_ptr -#define png_get_valid pdf_png_get_valid -#define png_get_x_offset_microns pdf_png_get_x_offset_microns -#define png_get_x_offset_pixels pdf_png_get_x_offset_pixels -#define png_get_x_pixels_per_meter pdf_png_get_x_pixels_per_meter -#define png_get_y_offset_microns pdf_png_get_y_offset_microns -#define png_get_y_offset_pixels pdf_png_get_y_offset_pixels -#define png_get_y_pixels_per_meter pdf_png_get_y_pixels_per_meter -#define png_check_chunk_name pdf_png_check_chunk_name -#define png_combine_row pdf_png_combine_row -#define png_crc_error pdf_png_crc_error -#define png_crc_finish pdf_png_crc_finish -#define png_crc_read pdf_png_crc_read -#define png_decompress_chunk pdf_png_decompress_chunk -#define png_do_read_interlace pdf_png_do_read_interlace -#define png_get_int_32 pdf_png_get_int_32 -#define png_get_uint_16 pdf_png_get_uint_16 -#define png_get_uint_32 pdf_png_get_uint_32 -#define png_handle_IEND pdf_png_handle_IEND -#define png_handle_IHDR pdf_png_handle_IHDR -#define png_handle_PLTE pdf_png_handle_PLTE -#define png_handle_bKGD pdf_png_handle_bKGD -#define png_handle_cHRM pdf_png_handle_cHRM -#define png_handle_gAMA pdf_png_handle_gAMA -#define png_handle_hIST pdf_png_handle_hIST -#define png_handle_iCCP pdf_png_handle_iCCP -#define png_handle_oFFs pdf_png_handle_oFFs -#define png_handle_pCAL pdf_png_handle_pCAL -#define png_handle_pHYs pdf_png_handle_pHYs -#define png_handle_sBIT pdf_png_handle_sBIT -#define png_handle_sCAL pdf_png_handle_sCAL -#define png_handle_sPLT pdf_png_handle_sPLT -#define png_handle_sRGB pdf_png_handle_sRGB -#define png_handle_tEXt pdf_png_handle_tEXt -#define png_handle_tIME pdf_png_handle_tIME -#define png_handle_tRNS pdf_png_handle_tRNS -#define png_handle_unknown pdf_png_handle_unknown -#define png_handle_zTXt pdf_png_handle_zTXt -#define png_read_filter_row pdf_png_read_filter_row -#define png_read_finish_row pdf_png_read_finish_row -#define png_read_start_row pdf_png_read_start_row -#define png_do_bgr pdf_png_do_bgr -#define png_do_invert pdf_png_do_invert -#define png_do_packswap pdf_png_do_packswap -#define png_do_strip_filler pdf_png_do_strip_filler -#define png_do_swap pdf_png_do_swap -#define png_get_user_transform_ptr pdf_png_get_user_transform_ptr -#define png_set_bgr pdf_png_set_bgr -#define png_set_filler pdf_png_set_filler -#define png_set_interlace_handling pdf_png_set_interlace_handling -#define png_set_invert_alpha pdf_png_set_invert_alpha -#define png_set_invert_mono pdf_png_set_invert_mono -#define png_set_packing pdf_png_set_packing -#define png_set_packswap pdf_png_set_packswap -#define png_set_shift pdf_png_set_shift -#define png_set_swap pdf_png_set_swap -#define png_set_swap_alpha pdf_png_set_swap_alpha -#define png_set_user_transform_info pdf_png_set_user_transform_info -#define png_create_read_struct pdf_png_create_read_struct -#define png_create_read_struct_2 pdf_png_create_read_struct_2 -#define png_destroy_read_struct pdf_png_destroy_read_struct -#define png_read_destroy pdf_png_read_destroy -#define png_read_end pdf_png_read_end -#define png_read_image pdf_png_read_image -#define png_read_info pdf_png_read_info -#define png_read_init pdf_png_read_init -#define png_read_init_2 pdf_png_read_init_2 -#define png_read_init_3 pdf_png_read_init_3 -#define png_read_png pdf_png_read_png -#define png_read_row pdf_png_read_row -#define png_read_rows pdf_png_read_rows -#define png_read_update_info pdf_png_read_update_info -#define png_set_read_status_fn pdf_png_set_read_status_fn -#define png_start_read_image pdf_png_start_read_image -#define png_default_read_data pdf_png_default_read_data -#define png_read_data pdf_png_read_data -#define png_set_read_fn pdf_png_set_read_fn -#define png_build_gamma_table pdf_png_build_gamma_table -#define png_build_grayscale_palette pdf_png_build_grayscale_palette -#define png_do_background pdf_png_do_background -#define png_do_chop pdf_png_do_chop -#define png_do_dither pdf_png_do_dither -#define png_do_expand pdf_png_do_expand -#define png_do_expand_palette pdf_png_do_expand_palette -#define png_do_gamma pdf_png_do_gamma -#define png_do_gray_to_rgb pdf_png_do_gray_to_rgb -#define png_do_read_filler pdf_png_do_read_filler -#define png_do_read_intrapixel pdf_png_do_read_intrapixel -#define png_do_read_invert_alpha pdf_png_do_read_invert_alpha -#define png_do_read_swap_alpha pdf_png_do_read_swap_alpha -#define png_do_read_transformations pdf_png_do_read_transformations -#define png_do_rgb_to_gray pdf_png_do_rgb_to_gray -#define png_do_unpack pdf_png_do_unpack -#define png_do_unshift pdf_png_do_unshift - -/* Note: function name shortened to facilitate porting */ -#define png_init_read_transformations pdf_png_init_read_transforms - -#define png_read_transform_info pdf_png_read_transform_info -#define png_set_background pdf_png_set_background -#define png_set_crc_action pdf_png_set_crc_action -#define png_set_dither pdf_png_set_dither -#define png_set_expand pdf_png_set_expand -#define png_set_gamma pdf_png_set_gamma -#define png_set_gray_1_2_4_to_8 pdf_png_set_gray_1_2_4_to_8 -#define png_set_gray_to_rgb pdf_png_set_gray_to_rgb -#define png_set_palette_to_rgb pdf_png_set_palette_to_rgb - -/* Note: function name shortened to facilitate porting */ -#define png_set_read_user_transform_fn pdf_png_set_read_user_trans_fn - -#define png_set_rgb_to_gray pdf_png_set_rgb_to_gray -#define png_set_rgb_to_gray_fixed pdf_png_set_rgb_to_gray_fixed -#define png_set_strip_16 pdf_png_set_strip_16 -#define png_set_strip_alpha pdf_png_set_strip_alpha -#define png_set_tRNS_to_alpha pdf_png_set_tRNS_to_alpha -#define png_create_struct pdf_png_create_struct -#define png_create_struct_2 pdf_png_create_struct_2 -#define png_destroy_struct pdf_png_destroy_struct -#define png_destroy_struct_2 pdf_png_destroy_struct_2 -#define png_free pdf_png_free -#define png_free_default pdf_png_free_default -#define png_get_mem_ptr pdf_png_get_mem_ptr -#define png_malloc pdf_png_malloc -#define png_malloc_default pdf_png_malloc_default -#define png_malloc_warn pdf_png_malloc_warn -#define png_memcpy_check pdf_png_memcpy_check -#define png_memset_check pdf_png_memset_check -#define png_set_mem_fn pdf_png_set_mem_fn -#define png_chunk_error pdf_png_chunk_error -#define png_chunk_warning pdf_png_chunk_warning -#define png_error pdf_png_error -#define png_get_error_ptr pdf_png_get_error_ptr -#define png_set_error_fn pdf_png_set_error_fn -#define png_set_strip_error_numbers pdf_png_set_strip_error_numbers -#define png_warning pdf_png_warning -#endif /* PNG_PREFIX */ - -/* This is the size of the compression buffer, and thus the size of - * an IDAT chunk. Make this whatever size you feel is best for your - * machine. One of these will be allocated per png_struct. When this - * is full, it writes the data to the disk, and does some other - * calculations. Making this an extremely small size will slow - * the library down, but you may want to experiment to determine - * where it becomes significant, if you are concerned with memory - * usage. Note that zlib allocates at least 32Kb also. For readers, - * this describes the size of the buffer available to read the data in. - * Unless this gets smaller than the size of a row (compressed), - * it should not make much difference how big this is. - */ - -#ifndef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 8192 -#endif - -/* Enable if you want a write-only libpng */ - -#ifndef PNG_NO_READ_SUPPORTED -# define PNG_READ_SUPPORTED -#endif - -/* Enable if you want a read-only libpng */ - -#ifndef PNG_NO_WRITE_SUPPORTED -# define PNG_WRITE_SUPPORTED -#endif - -/* Enabled by default in 1.2.0. You can disable this if you don't need to - support PNGs that are embedded in MNG datastreams */ -#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) -# ifndef PNG_MNG_FEATURES_SUPPORTED -# define PNG_MNG_FEATURES_SUPPORTED -# endif -#endif - -#ifndef PNG_NO_FLOATING_POINT_SUPPORTED -# ifndef PNG_FLOATING_POINT_SUPPORTED -# define PNG_FLOATING_POINT_SUPPORTED -# endif -#endif - -/* If you are running on a machine where you cannot allocate more - * than 64K of memory at once, uncomment this. While libpng will not - * normally need that much memory in a chunk (unless you load up a very - * large file), zlib needs to know how big of a chunk it can use, and - * libpng thus makes sure to check any memory allocation to verify it - * will fit into memory. -#define PNG_MAX_MALLOC_64K - */ -#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) -# define PNG_MAX_MALLOC_64K -#endif - -/* Special munging to support doing things the 'cygwin' way: - * 'Normal' png-on-win32 defines/defaults: - * PNG_BUILD_DLL -- building dll - * PNG_USE_DLL -- building an application, linking to dll - * (no define) -- building static library, or building an - * application and linking to the static lib - * 'Cygwin' defines/defaults: - * PNG_BUILD_DLL -- (ignored) building the dll - * (no define) -- (ignored) building an application, linking to the dll - * PNG_STATIC -- (ignored) building the static lib, or building an - * application that links to the static lib. - * ALL_STATIC -- (ignored) building various static libs, or building an - * application that links to the static libs. - * Thus, - * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and - * this bit of #ifdefs will define the 'correct' config variables based on - * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but - * unnecessary. - * - * Also, the precedence order is: - * ALL_STATIC (since we can't #undef something outside our namespace) - * PNG_BUILD_DLL - * PNG_STATIC - * (nothing) == PNG_USE_DLL - * - * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent - * of auto-import in binutils, we no longer need to worry about - * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, - * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes - * to __declspec() stuff. However, we DO need to worry about - * PNG_BUILD_DLL and PNG_STATIC because those change some defaults - * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. - */ -#if defined(__CYGWIN__) -# if defined(ALL_STATIC) -# if defined(PNG_BUILD_DLL) -# undef PNG_BUILD_DLL -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# if !defined(PNG_STATIC) -# define PNG_STATIC -# endif -# else -# if defined (PNG_BUILD_DLL) -# if defined(PNG_STATIC) -# undef PNG_STATIC -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# else -# if defined(PNG_STATIC) -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# else -# if !defined(PNG_USE_DLL) -# define PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# endif -# endif -# endif -#endif - -/* This protects us against compilers that run on a windowing system - * and thus don't have or would rather us not use the stdio types: - * stdin, stdout, and stderr. The only one currently used is stderr - * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will - * prevent these from being compiled and used. #defining PNG_NO_STDIO - * will also prevent these, plus will prevent the entire set of stdio - * macros and functions (FILE *, printf, etc.) from being compiled and used, - * unless (PNG_DEBUG > 0) has been #defined. - * - * #define PNG_NO_CONSOLE_IO - * #define PNG_NO_STDIO - */ - -#if defined(_WIN32_WCE) -# include - /* Console I/O functions are not supported on WindowsCE */ -# define PNG_NO_CONSOLE_IO -# ifdef PNG_DEBUG -# undef PNG_DEBUG -# endif -#endif - -#ifdef PNG_BUILD_DLL -# ifndef PNG_CONSOLE_IO_SUPPORTED -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# endif -#endif - -# ifdef PNG_NO_STDIO -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# ifdef PNG_DEBUG -# if (PNG_DEBUG > 0) -# include -# endif -# endif -# else -# if !defined(_WIN32_WCE) -/* "stdio.h" functions are not supported on WindowsCE */ -# include -# endif -# endif - -/* This macro protects us against machines that don't have function - * prototypes (ie K&R style headers). If your compiler does not handle - * function prototypes, define this macro and use the included ansi2knr. - * I've always been able to use _NO_PROTO as the indicator, but you may - * need to drag the empty declaration out in front of here, or change the - * ifdef to suit your own needs. - */ -#ifndef PNGARG - -#ifdef OF /* zlib prototype munger */ -# define PNGARG(arglist) OF(arglist) -#else - -#ifdef _NO_PROTO -# define PNGARG(arglist) () -# ifndef PNG_TYPECAST_NULL -# define PNG_TYPECAST_NULL -# endif -#else -# define PNGARG(arglist) arglist -#endif /* _NO_PROTO */ - -#endif /* OF */ - -#endif /* PNGARG */ - -/* Try to determine if we are compiling on a Mac. Note that testing for - * just __MWERKS__ is not good enough, because the Codewarrior is now used - * on non-Mac platforms. - */ -#ifndef MACOS -# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ - defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) -# define MACOS -# endif -#endif - -/* enough people need this for various reasons to include it here */ -/* PDFlib GmbH: not needed -#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) -# include -#endif -*/ - -#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) -# define PNG_SETJMP_SUPPORTED -#endif - -#ifdef PNG_SETJMP_SUPPORTED -/* This is an attempt to force a single setjmp behaviour on Linux. If - * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. - */ - -# ifdef __linux__ -# ifdef _BSD_SOURCE -# define PNG_SAVE_BSD_SOURCE -# undef _BSD_SOURCE -# endif -/* PDFlib GmbH: not necceary -# ifdef _SETJMP_H - __png.h__ already includes setjmp.h; - __dont__ include it again.; -# endif -*/ -# endif /* __linux__ */ - - /* include setjmp.h for error handling */ -# include - -# ifdef __linux__ -# ifdef PNG_SAVE_BSD_SOURCE -# define _BSD_SOURCE -# undef PNG_SAVE_BSD_SOURCE -# endif -# endif /* __linux__ */ -#endif /* PNG_SETJMP_SUPPORTED */ - -#ifdef BSD -# include -#else -# include -#endif - -/* Other defines for things like memory and the like can go here. */ -#ifdef PNG_INTERNAL - -#include - -/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which - * aren't usually used outside the library (as far as I know), so it is - * debatable if they should be exported at all. In the future, when it is - * possible to have run-time registry of chunk-handling functions, some of - * these will be made available again. -#define PNG_EXTERN extern - */ -#define PNG_EXTERN - -/* Other defines specific to compilers can go here. Try to keep - * them inside an appropriate ifdef/endif pair for portability. - */ - -#if defined(PNG_FLOATING_POINT_SUPPORTED) -# if defined(MACOS) - /* We need to check that hasn't already been included earlier - * as it seems it doesn't agree with , yet we should really use - * if possible. - */ -# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) -# include -# endif -# else -# include -# endif -# if defined(_AMIGA) && defined(__SASC) && defined(_M68881) - /* Amiga SAS/C: We must include builtin FPU functions when compiling using - * MATH=68881 - */ -# include -# endif -#endif - -/* Codewarrior on NT has linking problems without this. */ -#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) -# define PNG_ALWAYS_EXTERN -#endif - -/* For some reason, Borland C++ defines memcmp, etc. in mem.h, not - * stdlib.h like it should (I think). Or perhaps this is a C++ - * "feature"? - */ -#ifdef __TURBOC__ -# include -# include "alloc.h" -#endif - -#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ - defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) -# include -#endif - -/* This controls how fine the dithering gets. As this allocates - * a largish chunk of memory (32K), those who are not as concerned - * with dithering quality can decrease some or all of these. - */ -#ifndef PNG_DITHER_RED_BITS -# define PNG_DITHER_RED_BITS 5 -#endif -#ifndef PNG_DITHER_GREEN_BITS -# define PNG_DITHER_GREEN_BITS 5 -#endif -#ifndef PNG_DITHER_BLUE_BITS -# define PNG_DITHER_BLUE_BITS 5 -#endif - -/* This controls how fine the gamma correction becomes when you - * are only interested in 8 bits anyway. Increasing this value - * results in more memory being used, and more pow() functions - * being called to fill in the gamma tables. Don't set this value - * less then 8, and even that may not work (I haven't tested it). - */ - -#ifndef PNG_MAX_GAMMA_8 -# define PNG_MAX_GAMMA_8 11 -#endif - -/* This controls how much a difference in gamma we can tolerate before - * we actually start doing gamma conversion. - */ -#ifndef PNG_GAMMA_THRESHOLD -# define PNG_GAMMA_THRESHOLD 0.05 -#endif - -#endif /* PNG_INTERNAL */ - -/* The following uses const char * instead of char * for error - * and warning message functions, so some compilers won't complain. - * If you do not want to use const, define PNG_NO_CONST here. - */ - -#ifndef PNG_NO_CONST -# define PNG_CONST const -#else -# define PNG_CONST -#endif - -/* The following defines give you the ability to remove code from the - * library that you will not be using. I wish I could figure out how to - * automate this, but I can't do that without making it seriously hard - * on the users. So if you are not using an ability, change the #define - * to and #undef, and that part of the library will not be compiled. If - * your linker can't find a function, you may want to make sure the - * ability is defined here. Some of these depend upon some others being - * defined. I haven't figured out all the interactions here, so you may - * have to experiment awhile to get everything to compile. If you are - * creating or using a shared library, you probably shouldn't touch this, - * as it will affect the size of the structures, and this will cause bad - * things to happen if the library and/or application ever change. - */ - -/* Any features you will not be using can be undef'ed here */ - -/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user - * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS - * on the compile line, then pick and choose which ones to define without - * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED - * if you only want to have a png-compliant reader/writer but don't need - * any of the extra transformations. This saves about 80 kbytes in a - * typical installation of the library. (PNG_NO_* form added in version - * 1.0.1c, for consistency) - */ - -/* The size of the png_text structure changed in libpng-1.0.6 when - * iTXt is supported. It is turned off by default, to support old apps - * that malloc the png_text structure instead of calling png_set_text() - * and letting libpng malloc it. It will be turned on by default in - * libpng-1.3.0. - */ - -#ifndef PNG_iTXt_SUPPORTED -# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) -# define PNG_NO_READ_iTXt -# endif -# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) -# define PNG_NO_WRITE_iTXt -# endif -#endif - -/* The following support, added after version 1.0.0, can be turned off here en - * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility - * with old applications that require the length of png_struct and png_info - * to remain unchanged. - */ - -#ifdef PNG_LEGACY_SUPPORTED -# define PNG_NO_FREE_ME -# define PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_NO_READ_USER_CHUNKS -# define PNG_NO_READ_iCCP -# define PNG_NO_WRITE_iCCP -# define PNG_NO_READ_iTXt -# define PNG_NO_WRITE_iTXt -# define PNG_NO_READ_sCAL -# define PNG_NO_WRITE_sCAL -# define PNG_NO_READ_sPLT -# define PNG_NO_WRITE_sPLT -# define PNG_NO_INFO_IMAGE -# define PNG_NO_READ_RGB_TO_GRAY -# define PNG_NO_READ_USER_TRANSFORM -# define PNG_NO_WRITE_USER_TRANSFORM -# define PNG_NO_USER_MEM -# define PNG_NO_READ_EMPTY_PLTE -# define PNG_NO_MNG_FEATURES -# define PNG_NO_FIXED_POINT_SUPPORTED -#endif - -/* Ignore attempt to turn off both floating and fixed point support */ -#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ - !defined(PNG_NO_FIXED_POINT_SUPPORTED) -# define PNG_FIXED_POINT_SUPPORTED -#endif - -#ifndef PNG_NO_FREE_ME -# define PNG_FREE_ME_SUPPORTED -#endif - -#if defined(PNG_READ_SUPPORTED) - -#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_TRANSFORMS) -# define PNG_READ_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_READ_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_READ_EXPAND -# define PNG_READ_EXPAND_SUPPORTED -# endif -# ifndef PNG_NO_READ_SHIFT -# define PNG_READ_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACK -# define PNG_READ_PACK_SUPPORTED -# endif -# ifndef PNG_NO_READ_BGR -# define PNG_READ_BGR_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP -# define PNG_READ_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACKSWAP -# define PNG_READ_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT -# define PNG_READ_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_READ_DITHER -# define PNG_READ_DITHER_SUPPORTED -# endif -# ifndef PNG_NO_READ_BACKGROUND -# define PNG_READ_BACKGROUND_SUPPORTED -# endif -# ifndef PNG_NO_READ_16_TO_8 -# define PNG_READ_16_TO_8_SUPPORTED -# endif -# ifndef PNG_NO_READ_FILLER -# define PNG_READ_FILLER_SUPPORTED -# endif -# ifndef PNG_NO_READ_GAMMA -# define PNG_READ_GAMMA_SUPPORTED -# endif -# ifndef PNG_NO_READ_GRAY_TO_RGB -# define PNG_READ_GRAY_TO_RGB_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP_ALPHA -# define PNG_READ_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT_ALPHA -# define PNG_READ_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_STRIP_ALPHA -# define PNG_READ_STRIP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_USER_TRANSFORM -# define PNG_READ_USER_TRANSFORM_SUPPORTED -# endif -# ifndef PNG_NO_READ_RGB_TO_GRAY -# define PNG_READ_RGB_TO_GRAY_SUPPORTED -# endif -#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ - -#if !defined(PNG_NO_PROGRESSIVE_READ) && \ - !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive */ -# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ -#endif /* about interlacing capability! You'll */ - /* still have interlacing unless you change the following line: */ - -#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */ - -#ifndef PNG_NO_READ_COMPOSITE_NODIV -# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ -# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ -# endif -#endif - -/* Deprecated, will be removed from version 2.0.0. - Use PNG_MNG_FEATURES_SUPPORTED instead. */ -#ifndef PNG_NO_READ_EMPTY_PLTE -# define PNG_READ_EMPTY_PLTE_SUPPORTED -#endif - -#endif /* PNG_READ_SUPPORTED */ - -#if defined(PNG_WRITE_SUPPORTED) - -# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_TRANSFORMS) -# define PNG_WRITE_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_WRITE_SHIFT -# define PNG_WRITE_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACK -# define PNG_WRITE_PACK_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_BGR -# define PNG_WRITE_BGR_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_SWAP -# define PNG_WRITE_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACKSWAP -# define PNG_WRITE_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT -# define PNG_WRITE_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_FILLER -# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ -# endif -# ifndef PNG_NO_WRITE_SWAP_ALPHA -# define PNG_WRITE_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT_ALPHA -# define PNG_WRITE_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_USER_TRANSFORM -# define PNG_WRITE_USER_TRANSFORM_SUPPORTED -# endif -#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -# ifndef PNG_NO_USER_TRANSFORM_PTR -# define PNG_USER_TRANSFORM_PTR_SUPPORTED -# endif -#endif - -#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant - encoders, but can cause trouble - if left undefined */ - -#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ - defined(PNG_FLOATING_POINT_SUPPORTED) -# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#endif - -#ifndef PNG_1_0_X -#ifndef PNG_NO_ERROR_NUMBERS -#define PNG_ERROR_NUMBERS_SUPPORTED -#endif -#endif /* PNG_1_0_X */ - -#ifndef PNG_NO_WRITE_FLUSH -# define PNG_WRITE_FLUSH_SUPPORTED -#endif - -/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ -#ifndef PNG_NO_WRITE_EMPTY_PLTE -# define PNG_WRITE_EMPTY_PLTE_SUPPORTED -#endif - -#endif /* PNG_WRITE_SUPPORTED */ - -#ifndef PNG_NO_STDIO -# define PNG_TIME_RFC1123_SUPPORTED -#endif - -/* This adds extra functions in pngget.c for accessing data from the - * info pointer (added in version 0.99) - * png_get_image_width() - * png_get_image_height() - * png_get_bit_depth() - * png_get_color_type() - * png_get_compression_type() - * png_get_filter_type() - * png_get_interlace_type() - * png_get_pixel_aspect_ratio() - * png_get_pixels_per_meter() - * png_get_x_offset_pixels() - * png_get_y_offset_pixels() - * png_get_x_offset_microns() - * png_get_y_offset_microns() - */ -#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) -# define PNG_EASY_ACCESS_SUPPORTED -#endif - -/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 - even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */ -#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) -# ifndef PNG_ASSEMBLER_CODE_SUPPORTED -# define PNG_ASSEMBLER_CODE_SUPPORTED -# endif -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_MMX_CODE_SUPPORTED -# endif -#endif - -/* If you are sure that you don't need thread safety and you are compiling - with PNG_USE_PNGCCRD for an MMX application, you can define this for - faster execution. See pnggccrd.c. -#define PNG_THREAD_UNSAFE_OK -*/ - -#if !defined(PNG_1_0_X) -#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) -# define PNG_USER_MEM_SUPPORTED -#endif -#endif /* PNG_1_0_X */ - -/* These are currently experimental features, define them if you want */ - -/* very little testing */ -/* -#ifdef PNG_READ_SUPPORTED -# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# endif -#endif -*/ - -/* This is only for PowerPC big-endian and 680x0 systems */ -/* some testing */ -/* -#ifdef PNG_READ_SUPPORTED -# ifndef PNG_PNG_READ_BIG_ENDIAN_SUPPORTED -# define PNG_READ_BIG_ENDIAN_SUPPORTED -# endif -#endif -*/ - -/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ -/* -#define PNG_NO_POINTER_INDEXING -*/ - -/* These functions are turned off by default, as they will be phased out. */ -/* -#define PNG_USELESS_TESTS_SUPPORTED -#define PNG_CORRECT_PALETTE_SUPPORTED -*/ - -/* Any chunks you are not interested in, you can undef here. The - * ones that allocate memory may be expecially important (hIST, - * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info - * a bit smaller. - */ - -#if defined(PNG_READ_SUPPORTED) && \ - !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_ANCILLARY_CHUNKS) -# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#if defined(PNG_WRITE_SUPPORTED) && \ - !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) -# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_READ_TEXT -# define PNG_NO_READ_iTXt -# define PNG_NO_READ_tEXt -# define PNG_NO_READ_zTXt -#endif -#ifndef PNG_NO_READ_bKGD -# define PNG_READ_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -#endif -#ifndef PNG_NO_READ_cHRM -# define PNG_READ_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -#endif -#ifndef PNG_NO_READ_gAMA -# define PNG_READ_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -#endif -#ifndef PNG_NO_READ_hIST -# define PNG_READ_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -#endif -#ifndef PNG_NO_READ_iCCP -# define PNG_READ_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -#endif -#ifndef PNG_NO_READ_iTXt -# ifndef PNG_READ_iTXt_SUPPORTED -# define PNG_READ_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_READ_oFFs -# define PNG_READ_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -#endif -#ifndef PNG_NO_READ_pCAL -# define PNG_READ_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_sCAL -# define PNG_READ_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_pHYs -# define PNG_READ_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -#endif -#ifndef PNG_NO_READ_sBIT -# define PNG_READ_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sPLT -# define PNG_READ_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sRGB -# define PNG_READ_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -#endif -#ifndef PNG_NO_READ_tEXt -# define PNG_READ_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_tIME -# define PNG_READ_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -#endif -#ifndef PNG_NO_READ_tRNS -# define PNG_READ_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -#endif -#ifndef PNG_NO_READ_zTXt -# define PNG_READ_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -#endif -#if !defined(PNG_NO_READ_USER_CHUNKS) && \ - defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) -# define PNG_READ_USER_CHUNKS_SUPPORTED -# define PNG_USER_CHUNKS_SUPPORTED -# ifdef PNG_NO_READ_UNKNOWN_CHUNKS -# undef PNG_NO_READ_UNKNOWN_CHUNKS -# endif -# ifdef PNG_NO_HANDLE_AS_UNKNOWN -# undef PNG_NO_HANDLE_AS_UNKNOWN -# endif -#endif -#ifndef PNG_NO_READ_OPT_PLTE -# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ -#endif /* optional PLTE chunk in RGB and RGBA images */ -#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ - defined(PNG_READ_zTXt_SUPPORTED) -# define PNG_READ_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -#endif - -#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ - -#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_WRITE_TEXT -# define PNG_NO_WRITE_iTXt -# define PNG_NO_WRITE_tEXt -# define PNG_NO_WRITE_zTXt -#endif -#ifndef PNG_NO_WRITE_bKGD -# define PNG_WRITE_bKGD_SUPPORTED -# ifndef PNG_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_cHRM -# define PNG_WRITE_cHRM_SUPPORTED -# ifndef PNG_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_gAMA -# define PNG_WRITE_gAMA_SUPPORTED -# ifndef PNG_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_hIST -# define PNG_WRITE_hIST_SUPPORTED -# ifndef PNG_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iCCP -# define PNG_WRITE_iCCP_SUPPORTED -# ifndef PNG_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iTXt -# ifndef PNG_WRITE_iTXt_SUPPORTED -# define PNG_WRITE_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_oFFs -# define PNG_WRITE_oFFs_SUPPORTED -# ifndef PNG_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pCAL -# define PNG_WRITE_pCAL_SUPPORTED -# ifndef PNG_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sCAL -# define PNG_WRITE_sCAL_SUPPORTED -# ifndef PNG_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pHYs -# define PNG_WRITE_pHYs_SUPPORTED -# ifndef PNG_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sBIT -# define PNG_WRITE_sBIT_SUPPORTED -# ifndef PNG_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sPLT -# define PNG_WRITE_sPLT_SUPPORTED -# ifndef PNG_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sRGB -# define PNG_WRITE_sRGB_SUPPORTED -# ifndef PNG_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tEXt -# define PNG_WRITE_tEXt_SUPPORTED -# ifndef PNG_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tIME -# define PNG_WRITE_tIME_SUPPORTED -# ifndef PNG_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tRNS -# define PNG_WRITE_tRNS_SUPPORTED -# ifndef PNG_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_zTXt -# define PNG_WRITE_zTXt_SUPPORTED -# ifndef PNG_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -# endif -#endif -#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ - defined(PNG_WRITE_zTXt_SUPPORTED) -# define PNG_WRITE_TEXT_SUPPORTED -# ifndef PNG_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -# endif -#endif - -#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ - -/* Turn this off to disable png_read_png() and - * png_write_png() and leave the row_pointers member - * out of the info structure. - */ -#ifndef PNG_NO_INFO_IMAGE -# define PNG_INFO_IMAGE_SUPPORTED -#endif - -/* need the time information for reading tIME chunks */ -#if defined(PNG_tIME_SUPPORTED) -# if !defined(_WIN32_WCE) - /* "time.h" functions are not supported on WindowsCE */ -# include -# endif -#endif - -/* Some typedefs to get us started. These should be safe on most of the - * common platforms. The typedefs should be at least as large as the - * numbers suggest (a png_uint_32 must be at least 32 bits long), but they - * don't have to be exactly that size. Some compilers dislike passing - * unsigned shorts as function parameters, so you may be better off using - * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may - * want to have unsigned int for png_uint_32 instead of unsigned long. - */ - -typedef unsigned long png_uint_32; -typedef long png_int_32; -typedef unsigned short png_uint_16; -typedef short png_int_16; -typedef unsigned char png_byte; - -/* This is usually size_t. It is typedef'ed just in case you need it to - change (I'm not sure if you will or not, so I thought I'd be safe) */ -typedef size_t png_size_t; - -/* The following is needed for medium model support. It cannot be in the - * PNG_INTERNAL section. Needs modification for other compilers besides - * MSC. Model independent support declares all arrays and pointers to be - * large using the far keyword. The zlib version used must also support - * model independent data. As of version zlib 1.0.4, the necessary changes - * have been made in zlib. The USE_FAR_KEYWORD define triggers other - * changes that are needed. (Tim Wegner) - */ - -/* Separate compiler dependencies (problem here is that zlib.h always - defines FAR. (SJT) */ -#ifdef __BORLANDC__ -# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) -# define LDATA 1 -# else -# define LDATA 0 -# endif - /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ -# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) -# define PNG_MAX_MALLOC_64K -# if (LDATA != 1) -# ifndef FAR -# define FAR __far -# endif -# define USE_FAR_KEYWORD -# endif /* LDATA != 1 */ - /* Possibly useful for moving data out of default segment. - * Uncomment it if you want. Could also define FARDATA as - * const if your compiler supports it. (SJT) -# define FARDATA FAR - */ -# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ -#endif /* __BORLANDC__ */ - - -/* Suggest testing for specific compiler first before testing for - * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, - * making reliance oncertain keywords suspect. (SJT) - */ - -/* MSC Medium model */ -#if defined(FAR) -# if defined(M_I86MM) -# define USE_FAR_KEYWORD -# define FARDATA FAR -# include -# endif -#endif - -/* SJT: default case */ -#ifndef FAR -# define FAR -#endif - -/* At this point FAR is always defined */ -#ifndef FARDATA -# define FARDATA -#endif - -/* Typedef for floating-point numbers that are converted - to fixed-point with a multiple of 100,000, e.g., int_gamma */ -typedef png_int_32 png_fixed_point; - -/* Add typedefs for pointers */ -typedef void FAR * png_voidp; -typedef png_byte FAR * png_bytep; -typedef png_uint_32 FAR * png_uint_32p; -typedef png_int_32 FAR * png_int_32p; -typedef png_uint_16 FAR * png_uint_16p; -typedef png_int_16 FAR * png_int_16p; -typedef PNG_CONST char FAR * png_const_charp; -typedef char FAR * png_charp; -typedef png_fixed_point FAR * png_fixed_point_p; - -#ifndef PNG_NO_STDIO -/* PDFlib GmbH: not used -#if defined(_WIN32_WCE) -typedef HANDLE png_FILE_p; -#else -*/ -typedef FILE * png_FILE_p; -/* #endif PDFlib GmbH: */ -#endif - -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * png_doublep; -#endif - -/* Pointers to pointers; i.e. arrays */ -typedef png_byte FAR * FAR * png_bytepp; -typedef png_uint_32 FAR * FAR * png_uint_32pp; -typedef png_int_32 FAR * FAR * png_int_32pp; -typedef png_uint_16 FAR * FAR * png_uint_16pp; -typedef png_int_16 FAR * FAR * png_int_16pp; -typedef PNG_CONST char FAR * FAR * png_const_charpp; -typedef char FAR * FAR * png_charpp; -typedef png_fixed_point FAR * FAR * png_fixed_point_pp; -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * FAR * png_doublepp; -#endif - -/* Pointers to pointers to pointers; i.e., pointer to array */ -typedef char FAR * FAR * FAR * png_charppp; - -/* libpng typedefs for types in zlib. If zlib changes - * or another compression library is used, then change these. - * Eliminates need to change all the source files. - */ -typedef charf * png_zcharp; -typedef charf * FAR * png_zcharpp; -typedef z_stream FAR * png_zstreamp; - -/* - * Define PNG_BUILD_DLL if the module being built is a Windows - * LIBPNG DLL. - * - * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. - * It is equivalent to Microsoft predefined macro _DLL that is - * automatically defined when you compile using the share - * version of the CRT (C Run-Time library) - * - * The cygwin mods make this behavior a little different: - * Define PNG_BUILD_DLL if you are building a dll for use with cygwin - * Define PNG_STATIC if you are building a static library for use with cygwin, - * -or- if you are building an application that you want to link to the - * static library. - * PNG_USE_DLL is defined by default (no user action needed) unless one of - * the other flags is defined. - */ - -#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) -# define PNG_DLL -#endif -/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. - * When building a static lib, default to no GLOBAL ARRAYS, but allow - * command-line override - */ -#if defined(__CYGWIN__) -# if !defined(PNG_STATIC) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -# else -# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# endif -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -#endif - -/* Do not use global arrays (helps with building DLL's) - * They are no longer used in libpng itself, since version 1.0.5c, - * but might be required for some pre-1.0.5c applications. - */ -#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# if defined(PNG_NO_GLOBAL_ARRAYS) || (defined(__GNUC__) && defined(PNG_DLL)) -# define PNG_USE_LOCAL_ARRAYS -# else -# define PNG_USE_GLOBAL_ARRAYS -# endif -#endif - -#if defined(__CYGWIN__) -# undef PNGAPI -# define PNGAPI __cdecl -# undef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", - * you may get warnings regarding the linkage of png_zalloc and png_zfree. - * Don't ignore those warnings; you must also reset the default calling - * convention in your compiler to match your PNGAPI, and you must build - * zlib and your applications the same way you build libpng. - */ - -#ifndef PNGAPI - -#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) -# ifndef PNG_NO_MODULEDEF -# define PNG_NO_MODULEDEF -# endif -#endif - -#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) -# define PNG_IMPEXP -#endif - -#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ - (( defined(_Windows) || defined(_WINDOWS) || \ - defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) - -# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) -# define PNGAPI __cdecl -# else -/* PDFlib GmbH: new */ -# if defined(_WIN32_WCE) -# define PNGAPI /* */ -# elif !defined(OS390) && !defined(MVS) -# define PNGAPI __cdecl -# else -# define PNGAPI /* */ -# endif -/* PDFlib GmbH: end */ -/* # define PNGAPI _cdecl -PDFlib GmbH: old */ -# endif - -# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ - 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) -# define PNG_IMPEXP -# endif - -# if !defined(PNG_IMPEXP) - -# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol -# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol - - /* Borland/Microsoft */ -# if defined(_MSC_VER) || defined(__BORLANDC__) -# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) -# define PNG_EXPORT PNG_EXPORT_TYPE1 -# else -# define PNG_EXPORT PNG_EXPORT_TYPE2 -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __export -# else -# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in - VC++ */ -# endif /* Exists in Borland C++ for - C++ classes (== huge) */ -# endif -# endif - -# if !defined(PNG_IMPEXP) -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __declspec(dllexport) -# else -# define PNG_IMPEXP __declspec(dllimport) -# endif -# endif -# endif /* PNG_IMPEXP */ -#else /* !(DLL || non-cygwin WINDOWS) */ -# if (defined(__IBMC__) || defined(IBMCPP__)) && defined(__OS2__) -# define PNGAPI _System -# define PNG_IMPEXP -# else -# if 0 /* ... other platforms, with other meanings */ -# else -# define PNGAPI -# define PNG_IMPEXP -# endif -# endif -#endif -#endif - -#ifndef PNGAPI -# define PNGAPI -#endif -#ifndef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -#ifndef PNG_EXPORT -# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol -#endif - -#ifdef PNG_USE_GLOBAL_ARRAYS -# ifndef PNG_EXPORT_VAR -# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type -# endif -#endif - -/* User may want to use these so they are not in PNG_INTERNAL. Any library - * functions that are passed far data must be model independent. - */ - -#ifndef PNG_ABORT -# define PNG_ABORT() abort() -#endif - -#ifdef PNG_SETJMP_SUPPORTED -# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) -#else -# define png_jmpbuf(png_ptr) \ - (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) -#endif - -#if defined(USE_FAR_KEYWORD) /* memory model independent fns */ -/* use this to make far-to-near assignments */ -# define CHECK 1 -# define NOCHECK 0 -# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) -# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) -# define png_strcpy _fstrcpy -# define png_strlen _fstrlen -# define png_memcmp _fmemcmp /* SJT: added */ -# define png_memcpy _fmemcpy -# define png_memset _fmemset -#else /* use the usual functions */ -# define CVT_PTR(ptr) (ptr) -# define CVT_PTR_NOCHECK(ptr) (ptr) -# define png_strcpy strcpy -# define png_strlen strlen -# define png_memcmp memcmp /* SJT: added */ -# define png_memcpy memcpy -# define png_memset memset -#endif -/* End of memory model independent support */ - -/* Just a little check that someone hasn't tried to define something - * contradictory. - */ -#if (PNG_ZBUF_SIZE > 65536) && defined(PNG_MAX_MALLOC_64K) -# undef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 65536 -#endif - -#ifdef PNG_READ_SUPPORTED -/* Prior to libpng-1.0.9, this block was in pngasmrd.h */ -#if defined(PNG_INTERNAL) - -/* These are the default thresholds before the MMX code kicks in; if either - * rowbytes or bitdepth is below the threshold, plain C code is used. These - * can be overridden at runtime via the png_set_mmx_thresholds() call in - * libpng 1.2.0 and later. The values below were chosen by Intel. - */ - -#ifndef PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT -# define PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT 128 /* >= */ -#endif -#ifndef PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT -# define PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT 9 /* >= */ -#endif - -/* Set this in the makefile for VC++ on Pentium, not here. */ -/* Platform must be Pentium. Makefile must assemble and load pngvcrd.c . - * MMX will be detected at run time and used if present. - */ -#ifdef PNG_USE_PNGVCRD -# define PNG_HAVE_ASSEMBLER_COMBINE_ROW -# define PNG_HAVE_ASSEMBLER_READ_INTERLACE -# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW -#endif - -/* Set this in the makefile for gcc/as on Pentium, not here. */ -/* Platform must be Pentium. Makefile must assemble and load pnggccrd.c . - * MMX will be detected at run time and used if present. - */ -#ifdef PNG_USE_PNGGCCRD -# define PNG_HAVE_ASSEMBLER_COMBINE_ROW -# define PNG_HAVE_ASSEMBLER_READ_INTERLACE -# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW -#endif -/* - see pnggccrd.c for info about what is currently enabled */ - -#endif /* PNG_INTERNAL */ -#endif /* PNG_READ_SUPPORTED */ - -#endif /* PNGCONF_H */ - diff --git a/src/libs/pdflib/libs/png/pngerror.c b/src/libs/pdflib/libs/png/pngerror.c deleted file mode 100644 index 2732f1cbd7..0000000000 --- a/src/libs/pdflib/libs/png/pngerror.c +++ /dev/null @@ -1,292 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngerror.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngerror.c - stub functions for i/o and memory allocation - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file provides a location for all error handling. Users who - * need special error handling are expected to write replacement functions - * and use png_set_error_fn() to use those functions. See the instructions - * at each function. - */ - -#define PNG_INTERNAL -#include "png.h" - -static void /* PRIVATE */ -png_default_error PNGARG((png_structp png_ptr, - png_const_charp error_message)); -static void /* PRIVATE */ -png_default_warning PNGARG((png_structp png_ptr, - png_const_charp warning_message)); - -/* This function is called whenever there is a fatal error. This function - * should not be changed. If there is a need to handle errors differently, - * you should supply a replacement error function and use png_set_error_fn() - * to replace the error function at run-time. - */ -void PNGAPI -png_error(png_structp png_ptr, png_const_charp error_message) -{ -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - char msg[16]; - if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) - { - int offset = 0; - if (*error_message == '#') - { - for (offset=1; offset<15; offset++) - if (*(error_message+offset) == ' ') - break; - if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) - { - int i; - for (i=0; iflags&PNG_FLAG_STRIP_ERROR_TEXT) - { - msg[0]='0'; - msg[1]='\0'; - error_message=msg; - } - } - } -#endif - if (png_ptr->error_fn != NULL) - (*(png_ptr->error_fn))(png_ptr, error_message); - - /* if the following returns or doesn't exist, use the default function, - which will not return */ - png_default_error(png_ptr, error_message); -} - -/* This function is called whenever there is a non-fatal error. This function - * should not be changed. If there is a need to handle warnings differently, - * you should supply a replacement warning function and use - * png_set_error_fn() to replace the warning function at run-time. - */ -void PNGAPI -png_warning(png_structp png_ptr, png_const_charp warning_message) -{ - int offset = 0; -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) -#endif - { - if (*warning_message == '#') - { - for (offset=1; offset<15; offset++) - if (*(warning_message+offset) == ' ') - break; - } - } - if (png_ptr->warning_fn != NULL) - (*(png_ptr->warning_fn))(png_ptr, - (png_const_charp)(warning_message+offset)); - else - png_default_warning(png_ptr, (png_const_charp)(warning_message+offset)); -} - -/* These utilities are used internally to build an error message that relates - * to the current chunk. The chunk name comes from png_ptr->chunk_name, - * this is used to prefix the message. The message is limited in length - * to 63 bytes, the name characters are output as hex digits wrapped in [] - * if the character is invalid. - */ -#define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97)) -static PNG_CONST char png_digit[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', - 'F' }; - -static void /* PRIVATE */ -png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp - error_message) -{ - int iout = 0, iin = 0; - - while (iin < 4) - { - int c = png_ptr->chunk_name[iin++]; - if (isnonalpha(c)) - { - buffer[iout++] = '['; - buffer[iout++] = png_digit[(c & 0xf0) >> 4]; - buffer[iout++] = png_digit[c & 0x0f]; - buffer[iout++] = ']'; - } - else - { - buffer[iout++] = (png_byte)c; - } - } - - if (error_message == NULL) - buffer[iout] = 0; - else - { - buffer[iout++] = ':'; - buffer[iout++] = ' '; - png_memcpy(buffer+iout, error_message, 64); - buffer[iout+63] = 0; - } -} - -void PNGAPI -png_chunk_error(png_structp png_ptr, png_const_charp error_message) -{ - char msg[18+64]; - png_format_buffer(png_ptr, msg, error_message); - png_error(png_ptr, msg); -} - -void PNGAPI -png_chunk_warning(png_structp png_ptr, png_const_charp warning_message) -{ - char msg[18+64]; - png_format_buffer(png_ptr, msg, warning_message); - png_warning(png_ptr, msg); -} - -/* This is the default error handling function. Note that replacements for - * this function MUST NOT RETURN, or the program will likely crash. This - * function is used by default, or if the program supplies NULL for the - * error function pointer in png_set_error_fn(). - */ -static void /* PRIVATE */ -png_default_error(png_structp png_ptr, png_const_charp error_message) -{ -#ifndef PNG_NO_CONSOLE_IO -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - if (*error_message == '#') - { - int offset; - char error_number[16]; - for (offset=0; offset<15; offset++) - { - error_number[offset] = *(error_message+offset+1); - if (*(error_message+offset) == ' ') - break; - } - if((offset > 1) && (offset < 15)) - { - error_number[offset-1]='\0'; - fprintf(stderr, "libpng error no. %s: %s\n", error_number, - error_message+offset); - } - else - fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset); - } - else -#endif - fprintf(stderr, "libpng error: %s\n", error_message); -#else - if (error_message) - /* make compiler happy */ ; -#endif - -#ifdef PNG_SETJMP_SUPPORTED -# ifdef USE_FAR_KEYWORD - { - jmp_buf jmpbuf; - png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf)); - longjmp(jmpbuf, 1); - } -# else - longjmp(png_ptr->jmpbuf, 1); -# endif -#else - if (png_ptr) - /* make compiler happy */ ; - PNG_ABORT(); -#endif -} - -/* This function is called when there is a warning, but the library thinks - * it can continue anyway. Replacement functions don't have to do anything - * here if you don't want them to. In the default configuration, png_ptr is - * not used, but it is passed in case it may be useful. - */ -static void /* PRIVATE */ -png_default_warning(png_structp png_ptr, png_const_charp warning_message) -{ -#ifndef PNG_NO_CONSOLE_IO -# ifdef PNG_ERROR_NUMBERS_SUPPORTED - if (*warning_message == '#') - { - int offset; - char warning_number[16]; - for (offset=0; offset<15; offset++) - { - warning_number[offset]=*(warning_message+offset+1); - if (*(warning_message+offset) == ' ') - break; - } - if((offset > 1) && (offset < 15)) - { - warning_number[offset-1]='\0'; - fprintf(stderr, "libpng warning no. %s: %s\n", warning_number, - warning_message+offset); - } - else - fprintf(stderr, "libpng warning: %s\n", warning_message); - } - else -# endif - fprintf(stderr, "libpng warning: %s\n", warning_message); -#else - if (warning_message) - /* appease compiler */ ; -#endif - if (png_ptr) - return; -} - -/* This function is called when the application wants to use another method - * of handling errors and warnings. Note that the error function MUST NOT - * return to the calling routine or serious problems will occur. The return - * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) - */ -void PNGAPI -png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warning_fn) -{ - png_ptr->error_ptr = error_ptr; - png_ptr->error_fn = error_fn; - png_ptr->warning_fn = warning_fn; -} - - -/* This function returns a pointer to the error_ptr associated with the user - * functions. The application should free any memory associated with this - * pointer before png_write_destroy and png_read_destroy are called. - */ -png_voidp PNGAPI -png_get_error_ptr(png_structp png_ptr) -{ - return ((png_voidp)png_ptr->error_ptr); -} - - -#ifdef PNG_ERROR_NUMBERS_SUPPORTED -void PNGAPI -png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) -{ - if(png_ptr != NULL) - { - png_ptr->flags &= - ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); - } -} -#endif diff --git a/src/libs/pdflib/libs/png/pngget.c b/src/libs/pdflib/libs/png/pngget.c deleted file mode 100644 index a9bd66343a..0000000000 --- a/src/libs/pdflib/libs/png/pngget.c +++ /dev/null @@ -1,928 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngget.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngget.c - retrieval of values from info struct - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - */ - -#define PNG_INTERNAL -#include "png.h" - -png_uint_32 PNGAPI -png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag) -{ - if (png_ptr != NULL && info_ptr != NULL) - return(info_ptr->valid & flag); - else - return(0); -} - -png_uint_32 PNGAPI -png_get_rowbytes(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - return(info_ptr->rowbytes); - else - return(0); -} - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -png_bytepp PNGAPI -png_get_rows(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - return(info_ptr->row_pointers); - else - return(0); -} -#endif - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* easy access to info, added in libpng-0.99 */ -png_uint_32 PNGAPI -png_get_image_width(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->width; - } - return (0); -} - -png_uint_32 PNGAPI -png_get_image_height(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->height; - } - return (0); -} - -png_byte PNGAPI -png_get_bit_depth(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->bit_depth; - } - return (0); -} - -png_byte PNGAPI -png_get_color_type(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->color_type; - } - return (0); -} - -png_byte PNGAPI -png_get_filter_type(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->filter_type; - } - return (0); -} - -png_byte PNGAPI -png_get_interlace_type(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->interlace_type; - } - return (0); -} - -png_byte PNGAPI -png_get_compression_type(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - { - return info_ptr->compression_type; - } - return (0); -} - -png_uint_32 PNGAPI -png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_pHYs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_pHYs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter"); - if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) - return (0); - else return (info_ptr->x_pixels_per_unit); - } -#else - return (0); -#endif - return (0); -} - -png_uint_32 PNGAPI -png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_pHYs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_pHYs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter"); - if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) - return (0); - else return (info_ptr->y_pixels_per_unit); - } -#else - return (0); -#endif - return (0); -} - -png_uint_32 PNGAPI -png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_pHYs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_pHYs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter"); - if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER || - info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit) - return (0); - else return (info_ptr->x_pixels_per_unit); - } -#else - return (0); -#endif - return (0); -} - -#ifdef PNG_FLOATING_POINT_SUPPORTED -float PNGAPI -png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr) - { - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_pHYs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_pHYs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio"); - if (info_ptr->x_pixels_per_unit == 0) - return ((float)0.0); - else - return ((float)((float)info_ptr->y_pixels_per_unit - /(float)info_ptr->x_pixels_per_unit)); - } -#else - return (0.0); -#endif - return ((float)0.0); -} -#endif - -png_int_32 PNGAPI -png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_oFFs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_oFFs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); - if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) - return (0); - else return (info_ptr->x_offset); - } -#else - return (0); -#endif - return (0); -} - -png_int_32 PNGAPI -png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_oFFs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_oFFs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); - if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) - return (0); - else return (info_ptr->y_offset); - } -#else - return (0); -#endif - return (0); -} - -png_int_32 PNGAPI -png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_oFFs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_oFFs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); - if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) - return (0); - else return (info_ptr->x_offset); - } -#else - return (0); -#endif - return (0); -} - -png_int_32 PNGAPI -png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) -#if defined(PNG_oFFs_SUPPORTED) - if (info_ptr->valid & PNG_INFO_oFFs) - { - png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); - if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) - return (0); - else return (info_ptr->y_offset); - } -#else - return (0); -#endif - return (0); -} - -#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) -png_uint_32 PNGAPI -png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) -{ - return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr) - *.0254 +.5)); -} - -png_uint_32 PNGAPI -png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) -{ - return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr) - *.0254 +.5)); -} - -png_uint_32 PNGAPI -png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) -{ - return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr) - *.0254 +.5)); -} - -float PNGAPI -png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr) -{ - return ((float)png_get_x_offset_microns(png_ptr, info_ptr) - *.00003937); -} - -float PNGAPI -png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr) -{ - return ((float)png_get_y_offset_microns(png_ptr, info_ptr) - *.00003937); -} - -#if defined(PNG_pHYs_SUPPORTED) -png_uint_32 PNGAPI -png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr, - png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) -{ - png_uint_32 retval = 0; - - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) - { - png_debug1(1, "in %s retrieval function\n", "pHYs"); - if (res_x != NULL) - { - *res_x = info_ptr->x_pixels_per_unit; - retval |= PNG_INFO_pHYs; - } - if (res_y != NULL) - { - *res_y = info_ptr->y_pixels_per_unit; - retval |= PNG_INFO_pHYs; - } - if (unit_type != NULL) - { - *unit_type = (int)info_ptr->phys_unit_type; - retval |= PNG_INFO_pHYs; - if(*unit_type == 1) - { - if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); - if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); - } - } - } - return (retval); -} -#endif /* PNG_pHYs_SUPPORTED */ -#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ - -/* png_get_channels really belongs in here, too, but it's been around longer */ - -#endif /* PNG_EASY_ACCESS_SUPPORTED */ - -png_byte PNGAPI -png_get_channels(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - return(info_ptr->channels); - else - return (0); -} - -png_bytep PNGAPI -png_get_signature(png_structp png_ptr, png_infop info_ptr) -{ - if (png_ptr != NULL && info_ptr != NULL) - return(info_ptr->signature); - else - return (NULL); -} - -#if defined(PNG_bKGD_SUPPORTED) -png_uint_32 PNGAPI -png_get_bKGD(png_structp png_ptr, png_infop info_ptr, - png_color_16p *background) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) - && background != NULL) - { - png_debug1(1, "in %s retrieval function\n", "bKGD"); - *background = &(info_ptr->background); - return (PNG_INFO_bKGD); - } - return (0); -} -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_cHRM(png_structp png_ptr, png_infop info_ptr, - double *white_x, double *white_y, double *red_x, double *red_y, - double *green_x, double *green_y, double *blue_x, double *blue_y) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) - { - png_debug1(1, "in %s retrieval function\n", "cHRM"); - if (white_x != NULL) - *white_x = (double)info_ptr->x_white; - if (white_y != NULL) - *white_y = (double)info_ptr->y_white; - if (red_x != NULL) - *red_x = (double)info_ptr->x_red; - if (red_y != NULL) - *red_y = (double)info_ptr->y_red; - if (green_x != NULL) - *green_x = (double)info_ptr->x_green; - if (green_y != NULL) - *green_y = (double)info_ptr->y_green; - if (blue_x != NULL) - *blue_x = (double)info_ptr->x_blue; - if (blue_y != NULL) - *blue_y = (double)info_ptr->y_blue; - return (PNG_INFO_cHRM); - } - return (0); -} -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, - png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, - png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, - png_fixed_point *blue_x, png_fixed_point *blue_y) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) - { - png_debug1(1, "in %s retrieval function\n", "cHRM"); - if (white_x != NULL) - *white_x = info_ptr->int_x_white; - if (white_y != NULL) - *white_y = info_ptr->int_y_white; - if (red_x != NULL) - *red_x = info_ptr->int_x_red; - if (red_y != NULL) - *red_y = info_ptr->int_y_red; - if (green_x != NULL) - *green_x = info_ptr->int_x_green; - if (green_y != NULL) - *green_y = info_ptr->int_y_green; - if (blue_x != NULL) - *blue_x = info_ptr->int_x_blue; - if (blue_y != NULL) - *blue_y = info_ptr->int_y_blue; - return (PNG_INFO_cHRM); - } - return (0); -} -#endif -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) - && file_gamma != NULL) - { - png_debug1(1, "in %s retrieval function\n", "gAMA"); - *file_gamma = (double)info_ptr->gamma; - return (PNG_INFO_gAMA); - } - return (0); -} -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, - png_fixed_point *int_file_gamma) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) - && int_file_gamma != NULL) - { - png_debug1(1, "in %s retrieval function\n", "gAMA"); - *int_file_gamma = info_ptr->int_gamma; - return (PNG_INFO_gAMA); - } - return (0); -} -#endif -#endif - -#if defined(PNG_sRGB_SUPPORTED) -png_uint_32 PNGAPI -png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB) - && file_srgb_intent != NULL) - { - png_debug1(1, "in %s retrieval function\n", "sRGB"); - *file_srgb_intent = (int)info_ptr->srgb_intent; - return (PNG_INFO_sRGB); - } - return (0); -} -#endif - -#if defined(PNG_iCCP_SUPPORTED) -png_uint_32 PNGAPI -png_get_iCCP(png_structp png_ptr, png_infop info_ptr, - png_charpp name, int *compression_type, - png_charpp profile, png_uint_32 *proflen) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP) - && name != NULL && profile != NULL && proflen != NULL) - { - png_debug1(1, "in %s retrieval function\n", "iCCP"); - *name = info_ptr->iccp_name; - *profile = info_ptr->iccp_profile; - /* compression_type is a dummy so the API won't have to change - if we introduce multiple compression types later. */ - *proflen = (int)info_ptr->iccp_proflen; - *compression_type = (int)info_ptr->iccp_compression; - return (PNG_INFO_iCCP); - } - return (0); -} -#endif - -#if defined(PNG_sPLT_SUPPORTED) -png_uint_32 PNGAPI -png_get_sPLT(png_structp png_ptr, png_infop info_ptr, - png_sPLT_tpp spalettes) -{ - if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) - *spalettes = info_ptr->splt_palettes; - return ((png_uint_32)info_ptr->splt_palettes_num); -} -#endif - -#if defined(PNG_hIST_SUPPORTED) -png_uint_32 PNGAPI -png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) - && hist != NULL) - { - png_debug1(1, "in %s retrieval function\n", "hIST"); - *hist = info_ptr->hist; - return (PNG_INFO_hIST); - } - return (0); -} -#endif - -png_uint_32 PNGAPI -png_get_IHDR(png_structp png_ptr, png_infop info_ptr, - png_uint_32 *width, png_uint_32 *height, int *bit_depth, - int *color_type, int *interlace_type, int *compression_type, - int *filter_type) - -{ - if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL && - bit_depth != NULL && color_type != NULL) - { - int pixel_depth, channels; - png_uint_32 rowbytes_per_pixel; - - png_debug1(1, "in %s retrieval function\n", "IHDR"); - *width = info_ptr->width; - *height = info_ptr->height; - *bit_depth = info_ptr->bit_depth; - if (info_ptr->bit_depth < 1 || info_ptr->bit_depth > 16) - png_error(png_ptr, "Invalid bit depth"); - *color_type = info_ptr->color_type; - if (info_ptr->color_type > 6) - png_error(png_ptr, "Invalid color type"); - if (compression_type != NULL) - *compression_type = info_ptr->compression_type; - if (filter_type != NULL) - *filter_type = info_ptr->filter_type; - if (interlace_type != NULL) - *interlace_type = info_ptr->interlace_type; - - /* check for potential overflow of rowbytes */ - if (*color_type == PNG_COLOR_TYPE_PALETTE) - channels = 1; - else if (*color_type & PNG_COLOR_MASK_COLOR) - channels = 3; - else - channels = 1; - if (*color_type & PNG_COLOR_MASK_ALPHA) - channels++; - pixel_depth = *bit_depth * channels; - rowbytes_per_pixel = (pixel_depth + 7) >> 3; - if (width == 0 || *width > PNG_MAX_UINT) - png_error(png_ptr, "Invalid image width"); - if (height == 0 || *height > PNG_MAX_UINT) - png_error(png_ptr, "Invalid image height"); - if (*width > PNG_MAX_UINT/rowbytes_per_pixel - 64) - { - png_error(png_ptr, - "Width too large for libpng to process image data."); - } - return (1); - } - return (0); -} - -#if defined(PNG_oFFs_SUPPORTED) -png_uint_32 PNGAPI -png_get_oFFs(png_structp png_ptr, png_infop info_ptr, - png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) - && offset_x != NULL && offset_y != NULL && unit_type != NULL) - { - png_debug1(1, "in %s retrieval function\n", "oFFs"); - *offset_x = info_ptr->x_offset; - *offset_y = info_ptr->y_offset; - *unit_type = (int)info_ptr->offset_unit_type; - return (PNG_INFO_oFFs); - } - return (0); -} -#endif - -#if defined(PNG_pCAL_SUPPORTED) -png_uint_32 PNGAPI -png_get_pCAL(png_structp png_ptr, png_infop info_ptr, - png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, - png_charp *units, png_charpp *params) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) - && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && - nparams != NULL && units != NULL && params != NULL) - { - png_debug1(1, "in %s retrieval function\n", "pCAL"); - *purpose = info_ptr->pcal_purpose; - *X0 = info_ptr->pcal_X0; - *X1 = info_ptr->pcal_X1; - *type = (int)info_ptr->pcal_type; - *nparams = (int)info_ptr->pcal_nparams; - *units = info_ptr->pcal_units; - *params = info_ptr->pcal_params; - return (PNG_INFO_pCAL); - } - return (0); -} -#endif - -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_sCAL(png_structp png_ptr, png_infop info_ptr, - int *unit, double *width, double *height) -{ - if (png_ptr != NULL && info_ptr != NULL && - (info_ptr->valid & PNG_INFO_sCAL)) - { - *unit = info_ptr->scal_unit; - *width = info_ptr->scal_pixel_width; - *height = info_ptr->scal_pixel_height; - return (PNG_INFO_sCAL); - } - return(0); -} -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -png_uint_32 PNGAPI -png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr, - int *unit, png_charpp width, png_charpp height) -{ - if (png_ptr != NULL && info_ptr != NULL && - (info_ptr->valid & PNG_INFO_sCAL)) - { - *unit = info_ptr->scal_unit; - *width = info_ptr->scal_s_width; - *height = info_ptr->scal_s_height; - return (PNG_INFO_sCAL); - } - return(0); -} -#endif -#endif -#endif - -#if defined(PNG_pHYs_SUPPORTED) -png_uint_32 PNGAPI -png_get_pHYs(png_structp png_ptr, png_infop info_ptr, - png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) -{ - png_uint_32 retval = 0; - - if (png_ptr != NULL && info_ptr != NULL && - (info_ptr->valid & PNG_INFO_pHYs)) - { - png_debug1(1, "in %s retrieval function\n", "pHYs"); - if (res_x != NULL) - { - *res_x = info_ptr->x_pixels_per_unit; - retval |= PNG_INFO_pHYs; - } - if (res_y != NULL) - { - *res_y = info_ptr->y_pixels_per_unit; - retval |= PNG_INFO_pHYs; - } - if (unit_type != NULL) - { - *unit_type = (int)info_ptr->phys_unit_type; - retval |= PNG_INFO_pHYs; - } - } - return (retval); -} -#endif - -png_uint_32 PNGAPI -png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette, - int *num_palette) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE) - && palette != NULL) - { - png_debug1(1, "in %s retrieval function\n", "PLTE"); - *palette = info_ptr->palette; - *num_palette = info_ptr->num_palette; - png_debug1(3, "num_palette = %d\n", *num_palette); - return (PNG_INFO_PLTE); - } - return (0); -} - -#if defined(PNG_sBIT_SUPPORTED) -png_uint_32 PNGAPI -png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) - && sig_bit != NULL) - { - png_debug1(1, "in %s retrieval function\n", "sBIT"); - *sig_bit = &(info_ptr->sig_bit); - return (PNG_INFO_sBIT); - } - return (0); -} -#endif - -#if defined(PNG_TEXT_SUPPORTED) -png_uint_32 PNGAPI -png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, - int *num_text) -{ - if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) - { - png_debug1(1, "in %s retrieval function\n", - (png_ptr->chunk_name[0] == '\0' ? "text" - : (png_const_charp)png_ptr->chunk_name)); - if (text_ptr != NULL) - *text_ptr = info_ptr->text; - if (num_text != NULL) - *num_text = info_ptr->num_text; - return ((png_uint_32)info_ptr->num_text); - } - if (num_text != NULL) - *num_text = 0; - return(0); -} -#endif - -#if defined(PNG_tIME_SUPPORTED) -png_uint_32 PNGAPI -png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time) -{ - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) - && mod_time != NULL) - { - png_debug1(1, "in %s retrieval function\n", "tIME"); - *mod_time = &(info_ptr->mod_time); - return (PNG_INFO_tIME); - } - return (0); -} -#endif - -#if defined(PNG_tRNS_SUPPORTED) -png_uint_32 PNGAPI -png_get_tRNS(png_structp png_ptr, png_infop info_ptr, - png_bytep *trans, int *num_trans, png_color_16p *trans_values) -{ - png_uint_32 retval = 0; - if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) - { - png_debug1(1, "in %s retrieval function\n", "tRNS"); - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (trans != NULL) - { - *trans = info_ptr->trans; - retval |= PNG_INFO_tRNS; - } - if (trans_values != NULL) - *trans_values = &(info_ptr->trans_values); - } - else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ - { - if (trans_values != NULL) - { - *trans_values = &(info_ptr->trans_values); - retval |= PNG_INFO_tRNS; - } - if(trans != NULL) - *trans = NULL; - } - if(num_trans != NULL) - { - *num_trans = info_ptr->num_trans; - retval |= PNG_INFO_tRNS; - } - } - return (retval); -} -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -png_uint_32 PNGAPI -png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, - png_unknown_chunkpp unknowns) -{ - if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) - *unknowns = info_ptr->unknown_chunks; - return ((png_uint_32)info_ptr->unknown_chunks_num); -} -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -png_byte PNGAPI -png_get_rgb_to_gray_status (png_structp png_ptr) -{ - return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0); -} -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) -png_voidp PNGAPI -png_get_user_chunk_ptr(png_structp png_ptr) -{ - return (png_ptr? png_ptr->user_chunk_ptr : NULL); -} -#endif - - -png_uint_32 PNGAPI -png_get_compression_buffer_size(png_structp png_ptr) -{ - return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L); -} - - -#ifndef PNG_1_0_X -#ifdef PNG_ASSEMBLER_CODE_SUPPORTED -/* this function was added to libpng 1.2.0 and should exist by default */ -png_uint_32 PNGAPI -png_get_asm_flags (png_structp png_ptr) -{ - return (png_uint_32)(png_ptr? png_ptr->asm_flags : 0L); -} - -/* this function was added to libpng 1.2.0 and should exist by default */ -png_uint_32 PNGAPI -png_get_asm_flagmask (int flag_select) -{ - png_uint_32 settable_asm_flags = 0; - - if (flag_select & PNG_SELECT_READ) - settable_asm_flags |= - PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | - PNG_ASM_FLAG_MMX_READ_INTERLACE | - PNG_ASM_FLAG_MMX_READ_FILTER_SUB | - PNG_ASM_FLAG_MMX_READ_FILTER_UP | - PNG_ASM_FLAG_MMX_READ_FILTER_AVG | - PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; - /* no non-MMX flags yet */ - -#if 0 - /* GRR: no write-flags yet, either, but someday... */ - if (flag_select & PNG_SELECT_WRITE) - settable_asm_flags |= - PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; -#endif /* 0 */ - - return settable_asm_flags; /* _theoretically_ settable capabilities only */ -} -#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ - - -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) - /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ -/* this function was added to libpng 1.2.0 */ -png_uint_32 PNGAPI -png_get_mmx_flagmask (int flag_select, int *compilerID) -{ - png_uint_32 settable_mmx_flags = 0; - - if (flag_select & PNG_SELECT_READ) - settable_mmx_flags |= - PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | - PNG_ASM_FLAG_MMX_READ_INTERLACE | - PNG_ASM_FLAG_MMX_READ_FILTER_SUB | - PNG_ASM_FLAG_MMX_READ_FILTER_UP | - PNG_ASM_FLAG_MMX_READ_FILTER_AVG | - PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; -#if 0 - /* GRR: no MMX write support yet, but someday... */ - if (flag_select & PNG_SELECT_WRITE) - settable_mmx_flags |= - PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; -#endif /* 0 */ - - if (compilerID != NULL) { -#ifdef PNG_USE_PNGVCRD - *compilerID = 1; /* MSVC */ -#else -#ifdef PNG_USE_PNGGCCRD - *compilerID = 2; /* gcc/gas */ -#else - *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */ -#endif -#endif - } - - return settable_mmx_flags; /* _theoretically_ settable capabilities only */ -} - -/* this function was added to libpng 1.2.0 */ -png_byte PNGAPI -png_get_mmx_bitdepth_threshold (png_structp png_ptr) -{ - return (png_byte)(png_ptr? png_ptr->mmx_bitdepth_threshold : 0); -} - -/* this function was added to libpng 1.2.0 */ -png_uint_32 PNGAPI -png_get_mmx_rowbytes_threshold (png_structp png_ptr) -{ - return (png_uint_32)(png_ptr? png_ptr->mmx_rowbytes_threshold : 0L); -} -#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ -#endif /* PNG_1_0_X */ diff --git a/src/libs/pdflib/libs/png/pngmem.c b/src/libs/pdflib/libs/png/pngmem.c deleted file mode 100644 index c0ce52133f..0000000000 --- a/src/libs/pdflib/libs/png/pngmem.c +++ /dev/null @@ -1,567 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngmem.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngmem.c - stub functions for memory allocation - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file provides a location for all memory allocation. Users who - * need special memory handling are expected to supply replacement - * functions for png_malloc() and png_free(), and to use - * png_create_read_struct_2() and png_create_write_struct_2() to - * identify the replacement functions. - */ - -#define PNG_INTERNAL -#include "png.h" - -/* Borland DOS special memory handler */ -#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) -/* if you change this, be sure to change the one in png.h also */ - -/* Allocate memory for a png_struct. The malloc and memset can be replaced - by a single call to calloc() if this is thought to improve performance. */ -png_voidp /* PRIVATE */ -png_create_struct(int type) -{ -#ifdef PNG_USER_MEM_SUPPORTED - return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); -} - -/* Alternate version of png_create_struct, for use with user-defined malloc. */ -png_voidp /* PRIVATE */ -png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) -{ -#endif /* PNG_USER_MEM_SUPPORTED */ - png_size_t size; - png_voidp struct_ptr; - - if (type == PNG_STRUCT_INFO) - size = sizeof(png_info); - else if (type == PNG_STRUCT_PNG) - size = sizeof(png_struct); - else - return (png_get_copyright()); - -#ifdef PNG_USER_MEM_SUPPORTED - if(malloc_fn != NULL) - { - png_struct dummy_struct; - png_structp png_ptr = &dummy_struct; - png_ptr->mem_ptr=mem_ptr; - struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size); - } - else -#endif /* PNG_USER_MEM_SUPPORTED */ - struct_ptr = (png_voidp)farmalloc(size)); - if (struct_ptr != NULL) - png_memset(struct_ptr, 0, size); - return (struct_ptr); -} - -/* Free memory allocated by a png_create_struct() call */ -void /* PRIVATE */ -png_destroy_struct(png_voidp struct_ptr) -{ -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); -} - -/* Free memory allocated by a png_create_struct() call */ -void /* PRIVATE */ -png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, - png_voidp mem_ptr) -{ -#endif - if (struct_ptr != NULL) - { -#ifdef PNG_USER_MEM_SUPPORTED - if(free_fn != NULL) - { - png_struct dummy_struct; - png_structp png_ptr = &dummy_struct; - png_ptr->mem_ptr=mem_ptr; - (*(free_fn))(png_ptr, struct_ptr); - return; - } -#endif /* PNG_USER_MEM_SUPPORTED */ - farfree (struct_ptr); - } -} - -/* Allocate memory. For reasonable files, size should never exceed - * 64K. However, zlib may allocate more then 64K if you don't tell - * it not to. See zconf.h and png.h for more information. zlib does - * need to allocate exactly 64K, so whatever you call here must - * have the ability to do that. - * - * Borland seems to have a problem in DOS mode for exactly 64K. - * It gives you a segment with an offset of 8 (perhaps to store its - * memory stuff). zlib doesn't like this at all, so we have to - * detect and deal with it. This code should not be needed in - * Windows or OS/2 modes, and only in 16 bit mode. This code has - * been updated by Alexander Lehmann for version 0.89 to waste less - * memory. - * - * Note that we can't use png_size_t for the "size" declaration, - * since on some systems a png_size_t is a 16-bit quantity, and as a - * result, we would be truncating potentially larger memory requests - * (which should cause a fatal error) and introducing major problems. - */ - -png_voidp PNGAPI -png_malloc(png_structp png_ptr, png_uint_32 size) -{ - png_voidp ret; - - if (png_ptr == NULL || size == 0) - return (NULL); - -#ifdef PNG_USER_MEM_SUPPORTED - if(png_ptr->malloc_fn != NULL) - { - ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); - if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out of memory!"); - return (ret); - } - else - return png_malloc_default(png_ptr, size); -} - -png_voidp PNGAPI -png_malloc_default(png_structp png_ptr, png_uint_32 size) -{ - png_voidp ret; -#endif /* PNG_USER_MEM_SUPPORTED */ - -#ifdef PNG_MAX_MALLOC_64K - if (size > (png_uint_32)65536L) - png_error(png_ptr, "Cannot Allocate > 64K"); -#endif - - if (size == (png_uint_32)65536L) - { - if (png_ptr->offset_table == NULL) - { - /* try to see if we need to do any of this fancy stuff */ - ret = farmalloc(size); - if (ret == NULL || ((png_size_t)ret & 0xffff)) - { - int num_blocks; - png_uint_32 total_size; - png_bytep table; - int i; - png_byte huge * hptr; - - if (ret != NULL) - { - farfree(ret); - ret = NULL; - } - - if(png_ptr->zlib_window_bits > 14) - num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14)); - else - num_blocks = 1; - if (png_ptr->zlib_mem_level >= 7) - num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7)); - else - num_blocks++; - - total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16; - - table = farmalloc(total_size); - - if (table == NULL) - { - if (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */ - else - png_warning(png_ptr, "Out Of Memory."); - return (NULL); - } - - if ((png_size_t)table & 0xfff0) - { - if (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, - "Farmalloc didn't return normalized pointer"); - else - png_warning(png_ptr, - "Farmalloc didn't return normalized pointer"); - return (NULL); - } - - png_ptr->offset_table = table; - png_ptr->offset_table_ptr = farmalloc(num_blocks * - sizeof (png_bytep)); - - if (png_ptr->offset_table_ptr == NULL) - { - if (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out Of memory."); /* Note "O" and "M" */ - else - png_warning(png_ptr, "Out Of memory."); - return (NULL); - } - - hptr = (png_byte huge *)table; - if ((png_size_t)hptr & 0xf) - { - hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L); - hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */ - } - for (i = 0; i < num_blocks; i++) - { - png_ptr->offset_table_ptr[i] = (png_bytep)hptr; - hptr = hptr + (png_uint_32)65536L; /* "+=" fails on TC++3.0 */ - } - - png_ptr->offset_table_number = num_blocks; - png_ptr->offset_table_count = 0; - png_ptr->offset_table_count_free = 0; - } - } - - if (png_ptr->offset_table_count >= png_ptr->offset_table_number) - { - if (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */ - else - png_warning(png_ptr, "Out of Memory."); - return (NULL); - } - - ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++]; - } - else - ret = farmalloc(size); - - if (ret == NULL) - { - if (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */ - else - png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */ - } - - return (ret); -} - -/* free a pointer allocated by png_malloc(). In the default - configuration, png_ptr is not used, but is passed in case it - is needed. If ptr is NULL, return without taking any action. */ -void PNGAPI -png_free(png_structp png_ptr, png_voidp ptr) -{ - if (png_ptr == NULL || ptr == NULL) - return; - -#ifdef PNG_USER_MEM_SUPPORTED - if (png_ptr->free_fn != NULL) - { - (*(png_ptr->free_fn))(png_ptr, ptr); - return; - } - else png_free_default(png_ptr, ptr); -} - -void PNGAPI -png_free_default(png_structp png_ptr, png_voidp ptr) -{ -#endif /* PNG_USER_MEM_SUPPORTED */ - - if (png_ptr->offset_table != NULL) - { - int i; - - for (i = 0; i < png_ptr->offset_table_count; i++) - { - if (ptr == png_ptr->offset_table_ptr[i]) - { - ptr = NULL; - png_ptr->offset_table_count_free++; - break; - } - } - if (png_ptr->offset_table_count_free == png_ptr->offset_table_count) - { - farfree(png_ptr->offset_table); - farfree(png_ptr->offset_table_ptr); - png_ptr->offset_table = NULL; - png_ptr->offset_table_ptr = NULL; - } - } - - if (ptr != NULL) - { - farfree(ptr); - } -} - -#else /* Not the Borland DOS special memory handler */ - -/* Allocate memory for a png_struct or a png_info. The malloc and - memset can be replaced by a single call to calloc() if this is thought - to improve performance noticably. */ -png_voidp /* PRIVATE */ -png_create_struct(int type) -{ -#ifdef PNG_USER_MEM_SUPPORTED - return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); -} - -/* Allocate memory for a png_struct or a png_info. The malloc and - memset can be replaced by a single call to calloc() if this is thought - to improve performance noticably. */ -png_voidp /* PRIVATE */ -png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) -{ -#endif /* PNG_USER_MEM_SUPPORTED */ - png_size_t size; - png_voidp struct_ptr; - - if (type == PNG_STRUCT_INFO) - size = sizeof(png_info); - else if (type == PNG_STRUCT_PNG) - size = sizeof(png_struct); - else - return (NULL); - -#ifdef PNG_USER_MEM_SUPPORTED - if(malloc_fn != NULL) - { - png_struct dummy_struct; - png_structp png_ptr = &dummy_struct; - png_ptr->mem_ptr=mem_ptr; - struct_ptr = (*(malloc_fn))(png_ptr, size); - if (struct_ptr != NULL) - png_memset(struct_ptr, 0, size); - return (struct_ptr); - } -#endif /* PNG_USER_MEM_SUPPORTED */ - -#if defined(__TURBOC__) && !defined(__FLAT__) - if ((struct_ptr = (png_voidp)farmalloc(size)) != NULL) -#else -# if defined(_MSC_VER) && defined(MAXSEG_64K) - if ((struct_ptr = (png_voidp)halloc(size,1)) != NULL) -# else - if ((struct_ptr = (png_voidp)malloc(size)) != NULL) -# endif -#endif - { - png_memset(struct_ptr, 0, size); - } - - return (struct_ptr); -} - - -/* Free memory allocated by a png_create_struct() call */ -void /* PRIVATE */ -png_destroy_struct(png_voidp struct_ptr) -{ -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); -} - -/* Free memory allocated by a png_create_struct() call */ -void /* PRIVATE */ -png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, - png_voidp mem_ptr) -{ -#endif /* PNG_USER_MEM_SUPPORTED */ - if (struct_ptr != NULL) - { -#ifdef PNG_USER_MEM_SUPPORTED - if(free_fn != NULL) - { - png_struct dummy_struct; - png_structp png_ptr = &dummy_struct; - png_ptr->mem_ptr=mem_ptr; - (*(free_fn))(png_ptr, struct_ptr); - return; - } -#endif /* PNG_USER_MEM_SUPPORTED */ -#if defined(__TURBOC__) && !defined(__FLAT__) - farfree(struct_ptr); -#else -# if defined(_MSC_VER) && defined(MAXSEG_64K) - hfree(struct_ptr); -# else - free(struct_ptr); -# endif -#endif - } -} - -/* Allocate memory. For reasonable files, size should never exceed - 64K. However, zlib may allocate more then 64K if you don't tell - it not to. See zconf.h and png.h for more information. zlib does - need to allocate exactly 64K, so whatever you call here must - have the ability to do that. */ - -png_voidp PNGAPI -png_malloc(png_structp png_ptr, png_uint_32 size) -{ - png_voidp ret; - - if (png_ptr == NULL || size == 0) - return (NULL); - -#ifdef PNG_USER_MEM_SUPPORTED - if(png_ptr->malloc_fn != NULL) - { - ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); - if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out of Memory!"); - return (ret); - } - else - return (png_malloc_default(png_ptr, size)); -} - -png_voidp PNGAPI -png_malloc_default(png_structp png_ptr, png_uint_32 size) -{ - png_voidp ret; -#endif /* PNG_USER_MEM_SUPPORTED */ - -#ifdef PNG_MAX_MALLOC_64K - if (size > (png_uint_32)65536L) - { - if(png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Cannot Allocate > 64K"); - else - return NULL; - } -#endif - -#if defined(__TURBOC__) && !defined(__FLAT__) - ret = farmalloc(size); -#else -# if defined(_MSC_VER) && defined(MAXSEG_64K) - ret = halloc(size, 1); -# else - ret = malloc((size_t)size); -# endif -#endif - - if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) - png_error(png_ptr, "Out of Memory"); - - return (ret); -} - -/* Free a pointer allocated by png_malloc(). If ptr is NULL, return - without taking any action. */ -void PNGAPI -png_free(png_structp png_ptr, png_voidp ptr) -{ - if (png_ptr == NULL || ptr == NULL) - return; - -#ifdef PNG_USER_MEM_SUPPORTED - if (png_ptr->free_fn != NULL) - { - (*(png_ptr->free_fn))(png_ptr, ptr); - return; - } - else png_free_default(png_ptr, ptr); -} -void PNGAPI -png_free_default(png_structp png_ptr, png_voidp ptr) -{ - if (png_ptr == NULL || ptr == NULL) - return; - -#endif /* PNG_USER_MEM_SUPPORTED */ - -#if defined(__TURBOC__) && !defined(__FLAT__) - farfree(ptr); -#else -# if defined(_MSC_VER) && defined(MAXSEG_64K) - hfree(ptr); -# else - free(ptr); -# endif -#endif -} - -#endif /* Not Borland DOS special memory handler */ - -#if defined(PNG_1_0_X) -# define png_malloc_warn png_malloc -#else -/* This function was added at libpng version 1.2.3. The png_malloc_warn() - * function will issue a png_warning and return NULL instead of issuing a - * png_error, if it fails to allocate the requested memory. - */ -png_voidp PNGAPI -png_malloc_warn(png_structp png_ptr, png_uint_32 size) -{ - png_voidp ptr; - png_uint_32 save_flags=png_ptr->flags; - - png_ptr->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; - ptr = (png_voidp)png_malloc((png_structp)png_ptr, size); - png_ptr->flags=save_flags; - return(ptr); -} -#endif - -png_voidp PNGAPI -png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2, - png_uint_32 length) -{ - png_size_t size; - - size = (png_size_t)length; - if ((png_uint_32)size != length) - png_error(png_ptr,"Overflow in png_memcpy_check."); - - return(png_memcpy (s1, s2, size)); -} - -png_voidp PNGAPI -png_memset_check (png_structp png_ptr, png_voidp s1, int value, - png_uint_32 length) -{ - png_size_t size; - - size = (png_size_t)length; - if ((png_uint_32)size != length) - png_error(png_ptr,"Overflow in png_memset_check."); - - return (png_memset (s1, value, size)); - -} - -#ifdef PNG_USER_MEM_SUPPORTED -/* This function is called when the application wants to use another method - * of allocating and freeing memory. - */ -void PNGAPI -png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr - malloc_fn, png_free_ptr free_fn) -{ - png_ptr->mem_ptr = mem_ptr; - png_ptr->malloc_fn = malloc_fn; - png_ptr->free_fn = free_fn; -} - -/* This function returns a pointer to the mem_ptr associated with the user - * functions. The application should free any memory associated with this - * pointer before png_write_destroy and png_read_destroy are called. - */ -png_voidp PNGAPI -png_get_mem_ptr(png_structp png_ptr) -{ - return ((png_voidp)png_ptr->mem_ptr); -} -#endif /* PNG_USER_MEM_SUPPORTED */ diff --git a/src/libs/pdflib/libs/png/pngread.c b/src/libs/pdflib/libs/png/pngread.c deleted file mode 100644 index 1d5cd2b981..0000000000 --- a/src/libs/pdflib/libs/png/pngread.c +++ /dev/null @@ -1,1431 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngread.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngread.c - read a PNG file - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file contains routines that an application calls directly to - * read a PNG file or stream. - */ - -#define PNG_INTERNAL -#include "png.h" - -/* Create a PNG structure for reading, and allocate any memory needed. */ -png_structp PNGAPI -png_create_read_struct(png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn) -{ - -#ifdef PNG_USER_MEM_SUPPORTED - return (png_create_read_struct_2(user_png_ver, error_ptr, error_fn, - warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL)); -} - -/* Alternate create PNG structure for reading, and allocate any memory needed.*/ -png_structp PNGAPI -png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn) -{ -#endif /* PNG_USER_MEM_SUPPORTED */ - - png_structp png_ptr; - -#ifdef PNG_SETJMP_SUPPORTED -#ifdef USE_FAR_KEYWORD - jmp_buf jmpbuf; -#endif -#endif - - int i; - - png_debug(1, "in png_create_read_struct\n"); -#ifdef PNG_USER_MEM_SUPPORTED - png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG, - (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr); -#else - png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); -#endif - if (png_ptr == NULL) - return (NULL); - -#if !defined(PNG_1_0_X) -#ifdef PNG_ASSEMBLER_CODE_SUPPORTED - png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ -#endif -#endif /* PNG_1_0_X */ - -#ifdef PNG_SETJMP_SUPPORTED -#ifdef USE_FAR_KEYWORD - if (setjmp(jmpbuf)) -#else - if (setjmp(png_ptr->jmpbuf)) -#endif - { - png_free(png_ptr, png_ptr->zbuf); - png_ptr->zbuf=NULL; -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2((png_voidp)png_ptr, - (png_free_ptr)free_fn, (png_voidp)mem_ptr); -#else - png_destroy_struct((png_voidp)png_ptr); -#endif - return (NULL); - } -#ifdef USE_FAR_KEYWORD - png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf)); -#endif -#endif - -#ifdef PNG_USER_MEM_SUPPORTED - png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn); -#endif - - png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); - - i=0; - do - { - if(user_png_ver[i] != png_libpng_ver[i]) - png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; - } while (png_libpng_ver[i++]); - - if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) - { - /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so - * we must recompile any applications that use any older library version. - * For versions after libpng 1.0, we will be compatible, so we need - * only check the first digit. - */ - if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || - (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) || - (user_png_ver[0] == '0' && user_png_ver[2] < '9')) - { -#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) - char msg[80]; - if (user_png_ver) - { - sprintf(msg, "Application was compiled with png.h from libpng-%.20s", - user_png_ver); - png_warning(png_ptr, msg); - } - sprintf(msg, "Application is running with png.c from libpng-%.20s", - png_libpng_ver); - png_warning(png_ptr, msg); -#endif -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - png_ptr->flags=0; -#endif - png_error(png_ptr, - "Incompatible libpng version in application and library"); - } - } - - /* initialize zbuf - compression buffer */ - png_ptr->zbuf_size = PNG_ZBUF_SIZE; - png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, - (png_uint_32)png_ptr->zbuf_size); - png_ptr->zstream.zalloc = png_zalloc; - png_ptr->zstream.zfree = png_zfree; - png_ptr->zstream.opaque = (voidpf)png_ptr; - - switch (inflateInit(&png_ptr->zstream)) - { - case Z_OK: /* Do nothing */ break; - case Z_MEM_ERROR: - case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break; - case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break; - default: png_error(png_ptr, "Unknown zlib error"); - } - - png_ptr->zstream.next_out = png_ptr->zbuf; - png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; - - png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); - -#ifdef PNG_SETJMP_SUPPORTED -/* Applications that neglect to set up their own setjmp() and then encounter - a png_error() will longjmp here. Since the jmpbuf is then meaningless we - abort instead of returning. */ -#ifdef USE_FAR_KEYWORD - if (setjmp(jmpbuf)) - PNG_ABORT(); - png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf)); -#else - if (setjmp(png_ptr->jmpbuf)) - PNG_ABORT(); -#endif -#endif - return (png_ptr); -} - -/* Initialize PNG structure for reading, and allocate any memory needed. - This interface is deprecated in favour of the png_create_read_struct(), - and it will eventually disappear. */ -/* PDFlib GmbH: the messy hack below would fool our pdf_ prefixes. */ -#if 0 -#undef png_read_init -void PNGAPI -png_read_init(png_structp png_ptr) -{ - /* We only come here via pre-1.0.7-compiled applications */ - png_read_init_2(png_ptr, "1.0.6 or earlier", 0, 0); -} -#endif - -void PNGAPI -png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver, - png_size_t png_struct_size, png_size_t png_info_size) -{ - /* We only come here via pre-1.0.12-compiled applications */ -#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) - if(sizeof(png_struct) > png_struct_size || sizeof(png_info) > png_info_size) - { - char msg[80]; - png_ptr->warning_fn=NULL; - if (user_png_ver) - { - sprintf(msg, "Application was compiled with png.h from libpng-%.20s", - user_png_ver); - png_warning(png_ptr, msg); - } - sprintf(msg, "Application is running with png.c from libpng-%.20s", - png_libpng_ver); - png_warning(png_ptr, msg); - } -#endif - if(sizeof(png_struct) > png_struct_size) - { - png_ptr->error_fn=NULL; -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - png_ptr->flags=0; -#endif - png_error(png_ptr, - "The png struct allocated by the application for reading is too small."); - } - if(sizeof(png_info) > png_info_size) - { - png_ptr->error_fn=NULL; -#ifdef PNG_ERROR_NUMBERS_SUPPORTED - png_ptr->flags=0; -#endif - png_error(png_ptr, - "The info struct allocated by application for reading is too small."); - } - png_read_init_3(&png_ptr, user_png_ver, png_struct_size); -} - -void PNGAPI -png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver, - png_size_t png_struct_size) -{ -#ifdef PNG_SETJMP_SUPPORTED - jmp_buf tmp_jmp; /* to save current jump buffer */ -#endif - - int i=0; - - png_structp png_ptr=*ptr_ptr; - - do - { - if(user_png_ver[i] != png_libpng_ver[i]) - { -#ifdef PNG_LEGACY_SUPPORTED - png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; -#else - png_ptr->warning_fn=NULL; - png_warning(png_ptr, - "Application uses deprecated png_read_init() and should be recompiled."); - break; -#endif - } - } while (png_libpng_ver[i++]); - - png_debug(1, "in png_read_init_3\n"); - -#ifdef PNG_SETJMP_SUPPORTED - /* save jump buffer and error functions */ - png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf)); -#endif - - if(sizeof(png_struct) > png_struct_size) - { - png_destroy_struct(png_ptr); - *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); - png_ptr = *ptr_ptr; - } - - /* reset all variables to 0 */ - png_memset(png_ptr, 0, sizeof (png_struct)); - -#ifdef PNG_SETJMP_SUPPORTED - /* restore jump buffer */ - png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf)); -#endif - - /* initialize zbuf - compression buffer */ - png_ptr->zbuf_size = PNG_ZBUF_SIZE; - png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, - (png_uint_32)png_ptr->zbuf_size); - png_ptr->zstream.zalloc = png_zalloc; - png_ptr->zstream.zfree = png_zfree; - png_ptr->zstream.opaque = (voidpf)png_ptr; - - switch (inflateInit(&png_ptr->zstream)) - { - case Z_OK: /* Do nothing */ break; - case Z_MEM_ERROR: - case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory"); break; - case Z_VERSION_ERROR: png_error(png_ptr, "zlib version"); break; - default: png_error(png_ptr, "Unknown zlib error"); - } - - png_ptr->zstream.next_out = png_ptr->zbuf; - png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; - - png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); -} - -/* Read the information before the actual image data. This has been - * changed in v0.90 to allow reading a file that already has the magic - * bytes read from the stream. You can tell libpng how many bytes have - * been read from the beginning of the stream (up to the maximum of 8) - * via png_set_sig_bytes(), and we will only check the remaining bytes - * here. The application can then have access to the signature bytes we - * read if it is determined that this isn't a valid PNG file. - */ -void PNGAPI -png_read_info(png_structp png_ptr, png_infop info_ptr) -{ - png_debug(1, "in png_read_info\n"); - /* If we haven't checked all of the PNG signature bytes, do so now. */ - if (png_ptr->sig_bytes < 8) - { - png_size_t num_checked = png_ptr->sig_bytes, - num_to_check = 8 - num_checked; - - png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check); - png_ptr->sig_bytes = 8; - - if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) - { - if (num_checked < 4 && - png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) - png_error(png_ptr, "Not a PNG file"); - else - png_error(png_ptr, "PNG file corrupted by ASCII conversion"); - } - if (num_checked < 3) - png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE; - } - - for(;;) - { -#ifdef PNG_USE_LOCAL_ARRAYS - PNG_IHDR; - PNG_IDAT; - PNG_IEND; - PNG_PLTE; -#if defined(PNG_READ_bKGD_SUPPORTED) - PNG_bKGD; -#endif -#if defined(PNG_READ_cHRM_SUPPORTED) - PNG_cHRM; -#endif -#if defined(PNG_READ_gAMA_SUPPORTED) - PNG_gAMA; -#endif -#if defined(PNG_READ_hIST_SUPPORTED) - PNG_hIST; -#endif -#if defined(PNG_READ_iCCP_SUPPORTED) - PNG_iCCP; -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) - PNG_iTXt; -#endif -#if defined(PNG_READ_oFFs_SUPPORTED) - PNG_oFFs; -#endif -#if defined(PNG_READ_pCAL_SUPPORTED) - PNG_pCAL; -#endif -#if defined(PNG_READ_pHYs_SUPPORTED) - PNG_pHYs; -#endif -#if defined(PNG_READ_sBIT_SUPPORTED) - PNG_sBIT; -#endif -#if defined(PNG_READ_sCAL_SUPPORTED) - PNG_sCAL; -#endif -#if defined(PNG_READ_sPLT_SUPPORTED) - PNG_sPLT; -#endif -#if defined(PNG_READ_sRGB_SUPPORTED) - PNG_sRGB; -#endif -#if defined(PNG_READ_tEXt_SUPPORTED) - PNG_tEXt; -#endif -#if defined(PNG_READ_tIME_SUPPORTED) - PNG_tIME; -#endif -#if defined(PNG_READ_tRNS_SUPPORTED) - PNG_tRNS; -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) - PNG_zTXt; -#endif -#endif /* PNG_GLOBAL_ARRAYS */ - png_byte chunk_length[4]; - png_uint_32 length; - - png_read_data(png_ptr, chunk_length, 4); - length = png_get_uint_32(chunk_length); - - png_reset_crc(png_ptr); - png_crc_read(png_ptr, png_ptr->chunk_name, 4); - - png_debug2(0, "Reading %s chunk, length=%lu.\n", png_ptr->chunk_name, - length); - - if (length > PNG_MAX_UINT) - png_error(png_ptr, "Invalid chunk length."); - - /* This should be a binary subdivision search or a hash for - * matching the chunk name rather than a linear search. - */ - if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) - png_handle_IHDR(png_ptr, info_ptr, length); - else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) - png_handle_IEND(png_ptr, info_ptr, length); -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED - else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) - { - if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - png_ptr->mode |= PNG_HAVE_IDAT; - png_handle_unknown(png_ptr, info_ptr, length); - if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) - png_ptr->mode |= PNG_HAVE_PLTE; - else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - { - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before IDAT"); - else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && - !(png_ptr->mode & PNG_HAVE_PLTE)) - png_error(png_ptr, "Missing PLTE before IDAT"); - break; - } - } -#endif - else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) - png_handle_PLTE(png_ptr, info_ptr, length); - else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - { - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before IDAT"); - else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && - !(png_ptr->mode & PNG_HAVE_PLTE)) - png_error(png_ptr, "Missing PLTE before IDAT"); - - png_ptr->idat_size = length; - png_ptr->mode |= PNG_HAVE_IDAT; - break; - } -#if defined(PNG_READ_bKGD_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) - png_handle_bKGD(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_cHRM_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) - png_handle_cHRM(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_gAMA_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) - png_handle_gAMA(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_hIST_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) - png_handle_hIST(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_oFFs_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) - png_handle_oFFs(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_pCAL_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) - png_handle_pCAL(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sCAL_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) - png_handle_sCAL(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_pHYs_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) - png_handle_pHYs(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sBIT_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) - png_handle_sBIT(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sRGB_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) - png_handle_sRGB(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_iCCP_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) - png_handle_iCCP(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sPLT_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) - png_handle_sPLT(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tEXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) - png_handle_tEXt(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tIME_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) - png_handle_tIME(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tRNS_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) - png_handle_tRNS(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) - png_handle_zTXt(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) - png_handle_iTXt(png_ptr, info_ptr, length); -#endif - else - png_handle_unknown(png_ptr, info_ptr, length); - } -} - -/* optional call to update the users info_ptr structure */ -void PNGAPI -png_read_update_info(png_structp png_ptr, png_infop info_ptr) -{ - png_debug(1, "in png_read_update_info\n"); - if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) - png_read_start_row(png_ptr); - else - png_warning(png_ptr, - "Ignoring extra png_read_update_info() call; row buffer not reallocated"); - png_read_transform_info(png_ptr, info_ptr); -} - -/* Initialize palette, background, etc, after transformations - * are set, but before any reading takes place. This allows - * the user to obtain a gamma-corrected palette, for example. - * If the user doesn't call this, we will do it ourselves. - */ -void PNGAPI -png_start_read_image(png_structp png_ptr) -{ - png_debug(1, "in png_start_read_image\n"); - if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) - png_read_start_row(png_ptr); -} - -void PNGAPI -png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) -{ -#ifdef PNG_USE_LOCAL_ARRAYS - PNG_IDAT; - const int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; - const int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; -#endif - int ret; - png_debug2(1, "in png_read_row (row %lu, pass %d)\n", - png_ptr->row_number, png_ptr->pass); - if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) - png_read_start_row(png_ptr); - if (png_ptr->row_number == 0 && png_ptr->pass == 0) - { - /* check for transforms that have been set but were defined out */ -#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED) - if (png_ptr->transformations & PNG_INVERT_MONO) - png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED) - if (png_ptr->transformations & PNG_FILLER) - png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)&&!defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED) - if (png_ptr->transformations & PNG_PACK) - png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) - if (png_ptr->transformations & PNG_SHIFT) - png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED) - if (png_ptr->transformations & PNG_BGR) - png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined."); -#endif -#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED) - if (png_ptr->transformations & PNG_SWAP_BYTES) - png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined."); -#endif - } - -#if defined(PNG_READ_INTERLACING_SUPPORTED) - /* if interlaced and we do not need a new row, combine row and return */ - if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) - { - switch (png_ptr->pass) - { - case 0: - if (png_ptr->row_number & 0x07) - { - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 1: - if ((png_ptr->row_number & 0x07) || png_ptr->width < 5) - { - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 2: - if ((png_ptr->row_number & 0x07) != 4) - { - if (dsp_row != NULL && (png_ptr->row_number & 4)) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 3: - if ((png_ptr->row_number & 3) || png_ptr->width < 3) - { - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 4: - if ((png_ptr->row_number & 3) != 2) - { - if (dsp_row != NULL && (png_ptr->row_number & 2)) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 5: - if ((png_ptr->row_number & 1) || png_ptr->width < 2) - { - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - png_read_finish_row(png_ptr); - return; - } - break; - case 6: - if (!(png_ptr->row_number & 1)) - { - png_read_finish_row(png_ptr); - return; - } - break; - } - } -#endif - - if (!(png_ptr->mode & PNG_HAVE_IDAT)) - png_error(png_ptr, "Invalid attempt to read row data"); - - png_ptr->zstream.next_out = png_ptr->row_buf; - png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; - do - { - if (!(png_ptr->zstream.avail_in)) - { - while (!png_ptr->idat_size) - { - png_byte chunk_length[4]; - - png_crc_finish(png_ptr, 0); - - png_read_data(png_ptr, chunk_length, 4); - png_ptr->idat_size = png_get_uint_32(chunk_length); - - if (png_ptr->idat_size > PNG_MAX_UINT) - png_error(png_ptr, "Invalid chunk length."); - - png_reset_crc(png_ptr); - png_crc_read(png_ptr, png_ptr->chunk_name, 4); - if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - png_error(png_ptr, "Not enough image data"); - } - png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; - png_ptr->zstream.next_in = png_ptr->zbuf; - if (png_ptr->zbuf_size > png_ptr->idat_size) - png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; - png_crc_read(png_ptr, png_ptr->zbuf, - (png_size_t)png_ptr->zstream.avail_in); - png_ptr->idat_size -= png_ptr->zstream.avail_in; - } - ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); - if (ret == Z_STREAM_END) - { - if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in || - png_ptr->idat_size) - png_error(png_ptr, "Extra compressed data"); - png_ptr->mode |= PNG_AFTER_IDAT; - png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; - break; - } - if (ret != Z_OK) - png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : - "Decompression error"); - - } while (png_ptr->zstream.avail_out); - - png_ptr->row_info.color_type = png_ptr->color_type; - png_ptr->row_info.width = png_ptr->iwidth; - png_ptr->row_info.channels = png_ptr->channels; - png_ptr->row_info.bit_depth = png_ptr->bit_depth; - png_ptr->row_info.pixel_depth = png_ptr->pixel_depth; - png_ptr->row_info.rowbytes = ((png_ptr->row_info.width * - (png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3); - - if(png_ptr->row_buf[0]) - png_read_filter_row(png_ptr, &(png_ptr->row_info), - png_ptr->row_buf + 1, png_ptr->prev_row + 1, - (int)(png_ptr->row_buf[0])); - - png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, - png_ptr->rowbytes + 1); - -#if defined(PNG_MNG_FEATURES_SUPPORTED) - if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && - (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING)) - { - /* Intrapixel differencing */ - png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1); - } -#endif - - if (png_ptr->transformations) - png_do_read_transformations(png_ptr); - -#if defined(PNG_READ_INTERLACING_SUPPORTED) - /* blow up interlaced rows to full size */ - if (png_ptr->interlaced && - (png_ptr->transformations & PNG_INTERLACE)) - { - if (png_ptr->pass < 6) -/* old interface (pre-1.0.9): - png_do_read_interlace(&(png_ptr->row_info), - png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); - */ - png_do_read_interlace(png_ptr); - - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, - png_pass_dsp_mask[png_ptr->pass]); - if (row != NULL) - png_combine_row(png_ptr, row, - png_pass_mask[png_ptr->pass]); - } - else -#endif - { - if (row != NULL) - png_combine_row(png_ptr, row, 0xff); - if (dsp_row != NULL) - png_combine_row(png_ptr, dsp_row, 0xff); - } - png_read_finish_row(png_ptr); - - if (png_ptr->read_row_fn != NULL) - (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); -} - -/* Read one or more rows of image data. If the image is interlaced, - * and png_set_interlace_handling() has been called, the rows need to - * contain the contents of the rows from the previous pass. If the - * image has alpha or transparency, and png_handle_alpha()[*] has been - * called, the rows contents must be initialized to the contents of the - * screen. - * - * "row" holds the actual image, and pixels are placed in it - * as they arrive. If the image is displayed after each pass, it will - * appear to "sparkle" in. "display_row" can be used to display a - * "chunky" progressive image, with finer detail added as it becomes - * available. If you do not want this "chunky" display, you may pass - * NULL for display_row. If you do not want the sparkle display, and - * you have not called png_handle_alpha(), you may pass NULL for rows. - * If you have called png_handle_alpha(), and the image has either an - * alpha channel or a transparency chunk, you must provide a buffer for - * rows. In this case, you do not have to provide a display_row buffer - * also, but you may. If the image is not interlaced, or if you have - * not called png_set_interlace_handling(), the display_row buffer will - * be ignored, so pass NULL to it. - * - * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.5 - */ - -void PNGAPI -png_read_rows(png_structp png_ptr, png_bytepp row, - png_bytepp display_row, png_uint_32 num_rows) -{ - png_uint_32 i; - png_bytepp rp; - png_bytepp dp; - - png_debug(1, "in png_read_rows\n"); - rp = row; - dp = display_row; - if (rp != NULL && dp != NULL) - for (i = 0; i < num_rows; i++) - { - png_bytep rptr = *rp++; - png_bytep dptr = *dp++; - - png_read_row(png_ptr, rptr, dptr); - } - else if(rp != NULL) - for (i = 0; i < num_rows; i++) - { - png_bytep rptr = *rp; - png_read_row(png_ptr, rptr, png_bytep_NULL); - rp++; - } - else if(dp != NULL) - for (i = 0; i < num_rows; i++) - { - png_bytep dptr = *dp; - png_read_row(png_ptr, png_bytep_NULL, dptr); - dp++; - } -} - -/* Read the entire image. If the image has an alpha channel or a tRNS - * chunk, and you have called png_handle_alpha()[*], you will need to - * initialize the image to the current image that PNG will be overlaying. - * We set the num_rows again here, in case it was incorrectly set in - * png_read_start_row() by a call to png_read_update_info() or - * png_start_read_image() if png_set_interlace_handling() wasn't called - * prior to either of these functions like it should have been. You can - * only call this function once. If you desire to have an image for - * each pass of a interlaced image, use png_read_rows() instead. - * - * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.5 - */ -void PNGAPI -png_read_image(png_structp png_ptr, png_bytepp image) -{ - png_uint_32 i,image_height; - int pass, j; - png_bytepp rp; - - png_debug(1, "in png_read_image\n"); - -#ifdef PNG_READ_INTERLACING_SUPPORTED - pass = png_set_interlace_handling(png_ptr); -#else - if (png_ptr->interlaced) - png_error(png_ptr, - "Cannot read interlaced image -- interlace handler disabled."); - pass = 1; -#endif - - - image_height=png_ptr->height; - png_ptr->num_rows = image_height; /* Make sure this is set correctly */ - - for (j = 0; j < pass; j++) - { - rp = image; - for (i = 0; i < image_height; i++) - { - png_read_row(png_ptr, *rp, png_bytep_NULL); - rp++; - } - } -} - -/* Read the end of the PNG file. Will not read past the end of the - * file, will verify the end is accurate, and will read any comments - * or time information at the end of the file, if info is not NULL. - */ -void PNGAPI -png_read_end(png_structp png_ptr, png_infop info_ptr) -{ - png_byte chunk_length[4]; - png_uint_32 length; - - png_debug(1, "in png_read_end\n"); - png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */ - - do - { -#ifdef PNG_USE_LOCAL_ARRAYS - PNG_IHDR; - PNG_IDAT; - PNG_IEND; - PNG_PLTE; -#if defined(PNG_READ_bKGD_SUPPORTED) - PNG_bKGD; -#endif -#if defined(PNG_READ_cHRM_SUPPORTED) - PNG_cHRM; -#endif -#if defined(PNG_READ_gAMA_SUPPORTED) - PNG_gAMA; -#endif -#if defined(PNG_READ_hIST_SUPPORTED) - PNG_hIST; -#endif -#if defined(PNG_READ_iCCP_SUPPORTED) - PNG_iCCP; -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) - PNG_iTXt; -#endif -#if defined(PNG_READ_oFFs_SUPPORTED) - PNG_oFFs; -#endif -#if defined(PNG_READ_pCAL_SUPPORTED) - PNG_pCAL; -#endif -#if defined(PNG_READ_pHYs_SUPPORTED) - PNG_pHYs; -#endif -#if defined(PNG_READ_sBIT_SUPPORTED) - PNG_sBIT; -#endif -#if defined(PNG_READ_sCAL_SUPPORTED) - PNG_sCAL; -#endif -#if defined(PNG_READ_sPLT_SUPPORTED) - PNG_sPLT; -#endif -#if defined(PNG_READ_sRGB_SUPPORTED) - PNG_sRGB; -#endif -#if defined(PNG_READ_tEXt_SUPPORTED) - PNG_tEXt; -#endif -#if defined(PNG_READ_tIME_SUPPORTED) - PNG_tIME; -#endif -#if defined(PNG_READ_tRNS_SUPPORTED) - PNG_tRNS; -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) - PNG_zTXt; -#endif -#endif /* PNG_GLOBAL_ARRAYS */ - - png_read_data(png_ptr, chunk_length, 4); - length = png_get_uint_32(chunk_length); - - png_reset_crc(png_ptr); - png_crc_read(png_ptr, png_ptr->chunk_name, 4); - - png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name); - - if (length > PNG_MAX_UINT) - png_error(png_ptr, "Invalid chunk length."); - - if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) - png_handle_IHDR(png_ptr, info_ptr, length); - else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) - png_handle_IEND(png_ptr, info_ptr, length); -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED - else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) - { - if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - { - if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) - png_error(png_ptr, "Too many IDAT's found"); - } - else - png_ptr->mode |= PNG_AFTER_IDAT; - png_handle_unknown(png_ptr, info_ptr, length); - if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) - png_ptr->mode |= PNG_HAVE_PLTE; - } -#endif - else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - { - /* Zero length IDATs are legal after the last IDAT has been - * read, but not after other chunks have been read. - */ - if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) - png_error(png_ptr, "Too many IDAT's found"); - png_crc_finish(png_ptr, length); - } - else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) - png_handle_PLTE(png_ptr, info_ptr, length); -#if defined(PNG_READ_bKGD_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) - png_handle_bKGD(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_cHRM_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) - png_handle_cHRM(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_gAMA_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) - png_handle_gAMA(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_hIST_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) - png_handle_hIST(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_oFFs_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) - png_handle_oFFs(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_pCAL_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) - png_handle_pCAL(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sCAL_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) - png_handle_sCAL(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_pHYs_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) - png_handle_pHYs(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sBIT_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) - png_handle_sBIT(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sRGB_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) - png_handle_sRGB(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_iCCP_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) - png_handle_iCCP(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_sPLT_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) - png_handle_sPLT(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tEXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) - png_handle_tEXt(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tIME_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) - png_handle_tIME(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_tRNS_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) - png_handle_tRNS(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) - png_handle_zTXt(png_ptr, info_ptr, length); -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) - else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) - png_handle_iTXt(png_ptr, info_ptr, length); -#endif - else - png_handle_unknown(png_ptr, info_ptr, length); - } while (!(png_ptr->mode & PNG_HAVE_IEND)); -} - -/* free all memory used by the read */ -void PNGAPI -png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, - png_infopp end_info_ptr_ptr) -{ - png_structp png_ptr = NULL; - png_infop info_ptr = NULL, end_info_ptr = NULL; -#ifdef PNG_USER_MEM_SUPPORTED - png_free_ptr free_fn = NULL; - png_voidp mem_ptr = NULL; -#endif - - png_debug(1, "in png_destroy_read_struct\n"); - if (png_ptr_ptr != NULL) - png_ptr = *png_ptr_ptr; - - if (info_ptr_ptr != NULL) - info_ptr = *info_ptr_ptr; - - if (end_info_ptr_ptr != NULL) - end_info_ptr = *end_info_ptr_ptr; - -#ifdef PNG_USER_MEM_SUPPORTED - free_fn = png_ptr->free_fn; - mem_ptr = png_ptr->mem_ptr; -#endif - - png_read_destroy(png_ptr, info_ptr, end_info_ptr); - - if (info_ptr != NULL) - { -#if defined(PNG_TEXT_SUPPORTED) - png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); -#endif - -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn, - (png_voidp)mem_ptr); -#else - png_destroy_struct((png_voidp)info_ptr); -#endif - *info_ptr_ptr = NULL; - } - - if (end_info_ptr != NULL) - { -#if defined(PNG_READ_TEXT_SUPPORTED) - png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1); -#endif -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2((png_voidp)end_info_ptr, (png_free_ptr)free_fn, - (png_voidp)mem_ptr); -#else - png_destroy_struct((png_voidp)end_info_ptr); -#endif - *end_info_ptr_ptr = NULL; - } - - if (png_ptr != NULL) - { -#ifdef PNG_USER_MEM_SUPPORTED - png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, - (png_voidp)mem_ptr); -#else - png_destroy_struct((png_voidp)png_ptr); -#endif - *png_ptr_ptr = NULL; - } -} - -/* free all memory used by the read (old method) */ -void /* PRIVATE */ -png_read_destroy(png_structp png_ptr, png_infop info_ptr,png_infop end_info_ptr) -{ -#ifdef PNG_SETJMP_SUPPORTED - jmp_buf tmp_jmp; -#endif - png_error_ptr error_fn; - png_error_ptr warning_fn; - png_voidp error_ptr; -#ifdef PNG_USER_MEM_SUPPORTED - png_free_ptr free_fn; - png_voidp mem_ptr; /* PDFlib GmbH: was missing */ -#endif - - png_debug(1, "in png_read_destroy\n"); - if (info_ptr != NULL) - png_info_destroy(png_ptr, info_ptr); - - if (end_info_ptr != NULL) - png_info_destroy(png_ptr, end_info_ptr); - - png_free(png_ptr, png_ptr->zbuf); - png_free(png_ptr, png_ptr->big_row_buf); - png_free(png_ptr, png_ptr->prev_row); -#if defined(PNG_READ_DITHER_SUPPORTED) - png_free(png_ptr, png_ptr->palette_lookup); - png_free(png_ptr, png_ptr->dither_index); -#endif -#if defined(PNG_READ_GAMMA_SUPPORTED) - png_free(png_ptr, png_ptr->gamma_table); -#endif -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - png_free(png_ptr, png_ptr->gamma_from_1); - png_free(png_ptr, png_ptr->gamma_to_1); -#endif -#ifdef PNG_FREE_ME_SUPPORTED - if (png_ptr->free_me & PNG_FREE_PLTE) - png_zfree(png_ptr, png_ptr->palette); - png_ptr->free_me &= ~PNG_FREE_PLTE; -#else - if (png_ptr->flags & PNG_FLAG_FREE_PLTE) - png_zfree(png_ptr, png_ptr->palette); - png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; -#endif -#if defined(PNG_tRNS_SUPPORTED) || \ - defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) -#ifdef PNG_FREE_ME_SUPPORTED - if (png_ptr->free_me & PNG_FREE_TRNS) - png_free(png_ptr, png_ptr->trans); - png_ptr->free_me &= ~PNG_FREE_TRNS; -#else - if (png_ptr->flags & PNG_FLAG_FREE_TRNS) - png_free(png_ptr, png_ptr->trans); - png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; -#endif -#endif -#if defined(PNG_READ_hIST_SUPPORTED) -#ifdef PNG_FREE_ME_SUPPORTED - if (png_ptr->free_me & PNG_FREE_HIST) - png_free(png_ptr, png_ptr->hist); - png_ptr->free_me &= ~PNG_FREE_HIST; -#else - if (png_ptr->flags & PNG_FLAG_FREE_HIST) - png_free(png_ptr, png_ptr->hist); - png_ptr->flags &= ~PNG_FLAG_FREE_HIST; -#endif -#endif -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (png_ptr->gamma_16_table != NULL) - { - int i; - int istop = (1 << (8 - png_ptr->gamma_shift)); - for (i = 0; i < istop; i++) - { - png_free(png_ptr, png_ptr->gamma_16_table[i]); - } - png_free(png_ptr, png_ptr->gamma_16_table); - } -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->gamma_16_from_1 != NULL) - { - int i; - int istop = (1 << (8 - png_ptr->gamma_shift)); - for (i = 0; i < istop; i++) - { - png_free(png_ptr, png_ptr->gamma_16_from_1[i]); - } - png_free(png_ptr, png_ptr->gamma_16_from_1); - } - if (png_ptr->gamma_16_to_1 != NULL) - { - int i; - int istop = (1 << (8 - png_ptr->gamma_shift)); - for (i = 0; i < istop; i++) - { - png_free(png_ptr, png_ptr->gamma_16_to_1[i]); - } - png_free(png_ptr, png_ptr->gamma_16_to_1); - } -#endif -#endif -#if defined(PNG_TIME_RFC1123_SUPPORTED) - png_free(png_ptr, png_ptr->time_buffer); -#endif - - inflateEnd(&png_ptr->zstream); -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED - png_free(png_ptr, png_ptr->save_buffer); -#endif - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -#ifdef PNG_TEXT_SUPPORTED - png_free(png_ptr, png_ptr->current_text); -#endif /* PNG_TEXT_SUPPORTED */ -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - - /* Save the important info out of the png_struct, in case it is - * being used again. - */ -#ifdef PNG_SETJMP_SUPPORTED - png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf)); -#endif - - error_fn = png_ptr->error_fn; - warning_fn = png_ptr->warning_fn; - error_ptr = png_ptr->error_ptr; -#ifdef PNG_USER_MEM_SUPPORTED - free_fn = png_ptr->free_fn; - mem_ptr = png_ptr->mem_ptr; /* PDFlib GmbH: was missing */ -#endif - - png_memset(png_ptr, 0, sizeof (png_struct)); - - png_ptr->error_fn = error_fn; - png_ptr->warning_fn = warning_fn; - png_ptr->error_ptr = error_ptr; -#ifdef PNG_USER_MEM_SUPPORTED - png_ptr->free_fn = free_fn; - png_ptr->mem_ptr = mem_ptr; /* PDFlib GmbH: was missing */ -#endif - -#ifdef PNG_SETJMP_SUPPORTED - png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf)); -#endif - -} - -void PNGAPI -png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn) -{ - png_ptr->read_row_fn = read_row_fn; -} - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -void PNGAPI -png_read_png(png_structp png_ptr, png_infop info_ptr, - int transforms, - voidp params) -{ - int row; - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) - /* invert the alpha channel from opacity to transparency */ - if (transforms & PNG_TRANSFORM_INVERT_ALPHA) - png_set_invert_alpha(png_ptr); -#endif - - /* The call to png_read_info() gives us all of the information from the - * PNG file before the first IDAT (image data chunk). - */ - png_read_info(png_ptr, info_ptr); - - /* -------------- image transformations start here ------------------- */ - -#if defined(PNG_READ_16_TO_8_SUPPORTED) - /* tell libpng to strip 16 bit/color files down to 8 bits/color */ - if (transforms & PNG_TRANSFORM_STRIP_16) - png_set_strip_16(png_ptr); -#endif - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) - /* Strip alpha bytes from the input data without combining with the - * background (not recommended). - */ - if (transforms & PNG_TRANSFORM_STRIP_ALPHA) - png_set_strip_alpha(png_ptr); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED) - /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single - * byte into separate bytes (useful for paletted and grayscale images). - */ - if (transforms & PNG_TRANSFORM_PACKING) - png_set_packing(png_ptr); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - /* Change the order of packed pixels to least significant bit first - * (not useful if you are using png_set_packing). */ - if (transforms & PNG_TRANSFORM_PACKSWAP) - png_set_packswap(png_ptr); -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) - /* Expand paletted colors into true RGB triplets - * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel - * Expand paletted or RGB images with transparency to full alpha - * channels so the data will be available as RGBA quartets. - */ - if (transforms & PNG_TRANSFORM_EXPAND) - if ((png_ptr->bit_depth < 8) || - (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) || - (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) - png_set_expand(png_ptr); -#endif - - /* We don't handle background color or gamma transformation or dithering. */ - -#if defined(PNG_READ_INVERT_SUPPORTED) - /* invert monochrome files to have 0 as white and 1 as black */ - if (transforms & PNG_TRANSFORM_INVERT_MONO) - png_set_invert_mono(png_ptr); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) - /* If you want to shift the pixel values from the range [0,255] or - * [0,65535] to the original [0,7] or [0,31], or whatever range the - * colors were originally in: - */ - if ((transforms & PNG_TRANSFORM_SHIFT) - && png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) - { - png_color_8p sig_bit; - - png_get_sBIT(png_ptr, info_ptr, &sig_bit); - png_set_shift(png_ptr, sig_bit); - } -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) - /* flip the RGB pixels to BGR (or RGBA to BGRA) */ - if (transforms & PNG_TRANSFORM_BGR) - png_set_bgr(png_ptr); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) - /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */ - if (transforms & PNG_TRANSFORM_SWAP_ALPHA) - png_set_swap_alpha(png_ptr); -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) - /* swap bytes of 16 bit files to least significant byte first */ - if (transforms & PNG_TRANSFORM_SWAP_ENDIAN) - png_set_swap(png_ptr); -#endif - - /* We don't handle adding filler bytes */ - - /* Optional call to gamma correct and add the background to the palette - * and update info structure. REQUIRED if you are expecting libpng to - * update the palette for you (i.e., you selected such a transform above). - */ - png_read_update_info(png_ptr, info_ptr); - - /* -------------- image transformations end here ------------------- */ - -#ifdef PNG_FREE_ME_SUPPORTED - png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); -#endif - if(info_ptr->row_pointers == NULL) - { - info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr, - info_ptr->height * sizeof(png_bytep)); -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_ROWS; -#endif - for (row = 0; row < (int)info_ptr->height; row++) - { - info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr, - png_get_rowbytes(png_ptr, info_ptr)); - } - } - - png_read_image(png_ptr, info_ptr->row_pointers); - info_ptr->valid |= PNG_INFO_IDAT; - - /* read rest of file, and get additional chunks in info_ptr - REQUIRED */ - png_read_end(png_ptr, info_ptr); - - if(transforms == 0 || params == NULL) - /* quiet compiler warnings */ return; - -} -#endif diff --git a/src/libs/pdflib/libs/png/pngrio.c b/src/libs/pdflib/libs/png/pngrio.c deleted file mode 100644 index 4341b73aa8..0000000000 --- a/src/libs/pdflib/libs/png/pngrio.c +++ /dev/null @@ -1,168 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngrio.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngrio.c - functions for data input - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file provides a location for all input. Users who need - * special handling are expected to write a function that has the same - * arguments as this and performs a similar function, but that possibly - * has a different input method. Note that you shouldn't change this - * function, but rather write a replacement function and then make - * libpng use it at run time with png_set_read_fn(...). - */ - -#define PNG_INTERNAL -#include "png.h" - -/* Read the data from whatever input you are using. The default routine - reads from a file pointer. Note that this routine sometimes gets called - with very small lengths, so you should implement some kind of simple - buffering if you are using unbuffered reads. This should never be asked - to read more then 64K on a 16 bit machine. */ -void /* PRIVATE */ -png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - png_debug1(4,"reading %d bytes\n", (int)length); - if (png_ptr->read_data_fn != NULL) - (*(png_ptr->read_data_fn))(png_ptr, data, length); - else - png_error(png_ptr, "Call to NULL read function"); -} - -#if !defined(PNG_NO_STDIO) -/* This is the function that does the actual reading of data. If you are - not reading from a standard C stream, you should create a replacement - read_data function and use it at run time with png_set_read_fn(), rather - than changing the library. */ -#ifndef USE_FAR_KEYWORD -void PNGAPI -png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - png_size_t check; - - /* fread() returns 0 on error, so it is OK to store this in a png_size_t - * instead of an int, which is what fread() actually returns. - */ -/* PDFlib GmbH: -#if defined(_WIN32_WCE) - if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) - check = 0; -#else -*/ - check = (png_size_t)fread(data, (png_size_t)1, length, - (png_FILE_p)png_ptr->io_ptr); -/* #endif PDFlib GmbH: */ - - if (check != length) - png_error(png_ptr, "Read Error"); -} -#else -/* this is the model-independent version. Since the standard I/O library - can't handle far buffers in the medium and small models, we have to copy - the data. -*/ - -#define NEAR_BUF_SIZE 1024 -#define MIN(a,b) (a <= b ? a : b) - -static void /* PRIVATE */ -png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - int check; - png_byte *n_data; - png_FILE_p io_ptr; - - /* Check if data really is near. If so, use usual code. */ - n_data = (png_byte *)CVT_PTR_NOCHECK(data); - io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); - if ((png_bytep)n_data == data) - { -/* PDFlib GmbH: -#if defined(_WIN32_WCE) - if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) - check = 0; -#else -*/ - check = fread(n_data, 1, length, io_ptr); -/* #endif PDFlib GmbH: */ - } - else - { - png_byte buf[NEAR_BUF_SIZE]; - png_size_t read, remaining, err; - check = 0; - remaining = length; - do - { - read = MIN(NEAR_BUF_SIZE, remaining); -/* PDFlib GmbH: -#if defined(_WIN32_WCE) - if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) ) - err = 0; -#else -*/ - err = fread(buf, (png_size_t)1, read, io_ptr); -/* #endif PDFlib GmbH: */ - png_memcpy(data, buf, read); /* copy far buffer to near buffer */ - if(err != read) - break; - else - check += err; - data += read; - remaining -= read; - } - while (remaining != 0); - } - if ((png_uint_32)check != (png_uint_32)length) - png_error(png_ptr, "read Error"); -} -#endif -#endif - -/* This function allows the application to supply a new input function - for libpng if standard C streams aren't being used. - - This function takes as its arguments: - png_ptr - pointer to a png input data structure - io_ptr - pointer to user supplied structure containing info about - the input functions. May be NULL. - read_data_fn - pointer to a new input function that takes as its - arguments a pointer to a png_struct, a pointer to - a location where input data can be stored, and a 32-bit - unsigned int that is the number of bytes to be read. - To exit and output any fatal error messages the new write - function should call png_error(png_ptr, "Error msg"). */ -void PNGAPI -png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, - png_rw_ptr read_data_fn) -{ - png_ptr->io_ptr = io_ptr; - -#if !defined(PNG_NO_STDIO) - if (read_data_fn != NULL) - png_ptr->read_data_fn = read_data_fn; - else - png_ptr->read_data_fn = png_default_read_data; -#else - png_ptr->read_data_fn = read_data_fn; -#endif - - /* It is an error to write to a read device */ - if (png_ptr->write_data_fn != NULL) - { - png_ptr->write_data_fn = NULL; - png_warning(png_ptr, - "It's an error to set both read_data_fn and write_data_fn in the "); - png_warning(png_ptr, - "same structure. Resetting write_data_fn to NULL."); - } - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) - png_ptr->output_flush_fn = NULL; -#endif -} diff --git a/src/libs/pdflib/libs/png/pngrtran.c b/src/libs/pdflib/libs/png/pngrtran.c deleted file mode 100644 index f48c4fcf36..0000000000 --- a/src/libs/pdflib/libs/png/pngrtran.c +++ /dev/null @@ -1,4176 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngrtran.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngrtran.c - transforms the data in a row for PNG readers - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file contains functions optionally called by an application - * in order to tell libpng how to handle data when reading a PNG. - * Transformations that are used in both reading and writing are - * in pngtrans.c. - */ - -#define PNG_INTERNAL -#include "png.h" - -/* Set the action on getting a CRC error for an ancillary or critical chunk. */ -void PNGAPI -png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action) -{ - png_debug(1, "in png_set_crc_action\n"); - /* Tell libpng how we react to CRC errors in critical chunks */ - switch (crit_action) - { - case PNG_CRC_NO_CHANGE: /* leave setting as is */ - break; - case PNG_CRC_WARN_USE: /* warn/use data */ - png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; - png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE; - break; - case PNG_CRC_QUIET_USE: /* quiet/use data */ - png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; - png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE | - PNG_FLAG_CRC_CRITICAL_IGNORE; - break; - case PNG_CRC_WARN_DISCARD: /* not a valid action for critical data */ - png_warning(png_ptr, "Can't discard critical data on CRC error."); - case PNG_CRC_ERROR_QUIT: /* error/quit */ - case PNG_CRC_DEFAULT: - default: - png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; - break; - } - - switch (ancil_action) - { - case PNG_CRC_NO_CHANGE: /* leave setting as is */ - break; - case PNG_CRC_WARN_USE: /* warn/use data */ - png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; - png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE; - break; - case PNG_CRC_QUIET_USE: /* quiet/use data */ - png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; - png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE | - PNG_FLAG_CRC_ANCILLARY_NOWARN; - break; - case PNG_CRC_ERROR_QUIT: /* error/quit */ - png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; - png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN; - break; - case PNG_CRC_WARN_DISCARD: /* warn/discard data */ - case PNG_CRC_DEFAULT: - default: - png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; - break; - } -} - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ - defined(PNG_FLOATING_POINT_SUPPORTED) -/* handle alpha and tRNS via a background color */ -void PNGAPI -png_set_background(png_structp png_ptr, - png_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma) -{ - png_debug(1, "in png_set_background\n"); - if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN) - { - png_warning(png_ptr, "Application must supply a known background gamma"); - return; - } - - png_ptr->transformations |= PNG_BACKGROUND; - png_memcpy(&(png_ptr->background), background_color, sizeof(png_color_16)); - png_ptr->background_gamma = (float)background_gamma; - png_ptr->background_gamma_type = (png_byte)(background_gamma_code); - png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0); - - /* Note: if need_expand is set and color_type is either RGB or RGB_ALPHA - * (in which case need_expand is superfluous anyway), the background color - * might actually be gray yet not be flagged as such. This is not a problem - * for the current code, which uses PNG_BACKGROUND_IS_GRAY only to - * decide when to do the png_do_gray_to_rgb() transformation. - */ - if ((need_expand && !(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) || - (!need_expand && background_color->red == background_color->green && - background_color->red == background_color->blue)) - png_ptr->mode |= PNG_BACKGROUND_IS_GRAY; -} -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -/* strip 16 bit depth files to 8 bit depth */ -void PNGAPI -png_set_strip_16(png_structp png_ptr) -{ - png_debug(1, "in png_set_strip_16\n"); - png_ptr->transformations |= PNG_16_TO_8; -} -#endif - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -void PNGAPI -png_set_strip_alpha(png_structp png_ptr) -{ - png_debug(1, "in png_set_strip_alpha\n"); - png_ptr->transformations |= PNG_STRIP_ALPHA; -} -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -/* Dither file to 8 bit. Supply a palette, the current number - * of elements in the palette, the maximum number of elements - * allowed, and a histogram if possible. If the current number - * of colors is greater then the maximum number, the palette will be - * modified to fit in the maximum number. "full_dither" indicates - * whether we need a dithering cube set up for RGB images, or if we - * simply are reducing the number of colors in a paletted image. - */ - -typedef struct png_dsort_struct -{ - struct png_dsort_struct FAR * next; - png_byte left; - png_byte right; -} png_dsort; -typedef png_dsort FAR * png_dsortp; -typedef png_dsort FAR * FAR * png_dsortpp; - -void PNGAPI -png_set_dither(png_structp png_ptr, png_colorp palette, - int num_palette, int maximum_colors, png_uint_16p histogram, - int full_dither) -{ - png_debug(1, "in png_set_dither\n"); - png_ptr->transformations |= PNG_DITHER; - - if (!full_dither) - { - int i; - - png_ptr->dither_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)(num_palette * sizeof (png_byte))); - for (i = 0; i < num_palette; i++) - png_ptr->dither_index[i] = (png_byte)i; - } - - if (num_palette > maximum_colors) - { - if (histogram != NULL) - { - /* This is easy enough, just throw out the least used colors. - Perhaps not the best solution, but good enough. */ - - int i; - - /* initialize an array to sort colors */ - png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr, - (png_uint_32)(num_palette * sizeof (png_byte))); - - /* initialize the dither_sort array */ - for (i = 0; i < num_palette; i++) - png_ptr->dither_sort[i] = (png_byte)i; - - /* Find the least used palette entries by starting a - bubble sort, and running it until we have sorted - out enough colors. Note that we don't care about - sorting all the colors, just finding which are - least used. */ - - for (i = num_palette - 1; i >= maximum_colors; i--) - { - int done; /* to stop early if the list is pre-sorted */ - int j; - - done = 1; - for (j = 0; j < i; j++) - { - if (histogram[png_ptr->dither_sort[j]] - < histogram[png_ptr->dither_sort[j + 1]]) - { - png_byte t; - - t = png_ptr->dither_sort[j]; - png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1]; - png_ptr->dither_sort[j + 1] = t; - done = 0; - } - } - if (done) - break; - } - - /* swap the palette around, and set up a table, if necessary */ - if (full_dither) - { - int j = num_palette; - - /* put all the useful colors within the max, but don't - move the others */ - for (i = 0; i < maximum_colors; i++) - { - if ((int)png_ptr->dither_sort[i] >= maximum_colors) - { - do - j--; - while ((int)png_ptr->dither_sort[j] >= maximum_colors); - palette[i] = palette[j]; - } - } - } - else - { - int j = num_palette; - - /* move all the used colors inside the max limit, and - develop a translation table */ - for (i = 0; i < maximum_colors; i++) - { - /* only move the colors we need to */ - if ((int)png_ptr->dither_sort[i] >= maximum_colors) - { - png_color tmp_color; - - do - j--; - while ((int)png_ptr->dither_sort[j] >= maximum_colors); - - tmp_color = palette[j]; - palette[j] = palette[i]; - palette[i] = tmp_color; - /* indicate where the color went */ - png_ptr->dither_index[j] = (png_byte)i; - png_ptr->dither_index[i] = (png_byte)j; - } - } - - /* find closest color for those colors we are not using */ - for (i = 0; i < num_palette; i++) - { - if ((int)png_ptr->dither_index[i] >= maximum_colors) - { - int min_d, k, min_k, d_index; - - /* find the closest color to one we threw out */ - d_index = png_ptr->dither_index[i]; - min_d = PNG_COLOR_DIST(palette[d_index], palette[0]); - for (k = 1, min_k = 0; k < maximum_colors; k++) - { - int d; - - d = PNG_COLOR_DIST(palette[d_index], palette[k]); - - if (d < min_d) - { - min_d = d; - min_k = k; - } - } - /* point to closest color */ - png_ptr->dither_index[i] = (png_byte)min_k; - } - } - } - png_free(png_ptr, png_ptr->dither_sort); - png_ptr->dither_sort=NULL; - } - else - { - /* This is much harder to do simply (and quickly). Perhaps - we need to go through a median cut routine, but those - don't always behave themselves with only a few colors - as input. So we will just find the closest two colors, - and throw out one of them (chosen somewhat randomly). - [We don't understand this at all, so if someone wants to - work on improving it, be our guest - AED, GRP] - */ - int i; - int max_d; - int num_new_palette; - png_dsortp t; - png_dsortpp hash; - - t=NULL; - - /* initialize palette index arrays */ - png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr, - (png_uint_32)(num_palette * sizeof (png_byte))); - png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)(num_palette * sizeof (png_byte))); - - /* initialize the sort array */ - for (i = 0; i < num_palette; i++) - { - png_ptr->index_to_palette[i] = (png_byte)i; - png_ptr->palette_to_index[i] = (png_byte)i; - } - - hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 * - sizeof (png_dsortp))); - for (i = 0; i < 769; i++) - hash[i] = NULL; -/* png_memset(hash, 0, 769 * sizeof (png_dsortp)); */ - - num_new_palette = num_palette; - - /* initial wild guess at how far apart the farthest pixel - pair we will be eliminating will be. Larger - numbers mean more areas will be allocated, Smaller - numbers run the risk of not saving enough data, and - having to do this all over again. - - I have not done extensive checking on this number. - */ - max_d = 96; - - while (num_new_palette > maximum_colors) - { - for (i = 0; i < num_new_palette - 1; i++) - { - int j; - - for (j = i + 1; j < num_new_palette; j++) - { - int d; - - d = PNG_COLOR_DIST(palette[i], palette[j]); - - if (d <= max_d) - { - - t = (png_dsortp)png_malloc_warn(png_ptr, - (png_uint_32)(sizeof(png_dsort))); - if (t == NULL) - break; - t->next = hash[d]; - t->left = (png_byte)i; - t->right = (png_byte)j; - hash[d] = t; - } - } - if (t == NULL) - break; - } - - if (t != NULL) - for (i = 0; i <= max_d; i++) - { - if (hash[i] != NULL) - { - png_dsortp p; - - for (p = hash[i]; p; p = p->next) - { - if ((int)png_ptr->index_to_palette[p->left] - < num_new_palette && - (int)png_ptr->index_to_palette[p->right] - < num_new_palette) - { - int j, next_j; - - if (num_new_palette & 0x01) - { - j = p->left; - next_j = p->right; - } - else - { - j = p->right; - next_j = p->left; - } - - num_new_palette--; - palette[png_ptr->index_to_palette[j]] - = palette[num_new_palette]; - if (!full_dither) - { - int k; - - for (k = 0; k < num_palette; k++) - { - if (png_ptr->dither_index[k] == - png_ptr->index_to_palette[j]) - png_ptr->dither_index[k] = - png_ptr->index_to_palette[next_j]; - if ((int)png_ptr->dither_index[k] == - num_new_palette) - png_ptr->dither_index[k] = - png_ptr->index_to_palette[j]; - } - } - - png_ptr->index_to_palette[png_ptr->palette_to_index - [num_new_palette]] = png_ptr->index_to_palette[j]; - png_ptr->palette_to_index[png_ptr->index_to_palette[j]] - = png_ptr->palette_to_index[num_new_palette]; - - png_ptr->index_to_palette[j] =(png_byte)num_new_palette; - png_ptr->palette_to_index[num_new_palette] =(png_byte)j; - } - if (num_new_palette <= maximum_colors) - break; - } - if (num_new_palette <= maximum_colors) - break; - } - } - - for (i = 0; i < 769; i++) - { - if (hash[i] != NULL) - { - png_dsortp p = hash[i]; - while (p) - { - t = p->next; - png_free(png_ptr, p); - p = t; - } - } - hash[i] = 0; - } - max_d += 96; - } - png_free(png_ptr, hash); - png_free(png_ptr, png_ptr->palette_to_index); - png_free(png_ptr, png_ptr->index_to_palette); - png_ptr->palette_to_index=NULL; - png_ptr->index_to_palette=NULL; - } - num_palette = maximum_colors; - } - if (png_ptr->palette == NULL) - { - png_ptr->palette = palette; - } - png_ptr->num_palette = (png_uint_16)num_palette; - - if (full_dither) - { - int i; - png_bytep distance; - int total_bits = PNG_DITHER_RED_BITS + PNG_DITHER_GREEN_BITS + - PNG_DITHER_BLUE_BITS; - int num_red = (1 << PNG_DITHER_RED_BITS); - int num_green = (1 << PNG_DITHER_GREEN_BITS); - int num_blue = (1 << PNG_DITHER_BLUE_BITS); - png_size_t num_entries = ((png_size_t)1 << total_bits); - - png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr, - (png_uint_32)(num_entries * sizeof (png_byte))); - - png_memset(png_ptr->palette_lookup, 0, num_entries * sizeof (png_byte)); - - distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * - sizeof(png_byte))); - - png_memset(distance, 0xff, num_entries * sizeof(png_byte)); - - for (i = 0; i < num_palette; i++) - { - int ir, ig, ib; - int r = (palette[i].red >> (8 - PNG_DITHER_RED_BITS)); - int g = (palette[i].green >> (8 - PNG_DITHER_GREEN_BITS)); - int b = (palette[i].blue >> (8 - PNG_DITHER_BLUE_BITS)); - - for (ir = 0; ir < num_red; ir++) - { - int dr = abs(ir - r); - int index_r =(ir << (PNG_DITHER_BLUE_BITS + PNG_DITHER_GREEN_BITS)); - - for (ig = 0; ig < num_green; ig++) - { - int dg = abs(ig - g); - int dt = dr + dg; - int dm = ((dr > dg) ? dr : dg); - int index_g = index_r | (ig << PNG_DITHER_BLUE_BITS); - - for (ib = 0; ib < num_blue; ib++) - { - int d_index = index_g | ib; - int db = abs(ib - b); - int dmax = ((dm > db) ? dm : db); - int d = dmax + dt + db; - - if (d < (int)distance[d_index]) - { - distance[d_index] = (png_byte)d; - png_ptr->palette_lookup[d_index] = (png_byte)i; - } - } - } - } - } - - png_free(png_ptr, distance); - } -} -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) -/* Transform the image from the file_gamma to the screen_gamma. We - * only do transformations on images where the file_gamma and screen_gamma - * are not close reciprocals, otherwise it slows things down slightly, and - * also needlessly introduces small errors. - * - * We will turn off gamma transformation later if no semitransparent entries - * are present in the tRNS array for palette images. We can't do it here - * because we don't necessarily have the tRNS chunk yet. - */ -void PNGAPI -png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma) -{ - png_debug(1, "in png_set_gamma\n"); - if ((fabs(scrn_gamma * file_gamma - 1.0) > PNG_GAMMA_THRESHOLD) || - (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) || - (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)) - png_ptr->transformations |= PNG_GAMMA; - png_ptr->gamma = (float)file_gamma; - png_ptr->screen_gamma = (float)scrn_gamma; -} -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) -/* Expand paletted images to RGB, expand grayscale images of - * less than 8-bit depth to 8-bit depth, and expand tRNS chunks - * to alpha channels. - */ -void PNGAPI -png_set_expand(png_structp png_ptr) -{ - png_debug(1, "in png_set_expand\n"); - png_ptr->transformations |= PNG_EXPAND; -} - -/* GRR 19990627: the following three functions currently are identical - * to png_set_expand(). However, it is entirely reasonable that someone - * might wish to expand an indexed image to RGB but *not* expand a single, - * fully transparent palette entry to a full alpha channel--perhaps instead - * convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace - * the transparent color with a particular RGB value, or drop tRNS entirely. - * IOW, a future version of the library may make the transformations flag - * a bit more fine-grained, with separate bits for each of these three - * functions. - * - * More to the point, these functions make it obvious what libpng will be - * doing, whereas "expand" can (and does) mean any number of things. - */ - -/* Expand paletted images to RGB. */ -void PNGAPI -png_set_palette_to_rgb(png_structp png_ptr) -{ - png_debug(1, "in png_set_expand\n"); - png_ptr->transformations |= PNG_EXPAND; -} - -/* Expand grayscale images of less than 8-bit depth to 8 bits. */ -void PNGAPI -png_set_gray_1_2_4_to_8(png_structp png_ptr) -{ - png_debug(1, "in png_set_expand\n"); - png_ptr->transformations |= PNG_EXPAND; -} - -/* Expand tRNS chunks to alpha channels. */ -void PNGAPI -png_set_tRNS_to_alpha(png_structp png_ptr) -{ - png_debug(1, "in png_set_expand\n"); - png_ptr->transformations |= PNG_EXPAND; -} -#endif /* defined(PNG_READ_EXPAND_SUPPORTED) */ - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -void PNGAPI -png_set_gray_to_rgb(png_structp png_ptr) -{ - png_debug(1, "in png_set_gray_to_rgb\n"); - png_ptr->transformations |= PNG_GRAY_TO_RGB; -} -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -#if defined(PNG_FLOATING_POINT_SUPPORTED) -/* Convert a RGB image to a grayscale of the same width. This allows us, - * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image. - */ - -void PNGAPI -png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red, - double green) -{ - int red_fixed = (int)((float)red*100000.0 + 0.5); - int green_fixed = (int)((float)green*100000.0 + 0.5); - png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed); -} -#endif - -void PNGAPI -png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action, - png_fixed_point red, png_fixed_point green) -{ - png_debug(1, "in png_set_rgb_to_gray\n"); - switch(error_action) - { - case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY; - break; - case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN; - break; - case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR; - } - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) -#if defined(PNG_READ_EXPAND_SUPPORTED) - png_ptr->transformations |= PNG_EXPAND; -#else - { - png_warning(png_ptr, "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED."); - png_ptr->transformations &= ~PNG_RGB_TO_GRAY; - } -#endif - { - png_uint_16 red_int, green_int; - if(red < 0 || green < 0) - { - red_int = 6968; /* .212671 * 32768 + .5 */ - green_int = 23434; /* .715160 * 32768 + .5 */ - } - else if(red + green < 100000L) - { - red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L); - green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L); - } - else - { - png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients"); - red_int = 6968; - green_int = 23434; - } - png_ptr->rgb_to_gray_red_coeff = red_int; - png_ptr->rgb_to_gray_green_coeff = green_int; - png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int); - } -} -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -void PNGAPI -png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr - read_user_transform_fn) -{ - png_debug(1, "in png_set_read_user_transform_fn\n"); -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) - png_ptr->transformations |= PNG_USER_TRANSFORM; - png_ptr->read_user_transform_fn = read_user_transform_fn; -#endif -#ifdef PNG_LEGACY_SUPPORTED - if(read_user_transform_fn) - png_warning(png_ptr, - "This version of libpng does not support user transforms"); -#endif -} -#endif - -/* Initialize everything needed for the read. This includes modifying - * the palette. - */ -void /* PRIVATE */ -png_init_read_transformations(png_structp png_ptr) -{ - png_debug(1, "in png_init_read_transformations\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if(png_ptr != NULL) -#endif - { -#if defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_SHIFT_SUPPORTED)\ - || defined(PNG_READ_GAMMA_SUPPORTED) - int color_type = png_ptr->color_type; -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED) - if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) && - (png_ptr->transformations & PNG_EXPAND)) - { - if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */ - { - /* expand background chunk. */ - switch (png_ptr->bit_depth) - { - case 1: - png_ptr->background.gray *= (png_uint_16)0xff; - png_ptr->background.red = png_ptr->background.green - = png_ptr->background.blue = png_ptr->background.gray; - break; - case 2: - png_ptr->background.gray *= (png_uint_16)0x55; - png_ptr->background.red = png_ptr->background.green - = png_ptr->background.blue = png_ptr->background.gray; - break; - case 4: - png_ptr->background.gray *= (png_uint_16)0x11; - png_ptr->background.red = png_ptr->background.green - = png_ptr->background.blue = png_ptr->background.gray; - break; - case 8: - case 16: - png_ptr->background.red = png_ptr->background.green - = png_ptr->background.blue = png_ptr->background.gray; - break; - } - } - else if (color_type == PNG_COLOR_TYPE_PALETTE) - { - png_ptr->background.red = - png_ptr->palette[png_ptr->background.index].red; - png_ptr->background.green = - png_ptr->palette[png_ptr->background.index].green; - png_ptr->background.blue = - png_ptr->palette[png_ptr->background.index].blue; - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) - if (png_ptr->transformations & PNG_INVERT_ALPHA) - { -#if defined(PNG_READ_EXPAND_SUPPORTED) - if (!(png_ptr->transformations & PNG_EXPAND)) -#endif - { - /* invert the alpha channel (in tRNS) unless the pixels are - going to be expanded, in which case leave it for later */ - int i,istop; - istop=(int)png_ptr->num_trans; - for (i=0; itrans[i] = (png_byte)(255 - png_ptr->trans[i]); - } - } -#endif - - } - } -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) - png_ptr->background_1 = png_ptr->background; -#endif -#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) - - if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0) - && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0) - < PNG_GAMMA_THRESHOLD)) - { - int i,k; - k=0; - for (i=0; inum_trans; i++) - { - if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff) - k=1; /* partial transparency is present */ - } - if (k == 0) - png_ptr->transformations &= (~PNG_GAMMA); - } - - if (png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) - { - png_build_gamma_table(png_ptr); -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->transformations & PNG_BACKGROUND) - { - if (color_type == PNG_COLOR_TYPE_PALETTE) - { - /* could skip if no transparency and - */ - png_color back, back_1; - png_colorp palette = png_ptr->palette; - int num_palette = png_ptr->num_palette; - int i; - if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) - { - back.red = png_ptr->gamma_table[png_ptr->background.red]; - back.green = png_ptr->gamma_table[png_ptr->background.green]; - back.blue = png_ptr->gamma_table[png_ptr->background.blue]; - - back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; - back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; - back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; - } - else - { - double g, gs; - - switch (png_ptr->background_gamma_type) - { - case PNG_BACKGROUND_GAMMA_SCREEN: - g = (png_ptr->screen_gamma); - gs = 1.0; - break; - case PNG_BACKGROUND_GAMMA_FILE: - g = 1.0 / (png_ptr->gamma); - gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); - break; - case PNG_BACKGROUND_GAMMA_UNIQUE: - g = 1.0 / (png_ptr->background_gamma); - gs = 1.0 / (png_ptr->background_gamma * - png_ptr->screen_gamma); - break; - default: - g = 1.0; /* back_1 */ - gs = 1.0; /* back */ - } - - if ( fabs(gs - 1.0) < PNG_GAMMA_THRESHOLD) - { - back.red = (png_byte)png_ptr->background.red; - back.green = (png_byte)png_ptr->background.green; - back.blue = (png_byte)png_ptr->background.blue; - } - else - { - back.red = (png_byte)(pow( - (double)png_ptr->background.red/255, gs) * 255.0 + .5); - back.green = (png_byte)(pow( - (double)png_ptr->background.green/255, gs) * 255.0 + .5); - back.blue = (png_byte)(pow( - (double)png_ptr->background.blue/255, gs) * 255.0 + .5); - } - - back_1.red = (png_byte)(pow( - (double)png_ptr->background.red/255, g) * 255.0 + .5); - back_1.green = (png_byte)(pow( - (double)png_ptr->background.green/255, g) * 255.0 + .5); - back_1.blue = (png_byte)(pow( - (double)png_ptr->background.blue/255, g) * 255.0 + .5); - } - for (i = 0; i < num_palette; i++) - { - if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff) - { - if (png_ptr->trans[i] == 0) - { - palette[i] = back; - } - else /* if (png_ptr->trans[i] != 0xff) */ - { - png_byte v, w; - - v = png_ptr->gamma_to_1[palette[i].red]; - png_composite(w, v, png_ptr->trans[i], back_1.red); - palette[i].red = png_ptr->gamma_from_1[w]; - - v = png_ptr->gamma_to_1[palette[i].green]; - png_composite(w, v, png_ptr->trans[i], back_1.green); - palette[i].green = png_ptr->gamma_from_1[w]; - - v = png_ptr->gamma_to_1[palette[i].blue]; - png_composite(w, v, png_ptr->trans[i], back_1.blue); - palette[i].blue = png_ptr->gamma_from_1[w]; - } - } - else - { - palette[i].red = png_ptr->gamma_table[palette[i].red]; - palette[i].green = png_ptr->gamma_table[palette[i].green]; - palette[i].blue = png_ptr->gamma_table[palette[i].blue]; - } - } - } - /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */ - else - /* color_type != PNG_COLOR_TYPE_PALETTE */ - { - double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1); - double g = 1.0; - double gs = 1.0; - - switch (png_ptr->background_gamma_type) - { - case PNG_BACKGROUND_GAMMA_SCREEN: - g = (png_ptr->screen_gamma); - gs = 1.0; - break; - case PNG_BACKGROUND_GAMMA_FILE: - g = 1.0 / (png_ptr->gamma); - gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); - break; - case PNG_BACKGROUND_GAMMA_UNIQUE: - g = 1.0 / (png_ptr->background_gamma); - gs = 1.0 / (png_ptr->background_gamma * - png_ptr->screen_gamma); - break; - } - - png_ptr->background_1.gray = (png_uint_16)(pow( - (double)png_ptr->background.gray / m, g) * m + .5); - png_ptr->background.gray = (png_uint_16)(pow( - (double)png_ptr->background.gray / m, gs) * m + .5); - - if ((png_ptr->background.red != png_ptr->background.green) || - (png_ptr->background.red != png_ptr->background.blue) || - (png_ptr->background.red != png_ptr->background.gray)) - { - /* RGB or RGBA with color background */ - png_ptr->background_1.red = (png_uint_16)(pow( - (double)png_ptr->background.red / m, g) * m + .5); - png_ptr->background_1.green = (png_uint_16)(pow( - (double)png_ptr->background.green / m, g) * m + .5); - png_ptr->background_1.blue = (png_uint_16)(pow( - (double)png_ptr->background.blue / m, g) * m + .5); - png_ptr->background.red = (png_uint_16)(pow( - (double)png_ptr->background.red / m, gs) * m + .5); - png_ptr->background.green = (png_uint_16)(pow( - (double)png_ptr->background.green / m, gs) * m + .5); - png_ptr->background.blue = (png_uint_16)(pow( - (double)png_ptr->background.blue / m, gs) * m + .5); - } - else - { - /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */ - png_ptr->background_1.red = png_ptr->background_1.green - = png_ptr->background_1.blue = png_ptr->background_1.gray; - png_ptr->background.red = png_ptr->background.green - = png_ptr->background.blue = png_ptr->background.gray; - } - } - } - else - /* transformation does not include PNG_BACKGROUND */ -#endif /* PNG_READ_BACKGROUND_SUPPORTED */ - if (color_type == PNG_COLOR_TYPE_PALETTE) - { - png_colorp palette = png_ptr->palette; - int num_palette = png_ptr->num_palette; - int i; - - for (i = 0; i < num_palette; i++) - { - palette[i].red = png_ptr->gamma_table[palette[i].red]; - palette[i].green = png_ptr->gamma_table[palette[i].green]; - palette[i].blue = png_ptr->gamma_table[palette[i].blue]; - } - } - } -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - else -#endif -#endif /* PNG_READ_GAMMA_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */ -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - /* No GAMMA transformation */ - if ((png_ptr->transformations & PNG_BACKGROUND) && - (color_type == PNG_COLOR_TYPE_PALETTE)) - { - int i; - int istop = (int)png_ptr->num_trans; - png_color back; - png_colorp palette = png_ptr->palette; - - back.red = (png_byte)png_ptr->background.red; - back.green = (png_byte)png_ptr->background.green; - back.blue = (png_byte)png_ptr->background.blue; - - for (i = 0; i < istop; i++) - { - if (png_ptr->trans[i] == 0) - { - palette[i] = back; - } - else if (png_ptr->trans[i] != 0xff) - { - /* The png_composite() macro is defined in png.h */ - png_composite(palette[i].red, palette[i].red, - png_ptr->trans[i], back.red); - png_composite(palette[i].green, palette[i].green, - png_ptr->trans[i], back.green); - png_composite(palette[i].blue, palette[i].blue, - png_ptr->trans[i], back.blue); - } - } - } -#endif /* PNG_READ_BACKGROUND_SUPPORTED */ - -#if defined(PNG_READ_SHIFT_SUPPORTED) - if ((png_ptr->transformations & PNG_SHIFT) && - (color_type == PNG_COLOR_TYPE_PALETTE)) - { - png_uint_16 i; - png_uint_16 istop = png_ptr->num_palette; - int sr = 8 - png_ptr->sig_bit.red; - int sg = 8 - png_ptr->sig_bit.green; - int sb = 8 - png_ptr->sig_bit.blue; - - if (sr < 0 || sr > 8) - sr = 0; - if (sg < 0 || sg > 8) - sg = 0; - if (sb < 0 || sb > 8) - sb = 0; - for (i = 0; i < istop; i++) - { - png_ptr->palette[i].red >>= sr; - png_ptr->palette[i].green >>= sg; - png_ptr->palette[i].blue >>= sb; - } - } -#endif /* PNG_READ_SHIFT_SUPPORTED */ - } -#if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \ - && !defined(PNG_READ_BACKGROUND_SUPPORTED) - if(png_ptr) - return; -#endif -} - -/* Modify the info structure to reflect the transformations. The - * info should be updated so a PNG file could be written with it, - * assuming the transformations result in valid PNG data. - */ -void /* PRIVATE */ -png_read_transform_info(png_structp png_ptr, png_infop info_ptr) -{ - png_debug(1, "in png_read_transform_info\n"); -#if defined(PNG_READ_EXPAND_SUPPORTED) - if (png_ptr->transformations & PNG_EXPAND) - { - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (png_ptr->num_trans) - info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA; - else - info_ptr->color_type = PNG_COLOR_TYPE_RGB; - info_ptr->bit_depth = 8; - info_ptr->num_trans = 0; - } - else - { - if (png_ptr->num_trans) - info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; - if (info_ptr->bit_depth < 8) - info_ptr->bit_depth = 8; - info_ptr->num_trans = 0; - } - } -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->transformations & PNG_BACKGROUND) - { - info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; - info_ptr->num_trans = 0; - info_ptr->background = png_ptr->background; - } -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (png_ptr->transformations & PNG_GAMMA) - { -#ifdef PNG_FLOATING_POINT_SUPPORTED - info_ptr->gamma = png_ptr->gamma; -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - info_ptr->int_gamma = png_ptr->int_gamma; -#endif - } -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) - if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16)) - info_ptr->bit_depth = 8; -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) - if (png_ptr->transformations & PNG_DITHER) - { - if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || - (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) && - png_ptr->palette_lookup && info_ptr->bit_depth == 8) - { - info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; - } - } -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) - if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8)) - info_ptr->bit_depth = 8; -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) - if (png_ptr->transformations & PNG_GRAY_TO_RGB) - info_ptr->color_type |= PNG_COLOR_MASK_COLOR; -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - if (png_ptr->transformations & PNG_RGB_TO_GRAY) - info_ptr->color_type &= ~PNG_COLOR_MASK_COLOR; -#endif - - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - info_ptr->channels = 1; - else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) - info_ptr->channels = 3; - else - info_ptr->channels = 1; - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) - if (png_ptr->transformations & PNG_STRIP_ALPHA) - info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; -#endif - - if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) - info_ptr->channels++; - -#if defined(PNG_READ_FILLER_SUPPORTED) - /* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */ - if ((png_ptr->transformations & PNG_FILLER) && - ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || - (info_ptr->color_type == PNG_COLOR_TYPE_GRAY))) - { - info_ptr->channels++; -#if 0 /* if adding a true alpha channel not just filler */ - info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; -#endif - } -#endif - -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \ -defined(PNG_READ_USER_TRANSFORM_SUPPORTED) - if(png_ptr->transformations & PNG_USER_TRANSFORM) - { - if(info_ptr->bit_depth < png_ptr->user_transform_depth) - info_ptr->bit_depth = png_ptr->user_transform_depth; - if(info_ptr->channels < png_ptr->user_transform_channels) - info_ptr->channels = png_ptr->user_transform_channels; - } -#endif - - info_ptr->pixel_depth = (png_byte)(info_ptr->channels * - info_ptr->bit_depth); - info_ptr->rowbytes = ((info_ptr->width * info_ptr->pixel_depth + 7) >> 3); - -#if !defined(PNG_READ_EXPAND_SUPPORTED) - if(png_ptr) - return; -#endif -} - -/* Transform the row. The order of transformations is significant, - * and is very touchy. If you add a transformation, take care to - * decide how it fits in with the other transformations here. - */ -void /* PRIVATE */ -png_do_read_transformations(png_structp png_ptr) -{ - png_debug(1, "in png_do_read_transformations\n"); -#if !defined(PNG_USELESS_TESTS_SUPPORTED) - if (png_ptr->row_buf == NULL) - { -#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) - char msg[50]; - - sprintf(msg, "NULL row buffer for row %ld, pass %d", png_ptr->row_number, - png_ptr->pass); - png_error(png_ptr, msg); -#else - png_error(png_ptr, "NULL row buffer"); -#endif - } -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) - if (png_ptr->transformations & PNG_EXPAND) - { - if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE) - { - png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, - png_ptr->palette, png_ptr->trans, png_ptr->num_trans); - } - else - { - if (png_ptr->num_trans) - png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, - &(png_ptr->trans_values)); - else - png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, - NULL); - } - } -#endif - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) - if (png_ptr->transformations & PNG_STRIP_ALPHA) - png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, - PNG_FLAG_FILLER_AFTER); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - if (png_ptr->transformations & PNG_RGB_TO_GRAY) - { - int rgb_error = - png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info), png_ptr->row_buf +1); - if(rgb_error) - { - png_ptr->rgb_to_gray_status=1; - if(png_ptr->transformations == PNG_RGB_TO_GRAY_WARN) - png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel"); - if(png_ptr->transformations == PNG_RGB_TO_GRAY_ERR) - png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel"); - } - } -#endif - -/* -From Andreas Dilger e-mail to png-implement, 26 March 1998: - - In most cases, the "simple transparency" should be done prior to doing - gray-to-RGB, or you will have to test 3x as many bytes to check if a - pixel is transparent. You would also need to make sure that the - transparency information is upgraded to RGB. - - To summarize, the current flow is: - - Gray + simple transparency -> compare 1 or 2 gray bytes and composite - with background "in place" if transparent, - convert to RGB if necessary - - Gray + alpha -> composite with gray background and remove alpha bytes, - convert to RGB if necessary - - To support RGB backgrounds for gray images we need: - - Gray + simple transparency -> convert to RGB + simple transparency, compare - 3 or 6 bytes and composite with background - "in place" if transparent (3x compare/pixel - compared to doing composite with gray bkgrnd) - - Gray + alpha -> convert to RGB + alpha, composite with background and - remove alpha bytes (3x float operations/pixel - compared with composite on gray background) - - Greg's change will do this. The reason it wasn't done before is for - performance, as this increases the per-pixel operations. If we would check - in advance if the background was gray or RGB, and position the gray-to-RGB - transform appropriately, then it would save a lot of work/time. - */ - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) - /* if gray -> RGB, do so now only if background is non-gray; else do later - * for performance reasons */ - if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && - !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) - png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - if ((png_ptr->transformations & PNG_BACKGROUND) && - ((png_ptr->num_trans != 0 ) || - (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) - png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1, - &(png_ptr->trans_values), &(png_ptr->background) -#if defined(PNG_READ_GAMMA_SUPPORTED) - , &(png_ptr->background_1), - png_ptr->gamma_table, png_ptr->gamma_from_1, - png_ptr->gamma_to_1, png_ptr->gamma_16_table, - png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1, - png_ptr->gamma_shift -#endif -); -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) - if ((png_ptr->transformations & PNG_GAMMA) && -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - !((png_ptr->transformations & PNG_BACKGROUND) && - ((png_ptr->num_trans != 0) || - (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) && -#endif - (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)) - png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1, - png_ptr->gamma_table, png_ptr->gamma_16_table, - png_ptr->gamma_shift); -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) - if (png_ptr->transformations & PNG_16_TO_8) - png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) - if (png_ptr->transformations & PNG_DITHER) - { - png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1, - png_ptr->palette_lookup, png_ptr->dither_index); - if(png_ptr->row_info.rowbytes == (png_uint_32)0) - png_error(png_ptr, "png_do_dither returned rowbytes=0"); - } -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) - if (png_ptr->transformations & PNG_INVERT_MONO) - png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) - if (png_ptr->transformations & PNG_SHIFT) - png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1, - &(png_ptr->shift)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) - if (png_ptr->transformations & PNG_PACK) - png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) - if (png_ptr->transformations & PNG_BGR) - png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) - /* if gray -> RGB, do so now only if we did not do so above */ - if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && - (png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) - png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) - if (png_ptr->transformations & PNG_FILLER) - png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, - (png_uint_32)png_ptr->filler, png_ptr->flags); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) - if (png_ptr->transformations & PNG_INVERT_ALPHA) - png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) - if (png_ptr->transformations & PNG_SWAP_ALPHA) - png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) - if (png_ptr->transformations & PNG_SWAP_BYTES) - png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) - if (png_ptr->transformations & PNG_USER_TRANSFORM) - { - if(png_ptr->read_user_transform_fn != NULL) - (*(png_ptr->read_user_transform_fn)) /* user read transform function */ - (png_ptr, /* png_ptr */ - &(png_ptr->row_info), /* row_info: */ - /* png_uint_32 width; width of row */ - /* png_uint_32 rowbytes; number of bytes in row */ - /* png_byte color_type; color type of pixels */ - /* png_byte bit_depth; bit depth of samples */ - /* png_byte channels; number of channels (1-4) */ - /* png_byte pixel_depth; bits per pixel (depth*channels) */ - png_ptr->row_buf + 1); /* start of pixel data for row */ -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) - if(png_ptr->user_transform_depth) - png_ptr->row_info.bit_depth = png_ptr->user_transform_depth; - if(png_ptr->user_transform_channels) - png_ptr->row_info.channels = png_ptr->user_transform_channels; -#endif - png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * - png_ptr->row_info.channels); - png_ptr->row_info.rowbytes = (png_ptr->row_info.width * - png_ptr->row_info.pixel_depth+7)>>3; - } -#endif - -} - -#if defined(PNG_READ_PACK_SUPPORTED) -/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel, - * without changing the actual values. Thus, if you had a row with - * a bit depth of 1, you would end up with bytes that only contained - * the numbers 0 or 1. If you would rather they contain 0 and 255, use - * png_do_shift() after this. - */ -void /* PRIVATE */ -png_do_unpack(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_unpack\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL && row_info->bit_depth < 8) -#else - if (row_info->bit_depth < 8) -#endif - { - png_uint_32 i; - png_uint_32 row_width=row_info->width; - - switch (row_info->bit_depth) - { - case 1: - { - png_bytep sp = row + (png_size_t)((row_width - 1) >> 3); - png_bytep dp = row + (png_size_t)row_width - 1; - png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07); - for (i = 0; i < row_width; i++) - { - *dp = (png_byte)((*sp >> shift) & 0x01); - if (shift == 7) - { - shift = 0; - sp--; - } - else - shift++; - - dp--; - } - break; - } - case 2: - { - - png_bytep sp = row + (png_size_t)((row_width - 1) >> 2); - png_bytep dp = row + (png_size_t)row_width - 1; - png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); - for (i = 0; i < row_width; i++) - { - *dp = (png_byte)((*sp >> shift) & 0x03); - if (shift == 6) - { - shift = 0; - sp--; - } - else - shift += 2; - - dp--; - } - break; - } - case 4: - { - png_bytep sp = row + (png_size_t)((row_width - 1) >> 1); - png_bytep dp = row + (png_size_t)row_width - 1; - png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); - for (i = 0; i < row_width; i++) - { - *dp = (png_byte)((*sp >> shift) & 0x0f); - if (shift == 4) - { - shift = 0; - sp--; - } - else - shift = 4; - - dp--; - } - break; - } - } - row_info->bit_depth = 8; - row_info->pixel_depth = (png_byte)(8 * row_info->channels); - row_info->rowbytes = row_width * row_info->channels; - } -} -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) -/* Reverse the effects of png_do_shift. This routine merely shifts the - * pixels back to their significant bits values. Thus, if you have - * a row of bit depth 8, but only 5 are significant, this will shift - * the values back to 0 through 31. - */ -void /* PRIVATE */ -png_do_unshift(png_row_infop row_info, png_bytep row, png_color_8p sig_bits) -{ - png_debug(1, "in png_do_unshift\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && sig_bits != NULL && -#endif - row_info->color_type != PNG_COLOR_TYPE_PALETTE) - { - int shift[4]; - int channels = 0; - int c; - png_uint_16 value = 0; - png_uint_32 row_width = row_info->width; - - if (row_info->color_type & PNG_COLOR_MASK_COLOR) - { - shift[channels++] = row_info->bit_depth - sig_bits->red; - shift[channels++] = row_info->bit_depth - sig_bits->green; - shift[channels++] = row_info->bit_depth - sig_bits->blue; - } - else - { - shift[channels++] = row_info->bit_depth - sig_bits->gray; - } - if (row_info->color_type & PNG_COLOR_MASK_ALPHA) - { - shift[channels++] = row_info->bit_depth - sig_bits->alpha; - } - - for (c = 0; c < channels; c++) - { - if (shift[c] <= 0) - shift[c] = 0; - else - value = 1; - } - - if (!value) - return; - - switch (row_info->bit_depth) - { - case 2: - { - png_bytep bp; - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - - for (bp = row, i = 0; i < istop; i++) - { - *bp >>= 1; - *bp++ &= 0x55; - } - break; - } - case 4: - { - png_bytep bp = row; - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - png_byte mask = (png_byte)((((int)0xf0 >> shift[0]) & (int)0xf0) | - (png_byte)((int)0xf >> shift[0])); - - for (i = 0; i < istop; i++) - { - *bp >>= shift[0]; - *bp++ &= mask; - } - break; - } - case 8: - { - png_bytep bp = row; - png_uint_32 i; - png_uint_32 istop = row_width * channels; - - for (i = 0; i < istop; i++) - { - *bp++ >>= shift[i%channels]; - } - break; - } - case 16: - { - png_bytep bp = row; - png_uint_32 i; - png_uint_32 istop = channels * row_width; - - for (i = 0; i < istop; i++) - { - value = (png_uint_16)((*bp << 8) + *(bp + 1)); - value >>= shift[i%channels]; - *bp++ = (png_byte)(value >> 8); - *bp++ = (png_byte)(value & 0xff); - } - break; - } - } - } -} -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -/* chop rows of bit depth 16 down to 8 */ -void /* PRIVATE */ -png_do_chop(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_chop\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL && row_info->bit_depth == 16) -#else - if (row_info->bit_depth == 16) -#endif - { - png_bytep sp = row; - png_bytep dp = row; - png_uint_32 i; - png_uint_32 istop = row_info->width * row_info->channels; - - for (i = 0; i> 8)) >> 8; - * - * Approximate calculation with shift/add instead of multiply/divide: - * *dp = ((((png_uint_32)(*sp) << 8) | - * (png_uint_32)((int)(*(sp + 1)) - *sp)) + 128) >> 8; - * - * What we actually do to avoid extra shifting and conversion: - */ - - *dp = *sp + ((((int)(*(sp + 1)) - *sp) > 128) ? 1 : 0); -#else - /* Simply discard the low order byte */ - *dp = *sp; -#endif - } - row_info->bit_depth = 8; - row_info->pixel_depth = (png_byte)(8 * row_info->channels); - row_info->rowbytes = row_info->width * row_info->channels; - } -} -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) -void /* PRIVATE */ -png_do_read_swap_alpha(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_read_swap_alpha\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL) -#endif - { - png_uint_32 row_width = row_info->width; - if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - { - /* This converts from RGBA to ARGB */ - if (row_info->bit_depth == 8) - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_byte save; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - save = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = save; - } - } - /* This converts from RRGGBBAA to AARRGGBB */ - else - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_byte save[2]; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - save[0] = *(--sp); - save[1] = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = save[0]; - *(--dp) = save[1]; - } - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - /* This converts from GA to AG */ - if (row_info->bit_depth == 8) - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_byte save; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - save = *(--sp); - *(--dp) = *(--sp); - *(--dp) = save; - } - } - /* This converts from GGAA to AAGG */ - else - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_byte save[2]; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - save[0] = *(--sp); - save[1] = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = save[0]; - *(--dp) = save[1]; - } - } - } - } -} -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) -void /* PRIVATE */ -png_do_read_invert_alpha(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_read_invert_alpha\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL) -#endif - { - png_uint_32 row_width = row_info->width; - if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - { - /* This inverts the alpha channel in RGBA */ - if (row_info->bit_depth == 8) - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - *(--dp) = (png_byte)(255 - *(--sp)); - -/* This does nothing: - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - We can replace it with: -*/ - sp-=3; - dp=sp; - } - } - /* This inverts the alpha channel in RRGGBBAA */ - else - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - *(--dp) = (png_byte)(255 - *(--sp)); - *(--dp) = (png_byte)(255 - *(--sp)); - -/* This does nothing: - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - We can replace it with: -*/ - sp-=6; - dp=sp; - } - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - /* This inverts the alpha channel in GA */ - if (row_info->bit_depth == 8) - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - *(--dp) = (png_byte)(255 - *(--sp)); - *(--dp) = *(--sp); - } - } - /* This inverts the alpha channel in GGAA */ - else - { - png_bytep sp = row + row_info->rowbytes; - png_bytep dp = sp; - png_uint_32 i; - - for (i = 0; i < row_width; i++) - { - *(--dp) = (png_byte)(255 - *(--sp)); - *(--dp) = (png_byte)(255 - *(--sp)); -/* - *(--dp) = *(--sp); - *(--dp) = *(--sp); -*/ - sp-=2; - dp=sp; - } - } - } - } -} -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) -/* Add filler channel if we have RGB color */ -void /* PRIVATE */ -png_do_read_filler(png_row_infop row_info, png_bytep row, - png_uint_32 filler, png_uint_32 flags) -{ - png_uint_32 i; - png_uint_32 row_width = row_info->width; - - png_byte hi_filler = (png_byte)((filler>>8) & 0xff); - png_byte lo_filler = (png_byte)(filler & 0xff); - - png_debug(1, "in png_do_read_filler\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - row_info->color_type == PNG_COLOR_TYPE_GRAY) - { - if(row_info->bit_depth == 8) - { - /* This changes the data from G to GX */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - png_bytep sp = row + (png_size_t)row_width; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 1; i < row_width; i++) - { - *(--dp) = lo_filler; - *(--dp) = *(--sp); - } - *(--dp) = lo_filler; - row_info->channels = 2; - row_info->pixel_depth = 16; - row_info->rowbytes = row_width * 2; - } - /* This changes the data from G to XG */ - else - { - png_bytep sp = row + (png_size_t)row_width; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 0; i < row_width; i++) - { - *(--dp) = *(--sp); - *(--dp) = lo_filler; - } - row_info->channels = 2; - row_info->pixel_depth = 16; - row_info->rowbytes = row_width * 2; - } - } - else if(row_info->bit_depth == 16) - { - /* This changes the data from GG to GGXX */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - png_bytep sp = row + (png_size_t)row_width; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 1; i < row_width; i++) - { - *(--dp) = hi_filler; - *(--dp) = lo_filler; - *(--dp) = *(--sp); - *(--dp) = *(--sp); - } - *(--dp) = hi_filler; - *(--dp) = lo_filler; - row_info->channels = 2; - row_info->pixel_depth = 32; - row_info->rowbytes = row_width * 4; - } - /* This changes the data from GG to XXGG */ - else - { - png_bytep sp = row + (png_size_t)row_width; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 0; i < row_width; i++) - { - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = hi_filler; - *(--dp) = lo_filler; - } - row_info->channels = 2; - row_info->pixel_depth = 32; - row_info->rowbytes = row_width * 4; - } - } - } /* COLOR_TYPE == GRAY */ - else if (row_info->color_type == PNG_COLOR_TYPE_RGB) - { - if(row_info->bit_depth == 8) - { - /* This changes the data from RGB to RGBX */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - png_bytep sp = row + (png_size_t)row_width * 3; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 1; i < row_width; i++) - { - *(--dp) = lo_filler; - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - } - *(--dp) = lo_filler; - row_info->channels = 4; - row_info->pixel_depth = 32; - row_info->rowbytes = row_width * 4; - } - /* This changes the data from RGB to XRGB */ - else - { - png_bytep sp = row + (png_size_t)row_width * 3; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 0; i < row_width; i++) - { - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = lo_filler; - } - row_info->channels = 4; - row_info->pixel_depth = 32; - row_info->rowbytes = row_width * 4; - } - } - else if(row_info->bit_depth == 16) - { - /* This changes the data from RRGGBB to RRGGBBXX */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - png_bytep sp = row + (png_size_t)row_width * 3; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 1; i < row_width; i++) - { - *(--dp) = hi_filler; - *(--dp) = lo_filler; - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - } - *(--dp) = hi_filler; - *(--dp) = lo_filler; - row_info->channels = 4; - row_info->pixel_depth = 64; - row_info->rowbytes = row_width * 8; - } - /* This changes the data from RRGGBB to XXRRGGBB */ - else - { - png_bytep sp = row + (png_size_t)row_width * 3; - png_bytep dp = sp + (png_size_t)row_width; - for (i = 0; i < row_width; i++) - { - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = *(--sp); - *(--dp) = hi_filler; - *(--dp) = lo_filler; - } - row_info->channels = 4; - row_info->pixel_depth = 64; - row_info->rowbytes = row_width * 8; - } - } - } /* COLOR_TYPE == RGB */ -} -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -/* expand grayscale files to RGB, with or without alpha */ -void /* PRIVATE */ -png_do_gray_to_rgb(png_row_infop row_info, png_bytep row) -{ - png_uint_32 i; - png_uint_32 row_width = row_info->width; - - png_debug(1, "in png_do_gray_to_rgb\n"); - if (row_info->bit_depth >= 8 && -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - !(row_info->color_type & PNG_COLOR_MASK_COLOR)) - { - if (row_info->color_type == PNG_COLOR_TYPE_GRAY) - { - if (row_info->bit_depth == 8) - { - png_bytep sp = row + (png_size_t)row_width - 1; - png_bytep dp = sp + (png_size_t)row_width * 2; - for (i = 0; i < row_width; i++) - { - *(dp--) = *sp; - *(dp--) = *sp; - *(dp--) = *(sp--); - } - } - else - { - png_bytep sp = row + (png_size_t)row_width * 2 - 1; - png_bytep dp = sp + (png_size_t)row_width * 4; - for (i = 0; i < row_width; i++) - { - *(dp--) = *sp; - *(dp--) = *(sp - 1); - *(dp--) = *sp; - *(dp--) = *(sp - 1); - *(dp--) = *(sp--); - *(dp--) = *(sp--); - } - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - if (row_info->bit_depth == 8) - { - png_bytep sp = row + (png_size_t)row_width * 2 - 1; - png_bytep dp = sp + (png_size_t)row_width * 2; - for (i = 0; i < row_width; i++) - { - *(dp--) = *(sp--); - *(dp--) = *sp; - *(dp--) = *sp; - *(dp--) = *(sp--); - } - } - else - { - png_bytep sp = row + (png_size_t)row_width * 4 - 1; - png_bytep dp = sp + (png_size_t)row_width * 4; - for (i = 0; i < row_width; i++) - { - *(dp--) = *(sp--); - *(dp--) = *(sp--); - *(dp--) = *sp; - *(dp--) = *(sp - 1); - *(dp--) = *sp; - *(dp--) = *(sp - 1); - *(dp--) = *(sp--); - *(dp--) = *(sp--); - } - } - } - row_info->channels += (png_byte)2; - row_info->color_type |= PNG_COLOR_MASK_COLOR; - row_info->pixel_depth = (png_byte)(row_info->channels * - row_info->bit_depth); - row_info->rowbytes = ((row_width * - row_info->pixel_depth + 7) >> 3); - } -} -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -/* reduce RGB files to grayscale, with or without alpha - * using the equation given in Poynton's ColorFAQ at - * - * Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net - * - * Y = 0.212671 * R + 0.715160 * G + 0.072169 * B - * - * We approximate this with - * - * Y = 0.21268 * R + 0.7151 * G + 0.07217 * B - * - * which can be expressed with integers as - * - * Y = (6969 * R + 23434 * G + 2365 * B)/32768 - * - * The calculation is to be done in a linear colorspace. - * - * Other integer coefficents can be used via png_set_rgb_to_gray(). - */ -int /* PRIVATE */ -png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row) - -{ - png_uint_32 i; - - png_uint_32 row_width = row_info->width; - int rgb_error = 0; - - png_debug(1, "in png_do_rgb_to_gray\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - (row_info->color_type & PNG_COLOR_MASK_COLOR)) - { - png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff; - png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff; - png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff; - - if (row_info->color_type == PNG_COLOR_TYPE_RGB) - { - if (row_info->bit_depth == 8) - { -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) - { - png_bytep sp = row; - png_bytep dp = row; - - for (i = 0; i < row_width; i++) - { - png_byte red = png_ptr->gamma_to_1[*(sp++)]; - png_byte green = png_ptr->gamma_to_1[*(sp++)]; - png_byte blue = png_ptr->gamma_to_1[*(sp++)]; - if(red != green || red != blue) - { - rgb_error |= 1; - *(dp++) = png_ptr->gamma_from_1[ - (rc*red+gc*green+bc*blue)>>15]; - } - else - *(dp++) = *(sp-1); - } - } - else -#endif - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_byte red = *(sp++); - png_byte green = *(sp++); - png_byte blue = *(sp++); - if(red != green || red != blue) - { - rgb_error |= 1; - *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15); - } - else - *(dp++) = *(sp-1); - } - } - } - - else /* RGB bit_depth == 16 */ - { -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->gamma_16_to_1 != NULL && - png_ptr->gamma_16_from_1 != NULL) - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 red, green, blue, w; - - red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - - if(red == green && red == blue) - w = red; - else - { - png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> - png_ptr->gamma_shift][red>>8]; - png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff)>> - png_ptr->gamma_shift][green>>8]; - png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> - png_ptr->gamma_shift][blue>>8]; - png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1 - + bc*blue_1)>>15); - w = png_ptr->gamma_16_from_1[(gray16&0xff) >> - png_ptr->gamma_shift][gray16 >> 8]; - rgb_error |= 1; - } - - *(dp++) = (png_byte)((w>>8) & 0xff); - *(dp++) = (png_byte)(w & 0xff); - } - } - else -#endif - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 red, green, blue, gray16; - - red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - - if(red != green || red != blue) - rgb_error |= 1; - gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); - *(dp++) = (png_byte)((gray16>>8) & 0xff); - *(dp++) = (png_byte)(gray16 & 0xff); - } - } - } - } - if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - { - if (row_info->bit_depth == 8) - { -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_byte red = png_ptr->gamma_to_1[*(sp++)]; - png_byte green = png_ptr->gamma_to_1[*(sp++)]; - png_byte blue = png_ptr->gamma_to_1[*(sp++)]; - if(red != green || red != blue) - rgb_error |= 1; - *(dp++) = png_ptr->gamma_from_1 - [(rc*red + gc*green + bc*blue)>>15]; - *(dp++) = *(sp++); /* alpha */ - } - } - else -#endif - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_byte red = *(sp++); - png_byte green = *(sp++); - png_byte blue = *(sp++); - if(red != green || red != blue) - rgb_error |= 1; - *(dp++) = (png_byte)((gc*red + gc*green + bc*blue)>>8); - *(dp++) = *(sp++); /* alpha */ - } - } - } - else /* RGBA bit_depth == 16 */ - { -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->gamma_16_to_1 != NULL && - png_ptr->gamma_16_from_1 != NULL) - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 red, green, blue, w; - - red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; - - if(red == green && red == blue) - w = red; - else - { - png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> - png_ptr->gamma_shift][red>>8]; - png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff)>> - png_ptr->gamma_shift][green>>8]; - png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> - png_ptr->gamma_shift][blue>>8]; - png_uint_16 gray16 = (png_uint_16)((rc * red_1 - + gc * green_1 + bc * blue_1)>>15); - w = png_ptr->gamma_16_from_1[(gray16&0xff) >> - png_ptr->gamma_shift][gray16 >> 8]; - rgb_error |= 1; - } - - *(dp++) = (png_byte)((w>>8) & 0xff); - *(dp++) = (png_byte)(w & 0xff); - *(dp++) = *(sp++); /* alpha */ - *(dp++) = *(sp++); - } - } - else -#endif - { - png_bytep sp = row; - png_bytep dp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 red, green, blue, gray16; - red = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; - green = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; - blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; - if(red != green || red != blue) - rgb_error |= 1; - gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); - *(dp++) = (png_byte)((gray16>>8) & 0xff); - *(dp++) = (png_byte)(gray16 & 0xff); - *(dp++) = *(sp++); /* alpha */ - *(dp++) = *(sp++); - } - } - } - } - row_info->channels -= (png_byte)2; - row_info->color_type &= ~PNG_COLOR_MASK_COLOR; - row_info->pixel_depth = (png_byte)(row_info->channels * - row_info->bit_depth); - row_info->rowbytes = ((row_width * - row_info->pixel_depth + 7) >> 3); - } - return rgb_error; -} -#endif - -/* Build a grayscale palette. Palette is assumed to be 1 << bit_depth - * large of png_color. This lets grayscale images be treated as - * paletted. Most useful for gamma correction and simplification - * of code. - */ -void PNGAPI -png_build_grayscale_palette(int bit_depth, png_colorp palette) -{ - int num_palette; - int color_inc; - int i; - int v; - - png_debug(1, "in png_do_build_grayscale_palette\n"); - if (palette == NULL) - return; - - switch (bit_depth) - { - case 1: - num_palette = 2; - color_inc = 0xff; - break; - case 2: - num_palette = 4; - color_inc = 0x55; - break; - case 4: - num_palette = 16; - color_inc = 0x11; - break; - case 8: - num_palette = 256; - color_inc = 1; - break; - default: - num_palette = 0; - color_inc = 0; - break; - } - - for (i = 0, v = 0; i < num_palette; i++, v += color_inc) - { - palette[i].red = (png_byte)v; - palette[i].green = (png_byte)v; - palette[i].blue = (png_byte)v; - } -} - -/* This function is currently unused. Do we really need it? */ -#if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED) -void /* PRIVATE */ -png_correct_palette(png_structp png_ptr, png_colorp palette, - int num_palette) -{ - png_debug(1, "in png_correct_palette\n"); -#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ - defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) - if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND)) - { - png_color back, back_1; - - if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) - { - back.red = png_ptr->gamma_table[png_ptr->background.red]; - back.green = png_ptr->gamma_table[png_ptr->background.green]; - back.blue = png_ptr->gamma_table[png_ptr->background.blue]; - - back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; - back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; - back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; - } - else - { - double g; - - g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); - - if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN || - fabs(g - 1.0) < PNG_GAMMA_THRESHOLD) - { - back.red = png_ptr->background.red; - back.green = png_ptr->background.green; - back.blue = png_ptr->background.blue; - } - else - { - back.red = - (png_byte)(pow((double)png_ptr->background.red/255, g) * - 255.0 + 0.5); - back.green = - (png_byte)(pow((double)png_ptr->background.green/255, g) * - 255.0 + 0.5); - back.blue = - (png_byte)(pow((double)png_ptr->background.blue/255, g) * - 255.0 + 0.5); - } - - g = 1.0 / png_ptr->background_gamma; - - back_1.red = - (png_byte)(pow((double)png_ptr->background.red/255, g) * - 255.0 + 0.5); - back_1.green = - (png_byte)(pow((double)png_ptr->background.green/255, g) * - 255.0 + 0.5); - back_1.blue = - (png_byte)(pow((double)png_ptr->background.blue/255, g) * - 255.0 + 0.5); - } - - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - png_uint_32 i; - - for (i = 0; i < (png_uint_32)num_palette; i++) - { - if (i < png_ptr->num_trans && png_ptr->trans[i] == 0) - { - palette[i] = back; - } - else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff) - { - png_byte v, w; - - v = png_ptr->gamma_to_1[png_ptr->palette[i].red]; - png_composite(w, v, png_ptr->trans[i], back_1.red); - palette[i].red = png_ptr->gamma_from_1[w]; - - v = png_ptr->gamma_to_1[png_ptr->palette[i].green]; - png_composite(w, v, png_ptr->trans[i], back_1.green); - palette[i].green = png_ptr->gamma_from_1[w]; - - v = png_ptr->gamma_to_1[png_ptr->palette[i].blue]; - png_composite(w, v, png_ptr->trans[i], back_1.blue); - palette[i].blue = png_ptr->gamma_from_1[w]; - } - else - { - palette[i].red = png_ptr->gamma_table[palette[i].red]; - palette[i].green = png_ptr->gamma_table[palette[i].green]; - palette[i].blue = png_ptr->gamma_table[palette[i].blue]; - } - } - } - else - { - int i; - - for (i = 0; i < num_palette; i++) - { - if (palette[i].red == (png_byte)png_ptr->trans_values.gray) - { - palette[i] = back; - } - else - { - palette[i].red = png_ptr->gamma_table[palette[i].red]; - palette[i].green = png_ptr->gamma_table[palette[i].green]; - palette[i].blue = png_ptr->gamma_table[palette[i].blue]; - } - } - } - } - else -#endif -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (png_ptr->transformations & PNG_GAMMA) - { - int i; - - for (i = 0; i < num_palette; i++) - { - palette[i].red = png_ptr->gamma_table[palette[i].red]; - palette[i].green = png_ptr->gamma_table[palette[i].green]; - palette[i].blue = png_ptr->gamma_table[palette[i].blue]; - } - } -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - else -#endif -#endif -#if defined(PNG_READ_BACKGROUND_SUPPORTED) - if (png_ptr->transformations & PNG_BACKGROUND) - { - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - png_color back; - - back.red = (png_byte)png_ptr->background.red; - back.green = (png_byte)png_ptr->background.green; - back.blue = (png_byte)png_ptr->background.blue; - - for (i = 0; i < (int)png_ptr->num_trans; i++) - { - if (png_ptr->trans[i] == 0) - { - palette[i].red = back.red; - palette[i].green = back.green; - palette[i].blue = back.blue; - } - else if (png_ptr->trans[i] != 0xff) - { - png_composite(palette[i].red, png_ptr->palette[i].red, - png_ptr->trans[i], back.red); - png_composite(palette[i].green, png_ptr->palette[i].green, - png_ptr->trans[i], back.green); - png_composite(palette[i].blue, png_ptr->palette[i].blue, - png_ptr->trans[i], back.blue); - } - } - } - else /* assume grayscale palette (what else could it be?) */ - { - int i; - - for (i = 0; i < num_palette; i++) - { - if (i == (png_byte)png_ptr->trans_values.gray) - { - palette[i].red = (png_byte)png_ptr->background.red; - palette[i].green = (png_byte)png_ptr->background.green; - palette[i].blue = (png_byte)png_ptr->background.blue; - } - } - } - } -#endif -} -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -/* Replace any alpha or transparency with the supplied background color. - * "background" is already in the screen gamma, while "background_1" is - * at a gamma of 1.0. Paletted files have already been taken care of. - */ -void /* PRIVATE */ -png_do_background(png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background -#if defined(PNG_READ_GAMMA_SUPPORTED) - , png_color_16p background_1, - png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, - png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, - png_uint_16pp gamma_16_to_1, int gamma_shift -#endif - ) -{ - png_bytep sp, dp; - png_uint_32 i; - png_uint_32 row_width=row_info->width; - int shift; - - png_debug(1, "in png_do_background\n"); - if (background != NULL && -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - (!(row_info->color_type & PNG_COLOR_MASK_ALPHA) || - (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_values))) - { - switch (row_info->color_type) - { - case PNG_COLOR_TYPE_GRAY: - { - switch (row_info->bit_depth) - { - case 1: - { - sp = row; - shift = 7; - for (i = 0; i < row_width; i++) - { - if ((png_uint_16)((*sp >> shift) & 0x01) - == trans_values->gray) - { - *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); - *sp |= (png_byte)(background->gray << shift); - } - if (!shift) - { - shift = 7; - sp++; - } - else - shift--; - } - break; - } - case 2: - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_table != NULL) - { - sp = row; - shift = 6; - for (i = 0; i < row_width; i++) - { - if ((png_uint_16)((*sp >> shift) & 0x03) - == trans_values->gray) - { - *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); - *sp |= (png_byte)(background->gray << shift); - } - else - { - png_byte p = (png_byte)((*sp >> shift) & 0x03); - png_byte g = (png_byte)((gamma_table [p | (p << 2) | - (p << 4) | (p << 6)] >> 6) & 0x03); - *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); - *sp |= (png_byte)(g << shift); - } - if (!shift) - { - shift = 6; - sp++; - } - else - shift -= 2; - } - } - else -#endif - { - sp = row; - shift = 6; - for (i = 0; i < row_width; i++) - { - if ((png_uint_16)((*sp >> shift) & 0x03) - == trans_values->gray) - { - *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); - *sp |= (png_byte)(background->gray << shift); - } - if (!shift) - { - shift = 6; - sp++; - } - else - shift -= 2; - } - } - break; - } - case 4: - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_table != NULL) - { - sp = row; - shift = 4; - for (i = 0; i < row_width; i++) - { - if ((png_uint_16)((*sp >> shift) & 0x0f) - == trans_values->gray) - { - *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); - *sp |= (png_byte)(background->gray << shift); - } - else - { - png_byte p = (png_byte)((*sp >> shift) & 0x0f); - png_byte g = (png_byte)((gamma_table[p | - (p << 4)] >> 4) & 0x0f); - *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); - *sp |= (png_byte)(g << shift); - } - if (!shift) - { - shift = 4; - sp++; - } - else - shift -= 4; - } - } - else -#endif - { - sp = row; - shift = 4; - for (i = 0; i < row_width; i++) - { - if ((png_uint_16)((*sp >> shift) & 0x0f) - == trans_values->gray) - { - *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); - *sp |= (png_byte)(background->gray << shift); - } - if (!shift) - { - shift = 4; - sp++; - } - else - shift -= 4; - } - } - break; - } - case 8: - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_table != NULL) - { - sp = row; - for (i = 0; i < row_width; i++, sp++) - { - if (*sp == trans_values->gray) - { - *sp = (png_byte)background->gray; - } - else - { - *sp = gamma_table[*sp]; - } - } - } - else -#endif - { - sp = row; - for (i = 0; i < row_width; i++, sp++) - { - if (*sp == trans_values->gray) - { - *sp = (png_byte)background->gray; - } - } - } - break; - } - case 16: - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_16 != NULL) - { - sp = row; - for (i = 0; i < row_width; i++, sp += 2) - { - png_uint_16 v; - - v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - if (v == trans_values->gray) - { - /* background is already in screen gamma */ - *sp = (png_byte)((background->gray >> 8) & 0xff); - *(sp + 1) = (png_byte)(background->gray & 0xff); - } - else - { - v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - } - } - } - else -#endif - { - sp = row; - for (i = 0; i < row_width; i++, sp += 2) - { - png_uint_16 v; - - v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - if (v == trans_values->gray) - { - *sp = (png_byte)((background->gray >> 8) & 0xff); - *(sp + 1) = (png_byte)(background->gray & 0xff); - } - } - } - break; - } - } - break; - } - case PNG_COLOR_TYPE_RGB: - { - if (row_info->bit_depth == 8) - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_table != NULL) - { - sp = row; - for (i = 0; i < row_width; i++, sp += 3) - { - if (*sp == trans_values->red && - *(sp + 1) == trans_values->green && - *(sp + 2) == trans_values->blue) - { - *sp = (png_byte)background->red; - *(sp + 1) = (png_byte)background->green; - *(sp + 2) = (png_byte)background->blue; - } - else - { - *sp = gamma_table[*sp]; - *(sp + 1) = gamma_table[*(sp + 1)]; - *(sp + 2) = gamma_table[*(sp + 2)]; - } - } - } - else -#endif - { - sp = row; - for (i = 0; i < row_width; i++, sp += 3) - { - if (*sp == trans_values->red && - *(sp + 1) == trans_values->green && - *(sp + 2) == trans_values->blue) - { - *sp = (png_byte)background->red; - *(sp + 1) = (png_byte)background->green; - *(sp + 2) = (png_byte)background->blue; - } - } - } - } - else /* if (row_info->bit_depth == 16) */ - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_16 != NULL) - { - sp = row; - for (i = 0; i < row_width; i++, sp += 6) - { - png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); - png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); - if (r == trans_values->red && g == trans_values->green && - b == trans_values->blue) - { - /* background is already in screen gamma */ - *sp = (png_byte)((background->red >> 8) & 0xff); - *(sp + 1) = (png_byte)(background->red & 0xff); - *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); - *(sp + 3) = (png_byte)(background->green & 0xff); - *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); - *(sp + 5) = (png_byte)(background->blue & 0xff); - } - else - { - png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; - *(sp + 2) = (png_byte)((v >> 8) & 0xff); - *(sp + 3) = (png_byte)(v & 0xff); - v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; - *(sp + 4) = (png_byte)((v >> 8) & 0xff); - *(sp + 5) = (png_byte)(v & 0xff); - } - } - } - else -#endif - { - sp = row; - for (i = 0; i < row_width; i++, sp += 6) - { - png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp+1)); - png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); - png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); - - if (r == trans_values->red && g == trans_values->green && - b == trans_values->blue) - { - *sp = (png_byte)((background->red >> 8) & 0xff); - *(sp + 1) = (png_byte)(background->red & 0xff); - *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); - *(sp + 3) = (png_byte)(background->green & 0xff); - *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); - *(sp + 5) = (png_byte)(background->blue & 0xff); - } - } - } - } - break; - } - case PNG_COLOR_TYPE_GRAY_ALPHA: - { - if (row_info->bit_depth == 8) - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_to_1 != NULL && gamma_from_1 != NULL && - gamma_table != NULL) - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 2, dp++) - { - png_uint_16 a = *(sp + 1); - - if (a == 0xff) - { - *dp = gamma_table[*sp]; - } - else if (a == 0) - { - /* background is already in screen gamma */ - *dp = (png_byte)background->gray; - } - else - { - png_byte v, w; - - v = gamma_to_1[*sp]; - png_composite(w, v, a, background_1->gray); - *dp = gamma_from_1[w]; - } - } - } - else -#endif - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 2, dp++) - { - png_byte a = *(sp + 1); - - if (a == 0xff) - { - *dp = *sp; - } -#if defined(PNG_READ_GAMMA_SUPPORTED) - else if (a == 0) - { - *dp = (png_byte)background->gray; - } - else - { - png_composite(*dp, *sp, a, background_1->gray); - } -#else - *dp = (png_byte)background->gray; -#endif - } - } - } - else /* if (png_ptr->bit_depth == 16) */ - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_16 != NULL && gamma_16_from_1 != NULL && - gamma_16_to_1 != NULL) - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 4, dp += 2) - { - png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); - - if (a == (png_uint_16)0xffff) - { - png_uint_16 v; - - v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; - *dp = (png_byte)((v >> 8) & 0xff); - *(dp + 1) = (png_byte)(v & 0xff); - } -#if defined(PNG_READ_GAMMA_SUPPORTED) - else if (a == 0) -#else - else -#endif - { - /* background is already in screen gamma */ - *dp = (png_byte)((background->gray >> 8) & 0xff); - *(dp + 1) = (png_byte)(background->gray & 0xff); - } -#if defined(PNG_READ_GAMMA_SUPPORTED) - else - { - png_uint_16 g, v, w; - - g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; - png_composite_16(v, g, a, background_1->gray); - w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8]; - *dp = (png_byte)((w >> 8) & 0xff); - *(dp + 1) = (png_byte)(w & 0xff); - } -#endif - } - } - else -#endif - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 4, dp += 2) - { - png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); - if (a == (png_uint_16)0xffff) - { - png_memcpy(dp, sp, 2); - } -#if defined(PNG_READ_GAMMA_SUPPORTED) - else if (a == 0) -#else - else -#endif - { - *dp = (png_byte)((background->gray >> 8) & 0xff); - *(dp + 1) = (png_byte)(background->gray & 0xff); - } -#if defined(PNG_READ_GAMMA_SUPPORTED) - else - { - png_uint_16 g, v; - - g = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - png_composite_16(v, g, a, background_1->gray); - *dp = (png_byte)((v >> 8) & 0xff); - *(dp + 1) = (png_byte)(v & 0xff); - } -#endif - } - } - } - break; - } - case PNG_COLOR_TYPE_RGB_ALPHA: - { - if (row_info->bit_depth == 8) - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_to_1 != NULL && gamma_from_1 != NULL && - gamma_table != NULL) - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 4, dp += 3) - { - png_byte a = *(sp + 3); - - if (a == 0xff) - { - *dp = gamma_table[*sp]; - *(dp + 1) = gamma_table[*(sp + 1)]; - *(dp + 2) = gamma_table[*(sp + 2)]; - } - else if (a == 0) - { - /* background is already in screen gamma */ - *dp = (png_byte)background->red; - *(dp + 1) = (png_byte)background->green; - *(dp + 2) = (png_byte)background->blue; - } - else - { - png_byte v, w; - - v = gamma_to_1[*sp]; - png_composite(w, v, a, background_1->red); - *dp = gamma_from_1[w]; - v = gamma_to_1[*(sp + 1)]; - png_composite(w, v, a, background_1->green); - *(dp + 1) = gamma_from_1[w]; - v = gamma_to_1[*(sp + 2)]; - png_composite(w, v, a, background_1->blue); - *(dp + 2) = gamma_from_1[w]; - } - } - } - else -#endif - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 4, dp += 3) - { - png_byte a = *(sp + 3); - - if (a == 0xff) - { - *dp = *sp; - *(dp + 1) = *(sp + 1); - *(dp + 2) = *(sp + 2); - } - else if (a == 0) - { - *dp = (png_byte)background->red; - *(dp + 1) = (png_byte)background->green; - *(dp + 2) = (png_byte)background->blue; - } - else - { - png_composite(*dp, *sp, a, background->red); - png_composite(*(dp + 1), *(sp + 1), a, - background->green); - png_composite(*(dp + 2), *(sp + 2), a, - background->blue); - } - } - } - } - else /* if (row_info->bit_depth == 16) */ - { -#if defined(PNG_READ_GAMMA_SUPPORTED) - if (gamma_16 != NULL && gamma_16_from_1 != NULL && - gamma_16_to_1 != NULL) - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 8, dp += 6) - { - png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) - << 8) + (png_uint_16)(*(sp + 7))); - if (a == (png_uint_16)0xffff) - { - png_uint_16 v; - - v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; - *dp = (png_byte)((v >> 8) & 0xff); - *(dp + 1) = (png_byte)(v & 0xff); - v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; - *(dp + 2) = (png_byte)((v >> 8) & 0xff); - *(dp + 3) = (png_byte)(v & 0xff); - v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; - *(dp + 4) = (png_byte)((v >> 8) & 0xff); - *(dp + 5) = (png_byte)(v & 0xff); - } - else if (a == 0) - { - /* background is already in screen gamma */ - *dp = (png_byte)((background->red >> 8) & 0xff); - *(dp + 1) = (png_byte)(background->red & 0xff); - *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); - *(dp + 3) = (png_byte)(background->green & 0xff); - *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); - *(dp + 5) = (png_byte)(background->blue & 0xff); - } - else - { - png_uint_16 v, w, x; - - v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; - png_composite_16(w, v, a, background_1->red); - x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; - *dp = (png_byte)((x >> 8) & 0xff); - *(dp + 1) = (png_byte)(x & 0xff); - v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)]; - png_composite_16(w, v, a, background_1->green); - x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; - *(dp + 2) = (png_byte)((x >> 8) & 0xff); - *(dp + 3) = (png_byte)(x & 0xff); - v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)]; - png_composite_16(w, v, a, background_1->blue); - x = gamma_16_from_1[(w & 0xff) >> gamma_shift][w >> 8]; - *(dp + 4) = (png_byte)((x >> 8) & 0xff); - *(dp + 5) = (png_byte)(x & 0xff); - } - } - } - else -#endif - { - sp = row; - dp = row; - for (i = 0; i < row_width; i++, sp += 8, dp += 6) - { - png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) - << 8) + (png_uint_16)(*(sp + 7))); - if (a == (png_uint_16)0xffff) - { - png_memcpy(dp, sp, 6); - } - else if (a == 0) - { - *dp = (png_byte)((background->red >> 8) & 0xff); - *(dp + 1) = (png_byte)(background->red & 0xff); - *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); - *(dp + 3) = (png_byte)(background->green & 0xff); - *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); - *(dp + 5) = (png_byte)(background->blue & 0xff); - } - else - { - png_uint_16 v; - - png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8) - + *(sp + 3)); - png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8) - + *(sp + 5)); - - png_composite_16(v, r, a, background->red); - *dp = (png_byte)((v >> 8) & 0xff); - *(dp + 1) = (png_byte)(v & 0xff); - png_composite_16(v, g, a, background->green); - *(dp + 2) = (png_byte)((v >> 8) & 0xff); - *(dp + 3) = (png_byte)(v & 0xff); - png_composite_16(v, b, a, background->blue); - *(dp + 4) = (png_byte)((v >> 8) & 0xff); - *(dp + 5) = (png_byte)(v & 0xff); - } - } - } - } - break; - } - } - - if (row_info->color_type & PNG_COLOR_MASK_ALPHA) - { - row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; - row_info->channels--; - row_info->pixel_depth = (png_byte)(row_info->channels * - row_info->bit_depth); - row_info->rowbytes = ((row_width * - row_info->pixel_depth + 7) >> 3); - } - } -} -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -/* Gamma correct the image, avoiding the alpha channel. Make sure - * you do this after you deal with the transparency issue on grayscale - * or RGB images. If your bit depth is 8, use gamma_table, if it - * is 16, use gamma_16_table and gamma_shift. Build these with - * build_gamma_table(). - */ -void /* PRIVATE */ -png_do_gamma(png_row_infop row_info, png_bytep row, - png_bytep gamma_table, png_uint_16pp gamma_16_table, - int gamma_shift) -{ - png_bytep sp; - png_uint_32 i; - png_uint_32 row_width=row_info->width; - - png_debug(1, "in png_do_gamma\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - ((row_info->bit_depth <= 8 && gamma_table != NULL) || - (row_info->bit_depth == 16 && gamma_16_table != NULL))) - { - switch (row_info->color_type) - { - case PNG_COLOR_TYPE_RGB: - { - if (row_info->bit_depth == 8) - { - sp = row; - for (i = 0; i < row_width; i++) - { - *sp = gamma_table[*sp]; - sp++; - *sp = gamma_table[*sp]; - sp++; - *sp = gamma_table[*sp]; - sp++; - } - } - else /* if (row_info->bit_depth == 16) */ - { - sp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 v; - - v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - } - } - break; - } - case PNG_COLOR_TYPE_RGB_ALPHA: - { - if (row_info->bit_depth == 8) - { - sp = row; - for (i = 0; i < row_width; i++) - { - *sp = gamma_table[*sp]; - sp++; - *sp = gamma_table[*sp]; - sp++; - *sp = gamma_table[*sp]; - sp++; - sp++; - } - } - else /* if (row_info->bit_depth == 16) */ - { - sp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 4; - } - } - break; - } - case PNG_COLOR_TYPE_GRAY_ALPHA: - { - if (row_info->bit_depth == 8) - { - sp = row; - for (i = 0; i < row_width; i++) - { - *sp = gamma_table[*sp]; - sp += 2; - } - } - else /* if (row_info->bit_depth == 16) */ - { - sp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 4; - } - } - break; - } - case PNG_COLOR_TYPE_GRAY: - { - if (row_info->bit_depth == 2) - { - sp = row; - for (i = 0; i < row_width; i += 4) - { - int a = *sp & 0xc0; - int b = *sp & 0x30; - int c = *sp & 0x0c; - int d = *sp & 0x03; - - *sp = (png_byte)( - ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)]) ) &0xc0)| - ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) &0x30)| - ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) &0x0c)| - ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) )); - sp++; - } - } - if (row_info->bit_depth == 4) - { - sp = row; - for (i = 0; i < row_width; i += 2) - { - int msb = *sp & 0xf0; - int lsb = *sp & 0x0f; - - *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0) - | (((int)gamma_table[(lsb << 4) | lsb]) >> 4)); - sp++; - } - } - else if (row_info->bit_depth == 8) - { - sp = row; - for (i = 0; i < row_width; i++) - { - *sp = gamma_table[*sp]; - sp++; - } - } - else if (row_info->bit_depth == 16) - { - sp = row; - for (i = 0; i < row_width; i++) - { - png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; - *sp = (png_byte)((v >> 8) & 0xff); - *(sp + 1) = (png_byte)(v & 0xff); - sp += 2; - } - } - break; - } - } - } -} -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) -/* Expands a palette row to an RGB or RGBA row depending - * upon whether you supply trans and num_trans. - */ -void /* PRIVATE */ -png_do_expand_palette(png_row_infop row_info, png_bytep row, - png_colorp palette, png_bytep trans, int num_trans) -{ - int shift, value; - png_bytep sp, dp; - png_uint_32 i; - png_uint_32 row_width=row_info->width; - - png_debug(1, "in png_do_expand_palette\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - row_info->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (row_info->bit_depth < 8) - { - switch (row_info->bit_depth) - { - case 1: - { - sp = row + (png_size_t)((row_width - 1) >> 3); - dp = row + (png_size_t)row_width - 1; - shift = 7 - (int)((row_width + 7) & 0x07); - for (i = 0; i < row_width; i++) - { - if ((*sp >> shift) & 0x01) - *dp = 1; - else - *dp = 0; - if (shift == 7) - { - shift = 0; - sp--; - } - else - shift++; - - dp--; - } - break; - } - case 2: - { - sp = row + (png_size_t)((row_width - 1) >> 2); - dp = row + (png_size_t)row_width - 1; - shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); - for (i = 0; i < row_width; i++) - { - value = (*sp >> shift) & 0x03; - *dp = (png_byte)value; - if (shift == 6) - { - shift = 0; - sp--; - } - else - shift += 2; - - dp--; - } - break; - } - case 4: - { - sp = row + (png_size_t)((row_width - 1) >> 1); - dp = row + (png_size_t)row_width - 1; - shift = (int)((row_width & 0x01) << 2); - for (i = 0; i < row_width; i++) - { - value = (*sp >> shift) & 0x0f; - *dp = (png_byte)value; - if (shift == 4) - { - shift = 0; - sp--; - } - else - shift += 4; - - dp--; - } - break; - } - } - row_info->bit_depth = 8; - row_info->pixel_depth = 8; - row_info->rowbytes = row_width; - } - switch (row_info->bit_depth) - { - case 8: - { - if (trans != NULL) - { - sp = row + (png_size_t)row_width - 1; - dp = row + (png_size_t)(row_width << 2) - 1; - - for (i = 0; i < row_width; i++) - { - if ((int)(*sp) >= num_trans) - *dp-- = 0xff; - else - *dp-- = trans[*sp]; - *dp-- = palette[*sp].blue; - *dp-- = palette[*sp].green; - *dp-- = palette[*sp].red; - sp--; - } - row_info->bit_depth = 8; - row_info->pixel_depth = 32; - row_info->rowbytes = row_width * 4; - row_info->color_type = 6; - row_info->channels = 4; - } - else - { - sp = row + (png_size_t)row_width - 1; - dp = row + (png_size_t)(row_width * 3) - 1; - - for (i = 0; i < row_width; i++) - { - *dp-- = palette[*sp].blue; - *dp-- = palette[*sp].green; - *dp-- = palette[*sp].red; - sp--; - } - row_info->bit_depth = 8; - row_info->pixel_depth = 24; - row_info->rowbytes = row_width * 3; - row_info->color_type = 2; - row_info->channels = 3; - } - break; - } - } - } -} - -/* If the bit depth < 8, it is expanded to 8. Also, if the - * transparency value is supplied, an alpha channel is built. - */ -void /* PRIVATE */ -png_do_expand(png_row_infop row_info, png_bytep row, - png_color_16p trans_value) -{ - int shift, value; - png_bytep sp, dp; - png_uint_32 i; - png_uint_32 row_width=row_info->width; - - png_debug(1, "in png_do_expand\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL) -#endif - { - if (row_info->color_type == PNG_COLOR_TYPE_GRAY) - { - png_uint_16 gray = (png_uint_16)(trans_value ? trans_value->gray : 0); - - if (row_info->bit_depth < 8) - { - switch (row_info->bit_depth) - { - case 1: - { - gray = (png_uint_16)(gray*0xff); - sp = row + (png_size_t)((row_width - 1) >> 3); - dp = row + (png_size_t)row_width - 1; - shift = 7 - (int)((row_width + 7) & 0x07); - for (i = 0; i < row_width; i++) - { - if ((*sp >> shift) & 0x01) - *dp = 0xff; - else - *dp = 0; - if (shift == 7) - { - shift = 0; - sp--; - } - else - shift++; - - dp--; - } - break; - } - case 2: - { - gray = (png_uint_16)(gray*0x55); - sp = row + (png_size_t)((row_width - 1) >> 2); - dp = row + (png_size_t)row_width - 1; - shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); - for (i = 0; i < row_width; i++) - { - value = (*sp >> shift) & 0x03; - *dp = (png_byte)(value | (value << 2) | (value << 4) | - (value << 6)); - if (shift == 6) - { - shift = 0; - sp--; - } - else - shift += 2; - - dp--; - } - break; - } - case 4: - { - gray = (png_uint_16)(gray*0x11); - sp = row + (png_size_t)((row_width - 1) >> 1); - dp = row + (png_size_t)row_width - 1; - shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); - for (i = 0; i < row_width; i++) - { - value = (*sp >> shift) & 0x0f; - *dp = (png_byte)(value | (value << 4)); - if (shift == 4) - { - shift = 0; - sp--; - } - else - shift = 4; - - dp--; - } - break; - } - } - row_info->bit_depth = 8; - row_info->pixel_depth = 8; - row_info->rowbytes = row_width; - } - - if (trans_value != NULL) - { - if (row_info->bit_depth == 8) - { - sp = row + (png_size_t)row_width - 1; - dp = row + (png_size_t)(row_width << 1) - 1; - for (i = 0; i < row_width; i++) - { - if (*sp == gray) - *dp-- = 0; - else - *dp-- = 0xff; - *dp-- = *sp--; - } - } - else if (row_info->bit_depth == 16) - { - sp = row + row_info->rowbytes - 1; - dp = row + (row_info->rowbytes << 1) - 1; - for (i = 0; i < row_width; i++) - { - if (((png_uint_16)*(sp) | - ((png_uint_16)*(sp - 1) << 8)) == gray) - { - *dp-- = 0; - *dp-- = 0; - } - else - { - *dp-- = 0xff; - *dp-- = 0xff; - } - *dp-- = *sp--; - *dp-- = *sp--; - } - } - row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA; - row_info->channels = 2; - row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1); - row_info->rowbytes = - ((row_width * row_info->pixel_depth) >> 3); - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_value) - { - if (row_info->bit_depth == 8) - { - sp = row + (png_size_t)row_info->rowbytes - 1; - dp = row + (png_size_t)(row_width << 2) - 1; - for (i = 0; i < row_width; i++) - { - if (*(sp - 2) == trans_value->red && - *(sp - 1) == trans_value->green && - *(sp - 0) == trans_value->blue) - *dp-- = 0; - else - *dp-- = 0xff; - *dp-- = *sp--; - *dp-- = *sp--; - *dp-- = *sp--; - } - } - else if (row_info->bit_depth == 16) - { - sp = row + row_info->rowbytes - 1; - dp = row + (png_size_t)(row_width << 3) - 1; - for (i = 0; i < row_width; i++) - { - if ((((png_uint_16)*(sp - 4) | - ((png_uint_16)*(sp - 5) << 8)) == trans_value->red) && - (((png_uint_16)*(sp - 2) | - ((png_uint_16)*(sp - 3) << 8)) == trans_value->green) && - (((png_uint_16)*(sp - 0) | - ((png_uint_16)*(sp - 1) << 8)) == trans_value->blue)) - { - *dp-- = 0; - *dp-- = 0; - } - else - { - *dp-- = 0xff; - *dp-- = 0xff; - } - *dp-- = *sp--; - *dp-- = *sp--; - *dp-- = *sp--; - *dp-- = *sp--; - *dp-- = *sp--; - *dp-- = *sp--; - } - } - row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA; - row_info->channels = 4; - row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2); - row_info->rowbytes = - ((row_width * row_info->pixel_depth) >> 3); - } - } -} -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -void /* PRIVATE */ -png_do_dither(png_row_infop row_info, png_bytep row, - png_bytep palette_lookup, png_bytep dither_lookup) -{ - png_bytep sp, dp; - png_uint_32 i; - png_uint_32 row_width=row_info->width; - - png_debug(1, "in png_do_dither\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL) -#endif - { - if (row_info->color_type == PNG_COLOR_TYPE_RGB && - palette_lookup && row_info->bit_depth == 8) - { - int r, g, b, p; - sp = row; - dp = row; - for (i = 0; i < row_width; i++) - { - r = *sp++; - g = *sp++; - b = *sp++; - - /* this looks real messy, but the compiler will reduce - it down to a reasonable formula. For example, with - 5 bits per color, we get: - p = (((r >> 3) & 0x1f) << 10) | - (((g >> 3) & 0x1f) << 5) | - ((b >> 3) & 0x1f); - */ - p = (((r >> (8 - PNG_DITHER_RED_BITS)) & - ((1 << PNG_DITHER_RED_BITS) - 1)) << - (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | - (((g >> (8 - PNG_DITHER_GREEN_BITS)) & - ((1 << PNG_DITHER_GREEN_BITS) - 1)) << - (PNG_DITHER_BLUE_BITS)) | - ((b >> (8 - PNG_DITHER_BLUE_BITS)) & - ((1 << PNG_DITHER_BLUE_BITS) - 1)); - - *dp++ = palette_lookup[p]; - } - row_info->color_type = PNG_COLOR_TYPE_PALETTE; - row_info->channels = 1; - row_info->pixel_depth = row_info->bit_depth; - row_info->rowbytes = - ((row_width * row_info->pixel_depth + 7) >> 3); - } - else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA && - palette_lookup != NULL && row_info->bit_depth == 8) - { - int r, g, b, p; - sp = row; - dp = row; - for (i = 0; i < row_width; i++) - { - r = *sp++; - g = *sp++; - b = *sp++; - sp++; - - p = (((r >> (8 - PNG_DITHER_RED_BITS)) & - ((1 << PNG_DITHER_RED_BITS) - 1)) << - (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | - (((g >> (8 - PNG_DITHER_GREEN_BITS)) & - ((1 << PNG_DITHER_GREEN_BITS) - 1)) << - (PNG_DITHER_BLUE_BITS)) | - ((b >> (8 - PNG_DITHER_BLUE_BITS)) & - ((1 << PNG_DITHER_BLUE_BITS) - 1)); - - *dp++ = palette_lookup[p]; - } - row_info->color_type = PNG_COLOR_TYPE_PALETTE; - row_info->channels = 1; - row_info->pixel_depth = row_info->bit_depth; - row_info->rowbytes = - ((row_width * row_info->pixel_depth + 7) >> 3); - } - else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE && - dither_lookup && row_info->bit_depth == 8) - { - sp = row; - for (i = 0; i < row_width; i++, sp++) - { - *sp = dither_lookup[*sp]; - } - } - } -} -#endif - -#ifdef PNG_FLOATING_POINT_SUPPORTED -#if defined(PNG_READ_GAMMA_SUPPORTED) -static int png_gamma_shift[] = - {0x10, 0x21, 0x42, 0x84, 0x110, 0x248, 0x550, 0xff0}; - -/* We build the 8- or 16-bit gamma tables here. Note that for 16-bit - * tables, we don't make a full table if we are reducing to 8-bit in - * the future. Note also how the gamma_16 tables are segmented so that - * we don't need to allocate > 64K chunks for a full 16-bit table. - */ -void /* PRIVATE */ -png_build_gamma_table(png_structp png_ptr) -{ - png_debug(1, "in png_build_gamma_table\n"); - if(png_ptr->gamma != 0.0) - { - if (png_ptr->bit_depth <= 8) - { - int i; - double g; - - if (png_ptr->screen_gamma > .000001) - g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); - else - g = 1.0; - - png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr, - (png_uint_32)256); - - for (i = 0; i < 256; i++) - { - png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0, - g) * 255.0 + .5); - } - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ - defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY)) - { - - g = 1.0 / (png_ptr->gamma); - - png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr, - (png_uint_32)256); - - for (i = 0; i < 256; i++) - { - png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0, - g) * 255.0 + .5); - } - - - png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr, - (png_uint_32)256); - - if(png_ptr->screen_gamma > 0.000001) - g = 1.0 / png_ptr->screen_gamma; - else - g = png_ptr->gamma; /* probably doing rgb_to_gray */ - - for (i = 0; i < 256; i++) - { - png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0, - g) * 255.0 + .5); - - } - } -#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ - } - else - { - double g; - int i, j, shift, num; - int sig_bit; - png_uint_32 ig; - - if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) - { - sig_bit = (int)png_ptr->sig_bit.red; - if ((int)png_ptr->sig_bit.green > sig_bit) - sig_bit = png_ptr->sig_bit.green; - if ((int)png_ptr->sig_bit.blue > sig_bit) - sig_bit = png_ptr->sig_bit.blue; - } - else - { - sig_bit = (int)png_ptr->sig_bit.gray; - } - - if (sig_bit > 0) - shift = 16 - sig_bit; - else - shift = 0; - - if (png_ptr->transformations & PNG_16_TO_8) - { - if (shift < (16 - PNG_MAX_GAMMA_8)) - shift = (16 - PNG_MAX_GAMMA_8); - } - - if (shift > 8) - shift = 8; - if (shift < 0) - shift = 0; - - png_ptr->gamma_shift = (png_byte)shift; - - num = (1 << (8 - shift)); - - if (png_ptr->screen_gamma > .000001) - g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); - else - g = 1.0; - - png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr, - (png_uint_32)(num * sizeof (png_uint_16p))); - - if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND)) - { - double fin, fout; - png_uint_32 last, max; - - for (i = 0; i < num; i++) - { - png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, - (png_uint_32)(256 * sizeof (png_uint_16))); - } - - g = 1.0 / g; - last = 0; - for (i = 0; i < 256; i++) - { - fout = ((double)i + 0.5) / 256.0; - fin = pow(fout, g); - max = (png_uint_32)(fin * (double)((png_uint_32)num << 8)); - while (last <= max) - { - png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] - [(int)(last >> (8 - shift))] = (png_uint_16)( - (png_uint_16)i | ((png_uint_16)i << 8)); - last++; - } - } - while (last < ((png_uint_32)num << 8)) - { - png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] - [(int)(last >> (8 - shift))] = (png_uint_16)65535L; - last++; - } - } - else - { - for (i = 0; i < num; i++) - { - png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, - (png_uint_32)(256 * sizeof (png_uint_16))); - - ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4); - for (j = 0; j < 256; j++) - { - png_ptr->gamma_16_table[i][j] = - (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / - 65535.0, g) * 65535.0 + .5); - } - } - } - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ - defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY)) - { - - g = 1.0 / (png_ptr->gamma); - - png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr, - (png_uint_32)(num * sizeof (png_uint_16p ))); - - for (i = 0; i < num; i++) - { - png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr, - (png_uint_32)(256 * sizeof (png_uint_16))); - - ig = (((png_uint_32)i * - (png_uint_32)png_gamma_shift[shift]) >> 4); - for (j = 0; j < 256; j++) - { - png_ptr->gamma_16_to_1[i][j] = - (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / - 65535.0, g) * 65535.0 + .5); - } - } - - if(png_ptr->screen_gamma > 0.000001) - g = 1.0 / png_ptr->screen_gamma; - else - g = png_ptr->gamma; /* probably doing rgb_to_gray */ - - png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr, - (png_uint_32)(num * sizeof (png_uint_16p))); - - for (i = 0; i < num; i++) - { - png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr, - (png_uint_32)(256 * sizeof (png_uint_16))); - - ig = (((png_uint_32)i * - (png_uint_32)png_gamma_shift[shift]) >> 4); - for (j = 0; j < 256; j++) - { - png_ptr->gamma_16_from_1[i][j] = - (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / - 65535.0, g) * 65535.0 + .5); - } - } - } -#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ - } - } -} -#endif -/* To do: install integer version of png_build_gamma_table here */ -#endif - -#if defined(PNG_MNG_FEATURES_SUPPORTED) -/* undoes intrapixel differencing */ -void /* PRIVATE */ -png_do_read_intrapixel(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_read_intrapixel\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - (row_info->color_type & PNG_COLOR_MASK_COLOR)) - { - int bytes_per_pixel; - png_uint_32 row_width = row_info->width; - if (row_info->bit_depth == 8) - { - png_bytep rp; - png_uint_32 i; - - if (row_info->color_type == PNG_COLOR_TYPE_RGB) - bytes_per_pixel = 3; - else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - bytes_per_pixel = 4; - else - return; - - for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) - { - *(rp) = (png_byte)((256 + *rp + *(rp+1))&0xff); - *(rp+2) = (png_byte)((256 + *(rp+2) + *(rp+1))&0xff); - } - } - else if (row_info->bit_depth == 16) - { - png_bytep rp; - png_uint_32 i; - - if (row_info->color_type == PNG_COLOR_TYPE_RGB) - bytes_per_pixel = 6; - else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - bytes_per_pixel = 8; - else - return; - - for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) - { - png_uint_32 s0=*(rp )<<8 | *(rp+1); - png_uint_32 s1=*(rp+2)<<8 | *(rp+3); - png_uint_32 s2=*(rp+4)<<8 | *(rp+5); - png_uint_32 red=(65536+s0+s1)&0xffff; - png_uint_32 blue=(65536+s2+s1)&0xffff; - *(rp ) = (png_byte)((red>>8)&0xff); - *(rp+1) = (png_byte)(red&0xff); - *(rp+4) = (png_byte)((blue>>8)&0xff); - *(rp+5) = (png_byte)(blue&0xff); - } - } - } -} -#endif /* PNG_MNG_FEATURES_SUPPORTED */ diff --git a/src/libs/pdflib/libs/png/pngrutil.c b/src/libs/pdflib/libs/png/pngrutil.c deleted file mode 100644 index 77d50e44fa..0000000000 --- a/src/libs/pdflib/libs/png/pngrutil.c +++ /dev/null @@ -1,3104 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngrutil.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngrutil.c - utilities to read a PNG file - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This file contains routines that are only called from within - * libpng itself during the course of reading an image. - */ - -#define PNG_INTERNAL -#include "png.h" - -#if 0 /* PDFlib GmbH: */ -#if defined(_WIN32_WCE) -/* strtod() function is not supported on WindowsCE */ -# ifdef PNG_FLOATING_POINT_SUPPORTED -__inline double strtod(const char *nptr, char **endptr) -{ - double result = 0; - int len; - wchar_t *str, *end; - - len = MultiByteToWideChar(CP_ACP, 0, nptr, -1, NULL, 0); - str = (wchar_t *)malloc(len * sizeof(wchar_t)); - if ( NULL != str ) - { - MultiByteToWideChar(CP_ACP, 0, nptr, -1, str, len); - result = wcstod(str, &end); - len = WideCharToMultiByte(CP_ACP, 0, end, -1, NULL, 0, NULL, NULL); - *endptr = (char *)nptr + (png_strlen(nptr) - len + 1); - free(str); - } - return result; -} -# endif -#endif -#endif /* PDFlib GmbH: */ - -#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED -/* Grab an unsigned 32-bit integer from a buffer in big-endian format. */ -png_uint_32 /* PRIVATE */ -png_get_uint_32(png_bytep buf) -{ - png_uint_32 i = ((png_uint_32)(*buf) << 24) + - ((png_uint_32)(*(buf + 1)) << 16) + - ((png_uint_32)(*(buf + 2)) << 8) + - (png_uint_32)(*(buf + 3)); - - return (i); -} - -#if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED) -/* Grab a signed 32-bit integer from a buffer in big-endian format. The - * data is stored in the PNG file in two's complement format, and it is - * assumed that the machine format for signed integers is the same. */ -png_int_32 /* PRIVATE */ -png_get_int_32(png_bytep buf) -{ - png_int_32 i = ((png_int_32)(*buf) << 24) + - ((png_int_32)(*(buf + 1)) << 16) + - ((png_int_32)(*(buf + 2)) << 8) + - (png_int_32)(*(buf + 3)); - - return (i); -} -#endif /* PNG_READ_pCAL_SUPPORTED */ - -/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */ -png_uint_16 /* PRIVATE */ -png_get_uint_16(png_bytep buf) -{ - png_uint_16 i = (png_uint_16)(((png_uint_16)(*buf) << 8) + - (png_uint_16)(*(buf + 1))); - - return (i); -} -#endif /* PNG_READ_BIG_ENDIAN_SUPPORTED */ - -/* Read data, and (optionally) run it through the CRC. */ -void /* PRIVATE */ -png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length) -{ - png_read_data(png_ptr, buf, length); - png_calculate_crc(png_ptr, buf, length); -} - -/* Optionally skip data and then check the CRC. Depending on whether we - are reading a ancillary or critical chunk, and how the program has set - things up, we may calculate the CRC on the data and print a message. - Returns '1' if there was a CRC error, '0' otherwise. */ -int /* PRIVATE */ -png_crc_finish(png_structp png_ptr, png_uint_32 skip) -{ - png_size_t i; - png_size_t istop = png_ptr->zbuf_size; - - for (i = (png_size_t)skip; i > istop; i -= istop) - { - png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); - } - if (i) - { - png_crc_read(png_ptr, png_ptr->zbuf, i); - } - - if (png_crc_error(png_ptr)) - { - if (((png_ptr->chunk_name[0] & 0x20) && /* Ancillary */ - !(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) || - (!(png_ptr->chunk_name[0] & 0x20) && /* Critical */ - (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))) - { - png_chunk_warning(png_ptr, "CRC error"); - } - else - { - png_chunk_error(png_ptr, "CRC error"); - } - return (1); - } - - return (0); -} - -/* Compare the CRC stored in the PNG file with that calculated by libpng from - the data it has read thus far. */ -int /* PRIVATE */ -png_crc_error(png_structp png_ptr) -{ - png_byte crc_bytes[4]; - png_uint_32 crc; - int need_crc = 1; - - if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ - { - if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == - (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) - need_crc = 0; - } - else /* critical */ - { - if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) - need_crc = 0; - } - - png_read_data(png_ptr, crc_bytes, 4); - - if (need_crc) - { - crc = png_get_uint_32(crc_bytes); - return ((int)(crc != png_ptr->crc)); - } - else - return (0); -} - -#if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \ - defined(PNG_READ_iCCP_SUPPORTED) -/* - * Decompress trailing data in a chunk. The assumption is that chunkdata - * points at an allocated area holding the contents of a chunk with a - * trailing compressed part. What we get back is an allocated area - * holding the original prefix part and an uncompressed version of the - * trailing part (the malloc area passed in is freed). - */ -png_charp /* PRIVATE */ -png_decompress_chunk(png_structp png_ptr, int comp_type, - png_charp chunkdata, png_size_t chunklength, - png_size_t prefix_size, png_size_t *newlength) -{ - static char msg[] = "Error decoding compressed text"; - png_charp text = NULL; - png_size_t text_size; - - if (comp_type == PNG_COMPRESSION_TYPE_BASE) - { - int ret = Z_OK; - png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size); - png_ptr->zstream.avail_in = (uInt)(chunklength - prefix_size); - png_ptr->zstream.next_out = png_ptr->zbuf; - png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; - - text_size = 0; - text = NULL; - - while (png_ptr->zstream.avail_in) - { - ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); - if (ret != Z_OK && ret != Z_STREAM_END) - { - if (png_ptr->zstream.msg != NULL) - png_warning(png_ptr, png_ptr->zstream.msg); - else - png_warning(png_ptr, msg); - inflateReset(&png_ptr->zstream); - png_ptr->zstream.avail_in = 0; - - if (text == NULL) - { - text_size = prefix_size + sizeof(msg) + 1; - text = (png_charp)png_malloc_warn(png_ptr, text_size); - if (text == NULL) - { - png_free(png_ptr,chunkdata); - png_error(png_ptr,"Not enough memory to decompress chunk"); - } - png_memcpy(text, chunkdata, prefix_size); - } - - text[text_size - 1] = 0x00; - - /* Copy what we can of the error message into the text chunk */ - text_size = (png_size_t)(chunklength - (text - chunkdata) - 1); - text_size = sizeof(msg) > text_size ? text_size : sizeof(msg); - png_memcpy(text + prefix_size, msg, text_size + 1); - break; - } - if (!png_ptr->zstream.avail_out || ret == Z_STREAM_END) - { - if (text == NULL) - { - text_size = prefix_size + - png_ptr->zbuf_size - png_ptr->zstream.avail_out; - text = (png_charp)png_malloc_warn(png_ptr, text_size + 1); - if (text == NULL) - { - png_free(png_ptr,chunkdata); - png_error(png_ptr,"Not enough memory to decompress chunk."); - } - png_memcpy(text + prefix_size, png_ptr->zbuf, - text_size - prefix_size); - png_memcpy(text, chunkdata, prefix_size); - *(text + text_size) = 0x00; - } - else - { - png_charp tmp; - - tmp = text; - text = (png_charp)png_malloc_warn(png_ptr, - (png_uint_32)(text_size + - png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1)); - if (text == NULL) - { - png_free(png_ptr, tmp); - png_free(png_ptr, chunkdata); - png_error(png_ptr,"Not enough memory to decompress chunk.."); - } - png_memcpy(text, tmp, text_size); - png_free(png_ptr, tmp); - png_memcpy(text + text_size, png_ptr->zbuf, - (png_ptr->zbuf_size - png_ptr->zstream.avail_out)); - text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; - *(text + text_size) = 0x00; - } - if (ret == Z_STREAM_END) - break; - else - { - png_ptr->zstream.next_out = png_ptr->zbuf; - png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; - } - } - } - if (ret != Z_STREAM_END) - { -#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) - char umsg[50]; - - if (ret == Z_BUF_ERROR) - sprintf(umsg,"Buffer error in compressed datastream in %s chunk", - png_ptr->chunk_name); - else if (ret == Z_DATA_ERROR) - sprintf(umsg,"Data error in compressed datastream in %s chunk", - png_ptr->chunk_name); - else - sprintf(umsg,"Incomplete compressed datastream in %s chunk", - png_ptr->chunk_name); - png_warning(png_ptr, umsg); -#else - png_warning(png_ptr, - "Incomplete compressed datastream in chunk other than IDAT"); -#endif - text_size=prefix_size; - if (text == NULL) - { - text = (png_charp)png_malloc_warn(png_ptr, text_size+1); - if (text == NULL) - { - png_free(png_ptr, chunkdata); - png_error(png_ptr,"Not enough memory for text."); - } - png_memcpy(text, chunkdata, prefix_size); - } - *(text + text_size) = 0x00; - } - - inflateReset(&png_ptr->zstream); - png_ptr->zstream.avail_in = 0; - - png_free(png_ptr, chunkdata); - chunkdata = text; - *newlength=text_size; - } - else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */ - { -#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) - char umsg[50]; - - sprintf(umsg, "Unknown zTXt compression type %d", comp_type); - png_warning(png_ptr, umsg); -#else - png_warning(png_ptr, "Unknown zTXt compression type"); -#endif - - *(chunkdata + prefix_size) = 0x00; - *newlength=prefix_size; - } - - return chunkdata; -} -#endif - -/* read and check the IDHR chunk */ -void /* PRIVATE */ -png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte buf[13]; - png_uint_32 width, height; - int bit_depth, color_type, compression_type, filter_type; - int interlace_type; - - png_debug(1, "in png_handle_IHDR\n"); - - if (png_ptr->mode & PNG_HAVE_IHDR) - png_error(png_ptr, "Out of place IHDR"); - - /* check the length */ - if (length != 13) - png_error(png_ptr, "Invalid IHDR chunk"); - - png_ptr->mode |= PNG_HAVE_IHDR; - - png_crc_read(png_ptr, buf, 13); - png_crc_finish(png_ptr, 0); - - width = png_get_uint_32(buf); - height = png_get_uint_32(buf + 4); - bit_depth = buf[8]; - color_type = buf[9]; - compression_type = buf[10]; - filter_type = buf[11]; - interlace_type = buf[12]; - - - /* set internal variables */ - png_ptr->width = width; - png_ptr->height = height; - png_ptr->bit_depth = (png_byte)bit_depth; - png_ptr->interlaced = (png_byte)interlace_type; - png_ptr->color_type = (png_byte)color_type; -#if defined(PNG_MNG_FEATURES_SUPPORTED) - png_ptr->filter_type = (png_byte)filter_type; -#endif - - /* find number of channels */ - switch (png_ptr->color_type) - { - case PNG_COLOR_TYPE_GRAY: - case PNG_COLOR_TYPE_PALETTE: - png_ptr->channels = 1; - break; - case PNG_COLOR_TYPE_RGB: - png_ptr->channels = 3; - break; - case PNG_COLOR_TYPE_GRAY_ALPHA: - png_ptr->channels = 2; - break; - case PNG_COLOR_TYPE_RGB_ALPHA: - png_ptr->channels = 4; - break; - } - - /* set up other useful info */ - png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth * - png_ptr->channels); - png_ptr->rowbytes = ((png_ptr->width * - (png_uint_32)png_ptr->pixel_depth + 7) >> 3); - png_debug1(3,"bit_depth = %d\n", png_ptr->bit_depth); - png_debug1(3,"channels = %d\n", png_ptr->channels); - png_debug1(3,"rowbytes = %lu\n", png_ptr->rowbytes); - png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, - color_type, interlace_type, compression_type, filter_type); -} - -/* read and check the palette */ -void /* PRIVATE */ -png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_color palette[PNG_MAX_PALETTE_LENGTH]; - int num, i; -#ifndef PNG_NO_POINTER_INDEXING - png_colorp pal_ptr; -#endif - - png_debug(1, "in png_handle_PLTE\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before PLTE"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid PLTE after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - png_error(png_ptr, "Duplicate PLTE chunk"); - - png_ptr->mode |= PNG_HAVE_PLTE; - - if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR)) - { - png_warning(png_ptr, - "Ignoring PLTE chunk in grayscale PNG"); - png_crc_finish(png_ptr, length); - return; - } -#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) - if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) - { - png_crc_finish(png_ptr, length); - return; - } -#endif - - if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3) - { - if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) - { - png_warning(png_ptr, "Invalid palette chunk"); - png_crc_finish(png_ptr, length); - return; - } - else - { - png_error(png_ptr, "Invalid palette chunk"); - } - } - - num = (int)length / 3; - -#ifndef PNG_NO_POINTER_INDEXING - for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++) - { - png_byte buf[3]; - - png_crc_read(png_ptr, buf, 3); - pal_ptr->red = buf[0]; - pal_ptr->green = buf[1]; - pal_ptr->blue = buf[2]; - } -#else - for (i = 0; i < num; i++) - { - png_byte buf[3]; - - png_crc_read(png_ptr, buf, 3); - /* don't depend upon png_color being any order */ - palette[i].red = buf[0]; - palette[i].green = buf[1]; - palette[i].blue = buf[2]; - } -#endif - - /* If we actually NEED the PLTE chunk (ie for a paletted image), we do - whatever the normal CRC configuration tells us. However, if we - have an RGB image, the PLTE can be considered ancillary, so - we will act as though it is. */ -#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) -#endif - { - png_crc_finish(png_ptr, 0); - } -#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) - else if (png_crc_error(png_ptr)) /* Only if we have a CRC error */ - { - /* If we don't want to use the data from an ancillary chunk, - we have two options: an error abort, or a warning and we - ignore the data in this chunk (which should be OK, since - it's considered ancillary for a RGB or RGBA image). */ - if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE)) - { - if (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) - { - png_chunk_error(png_ptr, "CRC error"); - } - else - { - png_chunk_warning(png_ptr, "CRC error"); - return; - } - } - /* Otherwise, we (optionally) emit a warning and use the chunk. */ - else if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) - { - png_chunk_warning(png_ptr, "CRC error"); - } - } -#endif - - png_set_PLTE(png_ptr, info_ptr, palette, num); - -#if defined(PNG_READ_tRNS_SUPPORTED) - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) - { - if (png_ptr->num_trans > (png_uint_16)num) - { - png_warning(png_ptr, "Truncating incorrect tRNS chunk length"); - png_ptr->num_trans = (png_uint_16)num; - } - if (info_ptr->num_trans > (png_uint_16)num) - { - png_warning(png_ptr, "Truncating incorrect info tRNS chunk length"); - info_ptr->num_trans = (png_uint_16)num; - } - } - } -#endif - -} - -void /* PRIVATE */ -png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_debug(1, "in png_handle_IEND\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR) || !(png_ptr->mode & PNG_HAVE_IDAT)) - { - png_error(png_ptr, "No image in file"); - - info_ptr = info_ptr; /* quiet compiler warnings about unused info_ptr */ - } - - png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND); - - if (length != 0) - { - png_warning(png_ptr, "Incorrect IEND chunk length"); - } - png_crc_finish(png_ptr, length); -} - -#if defined(PNG_READ_gAMA_SUPPORTED) -void /* PRIVATE */ -png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_fixed_point igamma; -#ifdef PNG_FLOATING_POINT_SUPPORTED - float file_gamma; -#endif - png_byte buf[4]; - - png_debug(1, "in png_handle_gAMA\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before gAMA"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid gAMA after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Out of place gAMA chunk"); - - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) -#if defined(PNG_READ_sRGB_SUPPORTED) - && !(info_ptr->valid & PNG_INFO_sRGB) -#endif - ) - { - png_warning(png_ptr, "Duplicate gAMA chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (length != 4) - { - png_warning(png_ptr, "Incorrect gAMA chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 4); - if (png_crc_finish(png_ptr, 0)) - return; - - igamma = (png_fixed_point)png_get_uint_32(buf); - /* check for zero gamma */ - if (igamma == 0) - { - png_warning(png_ptr, - "Ignoring gAMA chunk with gamma=0"); - return; - } - -#if defined(PNG_READ_sRGB_SUPPORTED) - if (info_ptr->valid & PNG_INFO_sRGB) - if(igamma < 45000L || igamma > 46000L) - { - png_warning(png_ptr, - "Ignoring incorrect gAMA value when sRGB is also present"); -#ifndef PNG_NO_CONSOLE_IO - fprintf(stderr, "gamma = (%d/100000)\n", (int)igamma); -#endif - return; - } -#endif /* PNG_READ_sRGB_SUPPORTED */ - -#ifdef PNG_FLOATING_POINT_SUPPORTED - file_gamma = (float)igamma / (float)100000.0; -# ifdef PNG_READ_GAMMA_SUPPORTED - png_ptr->gamma = file_gamma; -# endif - png_set_gAMA(png_ptr, info_ptr, file_gamma); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_set_gAMA_fixed(png_ptr, info_ptr, igamma); -#endif -} -#endif - -#if defined(PNG_READ_sBIT_SUPPORTED) -void /* PRIVATE */ -png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_size_t truelen; - png_byte buf[4]; - - png_debug(1, "in png_handle_sBIT\n"); - - buf[0] = buf[1] = buf[2] = buf[3] = 0; - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before sBIT"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid sBIT after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - { - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Out of place sBIT chunk"); - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)) - { - png_warning(png_ptr, "Duplicate sBIT chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - truelen = 3; - else - truelen = (png_size_t)png_ptr->channels; - - if (length != truelen) - { - png_warning(png_ptr, "Incorrect sBIT chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, truelen); - if (png_crc_finish(png_ptr, 0)) - return; - - if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) - { - png_ptr->sig_bit.red = buf[0]; - png_ptr->sig_bit.green = buf[1]; - png_ptr->sig_bit.blue = buf[2]; - png_ptr->sig_bit.alpha = buf[3]; - } - else - { - png_ptr->sig_bit.gray = buf[0]; - png_ptr->sig_bit.red = buf[0]; - png_ptr->sig_bit.green = buf[0]; - png_ptr->sig_bit.blue = buf[0]; - png_ptr->sig_bit.alpha = buf[1]; - } - png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit)); -} -#endif - -#if defined(PNG_READ_cHRM_SUPPORTED) -void /* PRIVATE */ -png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte buf[4]; -#ifdef PNG_FLOATING_POINT_SUPPORTED - float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; -#endif - png_fixed_point int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, - int_y_green, int_x_blue, int_y_blue; - - png_uint_32 uint_x, uint_y; - - png_debug(1, "in png_handle_cHRM\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before cHRM"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid cHRM after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Missing PLTE before cHRM"); - - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM) -#if defined(PNG_READ_sRGB_SUPPORTED) - && !(info_ptr->valid & PNG_INFO_sRGB) -#endif - ) - { - png_warning(png_ptr, "Duplicate cHRM chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (length != 32) - { - png_warning(png_ptr, "Incorrect cHRM chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 4); - uint_x = png_get_uint_32(buf); - - png_crc_read(png_ptr, buf, 4); - uint_y = png_get_uint_32(buf); - - if (uint_x > 80000L || uint_y > 80000L || - uint_x + uint_y > 100000L) - { - png_warning(png_ptr, "Invalid cHRM white point"); - png_crc_finish(png_ptr, 24); - return; - } - int_x_white = (png_fixed_point)uint_x; - int_y_white = (png_fixed_point)uint_y; - - png_crc_read(png_ptr, buf, 4); - uint_x = png_get_uint_32(buf); - - png_crc_read(png_ptr, buf, 4); - uint_y = png_get_uint_32(buf); - - if (uint_x > 80000L || uint_y > 80000L || - uint_x + uint_y > 100000L) - { - png_warning(png_ptr, "Invalid cHRM red point"); - png_crc_finish(png_ptr, 16); - return; - } - int_x_red = (png_fixed_point)uint_x; - int_y_red = (png_fixed_point)uint_y; - - png_crc_read(png_ptr, buf, 4); - uint_x = png_get_uint_32(buf); - - png_crc_read(png_ptr, buf, 4); - uint_y = png_get_uint_32(buf); - - if (uint_x > 80000L || uint_y > 80000L || - uint_x + uint_y > 100000L) - { - png_warning(png_ptr, "Invalid cHRM green point"); - png_crc_finish(png_ptr, 8); - return; - } - int_x_green = (png_fixed_point)uint_x; - int_y_green = (png_fixed_point)uint_y; - - png_crc_read(png_ptr, buf, 4); - uint_x = png_get_uint_32(buf); - - png_crc_read(png_ptr, buf, 4); - uint_y = png_get_uint_32(buf); - - if (uint_x > 80000L || uint_y > 80000L || - uint_x + uint_y > 100000L) - { - png_warning(png_ptr, "Invalid cHRM blue point"); - png_crc_finish(png_ptr, 0); - return; - } - int_x_blue = (png_fixed_point)uint_x; - int_y_blue = (png_fixed_point)uint_y; - -#ifdef PNG_FLOATING_POINT_SUPPORTED - white_x = (float)int_x_white / (float)100000.0; - white_y = (float)int_y_white / (float)100000.0; - red_x = (float)int_x_red / (float)100000.0; - red_y = (float)int_y_red / (float)100000.0; - green_x = (float)int_x_green / (float)100000.0; - green_y = (float)int_y_green / (float)100000.0; - blue_x = (float)int_x_blue / (float)100000.0; - blue_y = (float)int_y_blue / (float)100000.0; -#endif - -#if defined(PNG_READ_sRGB_SUPPORTED) - if (info_ptr->valid & PNG_INFO_sRGB) - { - if (abs(int_x_white - 31270L) > 1000 || - abs(int_y_white - 32900L) > 1000 || - abs(int_x_red - 64000L) > 1000 || - abs(int_y_red - 33000L) > 1000 || - abs(int_x_green - 30000L) > 1000 || - abs(int_y_green - 60000L) > 1000 || - abs(int_x_blue - 15000L) > 1000 || - abs(int_y_blue - 6000L) > 1000) - { - - png_warning(png_ptr, - "Ignoring incorrect cHRM value when sRGB is also present"); -#ifndef PNG_NO_CONSOLE_IO -#ifdef PNG_FLOATING_POINT_SUPPORTED - fprintf(stderr,"wx=%f, wy=%f, rx=%f, ry=%f\n", - white_x, white_y, red_x, red_y); - fprintf(stderr,"gx=%f, gy=%f, bx=%f, by=%f\n", - green_x, green_y, blue_x, blue_y); -#else - fprintf(stderr,"wx=%ld, wy=%ld, rx=%ld, ry=%ld\n", - int_x_white, int_y_white, int_x_red, int_y_red); - fprintf(stderr,"gx=%ld, gy=%ld, bx=%ld, by=%ld\n", - int_x_green, int_y_green, int_x_blue, int_y_blue); -#endif -#endif /* PNG_NO_CONSOLE_IO */ - } - png_crc_finish(png_ptr, 0); - return; - } -#endif /* PNG_READ_sRGB_SUPPORTED */ - -#ifdef PNG_FLOATING_POINT_SUPPORTED - png_set_cHRM(png_ptr, info_ptr, - white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_set_cHRM_fixed(png_ptr, info_ptr, - int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, - int_y_green, int_x_blue, int_y_blue); -#endif - if (png_crc_finish(png_ptr, 0)) - return; -} -#endif - -#if defined(PNG_READ_sRGB_SUPPORTED) -void /* PRIVATE */ -png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - int intent; - png_byte buf[1]; - - png_debug(1, "in png_handle_sRGB\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before sRGB"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid sRGB after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Out of place sRGB chunk"); - - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)) - { - png_warning(png_ptr, "Duplicate sRGB chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (length != 1) - { - png_warning(png_ptr, "Incorrect sRGB chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 1); - if (png_crc_finish(png_ptr, 0)) - return; - - intent = buf[0]; - /* check for bad intent */ - if (intent >= PNG_sRGB_INTENT_LAST) - { - png_warning(png_ptr, "Unknown sRGB intent"); - return; - } - -#if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) - if ((info_ptr->valid & PNG_INFO_gAMA)) - { - int igamma; -#ifdef PNG_FIXED_POINT_SUPPORTED - igamma=(int)info_ptr->int_gamma; -#else -# ifdef PNG_FLOATING_POINT_SUPPORTED - igamma=(int)(info_ptr->gamma * 100000.); -# endif -#endif - if(igamma < 45000L || igamma > 46000L) - { - png_warning(png_ptr, - "Ignoring incorrect gAMA value when sRGB is also present"); -#ifndef PNG_NO_CONSOLE_IO -# ifdef PNG_FIXED_POINT_SUPPORTED - fprintf(stderr,"incorrect gamma=(%d/100000)\n",(int)png_ptr->int_gamma); -# else -# ifdef PNG_FLOATING_POINT_SUPPORTED - fprintf(stderr,"incorrect gamma=%f\n",png_ptr->gamma); -# endif -# endif -#endif - } - } -#endif /* PNG_READ_gAMA_SUPPORTED */ - -#ifdef PNG_READ_cHRM_SUPPORTED -#ifdef PNG_FIXED_POINT_SUPPORTED - if (info_ptr->valid & PNG_INFO_cHRM) - if (abs(info_ptr->int_x_white - 31270L) > 1000 || - abs(info_ptr->int_y_white - 32900L) > 1000 || - abs(info_ptr->int_x_red - 64000L) > 1000 || - abs(info_ptr->int_y_red - 33000L) > 1000 || - abs(info_ptr->int_x_green - 30000L) > 1000 || - abs(info_ptr->int_y_green - 60000L) > 1000 || - abs(info_ptr->int_x_blue - 15000L) > 1000 || - abs(info_ptr->int_y_blue - 6000L) > 1000) - { - png_warning(png_ptr, - "Ignoring incorrect cHRM value when sRGB is also present"); - } -#endif /* PNG_FIXED_POINT_SUPPORTED */ -#endif /* PNG_READ_cHRM_SUPPORTED */ - - png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, intent); -} -#endif /* PNG_READ_sRGB_SUPPORTED */ - -#if defined(PNG_READ_iCCP_SUPPORTED) -void /* PRIVATE */ -png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -/* Note: this does not properly handle chunks that are > 64K under DOS */ -{ - png_charp chunkdata; - png_byte compression_type; - png_bytep pC; - png_charp profile; - png_uint_32 skip = 0; - png_uint_32 profile_size = 0; - png_uint_32 profile_length = 0; - png_size_t slength, prefix_length, data_length; - - png_debug(1, "in png_handle_iCCP\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before iCCP"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid iCCP after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->mode & PNG_HAVE_PLTE) - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Out of place iCCP chunk"); - - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)) - { - png_warning(png_ptr, "Duplicate iCCP chunk"); - png_crc_finish(png_ptr, length); - return; - } - -#ifdef PNG_MAX_MALLOC_64K - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr, "iCCP chunk too large to fit in memory"); - skip = length - (png_uint_32)65535L; - length = (png_uint_32)65535L; - } -#endif - - chunkdata = (png_charp)png_malloc(png_ptr, length + 1); - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)chunkdata, slength); - - if (png_crc_finish(png_ptr, skip)) - { - png_free(png_ptr, chunkdata); - return; - } - - chunkdata[slength] = 0x00; - - for (profile = chunkdata; *profile; profile++) - /* empty loop to find end of name */ ; - - ++profile; - - /* there should be at least one zero (the compression type byte) - following the separator, and we should be on it */ - if ( profile >= chunkdata + slength) - { - png_free(png_ptr, chunkdata); - png_warning(png_ptr, "Malformed iCCP chunk"); - return; - } - - /* compression_type should always be zero */ - compression_type = *profile++; - if (compression_type) - { - png_warning(png_ptr, "Ignoring nonzero compression type in iCCP chunk"); - compression_type=0x00; /* Reset it to zero (libpng-1.0.6 through 1.0.8 - wrote nonzero) */ - } - - prefix_length = profile - chunkdata; - chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata, - slength, prefix_length, &data_length); - - profile_length = data_length - prefix_length; - - if ( prefix_length > data_length || profile_length < 4) - { - png_free(png_ptr, chunkdata); - png_warning(png_ptr, "Profile size field missing from iCCP chunk"); - return; - } - - /* Check the profile_size recorded in the first 32 bits of the ICC profile */ - pC = (png_bytep)(chunkdata+prefix_length); - profile_size = ((*(pC ))<<24) | - ((*(pC+1))<<16) | - ((*(pC+2))<< 8) | - ((*(pC+3)) ); - - if(profile_size < profile_length) - profile_length = profile_size; - - if(profile_size > profile_length) - { - png_free(png_ptr, chunkdata); - png_warning(png_ptr, "Ignoring truncated iCCP profile.\n"); - return; - } - - png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type, - chunkdata + prefix_length, profile_length); - png_free(png_ptr, chunkdata); -} -#endif /* PNG_READ_iCCP_SUPPORTED */ - -#if defined(PNG_READ_sPLT_SUPPORTED) -void /* PRIVATE */ -png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -/* Note: this does not properly handle chunks that are > 64K under DOS */ -{ - png_bytep chunkdata; - png_bytep entry_start; - png_sPLT_t new_palette; -#ifdef PNG_NO_POINTER_INDEXING - png_sPLT_entryp pp; -#endif - int data_length, entry_size, i; - png_uint_32 skip = 0; - png_size_t slength; - - png_debug(1, "in png_handle_sPLT\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before sPLT"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid sPLT after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - -#ifdef PNG_MAX_MALLOC_64K - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr, "sPLT chunk too large to fit in memory"); - skip = length - (png_uint_32)65535L; - length = (png_uint_32)65535L; - } -#endif - - chunkdata = (png_bytep)png_malloc(png_ptr, length + 1); - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)chunkdata, slength); - - if (png_crc_finish(png_ptr, skip)) - { - png_free(png_ptr, chunkdata); - return; - } - - chunkdata[slength] = 0x00; - - for (entry_start = chunkdata; *entry_start; entry_start++) - /* empty loop to find end of name */ ; - ++entry_start; - - /* a sample depth should follow the separator, and we should be on it */ - if (entry_start > chunkdata + slength) - { - png_free(png_ptr, chunkdata); - png_warning(png_ptr, "malformed sPLT chunk"); - return; - } - - new_palette.depth = *entry_start++; - entry_size = (new_palette.depth == 8 ? 6 : 10); - data_length = (slength - (entry_start - chunkdata)); - - /* integrity-check the data length */ - if (data_length % entry_size) - { - png_free(png_ptr, chunkdata); - png_warning(png_ptr, "sPLT chunk has bad length"); - return; - } - - new_palette.nentries = data_length / entry_size; - new_palette.entries = (png_sPLT_entryp)png_malloc( - png_ptr, new_palette.nentries * sizeof(png_sPLT_entry)); - -#ifndef PNG_NO_POINTER_INDEXING - for (i = 0; i < new_palette.nentries; i++) - { - png_sPLT_entryp pp = new_palette.entries + i; - - if (new_palette.depth == 8) - { - pp->red = *entry_start++; - pp->green = *entry_start++; - pp->blue = *entry_start++; - pp->alpha = *entry_start++; - } - else - { - pp->red = png_get_uint_16(entry_start); entry_start += 2; - pp->green = png_get_uint_16(entry_start); entry_start += 2; - pp->blue = png_get_uint_16(entry_start); entry_start += 2; - pp->alpha = png_get_uint_16(entry_start); entry_start += 2; - } - pp->frequency = png_get_uint_16(entry_start); entry_start += 2; - } -#else - pp = new_palette.entries; - for (i = 0; i < new_palette.nentries; i++) - { - - if (new_palette.depth == 8) - { - pp[i].red = *entry_start++; - pp[i].green = *entry_start++; - pp[i].blue = *entry_start++; - pp[i].alpha = *entry_start++; - } - else - { - pp[i].red = png_get_uint_16(entry_start); entry_start += 2; - pp[i].green = png_get_uint_16(entry_start); entry_start += 2; - pp[i].blue = png_get_uint_16(entry_start); entry_start += 2; - pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2; - } - pp->frequency = png_get_uint_16(entry_start); entry_start += 2; - } -#endif - - /* discard all chunk data except the name and stash that */ - new_palette.name = (png_charp)chunkdata; - - png_set_sPLT(png_ptr, info_ptr, &new_palette, 1); - - png_free(png_ptr, chunkdata); - png_free(png_ptr, new_palette.entries); -} -#endif /* PNG_READ_sPLT_SUPPORTED */ - -#if defined(PNG_READ_tRNS_SUPPORTED) -void /* PRIVATE */ -png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte readbuf[PNG_MAX_PALETTE_LENGTH]; - - png_debug(1, "in png_handle_tRNS\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before tRNS"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid tRNS after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) - { - png_warning(png_ptr, "Duplicate tRNS chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (!(png_ptr->mode & PNG_HAVE_PLTE)) - { - /* Should be an error, but we can cope with it */ - png_warning(png_ptr, "Missing PLTE before tRNS"); - } - else if (length > (png_uint_32)png_ptr->num_palette) - { - png_warning(png_ptr, "Incorrect tRNS chunk length"); - png_crc_finish(png_ptr, length); - return; - } - if (length == 0) - { - png_warning(png_ptr, "Zero length tRNS chunk"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, readbuf, (png_size_t)length); - png_ptr->num_trans = (png_uint_16)length; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) - { - png_byte buf[6]; - - if (length != 6) - { - png_warning(png_ptr, "Incorrect tRNS chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, (png_size_t)length); - png_ptr->num_trans = 1; - png_ptr->trans_values.red = png_get_uint_16(buf); - png_ptr->trans_values.green = png_get_uint_16(buf + 2); - png_ptr->trans_values.blue = png_get_uint_16(buf + 4); - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) - { - png_byte buf[6]; - - if (length != 2) - { - png_warning(png_ptr, "Incorrect tRNS chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 2); - png_ptr->num_trans = 1; - png_ptr->trans_values.gray = png_get_uint_16(buf); - } - else - { - png_warning(png_ptr, "tRNS chunk not allowed with alpha channel"); - png_crc_finish(png_ptr, length); - return; - } - - if (png_crc_finish(png_ptr, 0)) - return; - - png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans, - &(png_ptr->trans_values)); -} -#endif - -#if defined(PNG_READ_bKGD_SUPPORTED) -void /* PRIVATE */ -png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_size_t truelen; - png_byte buf[6]; - - png_debug(1, "in png_handle_bKGD\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before bKGD"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid bKGD after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && - !(png_ptr->mode & PNG_HAVE_PLTE)) - { - png_warning(png_ptr, "Missing PLTE before bKGD"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)) - { - png_warning(png_ptr, "Duplicate bKGD chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - truelen = 1; - else if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) - truelen = 6; - else - truelen = 2; - - if (length != truelen) - { - png_warning(png_ptr, "Incorrect bKGD chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, truelen); - if (png_crc_finish(png_ptr, 0)) - return; - - /* We convert the index value into RGB components so that we can allow - * arbitrary RGB values for background when we have transparency, and - * so it is easy to determine the RGB values of the background color - * from the info_ptr struct. */ - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - png_ptr->background.index = buf[0]; - if(info_ptr->num_palette) - { - if(buf[0] > info_ptr->num_palette) - { - png_warning(png_ptr, "Incorrect bKGD chunk index value"); - return; - } - png_ptr->background.red = - (png_uint_16)png_ptr->palette[buf[0]].red; - png_ptr->background.green = - (png_uint_16)png_ptr->palette[buf[0]].green; - png_ptr->background.blue = - (png_uint_16)png_ptr->palette[buf[0]].blue; - } - } - else if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) /* GRAY */ - { - png_ptr->background.red = - png_ptr->background.green = - png_ptr->background.blue = - png_ptr->background.gray = png_get_uint_16(buf); - } - else - { - png_ptr->background.red = png_get_uint_16(buf); - png_ptr->background.green = png_get_uint_16(buf + 2); - png_ptr->background.blue = png_get_uint_16(buf + 4); - } - - png_set_bKGD(png_ptr, info_ptr, &(png_ptr->background)); -} -#endif - -#if defined(PNG_READ_hIST_SUPPORTED) -void /* PRIVATE */ -png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - int num, i; - png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH]; - - png_debug(1, "in png_handle_hIST\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before hIST"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid hIST after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (!(png_ptr->mode & PNG_HAVE_PLTE)) - { - png_warning(png_ptr, "Missing PLTE before hIST"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)) - { - png_warning(png_ptr, "Duplicate hIST chunk"); - png_crc_finish(png_ptr, length); - return; - } - - num = (int)length / 2 ; - if (num != png_ptr->num_palette) - { - png_warning(png_ptr, "Incorrect hIST chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - for (i = 0; i < num; i++) - { - png_byte buf[2]; - - png_crc_read(png_ptr, buf, 2); - readbuf[i] = png_get_uint_16(buf); - } - - if (png_crc_finish(png_ptr, 0)) - return; - - png_set_hIST(png_ptr, info_ptr, readbuf); -} -#endif - -#if defined(PNG_READ_pHYs_SUPPORTED) -void /* PRIVATE */ -png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte buf[9]; - png_uint_32 res_x, res_y; - int unit_type; - - png_debug(1, "in png_handle_pHYs\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before pHYs"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid pHYs after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) - { - png_warning(png_ptr, "Duplicate pHYs chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (length != 9) - { - png_warning(png_ptr, "Incorrect pHYs chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 9); - if (png_crc_finish(png_ptr, 0)) - return; - - res_x = png_get_uint_32(buf); - res_y = png_get_uint_32(buf + 4); - unit_type = buf[8]; - png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type); -} -#endif - -#if defined(PNG_READ_oFFs_SUPPORTED) -void /* PRIVATE */ -png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte buf[9]; - png_int_32 offset_x, offset_y; - int unit_type; - - png_debug(1, "in png_handle_oFFs\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before oFFs"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid oFFs after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) - { - png_warning(png_ptr, "Duplicate oFFs chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (length != 9) - { - png_warning(png_ptr, "Incorrect oFFs chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 9); - if (png_crc_finish(png_ptr, 0)) - return; - - offset_x = png_get_int_32(buf); - offset_y = png_get_int_32(buf + 4); - unit_type = buf[8]; - png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type); -} -#endif - -#if defined(PNG_READ_pCAL_SUPPORTED) -/* read the pCAL chunk (described in the PNG Extensions document) */ -void /* PRIVATE */ -png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_charp purpose; - png_int_32 X0, X1; - png_byte type, nparams; - png_charp buf, units, endptr; - png_charpp params; - png_size_t slength; - int i; - - png_debug(1, "in png_handle_pCAL\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before pCAL"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid pCAL after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)) - { - png_warning(png_ptr, "Duplicate pCAL chunk"); - png_crc_finish(png_ptr, length); - return; - } - - png_debug1(2, "Allocating and reading pCAL chunk data (%lu bytes)\n", - length + 1); - purpose = (png_charp)png_malloc_warn(png_ptr, length + 1); - if (purpose == NULL) - { - png_warning(png_ptr, "No memory for pCAL purpose."); - return; - } - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)purpose, slength); - - if (png_crc_finish(png_ptr, 0)) - { - png_free(png_ptr, purpose); - return; - } - - purpose[slength] = 0x00; /* null terminate the last string */ - - png_debug(3, "Finding end of pCAL purpose string\n"); - for (buf = purpose; *buf; buf++) - /* empty loop */ ; - - endptr = purpose + slength; - - /* We need to have at least 12 bytes after the purpose string - in order to get the parameter information. */ - if (endptr <= buf + 12) - { - png_warning(png_ptr, "Invalid pCAL data"); - png_free(png_ptr, purpose); - return; - } - - png_debug(3, "Reading pCAL X0, X1, type, nparams, and units\n"); - X0 = png_get_int_32((png_bytep)buf+1); - X1 = png_get_int_32((png_bytep)buf+5); - type = buf[9]; - nparams = buf[10]; - units = buf + 11; - - png_debug(3, "Checking pCAL equation type and number of parameters\n"); - /* Check that we have the right number of parameters for known - equation types. */ - if ((type == PNG_EQUATION_LINEAR && nparams != 2) || - (type == PNG_EQUATION_BASE_E && nparams != 3) || - (type == PNG_EQUATION_ARBITRARY && nparams != 3) || - (type == PNG_EQUATION_HYPERBOLIC && nparams != 4)) - { - png_warning(png_ptr, "Invalid pCAL parameters for equation type"); - png_free(png_ptr, purpose); - return; - } - else if (type >= PNG_EQUATION_LAST) - { - png_warning(png_ptr, "Unrecognized equation type for pCAL chunk"); - } - - for (buf = units; *buf; buf++) - /* Empty loop to move past the units string. */ ; - - png_debug(3, "Allocating pCAL parameters array\n"); - params = (png_charpp)png_malloc_warn(png_ptr, (png_uint_32)(nparams - *sizeof(png_charp))) ; - if (params == NULL) - { - png_free(png_ptr, purpose); - png_warning(png_ptr, "No memory for pCAL params."); - return; - } - - /* Get pointers to the start of each parameter string. */ - for (i = 0; i < (int)nparams; i++) - { - buf++; /* Skip the null string terminator from previous parameter. */ - - png_debug1(3, "Reading pCAL parameter %d\n", i); - for (params[i] = buf; *buf != 0x00 && buf <= endptr; buf++) - /* Empty loop to move past each parameter string */ ; - - /* Make sure we haven't run out of data yet */ - if (buf > endptr) - { - png_warning(png_ptr, "Invalid pCAL data"); - png_free(png_ptr, purpose); - png_free(png_ptr, params); - return; - } - } - - png_set_pCAL(png_ptr, info_ptr, purpose, X0, X1, type, nparams, - units, params); - - png_free(png_ptr, purpose); - png_free(png_ptr, params); -} -#endif - -#if defined(PNG_READ_sCAL_SUPPORTED) -/* read the sCAL chunk */ -void /* PRIVATE */ -png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_charp buffer, ep; -#ifdef PNG_FLOATING_POINT_SUPPORTED - double width, height; - png_charp vp; -#else -#ifdef PNG_FIXED_POINT_SUPPORTED - png_charp swidth, sheight; -#endif -#endif - png_size_t slength; - - png_debug(1, "in png_handle_sCAL\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before sCAL"); - else if (png_ptr->mode & PNG_HAVE_IDAT) - { - png_warning(png_ptr, "Invalid sCAL after IDAT"); - png_crc_finish(png_ptr, length); - return; - } - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL)) - { - png_warning(png_ptr, "Duplicate sCAL chunk"); - png_crc_finish(png_ptr, length); - return; - } - - png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)\n", - length + 1); - buffer = (png_charp)png_malloc_warn(png_ptr, length + 1); - if (buffer == NULL) - { - png_warning(png_ptr, "Out of memory while processing sCAL chunk"); - return; - } - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)buffer, slength); - - if (png_crc_finish(png_ptr, 0)) - { - png_free(png_ptr, buffer); - return; - } - - buffer[slength] = 0x00; /* null terminate the last string */ - - ep = buffer + 1; /* skip unit byte */ - -#ifdef PNG_FLOATING_POINT_SUPPORTED - width = strtod(ep, &vp); - if (*vp) - { - png_warning(png_ptr, "malformed width string in sCAL chunk"); - return; - } -#else -#ifdef PNG_FIXED_POINT_SUPPORTED - swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); - if (swidth == NULL) - { - png_warning(png_ptr, "Out of memory while processing sCAL chunk width"); - return; - } - png_memcpy(swidth, ep, (png_size_t)png_strlen(ep)); -#endif -#endif - - for (ep = buffer; *ep; ep++) - /* empty loop */ ; - ep++; - -#ifdef PNG_FLOATING_POINT_SUPPORTED - height = strtod(ep, &vp); - if (*vp) - { - png_warning(png_ptr, "malformed height string in sCAL chunk"); - return; - } -#else -#ifdef PNG_FIXED_POINT_SUPPORTED - sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); - if (swidth == NULL) - { - png_warning(png_ptr, "Out of memory while processing sCAL chunk height"); - return; - } - png_memcpy(sheight, ep, (png_size_t)png_strlen(ep)); -#endif -#endif - - if (buffer + slength < ep -#ifdef PNG_FLOATING_POINT_SUPPORTED - || width <= 0. || height <= 0. -#endif - ) - { - png_warning(png_ptr, "Invalid sCAL data"); - png_free(png_ptr, buffer); -#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) - png_free(png_ptr, swidth); - png_free(png_ptr, sheight); -#endif - return; - } - - -#ifdef PNG_FLOATING_POINT_SUPPORTED - png_set_sCAL(png_ptr, info_ptr, buffer[0], width, height); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED - png_set_sCAL_s(png_ptr, info_ptr, buffer[0], swidth, sheight); -#endif -#endif - - png_free(png_ptr, buffer); -#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) - png_free(png_ptr, swidth); - png_free(png_ptr, sheight); -#endif -} -#endif - -#if defined(PNG_READ_tIME_SUPPORTED) -void /* PRIVATE */ -png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_byte buf[7]; - png_time mod_time; - - png_debug(1, "in png_handle_tIME\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Out of place tIME chunk"); - else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)) - { - png_warning(png_ptr, "Duplicate tIME chunk"); - png_crc_finish(png_ptr, length); - return; - } - - if (png_ptr->mode & PNG_HAVE_IDAT) - png_ptr->mode |= PNG_AFTER_IDAT; - - if (length != 7) - { - png_warning(png_ptr, "Incorrect tIME chunk length"); - png_crc_finish(png_ptr, length); - return; - } - - png_crc_read(png_ptr, buf, 7); - if (png_crc_finish(png_ptr, 0)) - return; - - mod_time.second = buf[6]; - mod_time.minute = buf[5]; - mod_time.hour = buf[4]; - mod_time.day = buf[3]; - mod_time.month = buf[2]; - mod_time.year = png_get_uint_16(buf); - - png_set_tIME(png_ptr, info_ptr, &mod_time); -} -#endif - -#if defined(PNG_READ_tEXt_SUPPORTED) -/* Note: this does not properly handle chunks that are > 64K under DOS */ -void /* PRIVATE */ -png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_textp text_ptr; - png_charp key; - png_charp text; - png_uint_32 skip = 0; - png_size_t slength; - int ret; - - png_debug(1, "in png_handle_tEXt\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before tEXt"); - - if (png_ptr->mode & PNG_HAVE_IDAT) - png_ptr->mode |= PNG_AFTER_IDAT; - -#ifdef PNG_MAX_MALLOC_64K - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr, "tEXt chunk too large to fit in memory"); - skip = length - (png_uint_32)65535L; - length = (png_uint_32)65535L; - } -#endif - - key = (png_charp)png_malloc_warn(png_ptr, length + 1); - if (key == NULL) - { - png_warning(png_ptr, "No memory to process text chunk."); - return; - } - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)key, slength); - - if (png_crc_finish(png_ptr, skip)) - { - png_free(png_ptr, key); - return; - } - - key[slength] = 0x00; - - for (text = key; *text; text++) - /* empty loop to find end of key */ ; - - if (text != key + slength) - text++; - - text_ptr =(png_textp)png_malloc_warn(png_ptr, (png_uint_32)sizeof(png_text)); - if (text_ptr == NULL) - { - png_warning(png_ptr, "Not enough memory to process text chunk."); - png_free(png_ptr, key); - return; - } - text_ptr->compression = PNG_TEXT_COMPRESSION_NONE; - text_ptr->key = key; -#ifdef PNG_iTXt_SUPPORTED - text_ptr->lang = NULL; - text_ptr->lang_key = NULL; - text_ptr->itxt_length = 0; -#endif - text_ptr->text = text; - text_ptr->text_length = png_strlen(text); - - ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); - - png_free(png_ptr, key); - png_free(png_ptr, text_ptr); - if (ret) - png_warning(png_ptr, "Insufficient memory to process text chunk."); -} -#endif - -#if defined(PNG_READ_zTXt_SUPPORTED) -/* note: this does not correctly handle chunks that are > 64K under DOS */ -void /* PRIVATE */ -png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_textp text_ptr; - png_charp chunkdata; - png_charp text; - int comp_type; - int ret; - png_size_t slength, prefix_len, data_len; - - png_debug(1, "in png_handle_zTXt\n"); - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before zTXt"); - - if (png_ptr->mode & PNG_HAVE_IDAT) - png_ptr->mode |= PNG_AFTER_IDAT; - -#ifdef PNG_MAX_MALLOC_64K - /* We will no doubt have problems with chunks even half this size, but - there is no hard and fast rule to tell us where to stop. */ - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr,"zTXt chunk too large to fit in memory"); - png_crc_finish(png_ptr, length); - return; - } -#endif - - chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); - if (chunkdata == NULL) - { - png_warning(png_ptr,"Out of memory processing zTXt chunk."); - return; - } - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)chunkdata, slength); - if (png_crc_finish(png_ptr, 0)) - { - png_free(png_ptr, chunkdata); - return; - } - - chunkdata[slength] = 0x00; - - for (text = chunkdata; *text; text++) - /* empty loop */ ; - - /* zTXt must have some text after the chunkdataword */ - if (text == chunkdata + slength) - { - comp_type = PNG_TEXT_COMPRESSION_NONE; - png_warning(png_ptr, "Zero length zTXt chunk"); - } - else - { - comp_type = *(++text); - if (comp_type != PNG_TEXT_COMPRESSION_zTXt) - { - png_warning(png_ptr, "Unknown compression type in zTXt chunk"); - comp_type = PNG_TEXT_COMPRESSION_zTXt; - } - text++; /* skip the compression_method byte */ - } - prefix_len = text - chunkdata; - - chunkdata = (png_charp)png_decompress_chunk(png_ptr, comp_type, chunkdata, - (png_size_t)length, prefix_len, &data_len); - - text_ptr =(png_textp)png_malloc_warn(png_ptr, (png_uint_32)sizeof(png_text)); - if (text_ptr == NULL) - { - png_warning(png_ptr,"Not enough memory to process zTXt chunk."); - png_free(png_ptr, chunkdata); - return; - } - text_ptr->compression = comp_type; - text_ptr->key = chunkdata; -#ifdef PNG_iTXt_SUPPORTED - text_ptr->lang = NULL; - text_ptr->lang_key = NULL; - text_ptr->itxt_length = 0; -#endif - text_ptr->text = chunkdata + prefix_len; - text_ptr->text_length = data_len; - - ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); - - png_free(png_ptr, text_ptr); - png_free(png_ptr, chunkdata); - if (ret) - png_error(png_ptr, "Insufficient memory to store zTXt chunk."); -} -#endif - -#if defined(PNG_READ_iTXt_SUPPORTED) -/* note: this does not correctly handle chunks that are > 64K under DOS */ -void /* PRIVATE */ -png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_textp text_ptr; - png_charp chunkdata; - png_charp key, lang, text, lang_key; - int comp_flag; - int comp_type = 0; - int ret; - png_size_t slength, prefix_len, data_len; - - png_debug(1, "in png_handle_iTXt\n"); - - if (!(png_ptr->mode & PNG_HAVE_IHDR)) - png_error(png_ptr, "Missing IHDR before iTXt"); - - if (png_ptr->mode & PNG_HAVE_IDAT) - png_ptr->mode |= PNG_AFTER_IDAT; - -#ifdef PNG_MAX_MALLOC_64K - /* We will no doubt have problems with chunks even half this size, but - there is no hard and fast rule to tell us where to stop. */ - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr,"iTXt chunk too large to fit in memory"); - png_crc_finish(png_ptr, length); - return; - } -#endif - - chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); - if (chunkdata == NULL) - { - png_warning(png_ptr, "No memory to process iTXt chunk."); - return; - } - slength = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)chunkdata, slength); - if (png_crc_finish(png_ptr, 0)) - { - png_free(png_ptr, chunkdata); - return; - } - - chunkdata[slength] = 0x00; - - for (lang = chunkdata; *lang; lang++) - /* empty loop */ ; - lang++; /* skip NUL separator */ - - /* iTXt must have a language tag (possibly empty), two compression bytes, - translated keyword (possibly empty), and possibly some text after the - keyword */ - - if (lang >= chunkdata + slength) - { - comp_flag = PNG_TEXT_COMPRESSION_NONE; - png_warning(png_ptr, "Zero length iTXt chunk"); - } - else - { - comp_flag = *lang++; - comp_type = *lang++; - } - - for (lang_key = lang; *lang_key; lang_key++) - /* empty loop */ ; - lang_key++; /* skip NUL separator */ - - for (text = lang_key; *text; text++) - /* empty loop */ ; - text++; /* skip NUL separator */ - - prefix_len = text - chunkdata; - - key=chunkdata; - if (comp_flag) - chunkdata = png_decompress_chunk(png_ptr, comp_type, chunkdata, - (size_t)length, prefix_len, &data_len); - else - data_len=png_strlen(chunkdata + prefix_len); - text_ptr =(png_textp)png_malloc_warn(png_ptr, (png_uint_32)sizeof(png_text)); - if (text_ptr == NULL) - { - png_warning(png_ptr,"Not enough memory to process iTXt chunk."); - png_free(png_ptr, chunkdata); - return; - } - text_ptr->compression = (int)comp_flag + 1; - text_ptr->lang_key = chunkdata+(lang_key-key); - text_ptr->lang = chunkdata+(lang-key); - text_ptr->itxt_length = data_len; - text_ptr->text_length = 0; - text_ptr->key = chunkdata; - text_ptr->text = chunkdata + prefix_len; - - ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); - - png_free(png_ptr, text_ptr); - png_free(png_ptr, chunkdata); - if (ret) - png_error(png_ptr, "Insufficient memory to store iTXt chunk."); -} -#endif - -/* This function is called when we haven't found a handler for a - chunk. If there isn't a problem with the chunk itself (ie bad - chunk name, CRC, or a critical chunk), the chunk is silently ignored - -- unless the PNG_FLAG_UNKNOWN_CHUNKS_SUPPORTED flag is on in which - case it will be saved away to be written out later. */ -void /* PRIVATE */ -png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) -{ - png_uint_32 skip = 0; - - png_debug(1, "in png_handle_unknown\n"); - - if (png_ptr->mode & PNG_HAVE_IDAT) - { -#ifdef PNG_USE_LOCAL_ARRAYS - PNG_IDAT; -#endif - if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) /* not an IDAT */ - png_ptr->mode |= PNG_AFTER_IDAT; - } - - png_check_chunk_name(png_ptr, png_ptr->chunk_name); - - if (!(png_ptr->chunk_name[0] & 0x20)) - { -#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) - if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != - HANDLE_CHUNK_ALWAYS -#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) - && png_ptr->read_user_chunk_fn == NULL -#endif - ) -#endif - png_chunk_error(png_ptr, "unknown critical chunk"); - } - -#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) - if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) - { - png_unknown_chunk chunk; - -#ifdef PNG_MAX_MALLOC_64K - if (length > (png_uint_32)65535L) - { - png_warning(png_ptr, "unknown chunk too large to fit in memory"); - skip = length - (png_uint_32)65535L; - length = (png_uint_32)65535L; - } -#endif - png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name); - chunk.data = (png_bytep)png_malloc(png_ptr, length); - chunk.size = (png_size_t)length; - png_crc_read(png_ptr, (png_bytep)chunk.data, length); -#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) - if(png_ptr->read_user_chunk_fn != NULL) - { - /* callback to user unknown chunk handler */ - if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0) - { - if (!(png_ptr->chunk_name[0] & 0x20)) - if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != - HANDLE_CHUNK_ALWAYS) - { - png_free(png_ptr, chunk.data); - png_chunk_error(png_ptr, "unknown critical chunk"); - } - png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); - } - } - else -#endif - png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); - png_free(png_ptr, chunk.data); - } - else -#endif - skip = length; - - png_crc_finish(png_ptr, skip); - -#if !defined(PNG_READ_USER_CHUNKS_SUPPORTED) - info_ptr = info_ptr; /* quiet compiler warnings about unused info_ptr */ -#endif -} - -/* This function is called to verify that a chunk name is valid. - This function can't have the "critical chunk check" incorporated - into it, since in the future we will need to be able to call user - functions to handle unknown critical chunks after we check that - the chunk name itself is valid. */ - -#define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97)) - -void /* PRIVATE */ -png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name) -{ - png_debug(1, "in png_check_chunk_name\n"); - if (isnonalpha(chunk_name[0]) || isnonalpha(chunk_name[1]) || - isnonalpha(chunk_name[2]) || isnonalpha(chunk_name[3])) - { - png_chunk_error(png_ptr, "invalid chunk type"); - } -} - -/* Combines the row recently read in with the existing pixels in the - row. This routine takes care of alpha and transparency if requested. - This routine also handles the two methods of progressive display - of interlaced images, depending on the mask value. - The mask value describes which pixels are to be combined with - the row. The pattern always repeats every 8 pixels, so just 8 - bits are needed. A one indicates the pixel is to be combined, - a zero indicates the pixel is to be skipped. This is in addition - to any alpha or transparency value associated with the pixel. If - you want all pixels to be combined, pass 0xff (255) in mask. */ -#ifndef PNG_HAVE_ASSEMBLER_COMBINE_ROW -void /* PRIVATE */ -png_combine_row(png_structp png_ptr, png_bytep row, int mask) -{ - png_debug(1,"in png_combine_row\n"); - if (mask == 0xff) - { - png_memcpy(row, png_ptr->row_buf + 1, - (png_size_t)((png_ptr->width * - png_ptr->row_info.pixel_depth + 7) >> 3)); - } - else - { - switch (png_ptr->row_info.pixel_depth) - { - case 1: - { - png_bytep sp = png_ptr->row_buf + 1; - png_bytep dp = row; - int s_inc, s_start, s_end; - int m = 0x80; - int shift; - png_uint_32 i; - png_uint_32 row_width = png_ptr->width; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 7; - s_inc = 1; - } - else -#endif - { - s_start = 7; - s_end = 0; - s_inc = -1; - } - - shift = s_start; - - for (i = 0; i < row_width; i++) - { - if (m & mask) - { - int value; - - value = (*sp >> shift) & 0x01; - *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - case 2: - { - png_bytep sp = png_ptr->row_buf + 1; - png_bytep dp = row; - int s_start, s_end, s_inc; - int m = 0x80; - int shift; - png_uint_32 i; - png_uint_32 row_width = png_ptr->width; - int value; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 6; - s_inc = 2; - } - else -#endif - { - s_start = 6; - s_end = 0; - s_inc = -2; - } - - shift = s_start; - - for (i = 0; i < row_width; i++) - { - if (m & mask) - { - value = (*sp >> shift) & 0x03; - *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - case 4: - { - png_bytep sp = png_ptr->row_buf + 1; - png_bytep dp = row; - int s_start, s_end, s_inc; - int m = 0x80; - int shift; - png_uint_32 i; - png_uint_32 row_width = png_ptr->width; - int value; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 4; - s_inc = 4; - } - else -#endif - { - s_start = 4; - s_end = 0; - s_inc = -4; - } - shift = s_start; - - for (i = 0; i < row_width; i++) - { - if (m & mask) - { - value = (*sp >> shift) & 0xf; - *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - default: - { - png_bytep sp = png_ptr->row_buf + 1; - png_bytep dp = row; - png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - png_uint_32 i; - png_uint_32 row_width = png_ptr->width; - png_byte m = 0x80; - - - for (i = 0; i < row_width; i++) - { - if (m & mask) - { - png_memcpy(dp, sp, pixel_bytes); - } - - sp += pixel_bytes; - dp += pixel_bytes; - - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - } - } -} -#endif /* !PNG_HAVE_ASSEMBLER_COMBINE_ROW */ - -#ifdef PNG_READ_INTERLACING_SUPPORTED -#ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */ -/* OLD pre-1.0.9 interface: -void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, - png_uint_32 transformations) - */ -void /* PRIVATE */ -png_do_read_interlace(png_structp png_ptr) -{ - png_row_infop row_info = &(png_ptr->row_info); - png_bytep row = png_ptr->row_buf + 1; - int pass = png_ptr->pass; - png_uint_32 transformations = png_ptr->transformations; -#ifdef PNG_USE_LOCAL_ARRAYS - /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ - /* offset to next interlace block */ - const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; -#endif - - png_debug(1,"in png_do_read_interlace (stock C version)\n"); - if (row != NULL && row_info != NULL) - { - png_uint_32 final_width; - - final_width = row_info->width * png_pass_inc[pass]; - - switch (row_info->pixel_depth) - { - case 1: - { - png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3); - png_bytep dp = row + (png_size_t)((final_width - 1) >> 3); - int sshift, dshift; - int s_start, s_end, s_inc; - int jstop = png_pass_inc[pass]; - png_byte v; - png_uint_32 i; - int j; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (int)((row_info->width + 7) & 0x07); - dshift = (int)((final_width + 7) & 0x07); - s_start = 7; - s_end = 0; - s_inc = -1; - } - else -#endif - { - sshift = 7 - (int)((row_info->width + 7) & 0x07); - dshift = 7 - (int)((final_width + 7) & 0x07); - s_start = 0; - s_end = 7; - s_inc = 1; - } - - for (i = 0; i < row_info->width; i++) - { - v = (png_byte)((*sp >> sshift) & 0x01); - for (j = 0; j < jstop; j++) - { - *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - case 2: - { - png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2); - png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2); - int sshift, dshift; - int s_start, s_end, s_inc; - int jstop = png_pass_inc[pass]; - png_uint_32 i; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (int)(((row_info->width + 3) & 0x03) << 1); - dshift = (int)(((final_width + 3) & 0x03) << 1); - s_start = 6; - s_end = 0; - s_inc = -2; - } - else -#endif - { - sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1); - dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1); - s_start = 0; - s_end = 6; - s_inc = 2; - } - - for (i = 0; i < row_info->width; i++) - { - png_byte v; - int j; - - v = (png_byte)((*sp >> sshift) & 0x03); - for (j = 0; j < jstop; j++) - { - *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - case 4: - { - png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1); - png_bytep dp = row + (png_size_t)((final_width - 1) >> 1); - int sshift, dshift; - int s_start, s_end, s_inc; - png_uint_32 i; - int jstop = png_pass_inc[pass]; - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (int)(((row_info->width + 1) & 0x01) << 2); - dshift = (int)(((final_width + 1) & 0x01) << 2); - s_start = 4; - s_end = 0; - s_inc = -4; - } - else -#endif - { - sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2); - dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2); - s_start = 0; - s_end = 4; - s_inc = 4; - } - - for (i = 0; i < row_info->width; i++) - { - png_byte v = (png_byte)((*sp >> sshift) & 0xf); - int j; - - for (j = 0; j < jstop; j++) - { - *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - default: - { - png_size_t pixel_bytes = (row_info->pixel_depth >> 3); - png_bytep sp =row + (png_size_t)(row_info->width - 1) * pixel_bytes; - png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes; - - int jstop = png_pass_inc[pass]; - png_uint_32 i; - - for (i = 0; i < row_info->width; i++) - { - png_byte v[8]; - int j; - - png_memcpy(v, sp, pixel_bytes); - for (j = 0; j < jstop; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sp -= pixel_bytes; - } - break; - } - } - row_info->width = final_width; - row_info->rowbytes = ((final_width * - (png_uint_32)row_info->pixel_depth + 7) >> 3); - } -#if !defined(PNG_READ_PACKSWAP_SUPPORTED) - transformations = transformations; /* silence compiler warning */ -#endif -} -#endif /* !PNG_HAVE_ASSEMBLER_READ_INTERLACE */ -#endif /* PNG_READ_INTERLACING_SUPPORTED */ - -#ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW -void /* PRIVATE */ -png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row, - png_bytep prev_row, int filter) -{ - png_debug(1, "in png_read_filter_row\n"); - png_debug2(2,"row = %lu, filter = %d\n", png_ptr->row_number, filter); - switch (filter) - { - case PNG_FILTER_VALUE_NONE: - break; - case PNG_FILTER_VALUE_SUB: - { - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_bytep rp = row + bpp; - png_bytep lp = row; - - for (i = bpp; i < istop; i++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff); - rp++; - } - break; - } - case PNG_FILTER_VALUE_UP: - { - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - png_bytep rp = row; - png_bytep pp = prev_row; - - for (i = 0; i < istop; i++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); - rp++; - } - break; - } - case PNG_FILTER_VALUE_AVG: - { - png_uint_32 i; - png_bytep rp = row; - png_bytep pp = prev_row; - png_bytep lp = row; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_uint_32 istop = row_info->rowbytes - bpp; - - for (i = 0; i < bpp; i++) - { - *rp = (png_byte)(((int)(*rp) + - ((int)(*pp++) / 2 )) & 0xff); - rp++; - } - - for (i = 0; i < istop; i++) - { - *rp = (png_byte)(((int)(*rp) + - (int)(*pp++ + *lp++) / 2 ) & 0xff); - rp++; - } - break; - } - case PNG_FILTER_VALUE_PAETH: - { - png_uint_32 i; - png_bytep rp = row; - png_bytep pp = prev_row; - png_bytep lp = row; - png_bytep cp = prev_row; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_uint_32 istop=row_info->rowbytes - bpp; - - for (i = 0; i < bpp; i++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); - rp++; - } - - for (i = 0; i < istop; i++) /* use leftover rp,pp */ - { - int a, b, c, pa, pb, pc, p; - - a = *lp++; - b = *pp++; - c = *cp++; - - p = b - c; - pc = a - c; - -#ifdef PNG_USE_ABS - pa = abs(p); - pb = abs(pc); - pc = abs(p + pc); -#else - pa = p < 0 ? -p : p; - pb = pc < 0 ? -pc : pc; - pc = (p + pc) < 0 ? -(p + pc) : p + pc; -#endif - - /* - if (pa <= pb && pa <= pc) - p = a; - else if (pb <= pc) - p = b; - else - p = c; - */ - - p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; - - *rp = (png_byte)(((int)(*rp) + p) & 0xff); - rp++; - } - break; - } - default: - png_warning(png_ptr, "Ignoring bad adaptive filter type"); - *row=0; - break; - } -} -#endif /* !PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */ - -void /* PRIVATE */ -png_read_finish_row(png_structp png_ptr) -{ -#ifdef PNG_USE_LOCAL_ARRAYS - /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ - - /* start of interlace block */ - const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; - - /* offset to next interlace block */ - const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; - - /* start of interlace block in the y direction */ - const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; - - /* offset to next interlace block in the y direction */ - const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; -#endif - - png_debug(1, "in png_read_finish_row\n"); - png_ptr->row_number++; - if (png_ptr->row_number < png_ptr->num_rows) - return; - - if (png_ptr->interlaced) - { - png_ptr->row_number = 0; - png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); - do - { - png_ptr->pass++; - if (png_ptr->pass >= 7) - break; - png_ptr->iwidth = (png_ptr->width + - png_pass_inc[png_ptr->pass] - 1 - - png_pass_start[png_ptr->pass]) / - png_pass_inc[png_ptr->pass]; - png_ptr->irowbytes = ((png_ptr->iwidth * - (png_uint_32)png_ptr->pixel_depth + 7) >> 3) +1; - - if (!(png_ptr->transformations & PNG_INTERLACE)) - { - png_ptr->num_rows = (png_ptr->height + - png_pass_yinc[png_ptr->pass] - 1 - - png_pass_ystart[png_ptr->pass]) / - png_pass_yinc[png_ptr->pass]; - if (!(png_ptr->num_rows)) - continue; - } - else /* if (png_ptr->transformations & PNG_INTERLACE) */ - break; - } while (png_ptr->iwidth == 0); - - if (png_ptr->pass < 7) - return; - } - - if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) - { -#ifdef PNG_USE_LOCAL_ARRAYS - PNG_IDAT; -#endif - char extra; - int ret; - - png_ptr->zstream.next_out = (Byte *)&extra; - png_ptr->zstream.avail_out = (uInt)1; - for(;;) - { - if (!(png_ptr->zstream.avail_in)) - { - while (!png_ptr->idat_size) - { - png_byte chunk_length[4]; - - png_crc_finish(png_ptr, 0); - - png_read_data(png_ptr, chunk_length, 4); - png_ptr->idat_size = png_get_uint_32(chunk_length); - - png_reset_crc(png_ptr); - png_crc_read(png_ptr, png_ptr->chunk_name, 4); - if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) - png_error(png_ptr, "Not enough image data"); - - } - png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; - png_ptr->zstream.next_in = png_ptr->zbuf; - if (png_ptr->zbuf_size > png_ptr->idat_size) - png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; - png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream.avail_in); - png_ptr->idat_size -= png_ptr->zstream.avail_in; - } - ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); - if (ret == Z_STREAM_END) - { - if (!(png_ptr->zstream.avail_out) || png_ptr->zstream.avail_in || - png_ptr->idat_size) - png_warning(png_ptr, "Extra compressed data"); - png_ptr->mode |= PNG_AFTER_IDAT; - png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; - break; - } - if (ret != Z_OK) - png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : - "Decompression Error"); - - if (!(png_ptr->zstream.avail_out)) - { - png_warning(png_ptr, "Extra compressed data."); - png_ptr->mode |= PNG_AFTER_IDAT; - png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; - break; - } - - } - png_ptr->zstream.avail_out = 0; - } - - if (png_ptr->idat_size || png_ptr->zstream.avail_in) - png_warning(png_ptr, "Extra compression data"); - - inflateReset(&png_ptr->zstream); - - png_ptr->mode |= PNG_AFTER_IDAT; -} - -void /* PRIVATE */ -png_read_start_row(png_structp png_ptr) -{ -#ifdef PNG_USE_LOCAL_ARRAYS - /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ - - /* start of interlace block */ - const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; - - /* offset to next interlace block */ - const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; - - /* start of interlace block in the y direction */ - const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; - - /* offset to next interlace block in the y direction */ - const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; -#endif - - int max_pixel_depth; - png_uint_32 row_bytes; - - png_debug(1, "in png_read_start_row\n"); - png_ptr->zstream.avail_in = 0; - png_init_read_transformations(png_ptr); - if (png_ptr->interlaced) - { - if (!(png_ptr->transformations & PNG_INTERLACE)) - png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - - png_pass_ystart[0]) / png_pass_yinc[0]; - else - png_ptr->num_rows = png_ptr->height; - - png_ptr->iwidth = (png_ptr->width + - png_pass_inc[png_ptr->pass] - 1 - - png_pass_start[png_ptr->pass]) / - png_pass_inc[png_ptr->pass]; - - row_bytes = ((png_ptr->iwidth * - (png_uint_32)png_ptr->pixel_depth + 7) >> 3) +1; - png_ptr->irowbytes = (png_size_t)row_bytes; - if((png_uint_32)png_ptr->irowbytes != row_bytes) - png_error(png_ptr, "Rowbytes overflow in png_read_start_row"); - } - else - { - png_ptr->num_rows = png_ptr->height; - png_ptr->iwidth = png_ptr->width; - png_ptr->irowbytes = png_ptr->rowbytes + 1; - } - max_pixel_depth = png_ptr->pixel_depth; - -#if defined(PNG_READ_PACK_SUPPORTED) - if ((png_ptr->transformations & PNG_PACK) && png_ptr->bit_depth < 8) - max_pixel_depth = 8; -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) - if (png_ptr->transformations & PNG_EXPAND) - { - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - { - if (png_ptr->num_trans) - max_pixel_depth = 32; - else - max_pixel_depth = 24; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) - { - if (max_pixel_depth < 8) - max_pixel_depth = 8; - if (png_ptr->num_trans) - max_pixel_depth *= 2; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) - { - if (png_ptr->num_trans) - { - max_pixel_depth *= 4; - max_pixel_depth /= 3; - } - } - } -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) - if (png_ptr->transformations & (PNG_FILLER)) - { - if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - max_pixel_depth = 32; - else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) - { - if (max_pixel_depth <= 8) - max_pixel_depth = 16; - else - max_pixel_depth = 32; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) - { - if (max_pixel_depth <= 32) - max_pixel_depth = 32; - else - max_pixel_depth = 64; - } - } -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) - if (png_ptr->transformations & PNG_GRAY_TO_RGB) - { - if ( -#if defined(PNG_READ_EXPAND_SUPPORTED) - (png_ptr->num_trans && (png_ptr->transformations & PNG_EXPAND)) || -#endif -#if defined(PNG_READ_FILLER_SUPPORTED) - (png_ptr->transformations & (PNG_FILLER)) || -#endif - png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - if (max_pixel_depth <= 16) - max_pixel_depth = 32; - else - max_pixel_depth = 64; - } - else - { - if (max_pixel_depth <= 8) - { - if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - max_pixel_depth = 32; - else - max_pixel_depth = 24; - } - else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - max_pixel_depth = 64; - else - max_pixel_depth = 48; - } - } -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \ -defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) - if(png_ptr->transformations & PNG_USER_TRANSFORM) - { - int user_pixel_depth=png_ptr->user_transform_depth* - png_ptr->user_transform_channels; - if(user_pixel_depth > max_pixel_depth) - max_pixel_depth=user_pixel_depth; - } -#endif - - /* align the width on the next larger 8 pixels. Mainly used - for interlacing */ - row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7)); - /* calculate the maximum bytes needed, adding a byte and a pixel - for safety's sake */ - row_bytes = ((row_bytes * (png_uint_32)max_pixel_depth + 7) >> 3) + - 1 + ((max_pixel_depth + 7) >> 3); -#ifdef PNG_MAX_MALLOC_64K - if (row_bytes > (png_uint_32)65536L) - png_error(png_ptr, "This image requires a row greater than 64KB"); -#endif - png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64); - png_ptr->row_buf = png_ptr->big_row_buf+32; -#if defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD) - png_ptr->row_buf_size = row_bytes; -#endif - -#ifdef PNG_MAX_MALLOC_64K - if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L) - png_error(png_ptr, "This image requires a row greater than 64KB"); -#endif - png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)( - png_ptr->rowbytes + 1)); - - png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); - - png_debug1(3, "width = %lu,\n", png_ptr->width); - png_debug1(3, "height = %lu,\n", png_ptr->height); - png_debug1(3, "iwidth = %lu,\n", png_ptr->iwidth); - png_debug1(3, "num_rows = %lu\n", png_ptr->num_rows); - png_debug1(3, "rowbytes = %lu,\n", png_ptr->rowbytes); - png_debug1(3, "irowbytes = %lu,\n", png_ptr->irowbytes); - - png_ptr->flags |= PNG_FLAG_ROW_INIT; -} diff --git a/src/libs/pdflib/libs/png/pngset.c b/src/libs/pdflib/libs/png/pngset.c deleted file mode 100644 index 48e44454f8..0000000000 --- a/src/libs/pdflib/libs/png/pngset.c +++ /dev/null @@ -1,1161 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngset.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngset.c - storage of image information into info struct - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * The functions here are used during reads to store data from the file - * into the info struct, and during writes to store application data - * into the info struct for writing into the file. This abstracts the - * info struct and allows us to change the structure in the future. - */ - -#define PNG_INTERNAL -#include "png.h" - -#if defined(PNG_bKGD_SUPPORTED) -void PNGAPI -png_set_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p background) -{ - png_debug1(1, "in %s storage function\n", "bKGD"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - png_memcpy(&(info_ptr->background), background, sizeof(png_color_16)); - info_ptr->valid |= PNG_INFO_bKGD; -} -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -void PNGAPI -png_set_cHRM(png_structp png_ptr, png_infop info_ptr, - double white_x, double white_y, double red_x, double red_y, - double green_x, double green_y, double blue_x, double blue_y) -{ - png_debug1(1, "in %s storage function\n", "cHRM"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - if (white_x < 0.0 || white_y < 0.0 || - red_x < 0.0 || red_y < 0.0 || - green_x < 0.0 || green_y < 0.0 || - blue_x < 0.0 || blue_y < 0.0) - { - png_warning(png_ptr, - "Ignoring attempt to set negative chromaticity value"); - return; - } - if (white_x > 21474.83 || white_y > 21474.83 || - red_x > 21474.83 || red_y > 21474.83 || - green_x > 21474.83 || green_y > 21474.83 || - blue_x > 21474.83 || blue_y > 21474.83) - { - png_warning(png_ptr, - "Ignoring attempt to set chromaticity value exceeding 21474.83"); - return; - } - - info_ptr->x_white = (float)white_x; - info_ptr->y_white = (float)white_y; - info_ptr->x_red = (float)red_x; - info_ptr->y_red = (float)red_y; - info_ptr->x_green = (float)green_x; - info_ptr->y_green = (float)green_y; - info_ptr->x_blue = (float)blue_x; - info_ptr->y_blue = (float)blue_y; -#ifdef PNG_FIXED_POINT_SUPPORTED - info_ptr->int_x_white = (png_fixed_point)(white_x*100000.+0.5); - info_ptr->int_y_white = (png_fixed_point)(white_y*100000.+0.5); - info_ptr->int_x_red = (png_fixed_point)( red_x*100000.+0.5); - info_ptr->int_y_red = (png_fixed_point)( red_y*100000.+0.5); - info_ptr->int_x_green = (png_fixed_point)(green_x*100000.+0.5); - info_ptr->int_y_green = (png_fixed_point)(green_y*100000.+0.5); - info_ptr->int_x_blue = (png_fixed_point)( blue_x*100000.+0.5); - info_ptr->int_y_blue = (png_fixed_point)( blue_y*100000.+0.5); -#endif - info_ptr->valid |= PNG_INFO_cHRM; -} -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -void PNGAPI -png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, - png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x, - png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y, - png_fixed_point blue_x, png_fixed_point blue_y) -{ - png_debug1(1, "in %s storage function\n", "cHRM"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - if (white_x < 0 || white_y < 0 || - red_x < 0 || red_y < 0 || - green_x < 0 || green_y < 0 || - blue_x < 0 || blue_y < 0) - { - png_warning(png_ptr, - "Ignoring attempt to set negative chromaticity value"); - return; - } - if (white_x > (double) PNG_MAX_UINT || white_y > (double) PNG_MAX_UINT || - red_x > (double) PNG_MAX_UINT || red_y > (double) PNG_MAX_UINT || - green_x > (double) PNG_MAX_UINT || green_y > (double) PNG_MAX_UINT || - blue_x > (double) PNG_MAX_UINT || blue_y > (double) PNG_MAX_UINT) - { - png_warning(png_ptr, - "Ignoring attempt to set chromaticity value exceeding 21474.83"); - return; - } - info_ptr->int_x_white = white_x; - info_ptr->int_y_white = white_y; - info_ptr->int_x_red = red_x; - info_ptr->int_y_red = red_y; - info_ptr->int_x_green = green_x; - info_ptr->int_y_green = green_y; - info_ptr->int_x_blue = blue_x; - info_ptr->int_y_blue = blue_y; -#ifdef PNG_FLOATING_POINT_SUPPORTED - info_ptr->x_white = (float)(white_x/100000.); - info_ptr->y_white = (float)(white_y/100000.); - info_ptr->x_red = (float)( red_x/100000.); - info_ptr->y_red = (float)( red_y/100000.); - info_ptr->x_green = (float)(green_x/100000.); - info_ptr->y_green = (float)(green_y/100000.); - info_ptr->x_blue = (float)( blue_x/100000.); - info_ptr->y_blue = (float)( blue_y/100000.); -#endif - info_ptr->valid |= PNG_INFO_cHRM; -} -#endif -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -void PNGAPI -png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma) -{ - double tgamma; - png_debug1(1, "in %s storage function\n", "gAMA"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - /* Check for overflow */ - if (file_gamma > 21474.83) - { - png_warning(png_ptr, "Limiting gamma to 21474.83"); - tgamma=21474.83; - } - else - tgamma=file_gamma; - info_ptr->gamma = (float)tgamma; -#ifdef PNG_FIXED_POINT_SUPPORTED - info_ptr->int_gamma = (int)(tgamma*100000.+.5); -#endif - info_ptr->valid |= PNG_INFO_gAMA; - if(tgamma == 0.0) - png_warning(png_ptr, "Setting gamma=0"); -} -#endif -void PNGAPI -png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point - int_gamma) -{ - png_fixed_point tgamma; - - png_debug1(1, "in %s storage function\n", "gAMA"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - if (int_gamma > (png_fixed_point) PNG_MAX_UINT) - { - png_warning(png_ptr, "Limiting gamma to 21474.83"); - tgamma=PNG_MAX_UINT; - } - else - { - if (int_gamma < 0) - { - png_warning(png_ptr, "Setting negative gamma to zero"); - tgamma=0; - } - else - tgamma=int_gamma; - } -#ifdef PNG_FLOATING_POINT_SUPPORTED - info_ptr->gamma = (float)(tgamma/100000.); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - info_ptr->int_gamma = tgamma; -#endif - info_ptr->valid |= PNG_INFO_gAMA; - if(tgamma == 0) - png_warning(png_ptr, "Setting gamma=0"); -} -#endif - -#if defined(PNG_hIST_SUPPORTED) -void PNGAPI -png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist) -{ - int i; - - png_debug1(1, "in %s storage function\n", "hIST"); - if (png_ptr == NULL || info_ptr == NULL) - return; - if (info_ptr->num_palette == 0) - { - png_warning(png_ptr, - "Palette size 0, hIST allocation skipped."); - return; - } - -#ifdef PNG_FREE_ME_SUPPORTED - png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0); -#endif - /* Changed from info->num_palette to 256 in version 1.2.1 */ - png_ptr->hist = (png_uint_16p)png_malloc_warn(png_ptr, - (png_uint_32)(256 * sizeof (png_uint_16))); - if (png_ptr->hist == NULL) - { - png_warning(png_ptr, "Insufficient memory for hIST chunk data."); - return; - } - - for (i = 0; i < info_ptr->num_palette; i++) - png_ptr->hist[i] = hist[i]; - info_ptr->hist = png_ptr->hist; - info_ptr->valid |= PNG_INFO_hIST; - -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_HIST; -#else - png_ptr->flags |= PNG_FLAG_FREE_HIST; -#endif -} -#endif - -void PNGAPI -png_set_IHDR(png_structp png_ptr, png_infop info_ptr, - png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_type, int compression_type, - int filter_type) -{ - int rowbytes_per_pixel; - png_debug1(1, "in %s storage function\n", "IHDR"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - /* check for width and height valid values */ - if (width == 0 || height == 0) - png_error(png_ptr, "Image width or height is zero in IHDR"); - if (width > PNG_MAX_UINT || height > PNG_MAX_UINT) - png_error(png_ptr, "Invalid image size in IHDR"); - - /* check other values */ - if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 && - bit_depth != 8 && bit_depth != 16) - png_error(png_ptr, "Invalid bit depth in IHDR"); - - if (color_type < 0 || color_type == 1 || - color_type == 5 || color_type > 6) - png_error(png_ptr, "Invalid color type in IHDR"); - - if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) || - ((color_type == PNG_COLOR_TYPE_RGB || - color_type == PNG_COLOR_TYPE_GRAY_ALPHA || - color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8)) - png_error(png_ptr, "Invalid color type/bit depth combination in IHDR"); - - if (interlace_type >= PNG_INTERLACE_LAST) - png_error(png_ptr, "Unknown interlace method in IHDR"); - - if (compression_type != PNG_COMPRESSION_TYPE_BASE) - png_error(png_ptr, "Unknown compression method in IHDR"); - -#if defined(PNG_MNG_FEATURES_SUPPORTED) - /* Accept filter_method 64 (intrapixel differencing) only if - * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and - * 2. Libpng did not read a PNG signature (this filter_method is only - * used in PNG datastreams that are embedded in MNG datastreams) and - * 3. The application called png_permit_mng_features with a mask that - * included PNG_FLAG_MNG_FILTER_64 and - * 4. The filter_method is 64 and - * 5. The color_type is RGB or RGBA - */ - if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted) - png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n"); - if(filter_type != PNG_FILTER_TYPE_BASE) - { - if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && - (filter_type == PNG_INTRAPIXEL_DIFFERENCING) && - ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) && - (color_type == PNG_COLOR_TYPE_RGB || - color_type == PNG_COLOR_TYPE_RGB_ALPHA))) - png_error(png_ptr, "Unknown filter method in IHDR"); - if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) - png_warning(png_ptr, "Invalid filter method in IHDR"); - } -#else - if(filter_type != PNG_FILTER_TYPE_BASE) - png_error(png_ptr, "Unknown filter method in IHDR"); -#endif - - info_ptr->width = width; - info_ptr->height = height; - info_ptr->bit_depth = (png_byte)bit_depth; - info_ptr->color_type =(png_byte) color_type; - info_ptr->compression_type = (png_byte)compression_type; - info_ptr->filter_type = (png_byte)filter_type; - info_ptr->interlace_type = (png_byte)interlace_type; - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) - info_ptr->channels = 1; - else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) - info_ptr->channels = 3; - else - info_ptr->channels = 1; - if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) - info_ptr->channels++; - info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); - - /* check for overflow */ - rowbytes_per_pixel = (info_ptr->pixel_depth + 7) >> 3; - if ( width > PNG_MAX_UINT/rowbytes_per_pixel - 64) - { - png_warning(png_ptr, - "Width too large to process image data; rowbytes will overflow."); - info_ptr->rowbytes = (png_size_t)0; - } - else - info_ptr->rowbytes = (info_ptr->width * info_ptr->pixel_depth + 7) >> 3; -} - -#if defined(PNG_oFFs_SUPPORTED) -void PNGAPI -png_set_oFFs(png_structp png_ptr, png_infop info_ptr, - png_int_32 offset_x, png_int_32 offset_y, int unit_type) -{ - png_debug1(1, "in %s storage function\n", "oFFs"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - info_ptr->x_offset = offset_x; - info_ptr->y_offset = offset_y; - info_ptr->offset_unit_type = (png_byte)unit_type; - info_ptr->valid |= PNG_INFO_oFFs; -} -#endif - -#if defined(PNG_pCAL_SUPPORTED) -void PNGAPI -png_set_pCAL(png_structp png_ptr, png_infop info_ptr, - png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, - png_charp units, png_charpp params) -{ - png_uint_32 length; - int i; - - png_debug1(1, "in %s storage function\n", "pCAL"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - length = png_strlen(purpose) + 1; - png_debug1(3, "allocating purpose for info (%lu bytes)\n", length); - info_ptr->pcal_purpose = (png_charp)png_malloc_warn(png_ptr, length); - if (info_ptr->pcal_purpose == NULL) - { - png_warning(png_ptr, "Insufficient memory for pCAL purpose."); - return; - } - png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length); - - png_debug(3, "storing X0, X1, type, and nparams in info\n"); - info_ptr->pcal_X0 = X0; - info_ptr->pcal_X1 = X1; - info_ptr->pcal_type = (png_byte)type; - info_ptr->pcal_nparams = (png_byte)nparams; - - length = png_strlen(units) + 1; - png_debug1(3, "allocating units for info (%lu bytes)\n", length); - info_ptr->pcal_units = (png_charp)png_malloc_warn(png_ptr, length); - if (info_ptr->pcal_units == NULL) - { - png_warning(png_ptr, "Insufficient memory for pCAL units."); - return; - } - png_memcpy(info_ptr->pcal_units, units, (png_size_t)length); - - info_ptr->pcal_params = (png_charpp)png_malloc_warn(png_ptr, - (png_uint_32)((nparams + 1) * sizeof(png_charp))); - if (info_ptr->pcal_params == NULL) - { - png_warning(png_ptr, "Insufficient memory for pCAL params."); - return; - } - - info_ptr->pcal_params[nparams] = NULL; - - for (i = 0; i < nparams; i++) - { - length = png_strlen(params[i]) + 1; - png_debug2(3,"allocating parameter %d for info (%lu bytes)\n", i, length); - info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length); - if (info_ptr->pcal_params[i] == NULL) - { - png_warning(png_ptr, "Insufficient memory for pCAL parameter."); - return; - } - png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length); - } - - info_ptr->valid |= PNG_INFO_pCAL; -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_PCAL; -#endif -} -#endif - -#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -void PNGAPI -png_set_sCAL(png_structp png_ptr, png_infop info_ptr, - int unit, double width, double height) -{ - png_debug1(1, "in %s storage function\n", "sCAL"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - info_ptr->scal_unit = (png_byte)unit; - info_ptr->scal_pixel_width = width; - info_ptr->scal_pixel_height = height; - - info_ptr->valid |= PNG_INFO_sCAL; -} -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -void PNGAPI -png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr, - int unit, png_charp swidth, png_charp sheight) -{ - png_uint_32 length; - - png_debug1(1, "in %s storage function\n", "sCAL"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - info_ptr->scal_unit = (png_byte)unit; - - length = png_strlen(swidth) + 1; - png_debug1(3, "allocating unit for info (%d bytes)\n", length); - info_ptr->scal_s_width = (png_charp)png_malloc(png_ptr, length); - png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length); - - length = png_strlen(sheight) + 1; - png_debug1(3, "allocating unit for info (%d bytes)\n", length); - info_ptr->scal_s_height = (png_charp)png_malloc(png_ptr, length); - png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length); - - info_ptr->valid |= PNG_INFO_sCAL; -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_SCAL; -#endif -} -#endif -#endif -#endif - -#if defined(PNG_pHYs_SUPPORTED) -void PNGAPI -png_set_pHYs(png_structp png_ptr, png_infop info_ptr, - png_uint_32 res_x, png_uint_32 res_y, int unit_type) -{ - png_debug1(1, "in %s storage function\n", "pHYs"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - info_ptr->x_pixels_per_unit = res_x; - info_ptr->y_pixels_per_unit = res_y; - info_ptr->phys_unit_type = (png_byte)unit_type; - info_ptr->valid |= PNG_INFO_pHYs; -} -#endif - -void PNGAPI -png_set_PLTE(png_structp png_ptr, png_infop info_ptr, - png_colorp palette, int num_palette) -{ - - png_debug1(1, "in %s storage function\n", "PLTE"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - /* - * It may not actually be necessary to set png_ptr->palette here; - * we do it for backward compatibility with the way the png_handle_tRNS - * function used to do the allocation. - */ -#ifdef PNG_FREE_ME_SUPPORTED - png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0); -#endif - /* Changed in libpng-1.2.1 to allocate 256 instead of num_palette entries, - in case of an invalid PNG file that has too-large sample values. */ - png_ptr->palette = (png_colorp)png_zalloc(png_ptr, (uInt)256, - sizeof (png_color)); - if (png_ptr->palette == NULL) - png_error(png_ptr, "Unable to malloc palette"); - png_memcpy(png_ptr->palette, palette, num_palette * sizeof (png_color)); - info_ptr->palette = png_ptr->palette; - info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette; - -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_PLTE; -#else - png_ptr->flags |= PNG_FLAG_FREE_PLTE; -#endif - - info_ptr->valid |= PNG_INFO_PLTE; -} - -#if defined(PNG_sBIT_SUPPORTED) -void PNGAPI -png_set_sBIT(png_structp png_ptr, png_infop info_ptr, - png_color_8p sig_bit) -{ - png_debug1(1, "in %s storage function\n", "sBIT"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - png_memcpy(&(info_ptr->sig_bit), sig_bit, sizeof (png_color_8)); - info_ptr->valid |= PNG_INFO_sBIT; -} -#endif - -#if defined(PNG_sRGB_SUPPORTED) -void PNGAPI -png_set_sRGB(png_structp png_ptr, png_infop info_ptr, int intent) -{ - png_debug1(1, "in %s storage function\n", "sRGB"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - info_ptr->srgb_intent = (png_byte)intent; - info_ptr->valid |= PNG_INFO_sRGB; -} - -void PNGAPI -png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr, - int intent) -{ -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED - float file_gamma; -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_fixed_point int_file_gamma; -#endif -#endif -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED - float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_fixed_point int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, - int_green_y, int_blue_x, int_blue_y; -#endif -#endif - png_debug1(1, "in %s storage function\n", "sRGB_gAMA_and_cHRM"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - png_set_sRGB(png_ptr, info_ptr, intent); - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED - file_gamma = (float).45455; - png_set_gAMA(png_ptr, info_ptr, file_gamma); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - int_file_gamma = 45455L; - png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma); -#endif -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FIXED_POINT_SUPPORTED - int_white_x = 31270L; - int_white_y = 32900L; - int_red_x = 64000L; - int_red_y = 33000L; - int_green_x = 30000L; - int_green_y = 60000L; - int_blue_x = 15000L; - int_blue_y = 6000L; - - png_set_cHRM_fixed(png_ptr, info_ptr, - int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, int_green_y, - int_blue_x, int_blue_y); -#endif -#ifdef PNG_FLOATING_POINT_SUPPORTED - white_x = (float).3127; - white_y = (float).3290; - red_x = (float).64; - red_y = (float).33; - green_x = (float).30; - green_y = (float).60; - blue_x = (float).15; - blue_y = (float).06; - - png_set_cHRM(png_ptr, info_ptr, - white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); -#endif -#endif -} -#endif - - -#if defined(PNG_iCCP_SUPPORTED) -void PNGAPI -png_set_iCCP(png_structp png_ptr, png_infop info_ptr, - png_charp name, int compression_type, - png_charp profile, png_uint_32 proflen) -{ - png_charp new_iccp_name; - png_charp new_iccp_profile; - - png_debug1(1, "in %s storage function\n", "iCCP"); - if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL) - return; - - new_iccp_name = (png_charp)png_malloc(png_ptr, png_strlen(name)+1); - png_strcpy(new_iccp_name, name); - new_iccp_profile = (png_charp)png_malloc(png_ptr, proflen); - png_memcpy(new_iccp_profile, profile, (png_size_t)proflen); - - png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0); - - info_ptr->iccp_proflen = proflen; - info_ptr->iccp_name = new_iccp_name; - info_ptr->iccp_profile = new_iccp_profile; - /* Compression is always zero but is here so the API and info structure - * does not have to change if we introduce multiple compression types */ - info_ptr->iccp_compression = (png_byte)compression_type; -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_ICCP; -#endif - info_ptr->valid |= PNG_INFO_iCCP; -} -#endif - -#if defined(PNG_TEXT_SUPPORTED) -void PNGAPI -png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, - int num_text) -{ - int ret; - ret=png_set_text_2(png_ptr, info_ptr, text_ptr, num_text); - if (ret) - png_error(png_ptr, "Insufficient memory to store text"); -} - -int /* PRIVATE */ -png_set_text_2(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, - int num_text) -{ - int i; - - png_debug1(1, "in %s storage function\n", (png_ptr->chunk_name[0] == '\0' ? - "text" : (png_const_charp)png_ptr->chunk_name)); - - if (png_ptr == NULL || info_ptr == NULL || num_text == 0) - return(0); - - /* Make sure we have enough space in the "text" array in info_struct - * to hold all of the incoming text_ptr objects. - */ - if (info_ptr->num_text + num_text > info_ptr->max_text) - { - if (info_ptr->text != NULL) - { - png_textp old_text; - int old_max; - - old_max = info_ptr->max_text; - info_ptr->max_text = info_ptr->num_text + num_text + 8; - old_text = info_ptr->text; - info_ptr->text = (png_textp)png_malloc_warn(png_ptr, - (png_uint_32)(info_ptr->max_text * sizeof (png_text))); - if (info_ptr->text == NULL) - { - png_free(png_ptr, old_text); - return(1); - } - png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max * - sizeof(png_text))); - png_free(png_ptr, old_text); - } - else - { - info_ptr->max_text = num_text + 8; - info_ptr->num_text = 0; - info_ptr->text = (png_textp)png_malloc_warn(png_ptr, - (png_uint_32)(info_ptr->max_text * sizeof (png_text))); - if (info_ptr->text == NULL) - return(1); -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_TEXT; -#endif - } - png_debug1(3, "allocated %d entries for info_ptr->text\n", - info_ptr->max_text); - } - for (i = 0; i < num_text; i++) - { - png_size_t text_length,key_len; - png_size_t lang_len,lang_key_len; - png_textp textp = &(info_ptr->text[info_ptr->num_text]); - - if (text_ptr[i].key == NULL) - continue; - - key_len = png_strlen(text_ptr[i].key); - - if(text_ptr[i].compression <= 0) - { - lang_len = 0; - lang_key_len = 0; - } - else -#ifdef PNG_iTXt_SUPPORTED - { - /* set iTXt data */ - if (text_ptr[i].lang != NULL) - lang_len = png_strlen(text_ptr[i].lang); - else - lang_len = 0; - if (text_ptr[i].lang_key != NULL) - lang_key_len = png_strlen(text_ptr[i].lang_key); - else - lang_key_len = 0; - } -#else - { - png_warning(png_ptr, "iTXt chunk not supported."); - continue; - } -#endif - - if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0') - { - text_length = 0; -#ifdef PNG_iTXt_SUPPORTED - if(text_ptr[i].compression > 0) - textp->compression = PNG_ITXT_COMPRESSION_NONE; - else -#endif - textp->compression = PNG_TEXT_COMPRESSION_NONE; - } - else - { - text_length = png_strlen(text_ptr[i].text); - textp->compression = text_ptr[i].compression; - } - - textp->key = (png_charp)png_malloc_warn(png_ptr, - (png_uint_32)(key_len + text_length + lang_len + lang_key_len + 4)); - if (textp->key == NULL) - return(1); - png_debug2(2, "Allocated %lu bytes at %x in png_set_text\n", - (png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4), - (int)textp->key); - - png_memcpy(textp->key, text_ptr[i].key, - (png_size_t)(key_len)); - *(textp->key+key_len) = '\0'; -#ifdef PNG_iTXt_SUPPORTED - if (text_ptr[i].compression > 0) - { - textp->lang=textp->key + key_len + 1; - png_memcpy(textp->lang, text_ptr[i].lang, lang_len); - *(textp->lang+lang_len) = '\0'; - textp->lang_key=textp->lang + lang_len + 1; - png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len); - *(textp->lang_key+lang_key_len) = '\0'; - textp->text=textp->lang_key + lang_key_len + 1; - } - else -#endif - { -#ifdef PNG_iTXt_SUPPORTED - textp->lang=NULL; - textp->lang_key=NULL; -#endif - textp->text=textp->key + key_len + 1; - } - if(text_length) - png_memcpy(textp->text, text_ptr[i].text, - (png_size_t)(text_length)); - *(textp->text+text_length) = '\0'; - -#ifdef PNG_iTXt_SUPPORTED - if(textp->compression > 0) - { - textp->text_length = 0; - textp->itxt_length = text_length; - } - else -#endif - { - textp->text_length = text_length; -#ifdef PNG_iTXt_SUPPORTED - textp->itxt_length = 0; -#endif - } - info_ptr->text[info_ptr->num_text]= *textp; - info_ptr->num_text++; - png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text); - } - return(0); -} -#endif - -#if defined(PNG_tIME_SUPPORTED) -void PNGAPI -png_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time) -{ - png_debug1(1, "in %s storage function\n", "tIME"); - if (png_ptr == NULL || info_ptr == NULL || - (png_ptr->mode & PNG_WROTE_tIME)) - return; - - png_memcpy(&(info_ptr->mod_time), mod_time, sizeof (png_time)); - info_ptr->valid |= PNG_INFO_tIME; -} -#endif - -#if defined(PNG_tRNS_SUPPORTED) -void PNGAPI -png_set_tRNS(png_structp png_ptr, png_infop info_ptr, - png_bytep trans, int num_trans, png_color_16p trans_values) -{ - png_debug1(1, "in %s storage function\n", "tRNS"); - if (png_ptr == NULL || info_ptr == NULL) - return; - - if (trans != NULL) - { - /* - * It may not actually be necessary to set png_ptr->trans here; - * we do it for backward compatibility with the way the png_handle_tRNS - * function used to do the allocation. - */ -#ifdef PNG_FREE_ME_SUPPORTED - png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0); -#endif - /* Changed from num_trans to 256 in version 1.2.1 */ - png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr, - (png_uint_32)256); - png_memcpy(info_ptr->trans, trans, (png_size_t)num_trans); -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_TRNS; -#else - png_ptr->flags |= PNG_FLAG_FREE_TRNS; -#endif - } - - if (trans_values != NULL) - { - png_memcpy(&(info_ptr->trans_values), trans_values, - sizeof(png_color_16)); - if (num_trans == 0) - num_trans = 1; - } - info_ptr->num_trans = (png_uint_16)num_trans; - info_ptr->valid |= PNG_INFO_tRNS; -} -#endif - -#if defined(PNG_sPLT_SUPPORTED) -void PNGAPI -png_set_sPLT(png_structp png_ptr, - png_infop info_ptr, png_sPLT_tp entries, int nentries) -{ - png_sPLT_tp np; - int i; - - np = (png_sPLT_tp)png_malloc_warn(png_ptr, - (info_ptr->splt_palettes_num + nentries) * sizeof(png_sPLT_t)); - if (np == NULL) - { - png_warning(png_ptr, "No memory for sPLT palettes."); - return; - } - - png_memcpy(np, info_ptr->splt_palettes, - info_ptr->splt_palettes_num * sizeof(png_sPLT_t)); - png_free(png_ptr, info_ptr->splt_palettes); - info_ptr->splt_palettes=NULL; - - for (i = 0; i < nentries; i++) - { - png_sPLT_tp to = np + info_ptr->splt_palettes_num + i; - png_sPLT_tp from = entries + i; - - to->name = (png_charp)png_malloc(png_ptr, - png_strlen(from->name) + 1); - png_strcpy(to->name, from->name); - to->entries = (png_sPLT_entryp)png_malloc(png_ptr, - from->nentries * sizeof(png_sPLT_t)); - png_memcpy(to->entries, from->entries, - from->nentries * sizeof(png_sPLT_t)); - to->nentries = from->nentries; - to->depth = from->depth; - } - - info_ptr->splt_palettes = np; - info_ptr->splt_palettes_num += nentries; - info_ptr->valid |= PNG_INFO_sPLT; -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_SPLT; -#endif -} -#endif /* PNG_sPLT_SUPPORTED */ - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -void PNGAPI -png_set_unknown_chunks(png_structp png_ptr, - png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns) -{ - png_unknown_chunkp np; - int i; - - if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0) - return; - - np = (png_unknown_chunkp)png_malloc_warn(png_ptr, - (info_ptr->unknown_chunks_num + num_unknowns) * - sizeof(png_unknown_chunk)); - if (np == NULL) - { - png_warning(png_ptr, "Out of memory while processing unknown chunk."); - return; - } - - png_memcpy(np, info_ptr->unknown_chunks, - info_ptr->unknown_chunks_num * sizeof(png_unknown_chunk)); - png_free(png_ptr, info_ptr->unknown_chunks); - info_ptr->unknown_chunks=NULL; - - for (i = 0; i < num_unknowns; i++) - { - png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i; - png_unknown_chunkp from = unknowns + i; - - png_strcpy((png_charp)to->name, (png_charp)from->name); - to->data = (png_bytep)png_malloc(png_ptr, from->size); - if (to->data == NULL) - png_warning(png_ptr,"Out of memory while processing unknown chunk."); - else - { - png_memcpy(to->data, from->data, from->size); - to->size = from->size; - - /* note our location in the read or write sequence */ - to->location = (png_byte)(png_ptr->mode & 0xff); - } - } - - info_ptr->unknown_chunks = np; - info_ptr->unknown_chunks_num += num_unknowns; -#ifdef PNG_FREE_ME_SUPPORTED - info_ptr->free_me |= PNG_FREE_UNKN; -#endif -} -void PNGAPI -png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, - int chunk, int location) -{ - if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < - (int)info_ptr->unknown_chunks_num) - info_ptr->unknown_chunks[chunk].location = (png_byte)location; -} -#endif - -#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -void PNGAPI -png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted) -{ - /* This function is deprecated in favor of png_permit_mng_features() - and will be removed from libpng-2.0.0 */ - png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n"); - if (png_ptr == NULL) - return; - png_ptr->mng_features_permitted = (png_byte) - ((png_ptr->mng_features_permitted & (~(PNG_FLAG_MNG_EMPTY_PLTE))) | - ((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE))); -} -#endif - -#if defined(PNG_MNG_FEATURES_SUPPORTED) -png_uint_32 PNGAPI -png_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features) -{ - png_debug(1, "in png_permit_mng_features\n"); - if (png_ptr == NULL) - return (png_uint_32)0; - png_ptr->mng_features_permitted = - (png_byte)(mng_features & PNG_ALL_MNG_FEATURES); - return (png_uint_32)png_ptr->mng_features_permitted; -} -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -void PNGAPI -png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep - chunk_list, int num_chunks) -{ - png_bytep new_list, p; - int i, old_num_chunks; - if (num_chunks == 0) - { - if(keep == HANDLE_CHUNK_ALWAYS || keep == HANDLE_CHUNK_IF_SAFE) - png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS; - else - png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS; - - if(keep == HANDLE_CHUNK_ALWAYS) - png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS; - else - png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS; - return; - } - if (chunk_list == NULL) - return; - old_num_chunks=png_ptr->num_chunk_list; - new_list=(png_bytep)png_malloc(png_ptr, - (png_uint_32)(5*(num_chunks+old_num_chunks))); - if(png_ptr->chunk_list != NULL) - { - png_memcpy(new_list, png_ptr->chunk_list, - (png_size_t)(5*old_num_chunks)); - png_free(png_ptr, png_ptr->chunk_list); - png_ptr->chunk_list=NULL; - } - png_memcpy(new_list+5*old_num_chunks, chunk_list, - (png_size_t)(5*num_chunks)); - for (p=new_list+5*old_num_chunks+4, i=0; inum_chunk_list=old_num_chunks+num_chunks; - png_ptr->chunk_list=new_list; -#ifdef PNG_FREE_ME_SUPPORTED - png_ptr->free_me |= PNG_FREE_LIST; -#endif -} -#endif - -#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) -void PNGAPI -png_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr, - png_user_chunk_ptr read_user_chunk_fn) -{ - png_debug(1, "in png_set_read_user_chunk_fn\n"); - png_ptr->read_user_chunk_fn = read_user_chunk_fn; - png_ptr->user_chunk_ptr = user_chunk_ptr; -} -#endif - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -void PNGAPI -png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers) -{ - png_debug1(1, "in %s storage function\n", "rows"); - - if (png_ptr == NULL || info_ptr == NULL) - return; - - if(info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers)) - png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); - info_ptr->row_pointers = row_pointers; - if(row_pointers) - info_ptr->valid |= PNG_INFO_IDAT; -} -#endif - -void PNGAPI -png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) -{ - if(png_ptr->zbuf) - png_free(png_ptr, png_ptr->zbuf); - png_ptr->zbuf_size = (png_size_t)size; - png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); - png_ptr->zstream.next_out = png_ptr->zbuf; - png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; -} - -void PNGAPI -png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask) -{ - if (png_ptr && info_ptr) - info_ptr->valid &= ~(mask); -} - - -#ifndef PNG_1_0_X -#ifdef PNG_ASSEMBLER_CODE_SUPPORTED -/* this function was added to libpng 1.2.0 and should always exist by default */ -void PNGAPI -png_set_asm_flags (png_structp png_ptr, png_uint_32 asm_flags) -{ - png_uint_32 settable_asm_flags; - png_uint_32 settable_mmx_flags; - - settable_mmx_flags = -#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW - PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | -#endif -#ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE - PNG_ASM_FLAG_MMX_READ_INTERLACE | -#endif -#ifdef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW - PNG_ASM_FLAG_MMX_READ_FILTER_SUB | - PNG_ASM_FLAG_MMX_READ_FILTER_UP | - PNG_ASM_FLAG_MMX_READ_FILTER_AVG | - PNG_ASM_FLAG_MMX_READ_FILTER_PAETH | -#endif - 0; - - /* could be some non-MMX ones in the future, but not currently: */ - settable_asm_flags = settable_mmx_flags; - - if (!(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_COMPILED) || - !(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU)) - { - /* clear all MMX flags if MMX isn't supported */ - settable_asm_flags &= ~settable_mmx_flags; - png_ptr->asm_flags &= ~settable_mmx_flags; - } - - /* we're replacing the settable bits with those passed in by the user, - * so first zero them out of the master copy, then logical-OR in the - * allowed subset that was requested */ - - png_ptr->asm_flags &= ~settable_asm_flags; /* zero them */ - png_ptr->asm_flags |= (asm_flags & settable_asm_flags); /* set them */ -} -#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ - -#ifdef PNG_ASSEMBLER_CODE_SUPPORTED -/* this function was added to libpng 1.2.0 */ -void PNGAPI -png_set_mmx_thresholds (png_structp png_ptr, - png_byte mmx_bitdepth_threshold, - png_uint_32 mmx_rowbytes_threshold) -{ - png_ptr->mmx_bitdepth_threshold = mmx_bitdepth_threshold; - png_ptr->mmx_rowbytes_threshold = mmx_rowbytes_threshold; -} -#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ -#endif /* ?PNG_1_0_X */ diff --git a/src/libs/pdflib/libs/png/pngtrans.c b/src/libs/pdflib/libs/png/pngtrans.c deleted file mode 100644 index b07c632a95..0000000000 --- a/src/libs/pdflib/libs/png/pngtrans.c +++ /dev/null @@ -1,641 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: pngtrans.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* pngtrans.c - transforms the data in a row (used by both readers and writers) - * - * libpng 1.2.5 - October 3, 2002 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2002 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - */ - -#define PNG_INTERNAL -#include "png.h" - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* turn on BGR-to-RGB mapping */ -void PNGAPI -png_set_bgr(png_structp png_ptr) -{ - png_debug(1, "in png_set_bgr\n"); - png_ptr->transformations |= PNG_BGR; -} -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* turn on 16 bit byte swapping */ -void PNGAPI -png_set_swap(png_structp png_ptr) -{ - png_debug(1, "in png_set_swap\n"); - if (png_ptr->bit_depth == 16) - png_ptr->transformations |= PNG_SWAP_BYTES; -} -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) -/* turn on pixel packing */ -void PNGAPI -png_set_packing(png_structp png_ptr) -{ - png_debug(1, "in png_set_packing\n"); - if (png_ptr->bit_depth < 8) - { - png_ptr->transformations |= PNG_PACK; - png_ptr->usr_bit_depth = 8; - } -} -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) -/* turn on packed pixel swapping */ -void PNGAPI -png_set_packswap(png_structp png_ptr) -{ - png_debug(1, "in png_set_packswap\n"); - if (png_ptr->bit_depth < 8) - png_ptr->transformations |= PNG_PACKSWAP; -} -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -void PNGAPI -png_set_shift(png_structp png_ptr, png_color_8p true_bits) -{ - png_debug(1, "in png_set_shift\n"); - png_ptr->transformations |= PNG_SHIFT; - png_ptr->shift = *true_bits; -} -#endif - -#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ - defined(PNG_WRITE_INTERLACING_SUPPORTED) -int PNGAPI -png_set_interlace_handling(png_structp png_ptr) -{ - png_debug(1, "in png_set_interlace handling\n"); - if (png_ptr->interlaced) - { - png_ptr->transformations |= PNG_INTERLACE; - return (7); - } - - return (1); -} -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -/* Add a filler byte on read, or remove a filler or alpha byte on write. - * The filler type has changed in v0.95 to allow future 2-byte fillers - * for 48-bit input data, as well as to avoid problems with some compilers - * that don't like bytes as parameters. - */ -void PNGAPI -png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc) -{ - png_debug(1, "in png_set_filler\n"); - png_ptr->transformations |= PNG_FILLER; - png_ptr->filler = (png_byte)filler; - if (filler_loc == PNG_FILLER_AFTER) - png_ptr->flags |= PNG_FLAG_FILLER_AFTER; - else - png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER; - - /* This should probably go in the "do_filler" routine. - * I attempted to do that in libpng-1.0.1a but that caused problems - * so I restored it in libpng-1.0.2a - */ - - if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) - { - png_ptr->usr_channels = 4; - } - - /* Also I added this in libpng-1.0.2a (what happens when we expand - * a less-than-8-bit grayscale to GA? */ - - if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8) - { - png_ptr->usr_channels = 2; - } -} -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -void PNGAPI -png_set_swap_alpha(png_structp png_ptr) -{ - png_debug(1, "in png_set_swap_alpha\n"); - png_ptr->transformations |= PNG_SWAP_ALPHA; -} -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -void PNGAPI -png_set_invert_alpha(png_structp png_ptr) -{ - png_debug(1, "in png_set_invert_alpha\n"); - png_ptr->transformations |= PNG_INVERT_ALPHA; -} -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -void PNGAPI -png_set_invert_mono(png_structp png_ptr) -{ - png_debug(1, "in png_set_invert_mono\n"); - png_ptr->transformations |= PNG_INVERT_MONO; -} - -/* invert monochrome grayscale data */ -void /* PRIVATE */ -png_do_invert(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_invert\n"); - /* This test removed from libpng version 1.0.13 and 1.2.0: - * if (row_info->bit_depth == 1 && - */ -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row == NULL || row_info == NULL) - return; -#endif - if (row_info->color_type == PNG_COLOR_TYPE_GRAY) - { - png_bytep rp = row; - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - - for (i = 0; i < istop; i++) - { - *rp = (png_byte)(~(*rp)); - rp++; - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && - row_info->bit_depth == 8) - { - png_bytep rp = row; - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - - for (i = 0; i < istop; i+=2) - { - *rp = (png_byte)(~(*rp)); - rp+=2; - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && - row_info->bit_depth == 16) - { - png_bytep rp = row; - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - - for (i = 0; i < istop; i+=4) - { - *rp = (png_byte)(~(*rp)); - *(rp+1) = (png_byte)(~(*(rp+1))); - rp+=4; - } - } -} -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* swaps byte order on 16 bit depth images */ -void /* PRIVATE */ -png_do_swap(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_swap\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - row_info->bit_depth == 16) - { - png_bytep rp = row; - png_uint_32 i; - png_uint_32 istop= row_info->width * row_info->channels; - - for (i = 0; i < istop; i++, rp += 2) - { - png_byte t = *rp; - *rp = *(rp + 1); - *(rp + 1) = t; - } - } -} -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) -static png_byte onebppswaptable[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 -}; - -static png_byte twobppswaptable[256] = { - 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0, - 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0, - 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4, - 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4, - 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8, - 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, - 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC, - 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC, - 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1, - 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1, - 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5, - 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5, - 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9, - 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9, - 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD, - 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD, - 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2, - 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2, - 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6, - 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6, - 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA, - 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA, - 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE, - 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE, - 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3, - 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3, - 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7, - 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7, - 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB, - 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, - 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF, - 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF -}; - -static png_byte fourbppswaptable[256] = { - 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, - 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, - 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, - 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, - 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, - 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, - 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, - 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, - 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, - 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, - 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, - 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, - 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, - 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, - 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, - 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, - 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, - 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, - 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, - 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, - 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, - 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, - 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, - 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, - 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, - 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, - 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, - 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, - 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, - 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, - 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, - 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF -}; - -/* swaps pixel packing order within bytes */ -void /* PRIVATE */ -png_do_packswap(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_packswap\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - row_info->bit_depth < 8) - { - png_bytep rp, end, table; - - end = row + row_info->rowbytes; - - if (row_info->bit_depth == 1) - table = onebppswaptable; - else if (row_info->bit_depth == 2) - table = twobppswaptable; - else if (row_info->bit_depth == 4) - table = fourbppswaptable; - else - return; - - for (rp = row; rp < end; rp++) - *rp = table[*rp]; - } -} -#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */ - -#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ - defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -/* remove filler or alpha byte(s) */ -void /* PRIVATE */ -png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags) -{ - png_debug(1, "in png_do_strip_filler\n"); -#if defined(PNG_USELESS_TESTS_SUPPORTED) - if (row != NULL && row_info != NULL) -#endif - { -/* - if (row_info->color_type == PNG_COLOR_TYPE_RGB || - row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) -*/ - png_bytep sp=row; - png_bytep dp=row; - png_uint_32 row_width=row_info->width; - png_uint_32 i; - - if (row_info->channels == 4) - { - if (row_info->bit_depth == 8) - { - /* This converts from RGBX or RGBA to RGB */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - dp+=3; sp+=4; - for (i = 1; i < row_width; i++) - { - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - sp++; - } - } - /* This converts from XRGB or ARGB to RGB */ - else - { - for (i = 0; i < row_width; i++) - { - sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - } - } - row_info->pixel_depth = 24; - row_info->rowbytes = row_width * 3; - } - else /* if (row_info->bit_depth == 16) */ - { - if (flags & PNG_FLAG_FILLER_AFTER) - { - /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */ - sp += 8; dp += 6; - for (i = 1; i < row_width; i++) - { - /* This could be (although png_memcpy is probably slower): - png_memcpy(dp, sp, 6); - sp += 8; - dp += 6; - */ - - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - sp += 2; - } - } - else - { - /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */ - for (i = 0; i < row_width; i++) - { - /* This could be (although png_memcpy is probably slower): - png_memcpy(dp, sp, 6); - sp += 8; - dp += 6; - */ - - sp+=2; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - *dp++ = *sp++; - } - } - row_info->pixel_depth = 48; - row_info->rowbytes = row_width * 6; - } - row_info->channels = 3; - row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; - } -/* - else if (row_info->color_type == PNG_COLOR_TYPE_GRAY || - row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) -*/ - else if (row_info->channels == 2) - { - if (row_info->bit_depth == 8) - { - /* This converts from GX or GA to G */ - if (flags & PNG_FLAG_FILLER_AFTER) - { - for (i = 0; i < row_width; i++) - { - *dp++ = *sp++; - sp++; - } - } - /* This converts from XG or AG to G */ - else - { - for (i = 0; i < row_width; i++) - { - sp++; - *dp++ = *sp++; - } - } - row_info->pixel_depth = 8; - row_info->rowbytes = row_width; - } - else /* if (row_info->bit_depth == 16) */ - { - if (flags & PNG_FLAG_FILLER_AFTER) - { - /* This converts from GGXX or GGAA to GG */ - sp += 4; dp += 2; - for (i = 1; i < row_width; i++) - { - *dp++ = *sp++; - *dp++ = *sp++; - sp += 2; - } - } - else - { - /* This converts from XXGG or AAGG to GG */ - for (i = 0; i < row_width; i++) - { - sp += 2; - *dp++ = *sp++; - *dp++ = *sp++; - } - } - row_info->pixel_depth = 16; - row_info->rowbytes = row_width * 2; - } - row_info->channels = 1; - row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; - } - } -} -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* swaps red and blue bytes within a pixel */ -void /* PRIVATE */ -png_do_bgr(png_row_infop row_info, png_bytep row) -{ - png_debug(1, "in png_do_bgr\n"); - if ( -#if defined(PNG_USELESS_TESTS_SUPPORTED) - row != NULL && row_info != NULL && -#endif - (row_info->color_type & PNG_COLOR_MASK_COLOR)) - { - png_uint_32 row_width = row_info->width; - if (row_info->bit_depth == 8) - { - if (row_info->color_type == PNG_COLOR_TYPE_RGB) - { - png_bytep rp; - png_uint_32 i; - - for (i = 0, rp = row; i < row_width; i++, rp += 3) - { - png_byte save = *rp; - *rp = *(rp + 2); - *(rp + 2) = save; - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - { - png_bytep rp; - png_uint_32 i; - - for (i = 0, rp = row; i < row_width; i++, rp += 4) - { - png_byte save = *rp; - *rp = *(rp + 2); - *(rp + 2) = save; - } - } - } - else if (row_info->bit_depth == 16) - { - if (row_info->color_type == PNG_COLOR_TYPE_RGB) - { - png_bytep rp; - png_uint_32 i; - - for (i = 0, rp = row; i < row_width; i++, rp += 6) - { - png_byte save = *rp; - *rp = *(rp + 4); - *(rp + 4) = save; - save = *(rp + 1); - *(rp + 1) = *(rp + 5); - *(rp + 5) = save; - } - } - else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - { - png_bytep rp; - png_uint_32 i; - - for (i = 0, rp = row; i < row_width; i++, rp += 8) - { - png_byte save = *rp; - *rp = *(rp + 4); - *(rp + 4) = save; - save = *(rp + 1); - *(rp + 1) = *(rp + 5); - *(rp + 5) = save; - } - } - } - } -} -#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -void PNGAPI -png_set_user_transform_info(png_structp png_ptr, png_voidp - user_transform_ptr, int user_transform_depth, int user_transform_channels) -{ - png_debug(1, "in png_set_user_transform_info\n"); -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) - png_ptr->user_transform_ptr = user_transform_ptr; - png_ptr->user_transform_depth = (png_byte)user_transform_depth; - png_ptr->user_transform_channels = (png_byte)user_transform_channels; -#else - if(user_transform_ptr || user_transform_depth || user_transform_channels) - png_warning(png_ptr, - "This version of libpng does not support user transform info"); -#endif -} -#endif - -/* This function returns a pointer to the user_transform_ptr associated with - * the user transform functions. The application should free any memory - * associated with this pointer before png_write_destroy and png_read_destroy - * are called. - */ -png_voidp PNGAPI -png_get_user_transform_ptr(png_structp png_ptr) -{ -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) - return ((png_voidp)png_ptr->user_transform_ptr); -#else - if(png_ptr) - return (NULL); - return (NULL); -#endif -} diff --git a/src/libs/pdflib/libs/png/pngvcrd.c b/src/libs/pdflib/libs/png/pngvcrd.c deleted file mode 100644 index 5fc37de551..0000000000 --- a/src/libs/pdflib/libs/png/pngvcrd.c +++ /dev/null @@ -1,3856 +0,0 @@ -/* pngvcrd.c - mixed C/assembler version of utilities to read a PNG file - * - * For Intel x86 CPU and Microsoft Visual C++ compiler - * - * libpng 1.0.8 - July 24, 2000 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson - * Copyright (c) 1998, Intel Corporation - * - * Contributed by Nirav Chhatrapati, Intel Corporation, 1998 - * Interface to libpng contributed by Gilles Vollant, 1999 - * - */ - -/* $Id: pngvcrd.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#define PNG_INTERNAL -#include "png.h" - -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD) - -/* - One of these might need to be defined. -#define DISABLE_PNGVCRD_COMBINE -#define DISABLE_PNGVCRD_INTERLACE -*/ - -static int mmx_supported=2; - -void /* PRIVATE */ -png_read_filter_row_c(png_structp png_ptr, png_row_infop row_info, - png_bytep row, png_bytep prev_row, int filter); - -static int mmxsupport() -{ - int mmx_supported_local = 0; - _asm { - push ebx //CPUID will trash these - push ecx - push edx - pushfd //Save Eflag to stack - pop eax //Get Eflag from stack into eax - mov ecx, eax //Make another copy of Eflag in ecx - xor eax, 0x200000 //Toggle ID bit in Eflag [i.e. bit(21)] - push eax //Save modified Eflag back to stack - - popfd //Restored modified value back to Eflag reg - pushfd //Save Eflag to stack - pop eax //Get Eflag from stack - xor eax, ecx //Compare the new Eflag with the original Eflag - jz NOT_SUPPORTED //If the same, CPUID instruction is not supported, - //skip following instructions and jump to - //NOT_SUPPORTED label - - xor eax, eax //Set eax to zero - - _asm _emit 0x0f //CPUID instruction (two bytes opcode) - _asm _emit 0xa2 - - cmp eax, 1 //make sure eax return non-zero value - jl NOT_SUPPORTED //If eax is zero, mmx not supported - - xor eax, eax //set eax to zero - inc eax //Now increment eax to 1. This instruction is - //faster than the instruction "mov eax, 1" - - _asm _emit 0x0f //CPUID instruction - _asm _emit 0xa2 - - and edx, 0x00800000 //mask out all bits but mmx bit(24) - cmp edx, 0 // 0 = mmx not supported - jz NOT_SUPPORTED // non-zero = Yes, mmx IS supported - - mov mmx_supported_local, 1 //set return value to 1 - -NOT_SUPPORTED: - mov eax, mmx_supported_local //move return value to eax - pop edx //CPUID trashed these - pop ecx - pop ebx - } - - //mmx_supported_local=0; // test code for force don't support MMX - //printf("MMX : %u (1=MMX supported)\n",mmx_supported_local); - - return mmx_supported_local; -} - -/* Combines the row recently read in with the previous row. - This routine takes care of alpha and transparency if requested. - This routine also handles the two methods of progressive display - of interlaced images, depending on the mask value. - The mask value describes which pixels are to be combined with - the row. The pattern always repeats every 8 pixels, so just 8 - bits are needed. A one indicates the pixel is to be combined; a - zero indicates the pixel is to be skipped. This is in addition - to any alpha or transparency value associated with the pixel. If - you want all pixels to be combined, pass 0xff (255) in mask. */ - -/* Use this routine for x86 platform - uses faster MMX routine if machine - supports MMX */ - -void /* PRIVATE */ -png_combine_row(png_structp png_ptr, png_bytep row, int mask) -{ -#ifdef PNG_USE_LOCAL_ARRAYS - const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; -#endif -#ifdef DISABLE_PNGVCRD_COMBINE - int save_mmx_supported = mmx_supported; -#endif - - png_debug(1,"in png_combine_row_asm\n"); - -#ifdef DISABLE_PNGVCRD_COMBINE - if ((png_ptr->transformations & PNG_INTERLACE) && png_ptr->pass != 6) - mmx_supported = 0; - else -#endif - if (mmx_supported == 2) - mmx_supported = mmxsupport(); - - if (mask == 0xff) - { - png_memcpy(row, png_ptr->row_buf + 1, - (png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3)); - } - /* GRR: add "else if (mask == 0)" case? - * or does png_combine_row() not even get called in that case? */ - else - { - switch (png_ptr->row_info.pixel_depth) - { - case 1: - { - png_bytep sp; - png_bytep dp; - int s_inc, s_start, s_end; - int m; - int shift; - png_uint_32 i; - - sp = png_ptr->row_buf + 1; - dp = row; - m = 0x80; -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 7; - s_inc = 1; - } - else -#endif - { - s_start = 7; - s_end = 0; - s_inc = -1; - } - - shift = s_start; - - for (i = 0; i < png_ptr->width; i++) - { - if (m & mask) - { - int value; - - value = (*sp >> shift) & 0x1; - *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - - case 2: - { - png_bytep sp; - png_bytep dp; - int s_start, s_end, s_inc; - int m; - int shift; - png_uint_32 i; - int value; - - sp = png_ptr->row_buf + 1; - dp = row; - m = 0x80; -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 6; - s_inc = 2; - } - else -#endif - { - s_start = 6; - s_end = 0; - s_inc = -2; - } - - shift = s_start; - - for (i = 0; i < png_ptr->width; i++) - { - if (m & mask) - { - value = (*sp >> shift) & 0x3; - *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - - case 4: - { - png_bytep sp; - png_bytep dp; - int s_start, s_end, s_inc; - int m; - int shift; - png_uint_32 i; - int value; - - sp = png_ptr->row_buf + 1; - dp = row; - m = 0x80; -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (png_ptr->transformations & PNG_PACKSWAP) - { - s_start = 0; - s_end = 4; - s_inc = 4; - } - else -#endif - { - s_start = 4; - s_end = 0; - s_inc = -4; - } - shift = s_start; - - for (i = 0; i < png_ptr->width; i++) - { - if (m & mask) - { - value = (*sp >> shift) & 0xf; - *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); - *dp |= (png_byte)(value << shift); - } - - if (shift == s_end) - { - shift = s_start; - sp++; - dp++; - } - else - shift += s_inc; - if (m == 1) - m = 0x80; - else - m >>= 1; - } - break; - } - - case 8: - { - png_bytep srcptr; - png_bytep dstptr; - png_uint_32 len; - int m; - int diff, unmask; - - __int64 mask0=0x0102040810204080; - - if (mmx_supported) - { - srcptr = png_ptr->row_buf + 1; - dstptr = row; - m = 0x80; - unmask = ~mask; - len = png_ptr->width &~7; //reduce to multiple of 8 - diff = png_ptr->width & 7; //amount lost - - _asm - { - movd mm7, unmask //load bit pattern - psubb mm6,mm6 //zero mm6 - punpcklbw mm7,mm7 - punpcklwd mm7,mm7 - punpckldq mm7,mm7 //fill register with 8 masks - - movq mm0,mask0 - - pand mm0,mm7 //nonzero if keep byte - pcmpeqb mm0,mm6 //zeros->1s, v versa - - mov ecx,len //load length of line (pixels) - mov esi,srcptr //load source - mov ebx,dstptr //load dest - cmp ecx,0 //lcr - je mainloop8end - -mainloop8: - movq mm4,[esi] - pand mm4,mm0 - movq mm6,mm0 - pandn mm6,[ebx] - por mm4,mm6 - movq [ebx],mm4 - - add esi,8 //inc by 8 bytes processed - add ebx,8 - sub ecx,8 //dec by 8 pixels processed - - ja mainloop8 -mainloop8end: - - mov ecx,diff - cmp ecx,0 - jz end8 - - mov edx,mask - sal edx,24 //make low byte the high byte - -secondloop8: - sal edx,1 //move high bit to CF - jnc skip8 //if CF = 0 - mov al,[esi] - mov [ebx],al -skip8: - inc esi - inc ebx - - dec ecx - jnz secondloop8 -end8: - emms - } - } - else /* mmx not supported - use modified C routine */ - { - register unsigned int incr1, initial_val, final_val; - png_size_t pixel_bytes; - png_uint_32 i; - register int disp = png_pass_inc[png_ptr->pass]; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - srcptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dstptr = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dstptr, srcptr, pixel_bytes); - srcptr += incr1; - dstptr += incr1; - } - } /* end of else */ - - break; - } // end 8 bpp - - case 16: - { - png_bytep srcptr; - png_bytep dstptr; - png_uint_32 len; - int unmask, diff; - __int64 mask1=0x0101020204040808, - mask0=0x1010202040408080; - - if (mmx_supported) - { - srcptr = png_ptr->row_buf + 1; - dstptr = row; - - unmask = ~mask; - len = (png_ptr->width)&~7; - diff = (png_ptr->width)&7; - _asm - { - movd mm7, unmask //load bit pattern - psubb mm6,mm6 //zero mm6 - punpcklbw mm7,mm7 - punpcklwd mm7,mm7 - punpckldq mm7,mm7 //fill register with 8 masks - - movq mm0,mask0 - movq mm1,mask1 - - pand mm0,mm7 - pand mm1,mm7 - - pcmpeqb mm0,mm6 - pcmpeqb mm1,mm6 - - mov ecx,len //load length of line - mov esi,srcptr //load source - mov ebx,dstptr //load dest - cmp ecx,0 //lcr - jz mainloop16end - -mainloop16: - movq mm4,[esi] - pand mm4,mm0 - movq mm6,mm0 - movq mm7,[ebx] - pandn mm6,mm7 - por mm4,mm6 - movq [ebx],mm4 - - movq mm5,[esi+8] - pand mm5,mm1 - movq mm7,mm1 - movq mm6,[ebx+8] - pandn mm7,mm6 - por mm5,mm7 - movq [ebx+8],mm5 - - add esi,16 //inc by 16 bytes processed - add ebx,16 - sub ecx,8 //dec by 8 pixels processed - - ja mainloop16 - -mainloop16end: - mov ecx,diff - cmp ecx,0 - jz end16 - - mov edx,mask - sal edx,24 //make low byte the high byte -secondloop16: - sal edx,1 //move high bit to CF - jnc skip16 //if CF = 0 - mov ax,[esi] - mov [ebx],ax -skip16: - add esi,2 - add ebx,2 - - dec ecx - jnz secondloop16 -end16: - emms - } - } - else /* mmx not supported - use modified C routine */ - { - register unsigned int incr1, initial_val, final_val; - png_size_t pixel_bytes; - png_uint_32 i; - register int disp = png_pass_inc[png_ptr->pass]; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - srcptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dstptr = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dstptr, srcptr, pixel_bytes); - srcptr += incr1; - dstptr += incr1; - } - } /* end of else */ - - break; - } // end 16 bpp - - case 24: - { - png_bytep srcptr; - png_bytep dstptr; - png_uint_32 len; - int unmask, diff; - - __int64 mask2=0x0101010202020404, //24bpp - mask1=0x0408080810101020, - mask0=0x2020404040808080; - - srcptr = png_ptr->row_buf + 1; - dstptr = row; - - unmask = ~mask; - len = (png_ptr->width)&~7; - diff = (png_ptr->width)&7; - - if (mmx_supported) - { - _asm - { - movd mm7, unmask //load bit pattern - psubb mm6,mm6 //zero mm6 - punpcklbw mm7,mm7 - punpcklwd mm7,mm7 - punpckldq mm7,mm7 //fill register with 8 masks - - movq mm0,mask0 - movq mm1,mask1 - movq mm2,mask2 - - pand mm0,mm7 - pand mm1,mm7 - pand mm2,mm7 - - pcmpeqb mm0,mm6 - pcmpeqb mm1,mm6 - pcmpeqb mm2,mm6 - - mov ecx,len //load length of line - mov esi,srcptr //load source - mov ebx,dstptr //load dest - cmp ecx,0 - jz mainloop24end - -mainloop24: - movq mm4,[esi] - pand mm4,mm0 - movq mm6,mm0 - movq mm7,[ebx] - pandn mm6,mm7 - por mm4,mm6 - movq [ebx],mm4 - - - movq mm5,[esi+8] - pand mm5,mm1 - movq mm7,mm1 - movq mm6,[ebx+8] - pandn mm7,mm6 - por mm5,mm7 - movq [ebx+8],mm5 - - movq mm6,[esi+16] - pand mm6,mm2 - movq mm4,mm2 - movq mm7,[ebx+16] - pandn mm4,mm7 - por mm6,mm4 - movq [ebx+16],mm6 - - add esi,24 //inc by 24 bytes processed - add ebx,24 - sub ecx,8 //dec by 8 pixels processed - - ja mainloop24 - -mainloop24end: - mov ecx,diff - cmp ecx,0 - jz end24 - - mov edx,mask - sal edx,24 //make low byte the high byte -secondloop24: - sal edx,1 //move high bit to CF - jnc skip24 //if CF = 0 - mov ax,[esi] - mov [ebx],ax - xor eax,eax - mov al,[esi+2] - mov [ebx+2],al -skip24: - add esi,3 - add ebx,3 - - dec ecx - jnz secondloop24 - -end24: - emms - } - } - else /* mmx not supported - use modified C routine */ - { - register unsigned int incr1, initial_val, final_val; - png_size_t pixel_bytes; - png_uint_32 i; - register int disp = png_pass_inc[png_ptr->pass]; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - srcptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dstptr = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dstptr, srcptr, pixel_bytes); - srcptr += incr1; - dstptr += incr1; - } - } /* end of else */ - - break; - } // end 24 bpp - - case 32: - { - png_bytep srcptr; - png_bytep dstptr; - png_uint_32 len; - int unmask, diff; - - __int64 mask3=0x0101010102020202, //32bpp - mask2=0x0404040408080808, - mask1=0x1010101020202020, - mask0=0x4040404080808080; - - srcptr = png_ptr->row_buf + 1; - dstptr = row; - - unmask = ~mask; - len = (png_ptr->width)&~7; - diff = (png_ptr->width)&7; - - if (mmx_supported) - { - _asm - { - movd mm7, unmask //load bit pattern - psubb mm6,mm6 //zero mm6 - punpcklbw mm7,mm7 - punpcklwd mm7,mm7 - punpckldq mm7,mm7 //fill register with 8 masks - - movq mm0,mask0 - movq mm1,mask1 - movq mm2,mask2 - movq mm3,mask3 - - pand mm0,mm7 - pand mm1,mm7 - pand mm2,mm7 - pand mm3,mm7 - - pcmpeqb mm0,mm6 - pcmpeqb mm1,mm6 - pcmpeqb mm2,mm6 - pcmpeqb mm3,mm6 - - mov ecx,len //load length of line - mov esi,srcptr //load source - mov ebx,dstptr //load dest - - cmp ecx,0 //lcr - jz mainloop32end - -mainloop32: - movq mm4,[esi] - pand mm4,mm0 - movq mm6,mm0 - movq mm7,[ebx] - pandn mm6,mm7 - por mm4,mm6 - movq [ebx],mm4 - - movq mm5,[esi+8] - pand mm5,mm1 - movq mm7,mm1 - movq mm6,[ebx+8] - pandn mm7,mm6 - por mm5,mm7 - movq [ebx+8],mm5 - - movq mm6,[esi+16] - pand mm6,mm2 - movq mm4,mm2 - movq mm7,[ebx+16] - pandn mm4,mm7 - por mm6,mm4 - movq [ebx+16],mm6 - - movq mm7,[esi+24] - pand mm7,mm3 - movq mm5,mm3 - movq mm4,[ebx+24] - pandn mm5,mm4 - por mm7,mm5 - movq [ebx+24],mm7 - - add esi,32 //inc by 32 bytes processed - add ebx,32 - sub ecx,8 //dec by 8 pixels processed - - ja mainloop32 - -mainloop32end: - mov ecx,diff - cmp ecx,0 - jz end32 - - mov edx,mask - sal edx,24 //make low byte the high byte -secondloop32: - sal edx,1 //move high bit to CF - jnc skip32 //if CF = 0 - mov eax,[esi] - mov [ebx],eax -skip32: - add esi,4 - add ebx,4 - - dec ecx - jnz secondloop32 - -end32: - emms - } - } - else /* mmx _not supported - Use modified C routine */ - { - register unsigned int incr1, initial_val, final_val; - png_size_t pixel_bytes; - png_uint_32 i; - register int disp = png_pass_inc[png_ptr->pass]; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - srcptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dstptr = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dstptr, srcptr, pixel_bytes); - srcptr += incr1; - dstptr += incr1; - } - } /* end of else */ - - break; - } // end 32 bpp - - case 48: - { - png_bytep srcptr; - png_bytep dstptr; - png_uint_32 len; - int unmask, diff; - - __int64 mask5=0x0101010101010202, - mask4=0x0202020204040404, - mask3=0x0404080808080808, - mask2=0x1010101010102020, - mask1=0x2020202040404040, - mask0=0x4040808080808080; - - if (mmx_supported) - { - srcptr = png_ptr->row_buf + 1; - dstptr = row; - - unmask = ~mask; - len = (png_ptr->width)&~7; - diff = (png_ptr->width)&7; - _asm - { - movd mm7, unmask //load bit pattern - psubb mm6,mm6 //zero mm6 - punpcklbw mm7,mm7 - punpcklwd mm7,mm7 - punpckldq mm7,mm7 //fill register with 8 masks - - movq mm0,mask0 - movq mm1,mask1 - movq mm2,mask2 - movq mm3,mask3 - movq mm4,mask4 - movq mm5,mask5 - - pand mm0,mm7 - pand mm1,mm7 - pand mm2,mm7 - pand mm3,mm7 - pand mm4,mm7 - pand mm5,mm7 - - pcmpeqb mm0,mm6 - pcmpeqb mm1,mm6 - pcmpeqb mm2,mm6 - pcmpeqb mm3,mm6 - pcmpeqb mm4,mm6 - pcmpeqb mm5,mm6 - - mov ecx,len //load length of line - mov esi,srcptr //load source - mov ebx,dstptr //load dest - - cmp ecx,0 - jz mainloop48end - -mainloop48: - movq mm7,[esi] - pand mm7,mm0 - movq mm6,mm0 - pandn mm6,[ebx] - por mm7,mm6 - movq [ebx],mm7 - - movq mm6,[esi+8] - pand mm6,mm1 - movq mm7,mm1 - pandn mm7,[ebx+8] - por mm6,mm7 - movq [ebx+8],mm6 - - movq mm6,[esi+16] - pand mm6,mm2 - movq mm7,mm2 - pandn mm7,[ebx+16] - por mm6,mm7 - movq [ebx+16],mm6 - - movq mm7,[esi+24] - pand mm7,mm3 - movq mm6,mm3 - pandn mm6,[ebx+24] - por mm7,mm6 - movq [ebx+24],mm7 - - movq mm6,[esi+32] - pand mm6,mm4 - movq mm7,mm4 - pandn mm7,[ebx+32] - por mm6,mm7 - movq [ebx+32],mm6 - - movq mm7,[esi+40] - pand mm7,mm5 - movq mm6,mm5 - pandn mm6,[ebx+40] - por mm7,mm6 - movq [ebx+40],mm7 - - add esi,48 //inc by 32 bytes processed - add ebx,48 - sub ecx,8 //dec by 8 pixels processed - - ja mainloop48 -mainloop48end: - - mov ecx,diff - cmp ecx,0 - jz end48 - - mov edx,mask - sal edx,24 //make low byte the high byte - -secondloop48: - sal edx,1 //move high bit to CF - jnc skip48 //if CF = 0 - mov eax,[esi] - mov [ebx],eax -skip48: - add esi,4 - add ebx,4 - - dec ecx - jnz secondloop48 - -end48: - emms - } - } - else /* mmx _not supported - Use modified C routine */ - { - register unsigned int incr1, initial_val, final_val; - png_size_t pixel_bytes; - png_uint_32 i; - register int disp = png_pass_inc[png_ptr->pass]; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - srcptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dstptr = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dstptr, srcptr, pixel_bytes); - srcptr += incr1; - dstptr += incr1; - } - } /* end of else */ - - break; - } // end 48 bpp - - default: - { - png_bytep sptr; - png_bytep dp; - png_size_t pixel_bytes; - int offset_table[7] = {0, 4, 0, 2, 0, 1, 0}; - unsigned int i; - register int disp = png_pass_inc[png_ptr->pass]; // get the offset - register unsigned int incr1, initial_val, final_val; - - pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); - sptr = png_ptr->row_buf + 1 + offset_table[png_ptr->pass]* - pixel_bytes; - dp = row + offset_table[png_ptr->pass]*pixel_bytes; - initial_val = offset_table[png_ptr->pass]*pixel_bytes; - final_val = png_ptr->width*pixel_bytes; - incr1 = (disp)*pixel_bytes; - for (i = initial_val; i < final_val; i += incr1) - { - png_memcpy(dp, sptr, pixel_bytes); - sptr += incr1; - dp += incr1; - } - break; - } - } /* end switch (png_ptr->row_info.pixel_depth) */ - } /* end if (non-trivial mask) */ - -#ifdef DISABLE_PNGVCRD_COMBINE - mmx_supported = save_mmx_supported; -#endif - -} /* end png_combine_row() */ - - -#if defined(PNG_READ_INTERLACING_SUPPORTED) - -void /* PRIVATE */ -png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, - png_uint_32 transformations) -{ -#ifdef PNG_USE_LOCAL_ARRAYS - const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; -#endif -#ifdef DISABLE_PNGVCRD_INTERLACE - int save_mmx_supported = mmx_supported; -#endif - - png_debug(1,"in png_do_read_interlace\n"); - -#ifdef DISABLE_PNGVCRD_INTERLACE - /* In libpng versions 1.0.3a through 1.0.4d, - * a sign error in the post-MMX cleanup code for each pixel_depth resulted - * in bad pixels at the beginning of some rows of some images, and also - * (due to out-of-range memory reads and writes) caused heap corruption - * when compiled with MSVC 6.0. The error was fixed in version 1.0.4e, - * and the code appears to work completely correctly, so it is enabled - * by default. - */ - if (1) /* all passes caused a heap problem in the old code */ - mmx_supported = 0; - else -#endif - if (mmx_supported == 2) - mmx_supported = mmxsupport(); - - if (row != NULL && row_info != NULL) - { - png_uint_32 final_width; - - final_width = row_info->width * png_pass_inc[pass]; - - switch (row_info->pixel_depth) - { - case 1: - { - png_bytep sp, dp; - int sshift, dshift; - int s_start, s_end, s_inc; - png_byte v; - png_uint_32 i; - int j; - - sp = row + (png_size_t)((row_info->width - 1) >> 3); - dp = row + (png_size_t)((final_width - 1) >> 3); -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (int)((row_info->width + 7) & 7); - dshift = (int)((final_width + 7) & 7); - s_start = 7; - s_end = 0; - s_inc = -1; - } - else -#endif - { - sshift = 7 - (int)((row_info->width + 7) & 7); - dshift = 7 - (int)((final_width + 7) & 7); - s_start = 0; - s_end = 7; - s_inc = 1; - } - - for (i = row_info->width; i; i--) - { - v = (png_byte)((*sp >> sshift) & 0x1); - for (j = 0; j < png_pass_inc[pass]; j++) - { - *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - - case 2: - { - png_bytep sp, dp; - int sshift, dshift; - int s_start, s_end, s_inc; - png_uint_32 i; - - sp = row + (png_size_t)((row_info->width - 1) >> 2); - dp = row + (png_size_t)((final_width - 1) >> 2); -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (png_size_t)(((row_info->width + 3) & 3) << 1); - dshift = (png_size_t)(((final_width + 3) & 3) << 1); - s_start = 6; - s_end = 0; - s_inc = -2; - } - else -#endif - { - sshift = (png_size_t)((3 - ((row_info->width + 3) & 3)) << 1); - dshift = (png_size_t)((3 - ((final_width + 3) & 3)) << 1); - s_start = 0; - s_end = 6; - s_inc = 2; - } - - for (i = row_info->width; i; i--) - { - png_byte v; - int j; - - v = (png_byte)((*sp >> sshift) & 0x3); - for (j = 0; j < png_pass_inc[pass]; j++) - { - *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - - case 4: - { - png_bytep sp, dp; - int sshift, dshift; - int s_start, s_end, s_inc; - png_uint_32 i; - - sp = row + (png_size_t)((row_info->width - 1) >> 1); - dp = row + (png_size_t)((final_width - 1) >> 1); -#if defined(PNG_READ_PACKSWAP_SUPPORTED) - if (transformations & PNG_PACKSWAP) - { - sshift = (png_size_t)(((row_info->width + 1) & 1) << 2); - dshift = (png_size_t)(((final_width + 1) & 1) << 2); - s_start = 4; - s_end = 0; - s_inc = -4; - } - else -#endif - { - sshift = (png_size_t)((1 - ((row_info->width + 1) & 1)) << 2); - dshift = (png_size_t)((1 - ((final_width + 1) & 1)) << 2); - s_start = 0; - s_end = 4; - s_inc = 4; - } - - for (i = row_info->width; i; i--) - { - png_byte v; - int j; - - v = (png_byte)((*sp >> sshift) & 0xf); - for (j = 0; j < png_pass_inc[pass]; j++) - { - *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff); - *dp |= (png_byte)(v << dshift); - if (dshift == s_end) - { - dshift = s_start; - dp--; - } - else - dshift += s_inc; - } - if (sshift == s_end) - { - sshift = s_start; - sp--; - } - else - sshift += s_inc; - } - break; - } - - default: // This is the place where the routine is modified - { - __int64 const4 = 0x0000000000FFFFFF; - // __int64 const5 = 0x000000FFFFFF0000; // unused... - __int64 const6 = 0x00000000000000FF; - png_bytep sptr, dp; - png_uint_32 i; - png_size_t pixel_bytes; - int width = row_info->width; - - pixel_bytes = (row_info->pixel_depth >> 3); - - sptr = row + (width - 1) * pixel_bytes; - dp = row + (final_width - 1) * pixel_bytes; - // New code by Nirav Chhatrapati - Intel Corporation - // sign fix by GRR - // NOTE: there is NO MMX code for 48-bit and 64-bit images - - if (mmx_supported) // use MMX routine if machine supports it - { - if (pixel_bytes == 3) - { - if (((pass == 0) || (pass == 1)) && width) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width - sub edi, 21 // (png_pass_inc[pass] - 1)*pixel_bytes -loop_pass0: - movd mm0, [esi] ; X X X X X v2 v1 v0 - pand mm0, const4 ; 0 0 0 0 0 v2 v1 v0 - movq mm1, mm0 ; 0 0 0 0 0 v2 v1 v0 - psllq mm0, 16 ; 0 0 0 v2 v1 v0 0 0 - movq mm2, mm0 ; 0 0 0 v2 v1 v0 0 0 - psllq mm0, 24 ; v2 v1 v0 0 0 0 0 0 - psrlq mm1, 8 ; 0 0 0 0 0 0 v2 v1 - por mm0, mm2 ; v2 v1 v0 v2 v1 v0 0 0 - por mm0, mm1 ; v2 v1 v0 v2 v1 v0 v2 v1 - movq mm3, mm0 ; v2 v1 v0 v2 v1 v0 v2 v1 - psllq mm0, 16 ; v0 v2 v1 v0 v2 v1 0 0 - movq mm4, mm3 ; v2 v1 v0 v2 v1 v0 v2 v1 - punpckhdq mm3, mm0 ; v0 v2 v1 v0 v2 v1 v0 v2 - movq [edi+16] , mm4 - psrlq mm0, 32 ; 0 0 0 0 v0 v2 v1 v0 - movq [edi+8] , mm3 - punpckldq mm0, mm4 ; v1 v0 v2 v1 v0 v2 v1 v0 - sub esi, 3 - movq [edi], mm0 - sub edi, 24 - //sub esi, 3 - dec ecx - jnz loop_pass0 - EMMS - } - } - else if (((pass == 2) || (pass == 3)) && width) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width - sub edi, 9 // (png_pass_inc[pass] - 1)*pixel_bytes -loop_pass2: - movd mm0, [esi] ; X X X X X v2 v1 v0 - pand mm0, const4 ; 0 0 0 0 0 v2 v1 v0 - movq mm1, mm0 ; 0 0 0 0 0 v2 v1 v0 - psllq mm0, 16 ; 0 0 0 v2 v1 v0 0 0 - movq mm2, mm0 ; 0 0 0 v2 v1 v0 0 0 - psllq mm0, 24 ; v2 v1 v0 0 0 0 0 0 - psrlq mm1, 8 ; 0 0 0 0 0 0 v2 v1 - por mm0, mm2 ; v2 v1 v0 v2 v1 v0 0 0 - por mm0, mm1 ; v2 v1 v0 v2 v1 v0 v2 v1 - movq [edi+4], mm0 ; move to memory - psrlq mm0, 16 ; 0 0 v2 v1 v0 v2 v1 v0 - movd [edi], mm0 ; move to memory - sub esi, 3 - sub edi, 12 - dec ecx - jnz loop_pass2 - EMMS - } - } - else if (width) /* && ((pass == 4) || (pass == 5)) */ - { - int width_mmx = ((width >> 1) << 1) - 8; - if (width_mmx < 0) - width_mmx = 0; - width -= width_mmx; // 8 or 9 pix, 24 or 27 bytes - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 3 - sub edi, 9 -loop_pass4: - movq mm0, [esi] ; X X v2 v1 v0 v5 v4 v3 - movq mm7, mm0 ; X X v2 v1 v0 v5 v4 v3 - movq mm6, mm0 ; X X v2 v1 v0 v5 v4 v3 - psllq mm0, 24 ; v1 v0 v5 v4 v3 0 0 0 - pand mm7, const4 ; 0 0 0 0 0 v5 v4 v3 - psrlq mm6, 24 ; 0 0 0 X X v2 v1 v0 - por mm0, mm7 ; v1 v0 v5 v4 v3 v5 v4 v3 - movq mm5, mm6 ; 0 0 0 X X v2 v1 v0 - psllq mm6, 8 ; 0 0 X X v2 v1 v0 0 - movq [edi], mm0 ; move quad to memory - psrlq mm5, 16 ; 0 0 0 0 0 X X v2 - pand mm5, const6 ; 0 0 0 0 0 0 0 v2 - por mm6, mm5 ; 0 0 X X v2 v1 v0 v2 - movd [edi+8], mm6 ; move double to memory - sub esi, 6 - sub edi, 12 - sub ecx, 2 - jnz loop_pass4 - EMMS - } - } - - sptr -= width_mmx*3; - dp -= width_mmx*6; - for (i = width; i; i--) - { - png_byte v[8]; - int j; - - png_memcpy(v, sptr, 3); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, 3); - dp -= 3; - } - sptr -= 3; - } - } - } /* end of pixel_bytes == 3 */ - - else if (pixel_bytes == 1) - { - if (((pass == 0) || (pass == 1)) && width) - { - int width_mmx = ((width >> 2) << 2); - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub edi, 31 - sub esi, 3 -loop1_pass0: - movd mm0, [esi] ; X X X X v0 v1 v2 v3 - movq mm1, mm0 ; X X X X v0 v1 v2 v3 - punpcklbw mm0, mm0 ; v0 v0 v1 v1 v2 v2 v3 v3 - movq mm2, mm0 ; v0 v0 v1 v1 v2 v2 v3 v3 - punpcklwd mm0, mm0 ; v2 v2 v2 v2 v3 v3 v3 v3 - movq mm3, mm0 ; v2 v2 v2 v2 v3 v3 v3 v3 - punpckldq mm0, mm0 ; v3 v3 v3 v3 v3 v3 v3 v3 - punpckhdq mm3, mm3 ; v2 v2 v2 v2 v2 v2 v2 v2 - movq [edi], mm0 ; move to memory v3 - punpckhwd mm2, mm2 ; v0 v0 v0 v0 v1 v1 v1 v1 - movq [edi+8], mm3 ; move to memory v2 - movq mm4, mm2 ; v0 v0 v0 v0 v1 v1 v1 v1 - punpckldq mm2, mm2 ; v1 v1 v1 v1 v1 v1 v1 v1 - punpckhdq mm4, mm4 ; v0 v0 v0 v0 v0 v0 v0 v0 - movq [edi+16], mm2 ; move to memory v1 - movq [edi+24], mm4 ; move to memory v0 - sub esi, 4 - sub edi, 32 - sub ecx, 4 - jnz loop1_pass0 - EMMS - } - } - - sptr -= width_mmx; - dp -= width_mmx*8; - for (i = width; i; i--) - { - int j; - - /* I simplified this part in version 1.0.4e - * here and in several other instances where - * pixel_bytes == 1 -- GR-P - * - * Original code: - * - * png_byte v[8]; - * png_memcpy(v, sptr, pixel_bytes); - * for (j = 0; j < png_pass_inc[pass]; j++) - * { - * png_memcpy(dp, v, pixel_bytes); - * dp -= pixel_bytes; - * } - * sptr -= pixel_bytes; - * - * Replacement code is in the next three lines: - */ - - for (j = 0; j < png_pass_inc[pass]; j++) - *dp-- = *sptr; - sptr--; - } - } - else if (((pass == 2) || (pass == 3)) && width) - { - int width_mmx = ((width >> 2) << 2); - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub edi, 15 - sub esi, 3 -loop1_pass2: - movd mm0, [esi] ; X X X X v0 v1 v2 v3 - punpcklbw mm0, mm0 ; v0 v0 v1 v1 v2 v2 v3 v3 - movq mm1, mm0 ; v0 v0 v1 v1 v2 v2 v3 v3 - punpcklwd mm0, mm0 ; v2 v2 v2 v2 v3 v3 v3 v3 - punpckhwd mm1, mm1 ; v0 v0 v0 v0 v1 v1 v1 v1 - movq [edi], mm0 ; move to memory v2 and v3 - sub esi, 4 - movq [edi+8], mm1 ; move to memory v1 and v0 - sub edi, 16 - sub ecx, 4 - jnz loop1_pass2 - EMMS - } - } - - sptr -= width_mmx; - dp -= width_mmx*4; - for (i = width; i; i--) - { - int j; - - for (j = 0; j < png_pass_inc[pass]; j++) - { - *dp-- = *sptr; - } - sptr --; - } - } - else if (width) /* && ((pass == 4) || (pass == 5))) */ - { - int width_mmx = ((width >> 3) << 3); - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub edi, 15 - sub esi, 7 -loop1_pass4: - movq mm0, [esi] ; v0 v1 v2 v3 v4 v5 v6 v7 - movq mm1, mm0 ; v0 v1 v2 v3 v4 v5 v6 v7 - punpcklbw mm0, mm0 ; v4 v4 v5 v5 v6 v6 v7 v7 - //movq mm1, mm0 ; v0 v0 v1 v1 v2 v2 v3 v3 - punpckhbw mm1, mm1 ;v0 v0 v1 v1 v2 v2 v3 v3 - movq [edi+8], mm1 ; move to memory v0 v1 v2 and v3 - sub esi, 8 - movq [edi], mm0 ; move to memory v4 v5 v6 and v7 - //sub esi, 4 - sub edi, 16 - sub ecx, 8 - jnz loop1_pass4 - EMMS - } - } - - sptr -= width_mmx; - dp -= width_mmx*2; - for (i = width; i; i--) - { - int j; - - for (j = 0; j < png_pass_inc[pass]; j++) - { - *dp-- = *sptr; - } - sptr --; - } - } - } /* end of pixel_bytes == 1 */ - - else if (pixel_bytes == 2) - { - if (((pass == 0) || (pass == 1)) && width) - { - int width_mmx = ((width >> 1) << 1); - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 2 - sub edi, 30 -loop2_pass0: - movd mm0, [esi] ; X X X X v1 v0 v3 v2 - punpcklwd mm0, mm0 ; v1 v0 v1 v0 v3 v2 v3 v2 - movq mm1, mm0 ; v1 v0 v1 v0 v3 v2 v3 v2 - punpckldq mm0, mm0 ; v3 v2 v3 v2 v3 v2 v3 v2 - punpckhdq mm1, mm1 ; v1 v0 v1 v0 v1 v0 v1 v0 - movq [edi], mm0 - movq [edi + 8], mm0 - movq [edi + 16], mm1 - movq [edi + 24], mm1 - sub esi, 4 - sub edi, 32 - sub ecx, 2 - jnz loop2_pass0 - EMMS - } - } - - sptr -= (width_mmx*2 - 2); // sign fixed - dp -= (width_mmx*16 - 2); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 2; - png_memcpy(v, sptr, 2); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 2; - png_memcpy(dp, v, 2); - } - } - } - else if (((pass == 2) || (pass == 3)) && width) - { - int width_mmx = ((width >> 1) << 1) ; - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 2 - sub edi, 14 -loop2_pass2: - movd mm0, [esi] ; X X X X v1 v0 v3 v2 - punpcklwd mm0, mm0 ; v1 v0 v1 v0 v3 v2 v3 v2 - movq mm1, mm0 ; v1 v0 v1 v0 v3 v2 v3 v2 - punpckldq mm0, mm0 ; v3 v2 v3 v2 v3 v2 v3 v2 - punpckhdq mm1, mm1 ; v1 v0 v1 v0 v1 v0 v1 v0 - movq [edi], mm0 - sub esi, 4 - movq [edi + 8], mm1 - //sub esi, 4 - sub edi, 16 - sub ecx, 2 - jnz loop2_pass2 - EMMS - } - } - - sptr -= (width_mmx*2 - 2); // sign fixed - dp -= (width_mmx*8 - 2); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 2; - png_memcpy(v, sptr, 2); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 2; - png_memcpy(dp, v, 2); - } - } - } - else if (width) // pass == 4 or 5 - { - int width_mmx = ((width >> 1) << 1) ; - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 2 - sub edi, 6 -loop2_pass4: - movd mm0, [esi] ; X X X X v1 v0 v3 v2 - punpcklwd mm0, mm0 ; v1 v0 v1 v0 v3 v2 v3 v2 - sub esi, 4 - movq [edi], mm0 - sub edi, 8 - sub ecx, 2 - jnz loop2_pass4 - EMMS - } - } - - sptr -= (width_mmx*2 - 2); // sign fixed - dp -= (width_mmx*4 - 2); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 2; - png_memcpy(v, sptr, 2); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 2; - png_memcpy(dp, v, 2); - } - } - } - } /* end of pixel_bytes == 2 */ - - else if (pixel_bytes == 4) - { - if (((pass == 0) || (pass == 1)) && width) - { - int width_mmx = ((width >> 1) << 1) ; - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 4 - sub edi, 60 -loop4_pass0: - movq mm0, [esi] ; v3 v2 v1 v0 v7 v6 v5 v4 - movq mm1, mm0 ; v3 v2 v1 v0 v7 v6 v5 v4 - punpckldq mm0, mm0 ; v7 v6 v5 v4 v7 v6 v5 v4 - punpckhdq mm1, mm1 ; v3 v2 v1 v0 v3 v2 v1 v0 - movq [edi], mm0 - movq [edi + 8], mm0 - movq [edi + 16], mm0 - movq [edi + 24], mm0 - movq [edi+32], mm1 - movq [edi + 40], mm1 - movq [edi+ 48], mm1 - sub esi, 8 - movq [edi + 56], mm1 - sub edi, 64 - sub ecx, 2 - jnz loop4_pass0 - EMMS - } - } - - sptr -= (width_mmx*4 - 4); // sign fixed - dp -= (width_mmx*32 - 4); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 4; - png_memcpy(v, sptr, 4); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 4; - png_memcpy(dp, v, 4); - } - } - } - else if (((pass == 2) || (pass == 3)) && width) - { - int width_mmx = ((width >> 1) << 1) ; - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 4 - sub edi, 28 -loop4_pass2: - movq mm0, [esi] ; v3 v2 v1 v0 v7 v6 v5 v4 - movq mm1, mm0 ; v3 v2 v1 v0 v7 v6 v5 v4 - punpckldq mm0, mm0 ; v7 v6 v5 v4 v7 v6 v5 v4 - punpckhdq mm1, mm1 ; v3 v2 v1 v0 v3 v2 v1 v0 - movq [edi], mm0 - movq [edi + 8], mm0 - movq [edi+16], mm1 - movq [edi + 24], mm1 - sub esi, 8 - sub edi, 32 - sub ecx, 2 - jnz loop4_pass2 - EMMS - } - } - - sptr -= (width_mmx*4 - 4); // sign fixed - dp -= (width_mmx*16 - 4); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 4; - png_memcpy(v, sptr, 4); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 4; - png_memcpy(dp, v, 4); - } - } - } - else if (width) // pass == 4 or 5 - { - int width_mmx = ((width >> 1) << 1) ; - width -= width_mmx; - if (width_mmx) - { - _asm - { - mov esi, sptr - mov edi, dp - mov ecx, width_mmx - sub esi, 4 - sub edi, 12 -loop4_pass4: - movq mm0, [esi] ; v3 v2 v1 v0 v7 v6 v5 v4 - movq mm1, mm0 ; v3 v2 v1 v0 v7 v6 v5 v4 - punpckldq mm0, mm0 ; v7 v6 v5 v4 v7 v6 v5 v4 - punpckhdq mm1, mm1 ; v3 v2 v1 v0 v3 v2 v1 v0 - movq [edi], mm0 - sub esi, 8 - movq [edi + 8], mm1 - sub edi, 16 - sub ecx, 2 - jnz loop4_pass4 - EMMS - } - } - - sptr -= (width_mmx*4 - 4); // sign fixed - dp -= (width_mmx*8 - 4); // sign fixed - for (i = width; i; i--) - { - png_byte v[8]; - int j; - sptr -= 4; - png_memcpy(v, sptr, 4); - for (j = 0; j < png_pass_inc[pass]; j++) - { - dp -= 4; - png_memcpy(dp, v, 4); - } - } - } - - } /* end of pixel_bytes == 4 */ - - else if (pixel_bytes == 6) - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, 6); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, 6); - dp -= 6; - } - sptr -= 6; - } - } /* end of pixel_bytes == 6 */ - - else - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr-= pixel_bytes; - } - } - } /* end of mmx_supported */ - - else /* MMX not supported: use modified C code - takes advantage - * of inlining of memcpy for a constant */ - { - if (pixel_bytes == 1) - { - for (i = width; i; i--) - { - int j; - for (j = 0; j < png_pass_inc[pass]; j++) - *dp-- = *sptr; - sptr--; - } - } - else if (pixel_bytes == 3) - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr -= pixel_bytes; - } - } - else if (pixel_bytes == 2) - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr -= pixel_bytes; - } - } - else if (pixel_bytes == 4) - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr -= pixel_bytes; - } - } - else if (pixel_bytes == 6) - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr -= pixel_bytes; - } - } - else - { - for (i = width; i; i--) - { - png_byte v[8]; - int j; - png_memcpy(v, sptr, pixel_bytes); - for (j = 0; j < png_pass_inc[pass]; j++) - { - png_memcpy(dp, v, pixel_bytes); - dp -= pixel_bytes; - } - sptr -= pixel_bytes; - } - } - - } /* end of MMX not supported */ - break; - } - } /* end switch (row_info->pixel_depth) */ - - row_info->width = final_width; - row_info->rowbytes = ((final_width * - (png_uint_32)row_info->pixel_depth + 7) >> 3); - } - -#ifdef DISABLE_PNGVCRD_INTERLACE - mmx_supported = save_mmx_supported; -#endif -} - -#endif /* PNG_READ_INTERLACING_SUPPORTED */ - - -// These variables are utilized in the functions below. They are declared -// globally here to ensure alignment on 8-byte boundaries. - -union uAll { - __int64 use; - double align; -} LBCarryMask = {0x0101010101010101}, - HBClearMask = {0x7f7f7f7f7f7f7f7f}, - ActiveMask, ActiveMask2, ActiveMaskEnd, ShiftBpp, ShiftRem; - - -// Optimized code for PNG Average filter decoder -void /* PRIVATE */ -png_read_filter_row_mmx_avg(png_row_infop row_info, png_bytep row - , png_bytep prev_row) -{ - int bpp; - png_uint_32 FullLength; - png_uint_32 MMXLength; - //png_uint_32 len; - int diff; - - bpp = (row_info->pixel_depth + 7) >> 3; // Get # bytes per pixel - FullLength = row_info->rowbytes; // # of bytes to filter - _asm { - // Init address pointers and offset - mov edi, row // edi ==> Avg(x) - xor ebx, ebx // ebx ==> x - mov edx, edi - mov esi, prev_row // esi ==> Prior(x) - sub edx, bpp // edx ==> Raw(x-bpp) - - xor eax, eax - // Compute the Raw value for the first bpp bytes - // Raw(x) = Avg(x) + (Prior(x)/2) -davgrlp: - mov al, [esi + ebx] // Load al with Prior(x) - inc ebx - shr al, 1 // divide by 2 - add al, [edi+ebx-1] // Add Avg(x); -1 to offset inc ebx - cmp ebx, bpp - mov [edi+ebx-1], al // Write back Raw(x); - // mov does not affect flags; -1 to offset inc ebx - jb davgrlp - // get # of bytes to alignment - mov diff, edi // take start of row - add diff, ebx // add bpp - add diff, 0xf // add 7 + 8 to incr past alignment boundary - and diff, 0xfffffff8 // mask to alignment boundary - sub diff, edi // subtract from start ==> value ebx at alignment - jz davggo - // fix alignment - // Compute the Raw value for the bytes upto the alignment boundary - // Raw(x) = Avg(x) + ((Raw(x-bpp) + Prior(x))/2) - xor ecx, ecx -davglp1: - xor eax, eax - mov cl, [esi + ebx] // load cl with Prior(x) - mov al, [edx + ebx] // load al with Raw(x-bpp) - add ax, cx - inc ebx - shr ax, 1 // divide by 2 - add al, [edi+ebx-1] // Add Avg(x); -1 to offset inc ebx - cmp ebx, diff // Check if at alignment boundary - mov [edi+ebx-1], al // Write back Raw(x); - // mov does not affect flags; -1 to offset inc ebx - jb davglp1 // Repeat until at alignment boundary -davggo: - mov eax, FullLength - mov ecx, eax - sub eax, ebx // subtract alignment fix - and eax, 0x00000007 // calc bytes over mult of 8 - sub ecx, eax // drop over bytes from original length - mov MMXLength, ecx - } // end _asm block - // Now do the math for the rest of the row - switch ( bpp ) - { - case 3: - { - ActiveMask.use = 0x0000000000ffffff; - ShiftBpp.use = 24; // == 3 * 8 - ShiftRem.use = 40; // == 64 - 24 - _asm { - // Re-init address pointers and offset - movq mm7, ActiveMask - mov ebx, diff // ebx ==> x = offset to alignment boundary - movq mm5, LBCarryMask - mov edi, row // edi ==> Avg(x) - movq mm4, HBClearMask - mov esi, prev_row // esi ==> Prior(x) - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm2, [edi + ebx - 8] // Load previous aligned 8 bytes - // (we correct position in loop below) -davg3lp: - movq mm0, [edi + ebx] // Load mm0 with Avg(x) - // Add (Prev_row/2) to Average - movq mm3, mm5 - psrlq mm2, ShiftRem // Correct position Raw(x-bpp) data - movq mm1, [esi + ebx] // Load mm1 with Prior(x) - movq mm6, mm7 - pand mm3, mm1 // get lsb for each prev_row byte - psrlq mm1, 1 // divide prev_row bytes by 2 - pand mm1, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm1 // add (Prev_row/2) to Avg for each byte - // Add 1st active group (Raw(x-bpp)/2) to Average with LBCarry - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 1 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active - // byte - // Add 2nd active group (Raw(x-bpp)/2) to Average with LBCarry - psllq mm6, ShiftBpp // shift the mm6 mask to cover bytes 3-5 - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active - // byte - - // Add 3rd active group (Raw(x-bpp)/2) to Average with LBCarry - psllq mm6, ShiftBpp // shift the mm6 mask to cover the last two - // bytes - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - // Data only needs to be shifted once here to - // get the correct x-bpp offset. - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - add ebx, 8 - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active - // byte - - // Now ready to write back to memory - movq [edi + ebx - 8], mm0 - // Move updated Raw(x) to use as Raw(x-bpp) for next loop - cmp ebx, MMXLength - movq mm2, mm0 // mov updated Raw(x) to mm2 - jb davg3lp - } // end _asm block - } - break; - - case 6: - case 4: - case 7: - case 5: - { - ActiveMask.use = 0xffffffffffffffff; // use shift below to clear - // appropriate inactive bytes - ShiftBpp.use = bpp << 3; - ShiftRem.use = 64 - ShiftBpp.use; - _asm { - movq mm4, HBClearMask - // Re-init address pointers and offset - mov ebx, diff // ebx ==> x = offset to alignment boundary - // Load ActiveMask and clear all bytes except for 1st active group - movq mm7, ActiveMask - mov edi, row // edi ==> Avg(x) - psrlq mm7, ShiftRem - mov esi, prev_row // esi ==> Prior(x) - movq mm6, mm7 - movq mm5, LBCarryMask - psllq mm6, ShiftBpp // Create mask for 2nd active group - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm2, [edi + ebx - 8] // Load previous aligned 8 bytes - // (we correct position in loop below) -davg4lp: - movq mm0, [edi + ebx] - psrlq mm2, ShiftRem // shift data to position correctly - movq mm1, [esi + ebx] - // Add (Prev_row/2) to Average - movq mm3, mm5 - pand mm3, mm1 // get lsb for each prev_row byte - psrlq mm1, 1 // divide prev_row bytes by 2 - pand mm1, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm1 // add (Prev_row/2) to Avg for each byte - // Add 1st active group (Raw(x-bpp)/2) to Average with LBCarry - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm7 // Leave only Active Group 1 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active - // byte - // Add 2nd active group (Raw(x-bpp)/2) to Average with LBCarry - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - add ebx, 8 - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active - // byte - cmp ebx, MMXLength - // Now ready to write back to memory - movq [edi + ebx - 8], mm0 - // Prep Raw(x-bpp) for next loop - movq mm2, mm0 // mov updated Raws to mm2 - jb davg4lp - } // end _asm block - } - break; - case 2: - { - ActiveMask.use = 0x000000000000ffff; - ShiftBpp.use = 24; // == 3 * 8 - ShiftRem.use = 40; // == 64 - 24 - _asm { - // Load ActiveMask - movq mm7, ActiveMask - // Re-init address pointers and offset - mov ebx, diff // ebx ==> x = offset to alignment boundary - movq mm5, LBCarryMask - mov edi, row // edi ==> Avg(x) - movq mm4, HBClearMask - mov esi, prev_row // esi ==> Prior(x) - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm2, [edi + ebx - 8] // Load previous aligned 8 bytes - // (we correct position in loop below) -davg2lp: - movq mm0, [edi + ebx] - psllq mm2, ShiftRem // shift data to position correctly - movq mm1, [esi + ebx] - // Add (Prev_row/2) to Average - movq mm3, mm5 - pand mm3, mm1 // get lsb for each prev_row byte - psrlq mm1, 1 // divide prev_row bytes by 2 - pand mm1, mm4 // clear invalid bit 7 of each byte - movq mm6, mm7 - paddb mm0, mm1 // add (Prev_row/2) to Avg for each byte - // Add 1st active group (Raw(x-bpp)/2) to Average with LBCarry - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 1 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active byte - // Add 2nd active group (Raw(x-bpp)/2) to Average with LBCarry - psllq mm6, ShiftBpp // shift the mm6 mask to cover bytes 2 & 3 - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active byte - - // Add rdd active group (Raw(x-bpp)/2) to Average with LBCarry - psllq mm6, ShiftBpp // shift the mm6 mask to cover bytes 4 & 5 - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - // Data only needs to be shifted once here to - // get the correct x-bpp offset. - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active byte - - // Add 4th active group (Raw(x-bpp)/2) to Average with LBCarry - psllq mm6, ShiftBpp // shift the mm6 mask to cover bytes 6 & 7 - movq mm2, mm0 // mov updated Raws to mm2 - psllq mm2, ShiftBpp // shift data to position correctly - // Data only needs to be shifted once here to - // get the correct x-bpp offset. - add ebx, 8 - movq mm1, mm3 // now use mm1 for getting LBCarrys - pand mm1, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 (Only valid for active group) - psrlq mm2, 1 // divide raw bytes by 2 - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm2, mm1 // add LBCarrys to (Raw(x-bpp)/2) for each byte - pand mm2, mm6 // Leave only Active Group 2 bytes to add to Avg - paddb mm0, mm2 // add (Raw/2) + LBCarrys to Avg for each Active byte - - cmp ebx, MMXLength - // Now ready to write back to memory - movq [edi + ebx - 8], mm0 - // Prep Raw(x-bpp) for next loop - movq mm2, mm0 // mov updated Raws to mm2 - jb davg2lp - } // end _asm block - } - break; - - case 1: // bpp == 1 - { - _asm { - // Re-init address pointers and offset - mov ebx, diff // ebx ==> x = offset to alignment boundary - mov edi, row // edi ==> Avg(x) - cmp ebx, FullLength // Test if offset at end of array - jnb davg1end - // Do Paeth decode for remaining bytes - mov esi, prev_row // esi ==> Prior(x) - mov edx, edi - xor ecx, ecx // zero ecx before using cl & cx in loop below - sub edx, bpp // edx ==> Raw(x-bpp) -davg1lp: - // Raw(x) = Avg(x) + ((Raw(x-bpp) + Prior(x))/2) - xor eax, eax - mov cl, [esi + ebx] // load cl with Prior(x) - mov al, [edx + ebx] // load al with Raw(x-bpp) - add ax, cx - inc ebx - shr ax, 1 // divide by 2 - add al, [edi+ebx-1] // Add Avg(x); -1 to offset inc ebx - cmp ebx, FullLength // Check if at end of array - mov [edi+ebx-1], al // Write back Raw(x); - // mov does not affect flags; -1 to offset inc ebx - jb davg1lp -davg1end: - } // end _asm block - } - return; - - case 8: // bpp == 8 - { - _asm { - // Re-init address pointers and offset - mov ebx, diff // ebx ==> x = offset to alignment boundary - movq mm5, LBCarryMask - mov edi, row // edi ==> Avg(x) - movq mm4, HBClearMask - mov esi, prev_row // esi ==> Prior(x) - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm2, [edi + ebx - 8] // Load previous aligned 8 bytes - // (NO NEED to correct position in loop below) -davg8lp: - movq mm0, [edi + ebx] - movq mm3, mm5 - movq mm1, [esi + ebx] - add ebx, 8 - pand mm3, mm1 // get lsb for each prev_row byte - psrlq mm1, 1 // divide prev_row bytes by 2 - pand mm3, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 - psrlq mm2, 1 // divide raw bytes by 2 - pand mm1, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm3 // add LBCarrys to Avg for each byte - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm1 // add (Prev_row/2) to Avg for each byte - paddb mm0, mm2 // add (Raw/2) to Avg for each byte - cmp ebx, MMXLength - movq [edi + ebx - 8], mm0 - movq mm2, mm0 // reuse as Raw(x-bpp) - jb davg8lp - } // end _asm block - } - break; - default: // bpp greater than 8 - { - _asm { - movq mm5, LBCarryMask - // Re-init address pointers and offset - mov ebx, diff // ebx ==> x = offset to alignment boundary - mov edi, row // edi ==> Avg(x) - movq mm4, HBClearMask - mov edx, edi - mov esi, prev_row // esi ==> Prior(x) - sub edx, bpp // edx ==> Raw(x-bpp) -davgAlp: - movq mm0, [edi + ebx] - movq mm3, mm5 - movq mm1, [esi + ebx] - pand mm3, mm1 // get lsb for each prev_row byte - movq mm2, [edx + ebx] - psrlq mm1, 1 // divide prev_row bytes by 2 - pand mm3, mm2 // get LBCarrys for each byte where both - // lsb's were == 1 - psrlq mm2, 1 // divide raw bytes by 2 - pand mm1, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm3 // add LBCarrys to Avg for each byte - pand mm2, mm4 // clear invalid bit 7 of each byte - paddb mm0, mm1 // add (Prev_row/2) to Avg for each byte - add ebx, 8 - paddb mm0, mm2 // add (Raw/2) to Avg for each byte - cmp ebx, MMXLength - movq [edi + ebx - 8], mm0 - jb davgAlp - } // end _asm block - } - break; - } // end switch ( bpp ) - - _asm { - // MMX acceleration complete now do clean-up - // Check if any remaining bytes left to decode - mov ebx, MMXLength // ebx ==> x = offset bytes remaining after MMX - mov edi, row // edi ==> Avg(x) - cmp ebx, FullLength // Test if offset at end of array - jnb davgend - // Do Paeth decode for remaining bytes - mov esi, prev_row // esi ==> Prior(x) - mov edx, edi - xor ecx, ecx // zero ecx before using cl & cx in loop below - sub edx, bpp // edx ==> Raw(x-bpp) -davglp2: - // Raw(x) = Avg(x) + ((Raw(x-bpp) + Prior(x))/2) - xor eax, eax - mov cl, [esi + ebx] // load cl with Prior(x) - mov al, [edx + ebx] // load al with Raw(x-bpp) - add ax, cx - inc ebx - shr ax, 1 // divide by 2 - add al, [edi+ebx-1] // Add Avg(x); -1 to offset inc ebx - cmp ebx, FullLength // Check if at end of array - mov [edi+ebx-1], al // Write back Raw(x); - // mov does not affect flags; -1 to offset inc ebx - jb davglp2 -davgend: - emms // End MMX instructions; prep for possible FP instrs. - } // end _asm block -} - -// Optimized code for PNG Paeth filter decoder -void /* PRIVATE */ -png_read_filter_row_mmx_paeth(png_row_infop row_info, png_bytep row, - png_bytep prev_row) -{ - png_uint_32 FullLength; - png_uint_32 MMXLength; - //png_uint_32 len; - int bpp; - int diff; - //int ptemp; - int patemp, pbtemp, pctemp; - - bpp = (row_info->pixel_depth + 7) >> 3; // Get # bytes per pixel - FullLength = row_info->rowbytes; // # of bytes to filter - _asm - { - xor ebx, ebx // ebx ==> x offset - mov edi, row - xor edx, edx // edx ==> x-bpp offset - mov esi, prev_row - xor eax, eax - - // Compute the Raw value for the first bpp bytes - // Note: the formula works out to be always - // Paeth(x) = Raw(x) + Prior(x) where x < bpp -dpthrlp: - mov al, [edi + ebx] - add al, [esi + ebx] - inc ebx - cmp ebx, bpp - mov [edi + ebx - 1], al - jb dpthrlp - // get # of bytes to alignment - mov diff, edi // take start of row - add diff, ebx // add bpp - xor ecx, ecx - add diff, 0xf // add 7 + 8 to incr past alignment boundary - and diff, 0xfffffff8 // mask to alignment boundary - sub diff, edi // subtract from start ==> value ebx at alignment - jz dpthgo - // fix alignment -dpthlp1: - xor eax, eax - // pav = p - a = (a + b - c) - a = b - c - mov al, [esi + ebx] // load Prior(x) into al - mov cl, [esi + edx] // load Prior(x-bpp) into cl - sub eax, ecx // subtract Prior(x-bpp) - mov patemp, eax // Save pav for later use - xor eax, eax - // pbv = p - b = (a + b - c) - b = a - c - mov al, [edi + edx] // load Raw(x-bpp) into al - sub eax, ecx // subtract Prior(x-bpp) - mov ecx, eax - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - add eax, patemp // pcv = pav + pbv - // pc = abs(pcv) - test eax, 0x80000000 - jz dpthpca - neg eax // reverse sign of neg values -dpthpca: - mov pctemp, eax // save pc for later use - // pb = abs(pbv) - test ecx, 0x80000000 - jz dpthpba - neg ecx // reverse sign of neg values -dpthpba: - mov pbtemp, ecx // save pb for later use - // pa = abs(pav) - mov eax, patemp - test eax, 0x80000000 - jz dpthpaa - neg eax // reverse sign of neg values -dpthpaa: - mov patemp, eax // save pa for later use - // test if pa <= pb - cmp eax, ecx - jna dpthabb - // pa > pb; now test if pb <= pc - cmp ecx, pctemp - jna dpthbbc - // pb > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthpaeth -dpthbbc: - // pb <= pc; Raw(x) = Paeth(x) + Prior(x) - mov cl, [esi + ebx] // load Prior(x) into cl - jmp dpthpaeth -dpthabb: - // pa <= pb; now test if pa <= pc - cmp eax, pctemp - jna dpthabc - // pa > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthpaeth -dpthabc: - // pa <= pc; Raw(x) = Paeth(x) + Raw(x-bpp) - mov cl, [edi + edx] // load Raw(x-bpp) into cl -dpthpaeth: - inc ebx - inc edx - // Raw(x) = (Paeth(x) + Paeth_Predictor( a, b, c )) mod 256 - add [edi + ebx - 1], cl - cmp ebx, diff - jb dpthlp1 -dpthgo: - mov ecx, FullLength - mov eax, ecx - sub eax, ebx // subtract alignment fix - and eax, 0x00000007 // calc bytes over mult of 8 - sub ecx, eax // drop over bytes from original length - mov MMXLength, ecx - } // end _asm block - // Now do the math for the rest of the row - switch ( bpp ) - { - case 3: - { - ActiveMask.use = 0x0000000000ffffff; - ActiveMaskEnd.use = 0xffff000000000000; - ShiftBpp.use = 24; // == bpp(3) * 8 - ShiftRem.use = 40; // == 64 - 24 - _asm - { - mov ebx, diff - mov edi, row - mov esi, prev_row - pxor mm0, mm0 - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] -dpth3lp: - psrlq mm1, ShiftRem // shift last 3 bytes to 1st 3 bytes - movq mm2, [esi + ebx] // load b=Prior(x) - punpcklbw mm1, mm0 // Unpack High bytes of a - movq mm3, [esi+ebx-8] // Prep c=Prior(x-bpp) bytes - punpcklbw mm2, mm0 // Unpack High bytes of b - psrlq mm3, ShiftRem // shift last 3 bytes to 1st 3 bytes - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - punpcklbw mm3, mm0 // Unpack High bytes of c - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - paddw mm7, mm3 - pxor mm0, mm0 - packuswb mm7, mm1 - movq mm3, [esi + ebx] // load c=Prior(x-bpp) - pand mm7, ActiveMask - movq mm2, mm3 // load b=Prior(x) step 1 - paddb mm7, [edi + ebx] // add Paeth predictor with Raw(x) - punpcklbw mm3, mm0 // Unpack High bytes of c - movq [edi + ebx], mm7 // write back updated value - movq mm1, mm7 // Now mm1 will be used as Raw(x-bpp) - // Now do Paeth for 2nd set of bytes (3-5) - psrlq mm2, ShiftBpp // load b=Prior(x) step 2 - punpcklbw mm1, mm0 // Unpack High bytes of a - pxor mm7, mm7 - punpcklbw mm2, mm0 // Unpack High bytes of b - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - psubw mm5, mm3 - psubw mm4, mm3 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = - // pav + pbv = pbv + pav - movq mm6, mm5 - paddw mm6, mm4 - - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm5 // Create mask pbv bytes < 0 - pcmpgtw mm7, mm4 // Create mask pav bytes < 0 - pand mm0, mm5 // Only pbv bytes < 0 in mm0 - pand mm7, mm4 // Only pav bytes < 0 in mm7 - psubw mm5, mm0 - psubw mm4, mm7 - psubw mm5, mm0 - psubw mm4, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - movq mm2, [esi + ebx] // load b=Prior(x) - pand mm3, mm7 - pandn mm7, mm0 - pxor mm1, mm1 - paddw mm7, mm3 - pxor mm0, mm0 - packuswb mm7, mm1 - movq mm3, mm2 // load c=Prior(x-bpp) step 1 - pand mm7, ActiveMask - punpckhbw mm2, mm0 // Unpack High bytes of b - psllq mm7, ShiftBpp // Shift bytes to 2nd group of 3 bytes - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - paddb mm7, [edi + ebx] // add Paeth predictor with Raw(x) - psllq mm3, ShiftBpp // load c=Prior(x-bpp) step 2 - movq [edi + ebx], mm7 // write back updated value - movq mm1, mm7 - punpckhbw mm3, mm0 // Unpack High bytes of c - psllq mm1, ShiftBpp // Shift bytes - // Now mm1 will be used as Raw(x-bpp) - // Now do Paeth for 3rd, and final, set of bytes (6-7) - pxor mm7, mm7 - punpckhbw mm1, mm0 // Unpack High bytes of a - psubw mm4, mm3 - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - pxor mm0, mm0 - paddw mm6, mm5 - - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - pandn mm0, mm1 - pandn mm7, mm4 - paddw mm0, mm2 - paddw mm7, mm5 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pand mm3, mm7 - pandn mm7, mm0 - paddw mm7, mm3 - pxor mm1, mm1 - packuswb mm1, mm7 - // Step ebx to next set of 8 bytes and repeat loop til done - add ebx, 8 - pand mm1, ActiveMaskEnd - paddb mm1, [edi + ebx - 8] // add Paeth predictor with Raw(x) - - cmp ebx, MMXLength - pxor mm0, mm0 // pxor does not affect flags - movq [edi + ebx - 8], mm1 // write back updated value - // mm1 will be used as Raw(x-bpp) next loop - // mm3 ready to be used as Prior(x-bpp) next loop - jb dpth3lp - } // end _asm block - } - break; - - case 6: - case 7: - case 5: - { - ActiveMask.use = 0x00000000ffffffff; - ActiveMask2.use = 0xffffffff00000000; - ShiftBpp.use = bpp << 3; // == bpp * 8 - ShiftRem.use = 64 - ShiftBpp.use; - _asm - { - mov ebx, diff - mov edi, row - mov esi, prev_row - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] - pxor mm0, mm0 -dpth6lp: - // Must shift to position Raw(x-bpp) data - psrlq mm1, ShiftRem - // Do first set of 4 bytes - movq mm3, [esi+ebx-8] // read c=Prior(x-bpp) bytes - punpcklbw mm1, mm0 // Unpack Low bytes of a - movq mm2, [esi + ebx] // load b=Prior(x) - punpcklbw mm2, mm0 // Unpack Low bytes of b - // Must shift to position Prior(x-bpp) data - psrlq mm3, ShiftRem - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - punpcklbw mm3, mm0 // Unpack Low bytes of c - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - paddw mm7, mm3 - pxor mm0, mm0 - packuswb mm7, mm1 - movq mm3, [esi + ebx - 8] // load c=Prior(x-bpp) - pand mm7, ActiveMask - psrlq mm3, ShiftRem - movq mm2, [esi + ebx] // load b=Prior(x) step 1 - paddb mm7, [edi + ebx] // add Paeth predictor with Raw(x) - movq mm6, mm2 - movq [edi + ebx], mm7 // write back updated value - movq mm1, [edi+ebx-8] - psllq mm6, ShiftBpp - movq mm5, mm7 - psrlq mm1, ShiftRem - por mm3, mm6 - psllq mm5, ShiftBpp - punpckhbw mm3, mm0 // Unpack High bytes of c - por mm1, mm5 - // Do second set of 4 bytes - punpckhbw mm2, mm0 // Unpack High bytes of b - punpckhbw mm1, mm0 // Unpack High bytes of a - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - pxor mm1, mm1 - paddw mm7, mm3 - pxor mm0, mm0 - // Step ex to next set of 8 bytes and repeat loop til done - add ebx, 8 - packuswb mm1, mm7 - paddb mm1, [edi + ebx - 8] // add Paeth predictor with Raw(x) - cmp ebx, MMXLength - movq [edi + ebx - 8], mm1 // write back updated value - // mm1 will be used as Raw(x-bpp) next loop - jb dpth6lp - } // end _asm block - } - break; - - case 4: - { - ActiveMask.use = 0x00000000ffffffff; - _asm { - mov ebx, diff - mov edi, row - mov esi, prev_row - pxor mm0, mm0 - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] // Only time should need to read - // a=Raw(x-bpp) bytes -dpth4lp: - // Do first set of 4 bytes - movq mm3, [esi+ebx-8] // read c=Prior(x-bpp) bytes - punpckhbw mm1, mm0 // Unpack Low bytes of a - movq mm2, [esi + ebx] // load b=Prior(x) - punpcklbw mm2, mm0 // Unpack High bytes of b - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - punpckhbw mm3, mm0 // Unpack High bytes of c - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - paddw mm7, mm3 - pxor mm0, mm0 - packuswb mm7, mm1 - movq mm3, [esi + ebx] // load c=Prior(x-bpp) - pand mm7, ActiveMask - movq mm2, mm3 // load b=Prior(x) step 1 - paddb mm7, [edi + ebx] // add Paeth predictor with Raw(x) - punpcklbw mm3, mm0 // Unpack High bytes of c - movq [edi + ebx], mm7 // write back updated value - movq mm1, mm7 // Now mm1 will be used as Raw(x-bpp) - // Do second set of 4 bytes - punpckhbw mm2, mm0 // Unpack Low bytes of b - punpcklbw mm1, mm0 // Unpack Low bytes of a - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - pxor mm1, mm1 - paddw mm7, mm3 - pxor mm0, mm0 - // Step ex to next set of 8 bytes and repeat loop til done - add ebx, 8 - packuswb mm1, mm7 - paddb mm1, [edi + ebx - 8] // add Paeth predictor with Raw(x) - cmp ebx, MMXLength - movq [edi + ebx - 8], mm1 // write back updated value - // mm1 will be used as Raw(x-bpp) next loop - jb dpth4lp - } // end _asm block - } - break; - case 8: // bpp == 8 - { - ActiveMask.use = 0x00000000ffffffff; - _asm { - mov ebx, diff - mov edi, row - mov esi, prev_row - pxor mm0, mm0 - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] // Only time should need to read - // a=Raw(x-bpp) bytes -dpth8lp: - // Do first set of 4 bytes - movq mm3, [esi+ebx-8] // read c=Prior(x-bpp) bytes - punpcklbw mm1, mm0 // Unpack Low bytes of a - movq mm2, [esi + ebx] // load b=Prior(x) - punpcklbw mm2, mm0 // Unpack Low bytes of b - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - punpcklbw mm3, mm0 // Unpack Low bytes of c - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - paddw mm7, mm3 - pxor mm0, mm0 - packuswb mm7, mm1 - movq mm3, [esi+ebx-8] // read c=Prior(x-bpp) bytes - pand mm7, ActiveMask - movq mm2, [esi + ebx] // load b=Prior(x) - paddb mm7, [edi + ebx] // add Paeth predictor with Raw(x) - punpckhbw mm3, mm0 // Unpack High bytes of c - movq [edi + ebx], mm7 // write back updated value - movq mm1, [edi+ebx-8] // read a=Raw(x-bpp) bytes - - // Do second set of 4 bytes - punpckhbw mm2, mm0 // Unpack High bytes of b - punpckhbw mm1, mm0 // Unpack High bytes of a - // pav = p - a = (a + b - c) - a = b - c - movq mm4, mm2 - // pbv = p - b = (a + b - c) - b = a - c - movq mm5, mm1 - psubw mm4, mm3 - pxor mm7, mm7 - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - movq mm6, mm4 - psubw mm5, mm3 - // pa = abs(p-a) = abs(pav) - // pb = abs(p-b) = abs(pbv) - // pc = abs(p-c) = abs(pcv) - pcmpgtw mm0, mm4 // Create mask pav bytes < 0 - paddw mm6, mm5 - pand mm0, mm4 // Only pav bytes < 0 in mm7 - pcmpgtw mm7, mm5 // Create mask pbv bytes < 0 - psubw mm4, mm0 - pand mm7, mm5 // Only pbv bytes < 0 in mm0 - psubw mm4, mm0 - psubw mm5, mm7 - pxor mm0, mm0 - pcmpgtw mm0, mm6 // Create mask pcv bytes < 0 - pand mm0, mm6 // Only pav bytes < 0 in mm7 - psubw mm5, mm7 - psubw mm6, mm0 - // test pa <= pb - movq mm7, mm4 - psubw mm6, mm0 - pcmpgtw mm7, mm5 // pa > pb? - movq mm0, mm7 - // use mm7 mask to merge pa & pb - pand mm5, mm7 - // use mm0 mask copy to merge a & b - pand mm2, mm0 - pandn mm7, mm4 - pandn mm0, mm1 - paddw mm7, mm5 - paddw mm0, mm2 - // test ((pa <= pb)? pa:pb) <= pc - pcmpgtw mm7, mm6 // pab > pc? - pxor mm1, mm1 - pand mm3, mm7 - pandn mm7, mm0 - pxor mm1, mm1 - paddw mm7, mm3 - pxor mm0, mm0 - // Step ex to next set of 8 bytes and repeat loop til done - add ebx, 8 - packuswb mm1, mm7 - paddb mm1, [edi + ebx - 8] // add Paeth predictor with Raw(x) - cmp ebx, MMXLength - movq [edi + ebx - 8], mm1 // write back updated value - // mm1 will be used as Raw(x-bpp) next loop - jb dpth8lp - } // end _asm block - } - break; - - case 1: // bpp = 1 - case 2: // bpp = 2 - default: // bpp > 8 - { - _asm { - mov ebx, diff - cmp ebx, FullLength - jnb dpthdend - mov edi, row - mov esi, prev_row - // Do Paeth decode for remaining bytes - mov edx, ebx - xor ecx, ecx // zero ecx before using cl & cx in loop below - sub edx, bpp // Set edx = ebx - bpp -dpthdlp: - xor eax, eax - // pav = p - a = (a + b - c) - a = b - c - mov al, [esi + ebx] // load Prior(x) into al - mov cl, [esi + edx] // load Prior(x-bpp) into cl - sub eax, ecx // subtract Prior(x-bpp) - mov patemp, eax // Save pav for later use - xor eax, eax - // pbv = p - b = (a + b - c) - b = a - c - mov al, [edi + edx] // load Raw(x-bpp) into al - sub eax, ecx // subtract Prior(x-bpp) - mov ecx, eax - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - add eax, patemp // pcv = pav + pbv - // pc = abs(pcv) - test eax, 0x80000000 - jz dpthdpca - neg eax // reverse sign of neg values -dpthdpca: - mov pctemp, eax // save pc for later use - // pb = abs(pbv) - test ecx, 0x80000000 - jz dpthdpba - neg ecx // reverse sign of neg values -dpthdpba: - mov pbtemp, ecx // save pb for later use - // pa = abs(pav) - mov eax, patemp - test eax, 0x80000000 - jz dpthdpaa - neg eax // reverse sign of neg values -dpthdpaa: - mov patemp, eax // save pa for later use - // test if pa <= pb - cmp eax, ecx - jna dpthdabb - // pa > pb; now test if pb <= pc - cmp ecx, pctemp - jna dpthdbbc - // pb > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthdpaeth -dpthdbbc: - // pb <= pc; Raw(x) = Paeth(x) + Prior(x) - mov cl, [esi + ebx] // load Prior(x) into cl - jmp dpthdpaeth -dpthdabb: - // pa <= pb; now test if pa <= pc - cmp eax, pctemp - jna dpthdabc - // pa > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthdpaeth -dpthdabc: - // pa <= pc; Raw(x) = Paeth(x) + Raw(x-bpp) - mov cl, [edi + edx] // load Raw(x-bpp) into cl -dpthdpaeth: - inc ebx - inc edx - // Raw(x) = (Paeth(x) + Paeth_Predictor( a, b, c )) mod 256 - add [edi + ebx - 1], cl - cmp ebx, FullLength - jb dpthdlp -dpthdend: - } // end _asm block - } - return; // No need to go further with this one - } // end switch ( bpp ) - _asm - { - // MMX acceleration complete now do clean-up - // Check if any remaining bytes left to decode - mov ebx, MMXLength - cmp ebx, FullLength - jnb dpthend - mov edi, row - mov esi, prev_row - // Do Paeth decode for remaining bytes - mov edx, ebx - xor ecx, ecx // zero ecx before using cl & cx in loop below - sub edx, bpp // Set edx = ebx - bpp -dpthlp2: - xor eax, eax - // pav = p - a = (a + b - c) - a = b - c - mov al, [esi + ebx] // load Prior(x) into al - mov cl, [esi + edx] // load Prior(x-bpp) into cl - sub eax, ecx // subtract Prior(x-bpp) - mov patemp, eax // Save pav for later use - xor eax, eax - // pbv = p - b = (a + b - c) - b = a - c - mov al, [edi + edx] // load Raw(x-bpp) into al - sub eax, ecx // subtract Prior(x-bpp) - mov ecx, eax - // pcv = p - c = (a + b - c) -c = (a - c) + (b - c) = pav + pbv - add eax, patemp // pcv = pav + pbv - // pc = abs(pcv) - test eax, 0x80000000 - jz dpthpca2 - neg eax // reverse sign of neg values -dpthpca2: - mov pctemp, eax // save pc for later use - // pb = abs(pbv) - test ecx, 0x80000000 - jz dpthpba2 - neg ecx // reverse sign of neg values -dpthpba2: - mov pbtemp, ecx // save pb for later use - // pa = abs(pav) - mov eax, patemp - test eax, 0x80000000 - jz dpthpaa2 - neg eax // reverse sign of neg values -dpthpaa2: - mov patemp, eax // save pa for later use - // test if pa <= pb - cmp eax, ecx - jna dpthabb2 - // pa > pb; now test if pb <= pc - cmp ecx, pctemp - jna dpthbbc2 - // pb > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthpaeth2 -dpthbbc2: - // pb <= pc; Raw(x) = Paeth(x) + Prior(x) - mov cl, [esi + ebx] // load Prior(x) into cl - jmp dpthpaeth2 -dpthabb2: - // pa <= pb; now test if pa <= pc - cmp eax, pctemp - jna dpthabc2 - // pa > pc; Raw(x) = Paeth(x) + Prior(x-bpp) - mov cl, [esi + edx] // load Prior(x-bpp) into cl - jmp dpthpaeth2 -dpthabc2: - // pa <= pc; Raw(x) = Paeth(x) + Raw(x-bpp) - mov cl, [edi + edx] // load Raw(x-bpp) into cl -dpthpaeth2: - inc ebx - inc edx - // Raw(x) = (Paeth(x) + Paeth_Predictor( a, b, c )) mod 256 - add [edi + ebx - 1], cl - cmp ebx, FullLength - jb dpthlp2 -dpthend: - emms // End MMX instructions; prep for possible FP instrs. - } // end _asm block -} - -// Optimized code for PNG Sub filter decoder -void /* PRIVATE */ -png_read_filter_row_mmx_sub(png_row_infop row_info, png_bytep row) -{ - //int test; - int bpp; - png_uint_32 FullLength; - png_uint_32 MMXLength; - int diff; - - bpp = (row_info->pixel_depth + 7) >> 3; // Get # bytes per pixel - FullLength = row_info->rowbytes - bpp; // # of bytes to filter - _asm { - mov edi, row - mov esi, edi // lp = row - add edi, bpp // rp = row + bpp - xor eax, eax - // get # of bytes to alignment - mov diff, edi // take start of row - add diff, 0xf // add 7 + 8 to incr past - // alignment boundary - xor ebx, ebx - and diff, 0xfffffff8 // mask to alignment boundary - sub diff, edi // subtract from start ==> value - // ebx at alignment - jz dsubgo - // fix alignment -dsublp1: - mov al, [esi+ebx] - add [edi+ebx], al - inc ebx - cmp ebx, diff - jb dsublp1 -dsubgo: - mov ecx, FullLength - mov edx, ecx - sub edx, ebx // subtract alignment fix - and edx, 0x00000007 // calc bytes over mult of 8 - sub ecx, edx // drop over bytes from length - mov MMXLength, ecx - } // end _asm block - - // Now do the math for the rest of the row - switch ( bpp ) - { - case 3: - { - ActiveMask.use = 0x0000ffffff000000; - ShiftBpp.use = 24; // == 3 * 8 - ShiftRem.use = 40; // == 64 - 24 - _asm { - mov edi, row - movq mm7, ActiveMask // Load ActiveMask for 2nd active byte group - mov esi, edi // lp = row - add edi, bpp // rp = row + bpp - movq mm6, mm7 - mov ebx, diff - psllq mm6, ShiftBpp // Move mask in mm6 to cover 3rd active - // byte group - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] -dsub3lp: - psrlq mm1, ShiftRem // Shift data for adding 1st bpp bytes - // no need for mask; shift clears inactive bytes - // Add 1st active group - movq mm0, [edi+ebx] - paddb mm0, mm1 - // Add 2nd active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - pand mm1, mm7 // mask to use only 2nd active group - paddb mm0, mm1 - // Add 3rd active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - pand mm1, mm6 // mask to use only 3rd active group - add ebx, 8 - paddb mm0, mm1 - cmp ebx, MMXLength - movq [edi+ebx-8], mm0 // Write updated Raws back to array - // Prep for doing 1st add at top of loop - movq mm1, mm0 - jb dsub3lp - } // end _asm block - } - break; - - case 1: - { - // Placed here just in case this is a duplicate of the - // non-MMX code for the SUB filter in png_read_filter_row above - // - // png_bytep rp; - // png_bytep lp; - // png_uint_32 i; - // bpp = (row_info->pixel_depth + 7) >> 3; - // for (i = (png_uint_32)bpp, rp = row + bpp, lp = row; - // i < row_info->rowbytes; i++, rp++, lp++) - // { - // *rp = (png_byte)(((int)(*rp) + (int)(*lp)) & 0xff); - // } - _asm { - mov ebx, diff - mov edi, row - cmp ebx, FullLength - jnb dsub1end - mov esi, edi // lp = row - xor eax, eax - add edi, bpp // rp = row + bpp -dsub1lp: - mov al, [esi+ebx] - add [edi+ebx], al - inc ebx - cmp ebx, FullLength - jb dsub1lp -dsub1end: - } // end _asm block - } - return; - - case 6: - case 7: - case 4: - case 5: - { - ShiftBpp.use = bpp << 3; - ShiftRem.use = 64 - ShiftBpp.use; - _asm { - mov edi, row - mov ebx, diff - mov esi, edi // lp = row - add edi, bpp // rp = row + bpp - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] -dsub4lp: - psrlq mm1, ShiftRem // Shift data for adding 1st bpp bytes - // no need for mask; shift clears inactive bytes - movq mm0, [edi+ebx] - paddb mm0, mm1 - // Add 2nd active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - // there is no need for any mask - // since shift clears inactive bits/bytes - add ebx, 8 - paddb mm0, mm1 - cmp ebx, MMXLength - movq [edi+ebx-8], mm0 - movq mm1, mm0 // Prep for doing 1st add at top of loop - jb dsub4lp - } // end _asm block - } - break; - - case 2: - { - ActiveMask.use = 0x00000000ffff0000; - ShiftBpp.use = 16; // == 2 * 8 - ShiftRem.use = 48; // == 64 - 16 - _asm { - movq mm7, ActiveMask // Load ActiveMask for 2nd active byte group - mov ebx, diff - movq mm6, mm7 - mov edi, row - psllq mm6, ShiftBpp // Move mask in mm6 to cover 3rd active - // byte group - mov esi, edi // lp = row - movq mm5, mm6 - add edi, bpp // rp = row + bpp - psllq mm5, ShiftBpp // Move mask in mm5 to cover 4th active - // byte group - // PRIME the pump (load the first Raw(x-bpp) data set - movq mm1, [edi+ebx-8] -dsub2lp: - // Add 1st active group - psrlq mm1, ShiftRem // Shift data for adding 1st bpp bytes - // no need for mask; shift clears inactive - // bytes - movq mm0, [edi+ebx] - paddb mm0, mm1 - // Add 2nd active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - pand mm1, mm7 // mask to use only 2nd active group - paddb mm0, mm1 - // Add 3rd active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - pand mm1, mm6 // mask to use only 3rd active group - paddb mm0, mm1 - // Add 4th active group - movq mm1, mm0 // mov updated Raws to mm1 - psllq mm1, ShiftBpp // shift data to position correctly - pand mm1, mm5 // mask to use only 4th active group - add ebx, 8 - paddb mm0, mm1 - cmp ebx, MMXLength - movq [edi+ebx-8], mm0 // Write updated Raws back to array - movq mm1, mm0 // Prep for doing 1st add at top of loop - jb dsub2lp - } // end _asm block - } - break; - case 8: - { - _asm { - mov edi, row - mov ebx, diff - mov esi, edi // lp = row - add edi, bpp // rp = row + bpp - mov ecx, MMXLength - movq mm7, [edi+ebx-8] // PRIME the pump (load the first - // Raw(x-bpp) data set - and ecx, 0x0000003f // calc bytes over mult of 64 -dsub8lp: - movq mm0, [edi+ebx] // Load Sub(x) for 1st 8 bytes - paddb mm0, mm7 - movq mm1, [edi+ebx+8] // Load Sub(x) for 2nd 8 bytes - movq [edi+ebx], mm0 // Write Raw(x) for 1st 8 bytes - // Now mm0 will be used as Raw(x-bpp) for - // the 2nd group of 8 bytes. This will be - // repeated for each group of 8 bytes with - // the 8th group being used as the Raw(x-bpp) - // for the 1st group of the next loop. - paddb mm1, mm0 - movq mm2, [edi+ebx+16] // Load Sub(x) for 3rd 8 bytes - movq [edi+ebx+8], mm1 // Write Raw(x) for 2nd 8 bytes - paddb mm2, mm1 - movq mm3, [edi+ebx+24] // Load Sub(x) for 4th 8 bytes - movq [edi+ebx+16], mm2 // Write Raw(x) for 3rd 8 bytes - paddb mm3, mm2 - movq mm4, [edi+ebx+32] // Load Sub(x) for 5th 8 bytes - movq [edi+ebx+24], mm3 // Write Raw(x) for 4th 8 bytes - paddb mm4, mm3 - movq mm5, [edi+ebx+40] // Load Sub(x) for 6th 8 bytes - movq [edi+ebx+32], mm4 // Write Raw(x) for 5th 8 bytes - paddb mm5, mm4 - movq mm6, [edi+ebx+48] // Load Sub(x) for 7th 8 bytes - movq [edi+ebx+40], mm5 // Write Raw(x) for 6th 8 bytes - paddb mm6, mm5 - movq mm7, [edi+ebx+56] // Load Sub(x) for 8th 8 bytes - movq [edi+ebx+48], mm6 // Write Raw(x) for 7th 8 bytes - add ebx, 64 - paddb mm7, mm6 - cmp ebx, ecx - movq [edi+ebx-8], mm7 // Write Raw(x) for 8th 8 bytes - jb dsub8lp - cmp ebx, MMXLength - jnb dsub8lt8 -dsub8lpA: - movq mm0, [edi+ebx] - add ebx, 8 - paddb mm0, mm7 - cmp ebx, MMXLength - movq [edi+ebx-8], mm0 // use -8 to offset early add to ebx - movq mm7, mm0 // Move calculated Raw(x) data to mm1 to - // be the new Raw(x-bpp) for the next loop - jb dsub8lpA -dsub8lt8: - } // end _asm block - } - break; - - default: // bpp greater than 8 bytes - { - _asm { - mov ebx, diff - mov edi, row - mov esi, edi // lp = row - add edi, bpp // rp = row + bpp -dsubAlp: - movq mm0, [edi+ebx] - movq mm1, [esi+ebx] - add ebx, 8 - paddb mm0, mm1 - cmp ebx, MMXLength - movq [edi+ebx-8], mm0 // mov does not affect flags; -8 to offset - // add ebx - jb dsubAlp - } // end _asm block - } - break; - - } // end switch ( bpp ) - - _asm { - mov ebx, MMXLength - mov edi, row - cmp ebx, FullLength - jnb dsubend - mov esi, edi // lp = row - xor eax, eax - add edi, bpp // rp = row + bpp -dsublp2: - mov al, [esi+ebx] - add [edi+ebx], al - inc ebx - cmp ebx, FullLength - jb dsublp2 -dsubend: - emms // End MMX instructions; prep for possible FP instrs. - } // end _asm block -} - -// Optimized code for PNG Up filter decoder -void /* PRIVATE */ -png_read_filter_row_mmx_up(png_row_infop row_info, png_bytep row, - png_bytep prev_row) -{ - png_uint_32 len; - len = row_info->rowbytes; // # of bytes to filter - _asm { - mov edi, row - // get # of bytes to alignment - mov ecx, edi - xor ebx, ebx - add ecx, 0x7 - xor eax, eax - and ecx, 0xfffffff8 - mov esi, prev_row - sub ecx, edi - jz dupgo - // fix alignment -duplp1: - mov al, [edi+ebx] - add al, [esi+ebx] - inc ebx - cmp ebx, ecx - mov [edi + ebx-1], al // mov does not affect flags; -1 to offset inc ebx - jb duplp1 -dupgo: - mov ecx, len - mov edx, ecx - sub edx, ebx // subtract alignment fix - and edx, 0x0000003f // calc bytes over mult of 64 - sub ecx, edx // drop over bytes from length - // Unrolled loop - use all MMX registers and interleave to reduce - // number of branch instructions (loops) and reduce partial stalls -duploop: - movq mm1, [esi+ebx] - movq mm0, [edi+ebx] - movq mm3, [esi+ebx+8] - paddb mm0, mm1 - movq mm2, [edi+ebx+8] - movq [edi+ebx], mm0 - paddb mm2, mm3 - movq mm5, [esi+ebx+16] - movq [edi+ebx+8], mm2 - movq mm4, [edi+ebx+16] - movq mm7, [esi+ebx+24] - paddb mm4, mm5 - movq mm6, [edi+ebx+24] - movq [edi+ebx+16], mm4 - paddb mm6, mm7 - movq mm1, [esi+ebx+32] - movq [edi+ebx+24], mm6 - movq mm0, [edi+ebx+32] - movq mm3, [esi+ebx+40] - paddb mm0, mm1 - movq mm2, [edi+ebx+40] - movq [edi+ebx+32], mm0 - paddb mm2, mm3 - movq mm5, [esi+ebx+48] - movq [edi+ebx+40], mm2 - movq mm4, [edi+ebx+48] - movq mm7, [esi+ebx+56] - paddb mm4, mm5 - movq mm6, [edi+ebx+56] - movq [edi+ebx+48], mm4 - add ebx, 64 - paddb mm6, mm7 - cmp ebx, ecx - movq [edi+ebx-8], mm6 // (+56)movq does not affect flags; - // -8 to offset add ebx - jb duploop - - cmp edx, 0 // Test for bytes over mult of 64 - jz dupend - - - // 2 lines added by lcreeve@netins.net - // (mail 11 Jul 98 in png-implement list) - cmp edx, 8 //test for less than 8 bytes - jb duplt8 - - - add ecx, edx - and edx, 0x00000007 // calc bytes over mult of 8 - sub ecx, edx // drop over bytes from length - jz duplt8 - // Loop using MMX registers mm0 & mm1 to update 8 bytes simultaneously -duplpA: - movq mm1, [esi+ebx] - movq mm0, [edi+ebx] - add ebx, 8 - paddb mm0, mm1 - cmp ebx, ecx - movq [edi+ebx-8], mm0 // movq does not affect flags; -8 to offset add ebx - jb duplpA - cmp edx, 0 // Test for bytes over mult of 8 - jz dupend -duplt8: - xor eax, eax - add ecx, edx // move over byte count into counter - // Loop using x86 registers to update remaining bytes -duplp2: - mov al, [edi + ebx] - add al, [esi + ebx] - inc ebx - cmp ebx, ecx - mov [edi + ebx-1], al // mov does not affect flags; -1 to offset inc ebx - jb duplp2 -dupend: - // Conversion of filtered row completed - emms // End MMX instructions; prep for possible FP instrs. - } // end _asm block -} - - -// Optimized png_read_filter_row routines -void /* PRIVATE */ -png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep - row, png_bytep prev_row, int filter) -{ -#ifdef PNG_DEBUG - char filnm[6]; -#endif -#define UseMMX 1 - - if (mmx_supported == 2) - mmx_supported = mmxsupport(); - - if (!mmx_supported) - { - png_read_filter_row_c(png_ptr, row_info, row, prev_row, filter); - return ; - } - -#ifdef PNG_DEBUG - png_debug(1, "in png_read_filter_row\n"); -# if (UseMMX == 1) - png_debug1(0,"%s, ", "MMX"); -# else - png_debug1(0,"%s, ", "x86"); -# endif - switch (filter) - { - case 0: sprintf(filnm, "None "); - break; - case 1: sprintf(filnm, "Sub "); - break; - case 2: sprintf(filnm, "Up "); - break; - case 3: sprintf(filnm, "Avg "); - break; - case 4: sprintf(filnm, "Paeth"); - break; - default: sprintf(filnm, "Unknw"); - break; - } - png_debug2(0,"row=%5d, %s, ", png_ptr->row_number, filnm); - png_debug2(0, "pd=%2d, b=%d, ", (int)row_info->pixel_depth, - (int)((row_info->pixel_depth + 7) >> 3)); - png_debug1(0,"len=%8d, ", row_info->rowbytes); -#endif - - switch (filter) - { - case PNG_FILTER_VALUE_NONE: - break; - case PNG_FILTER_VALUE_SUB: - { -#if (UseMMX == 1) - if ((row_info->pixel_depth > 8) && - (row_info->rowbytes >= 128) ) - { - png_read_filter_row_mmx_sub(row_info, row); - } - else -#endif - { - png_uint_32 i; - png_uint_32 istop = row_info->rowbytes; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_bytep rp = row + bpp; - png_bytep lp = row; - - for (i = bpp; i < istop; i++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff); - rp++; - } - } //end !UseMMX - break; - } - case PNG_FILTER_VALUE_UP: - { -#if (UseMMX == 1) - if ((row_info->pixel_depth > 8) && - (row_info->rowbytes >= 128) ) - { - png_read_filter_row_mmx_up(row_info, row, prev_row); - } //end if UseMMX - else -#endif - { - png_bytep rp; - png_bytep pp; - png_uint_32 i; - for (i = 0, rp = row, pp = prev_row; - i < row_info->rowbytes; i++, rp++, pp++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*pp)) & 0xff); - } - } //end !UseMMX - break; - } - case PNG_FILTER_VALUE_AVG: - { -#if (UseMMX == 1) - if ((row_info->pixel_depth > 8) && - (row_info->rowbytes >= 128) ) - { - png_read_filter_row_mmx_avg(row_info, row, prev_row); - } //end if UseMMX - else -#endif - { - png_uint_32 i; - png_bytep rp = row; - png_bytep pp = prev_row; - png_bytep lp = row; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_uint_32 istop = row_info->rowbytes - bpp; - - for (i = 0; i < bpp; i++) - { - *rp = (png_byte)(((int)(*rp) + - ((int)(*pp++) >> 1)) & 0xff); - rp++; - } - - for (i = 0; i < istop; i++) - { - *rp = (png_byte)(((int)(*rp) + - ((int)(*pp++ + *lp++) >> 1)) & 0xff); - rp++; - } - } //end !UseMMX - break; - } - case PNG_FILTER_VALUE_PAETH: - { -#if (UseMMX == 1) - if ((row_info->pixel_depth > 8) && - (row_info->rowbytes >= 128) ) - { - png_read_filter_row_mmx_paeth(row_info, row, prev_row); - } //end if UseMMX - else -#endif - { - png_uint_32 i; - png_bytep rp = row; - png_bytep pp = prev_row; - png_bytep lp = row; - png_bytep cp = prev_row; - png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; - png_uint_32 istop=row_info->rowbytes - bpp; - - for (i = 0; i < bpp; i++) - { - *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); - rp++; - } - - for (i = 0; i < istop; i++) // use leftover rp,pp - { - int a, b, c, pa, pb, pc, p; - - a = *lp++; - b = *pp++; - c = *cp++; - - p = b - c; - pc = a - c; - -#ifdef PNG_USE_ABS - pa = abs(p); - pb = abs(pc); - pc = abs(p + pc); -#else - pa = p < 0 ? -p : p; - pb = pc < 0 ? -pc : pc; - pc = (p + pc) < 0 ? -(p + pc) : p + pc; -#endif - - /* - if (pa <= pb && pa <= pc) - p = a; - else if (pb <= pc) - p = b; - else - p = c; - */ - - p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; - - *rp = (png_byte)(((int)(*rp) + p) & 0xff); - rp++; - } - } //end !UseMMX - break; - } - default: - png_warning(png_ptr, "Ignoring bad adaptive filter type"); - *row=0; - break; - } -} -#endif diff --git a/src/libs/pdflib/libs/tiff/Jamfile b/src/libs/pdflib/libs/tiff/Jamfile deleted file mode 100644 index e68e277bd1..0000000000 --- a/src/libs/pdflib/libs/tiff/Jamfile +++ /dev/null @@ -1,39 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib libs tiff ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs pdcore ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs flate ] ; - -UseLibraryHeaders pdflib ; - -StaticLibrary libpdf.a : - tif_auxx.c - tif_close.c - tif_codec.c - tif_compress.c - tif_dir.c - tif_dirinfo.c - tif_dirread.c - tif_dumpmode.c - tif_error.c - tif_fax3.c - tif_fax3sm.c - tif_getimage.c - tif_luv.c - tif_lzw.c - tif_next.c - tif_open.c - tif_packbits.c - tif_predict.c - tif_read.c - tif_strip.c - tif_swab.c - tif_thunder.c - tif_tile.c - tif_unix.c - tif_version.c - tif_warning.c - tif_zip.c -; - diff --git a/src/libs/pdflib/libs/tiff/Makefile b/src/libs/pdflib/libs/tiff/Makefile deleted file mode 100644 index f88cd3bf40..0000000000 --- a/src/libs/pdflib/libs/tiff/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -# Makefile for tifflib -# This generates a libtool convenience library -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -include ../../config/mkcommon.inc - -LIBNAME = $(TIFFLIBLINK) -INCLUDES = $(PDCORELIBINC) $(FLATELIBINC) - -SRC = \ - $(srcdir)/tif_auxx.c \ - $(srcdir)/tif_close.c \ - $(srcdir)/tif_codec.c \ - $(srcdir)/tif_compress.c \ - $(srcdir)/tif_dir.c \ - $(srcdir)/tif_dirinfo.c \ - $(srcdir)/tif_dirread.c \ - $(srcdir)/tif_dumpmode.c \ - $(srcdir)/tif_error.c \ - $(srcdir)/tif_fax3.c \ - $(srcdir)/tif_fax3sm.c \ - $(srcdir)/tif_getimage.c \ - $(srcdir)/tif_luv.c \ - $(srcdir)/tif_lzw.c \ - $(srcdir)/tif_next.c \ - $(srcdir)/tif_open.c \ - $(srcdir)/tif_packbits.c \ - $(srcdir)/tif_predict.c \ - $(srcdir)/tif_read.c \ - $(srcdir)/tif_strip.c \ - $(srcdir)/tif_swab.c \ - $(srcdir)/tif_tile.c \ - $(srcdir)/tif_unix.c \ - $(srcdir)/tif_version.c \ - $(srcdir)/tif_warning.c \ - $(srcdir)/tif_zip.c - -# unused modules -# $(srcdir)/tif_dirwrite.c \ -# $(srcdir)/tif_flush.c \ -# $(srcdir)/tif_jpeg.c \ -# $(srcdir)/tif_ojeg.c \ -# $(srcdir)/tif_pixarlog.c \ -# $(srcdir)/tif_print.c \ -# $(srcdir)/tif_thunder.c \ -# $(srcdir)/tif_write.c - - -OBJS = \ - $(srcdir)/tif_auxx$(LO) \ - $(srcdir)/tif_close$(LO) \ - $(srcdir)/tif_codec$(LO) \ - $(srcdir)/tif_compress$(LO) \ - $(srcdir)/tif_dir$(LO) \ - $(srcdir)/tif_dirinfo$(LO) \ - $(srcdir)/tif_dirread$(LO) \ - $(srcdir)/tif_dumpmode$(LO) \ - $(srcdir)/tif_error$(LO) \ - $(srcdir)/tif_fax3$(LO) \ - $(srcdir)/tif_fax3sm$(LO) \ - $(srcdir)/tif_getimage$(LO) \ - $(srcdir)/tif_luv$(LO) \ - $(srcdir)/tif_lzw$(LO) \ - $(srcdir)/tif_next$(LO) \ - $(srcdir)/tif_open$(LO) \ - $(srcdir)/tif_packbits$(LO) \ - $(srcdir)/tif_predict$(LO) \ - $(srcdir)/tif_read$(LO) \ - $(srcdir)/tif_strip$(LO) \ - $(srcdir)/tif_swab$(LO) \ - $(srcdir)/tif_tile$(LO) \ - $(srcdir)/tif_unix$(LO) \ - $(srcdir)/tif_version$(LO) \ - $(srcdir)/tif_warning$(LO) \ - $(srcdir)/tif_zip$(LO) - -# unused modules -# $(srcdir)/tif_dirwrite$(LO) \ -# $(srcdir)/tif_flush$(LO) \ -# $(srcdir)/tif_jpeg.c \ -# $(srcdir)/tif_ojeg.c \ -# $(srcdir)/tif_print$(LO) \ -# $(srcdir)/tif_pixarlog$(LO) \ -# $(srcdir)/tif_thunder$(LO) \ -# $(srcdir)/tif_write$(LO) - -include ../../config/mklibs.inc - -# Automatically generated dependencies diff --git a/src/libs/pdflib/libs/tiff/port.h b/src/libs/pdflib/libs/tiff/port.h deleted file mode 100644 index eec458fe98..0000000000 --- a/src/libs/pdflib/libs/tiff/port.h +++ /dev/null @@ -1,226 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: port.h 28305 2008-10-23 21:46:26Z bonefish $ */ - -#ifndef TIFF_PORT_H -#define TIFF_PORT_H 1 - -/* not used: PDFlib GmbH: -#define HOST_FILLORDER FILLORDER_LSB2MSB -*/ -#define HOST_BIGENDIAN 1 - -#include /* PDFlib GmbH: */ -#include -#include -#include - -/* PDFlib GmbH: */ -#if !defined(_WIN32_WCE) -#if defined(WIN32) || defined(OS2) -#include -#include -#else -#include /* TODO: fix me */ -#endif -#endif /* _WIN32_CE */ - -typedef unsigned char tif_char; -typedef unsigned short tif_short; -typedef unsigned int tif_int; -typedef unsigned long tif_long; - - -/* PDFlib GmbH: */ -/* - * This maze of checks controls defines or not the - * target system has BSD-style typdedefs declared in - * an include file and/or whether or not to include - * to get the SEEK_* definitions. Some - * additional includes are also done to pull in the - * appropriate definitions we're looking for. - */ -#if (defined macintosh || defined __POWERPC__ || \ - defined __CFM68K__ || defined __MC68K__) && \ - !defined MAC && !(defined(__BEOS__) || defined(__HAIKU__)) -# define MAC -#endif - -#if defined(WIN32) || defined(OS2) -# define BSDTYPES -#elif defined(MAC) -# define BSDTYPES -# ifndef HAVE_UNISTD_H /* PDFlib GmbH: avoid warning on OS X */ -# define HAVE_UNISTD_H 0 -# endif -#else -# include -#endif - - -typedef double dblparam_t; - -#undef INLINE /* PDFlib GmbH */ -#define INLINE /* */ - -#define GLOBALDATA(TYPE,NAME) extern TYPE NAME - -/* to allow the use of PDFlib inside of programs using TIFFlib themselves */ -/* Make sure to observe the limit of 31 characters for function names! */ -#define LogL10fromY pdf_LogL10fromY -#define LogL10toY pdf_LogL10toY -#define LogL16fromY pdf_LogL16fromY -#define LogL16toY pdf_LogL16toY -#define LogLuv24fromXYZ pdf_LogLuv24fromXYZ -#define LogLuv24toXYZ pdf_LogLuv24toXYZ -#define LogLuv32fromXYZ pdf_LogLuv32fromXYZ -#define LogLuv32toXYZ pdf_LogLuv32toXYZ -#define TIFFCheckTile pdf_TIFFCheckTile -#define TIFFClientOpen pdf_TIFFClientOpen -#define TIFFClose pdf_TIFFClose -#define TIFFComputeStrip pdf_TIFFComputeStrip -#define TIFFComputeTile pdf_TIFFComputeTile -#define TIFFCreateDirectory pdf_TIFFCreateDirectory -#define TIFFCurrentDirectory pdf_TIFFCurrentDirectory -#define TIFFCurrentRow pdf_TIFFCurrentRow -#define TIFFCurrentStrip pdf_TIFFCurrentStrip -#define TIFFCurrentTile pdf_TIFFCurrentTile -#define TIFFDefaultDirectory pdf_TIFFDefaultDirectory -#define TIFFDefaultStripSize pdf_TIFFDefaultStripSize -#define TIFFDefaultTileSize pdf_TIFFDefaultTileSize -#define TIFFError pdf_TIFFError -#define TIFFFaxBlackCodes pdf_TIFFFaxBlackCodes -#define TIFFFaxBlackTable pdf_TIFFFaxBlackTable -#define TIFFFaxMainTable pdf_TIFFFaxMainTable -#define TIFFFaxWhiteCodes pdf_TIFFFaxWhiteCodes -#define TIFFFaxWhiteTable pdf_TIFFFaxWhiteTable -#define TIFFFdOpen pdf_TIFFFdOpen -#define TIFFFileName pdf_TIFFFileName -#define TIFFFindCODEC pdf_TIFFFindCODEC -#define TIFFFlush pdf_TIFFFlush -#define TIFFFlushData pdf_TIFFFlushData -#define TIFFFlushData1 pdf_TIFFFlushData1 -#define TIFFFreeDirectory pdf_TIFFFreeDirectory -#define TIFFGetBitRevTable pdf_TIFFGetBitRevTable -#define TIFFGetField pdf_TIFFGetField -#define TIFFGetFieldDefaulted pdf_TIFFGetFieldDefaulted -#define TIFFGetMode pdf_TIFFGetMode -#define TIFFGetVersion pdf_TIFFGetVersion -#define TIFFInitCCITTFax3 pdf_TIFFInitCCITTFax3 -#define TIFFInitCCITTFax4 pdf_TIFFInitCCITTFax4 -#define TIFFInitCCITTRLE pdf_TIFFInitCCITTRLE -#define TIFFInitCCITTRLEW pdf_TIFFInitCCITTRLEW -#define TIFFInitDumpMode pdf_TIFFInitDumpMode -#define TIFFInitLZW pdf_TIFFInitLZW -#define TIFFInitNeXT pdf_TIFFInitNeXT -#define TIFFInitPackBits pdf_TIFFInitPackBits -#define TIFFInitSGILog pdf_TIFFInitSGILog -#define TIFFInitZIP pdf_TIFFInitZIP -#define TIFFIsByteSwapped pdf_TIFFIsByteSwapped -#define TIFFIsMSB2LSB pdf_TIFFIsMSB2LSB -#define TIFFIsTiled pdf_TIFFIsTiled -#define TIFFIsUpSampled pdf_TIFFIsUpSampled -#define TIFFNumberOfStrips pdf_TIFFNumberOfStrips -#define TIFFNumberOfTiles pdf_TIFFNumberOfTiles -#define TIFFOpen pdf_TIFFOpen -#define TIFFPredictorInit pdf_TIFFPredictorInit -#define TIFFPrintDirectory pdf_TIFFPrintDirectory -#define TIFFRGBAImageBegin pdf_TIFFRGBAImageBegin -#define TIFFRGBAImageEnd pdf_TIFFRGBAImageEnd -#define TIFFRGBAImageGet pdf_TIFFRGBAImageGet -#define TIFFRGBAImageOK pdf_TIFFRGBAImageOK -#define TIFFRasterScanlineSize pdf_TIFFRasterScanlineSize -#define TIFFReadBufferSetup pdf_TIFFReadBufferSetup -#define TIFFReadDirectory pdf_TIFFReadDirectory -#define TIFFReadEncodedStrip pdf_TIFFReadEncodedStrip -#define TIFFReadEncodedTile pdf_TIFFReadEncodedTile -#define TIFFReadRGBAImage pdf_TIFFReadRGBAImage -#define TIFFReadRGBAStrip pdf_TIFFReadRGBAStrip -#define TIFFReadRGBATile pdf_TIFFReadRGBATile -#define TIFFReadRawStrip pdf_TIFFReadRawStrip -#define TIFFReadRawTile pdf_TIFFReadRawTile -#define TIFFReadScanline pdf_TIFFReadScanline -#define TIFFReadTile pdf_TIFFReadTile -#define TIFFReassignTagToIgnore pdf_TIFFReassignTagToIgnore -#define TIFFReverseBits pdf_TIFFReverseBits -#define TIFFRewriteDirectory pdf_TIFFRewriteDirectory -#define TIFFScanlineSize pdf_TIFFScanlineSize -#define TIFFSetCompressionScheme pdf_TIFFSetCompressionScheme -#define TIFFSetDirectory pdf_TIFFSetDirectory -#define TIFFSetErrorHandler pdf_TIFFSetErrorHandler -#define TIFFSetField pdf_TIFFSetField -#define TIFFSetTagExtender pdf_TIFFSetTagExtender -#define TIFFSetWarningHandler pdf_TIFFSetWarningHandler -#define TIFFSetWriteOffset pdf_TIFFSetWriteOffset -#define TIFFStripSize pdf_TIFFStripSize -#define TIFFSwabArrayOfDouble pdf_TIFFSwabArrayOfDouble -#define TIFFSwabArrayOfLong pdf_TIFFSwabArrayOfLong -#define TIFFSwabArrayOfShort pdf_TIFFSwabArrayOfShort -#define TIFFSwabDouble pdf_TIFFSwabDouble -#define TIFFSwabLong pdf_TIFFSwabLong -#define TIFFSwabShort pdf_TIFFSwabShort -#define TIFFTileRowSize pdf_TIFFTileRowSize -#define TIFFTileSize pdf_TIFFTileSize -#define TIFFVGetField pdf_TIFFVGetField -#define TIFFVGetFieldDefaulted pdf_TIFFVGetFieldDefaulted -#define TIFFVSetField pdf_TIFFVSetField -#define TIFFVStripSize pdf_TIFFVStripSize -#define TIFFVTileSize pdf_TIFFVTileSize -#define TIFFWarning pdf_TIFFWarning -#define TIFFWriteBufferSetup pdf_TIFFWriteBufferSetup -#define TIFFWriteCheck pdf_TIFFWriteCheck -#define TIFFWriteDirectory pdf_TIFFWriteDirectory -#define TIFFWriteEncodedStrip pdf_TIFFWriteEncodedStrip -#define TIFFWriteEncodedTile pdf_TIFFWriteEncodedTile -#define TIFFWriteRawStrip pdf_TIFFWriteRawStrip -#define TIFFWriteRawTile pdf_TIFFWriteRawTile -#define TIFFWriteScanline pdf_TIFFWriteScanline -#define TIFFWriteTile pdf_TIFFWriteTile -#define XYZtoRGB24 pdf_XYZtoRGB24 -#define _TIFFBuiltinCODECS pdf__TIFFBuiltinCODECS -#define _TIFFDefaultStripSize pdf__TIFFDefaultStripSize -#define _TIFFDefaultTileSize pdf__TIFFDefaultTileSize -#define _TIFFFax3fillruns pdf__TIFFFax3fillruns -#define _TIFFFieldWithTag pdf__TIFFFieldWithTag -#define _TIFFFindFieldInfo pdf__TIFFFindFieldInfo -#define _TIFFMergeFieldInfo pdf__TIFFMergeFieldInfo -#define _TIFFNoPostDecode pdf__TIFFNoPostDecode -#define _TIFFNoPreCode pdf__TIFFNoPreCode -#define _TIFFNoRowDecode pdf__TIFFNoRowDecode -#define _TIFFNoRowEncode pdf__TIFFNoRowEncode -#define _TIFFNoSeek pdf__TIFFNoSeek -#define _TIFFNoStripDecode pdf__TIFFNoStripDecode -#define _TIFFNoStripEncode pdf__TIFFNoStripEncode -#define _TIFFNoTileDecode pdf__TIFFNoTileDecode -#define _TIFFNoTileEncode pdf__TIFFNoTileEncode -#define _TIFFPrintFieldInfo pdf__TIFFPrintFieldInfo -#define _TIFFSampleToTagType pdf__TIFFSampleToTagType - -/* Note: function name shortened to facilitate porting */ -#define _TIFFSetDefaultCompressionState pdf__TIFFSetDefaultCompState - -#define _TIFFSetupFieldInfo pdf__TIFFSetupFieldInfo -#define _TIFFSwab16BitData pdf__TIFFSwab16BitData -#define _TIFFSwab32BitData pdf__TIFFSwab32BitData -#define _TIFFSwab64BitData pdf__TIFFSwab64BitData -#define _TIFFerrorHandler pdf__TIFFerrorHandler -#define _TIFFfree pdf__TIFFfree -#define _TIFFgetMode pdf__TIFFgetMode -#define _TIFFmalloc pdf__TIFFmalloc -#define _TIFFmemcmp pdf__TIFFmemcmp -#define _TIFFmemcpy pdf__TIFFmemcpy -#define _TIFFmemset pdf__TIFFmemset -#define _TIFFprintAscii pdf__TIFFprintAscii -#define _TIFFprintAsciiTag pdf__TIFFprintAsciiTag -#define _TIFFrealloc pdf__TIFFrealloc -#define _TIFFsetByteArray pdf__TIFFsetByteArray -#define _TIFFsetDoubleArray pdf__TIFFsetDoubleArray -#define _TIFFsetFloatArray pdf__TIFFsetFloatArray -#define _TIFFsetLongArray pdf__TIFFsetLongArray -#define _TIFFsetNString pdf__TIFFsetNString -#define _TIFFsetShortArray pdf__TIFFsetShortArray -#define _TIFFsetString pdf__TIFFsetString -#define _TIFFwarningHandler pdf__TIFFwarningHandler -#define tiffDataWidth pdf_tiffDataWidth -#define uv_decode pdf_uv_decode -#define uv_encode pdf_uv_encode - -#endif diff --git a/src/libs/pdflib/libs/tiff/t4.h b/src/libs/pdflib/libs/tiff/t4.h deleted file mode 100644 index 8edd843095..0000000000 --- a/src/libs/pdflib/libs/tiff/t4.h +++ /dev/null @@ -1,285 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: t4.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _T4_ -#define _T4_ -/* - * CCITT T.4 1D Huffman runlength codes and - * related definitions. Given the small sizes - * of these tables it does not seem - * worthwhile to make code & length 8 bits. - */ -typedef struct tableentry { - unsigned short length; /* bit length of g3 code */ - unsigned short code; /* g3 code */ - short runlen; /* run length in bits */ -} tableentry; - -#define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */ - -/* status values returned instead of a run length */ -#define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */ -#define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */ -#define G3CODE_EOF -3 /* end of input data */ -#define G3CODE_INCOMP -4 /* incomplete run code */ - -/* - * Note that these tables are ordered such that the - * index into the table is known to be either the - * run length, or (run length / 64) + a fixed offset. - * - * NB: The G3CODE_INVALID entries are only used - * during state generation (see mkg3states.c). - */ -#ifdef G3CODES -const tableentry TIFFFaxWhiteCodes[] = { - { 8, 0x35, 0 }, /* 0011 0101 */ - { 6, 0x7, 1 }, /* 0001 11 */ - { 4, 0x7, 2 }, /* 0111 */ - { 4, 0x8, 3 }, /* 1000 */ - { 4, 0xB, 4 }, /* 1011 */ - { 4, 0xC, 5 }, /* 1100 */ - { 4, 0xE, 6 }, /* 1110 */ - { 4, 0xF, 7 }, /* 1111 */ - { 5, 0x13, 8 }, /* 1001 1 */ - { 5, 0x14, 9 }, /* 1010 0 */ - { 5, 0x7, 10 }, /* 0011 1 */ - { 5, 0x8, 11 }, /* 0100 0 */ - { 6, 0x8, 12 }, /* 0010 00 */ - { 6, 0x3, 13 }, /* 0000 11 */ - { 6, 0x34, 14 }, /* 1101 00 */ - { 6, 0x35, 15 }, /* 1101 01 */ - { 6, 0x2A, 16 }, /* 1010 10 */ - { 6, 0x2B, 17 }, /* 1010 11 */ - { 7, 0x27, 18 }, /* 0100 111 */ - { 7, 0xC, 19 }, /* 0001 100 */ - { 7, 0x8, 20 }, /* 0001 000 */ - { 7, 0x17, 21 }, /* 0010 111 */ - { 7, 0x3, 22 }, /* 0000 011 */ - { 7, 0x4, 23 }, /* 0000 100 */ - { 7, 0x28, 24 }, /* 0101 000 */ - { 7, 0x2B, 25 }, /* 0101 011 */ - { 7, 0x13, 26 }, /* 0010 011 */ - { 7, 0x24, 27 }, /* 0100 100 */ - { 7, 0x18, 28 }, /* 0011 000 */ - { 8, 0x2, 29 }, /* 0000 0010 */ - { 8, 0x3, 30 }, /* 0000 0011 */ - { 8, 0x1A, 31 }, /* 0001 1010 */ - { 8, 0x1B, 32 }, /* 0001 1011 */ - { 8, 0x12, 33 }, /* 0001 0010 */ - { 8, 0x13, 34 }, /* 0001 0011 */ - { 8, 0x14, 35 }, /* 0001 0100 */ - { 8, 0x15, 36 }, /* 0001 0101 */ - { 8, 0x16, 37 }, /* 0001 0110 */ - { 8, 0x17, 38 }, /* 0001 0111 */ - { 8, 0x28, 39 }, /* 0010 1000 */ - { 8, 0x29, 40 }, /* 0010 1001 */ - { 8, 0x2A, 41 }, /* 0010 1010 */ - { 8, 0x2B, 42 }, /* 0010 1011 */ - { 8, 0x2C, 43 }, /* 0010 1100 */ - { 8, 0x2D, 44 }, /* 0010 1101 */ - { 8, 0x4, 45 }, /* 0000 0100 */ - { 8, 0x5, 46 }, /* 0000 0101 */ - { 8, 0xA, 47 }, /* 0000 1010 */ - { 8, 0xB, 48 }, /* 0000 1011 */ - { 8, 0x52, 49 }, /* 0101 0010 */ - { 8, 0x53, 50 }, /* 0101 0011 */ - { 8, 0x54, 51 }, /* 0101 0100 */ - { 8, 0x55, 52 }, /* 0101 0101 */ - { 8, 0x24, 53 }, /* 0010 0100 */ - { 8, 0x25, 54 }, /* 0010 0101 */ - { 8, 0x58, 55 }, /* 0101 1000 */ - { 8, 0x59, 56 }, /* 0101 1001 */ - { 8, 0x5A, 57 }, /* 0101 1010 */ - { 8, 0x5B, 58 }, /* 0101 1011 */ - { 8, 0x4A, 59 }, /* 0100 1010 */ - { 8, 0x4B, 60 }, /* 0100 1011 */ - { 8, 0x32, 61 }, /* 0011 0010 */ - { 8, 0x33, 62 }, /* 0011 0011 */ - { 8, 0x34, 63 }, /* 0011 0100 */ - { 5, 0x1B, 64 }, /* 1101 1 */ - { 5, 0x12, 128 }, /* 1001 0 */ - { 6, 0x17, 192 }, /* 0101 11 */ - { 7, 0x37, 256 }, /* 0110 111 */ - { 8, 0x36, 320 }, /* 0011 0110 */ - { 8, 0x37, 384 }, /* 0011 0111 */ - { 8, 0x64, 448 }, /* 0110 0100 */ - { 8, 0x65, 512 }, /* 0110 0101 */ - { 8, 0x68, 576 }, /* 0110 1000 */ - { 8, 0x67, 640 }, /* 0110 0111 */ - { 9, 0xCC, 704 }, /* 0110 0110 0 */ - { 9, 0xCD, 768 }, /* 0110 0110 1 */ - { 9, 0xD2, 832 }, /* 0110 1001 0 */ - { 9, 0xD3, 896 }, /* 0110 1001 1 */ - { 9, 0xD4, 960 }, /* 0110 1010 0 */ - { 9, 0xD5, 1024 }, /* 0110 1010 1 */ - { 9, 0xD6, 1088 }, /* 0110 1011 0 */ - { 9, 0xD7, 1152 }, /* 0110 1011 1 */ - { 9, 0xD8, 1216 }, /* 0110 1100 0 */ - { 9, 0xD9, 1280 }, /* 0110 1100 1 */ - { 9, 0xDA, 1344 }, /* 0110 1101 0 */ - { 9, 0xDB, 1408 }, /* 0110 1101 1 */ - { 9, 0x98, 1472 }, /* 0100 1100 0 */ - { 9, 0x99, 1536 }, /* 0100 1100 1 */ - { 9, 0x9A, 1600 }, /* 0100 1101 0 */ - { 6, 0x18, 1664 }, /* 0110 00 */ - { 9, 0x9B, 1728 }, /* 0100 1101 1 */ - { 11, 0x8, 1792 }, /* 0000 0001 000 */ - { 11, 0xC, 1856 }, /* 0000 0001 100 */ - { 11, 0xD, 1920 }, /* 0000 0001 101 */ - { 12, 0x12, 1984 }, /* 0000 0001 0010 */ - { 12, 0x13, 2048 }, /* 0000 0001 0011 */ - { 12, 0x14, 2112 }, /* 0000 0001 0100 */ - { 12, 0x15, 2176 }, /* 0000 0001 0101 */ - { 12, 0x16, 2240 }, /* 0000 0001 0110 */ - { 12, 0x17, 2304 }, /* 0000 0001 0111 */ - { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ - { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ - { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ - { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ - { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ - { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ - { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ - { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ - { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ -}; - -const tableentry TIFFFaxBlackCodes[] = { - { 10, 0x37, 0 }, /* 0000 1101 11 */ - { 3, 0x2, 1 }, /* 010 */ - { 2, 0x3, 2 }, /* 11 */ - { 2, 0x2, 3 }, /* 10 */ - { 3, 0x3, 4 }, /* 011 */ - { 4, 0x3, 5 }, /* 0011 */ - { 4, 0x2, 6 }, /* 0010 */ - { 5, 0x3, 7 }, /* 0001 1 */ - { 6, 0x5, 8 }, /* 0001 01 */ - { 6, 0x4, 9 }, /* 0001 00 */ - { 7, 0x4, 10 }, /* 0000 100 */ - { 7, 0x5, 11 }, /* 0000 101 */ - { 7, 0x7, 12 }, /* 0000 111 */ - { 8, 0x4, 13 }, /* 0000 0100 */ - { 8, 0x7, 14 }, /* 0000 0111 */ - { 9, 0x18, 15 }, /* 0000 1100 0 */ - { 10, 0x17, 16 }, /* 0000 0101 11 */ - { 10, 0x18, 17 }, /* 0000 0110 00 */ - { 10, 0x8, 18 }, /* 0000 0010 00 */ - { 11, 0x67, 19 }, /* 0000 1100 111 */ - { 11, 0x68, 20 }, /* 0000 1101 000 */ - { 11, 0x6C, 21 }, /* 0000 1101 100 */ - { 11, 0x37, 22 }, /* 0000 0110 111 */ - { 11, 0x28, 23 }, /* 0000 0101 000 */ - { 11, 0x17, 24 }, /* 0000 0010 111 */ - { 11, 0x18, 25 }, /* 0000 0011 000 */ - { 12, 0xCA, 26 }, /* 0000 1100 1010 */ - { 12, 0xCB, 27 }, /* 0000 1100 1011 */ - { 12, 0xCC, 28 }, /* 0000 1100 1100 */ - { 12, 0xCD, 29 }, /* 0000 1100 1101 */ - { 12, 0x68, 30 }, /* 0000 0110 1000 */ - { 12, 0x69, 31 }, /* 0000 0110 1001 */ - { 12, 0x6A, 32 }, /* 0000 0110 1010 */ - { 12, 0x6B, 33 }, /* 0000 0110 1011 */ - { 12, 0xD2, 34 }, /* 0000 1101 0010 */ - { 12, 0xD3, 35 }, /* 0000 1101 0011 */ - { 12, 0xD4, 36 }, /* 0000 1101 0100 */ - { 12, 0xD5, 37 }, /* 0000 1101 0101 */ - { 12, 0xD6, 38 }, /* 0000 1101 0110 */ - { 12, 0xD7, 39 }, /* 0000 1101 0111 */ - { 12, 0x6C, 40 }, /* 0000 0110 1100 */ - { 12, 0x6D, 41 }, /* 0000 0110 1101 */ - { 12, 0xDA, 42 }, /* 0000 1101 1010 */ - { 12, 0xDB, 43 }, /* 0000 1101 1011 */ - { 12, 0x54, 44 }, /* 0000 0101 0100 */ - { 12, 0x55, 45 }, /* 0000 0101 0101 */ - { 12, 0x56, 46 }, /* 0000 0101 0110 */ - { 12, 0x57, 47 }, /* 0000 0101 0111 */ - { 12, 0x64, 48 }, /* 0000 0110 0100 */ - { 12, 0x65, 49 }, /* 0000 0110 0101 */ - { 12, 0x52, 50 }, /* 0000 0101 0010 */ - { 12, 0x53, 51 }, /* 0000 0101 0011 */ - { 12, 0x24, 52 }, /* 0000 0010 0100 */ - { 12, 0x37, 53 }, /* 0000 0011 0111 */ - { 12, 0x38, 54 }, /* 0000 0011 1000 */ - { 12, 0x27, 55 }, /* 0000 0010 0111 */ - { 12, 0x28, 56 }, /* 0000 0010 1000 */ - { 12, 0x58, 57 }, /* 0000 0101 1000 */ - { 12, 0x59, 58 }, /* 0000 0101 1001 */ - { 12, 0x2B, 59 }, /* 0000 0010 1011 */ - { 12, 0x2C, 60 }, /* 0000 0010 1100 */ - { 12, 0x5A, 61 }, /* 0000 0101 1010 */ - { 12, 0x66, 62 }, /* 0000 0110 0110 */ - { 12, 0x67, 63 }, /* 0000 0110 0111 */ - { 10, 0xF, 64 }, /* 0000 0011 11 */ - { 12, 0xC8, 128 }, /* 0000 1100 1000 */ - { 12, 0xC9, 192 }, /* 0000 1100 1001 */ - { 12, 0x5B, 256 }, /* 0000 0101 1011 */ - { 12, 0x33, 320 }, /* 0000 0011 0011 */ - { 12, 0x34, 384 }, /* 0000 0011 0100 */ - { 12, 0x35, 448 }, /* 0000 0011 0101 */ - { 13, 0x6C, 512 }, /* 0000 0011 0110 0 */ - { 13, 0x6D, 576 }, /* 0000 0011 0110 1 */ - { 13, 0x4A, 640 }, /* 0000 0010 0101 0 */ - { 13, 0x4B, 704 }, /* 0000 0010 0101 1 */ - { 13, 0x4C, 768 }, /* 0000 0010 0110 0 */ - { 13, 0x4D, 832 }, /* 0000 0010 0110 1 */ - { 13, 0x72, 896 }, /* 0000 0011 1001 0 */ - { 13, 0x73, 960 }, /* 0000 0011 1001 1 */ - { 13, 0x74, 1024 }, /* 0000 0011 1010 0 */ - { 13, 0x75, 1088 }, /* 0000 0011 1010 1 */ - { 13, 0x76, 1152 }, /* 0000 0011 1011 0 */ - { 13, 0x77, 1216 }, /* 0000 0011 1011 1 */ - { 13, 0x52, 1280 }, /* 0000 0010 1001 0 */ - { 13, 0x53, 1344 }, /* 0000 0010 1001 1 */ - { 13, 0x54, 1408 }, /* 0000 0010 1010 0 */ - { 13, 0x55, 1472 }, /* 0000 0010 1010 1 */ - { 13, 0x5A, 1536 }, /* 0000 0010 1101 0 */ - { 13, 0x5B, 1600 }, /* 0000 0010 1101 1 */ - { 13, 0x64, 1664 }, /* 0000 0011 0010 0 */ - { 13, 0x65, 1728 }, /* 0000 0011 0010 1 */ - { 11, 0x8, 1792 }, /* 0000 0001 000 */ - { 11, 0xC, 1856 }, /* 0000 0001 100 */ - { 11, 0xD, 1920 }, /* 0000 0001 101 */ - { 12, 0x12, 1984 }, /* 0000 0001 0010 */ - { 12, 0x13, 2048 }, /* 0000 0001 0011 */ - { 12, 0x14, 2112 }, /* 0000 0001 0100 */ - { 12, 0x15, 2176 }, /* 0000 0001 0101 */ - { 12, 0x16, 2240 }, /* 0000 0001 0110 */ - { 12, 0x17, 2304 }, /* 0000 0001 0111 */ - { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ - { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ - { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ - { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ - { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ - { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ - { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ - { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ - { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ -}; -#else -extern const tableentry TIFFFaxWhiteCodes[]; -extern const tableentry TIFFFaxBlackCodes[]; -#endif -#endif /* _T4_ */ diff --git a/src/libs/pdflib/libs/tiff/tif_auxx.c b/src/libs/pdflib/libs/tiff/tif_auxx.c deleted file mode 100644 index 1e2f723173..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_auxx.c +++ /dev/null @@ -1,206 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_auxx.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1991-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Auxiliary Support Routines. - */ -#include "tiffiop.h" - -#ifdef COLORIMETRY_SUPPORT -#include - -static void -TIFFDefaultTransferFunction(TIFF* tif, TIFFDirectory* td) -{ - uint16 **tf = td->td_transferfunction; - long i, n = 1<td_bitspersample; - - tf[0] = (uint16 *)_TIFFmalloc(tif, n * sizeof (uint16)); - tf[0][0] = 0; - for (i = 1; i < n; i++) { - double t = (double)i/((double) n-1.); - tf[0][i] = (uint16)floor(65535.*pow(t, 2.2) + .5); - } - if (td->td_samplesperpixel - td->td_extrasamples > 1) { - tf[1] = (uint16 *)_TIFFmalloc(tif, n * sizeof (uint16)); - _TIFFmemcpy(tf[1], tf[0], n * sizeof (uint16)); - tf[2] = (uint16 *)_TIFFmalloc(tif, n * sizeof (uint16)); - _TIFFmemcpy(tf[2], tf[0], n * sizeof (uint16)); - } -} - -static void -TIFFDefaultRefBlackWhite(TIFF* tif, TIFFDirectory* td) -{ - int i; - - td->td_refblackwhite = (float *)_TIFFmalloc(tif, 6*sizeof (float)); - for (i = 0; i < 3; i++) { - td->td_refblackwhite[2*i+0] = 0; - td->td_refblackwhite[2*i+1] =(float)((1L<td_bitspersample)-1L); - } -} -#endif - -/* - * Like TIFFGetField, but return any default - * value if the tag is not present in the directory. - * - * NB: We use the value in the directory, rather than - * explcit values so that defaults exist only one - * place in the library -- in TIFFDefaultDirectory. - */ -int -TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap) -{ - TIFFDirectory *td = &tif->tif_dir; - - if (TIFFVGetField(tif, tag, ap)) - return (1); - switch (tag) { - case TIFFTAG_SUBFILETYPE: - *va_arg(ap, uint32 *) = td->td_subfiletype; - return (1); - case TIFFTAG_BITSPERSAMPLE: - *va_arg(ap, uint16 *) = td->td_bitspersample; - return (1); - case TIFFTAG_THRESHHOLDING: - *va_arg(ap, uint16 *) = td->td_threshholding; - return (1); - case TIFFTAG_FILLORDER: - *va_arg(ap, uint16 *) = td->td_fillorder; - return (1); - case TIFFTAG_ORIENTATION: - *va_arg(ap, uint16 *) = td->td_orientation; - return (1); - case TIFFTAG_SAMPLESPERPIXEL: - *va_arg(ap, uint16 *) = td->td_samplesperpixel; - return (1); - case TIFFTAG_ROWSPERSTRIP: - *va_arg(ap, uint32 *) = td->td_rowsperstrip; - return (1); - case TIFFTAG_MINSAMPLEVALUE: - *va_arg(ap, uint16 *) = td->td_minsamplevalue; - return (1); - case TIFFTAG_MAXSAMPLEVALUE: - *va_arg(ap, uint16 *) = td->td_maxsamplevalue; - return (1); - case TIFFTAG_PLANARCONFIG: - *va_arg(ap, uint16 *) = td->td_planarconfig; - return (1); - case TIFFTAG_RESOLUTIONUNIT: - *va_arg(ap, uint16 *) = td->td_resolutionunit; - return (1); -#ifdef CMYK_SUPPORT - case TIFFTAG_DOTRANGE: - *va_arg(ap, uint16 *) = 0; - *va_arg(ap, uint16 *) = (1<td_bitspersample)-1; - return (1); - case TIFFTAG_INKSET: - *va_arg(ap, uint16 *) = td->td_inkset; - return (1); - case TIFFTAG_NUMBEROFINKS: - *va_arg(ap, uint16 *) = td->td_ninks; - return (1); -#endif - case TIFFTAG_EXTRASAMPLES: - *va_arg(ap, uint16 *) = td->td_extrasamples; - *va_arg(ap, uint16 **) = td->td_sampleinfo; - return (1); - case TIFFTAG_MATTEING: - *va_arg(ap, uint16 *) = - (td->td_extrasamples == 1 && - td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); - return (1); - case TIFFTAG_TILEDEPTH: - *va_arg(ap, uint32 *) = td->td_tiledepth; - return (1); - case TIFFTAG_DATATYPE: - *va_arg(ap, uint16 *) = td->td_sampleformat-1; - return (1); - case TIFFTAG_SAMPLEFORMAT: - *va_arg(ap, uint16 *) = td->td_sampleformat; - return(1); - case TIFFTAG_IMAGEDEPTH: - *va_arg(ap, uint32 *) = td->td_imagedepth; - return (1); -#ifdef YCBCR_SUPPORT - case TIFFTAG_YCBCRCOEFFICIENTS: - if (!td->td_ycbcrcoeffs) { - td->td_ycbcrcoeffs = (float *) - _TIFFmalloc(tif, 3*sizeof (float)); - /* defaults are from CCIR Recommendation 601-1 */ - td->td_ycbcrcoeffs[0] = 0.299f; - td->td_ycbcrcoeffs[1] = 0.587f; - td->td_ycbcrcoeffs[2] = 0.114f; - } - *va_arg(ap, float **) = td->td_ycbcrcoeffs; - return (1); - case TIFFTAG_YCBCRSUBSAMPLING: - *va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[0]; - *va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[1]; - return (1); - case TIFFTAG_YCBCRPOSITIONING: - *va_arg(ap, uint16 *) = td->td_ycbcrpositioning; - return (1); -#endif -#ifdef COLORIMETRY_SUPPORT - case TIFFTAG_TRANSFERFUNCTION: - if (!td->td_transferfunction[0]) - TIFFDefaultTransferFunction(tif, td); - *va_arg(ap, uint16 **) = td->td_transferfunction[0]; - if (td->td_samplesperpixel - td->td_extrasamples > 1) { - *va_arg(ap, uint16 **) = td->td_transferfunction[1]; - *va_arg(ap, uint16 **) = td->td_transferfunction[2]; - } - return (1); - case TIFFTAG_REFERENCEBLACKWHITE: - if (!td->td_refblackwhite) - TIFFDefaultRefBlackWhite(tif, td); - *va_arg(ap, float **) = td->td_refblackwhite; - return (1); -#endif - } - return (0); -} - -/* - * Like TIFFGetField, but return any default - * value if the tag is not present in the directory. - */ -int -TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...) -{ - int ok; - va_list ap; - - va_start(ap, tag); - ok = TIFFVGetFieldDefaulted(tif, tag, ap); - va_end(ap); - return (ok); -} diff --git a/src/libs/pdflib/libs/tiff/tif_close.c b/src/libs/pdflib/libs/tiff/tif_close.c deleted file mode 100644 index 33c2a92572..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_close.c +++ /dev/null @@ -1,53 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_close.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - */ -#include "tiffiop.h" - -void -TIFFClose(TIFF* tif) -{ -#ifdef PDFLIB_TIFFWRITE_SUPPORT - if (tif->tif_mode != O_RDONLY) - /* - * Flush buffered data and directory (if dirty). - */ - TIFFFlush(tif); -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - - (*tif->tif_cleanup)(tif); - TIFFFreeDirectory(tif); - if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER)) - _TIFFfree(tif, tif->tif_rawdata); - if (isMapped(tif)) - TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size); - (void) TIFFCloseFile(tif); - if (tif->tif_fieldinfo) - _TIFFfree(tif, tif->tif_fieldinfo); - _TIFFfree(tif, tif); -} diff --git a/src/libs/pdflib/libs/tiff/tif_codec.c b/src/libs/pdflib/libs/tiff/tif_codec.c deleted file mode 100644 index dd62dfc18a..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_codec.c +++ /dev/null @@ -1,119 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_codec.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library - * - * Builtin Compression Scheme Configuration Support. - */ -#include "tiffiop.h" - -static int NotConfigured(TIFF*, int); - -#ifndef LZW_SUPPORT -#define TIFFInitLZW NotConfigured -#endif -#ifndef PACKBITS_SUPPORT -#define TIFFInitPackbits NotConfigured -#endif -#ifndef THUNDER_SUPPORT -#define TIFFInitThunderScan NotConfigured -#endif -#ifndef NEXT_SUPPORT -#define TIFFInitNeXT NotConfigured -#endif -#ifndef JPEG_SUPPORT -#define TIFFInitJPEG NotConfigured -#endif -#ifndef OJPEG_SUPPORT -#define TIFFInitOJPEG NotConfigured -#endif -#ifndef CCITT_SUPPORT -#define TIFFInitCCITTRLE NotConfigured -#define TIFFInitCCITTRLEW NotConfigured -#define TIFFInitCCITTFax3 NotConfigured -#define TIFFInitCCITTFax4 NotConfigured -#endif -#ifndef JBIG_SUPPORT -#define TIFFInitJBIG NotConfigured -#endif -#ifndef ZIP_SUPPORT -#define TIFFInitZIP NotConfigured -#endif -#ifndef PIXARLOG_SUPPORT -#define TIFFInitPixarLog NotConfigured -#endif -#ifndef LOGLUV_SUPPORT -#define TIFFInitSGILog NotConfigured -#endif - -/* - * Compression schemes statically built into the library. - */ -#ifdef VMS -const TIFFCodec _TIFFBuiltinCODECS[] = { -#else -TIFFCodec _TIFFBuiltinCODECS[] = { -#endif - { "None", COMPRESSION_NONE, TIFFInitDumpMode }, - { "LZW", COMPRESSION_LZW, TIFFInitLZW }, - { "PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits }, - { "ThunderScan", COMPRESSION_THUNDERSCAN,TIFFInitThunderScan }, - { "NeXT", COMPRESSION_NEXT, TIFFInitNeXT }, - { "JPEG", COMPRESSION_JPEG, TIFFInitJPEG }, - { "Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG }, - { "CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE }, - { "CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW }, - { "CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3 }, - { "CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4 }, - { "ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG }, - { "Deflate", COMPRESSION_DEFLATE, TIFFInitZIP }, - { "AdobeDeflate", COMPRESSION_ADOBE_DEFLATE , TIFFInitZIP }, - { "PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog }, - { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog }, - { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog }, - { NULL } -}; - -static int -_notConfigured(TIFF* tif) -{ - const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); - - TIFFError(tif->tif_name, - "%s compression support is not configured", c->name); - return (0); -} - -static int -NotConfigured(TIFF* tif, int scheme) -{ - (void) scheme; - - tif->tif_setupdecode = _notConfigured; - tif->tif_setupencode = _notConfigured; - return (1); -} diff --git a/src/libs/pdflib/libs/tiff/tif_compress.c b/src/libs/pdflib/libs/tiff/tif_compress.c deleted file mode 100644 index eaf90975e6..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_compress.c +++ /dev/null @@ -1,235 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_compress.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library - * - * Compression Scheme Configuration Support. - */ -#include "tiffiop.h" - -static int -TIFFNoEncode(TIFF* tif, char* method) -{ - const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); - - if (c) { - if (! strncmp(c->name, "LZW", 3) ){ - TIFFError(tif->tif_name, -"%s %s encoding is no longer implemented due to Unisys patent enforcement", - c->name, method); - } else { - TIFFError(tif->tif_name, "%s %s encoding is not implemented", - c->name, method); - } - } - else { - TIFFError(tif->tif_name, - "Compression scheme %u %s encoding is not implemented", - tif->tif_dir.td_compression, method); - } - return (-1); -} - -int -_TIFFNoRowEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoEncode(tif, "scanline")); -} - -int -_TIFFNoStripEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoEncode(tif, "strip")); -} - -int -_TIFFNoTileEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoEncode(tif, "tile")); -} - -static int -TIFFNoDecode(TIFF* tif, char* method) -{ - const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); - - if (c) - TIFFError(tif->tif_name, "%s %s decoding is not implemented", - c->name, method); - else - TIFFError(tif->tif_name, - "Compression scheme %u %s decoding is not implemented", - tif->tif_dir.td_compression, method); - return (-1); -} - -int -_TIFFNoRowDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoDecode(tif, "scanline")); -} - -int -_TIFFNoStripDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoDecode(tif, "strip")); -} - -int -_TIFFNoTileDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) pp; (void) cc; (void) s; - return (TIFFNoDecode(tif, "tile")); -} - -int -_TIFFNoSeek(TIFF* tif, uint32 off) -{ - (void) off; - TIFFError(tif->tif_name, - "Compression algorithm does not support random access"); - return (0); -} - -int -_TIFFNoPreCode(TIFF* tif, tsample_t s) -{ - (void) tif; (void) s; - return (1); -} - -static int _TIFFtrue(TIFF* tif) { (void) tif; return (1); } -static void _TIFFvoid(TIFF* tif) { (void) tif; } - -void -_TIFFSetDefaultCompressionState(TIFF* tif) -{ - tif->tif_setupdecode = _TIFFtrue; - tif->tif_predecode = _TIFFNoPreCode; - tif->tif_decoderow = _TIFFNoRowDecode; - tif->tif_decodestrip = _TIFFNoStripDecode; - tif->tif_decodetile = _TIFFNoTileDecode; - tif->tif_setupencode = _TIFFtrue; - tif->tif_preencode = _TIFFNoPreCode; - tif->tif_postencode = _TIFFtrue; - tif->tif_encoderow = _TIFFNoRowEncode; - tif->tif_encodestrip = _TIFFNoStripEncode; - tif->tif_encodetile = _TIFFNoTileEncode; - tif->tif_close = _TIFFvoid; - tif->tif_seek = _TIFFNoSeek; - tif->tif_cleanup = _TIFFvoid; - tif->tif_defstripsize = _TIFFDefaultStripSize; - tif->tif_deftilesize = _TIFFDefaultTileSize; - tif->tif_flags &= ~TIFF_NOBITREV; -} - -int -TIFFSetCompressionScheme(TIFF* tif, int scheme) -{ - const TIFFCodec *c = TIFFFindCODEC((uint16) scheme); - - _TIFFSetDefaultCompressionState(tif); - /* - * Don't treat an unknown compression scheme as an error. - * This permits applications to open files with data that - * the library does not have builtin support for, but which - * may still be meaningful. - */ - return (c ? (*c->init)(tif, scheme) : 1); -} - -/* - * Other compression schemes may be registered. Registered - * schemes can also override the builtin versions provided - * by this library. - */ -typedef struct _codec { - struct _codec* next; - TIFFCodec* info; -} codec_t; -static codec_t* registeredCODECS = NULL; - -const TIFFCodec* -TIFFFindCODEC(uint16 scheme) -{ - const TIFFCodec* c; - codec_t* cd; - - for (cd = registeredCODECS; cd; cd = cd->next) - if (cd->info->scheme == scheme) - return ((const TIFFCodec*) cd->info); - for (c = _TIFFBuiltinCODECS; c->name; c++) - if (c->scheme == scheme) - return (c); - return ((const TIFFCodec*) 0); -} - -#ifdef PDF_used -TIFFCodec* -TIFFRegisterCODEC(uint16 scheme, const char* name, TIFFInitMethod init) -{ - codec_t* cd = (codec_t*) - _TIFFmalloc(tif, sizeof(codec_t)+ sizeof(TIFFCodec)+strlen(name)+1); - - if (cd != NULL) { - cd->info = (TIFFCodec*) ((tidata_t) cd + sizeof (codec_t)); - cd->info->name = (char*) - ((tidata_t) cd->info + sizeof (TIFFCodec)); - strcpy(cd->info->name, name); - cd->info->scheme = scheme; - cd->info->init = init; - cd->next = registeredCODECS; - registeredCODECS = cd; - } else - TIFFError("TIFFRegisterCODEC", - "No space to register compression scheme %s", name); - return (cd->info); -} -#endif - -#ifdef PDF_used -void -TIFFUnRegisterCODEC(TIFFCodec* c) -{ - codec_t* cd; - codec_t** pcd; - - for (pcd = ®isteredCODECS; (cd = *pcd); pcd = &cd->next) - if (cd->info == c) { - *pcd = cd->next; - _TIFFfree(tif, cd); - return; - } - TIFFError("TIFFUnRegisterCODEC", - "Cannot remove compression scheme %s; not registered", c->name); -} -#endif diff --git a/src/libs/pdflib/libs/tiff/tif_dir.c b/src/libs/pdflib/libs/tiff/tif_dir.c deleted file mode 100644 index 1be7e0b40d..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_dir.c +++ /dev/null @@ -1,1318 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_dir.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Directory Tag Get & Set Routines. - * (and also some miscellaneous stuff) - */ -#include "tiffiop.h" - -/* - * These are used in the backwards compatibility code... - */ -#define DATATYPE_VOID 0 /* !untyped data */ -#define DATATYPE_INT 1 /* !signed integer data */ -#define DATATYPE_UINT 2 /* !unsigned integer data */ -#define DATATYPE_IEEEFP 3 /* !IEEE floating point data */ - -void _TIFFsetNString(TIFF* tif, char** cpp, char* cp, long n); - -void -_TIFFsetByteArray(TIFF* tif, void** vpp, void* vp, long n) -{ - if (*vpp) - _TIFFfree(tif, *vpp), *vpp = 0; - if (vp && (*vpp = (void*) _TIFFmalloc(tif, n))) - _TIFFmemcpy(*vpp, vp, n); -} -void _TIFFsetString(TIFF* tif, char** cpp, char* cp) - { _TIFFsetByteArray(tif, (void**) cpp, (void*) cp, (long) (strlen(cp)+1)); } -void _TIFFsetNString(TIFF* tif, char** cpp, char* cp, long n) - { _TIFFsetByteArray(tif, (void**) cpp, (void*) cp, n); } -void _TIFFsetShortArray(TIFF* tif, uint16** wpp, uint16* wp, long n) - { _TIFFsetByteArray(tif, (void**) wpp, (void*) wp, n*sizeof (uint16)); } -void _TIFFsetLongArray(TIFF* tif, uint32** lpp, uint32* lp, long n) - { _TIFFsetByteArray(tif, (void**) lpp, (void*) lp, n*sizeof (uint32)); } -void _TIFFsetFloatArray(TIFF* tif, float** fpp, float* fp, long n) - { _TIFFsetByteArray(tif, (void**) fpp, (void*) fp, n*sizeof (float)); } -void _TIFFsetDoubleArray(TIFF* tif, double** dpp, double* dp, long n) - { _TIFFsetByteArray(tif, (void**) dpp, (void*) dp, n*sizeof (double)); } - -/* - * Install extra samples information. - */ -static int -setExtraSamples(TIFF* tif, TIFFDirectory* td, va_list ap, int* v) -{ - uint16* va; - int i; - - *v = va_arg(ap, int); - if ((uint16) *v > td->td_samplesperpixel) - return (0); - va = va_arg(ap, uint16*); - if (*v > 0 && va == NULL) /* typically missing param */ - return (0); - for (i = 0; i < *v; i++) - if (va[i] > EXTRASAMPLE_UNASSALPHA) - return (0); - td->td_extrasamples = (uint16) *v; - _TIFFsetShortArray(tif, &td->td_sampleinfo, va, td->td_extrasamples); - return (1); -} - -#ifdef CMYK_SUPPORT -static int -checkInkNamesString(TIFF* tif, int slen, const char* s) -{ - TIFFDirectory* td = &tif->tif_dir; - int i = td->td_samplesperpixel; - - if (slen > 0) { - const char* ep = s+slen; - const char* cp = s; - for (; i > 0; i--) { - for (; *cp != '\0'; cp++) - if (cp >= ep) - goto bad; - cp++; /* skip \0 */ - } - return (cp-s); - } -bad: - TIFFError("TIFFSetField", - "%s: Invalid InkNames value; expecting %d names, found %d", - tif->tif_name, - td->td_samplesperpixel, - td->td_samplesperpixel-i); - return (0); -} -#endif - -static int -_TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - TIFFDirectory* td = &tif->tif_dir; - int status = 1; - uint32 v32; - int i, v; - double d; - char* s; - - switch (tag) { - case TIFFTAG_SUBFILETYPE: - td->td_subfiletype = va_arg(ap, uint32); - break; - case TIFFTAG_IMAGEWIDTH: - td->td_imagewidth = va_arg(ap, uint32); - break; - case TIFFTAG_IMAGELENGTH: - td->td_imagelength = va_arg(ap, uint32); - break; - case TIFFTAG_BITSPERSAMPLE: - td->td_bitspersample = (uint16) va_arg(ap, int); - /* - * If the data require post-decoding processing - * to byte-swap samples, set it up here. Note - * that since tags are required to be ordered, - * compression code can override this behaviour - * in the setup method if it wants to roll the - * post decoding work in with its normal work. - */ - if (tif->tif_flags & TIFF_SWAB) { - if (td->td_bitspersample == 16) - tif->tif_postdecode = _TIFFSwab16BitData; - else if (td->td_bitspersample == 32) - tif->tif_postdecode = _TIFFSwab32BitData; - else if (td->td_bitspersample == 64) - tif->tif_postdecode = _TIFFSwab64BitData; - } - break; - case TIFFTAG_COMPRESSION: - v = va_arg(ap, int) & 0xffff; - /* - * If we're changing the compression scheme, - * the notify the previous module so that it - * can cleanup any state it's setup. - */ - if (TIFFFieldSet(tif, FIELD_COMPRESSION)) { - if (td->td_compression == v) - break; - (*tif->tif_cleanup)(tif); - tif->tif_flags &= ~TIFF_CODERSETUP; - } - /* - * Setup new compression routine state. - */ - if( (status = TIFFSetCompressionScheme(tif, v)) != 0 ) - td->td_compression = v; - else - status = 0; - break; - case TIFFTAG_PHOTOMETRIC: - td->td_photometric = (uint16) va_arg(ap, int); - break; - case TIFFTAG_THRESHHOLDING: - td->td_threshholding = (uint16) va_arg(ap, int); - break; - case TIFFTAG_FILLORDER: - v = va_arg(ap, int); - if (v != FILLORDER_LSB2MSB && v != FILLORDER_MSB2LSB) - goto badvalue; - td->td_fillorder = (uint16) v; - break; - case TIFFTAG_DOCUMENTNAME: - _TIFFsetString(tif, &td->td_documentname, va_arg(ap, char*)); - break; - case TIFFTAG_ARTIST: - _TIFFsetString(tif, &td->td_artist, va_arg(ap, char*)); - break; - case TIFFTAG_DATETIME: - _TIFFsetString(tif, &td->td_datetime, va_arg(ap, char*)); - break; - case TIFFTAG_HOSTCOMPUTER: - _TIFFsetString(tif, &td->td_hostcomputer, va_arg(ap, char*)); - break; - case TIFFTAG_IMAGEDESCRIPTION: - _TIFFsetString(tif, &td->td_imagedescription,va_arg(ap, char*)); - break; - case TIFFTAG_MAKE: - _TIFFsetString(tif, &td->td_make, va_arg(ap, char*)); - break; - case TIFFTAG_MODEL: - _TIFFsetString(tif, &td->td_model, va_arg(ap, char*)); - break; - case TIFFTAG_SOFTWARE: - _TIFFsetString(tif, &td->td_software, va_arg(ap, char*)); - break; - case TIFFTAG_COPYRIGHT: - _TIFFsetString(tif, &td->td_copyright, va_arg(ap, char*)); - break; - case TIFFTAG_ORIENTATION: - v = va_arg(ap, int); - if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v) { - TIFFWarning(tif->tif_name, - "Bad value %ld for \"%s\" tag ignored", - v, _TIFFFieldWithTag(tif, tag)->field_name); - } else - td->td_orientation = (uint16) v; - break; - case TIFFTAG_SAMPLESPERPIXEL: - /* XXX should cross check -- e.g. if pallette, then 1 */ - v = va_arg(ap, int); - if (v == 0) - goto badvalue; - td->td_samplesperpixel = (uint16) v; - break; - case TIFFTAG_ROWSPERSTRIP: - v32 = va_arg(ap, uint32); - if (v32 == 0) - goto badvalue32; - td->td_rowsperstrip = v32; - if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) { - td->td_tilelength = v32; - td->td_tilewidth = td->td_imagewidth; - } - break; - case TIFFTAG_MINSAMPLEVALUE: - td->td_minsamplevalue = (uint16) va_arg(ap, int); - break; - case TIFFTAG_MAXSAMPLEVALUE: - td->td_maxsamplevalue = (uint16) va_arg(ap, int); - break; - case TIFFTAG_SMINSAMPLEVALUE: - td->td_sminsamplevalue = (double) va_arg(ap, dblparam_t); - break; - case TIFFTAG_SMAXSAMPLEVALUE: - td->td_smaxsamplevalue = (double) va_arg(ap, dblparam_t); - break; - case TIFFTAG_XRESOLUTION: - td->td_xresolution = (float) va_arg(ap, dblparam_t); - break; - case TIFFTAG_YRESOLUTION: - td->td_yresolution = (float) va_arg(ap, dblparam_t); - break; - case TIFFTAG_PLANARCONFIG: - v = va_arg(ap, int); - if (v != PLANARCONFIG_CONTIG && v != PLANARCONFIG_SEPARATE) - goto badvalue; - td->td_planarconfig = (uint16) v; - break; - case TIFFTAG_PAGENAME: - _TIFFsetString(tif, &td->td_pagename, va_arg(ap, char*)); - break; - case TIFFTAG_XPOSITION: - td->td_xposition = (float) va_arg(ap, dblparam_t); - break; - case TIFFTAG_YPOSITION: - td->td_yposition = (float) va_arg(ap, dblparam_t); - break; - case TIFFTAG_RESOLUTIONUNIT: - v = va_arg(ap, int); - if (v < RESUNIT_NONE || RESUNIT_CENTIMETER < v) - goto badvalue; - td->td_resolutionunit = (uint16) v; - break; - case TIFFTAG_PAGENUMBER: - td->td_pagenumber[0] = (uint16) va_arg(ap, int); - td->td_pagenumber[1] = (uint16) va_arg(ap, int); - break; - case TIFFTAG_HALFTONEHINTS: - td->td_halftonehints[0] = (uint16) va_arg(ap, int); - td->td_halftonehints[1] = (uint16) va_arg(ap, int); - break; - case TIFFTAG_COLORMAP: - v32 = (uint32)(1L<td_bitspersample); - _TIFFsetShortArray(tif, &td->td_colormap[0], - va_arg(ap, uint16*),v32); - _TIFFsetShortArray(tif, &td->td_colormap[1], - va_arg(ap, uint16*),v32); - _TIFFsetShortArray(tif, &td->td_colormap[2], - va_arg(ap, uint16*),v32); - break; - case TIFFTAG_EXTRASAMPLES: - if (!setExtraSamples(tif, td, ap, &v)) - goto badvalue; - break; - case TIFFTAG_MATTEING: - td->td_extrasamples = (uint16) (va_arg(ap, int) != 0); - if (td->td_extrasamples) { - uint16 sv = EXTRASAMPLE_ASSOCALPHA; - _TIFFsetShortArray(tif, &td->td_sampleinfo, &sv, 1); - } - break; - case TIFFTAG_TILEWIDTH: - v32 = va_arg(ap, uint32); - if (v32 % 16) { - if (tif->tif_mode != O_RDONLY) - goto badvalue32; - TIFFWarning(tif->tif_name, - "Nonstandard tile width %d, convert file", v32); - } - td->td_tilewidth = v32; - tif->tif_flags |= TIFF_ISTILED; - break; - case TIFFTAG_TILELENGTH: - v32 = va_arg(ap, uint32); - if (v32 % 16) { - if (tif->tif_mode != O_RDONLY) - goto badvalue32; - TIFFWarning(tif->tif_name, - "Nonstandard tile length %d, convert file", v32); - } - td->td_tilelength = v32; - tif->tif_flags |= TIFF_ISTILED; - break; - case TIFFTAG_TILEDEPTH: - v32 = va_arg(ap, uint32); - if (v32 == 0) - goto badvalue32; - td->td_tiledepth = v32; - break; - case TIFFTAG_DATATYPE: - v = va_arg(ap, int); - switch (v) { - case DATATYPE_VOID: v = SAMPLEFORMAT_VOID; break; - case DATATYPE_INT: v = SAMPLEFORMAT_INT; break; - case DATATYPE_UINT: v = SAMPLEFORMAT_UINT; break; - case DATATYPE_IEEEFP: v = SAMPLEFORMAT_IEEEFP;break; - default: goto badvalue; - } - td->td_sampleformat = (uint16) v; - break; - case TIFFTAG_SAMPLEFORMAT: - v = va_arg(ap, int); - if (v < SAMPLEFORMAT_UINT || SAMPLEFORMAT_COMPLEXIEEEFP < v) - goto badvalue; - td->td_sampleformat = (uint16) v; - break; - case TIFFTAG_IMAGEDEPTH: - td->td_imagedepth = va_arg(ap, uint32); - break; - case TIFFTAG_STONITS: - d = va_arg(ap, dblparam_t); - if (d <= 0.) - goto badvaluedbl; - td->td_stonits = d; - break; - - /* Begin Pixar Tags */ - case TIFFTAG_PIXAR_IMAGEFULLWIDTH: - td->td_imagefullwidth = va_arg(ap, uint32); - break; - case TIFFTAG_PIXAR_IMAGEFULLLENGTH: - td->td_imagefulllength = va_arg(ap, uint32); - break; - case TIFFTAG_PIXAR_TEXTUREFORMAT: - _TIFFsetString(tif, &td->td_textureformat, va_arg(ap, char*)); - break; - case TIFFTAG_PIXAR_WRAPMODES: - _TIFFsetString(tif, &td->td_wrapmodes, va_arg(ap, char*)); - break; - case TIFFTAG_PIXAR_FOVCOT: - td->td_fovcot = (float) va_arg(ap, dblparam_t); - break; - case TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN: - _TIFFsetFloatArray(tif, &td->td_matrixWorldToScreen, - va_arg(ap, float*), 16); - break; - case TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA: - _TIFFsetFloatArray(tif, &td->td_matrixWorldToCamera, - va_arg(ap, float*), 16); - break; - /* End Pixar Tags */ - -#if SUBIFD_SUPPORT - case TIFFTAG_SUBIFD: - if ((tif->tif_flags & TIFF_INSUBIFD) == 0) { - td->td_nsubifd = (uint16) va_arg(ap, int); - _TIFFsetLongArray(tif,&td->td_subifd,va_arg(ap,uint32*), - (long) td->td_nsubifd); - } else { - TIFFError(tif->tif_name, "Sorry, cannot nest SubIFDs"); - status = 0; - } - break; -#endif -#ifdef YCBCR_SUPPORT - case TIFFTAG_YCBCRCOEFFICIENTS: - _TIFFsetFloatArray(tif,&td->td_ycbcrcoeffs,va_arg(ap,float*),3); - break; - case TIFFTAG_YCBCRPOSITIONING: - td->td_ycbcrpositioning = (uint16) va_arg(ap, int); - break; - case TIFFTAG_YCBCRSUBSAMPLING: - td->td_ycbcrsubsampling[0] = (uint16) va_arg(ap, int); - td->td_ycbcrsubsampling[1] = (uint16) va_arg(ap, int); - break; -#endif -#ifdef COLORIMETRY_SUPPORT - case TIFFTAG_WHITEPOINT: - _TIFFsetFloatArray(tif,&td->td_whitepoint,va_arg(ap,float*),2); - break; - case TIFFTAG_PRIMARYCHROMATICITIES: - _TIFFsetFloatArray(tif,&td->td_primarychromas, - va_arg(ap,float*),6); - break; - case TIFFTAG_TRANSFERFUNCTION: - v = (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1; - for (i = 0; i < v; i++) - _TIFFsetShortArray(tif, &td->td_transferfunction[i], - va_arg(ap, uint16*), 1L<td_bitspersample); - break; - case TIFFTAG_REFERENCEBLACKWHITE: - /* XXX should check for null range */ - _TIFFsetFloatArray(tif, &td->td_refblackwhite, - va_arg(ap, float*),6); - break; -#endif -#ifdef CMYK_SUPPORT - case TIFFTAG_INKSET: - td->td_inkset = (uint16) va_arg(ap, int); - break; - case TIFFTAG_DOTRANGE: - /* XXX should check for null range */ - td->td_dotrange[0] = (uint16) va_arg(ap, int); - td->td_dotrange[1] = (uint16) va_arg(ap, int); - break; - case TIFFTAG_INKNAMES: - i = va_arg(ap, int); - s = va_arg(ap, char*); - i = checkInkNamesString(tif, i, s); - status = i > 0; - if( i > 0 ) { - _TIFFsetNString(tif, &td->td_inknames, s, i); - td->td_inknameslen = i; - } - break; - case TIFFTAG_NUMBEROFINKS: - td->td_ninks = (uint16) va_arg(ap, int); - break; - case TIFFTAG_TARGETPRINTER: - _TIFFsetString(tif, &td->td_targetprinter, va_arg(ap, char*)); - break; -#endif -#ifdef ICC_SUPPORT - case TIFFTAG_ICCPROFILE: - td->td_profileLength = (uint32) va_arg(ap, uint32); - _TIFFsetByteArray(tif, &td->td_profileData, va_arg(ap, void*), - td->td_profileLength); - break; -#endif -#ifdef PHOTOSHOP_SUPPORT - case TIFFTAG_PHOTOSHOP: - td->td_photoshopLength = (uint32) va_arg(ap, uint32); - _TIFFsetByteArray(tif, &td->td_photoshopData, va_arg(ap, void*), - td->td_photoshopLength); - break; -#endif -#ifdef IPTC_SUPPORT - case TIFFTAG_RICHTIFFIPTC: - td->td_richtiffiptcLength = (uint32) va_arg(ap, uint32); -#ifdef PHOTOSHOP_SUPPORT - _TIFFsetLongArray (tif, (uint32**)&td->td_richtiffiptcData, - va_arg(ap, uint32*), - td->td_richtiffiptcLength); -#else - _TIFFsetByteArray(tif, &td->td_photoshopData, va_arg(ap, void*), - td->td_photoshopLength); -#endif - break; -#endif - default: - /* - * This can happen if multiple images are open with - * different codecs which have private tags. The - * global tag information table may then have tags - * that are valid for one file but not the other. - * If the client tries to set a tag that is not valid - * for the image's codec then we'll arrive here. This - * happens, for example, when tiffcp is used to convert - * between compression schemes and codec-specific tags - * are blindly copied. - */ - TIFFError("TIFFSetField", - "%s: Invalid %stag \"%s\" (not supported by codec)", - tif->tif_name, isPseudoTag(tag) ? "pseduo-" : "", - _TIFFFieldWithTag(tif, tag)->field_name); - status = 0; - break; - } - if (status) { - TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); - tif->tif_flags |= TIFF_DIRTYDIRECT; - } - va_end(ap); - return (status); -badvalue: - TIFFError(tif->tif_name, "%d: Bad value for \"%s\"", v, - _TIFFFieldWithTag(tif, tag)->field_name); - va_end(ap); - return (0); -badvalue32: - TIFFError(tif->tif_name, "%ld: Bad value for \"%s\"", v32, - _TIFFFieldWithTag(tif, tag)->field_name); - va_end(ap); - return (0); -badvaluedbl: - TIFFError(tif->tif_name, "%f: Bad value for \"%s\"", d, - _TIFFFieldWithTag(tif, tag)->field_name); - va_end(ap); - return (0); -} - -/* - * Return 1/0 according to whether or not - * it is permissible to set the tag's value. - * Note that we allow ImageLength to be changed - * so that we can append and extend to images. - * Any other tag may not be altered once writing - * has commenced, unless its value has no effect - * on the format of the data that is written. - */ -static int -OkToChangeTag(TIFF* tif, ttag_t tag) -{ - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); - if (!fip) { /* unknown tag */ - TIFFError("TIFFSetField", "%s: Unknown %stag %u", - tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", tag); - return (0); - } - if (tag != TIFFTAG_IMAGELENGTH && (tif->tif_flags & TIFF_BEENWRITING) && - !fip->field_oktochange) { - /* - * Consult info table to see if tag can be changed - * after we've started writing. We only allow changes - * to those tags that don't/shouldn't affect the - * compression and/or format of the data. - */ - TIFFError("TIFFSetField", - "%s: Cannot modify tag \"%s\" while writing", - tif->tif_name, fip->field_name); - return (0); - } - return (1); -} - -/* - * Record the value of a field in the - * internal directory structure. The - * field will be written to the file - * when/if the directory structure is - * updated. - */ -int -TIFFSetField(TIFF* tif, ttag_t tag, ...) -{ - va_list ap; - int status; - - va_start(ap, tag); - status = TIFFVSetField(tif, tag, ap); - va_end(ap); - return (status); -} - -/* - * Like TIFFSetField, but taking a varargs - * parameter list. This routine is useful - * for building higher-level interfaces on - * top of the library. - */ -int -TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - return OkToChangeTag(tif, tag) ? - (*tif->tif_vsetfield)(tif, tag, ap) : 0; -} - -static int -_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - TIFFDirectory* td = &tif->tif_dir; - - switch (tag) { - case TIFFTAG_SUBFILETYPE: - *va_arg(ap, uint32*) = td->td_subfiletype; - break; - case TIFFTAG_IMAGEWIDTH: - *va_arg(ap, uint32*) = td->td_imagewidth; - break; - case TIFFTAG_IMAGELENGTH: - *va_arg(ap, uint32*) = td->td_imagelength; - break; - case TIFFTAG_BITSPERSAMPLE: - *va_arg(ap, uint16*) = td->td_bitspersample; - break; - case TIFFTAG_COMPRESSION: - *va_arg(ap, uint16*) = td->td_compression; - break; - case TIFFTAG_PHOTOMETRIC: - *va_arg(ap, uint16*) = td->td_photometric; - break; - case TIFFTAG_THRESHHOLDING: - *va_arg(ap, uint16*) = td->td_threshholding; - break; - case TIFFTAG_FILLORDER: - *va_arg(ap, uint16*) = td->td_fillorder; - break; - case TIFFTAG_DOCUMENTNAME: - *va_arg(ap, char**) = td->td_documentname; - break; - case TIFFTAG_ARTIST: - *va_arg(ap, char**) = td->td_artist; - break; - case TIFFTAG_DATETIME: - *va_arg(ap, char**) = td->td_datetime; - break; - case TIFFTAG_HOSTCOMPUTER: - *va_arg(ap, char**) = td->td_hostcomputer; - break; - case TIFFTAG_IMAGEDESCRIPTION: - *va_arg(ap, char**) = td->td_imagedescription; - break; - case TIFFTAG_MAKE: - *va_arg(ap, char**) = td->td_make; - break; - case TIFFTAG_MODEL: - *va_arg(ap, char**) = td->td_model; - break; - case TIFFTAG_SOFTWARE: - *va_arg(ap, char**) = td->td_software; - break; - case TIFFTAG_COPYRIGHT: - *va_arg(ap, char**) = td->td_copyright; - break; - case TIFFTAG_ORIENTATION: - *va_arg(ap, uint16*) = td->td_orientation; - break; - case TIFFTAG_SAMPLESPERPIXEL: - *va_arg(ap, uint16*) = td->td_samplesperpixel; - break; - case TIFFTAG_ROWSPERSTRIP: - *va_arg(ap, uint32*) = td->td_rowsperstrip; - break; - case TIFFTAG_MINSAMPLEVALUE: - *va_arg(ap, uint16*) = td->td_minsamplevalue; - break; - case TIFFTAG_MAXSAMPLEVALUE: - *va_arg(ap, uint16*) = td->td_maxsamplevalue; - break; - case TIFFTAG_SMINSAMPLEVALUE: - *va_arg(ap, double*) = td->td_sminsamplevalue; - break; - case TIFFTAG_SMAXSAMPLEVALUE: - *va_arg(ap, double*) = td->td_smaxsamplevalue; - break; - case TIFFTAG_XRESOLUTION: - *va_arg(ap, float*) = td->td_xresolution; - break; - case TIFFTAG_YRESOLUTION: - *va_arg(ap, float*) = td->td_yresolution; - break; - case TIFFTAG_PLANARCONFIG: - *va_arg(ap, uint16*) = td->td_planarconfig; - break; - case TIFFTAG_XPOSITION: - *va_arg(ap, float*) = td->td_xposition; - break; - case TIFFTAG_YPOSITION: - *va_arg(ap, float*) = td->td_yposition; - break; - case TIFFTAG_PAGENAME: - *va_arg(ap, char**) = td->td_pagename; - break; - case TIFFTAG_RESOLUTIONUNIT: - *va_arg(ap, uint16*) = td->td_resolutionunit; - break; - case TIFFTAG_PAGENUMBER: - *va_arg(ap, uint16*) = td->td_pagenumber[0]; - *va_arg(ap, uint16*) = td->td_pagenumber[1]; - break; - case TIFFTAG_HALFTONEHINTS: - *va_arg(ap, uint16*) = td->td_halftonehints[0]; - *va_arg(ap, uint16*) = td->td_halftonehints[1]; - break; - case TIFFTAG_COLORMAP: - *va_arg(ap, uint16**) = td->td_colormap[0]; - *va_arg(ap, uint16**) = td->td_colormap[1]; - *va_arg(ap, uint16**) = td->td_colormap[2]; - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_TILEOFFSETS: - *va_arg(ap, uint32**) = td->td_stripoffset; - break; - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEBYTECOUNTS: - *va_arg(ap, uint32**) = td->td_stripbytecount; - break; - case TIFFTAG_MATTEING: - *va_arg(ap, uint16*) = - (td->td_extrasamples == 1 && - td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); - break; - case TIFFTAG_EXTRASAMPLES: - *va_arg(ap, uint16*) = td->td_extrasamples; - *va_arg(ap, uint16**) = td->td_sampleinfo; - break; - case TIFFTAG_TILEWIDTH: - *va_arg(ap, uint32*) = td->td_tilewidth; - break; - case TIFFTAG_TILELENGTH: - *va_arg(ap, uint32*) = td->td_tilelength; - break; - case TIFFTAG_TILEDEPTH: - *va_arg(ap, uint32*) = td->td_tiledepth; - break; - case TIFFTAG_DATATYPE: - switch (td->td_sampleformat) { - case SAMPLEFORMAT_UINT: - *va_arg(ap, uint16*) = DATATYPE_UINT; - break; - case SAMPLEFORMAT_INT: - *va_arg(ap, uint16*) = DATATYPE_INT; - break; - case SAMPLEFORMAT_IEEEFP: - *va_arg(ap, uint16*) = DATATYPE_IEEEFP; - break; - case SAMPLEFORMAT_VOID: - *va_arg(ap, uint16*) = DATATYPE_VOID; - break; - } - break; - case TIFFTAG_SAMPLEFORMAT: - *va_arg(ap, uint16*) = td->td_sampleformat; - break; - case TIFFTAG_IMAGEDEPTH: - *va_arg(ap, uint32*) = td->td_imagedepth; - break; - case TIFFTAG_STONITS: - *va_arg(ap, double*) = td->td_stonits; - break; -#if SUBIFD_SUPPORT - case TIFFTAG_SUBIFD: - *va_arg(ap, uint16*) = td->td_nsubifd; - *va_arg(ap, uint32**) = td->td_subifd; - break; -#endif -#ifdef YCBCR_SUPPORT - case TIFFTAG_YCBCRCOEFFICIENTS: - *va_arg(ap, float**) = td->td_ycbcrcoeffs; - break; - case TIFFTAG_YCBCRPOSITIONING: - *va_arg(ap, uint16*) = td->td_ycbcrpositioning; - break; - case TIFFTAG_YCBCRSUBSAMPLING: - *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0]; - *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1]; - break; -#endif -#ifdef COLORIMETRY_SUPPORT - case TIFFTAG_WHITEPOINT: - *va_arg(ap, float**) = td->td_whitepoint; - break; - case TIFFTAG_PRIMARYCHROMATICITIES: - *va_arg(ap, float**) = td->td_primarychromas; - break; - case TIFFTAG_TRANSFERFUNCTION: - *va_arg(ap, uint16**) = td->td_transferfunction[0]; - if (td->td_samplesperpixel - td->td_extrasamples > 1) { - *va_arg(ap, uint16**) = td->td_transferfunction[1]; - *va_arg(ap, uint16**) = td->td_transferfunction[2]; - } - break; - case TIFFTAG_REFERENCEBLACKWHITE: - *va_arg(ap, float**) = td->td_refblackwhite; - break; -#endif -#ifdef CMYK_SUPPORT - case TIFFTAG_INKSET: - *va_arg(ap, uint16*) = td->td_inkset; - break; - case TIFFTAG_DOTRANGE: - *va_arg(ap, uint16*) = td->td_dotrange[0]; - *va_arg(ap, uint16*) = td->td_dotrange[1]; - break; - case TIFFTAG_INKNAMES: - *va_arg(ap, char**) = td->td_inknames; - break; - case TIFFTAG_NUMBEROFINKS: - *va_arg(ap, uint16*) = td->td_ninks; - break; - case TIFFTAG_TARGETPRINTER: - *va_arg(ap, char**) = td->td_targetprinter; - break; -#endif -#ifdef ICC_SUPPORT - case TIFFTAG_ICCPROFILE: - *va_arg(ap, uint32*) = td->td_profileLength; - *va_arg(ap, void**) = td->td_profileData; - break; -#endif -#ifdef PHOTOSHOP_SUPPORT - case TIFFTAG_PHOTOSHOP: - *va_arg(ap, uint32*) = td->td_photoshopLength; - *va_arg(ap, void**) = td->td_photoshopData; - break; -#endif -#ifdef IPTC_SUPPORT - case TIFFTAG_RICHTIFFIPTC: - *va_arg(ap, uint32*) = td->td_richtiffiptcLength; - *va_arg(ap, void**) = td->td_richtiffiptcData; - break; -#endif - /* Begin Pixar Tags */ - case TIFFTAG_PIXAR_IMAGEFULLWIDTH: - *va_arg(ap, uint32*) = td->td_imagefullwidth; - break; - case TIFFTAG_PIXAR_IMAGEFULLLENGTH: - *va_arg(ap, uint32*) = td->td_imagefulllength; - break; - case TIFFTAG_PIXAR_TEXTUREFORMAT: - *va_arg(ap, char**) = td->td_textureformat; - break; - case TIFFTAG_PIXAR_WRAPMODES: - *va_arg(ap, char**) = td->td_wrapmodes; - break; - case TIFFTAG_PIXAR_FOVCOT: - *va_arg(ap, float*) = td->td_fovcot; - break; - case TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN: - *va_arg(ap, float**) = td->td_matrixWorldToScreen; - break; - case TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA: - *va_arg(ap, float**) = td->td_matrixWorldToCamera; - break; - /* End Pixar Tags */ - - default: - /* - * This can happen if multiple images are open with - * different codecs which have private tags. The - * global tag information table may then have tags - * that are valid for one file but not the other. - * If the client tries to get a tag that is not valid - * for the image's codec then we'll arrive here. - */ - TIFFError("TIFFGetField", - "%s: Invalid %stag \"%s\" (not supported by codec)", - tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", - _TIFFFieldWithTag(tif, tag)->field_name); - break; - } - return (1); -} - -/* - * Return the value of a field in the - * internal directory structure. - */ -int -TIFFGetField(TIFF* tif, ttag_t tag, ...) -{ - int status; - va_list ap; - - va_start(ap, tag); - status = TIFFVGetField(tif, tag, ap); - va_end(ap); - return (status); -} - -/* - * Like TIFFGetField, but taking a varargs - * parameter list. This routine is useful - * for building higher-level interfaces on - * top of the library. - */ -int -TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); - return (fip && (isPseudoTag(tag) || TIFFFieldSet(tif, fip->field_bit)) ? - (*tif->tif_vgetfield)(tif, tag, ap) : 0); -} - -#define CleanupField(member) { \ - if (td->member) { \ - _TIFFfree(tif, td->member); \ - td->member = 0; \ - } \ -} - -/* - * Release storage associated with a directory. - */ -void -TIFFFreeDirectory(TIFF* tif) -{ - register TIFFDirectory *td = &tif->tif_dir; - - CleanupField(td_colormap[0]); - CleanupField(td_colormap[1]); - CleanupField(td_colormap[2]); - CleanupField(td_documentname); - CleanupField(td_artist); - CleanupField(td_datetime); - CleanupField(td_hostcomputer); - CleanupField(td_imagedescription); - CleanupField(td_make); - CleanupField(td_model); - CleanupField(td_software); - CleanupField(td_copyright); - CleanupField(td_pagename); - CleanupField(td_sampleinfo); -#if SUBIFD_SUPPORT - CleanupField(td_subifd); -#endif -#ifdef YCBCR_SUPPORT - CleanupField(td_ycbcrcoeffs); -#endif -#ifdef CMYK_SUPPORT - CleanupField(td_inknames); - CleanupField(td_targetprinter); -#endif -#ifdef COLORIMETRY_SUPPORT - CleanupField(td_whitepoint); - CleanupField(td_primarychromas); - CleanupField(td_refblackwhite); - CleanupField(td_transferfunction[0]); - CleanupField(td_transferfunction[1]); - CleanupField(td_transferfunction[2]); -#endif -#ifdef ICC_SUPPORT - CleanupField(td_profileData); -#endif -#ifdef PHOTOSHOP_SUPPORT - CleanupField(td_photoshopData); -#endif -#ifdef IPTC_SUPPORT - CleanupField(td_richtiffiptcData); -#endif - CleanupField(td_stripoffset); - CleanupField(td_stripbytecount); - /* Begin Pixar Tags */ - CleanupField(td_textureformat); - CleanupField(td_wrapmodes); - CleanupField(td_matrixWorldToScreen); - CleanupField(td_matrixWorldToCamera); - /* End Pixar Tags */ -} -#undef CleanupField - -/* - * Client Tag extension support (from Niles Ritter). - */ -static TIFFExtendProc _TIFFextender = (TIFFExtendProc) NULL; - -TIFFExtendProc -TIFFSetTagExtender(TIFFExtendProc extender) -{ - TIFFExtendProc prev = _TIFFextender; - _TIFFextender = extender; - return (prev); -} - -/* #ifdef PDF_UNUSED */ -/* - * Setup for a new directory. Should we automatically call - * TIFFWriteDirectory() if the current one is dirty? - * - * The newly created directory will not exist on the file till - * TIFFWriteDirectory(), TIFFFlush() or TIFFClose() is called. - */ -int -TIFFCreateDirectory(TIFF* tif) -{ - TIFFDefaultDirectory(tif); - tif->tif_diroff = 0; - tif->tif_nextdiroff = 0; - tif->tif_curoff = 0; - tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; - - return 0; -} -/* #endif */ - -/* - * Setup a default directory structure. - */ -int -TIFFDefaultDirectory(TIFF* tif) -{ - register TIFFDirectory* td = &tif->tif_dir; - - _TIFFSetupFieldInfo(tif); - _TIFFmemset(td, 0, sizeof (*td)); - td->td_fillorder = FILLORDER_MSB2LSB; - td->td_bitspersample = 1; - td->td_threshholding = THRESHHOLD_BILEVEL; - td->td_orientation = ORIENTATION_TOPLEFT; - td->td_samplesperpixel = 1; - td->td_rowsperstrip = (uint32) -1; - td->td_tilewidth = (uint32) -1; - td->td_tilelength = (uint32) -1; - td->td_tiledepth = 1; - td->td_resolutionunit = RESUNIT_INCH; - td->td_sampleformat = SAMPLEFORMAT_UINT; - td->td_imagedepth = 1; -#ifdef YCBCR_SUPPORT - td->td_ycbcrsubsampling[0] = 2; - td->td_ycbcrsubsampling[1] = 2; - td->td_ycbcrpositioning = YCBCRPOSITION_CENTERED; -#endif -#ifdef CMYK_SUPPORT - td->td_inkset = INKSET_CMYK; - td->td_ninks = 4; -#endif - tif->tif_postdecode = _TIFFNoPostDecode; - tif->tif_vsetfield = _TIFFVSetField; - tif->tif_vgetfield = _TIFFVGetField; - tif->tif_printdir = NULL; - /* - * Give client code a chance to install their own - * tag extensions & methods, prior to compression overloads. - */ - if (_TIFFextender) - (*_TIFFextender)(tif); - (void) TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); - /* - * NB: The directory is marked dirty as a result of setting - * up the default compression scheme. However, this really - * isn't correct -- we want TIFF_DIRTYDIRECT to be set only - * if the user does something. We could just do the setup - * by hand, but it seems better to use the normal mechanism - * (i.e. TIFFSetField). - */ - tif->tif_flags &= ~TIFF_DIRTYDIRECT; - - /* - * As per http://bugzilla.remotesensing.org/show_bug.cgi?id=19 - * we clear the ISTILED flag when setting up a new directory. - * Should we also be clearing stuff like INSUBIFD? - */ - tif->tif_flags &= ~TIFF_ISTILED; - - return (1); -} - -static int -TIFFAdvanceDirectory(TIFF* tif, uint32* nextdir, toff_t* off) -{ - static const char module[] = "TIFFAdvanceDirectory"; - uint16 dircount; - if (isMapped(tif)) - { - toff_t poff=*nextdir; - if (poff+sizeof(uint16) > tif->tif_size) - { - TIFFError(module, "%s: Error fetching directory count", - tif->tif_name); - return (0); - } - _TIFFmemcpy(&dircount, tif->tif_base+poff, sizeof (uint16)); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - poff+=sizeof (uint16)+dircount*sizeof (TIFFDirEntry); - if (off != NULL) - *off = poff; - if (((toff_t) (poff+sizeof (uint32))) > tif->tif_size) - { - TIFFError(module, "%s: Error fetching directory link", - tif->tif_name); - return (0); - } - _TIFFmemcpy(nextdir, tif->tif_base+poff, sizeof (uint32)); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(nextdir); - return (1); - } - else - { - if (!SeekOK(tif, *nextdir) || - !ReadOK(tif, &dircount, sizeof (uint16))) { - TIFFError(module, "%s: Error fetching directory count", - tif->tif_name); - return (0); - } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - if (off != NULL) - *off = TIFFSeekFile(tif, - dircount*sizeof (TIFFDirEntry), SEEK_CUR); - else - (void) TIFFSeekFile(tif, - dircount*sizeof (TIFFDirEntry), SEEK_CUR); - if (!ReadOK(tif, nextdir, sizeof (uint32))) { - TIFFError(module, "%s: Error fetching directory link", - tif->tif_name); - return (0); - } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(nextdir); - return (1); - } -} - -#ifdef PDF_UNUSED -/* - * Count the number of directories in a file. - */ -tdir_t -TIFFNumberOfDirectories(TIFF* tif) -{ - toff_t nextdir = tif->tif_header.tiff_diroff; - tdir_t n = 0; - - while (nextdir != 0 && TIFFAdvanceDirectory(tif, &nextdir, NULL)) - n++; - return (n); -} -#endif - -/* - * Set the n-th directory as the current directory. - * NB: Directories are numbered starting at 0. - */ -int -TIFFSetDirectory(TIFF* tif, tdir_t dirn) -{ - toff_t nextdir; - tdir_t n; - - nextdir = tif->tif_header.tiff_diroff; - for (n = dirn; n > 0 && nextdir != 0; n--) - if (!TIFFAdvanceDirectory(tif, &nextdir, NULL)) - return (0); - tif->tif_nextdiroff = nextdir; - /* - * Set curdir to the actual directory index. The - * -1 is because TIFFReadDirectory will increment - * tif_curdir after successfully reading the directory. - */ - tif->tif_curdir = (dirn - n) - 1; - return (TIFFReadDirectory(tif)); -} - -#ifdef PDF_UNUSED -/* - * Set the current directory to be the directory - * located at the specified file offset. This interface - * is used mainly to access directories linked with - * the SubIFD tag (e.g. thumbnail images). - */ -int -TIFFSetSubDirectory(TIFF* tif, uint32 diroff) -{ - tif->tif_nextdiroff = diroff; - return (TIFFReadDirectory(tif)); -} - -/* - * Return file offset of the current directory. - */ -uint32 -TIFFCurrentDirOffset(TIFF* tif) -{ - return (tif->tif_diroff); -} - -/* - * Return an indication of whether or not we are - * at the last directory in the file. - */ -int -TIFFLastDirectory(TIFF* tif) -{ - return (tif->tif_nextdiroff == 0); -} - -/* - * Unlink the specified directory from the directory chain. - */ -int -TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) -{ - static const char module[] = "TIFFUnlinkDirectory"; - toff_t nextdir; - toff_t off; - tdir_t n; - - if (tif->tif_mode == O_RDONLY) { - TIFFError(module, "Can not unlink directory in read-only file"); - return (0); - } - /* - * Go to the directory before the one we want - * to unlink and nab the offset of the link - * field we'll need to patch. - */ - nextdir = tif->tif_header.tiff_diroff; - off = sizeof (uint16) + sizeof (uint16); - for (n = dirn-1; n > 0; n--) { - if (nextdir == 0) { - TIFFError(module, "Directory %d does not exist", dirn); - return (0); - } - if (!TIFFAdvanceDirectory(tif, &nextdir, &off)) - return (0); - } - /* - * Advance to the directory to be unlinked and fetch - * the offset of the directory that follows. - */ - if (!TIFFAdvanceDirectory(tif, &nextdir, NULL)) - return (0); - /* - * Go back and patch the link field of the preceding - * directory to point to the offset of the directory - * that follows. - */ - (void) TIFFSeekFile(tif, off, SEEK_SET); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&nextdir); - if (!WriteOK(tif, &nextdir, sizeof (uint32))) { - TIFFError(module, "Error writing directory link"); - return (0); - } - /* - * Leave directory state setup safely. We don't have - * facilities for doing inserting and removing directories, - * so it's safest to just invalidate everything. This - * means that the caller can only append to the directory - * chain. - */ - (*tif->tif_cleanup)(tif); - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { - _TIFFfree(tif, tif->tif_rawdata); - tif->tif_rawdata = NULL; - tif->tif_rawcc = 0; - } - tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP|TIFF_POSTENCODE); - TIFFFreeDirectory(tif); - TIFFDefaultDirectory(tif); - tif->tif_diroff = 0; /* force link on next write */ - tif->tif_nextdiroff = 0; /* next write must be at end */ - tif->tif_curoff = 0; - tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; - return (1); -} -#endif - -/* [BFC] - * - * Author: Bruce Cameron - * - * Set a table of tags that are to be replaced during directory process by the - * 'IGNORE' state - or return TRUE/FALSE for the requested tag such that - * 'ReadDirectory' can use the stored information. - */ -int -TIFFReassignTagToIgnore (enum TIFFIgnoreSense task, int TIFFtagID) -{ - static int TIFFignoretags [FIELD_LAST]; - static int tagcount = 0 ; - int i; /* Loop index */ - int j; /* Loop index */ - - switch (task) - { - case TIS_STORE: - if ( tagcount < (FIELD_LAST - 1) ) - { - for ( j = 0 ; j < tagcount ; ++j ) - { /* Do not add duplicate tag */ - if ( TIFFignoretags [j] == TIFFtagID ) - return (TRUE) ; - } - TIFFignoretags [tagcount++] = TIFFtagID ; - return (TRUE) ; - } - break ; - - case TIS_EXTRACT: - for ( i = 0 ; i < tagcount ; ++i ) - { - if ( TIFFignoretags [i] == TIFFtagID ) - return (TRUE) ; - } - break; - - case TIS_EMPTY: - tagcount = 0 ; /* Clear the list */ - return (TRUE) ; - - default: - break; - } - - return (FALSE); -} diff --git a/src/libs/pdflib/libs/tiff/tif_dir.h b/src/libs/pdflib/libs/tiff/tif_dir.h deleted file mode 100644 index 6285e3234c..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_dir.h +++ /dev/null @@ -1,270 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_dir.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFFDIR_ -#define _TIFFDIR_ -/* - * ``Library-private'' Directory-related Definitions. - */ - -/* - * Internal format of a TIFF directory entry. - */ -typedef struct { -#define FIELD_SETLONGS 3 - /* bit vector of fields that are set */ - tif_long td_fieldsset[FIELD_SETLONGS]; - - uint32 td_imagewidth, td_imagelength, td_imagedepth; - uint32 td_tilewidth, td_tilelength, td_tiledepth; - uint32 td_subfiletype; - uint16 td_bitspersample; - uint16 td_sampleformat; - uint16 td_compression; - uint16 td_photometric; - uint16 td_threshholding; - uint16 td_fillorder; - uint16 td_orientation; - uint16 td_samplesperpixel; - uint32 td_rowsperstrip; - uint16 td_minsamplevalue, td_maxsamplevalue; - double td_sminsamplevalue, td_smaxsamplevalue; - float td_xresolution, td_yresolution; - uint16 td_resolutionunit; - uint16 td_planarconfig; - float td_xposition, td_yposition; - uint16 td_pagenumber[2]; - uint16* td_colormap[3]; - uint16 td_halftonehints[2]; - uint16 td_extrasamples; - uint16* td_sampleinfo; - double td_stonits; - char* td_documentname; - char* td_artist; - char* td_datetime; - char* td_hostcomputer; - char* td_imagedescription; - char* td_make; - char* td_model; - char* td_software; - char* td_copyright; - char* td_pagename; - tstrip_t td_stripsperimage; - tstrip_t td_nstrips; /* size of offset & bytecount arrays */ - uint32* td_stripoffset; - uint32* td_stripbytecount; -#if SUBIFD_SUPPORT - uint16 td_nsubifd; - uint32* td_subifd; -#endif -#ifdef YCBCR_SUPPORT - float* td_ycbcrcoeffs; - uint16 td_ycbcrsubsampling[2]; - uint16 td_ycbcrpositioning; -#endif -#ifdef COLORIMETRY_SUPPORT - float* td_whitepoint; - float* td_primarychromas; - float* td_refblackwhite; - uint16* td_transferfunction[3]; -#endif -#ifdef CMYK_SUPPORT - uint16 td_inkset; - uint16 td_ninks; - uint16 td_dotrange[2]; - int td_inknameslen; - char* td_inknames; - char* td_targetprinter; -#endif -#ifdef ICC_SUPPORT - uint32 td_profileLength; - void *td_profileData; -#endif -#ifdef PHOTOSHOP_SUPPORT - uint32 td_photoshopLength; - void *td_photoshopData; -#endif -#ifdef IPTC_SUPPORT - uint32 td_richtiffiptcLength; - void *td_richtiffiptcData; -#endif - /* Begin Pixar Tag values. */ - uint32 td_imagefullwidth, td_imagefulllength; - char* td_textureformat; - char* td_wrapmodes; - float td_fovcot; - float* td_matrixWorldToScreen; - float* td_matrixWorldToCamera; - /* End Pixar Tag Values. */ -} TIFFDirectory; - -/* - * Field flags used to indicate fields that have - * been set in a directory, and to reference fields - * when manipulating a directory. - */ - -/* - * FIELD_IGNORE is used to signify tags that are to - * be processed but otherwise ignored. This permits - * antiquated tags to be quietly read and discarded. - * Note that a bit *is* allocated for ignored tags; - * this is understood by the directory reading logic - * which uses this fact to avoid special-case handling - */ -#define FIELD_IGNORE 0 - -/* multi-item fields */ -#define FIELD_IMAGEDIMENSIONS 1 -#define FIELD_TILEDIMENSIONS 2 -#define FIELD_RESOLUTION 3 -#define FIELD_POSITION 4 - -/* single-item fields */ -#define FIELD_SUBFILETYPE 5 -#define FIELD_BITSPERSAMPLE 6 -#define FIELD_COMPRESSION 7 -#define FIELD_PHOTOMETRIC 8 -#define FIELD_THRESHHOLDING 9 -#define FIELD_FILLORDER 10 -#define FIELD_DOCUMENTNAME 11 -#define FIELD_IMAGEDESCRIPTION 12 -#define FIELD_MAKE 13 -#define FIELD_MODEL 14 -#define FIELD_ORIENTATION 15 -#define FIELD_SAMPLESPERPIXEL 16 -#define FIELD_ROWSPERSTRIP 17 -#define FIELD_MINSAMPLEVALUE 18 -#define FIELD_MAXSAMPLEVALUE 19 -#define FIELD_PLANARCONFIG 20 -#define FIELD_PAGENAME 21 -#define FIELD_RESOLUTIONUNIT 22 -#define FIELD_PAGENUMBER 23 -#define FIELD_STRIPBYTECOUNTS 24 -#define FIELD_STRIPOFFSETS 25 -#define FIELD_COLORMAP 26 -#define FIELD_ARTIST 27 -#define FIELD_DATETIME 28 -#define FIELD_HOSTCOMPUTER 29 -#define FIELD_SOFTWARE 30 -#define FIELD_EXTRASAMPLES 31 -#define FIELD_SAMPLEFORMAT 32 -#define FIELD_SMINSAMPLEVALUE 33 -#define FIELD_SMAXSAMPLEVALUE 34 -#define FIELD_IMAGEDEPTH 35 -#define FIELD_TILEDEPTH 36 -#define FIELD_HALFTONEHINTS 37 -#define FIELD_YCBCRCOEFFICIENTS 38 -#define FIELD_YCBCRSUBSAMPLING 39 -#define FIELD_YCBCRPOSITIONING 40 -#define FIELD_REFBLACKWHITE 41 -#define FIELD_WHITEPOINT 42 -#define FIELD_PRIMARYCHROMAS 43 -#define FIELD_TRANSFERFUNCTION 44 -#define FIELD_INKSET 45 -#define FIELD_INKNAMES 46 -#define FIELD_DOTRANGE 47 -#define FIELD_TARGETPRINTER 48 -#define FIELD_SUBIFD 49 -#define FIELD_NUMBEROFINKS 50 -#define FIELD_ICCPROFILE 51 -#define FIELD_PHOTOSHOP 52 -#define FIELD_RICHTIFFIPTC 53 -#define FIELD_STONITS 54 -/* Begin PIXAR */ -#define FIELD_IMAGEFULLWIDTH 55 -#define FIELD_IMAGEFULLLENGTH 56 -#define FIELD_TEXTUREFORMAT 57 -#define FIELD_WRAPMODES 58 -#define FIELD_FOVCOT 59 -#define FIELD_MATRIX_WORLDTOSCREEN 60 -#define FIELD_MATRIX_WORLDTOCAMERA 61 -#define FIELD_COPYRIGHT 62 -/* end of support for well-known tags; codec-private tags follow */ -#define FIELD_CODEC 63 /* base of codec-private tags */ -/* - * Pseudo-tags don't normally need field bits since they - * are not written to an output file (by definition). - * The library also has express logic to always query a - * codec for a pseudo-tag so allocating a field bit for - * one is a waste. If codec wants to promote the notion - * of a pseudo-tag being ``set'' or ``unset'' then it can - * do using internal state flags without polluting the - * field bit space defined for real tags. - */ -#define FIELD_PSEUDO 0 - -#define FIELD_LAST (32*FIELD_SETLONGS-1) - -#define TIFFExtractData(tif, type, v) \ - ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ - ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ - (v) & (tif)->tif_typemask[type])) -#define TIFFInsertData(tif, type, v) \ - ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ - ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ - (v) & (tif)->tif_typemask[type])) - -typedef struct { - ttag_t field_tag; /* field's tag */ - short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ - short field_writecount; /* write count/TIFF_VARIABLE */ - TIFFDataType field_type; /* type of associated data */ - tif_short field_bit; /* bit in fieldsset bit vector */ - tif_char field_oktochange; /* if true, can change while writing */ - tif_char field_passcount; /* if true, pass dir count on set */ - char *field_name; /* ASCII name */ -} TIFFFieldInfo; - -#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */ -#define TIFF_VARIABLE -1 /* marker for variable length tags */ -#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */ -#define TIFF_VARIABLE2 -3 /* marker for uint32 var-length tags */ - -extern const int tiffDataWidth[]; /* table of tag datatype widths */ - -#define BITn(n) (((tif_long)1L)<<((n)&0x1f)) -#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) -#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) -#define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) -#define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) - -#define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) -#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) - -#if defined(__cplusplus) -extern "C" { -#endif -extern void _TIFFSetupFieldInfo(TIFF*); -extern void _TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int); -extern void _TIFFPrintFieldInfo(TIFF*, FILE*); -extern const TIFFFieldInfo* _TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType); -extern const TIFFFieldInfo* _TIFFFieldWithTag(TIFF*, ttag_t); -extern TIFFDataType _TIFFSampleToTagType(TIFF*); -#if defined(__cplusplus) -} -#endif -#endif /* _TIFFDIR_ */ diff --git a/src/libs/pdflib/libs/tiff/tif_dirinfo.c b/src/libs/pdflib/libs/tiff/tif_dirinfo.c deleted file mode 100644 index f92889b373..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_dirinfo.c +++ /dev/null @@ -1,413 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_dirinfo.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Core Directory Tag Support. - */ -#include "tiffiop.h" -#include - -/* - * NB: NB: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG. - * If a tag can have both LONG and SHORT types - * then the LONG must be placed before the SHORT for - * writing to work properly. - * - * NOTE: The second field (field_readcount) and third field (field_writecount) - * sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3) - * and TIFFTAG_SPP (-2). The macros should be used but would throw off - * the formatting of the code, so please interprete the -1, -2 and -3 - * values accordingly. - */ -#ifndef VMS -static -#endif -const TIFFFieldInfo tiffFieldInfo[] = { - { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, FIELD_SUBFILETYPE, - TRUE, FALSE, "SubfileType" }, -/* XXX SHORT for compatibility w/ old versions of the library */ - { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, - TRUE, FALSE, "SubfileType" }, - { TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, - TRUE, FALSE, "OldSubfileType" }, - { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, - FALSE, FALSE, "ImageWidth" }, - { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, - FALSE, FALSE, "ImageWidth" }, - { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, - TRUE, FALSE, "ImageLength" }, - { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, - TRUE, FALSE, "ImageLength" }, - { TIFFTAG_BITSPERSAMPLE, -1,-1, TIFF_SHORT, FIELD_BITSPERSAMPLE, - FALSE, FALSE, "BitsPerSample" }, - { TIFFTAG_COMPRESSION, -1, 1, TIFF_SHORT, FIELD_COMPRESSION, - FALSE, FALSE, "Compression" }, - { TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, FIELD_PHOTOMETRIC, - FALSE, FALSE, "PhotometricInterpretation" }, - { TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, FIELD_THRESHHOLDING, - TRUE, FALSE, "Threshholding" }, - { TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, - TRUE, FALSE, "CellWidth" }, - { TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, - TRUE, FALSE, "CellLength" }, - { TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, FIELD_FILLORDER, - FALSE, FALSE, "FillOrder" }, - { TIFFTAG_DOCUMENTNAME, -1,-1, TIFF_ASCII, FIELD_DOCUMENTNAME, - TRUE, FALSE, "DocumentName" }, - { TIFFTAG_IMAGEDESCRIPTION, -1,-1, TIFF_ASCII, FIELD_IMAGEDESCRIPTION, - TRUE, FALSE, "ImageDescription" }, - { TIFFTAG_MAKE, -1,-1, TIFF_ASCII, FIELD_MAKE, - TRUE, FALSE, "Make" }, - { TIFFTAG_MODEL, -1,-1, TIFF_ASCII, FIELD_MODEL, - TRUE, FALSE, "Model" }, - { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_LONG, FIELD_STRIPOFFSETS, - FALSE, FALSE, "StripOffsets" }, - { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_SHORT, FIELD_STRIPOFFSETS, - FALSE, FALSE, "StripOffsets" }, - { TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, FIELD_ORIENTATION, - FALSE, FALSE, "Orientation" }, - { TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, FIELD_SAMPLESPERPIXEL, - FALSE, FALSE, "SamplesPerPixel" }, - { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, FIELD_ROWSPERSTRIP, - FALSE, FALSE, "RowsPerStrip" }, - { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_SHORT, FIELD_ROWSPERSTRIP, - FALSE, FALSE, "RowsPerStrip" }, - { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, - FALSE, FALSE, "StripByteCounts" }, - { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, - FALSE, FALSE, "StripByteCounts" }, - { TIFFTAG_MINSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MINSAMPLEVALUE, - TRUE, FALSE, "MinSampleValue" }, - { TIFFTAG_MAXSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MAXSAMPLEVALUE, - TRUE, FALSE, "MaxSampleValue" }, - { TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, - FALSE, FALSE, "XResolution" }, - { TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, - FALSE, FALSE, "YResolution" }, - { TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, FIELD_PLANARCONFIG, - FALSE, FALSE, "PlanarConfiguration" }, - { TIFFTAG_PAGENAME, -1,-1, TIFF_ASCII, FIELD_PAGENAME, - TRUE, FALSE, "PageName" }, - { TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, - TRUE, FALSE, "XPosition" }, - { TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, - TRUE, FALSE, "YPosition" }, - { TIFFTAG_FREEOFFSETS, -1,-1, TIFF_LONG, FIELD_IGNORE, - FALSE, FALSE, "FreeOffsets" }, - { TIFFTAG_FREEBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_IGNORE, - FALSE, FALSE, "FreeByteCounts" }, - { TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, - TRUE, FALSE, "GrayResponseUnit" }, - { TIFFTAG_GRAYRESPONSECURVE,-1,-1, TIFF_SHORT, FIELD_IGNORE, - TRUE, FALSE, "GrayResponseCurve" }, - { TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, FIELD_RESOLUTIONUNIT, - FALSE, FALSE, "ResolutionUnit" }, - { TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, FIELD_PAGENUMBER, - TRUE, FALSE, "PageNumber" }, - { TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, - TRUE, FALSE, "ColorResponseUnit" }, -#ifdef COLORIMETRY_SUPPORT - { TIFFTAG_TRANSFERFUNCTION, -1,-1, TIFF_SHORT, FIELD_TRANSFERFUNCTION, - TRUE, FALSE, "TransferFunction" }, -#endif - { TIFFTAG_SOFTWARE, -1,-1, TIFF_ASCII, FIELD_SOFTWARE, - TRUE, FALSE, "Software" }, - { TIFFTAG_DATETIME, 20,20, TIFF_ASCII, FIELD_DATETIME, - TRUE, FALSE, "DateTime" }, - { TIFFTAG_ARTIST, -1,-1, TIFF_ASCII, FIELD_ARTIST, - TRUE, FALSE, "Artist" }, - { TIFFTAG_HOSTCOMPUTER, -1,-1, TIFF_ASCII, FIELD_HOSTCOMPUTER, - TRUE, FALSE, "HostComputer" }, -#ifdef COLORIMETRY_SUPPORT - { TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL,FIELD_WHITEPOINT, - TRUE, FALSE, "WhitePoint" }, - { TIFFTAG_PRIMARYCHROMATICITIES,6,6,TIFF_RATIONAL,FIELD_PRIMARYCHROMAS, - TRUE, FALSE, "PrimaryChromaticities" }, -#endif - { TIFFTAG_COLORMAP, -1,-1, TIFF_SHORT, FIELD_COLORMAP, - TRUE, FALSE, "ColorMap" }, - { TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, FIELD_HALFTONEHINTS, - TRUE, FALSE, "HalftoneHints" }, - { TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, - FALSE, FALSE, "TileWidth" }, - { TIFFTAG_TILEWIDTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, - FALSE, FALSE, "TileWidth" }, - { TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, - FALSE, FALSE, "TileLength" }, - { TIFFTAG_TILELENGTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, - FALSE, FALSE, "TileLength" }, - { TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG, FIELD_STRIPOFFSETS, - FALSE, FALSE, "TileOffsets" }, - { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, - FALSE, FALSE, "TileByteCounts" }, - { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, - FALSE, FALSE, "TileByteCounts" }, -#ifdef TIFFTAG_SUBIFD - { TIFFTAG_SUBIFD, -1,-1, TIFF_LONG, FIELD_SUBIFD, - TRUE, TRUE, "SubIFD" }, -#endif -#ifdef CMYK_SUPPORT /* 6.0 CMYK tags */ - { TIFFTAG_INKSET, 1, 1, TIFF_SHORT, FIELD_INKSET, - FALSE, FALSE, "InkSet" }, - { TIFFTAG_INKNAMES, -1,-1, TIFF_ASCII, FIELD_INKNAMES, - TRUE, TRUE, "InkNames" }, - { TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, FIELD_NUMBEROFINKS, - TRUE, FALSE, "NumberOfInks" }, - { TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, FIELD_DOTRANGE, - FALSE, FALSE, "DotRange" }, - { TIFFTAG_DOTRANGE, 2, 2, TIFF_BYTE, FIELD_DOTRANGE, - FALSE, FALSE, "DotRange" }, - { TIFFTAG_TARGETPRINTER, -1,-1, TIFF_ASCII, FIELD_TARGETPRINTER, - TRUE, FALSE, "TargetPrinter" }, -#endif - { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_SHORT, FIELD_EXTRASAMPLES, - FALSE, FALSE, "ExtraSamples" }, -/* XXX for bogus Adobe Photoshop v2.5 files */ - { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_BYTE, FIELD_EXTRASAMPLES, - FALSE, FALSE, "ExtraSamples" }, - { TIFFTAG_SAMPLEFORMAT, -1,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, - FALSE, FALSE, "SampleFormat" }, - { TIFFTAG_SMINSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMINSAMPLEVALUE, - TRUE, FALSE, "SMinSampleValue" }, - { TIFFTAG_SMAXSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMAXSAMPLEVALUE, - TRUE, FALSE, "SMaxSampleValue" }, -#ifdef YCBCR_SUPPORT /* 6.0 YCbCr tags */ - { TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, FIELD_YCBCRCOEFFICIENTS, - FALSE, FALSE, "YCbCrCoefficients" }, - { TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, FIELD_YCBCRSUBSAMPLING, - FALSE, FALSE, "YCbCrSubsampling" }, - { TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, FIELD_YCBCRPOSITIONING, - FALSE, FALSE, "YCbCrPositioning" }, -#endif -#ifdef COLORIMETRY_SUPPORT - { TIFFTAG_REFERENCEBLACKWHITE,6,6,TIFF_RATIONAL, FIELD_REFBLACKWHITE, - TRUE, FALSE, "ReferenceBlackWhite" }, -/* XXX temporarily accept LONG for backwards compatibility */ - { TIFFTAG_REFERENCEBLACKWHITE,6,6,TIFF_LONG, FIELD_REFBLACKWHITE, - TRUE, FALSE, "ReferenceBlackWhite" }, -#endif -/* begin SGI tags */ - { TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, FIELD_EXTRASAMPLES, - FALSE, FALSE, "Matteing" }, - { TIFFTAG_DATATYPE, -2,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, - FALSE, FALSE, "DataType" }, - { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, FIELD_IMAGEDEPTH, - FALSE, FALSE, "ImageDepth" }, - { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDEPTH, - FALSE, FALSE, "ImageDepth" }, - { TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, FIELD_TILEDEPTH, - FALSE, FALSE, "TileDepth" }, - { TIFFTAG_TILEDEPTH, 1, 1, TIFF_SHORT, FIELD_TILEDEPTH, - FALSE, FALSE, "TileDepth" }, -/* end SGI tags */ -/* begin Pixar tags */ - { TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, FIELD_IMAGEFULLWIDTH, - TRUE, FALSE, "ImageFullWidth" }, - { TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, FIELD_IMAGEFULLLENGTH, - TRUE, FALSE, "ImageFullLength" }, - { TIFFTAG_PIXAR_TEXTUREFORMAT, -1,-1, TIFF_ASCII, FIELD_TEXTUREFORMAT, - TRUE, FALSE, "TextureFormat" }, - { TIFFTAG_PIXAR_WRAPMODES, -1,-1, TIFF_ASCII, FIELD_WRAPMODES, - TRUE, FALSE, "TextureWrapModes" }, - { TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, FIELD_FOVCOT, - TRUE, FALSE, "FieldOfViewCotan" }, - { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16,16, TIFF_FLOAT, - FIELD_MATRIX_WORLDTOSCREEN, TRUE, FALSE, "MatrixWorldToScreen" }, - { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16,16, TIFF_FLOAT, - FIELD_MATRIX_WORLDTOCAMERA, TRUE, FALSE, "MatrixWorldToCamera" }, - { TIFFTAG_COPYRIGHT, -1,-1, TIFF_ASCII, FIELD_COPYRIGHT, - TRUE, FALSE, "Copyright" }, -/* end Pixar tags */ -#ifdef IPTC_SUPPORT -#ifdef PHOTOSHOP_SUPPORT - { TIFFTAG_RICHTIFFIPTC, -1,-1, TIFF_LONG, FIELD_RICHTIFFIPTC, - FALSE, TRUE, "RichTIFFIPTC" }, -#else - { TIFFTAG_RICHTIFFIPTC, -1,-3, TIFF_UNDEFINED, FIELD_RICHTIFFIPTC, - FALSE, TRUE, "RichTIFFIPTC" }, -#endif -#endif -#ifdef PHOTOSHOP_SUPPORT - { TIFFTAG_PHOTOSHOP, -1,-3, TIFF_BYTE, FIELD_PHOTOSHOP, - FALSE, TRUE, "Photoshop" }, -#endif -#ifdef ICC_SUPPORT - { TIFFTAG_ICCPROFILE, -1,-3, TIFF_UNDEFINED, FIELD_ICCPROFILE, - FALSE, TRUE, "ICC Profile" }, -#endif - { TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, FIELD_STONITS, - FALSE, FALSE, "StoNits" }, -}; -#define N(a) (sizeof (a) / sizeof (a[0])) - -void -_TIFFSetupFieldInfo(TIFF* tif) -{ - if (tif->tif_fieldinfo) { - _TIFFfree(tif, tif->tif_fieldinfo); - tif->tif_nfields = 0; - } - _TIFFMergeFieldInfo(tif, tiffFieldInfo, N(tiffFieldInfo)); -} - -static int -tagCompare(const void* a, const void* b) -{ - const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a; - const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b; - /* NB: be careful of return values for 16-bit platforms */ - if (ta->field_tag != tb->field_tag) - return (ta->field_tag < tb->field_tag ? -1 : 1); - else - return (tb->field_type < ta->field_type ? -1 : 1); -} - -void -_TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n) -{ - TIFFFieldInfo** tp; - int i; - - if (tif->tif_nfields > 0) { - tif->tif_fieldinfo = (TIFFFieldInfo**) - _TIFFrealloc(tif, tif->tif_fieldinfo, - (tif->tif_nfields+n) * sizeof (TIFFFieldInfo*)); - } else { - tif->tif_fieldinfo = (TIFFFieldInfo**) - _TIFFmalloc(tif, n * sizeof (TIFFFieldInfo*)); - } - tp = &tif->tif_fieldinfo[tif->tif_nfields]; - for (i = 0; i < n; i++) - tp[i] = (TIFFFieldInfo*) &info[i]; /* XXX */ - /* - * NB: the core tags are presumed sorted correctly. - */ - if (tif->tif_nfields > 0) - qsort(tif->tif_fieldinfo, (size_t) (tif->tif_nfields += n), - sizeof (TIFFFieldInfo*), tagCompare); - else - tif->tif_nfields += n; -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -void -_TIFFPrintFieldInfo(TIFF* tif, FILE* fd) -{ - int i; - - fprintf(fd, "%s: \n", tif->tif_name); - for (i = 0; i < tif->tif_nfields; i++) { - const TIFFFieldInfo* fip = tif->tif_fieldinfo[i]; - fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n" - , i - , (unsigned long) fip->field_tag - , fip->field_readcount, fip->field_writecount - , fip->field_type - , fip->field_bit - , fip->field_oktochange ? "TRUE" : "FALSE" - , fip->field_passcount ? "TRUE" : "FALSE" - , fip->field_name - ); - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -const int tiffDataWidth[] = { - 1, /* nothing */ - 1, /* TIFF_BYTE */ - 1, /* TIFF_ASCII */ - 2, /* TIFF_SHORT */ - 4, /* TIFF_LONG */ - 8, /* TIFF_RATIONAL */ - 1, /* TIFF_SBYTE */ - 1, /* TIFF_UNDEFINED */ - 2, /* TIFF_SSHORT */ - 4, /* TIFF_SLONG */ - 8, /* TIFF_SRATIONAL */ - 4, /* TIFF_FLOAT */ - 8, /* TIFF_DOUBLE */ -}; - -/* - * Return nearest TIFFDataType to the sample type of an image. - */ -TIFFDataType -_TIFFSampleToTagType(TIFF* tif) -{ - int bps = (int) TIFFhowmany(tif->tif_dir.td_bitspersample, 8); - - switch (tif->tif_dir.td_sampleformat) { - case SAMPLEFORMAT_IEEEFP: - return (bps == 4 ? TIFF_FLOAT : TIFF_DOUBLE); - case SAMPLEFORMAT_INT: - return (bps <= 1 ? TIFF_SBYTE : - bps <= 2 ? TIFF_SSHORT : TIFF_SLONG); - case SAMPLEFORMAT_UINT: - return (bps <= 1 ? TIFF_BYTE : - bps <= 2 ? TIFF_SHORT : TIFF_LONG); - case SAMPLEFORMAT_VOID: - return (TIFF_UNDEFINED); - } - /*NOTREACHED*/ - return (TIFF_UNDEFINED); -} - -const TIFFFieldInfo* -_TIFFFindFieldInfo(TIFF* tif, ttag_t tag, TIFFDataType dt) -{ - static const TIFFFieldInfo *last = NULL; - int i, n; - - if (last && last->field_tag == tag && - (dt == TIFF_ANY || dt == last->field_type)) - return (last); - /* NB: if table gets big, use sorted search (e.g. binary search) */ - for (i = 0, n = tif->tif_nfields; i < n; i++) { - const TIFFFieldInfo* fip = tif->tif_fieldinfo[i]; - if (fip->field_tag == tag && - (dt == TIFF_ANY || fip->field_type == dt)) - return (last = fip); - } - return ((const TIFFFieldInfo *)0); -} - -#include -#include - -const TIFFFieldInfo* -_TIFFFieldWithTag(TIFF* tif, ttag_t tag) -{ - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); - if (!fip) { - TIFFError("TIFFFieldWithTag", - "Internal error, unknown tag 0x%x", (tif_int) tag); - assert(fip != NULL); - /*NOTREACHED*/ - } - return (fip); -} diff --git a/src/libs/pdflib/libs/tiff/tif_dirread.c b/src/libs/pdflib/libs/tiff/tif_dirread.c deleted file mode 100644 index 1b35dd4c24..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_dirread.c +++ /dev/null @@ -1,1383 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_dirread.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Directory Read Support Routines. - */ -#include "tiffiop.h" - -#define IGNORE 0 /* tag placeholder used below */ - -#if HAVE_IEEEFP -#define TIFFCvtIEEEFloatToNative(tif, n, fp) -#define TIFFCvtIEEEDoubleToNative(tif, n, dp) -#else -extern void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*); -extern void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*); -#endif - -static void EstimateStripByteCounts(TIFF*, TIFFDirEntry*, uint16); -static void MissingRequired(TIFF*, const char*); -static int CheckDirCount(TIFF*, TIFFDirEntry*, uint32); -static tsize_t TIFFFetchData(TIFF*, TIFFDirEntry*, char*); -static tsize_t TIFFFetchString(TIFF*, TIFFDirEntry*, char*); -static float TIFFFetchRational(TIFF*, TIFFDirEntry*); -static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*); -static int TIFFFetchPerSampleShorts(TIFF*, TIFFDirEntry*, int*); -static int TIFFFetchPerSampleAnys(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchShortArray(TIFF*, TIFFDirEntry*, uint16*); -static int TIFFFetchStripThing(TIFF*, TIFFDirEntry*, long, uint32**); -static int TIFFFetchExtraSamples(TIFF*, TIFFDirEntry*); -static int TIFFFetchRefBlackWhite(TIFF*, TIFFDirEntry*); -static float TIFFFetchFloat(TIFF*, TIFFDirEntry*); -static int TIFFFetchFloatArray(TIFF*, TIFFDirEntry*, float*); -static int TIFFFetchDoubleArray(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchAnyArray(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchShortPair(TIFF*, TIFFDirEntry*); -static void ChopUpSingleUncompressedStrip(TIFF*); - -static char * -CheckMalloc(TIFF* tif, tsize_t n, const char* what) -{ - char *cp = (char*)_TIFFmalloc(tif, n); - if (cp == NULL) - TIFFError(tif->tif_name, "No space %s", what); - return (cp); -} - -/* - * Read the next TIFF directory from a file - * and convert it to the internal format. - * We read directories sequentially. - */ -int -TIFFReadDirectory(TIFF* tif) -{ - register TIFFDirEntry* dp; - register int n; - register TIFFDirectory* td; - TIFFDirEntry* dir; - int iv; - long v; - double dv; - const TIFFFieldInfo* fip; - int fix; - uint16 dircount; - toff_t nextdiroff; - char* cp; - int diroutoforderwarning = 0; - - tif->tif_diroff = tif->tif_nextdiroff; - if (tif->tif_diroff == 0) /* no more directories */ - return (0); - /* - * Cleanup any previous compression state. - */ - (*tif->tif_cleanup)(tif); - tif->tif_curdir++; - nextdiroff = 0; - if (!isMapped(tif)) { - if (!SeekOK(tif, tif->tif_diroff)) { - TIFFError(tif->tif_name, - "Seek error accessing TIFF directory"); - return (0); - } - if (!ReadOK(tif, &dircount, sizeof (uint16))) { - TIFFError(tif->tif_name, - "Can not read TIFF directory count"); - return (0); - } - - /* - * PDFlib GmbH: EFAX (*.jfx) files have a dircount of 0, - * and cannot be processed by TIFFlib. - */ - if (dircount == 0) - return (0); - - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - dir = (TIFFDirEntry *)CheckMalloc(tif, - dircount * sizeof (TIFFDirEntry), "to read TIFF directory"); - if (dir == NULL) - return (0); - if (!ReadOK(tif, dir, dircount*sizeof (TIFFDirEntry))) { - TIFFError(tif->tif_name, "Can not read TIFF directory"); - goto bad; - } - /* - * Read offset to next directory for sequential scans. - */ - (void) ReadOK(tif, &nextdiroff, ((tsize_t) sizeof (uint32))); - } else { - toff_t off = tif->tif_diroff; - - if (off + sizeof (uint16) > tif->tif_size) { - TIFFError(tif->tif_name, - "Can not read TIFF directory count"); - return (0); - } else - _TIFFmemcpy(&dircount, tif->tif_base + off, sizeof(uint16)); - off += sizeof (uint16); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - dir = (TIFFDirEntry *)CheckMalloc(tif, - dircount * sizeof (TIFFDirEntry), "to read TIFF directory"); - if (dir == NULL) - return (0); - if (off + dircount*sizeof (TIFFDirEntry) > tif->tif_size) { - TIFFError(tif->tif_name, "Can not read TIFF directory"); - goto bad; - } else - _TIFFmemcpy(dir, tif->tif_base + off, - dircount*sizeof (TIFFDirEntry)); - off += dircount* sizeof (TIFFDirEntry); - if (off + sizeof (uint32) <= tif->tif_size) - _TIFFmemcpy(&nextdiroff, tif->tif_base+off, sizeof(uint32)); - } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&nextdiroff); - tif->tif_nextdiroff = nextdiroff; - - tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */ - /* - * Setup default value and then make a pass over - * the fields to check type and tag information, - * and to extract info required to size data - * structures. A second pass is made afterwards - * to read in everthing not taken in the first pass. - */ - td = &tif->tif_dir; - /* free any old stuff and reinit */ - TIFFFreeDirectory(tif); - TIFFDefaultDirectory(tif); - /* - * Electronic Arts writes gray-scale TIFF files - * without a PlanarConfiguration directory entry. - * Thus we setup a default value here, even though - * the TIFF spec says there is no default value. - */ - TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); - - /* - * Sigh, we must make a separate pass through the - * directory for the following reason: - * - * We must process the Compression tag in the first pass - * in order to merge in codec-private tag definitions (otherwise - * we may get complaints about unknown tags). However, the - * Compression tag may be dependent on the SamplesPerPixel - * tag value because older TIFF specs permited Compression - * to be written as a SamplesPerPixel-count tag entry. - * Thus if we don't first figure out the correct SamplesPerPixel - * tag value then we may end up ignoring the Compression tag - * value because it has an incorrect count value (if the - * true value of SamplesPerPixel is not 1). - * - * It sure would have been nice if Aldus had really thought - * this stuff through carefully. - */ - for (dp = dir, n = dircount; n > 0; n--, dp++) { - if (tif->tif_flags & TIFF_SWAB) { - TIFFSwabArrayOfShort(&dp->tdir_tag, 2); - TIFFSwabArrayOfLong(&dp->tdir_count, 2); - } - if (dp->tdir_tag == TIFFTAG_SAMPLESPERPIXEL) { - if (!TIFFFetchNormalTag(tif, dp)) - goto bad; - dp->tdir_tag = IGNORE; - } - } - /* - * First real pass over the directory. - */ - fix = 0; - for (dp = dir, n = dircount; n > 0; n--, dp++) { - - /* - * Find the field information entry for this tag. - * Added check for tags to ignore ... [BFC] - */ - if( TIFFReassignTagToIgnore(TIS_EXTRACT, dp->tdir_tag) ) - dp->tdir_tag = IGNORE; - - if (dp->tdir_tag == IGNORE) - continue; - - /* - * Silicon Beach (at least) writes unordered - * directory tags (violating the spec). Handle - * it here, but be obnoxious (maybe they'll fix it?). - */ - if (dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag) { - if (!diroutoforderwarning) { - TIFFWarning(tif->tif_name, - "invalid TIFF directory; tags are not sorted in ascending order"); - diroutoforderwarning = 1; - } - fix = 0; /* O(n^2) */ - } - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - if (fix == tif->tif_nfields || - tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) { - TIFFWarning(tif->tif_name, - "unknown field with tag %d (0x%x) ignored", - dp->tdir_tag, dp->tdir_tag); - dp->tdir_tag = IGNORE; - fix = 0; /* restart search */ - continue; - } - /* - * Null out old tags that we ignore. - */ - if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) { - ignore: - dp->tdir_tag = IGNORE; - continue; - } - /* - * Check data type. - */ - fip = tif->tif_fieldinfo[fix]; - while (dp->tdir_type != (tif_short) fip->field_type) { - if (fip->field_type == TIFF_ANY) /* wildcard */ - break; - fip++, fix++; - if (fix == tif->tif_nfields || - fip->field_tag != dp->tdir_tag) { - TIFFWarning(tif->tif_name, - "wrong data type %d for \"%s\"; tag ignored", - dp->tdir_type, fip[-1].field_name); - goto ignore; - } - } - /* - * Check count if known in advance. - */ - if (fip->field_readcount != TIFF_VARIABLE) { - uint32 expected = (fip->field_readcount == TIFF_SPP) ? - (uint32) td->td_samplesperpixel : - (uint32) fip->field_readcount; - if (!CheckDirCount(tif, dp, expected)) - goto ignore; - } - - switch (dp->tdir_tag) { - case TIFFTAG_COMPRESSION: - /* - * The 5.0 spec says the Compression tag has - * one value, while earlier specs say it has - * one value per sample. Because of this, we - * accept the tag if one value is supplied. - */ - if (dp->tdir_count == 1) { - v = TIFFExtractData(tif, - dp->tdir_type, dp->tdir_offset); - if (!TIFFSetField(tif, dp->tdir_tag, (int)v)) - goto bad; - break; - } - if (!TIFFFetchPerSampleShorts(tif, dp, &iv) || - !TIFFSetField(tif, dp->tdir_tag, iv)) - goto bad; - dp->tdir_tag = IGNORE; - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEOFFSETS: - case TIFFTAG_TILEBYTECOUNTS: - TIFFSetFieldBit(tif, fip->field_bit); - break; - case TIFFTAG_IMAGEWIDTH: - case TIFFTAG_IMAGELENGTH: - case TIFFTAG_IMAGEDEPTH: - case TIFFTAG_TILELENGTH: - case TIFFTAG_TILEWIDTH: - case TIFFTAG_TILEDEPTH: - case TIFFTAG_PLANARCONFIG: - case TIFFTAG_ROWSPERSTRIP: - if (!TIFFFetchNormalTag(tif, dp)) - goto bad; - dp->tdir_tag = IGNORE; - break; - case TIFFTAG_EXTRASAMPLES: - (void) TIFFFetchExtraSamples(tif, dp); - dp->tdir_tag = IGNORE; - break; - } - } - - /* - * Allocate directory structure and setup defaults. - */ - if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) { - MissingRequired(tif, "ImageLength"); - goto bad; - } - if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG)) { - MissingRequired(tif, "PlanarConfiguration"); - goto bad; - } - /* - * Setup appropriate structures (by strip or by tile) - */ - if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) { - td->td_nstrips = TIFFNumberOfStrips(tif); - td->td_tilewidth = td->td_imagewidth; - td->td_tilelength = td->td_rowsperstrip; - td->td_tiledepth = td->td_imagedepth; - tif->tif_flags &= ~TIFF_ISTILED; - } else { - td->td_nstrips = TIFFNumberOfTiles(tif); - tif->tif_flags |= TIFF_ISTILED; - } - td->td_stripsperimage = td->td_nstrips; - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - td->td_stripsperimage /= td->td_samplesperpixel; - if (!TIFFFieldSet(tif, FIELD_STRIPOFFSETS)) { - MissingRequired(tif, - isTiled(tif) ? "TileOffsets" : "StripOffsets"); - goto bad; - } - - /* - * Second pass: extract other information. - */ - for (dp = dir, n = dircount; n > 0; n--, dp++) { - if (dp->tdir_tag == IGNORE) - continue; - switch (dp->tdir_tag) { - case TIFFTAG_MINSAMPLEVALUE: - case TIFFTAG_MAXSAMPLEVALUE: - case TIFFTAG_BITSPERSAMPLE: - /* - * The 5.0 spec says the Compression tag has - * one value, while earlier specs say it has - * one value per sample. Because of this, we - * accept the tag if one value is supplied. - * - * The MinSampleValue, MaxSampleValue and - * BitsPerSample tags are supposed to be written - * as one value/sample, but some vendors incorrectly - * write one value only -- so we accept that - * as well (yech). - */ - if (dp->tdir_count == 1) { - v = TIFFExtractData(tif, - dp->tdir_type, dp->tdir_offset); - if (!TIFFSetField(tif, dp->tdir_tag, (int)v)) - goto bad; - break; - } - /* fall thru... */ - case TIFFTAG_DATATYPE: - case TIFFTAG_SAMPLEFORMAT: - if (!TIFFFetchPerSampleShorts(tif, dp, &iv) || - !TIFFSetField(tif, dp->tdir_tag, iv)) - goto bad; - break; - case TIFFTAG_SMINSAMPLEVALUE: - case TIFFTAG_SMAXSAMPLEVALUE: - if (!TIFFFetchPerSampleAnys(tif, dp, &dv) || - !TIFFSetField(tif, dp->tdir_tag, dv)) - goto bad; - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_TILEOFFSETS: - if (!TIFFFetchStripThing(tif, dp, - td->td_nstrips, &td->td_stripoffset)) - goto bad; - break; - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEBYTECOUNTS: - if (!TIFFFetchStripThing(tif, dp, - td->td_nstrips, &td->td_stripbytecount)) - goto bad; - break; - case TIFFTAG_COLORMAP: - case TIFFTAG_TRANSFERFUNCTION: - /* - * TransferFunction can have either 1x or 3x data - * values; Colormap can have only 3x items. - */ - v = 1L<td_bitspersample; - if (dp->tdir_tag == TIFFTAG_COLORMAP || - dp->tdir_count != (uint32) v) { - if (!CheckDirCount(tif, dp, (uint32)(3*v))) - break; - } - v *= sizeof (uint16); - cp = CheckMalloc(tif, dp->tdir_count * sizeof (uint16), - "to read \"TransferFunction\" tag"); - if (cp != NULL) { - if (TIFFFetchData(tif, dp, cp)) { - /* - * This deals with there being only - * one array to apply to all samples. - */ - uint32 c = - (uint32)1 << td->td_bitspersample; - if (dp->tdir_count == c) - v = 0; - TIFFSetField(tif, dp->tdir_tag, - cp, cp+v, cp+2*v); - } - _TIFFfree(tif, cp); - } - break; - case TIFFTAG_PAGENUMBER: - case TIFFTAG_HALFTONEHINTS: - case TIFFTAG_YCBCRSUBSAMPLING: - case TIFFTAG_DOTRANGE: - (void) TIFFFetchShortPair(tif, dp); - break; -#ifdef COLORIMETRY_SUPPORT - case TIFFTAG_REFERENCEBLACKWHITE: - (void) TIFFFetchRefBlackWhite(tif, dp); - break; -#endif -/* BEGIN REV 4.0 COMPATIBILITY */ - case TIFFTAG_OSUBFILETYPE: - v = 0; - switch (TIFFExtractData(tif, dp->tdir_type, - dp->tdir_offset)) { - case OFILETYPE_REDUCEDIMAGE: - v = FILETYPE_REDUCEDIMAGE; - break; - case OFILETYPE_PAGE: - v = FILETYPE_PAGE; - break; - } - if (v) - (void) TIFFSetField(tif, - TIFFTAG_SUBFILETYPE, (int)v); - break; -/* END REV 4.0 COMPATIBILITY */ - default: - (void) TIFFFetchNormalTag(tif, dp); - break; - } - } - /* - * Verify Palette image has a Colormap. - */ - if (td->td_photometric == PHOTOMETRIC_PALETTE && - !TIFFFieldSet(tif, FIELD_COLORMAP)) { - MissingRequired(tif, "Colormap"); - goto bad; - } - /* - * Attempt to deal with a missing StripByteCounts tag. - */ - if (!TIFFFieldSet(tif, FIELD_STRIPBYTECOUNTS)) { - /* - * Some manufacturers violate the spec by not giving - * the size of the strips. In this case, assume there - * is one uncompressed strip of data. - */ - if ((td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_nstrips > 1) || - (td->td_planarconfig == PLANARCONFIG_SEPARATE && - td->td_nstrips != td->td_samplesperpixel)) { - MissingRequired(tif, "StripByteCounts"); - goto bad; - } - TIFFWarning(tif->tif_name, -"TIFF directory is missing required \"%s\" field, calculating from imagelength", - _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); - EstimateStripByteCounts(tif, dir, dircount); -#define BYTECOUNTLOOKSBAD \ - ((td->td_stripbytecount[0] == 0 && td->td_stripoffset[0] != 0) || \ - (td->td_compression == COMPRESSION_NONE && \ - td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0])) - } else if (td->td_nstrips == 1 && BYTECOUNTLOOKSBAD) { - /* - * Plexus (and others) sometimes give a value - * of zero for a tag when they don't know what - * the correct value is! Try and handle the - * simple case of estimating the size of a one - * strip image. - */ - TIFFWarning(tif->tif_name, - "Bogus \"%s\" field, ignoring and calculating from imagelength", - _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); - EstimateStripByteCounts(tif, dir, dircount); - } - if (dir) - _TIFFfree(tif, (char *)dir); - if (!TIFFFieldSet(tif, FIELD_MAXSAMPLEVALUE)) - td->td_maxsamplevalue = (uint16)((1L<td_bitspersample)-1); - /* - * Setup default compression scheme. - */ - if (!TIFFFieldSet(tif, FIELD_COMPRESSION)) - TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); - /* - * Some manufacturers make life difficult by writing - * large amounts of uncompressed data as a single strip. - * This is contrary to the recommendations of the spec. - * The following makes an attempt at breaking such images - * into strips closer to the recommended 8k bytes. A - * side effect, however, is that the RowsPerStrip tag - * value may be changed. - */ - if (td->td_nstrips == 1 && td->td_compression == COMPRESSION_NONE && - (tif->tif_flags & (TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP) - ChopUpSingleUncompressedStrip(tif); - /* - * Reinitialize i/o since we are starting on a new directory. - */ - tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; - tif->tif_col = (uint32) -1; - tif->tif_curtile = (ttile_t) -1; - tif->tif_tilesize = TIFFTileSize(tif); - tif->tif_scanlinesize = TIFFScanlineSize(tif); - return (1); -bad: - if (dir) - _TIFFfree(tif, dir); - return (0); -} - -static void -EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) -{ - register TIFFDirEntry *dp; - register TIFFDirectory *td = &tif->tif_dir; - uint16 i; - - if (td->td_stripbytecount) - _TIFFfree(tif, td->td_stripbytecount); - td->td_stripbytecount = (uint32*) - CheckMalloc(tif, td->td_nstrips * sizeof (uint32), - "for \"StripByteCounts\" array"); - if (td->td_compression != COMPRESSION_NONE) { - uint32 space = (uint32)(sizeof (TIFFHeader) - + sizeof (uint16) - + (dircount * sizeof (TIFFDirEntry)) - + sizeof (uint32)); - toff_t filesize = TIFFGetFileSize(tif); - uint16 n; - - /* calculate amount of space used by indirect values */ - for (dp = dir, n = dircount; n > 0; n--, dp++) { - uint32 cc = dp->tdir_count*tiffDataWidth[dp->tdir_type]; - if (cc > sizeof (uint32)) - space += cc; - } - space = filesize - space; - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - space /= td->td_samplesperpixel; - for (i = 0; i < td->td_nstrips; i++) - td->td_stripbytecount[i] = space; - /* - * This gross hack handles the case were the offset to - * the last strip is past the place where we think the strip - * should begin. Since a strip of data must be contiguous, - * it's safe to assume that we've overestimated the amount - * of data in the strip and trim this number back accordingly. - */ - i--; - if (((toff_t)(td->td_stripoffset[i]+td->td_stripbytecount[i])) - > filesize) - td->td_stripbytecount[i] = - filesize - td->td_stripoffset[i]; - } else { - uint32 rowbytes = TIFFScanlineSize(tif); - uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage; - for (i = 0; i < td->td_nstrips; i++) - td->td_stripbytecount[i] = rowbytes*rowsperstrip; - } - TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); - if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP)) - td->td_rowsperstrip = td->td_imagelength; -} - -static void -MissingRequired(TIFF* tif, const char* tagname) -{ - TIFFError(tif->tif_name, - "TIFF directory is missing required \"%s\" field", tagname); -} - -/* - * Check the count field of a directory - * entry against a known value. The caller - * is expected to skip/ignore the tag if - * there is a mismatch. - */ -static int -CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count) -{ - if (count != dir->tdir_count) { - TIFFWarning(tif->tif_name, - "incorrect count for field \"%s\" (%lu, expecting %lu); tag ignored", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, - dir->tdir_count, count); - return (0); - } - return (1); -} - -/* - * Fetch a contiguous directory item. - */ -static tsize_t -TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp) -{ - int w = tiffDataWidth[dir->tdir_type]; - tsize_t cc = dir->tdir_count * w; - - if (!isMapped(tif)) { - if (!SeekOK(tif, dir->tdir_offset)) - goto bad; - if (!ReadOK(tif, cp, cc)) - goto bad; - } else { - if (dir->tdir_offset + cc > tif->tif_size) - goto bad; - _TIFFmemcpy(cp, tif->tif_base + dir->tdir_offset, cc); - } - if (tif->tif_flags & TIFF_SWAB) { - switch (dir->tdir_type) { - case TIFF_SHORT: - case TIFF_SSHORT: - TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); - break; - case TIFF_LONG: - case TIFF_SLONG: - case TIFF_FLOAT: - TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); - break; - case TIFF_DOUBLE: - TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); - break; - } - } - return (cc); -bad: - TIFFError(tif->tif_name, "Error fetching data for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - return ((tsize_t) 0); -} - -/* - * Fetch an ASCII item from the file. - */ -static tsize_t -TIFFFetchString(TIFF* tif, TIFFDirEntry* dir, char* cp) -{ - if (dir->tdir_count <= 4) { - uint32 l = dir->tdir_offset; - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&l); - _TIFFmemcpy(cp, &l, dir->tdir_count); - return (1); - } - return (TIFFFetchData(tif, dir, cp)); -} - -/* - * Convert numerator+denominator to float. - */ -static int -cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv) -{ - if (denom == 0) { - TIFFError(tif->tif_name, - "%s: Rational with zero denominator (num = %lu)", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num); - return (0); - } else { - if (dir->tdir_type == TIFF_RATIONAL) - *rv = ((float)num / (float)denom); - else - *rv = ((float)(int32)num / (float)(int32)denom); - return (1); - } -} - -/* - * Fetch a rational item from the file - * at offset off and return the value - * as a floating point number. - */ -static float -TIFFFetchRational(TIFF* tif, TIFFDirEntry* dir) -{ - uint32 l[2]; - float v; - - return (!TIFFFetchData(tif, dir, (char *)l) || - !cvtRational(tif, dir, l[0], l[1], &v) ? 1.0f : v); -} - -/* - * Fetch a single floating point value - * from the offset field and return it - * as a native float. - */ -static float -TIFFFetchFloat(TIFF* tif, TIFFDirEntry* dir) -{ - long l = TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset); - float v = *(float*) &l; - TIFFCvtIEEEFloatToNative(tif, 1, &v); - return (v); -} - -/* - * Fetch an array of BYTE or SBYTE values. - */ -static int -TIFFFetchByteArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) -{ - if (dir->tdir_count <= 4) { - /* - * Extract data from offset field. - */ - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - switch (dir->tdir_count) { - case 4: v[3] = (uint16)(dir->tdir_offset & 0xff); - case 3: v[2] = (uint16)((dir->tdir_offset >> 8) & 0xff); - case 2: v[1] = (uint16)((dir->tdir_offset >> 16) & 0xff); - case 1: v[0] = (uint16)(dir->tdir_offset >> 24); - } - } else { - switch (dir->tdir_count) { - case 4: v[3] = (uint16)(dir->tdir_offset >> 24); - case 3: v[2] = (uint16)((dir->tdir_offset >> 16) & 0xff); - case 2: v[1] = (uint16)((dir->tdir_offset >> 8) & 0xff); - case 1: v[0] = (uint16)(dir->tdir_offset & 0xff); - } - } - return (1); - } else - return (TIFFFetchData(tif, dir, (char*) v) != 0); /* XXX */ -} - -/* - * Fetch an array of SHORT or SSHORT values. - */ -static int -TIFFFetchShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) -{ - if (dir->tdir_count <= 2) { - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - switch (dir->tdir_count) { - case 2: v[1] = (uint16) (dir->tdir_offset & 0xffff); - case 1: v[0] = (uint16) (dir->tdir_offset >> 16); - } - } else { - switch (dir->tdir_count) { - case 2: v[1] = (uint16) (dir->tdir_offset >> 16); - case 1: v[0] = (uint16) (dir->tdir_offset & 0xffff); - } - } - return (1); - } else - return (TIFFFetchData(tif, dir, (char *)v) != 0); -} - -/* - * Fetch a pair of SHORT or BYTE values. - */ -static int -TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir) -{ - uint16 v[2]; - int ok = 0; - - switch (dir->tdir_type) { - case TIFF_SHORT: - case TIFF_SSHORT: - ok = TIFFFetchShortArray(tif, dir, v); - break; - case TIFF_BYTE: - case TIFF_SBYTE: - ok = TIFFFetchByteArray(tif, dir, v); - break; - } - if (ok) - TIFFSetField(tif, dir->tdir_tag, v[0], v[1]); - return (ok); -} - -/* - * Fetch an array of LONG or SLONG values. - */ -static int -TIFFFetchLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v) -{ - if (dir->tdir_count == 1) { - v[0] = dir->tdir_offset; - return (1); - } else - return (TIFFFetchData(tif, dir, (char*) v) != 0); -} - -/* - * Fetch an array of RATIONAL or SRATIONAL values. - */ -static int -TIFFFetchRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v) -{ - int ok = 0; - uint32* l; - - l = (uint32*)CheckMalloc(tif, - dir->tdir_count*tiffDataWidth[dir->tdir_type], - "to fetch array of rationals"); - if (l) { - if (TIFFFetchData(tif, dir, (char *)l)) { - uint32 i; - for (i = 0; i < dir->tdir_count; i++) { - ok = cvtRational(tif, dir, - l[2*i+0], l[2*i+1], &v[i]); - if (!ok) - break; - } - } - _TIFFfree(tif, (char *)l); - } - return (ok); -} - -/* - * Fetch an array of FLOAT values. - */ -static int -TIFFFetchFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v) -{ - - if (dir->tdir_count == 1) { - v[0] = *(float*) &dir->tdir_offset; - TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); - return (1); - } else if (TIFFFetchData(tif, dir, (char*) v)) { - TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); - return (1); - } else - return (0); -} - -/* - * Fetch an array of DOUBLE values. - */ -static int -TIFFFetchDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v) -{ - if (TIFFFetchData(tif, dir, (char*) v)) { - TIFFCvtIEEEDoubleToNative(tif, dir->tdir_count, v); - return (1); - } else - return (0); -} - -/* - * Fetch an array of ANY values. The actual values are - * returned as doubles which should be able hold all the - * types. Yes, there really should be an tany_t to avoid - * this potential non-portability ... Note in particular - * that we assume that the double return value vector is - * large enough to read in any fundamental type. We use - * that vector as a buffer to read in the base type vector - * and then convert it in place to double (from end - * to front of course). - */ -static int -TIFFFetchAnyArray(TIFF* tif, TIFFDirEntry* dir, double* v) -{ - int i; - - switch (dir->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - if (!TIFFFetchByteArray(tif, dir, (uint16*) v)) - return (0); - if (dir->tdir_type == TIFF_BYTE) { - uint16* vp = (uint16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int16* vp = (int16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_SHORT: - case TIFF_SSHORT: - if (!TIFFFetchShortArray(tif, dir, (uint16*) v)) - return (0); - if (dir->tdir_type == TIFF_SHORT) { - uint16* vp = (uint16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int16* vp = (int16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_LONG: - case TIFF_SLONG: - if (!TIFFFetchLongArray(tif, dir, (uint32*) v)) - return (0); - if (dir->tdir_type == TIFF_LONG) { - uint32* vp = (uint32*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int32* vp = (int32*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - if (!TIFFFetchRationalArray(tif, dir, (float*) v)) - return (0); - { float* vp = (float*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_FLOAT: - if (!TIFFFetchFloatArray(tif, dir, (float*) v)) - return (0); - { float* vp = (float*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_DOUBLE: - return (TIFFFetchDoubleArray(tif, dir, (double*) v)); - default: - /* TIFF_NOTYPE */ - /* TIFF_ASCII */ - /* TIFF_UNDEFINED */ - TIFFError(tif->tif_name, - "Cannot read TIFF_ANY type %d for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - return (0); - } - return (1); -} - -/* - * Fetch a tag that is not handled by special case code. - */ -static int -TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp) -{ - static const char mesg[] = "to fetch tag value"; - int ok = 0; - const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag); - - if (dp->tdir_count > 1) { /* array of values */ - char* cp = NULL; - - switch (dp->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - /* NB: always expand BYTE values to shorts */ - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (uint16), mesg); - ok = cp && TIFFFetchByteArray(tif, dp, (uint16*) cp); - break; - case TIFF_SHORT: - case TIFF_SSHORT: - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (uint16), mesg); - ok = cp && TIFFFetchShortArray(tif, dp, (uint16*) cp); - break; - case TIFF_LONG: - case TIFF_SLONG: - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (uint32), mesg); - ok = cp && TIFFFetchLongArray(tif, dp, (uint32*) cp); - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (float), mesg); - ok = cp && TIFFFetchRationalArray(tif, dp, (float*) cp); - break; - case TIFF_FLOAT: - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (float), mesg); - ok = cp && TIFFFetchFloatArray(tif, dp, (float*) cp); - break; - case TIFF_DOUBLE: - cp = CheckMalloc(tif, - dp->tdir_count * sizeof (double), mesg); - ok = cp && TIFFFetchDoubleArray(tif, dp, (double*) cp); - break; - case TIFF_ASCII: - case TIFF_UNDEFINED: /* bit of a cheat... */ - /* - * Some vendors write strings w/o the trailing - * NULL byte, so always append one just in case. - */ - cp = CheckMalloc(tif, dp->tdir_count+1, mesg); - if( (ok = (cp && TIFFFetchString(tif, dp, cp))) != 0 ) - cp[dp->tdir_count] = '\0'; /* XXX */ - break; - } - if (ok) { - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, dp->tdir_count, cp) - : TIFFSetField(tif, dp->tdir_tag, cp)); - } - if (cp != NULL) - _TIFFfree(tif, cp); - } else if (CheckDirCount(tif, dp, 1)) { /* singleton value */ - switch (dp->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - case TIFF_SHORT: - case TIFF_SSHORT: - /* - * If the tag is also acceptable as a LONG or SLONG - * then TIFFSetField will expect an uint32 parameter - * passed to it (through varargs). Thus, for machines - * where sizeof (int) != sizeof (uint32) we must do - * a careful check here. It's hard to say if this - * is worth optimizing. - * - * NB: We use TIFFFieldWithTag here knowing that - * it returns us the first entry in the table - * for the tag and that that entry is for the - * widest potential data type the tag may have. - */ - { TIFFDataType type = fip->field_type; - if (type != TIFF_LONG && type != TIFF_SLONG) { - uint16 v = (uint16) - TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)); - break; - } - } - /* fall thru... */ - case TIFF_LONG: - case TIFF_SLONG: - { uint32 v32 = - TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v32) - : TIFFSetField(tif, dp->tdir_tag, v32)); - } - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - case TIFF_FLOAT: - { float v = (dp->tdir_type == TIFF_FLOAT ? - TIFFFetchFloat(tif, dp) - : TIFFFetchRational(tif, dp)); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)); - } - break; - case TIFF_DOUBLE: - { double v; - ok = (TIFFFetchDoubleArray(tif, dp, &v) && - (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)) - ); - } - break; - case TIFF_ASCII: - case TIFF_UNDEFINED: /* bit of a cheat... */ - { char c[2]; - if( (ok = (TIFFFetchString(tif, dp, c) != 0)) != 0 ){ - c[1] = '\0'; /* XXX paranoid */ - ok = TIFFSetField(tif, dp->tdir_tag, c); - } - } - break; - } - } - return (ok); -} - -#define NITEMS(x) (sizeof (x) / sizeof (x[0])) -/* - * Fetch samples/pixel short values for - * the specified tag and verify that - * all values are the same. - */ -static int -TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, int* pl) -{ - int samples = tif->tif_dir.td_samplesperpixel; - int status = 0; - - if (CheckDirCount(tif, dir, (uint32) samples)) { - uint16 buf[10]; - uint16* v = buf; - - if (samples > (int)NITEMS(buf)) - v=(uint16*) _TIFFmalloc(tif, samples * sizeof (uint16)); - if (TIFFFetchShortArray(tif, dir, v)) { - int i; - for (i = 1; i < samples; i++) - if (v[i] != v[0]) { - TIFFError(tif->tif_name, - "Cannot handle different per-sample values for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - goto bad; - } - *pl = v[0]; - status = 1; - } - bad: - if (v != buf) - _TIFFfree(tif, (char*) v); - } - return (status); -} - -/* - * Fetch samples/pixel ANY values for - * the specified tag and verify that - * all values are the same. - */ -static int -TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl) -{ - int samples = (int) tif->tif_dir.td_samplesperpixel; - int status = 0; - - if (CheckDirCount(tif, dir, (uint32) samples)) { - double buf[10]; - double* v = buf; - - if (samples > (int)NITEMS(buf)) - v=(double*) _TIFFmalloc(tif, samples * sizeof (double)); - if (TIFFFetchAnyArray(tif, dir, v)) { - int i; - for (i = 1; i < samples; i++) - if (v[i] != v[0]) { - TIFFError(tif->tif_name, - "Cannot handle different per-sample values for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - goto bad; - } - *pl = v[0]; - status = 1; - } - bad: - if (v != buf) - _TIFFfree(tif, v); - } - return (status); -} -#undef NITEMS - -/* - * Fetch a set of offsets or lengths. - * While this routine says "strips", - * in fact it's also used for tiles. - */ -static int -TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, long nstrips, uint32** lpp) -{ - register uint32* lp; - int status; - - if (!CheckDirCount(tif, dir, (uint32) nstrips)) - return (0); - /* - * Allocate space for strip information. - */ - if (*lpp == NULL && - (*lpp = (uint32 *)CheckMalloc(tif, - nstrips * sizeof (uint32), "for strip array")) == NULL) - return (0); - lp = *lpp; - if (dir->tdir_type == (int)TIFF_SHORT) { - /* - * Handle uint16->uint32 expansion. - */ - uint16* dp = (uint16*) CheckMalloc(tif, - dir->tdir_count* sizeof (uint16), "to fetch strip tag"); - if (dp == NULL) - return (0); - if( (status = TIFFFetchShortArray(tif, dir, dp)) != 0 ) { - register uint16* wp = dp; - while (nstrips-- > 0) - *lp++ = *wp++; - } - _TIFFfree(tif, (char*) dp); - } else - status = TIFFFetchLongArray(tif, dir, lp); - return (status); -} - -#define NITEMS(x) (sizeof (x) / sizeof (x[0])) -/* - * Fetch and set the ExtraSamples tag. - */ -static int -TIFFFetchExtraSamples(TIFF* tif, TIFFDirEntry* dir) -{ - uint16 buf[10]; - uint16* v = buf; - int status; - - if (dir->tdir_count > NITEMS(buf)) - v=(uint16*) _TIFFmalloc(tif, dir->tdir_count * sizeof (uint16)); - if (dir->tdir_type == TIFF_BYTE) - status = TIFFFetchByteArray(tif, dir, v); - else - status = TIFFFetchShortArray(tif, dir, v); - if (status) - status = TIFFSetField(tif, dir->tdir_tag, dir->tdir_count, v); - if (v != buf) - _TIFFfree(tif, (char*) v); - return (status); -} -#undef NITEMS - -#ifdef COLORIMETRY_SUPPORT -/* - * Fetch and set the RefBlackWhite tag. - */ -static int -TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir) -{ - static const char mesg[] = "for \"ReferenceBlackWhite\" array"; - char* cp; - int ok; - - if (dir->tdir_type == TIFF_RATIONAL) - return (TIFFFetchNormalTag(tif, dir)); - /* - * Handle LONG's for backward compatibility. - */ - cp = CheckMalloc(tif, dir->tdir_count * sizeof (uint32), mesg); - if( (ok = (cp && TIFFFetchLongArray(tif, dir, (uint32*) cp))) != 0) { - float* fp = (float*) - CheckMalloc(tif, dir->tdir_count * sizeof (float), mesg); - if( (ok = (fp != NULL)) != 0 ) { - uint32 i; - for (i = 0; i < dir->tdir_count; i++) - fp[i] = (float)((uint32*) cp)[i]; - ok = TIFFSetField(tif, dir->tdir_tag, fp); - _TIFFfree(tif, (char*) fp); - } - } - if (cp) - _TIFFfree(tif, cp); - return (ok); -} -#endif - -/* - * Replace a single strip (tile) of uncompressed data by - * multiple strips (tiles), each approximately 8Kbytes. - * This is useful for dealing with large images or - * for dealing with machines with a limited amount - * memory. - */ -static void -ChopUpSingleUncompressedStrip(TIFF* tif) -{ - register TIFFDirectory *td = &tif->tif_dir; - uint32 bytecount = td->td_stripbytecount[0]; - uint32 offset = td->td_stripoffset[0]; - tsize_t rowbytes = TIFFVTileSize(tif, 1), stripbytes; - tstrip_t strip, nstrips, rowsperstrip; - uint32* newcounts; - uint32* newoffsets; - - /* - * Make the rows hold at least one - * scanline, but fill 8k if possible. - */ - if (rowbytes > 8192) { - stripbytes = rowbytes; - rowsperstrip = 1; - } else { - rowsperstrip = 8192 / rowbytes; - stripbytes = rowbytes * rowsperstrip; - } - /* never increase the number of strips in an image */ - if (rowsperstrip >= td->td_rowsperstrip) - return; - nstrips = (tstrip_t) TIFFhowmany(bytecount, stripbytes); - newcounts = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), - "for chopped \"StripByteCounts\" array"); - newoffsets = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), - "for chopped \"StripOffsets\" array"); - if (newcounts == NULL || newoffsets == NULL) { - /* - * Unable to allocate new strip information, give - * up and use the original one strip information. - */ - if (newcounts != NULL) - _TIFFfree(tif, newcounts); - if (newoffsets != NULL) - _TIFFfree(tif, newoffsets); - return; - } - /* - * Fill the strip information arrays with - * new bytecounts and offsets that reflect - * the broken-up format. - */ - for (strip = 0; strip < nstrips; strip++) { - if (stripbytes > (tsize_t) bytecount) - stripbytes = bytecount; - newcounts[strip] = stripbytes; - newoffsets[strip] = offset; - offset += stripbytes; - bytecount -= stripbytes; - } - /* - * Replace old single strip info with multi-strip info. - */ - td->td_stripsperimage = td->td_nstrips = nstrips; - TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); - - _TIFFfree(tif, td->td_stripbytecount); - _TIFFfree(tif, td->td_stripoffset); - td->td_stripbytecount = newcounts; - td->td_stripoffset = newoffsets; -} diff --git a/src/libs/pdflib/libs/tiff/tif_dumpmode.c b/src/libs/pdflib/libs/tiff/tif_dumpmode.c deleted file mode 100644 index a91989a336..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_dumpmode.c +++ /dev/null @@ -1,122 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_dumpmode.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * "Null" Compression Algorithm Support. - */ -#include "tiffiop.h" -#include - -/* - * Encode a hunk of pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -DumpModeEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) -{ - (void) s; - while (cc > 0) { - tsize_t n; - - n = cc; - if (tif->tif_rawcc + n > tif->tif_rawdatasize) - n = tif->tif_rawdatasize - tif->tif_rawcc; - - assert( n > 0 ); - - /* - * Avoid copy if client has setup raw - * data buffer to avoid extra copy. - */ - if (tif->tif_rawcp != pp) - _TIFFmemcpy(tif->tif_rawcp, pp, n); - tif->tif_rawcp += n; - tif->tif_rawcc += n; - pp += n; - cc -= n; - if (tif->tif_rawcc >= tif->tif_rawdatasize && - !TIFFFlushData1(tif)) - return (-1); - } - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Decode a hunk of pixels. - */ -static int -DumpModeDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) -{ - (void) s; - if (tif->tif_rawcc < cc) { - TIFFError(tif->tif_name, - "DumpModeDecode: Not enough data for scanline %d", - tif->tif_row); - return (0); - } - /* - * Avoid copy if client has setup raw - * data buffer to avoid extra copy. - */ - if (tif->tif_rawcp != buf) - _TIFFmemcpy(buf, tif->tif_rawcp, cc); - tif->tif_rawcp += cc; - tif->tif_rawcc -= cc; - return (1); -} - -/* - * Seek forwards nrows in the current strip. - */ -static int -DumpModeSeek(TIFF* tif, uint32 nrows) -{ - tif->tif_rawcp += nrows * tif->tif_scanlinesize; - tif->tif_rawcc -= nrows * tif->tif_scanlinesize; - return (1); -} - -/* - * Initialize dump mode. - */ -int -TIFFInitDumpMode(TIFF* tif, int scheme) -{ - (void) scheme; - tif->tif_decoderow = DumpModeDecode; - tif->tif_decodestrip = DumpModeDecode; - tif->tif_decodetile = DumpModeDecode; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_encoderow = DumpModeEncode; - tif->tif_encodestrip = DumpModeEncode; - tif->tif_encodetile = DumpModeEncode; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - tif->tif_seek = DumpModeSeek; - return (1); -} diff --git a/src/libs/pdflib/libs/tiff/tif_error.c b/src/libs/pdflib/libs/tiff/tif_error.c deleted file mode 100644 index f505db3e4a..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_error.c +++ /dev/null @@ -1,49 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_error.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - */ -#include "tiffiop.h" - -TIFFErrorHandler -TIFFSetErrorHandler(TIFFErrorHandler handler) -{ - TIFFErrorHandler prev = _TIFFerrorHandler; - _TIFFerrorHandler = handler; - return (prev); -} - -void -TIFFError(const char* module, const char* fmt, ...) -{ - if (_TIFFerrorHandler) { - va_list ap; - va_start(ap, fmt); - (*_TIFFerrorHandler)(module, fmt, ap); - va_end(ap); - } -} diff --git a/src/libs/pdflib/libs/tiff/tif_fax3.c b/src/libs/pdflib/libs/tiff/tif_fax3.c deleted file mode 100644 index 4d1f69e790..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_fax3.c +++ /dev/null @@ -1,1578 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_fax3.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1990-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef CCITT_SUPPORT -/* - * TIFF Library. - * - * CCITT Group 3 (T.4) and Group 4 (T.6) Compression Support. - * - * This file contains support for decoding and encoding TIFF - * compression algorithms 2, 3, 4, and 32771. - * - * Decoder support is derived, with permission, from the code - * in Frank Cringle's viewfax program; - * Copyright (C) 1990, 1995 Frank D. Cringle. - */ -#include "tif_fax3.h" -#define G3CODES -#include "t4.h" -#include -#include - -/* - * Compression+decompression state blocks are - * derived from this ``base state'' block. - */ -typedef struct { - int rw_mode; /* O_RDONLY for decode, else encode */ - int mode; /* operating mode */ - uint32 rowbytes; /* bytes in a decoded scanline */ - uint32 rowpixels; /* pixels in a scanline */ - - uint16 cleanfaxdata; /* CleanFaxData tag */ - uint32 badfaxrun; /* BadFaxRun tag */ - uint32 badfaxlines; /* BadFaxLines tag */ - uint32 groupoptions; /* Group 3/4 options tag */ - uint32 recvparams; /* encoded Class 2 session params */ - char* subaddress; /* subaddress string */ - uint32 recvtime; /* time spent receiving (secs) */ - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ -} Fax3BaseState; -#define Fax3State(tif) ((Fax3BaseState*) (tif)->tif_data) - -typedef struct { - Fax3BaseState b; - const tif_char* bitmap; /* bit reversal table */ - uint32 data; /* current i/o byte/word */ - int bit; /* current i/o bit in byte */ - int EOLcnt; /* count of EOL codes recognized */ - TIFFFaxFillFunc fill; /* fill routine */ - uint32* runs; /* b&w runs for current/previous row */ - uint32* refruns; /* runs for reference line */ - uint32* curruns; /* runs for current line */ -} Fax3DecodeState; -#define DecoderState(tif) ((Fax3DecodeState*) Fax3State(tif)) - -typedef enum { G3_1D, G3_2D } Ttag; -typedef struct { - Fax3BaseState b; - int data; /* current i/o byte */ - int bit; /* current i/o bit in byte */ - Ttag tag; /* encoding state */ - tif_char*refline; /* reference line for 2d decoding */ - int k; /* #rows left that can be 2d encoded */ - int maxk; /* max #rows that can be 2d encoded */ -} Fax3EncodeState; -#define EncoderState(tif) ((Fax3EncodeState*) Fax3State(tif)) - -#define is2DEncoding(sp) \ - (sp->b.groupoptions & GROUP3OPT_2DENCODING) -#define isAligned(p,t) ((((tif_long)(p)) & (sizeof (t)-1)) == 0) - -/* - * Group 3 and Group 4 Decoding. - */ - -/* - * These macros glue the TIFF library state to - * the state expected by Frank's decoder. - */ -#define DECLARE_STATE(tif, sp, mod) \ - static const char module[] = mod; \ - Fax3DecodeState* sp = DecoderState(tif); \ - int a0; /* reference element */ \ - int lastx = sp->b.rowpixels; /* last element in row */ \ - uint32 BitAcc; /* bit accumulator */ \ - int BitsAvail; /* # valid bits in BitAcc */ \ - int RunLength; /* length of current run */ \ - tif_char* cp; /* next byte of input data */ \ - tif_char* ep; /* end of input data */ \ - uint32* pa; /* place to stuff next run */ \ - uint32* thisrun; /* current row's run array */ \ - int EOLcnt; /* # EOL codes recognized */ \ - const tif_char* bitmap = sp->bitmap;/* input data bit reverser */ \ - const TIFFFaxTabEnt* TabEnt -#define DECLARE_STATE_2D(tif, sp, mod) \ - DECLARE_STATE(tif, sp, mod); \ - int b1; /* next change on prev line */ \ - uint32* pb /* next run in reference line */\ -/* - * Load any state that may be changed during decoding. - */ -#define CACHE_STATE(tif, sp) do { \ - BitAcc = sp->data; \ - BitsAvail = sp->bit; \ - EOLcnt = sp->EOLcnt; \ - cp = (unsigned char*) tif->tif_rawcp; \ - ep = cp + tif->tif_rawcc; \ -} while (0) -/* - * Save state possibly changed during decoding. - */ -#define UNCACHE_STATE(tif, sp) do { \ - sp->bit = BitsAvail; \ - sp->data = BitAcc; \ - sp->EOLcnt = EOLcnt; \ - tif->tif_rawcc -= (tidata_t) cp - tif->tif_rawcp; \ - tif->tif_rawcp = (tidata_t) cp; \ -} while (0) - -/* - * Setup state for decoding a strip. - */ -static int -Fax3PreDecode(TIFF* tif, tsample_t s) -{ - Fax3DecodeState* sp = DecoderState(tif); - - (void) s; - assert(sp != NULL); - sp->bit = 0; /* force initial read */ - sp->data = 0; - sp->EOLcnt = 0; /* force initial scan for EOL */ - /* - * Decoder assumes lsb-to-msb bit order. Note that we select - * this here rather than in Fax3SetupState so that viewers can - * hold the image open, fiddle with the FillOrder tag value, - * and then re-decode the image. Otherwise they'd need to close - * and open the image to get the state reset. - */ - sp->bitmap = - TIFFGetBitRevTable(tif->tif_dir.td_fillorder != FILLORDER_LSB2MSB); - if (sp->refruns) { /* init reference line to white */ - sp->refruns[0] = (uint32) sp->b.rowpixels; - sp->refruns[1] = 0; - } - return (1); -} - -/* - * Routine for handling various errors/conditions. - * Note how they are "glued into the decoder" by - * overriding the definitions used by the decoder. - */ - -static void -Fax3Unexpected(const char* module, TIFF* tif, uint32 a0) -{ - TIFFError(module, "%s: Bad code word at scanline %d (x %lu)", - tif->tif_name, tif->tif_row, (tif_long) a0); -} -#define unexpected(table, a0) Fax3Unexpected(module, tif, a0) - -static void -Fax3Extension(const char* module, TIFF* tif, uint32 a0) -{ - TIFFError(module, - "%s: Uncompressed data (not supported) at scanline %d (x %lu)", - tif->tif_name, tif->tif_row, (tif_long) a0); -} -#define extension(a0) Fax3Extension(module, tif, a0) - -static void -Fax3BadLength(const char* module, TIFF* tif, uint32 a0, uint32 lastx) -{ - TIFFWarning(module, "%s: %s at scanline %d (got %lu, expected %lu)", - tif->tif_name, - a0 < lastx ? "Premature EOL" : "Line length mismatch", - tif->tif_row, (tif_long) a0, (tif_long) lastx); -} -#define badlength(a0,lastx) Fax3BadLength(module, tif, a0, lastx) - -static void -Fax3PrematureEOF(const char* module, TIFF* tif, uint32 a0) -{ - TIFFWarning(module, "%s: Premature EOF at scanline %d (x %lu)", - tif->tif_name, tif->tif_row, (tif_long) a0); -} -#define prematureEOF(a0) Fax3PrematureEOF(module, tif, a0) - -#define Nop - -/* - * Decode the requested amount of G3 1D-encoded data. - */ -static int -Fax3Decode1D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - DECLARE_STATE(tif, sp, "Fax3Decode1D"); - - (void) s; - CACHE_STATE(tif, sp); - thisrun = sp->curruns; - while ((long)occ > 0) { - a0 = 0; - RunLength = 0; - pa = thisrun; -#ifdef FAX3_DEBUG - printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); - printf("-------------------- %d\n", tif->tif_row); - fflush(stdout); -#endif - SYNC_EOL(EOF1D); - EXPAND1D(EOF1Da); - (*sp->fill)(buf, thisrun, pa, lastx); - buf += sp->b.rowbytes; - occ -= sp->b.rowbytes; - if (occ != 0) - tif->tif_row++; - continue; - EOF1D: /* premature EOF */ - CLEANUP_RUNS(); - EOF1Da: /* premature EOF */ - (*sp->fill)(buf, thisrun, pa, lastx); - UNCACHE_STATE(tif, sp); - return (-1); - } - UNCACHE_STATE(tif, sp); - return (1); -} - -#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } -/* - * Decode the requested amount of G3 2D-encoded data. - */ -static int -Fax3Decode2D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - DECLARE_STATE_2D(tif, sp, "Fax3Decode2D"); - int is1D; /* current line is 1d/2d-encoded */ - - (void) s; - CACHE_STATE(tif, sp); - while ((long)occ > 0) { - a0 = 0; - RunLength = 0; - pa = thisrun = sp->curruns; -#ifdef FAX3_DEBUG - printf("\nBitAcc=%08X, BitsAvail = %d EOLcnt = %d", - BitAcc, BitsAvail, EOLcnt); -#endif - SYNC_EOL(EOF2D); - NeedBits8(1, EOF2D); - is1D = GetBits(1); /* 1D/2D-encoding tag bit */ - ClrBits(1); -#ifdef FAX3_DEBUG - printf(" %s\n-------------------- %d\n", - is1D ? "1D" : "2D", tif->tif_row); - fflush(stdout); -#endif - pb = sp->refruns; - b1 = *pb++; - if (is1D) - EXPAND1D(EOF2Da); - else - EXPAND2D(EOF2Da); - (*sp->fill)(buf, thisrun, pa, lastx); - SETVAL(0); /* imaginary change for reference */ - SWAP(uint32*, sp->curruns, sp->refruns); - buf += sp->b.rowbytes; - occ -= sp->b.rowbytes; - if (occ != 0) - tif->tif_row++; - continue; - EOF2D: /* premature EOF */ - CLEANUP_RUNS(); - EOF2Da: /* premature EOF */ - (*sp->fill)(buf, thisrun, pa, lastx); - UNCACHE_STATE(tif, sp); - return (-1); - } - UNCACHE_STATE(tif, sp); - return (1); -} -#undef SWAP - -/* - * The ZERO & FILL macros must handle spans < 2*sizeof(long) bytes. - * For machines with 64-bit longs this is <16 bytes; otherwise - * this is <8 bytes. We optimize the code here to reflect the - * machine characteristics. - */ -#if defined(__alpha) || _MIPS_SZLONG == 64 || \ - defined(__LP64__) || defined(__LP64__) || defined(__arch64__) -#define FILL(n, cp) \ - switch (n) { \ - case 15:(cp)[14] = 0xff; case 14:(cp)[13] = 0xff; case 13: (cp)[12] = 0xff;\ - case 12:(cp)[11] = 0xff; case 11:(cp)[10] = 0xff; case 10: (cp)[9] = 0xff;\ - case 9: (cp)[8] = 0xff; case 8: (cp)[7] = 0xff; case 7: (cp)[6] = 0xff;\ - case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; case 4: (cp)[3] = 0xff;\ - case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \ - case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \ - } -#define ZERO(n, cp) \ - switch (n) { \ - case 15:(cp)[14] = 0; case 14:(cp)[13] = 0; case 13: (cp)[12] = 0; \ - case 12:(cp)[11] = 0; case 11:(cp)[10] = 0; case 10: (cp)[9] = 0; \ - case 9: (cp)[8] = 0; case 8: (cp)[7] = 0; case 7: (cp)[6] = 0; \ - case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; case 4: (cp)[3] = 0; \ - case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \ - case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \ - } -#else -#define FILL(n, cp) \ - switch (n) { \ - case 7: (cp)[6] = 0xff; case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; \ - case 4: (cp)[3] = 0xff; case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \ - case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \ - } -#define ZERO(n, cp) \ - switch (n) { \ - case 7: (cp)[6] = 0; case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; \ - case 4: (cp)[3] = 0; case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \ - case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \ - } -#endif - -/* - * Bit-fill a row according to the white/black - * runs generated during G3/G4 decoding. - */ -void -_TIFFFax3fillruns(tif_char* buf, uint32* runs, uint32* erun, uint32 lastx) -{ - static const unsigned char _fillmasks[] = - { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; - tif_char* cp; - uint32 x, bx, run; - int32 n, nw; - long* lp; - - if ((erun-runs)&1) - *erun++ = 0; - x = 0; - for (; runs < erun; runs += 2) { - run = runs[0]; - if (x+run > lastx || run > lastx ) - run = runs[0] = (uint32) (lastx - x); - if (run) { - cp = buf + (x>>3); - bx = x&7; - if (run > 8-bx) { - if (bx) { /* align to byte boundary */ - *cp++ &= 0xff << (8-bx); - run -= 8-bx; - } - if( (n = run >> 3) != 0 ) { /* multiple bytes to fill */ - if ((n/sizeof (long)) > 1) { - /* - * Align to longword boundary and fill. - */ - for (; n && !isAligned(cp, long); n--) - *cp++ = 0x00; - lp = (long*) cp; - nw = (int32)(n / sizeof (long)); - n -= nw * sizeof (long); - do { - *lp++ = 0L; - } while (--nw); - cp = (tif_char*) lp; - } - ZERO(n, cp); - run &= 7; - } - if (run) - cp[0] &= 0xff >> run; - } else - cp[0] &= ~(_fillmasks[run]>>bx); - x += runs[0]; - } - run = runs[1]; - if (x+run > lastx || run > lastx ) - run = runs[1] = lastx - x; - if (run) { - cp = buf + (x>>3); - bx = x&7; - if (run > 8-bx) { - if (bx) { /* align to byte boundary */ - *cp++ |= 0xff >> bx; - run -= 8-bx; - } - if( (n = run>>3) != 0 ) { /* multiple bytes to fill */ - if ((n/sizeof (long)) > 1) { - /* - * Align to longword boundary and fill. - */ - for (; n && !isAligned(cp, long); n--) - *cp++ = 0xff; - lp = (long*) cp; - nw = (int32)(n / sizeof (long)); - n -= nw * sizeof (long); - do { - *lp++ = -1L; - } while (--nw); - cp = (tif_char*) lp; - } - FILL(n, cp); - run &= 7; - } - if (run) - cp[0] |= 0xff00 >> run; - } else - cp[0] |= _fillmasks[run]>>bx; - x += runs[1]; - } - } - assert(x == lastx); -} -#undef ZERO -#undef FILL - -/* - * Setup G3/G4-related compression/decompression state - * before data is processed. This routine is called once - * per image -- it sets up different state based on whether - * or not decoding or encoding is being done and whether - * 1D- or 2D-encoded data is involved. - */ -static int -Fax3SetupState(TIFF* tif) -{ - TIFFDirectory* td = &tif->tif_dir; - Fax3BaseState* sp = Fax3State(tif); - long rowbytes, rowpixels; - int needsRefLine; - - if (td->td_bitspersample != 1) { - TIFFError(tif->tif_name, - "Bits/sample must be 1 for Group 3/4 encoding/decoding"); - return (0); - } - /* - * Calculate the scanline/tile widths. - */ - if (isTiled(tif)) { - rowbytes = TIFFTileRowSize(tif); - rowpixels = td->td_tilewidth; - } else { - rowbytes = TIFFScanlineSize(tif); - rowpixels = td->td_imagewidth; - } - sp->rowbytes = (uint32) rowbytes; - sp->rowpixels = (uint32) rowpixels; - /* - * Allocate any additional space required for decoding/encoding. - */ - needsRefLine = ( - (sp->groupoptions & GROUP3OPT_2DENCODING) || - td->td_compression == COMPRESSION_CCITTFAX4 - ); - if (sp->rw_mode == O_RDONLY) { /* 1d/2d decoding */ - Fax3DecodeState* dsp = DecoderState(tif); - uint32 nruns = needsRefLine ? - 2*TIFFroundup(rowpixels,32) : rowpixels; - - dsp->runs=(uint32*)_TIFFmalloc(tif,(2*nruns+3)*sizeof(uint32)); - if (dsp->runs == NULL) { - TIFFError("Fax3SetupState", - "%s: No space for Group 3/4 run arrays", - tif->tif_name); - return (0); - } - dsp->curruns = dsp->runs; - if (needsRefLine) - dsp->refruns = dsp->runs + (nruns>>1); - else - dsp->refruns = NULL; - if (is2DEncoding(dsp)) { /* NB: default is 1D routine */ - tif->tif_decoderow = Fax3Decode2D; - tif->tif_decodestrip = Fax3Decode2D; - tif->tif_decodetile = Fax3Decode2D; - } - } else if (needsRefLine) { /* 2d encoding */ - Fax3EncodeState* esp = EncoderState(tif); - /* - * 2d encoding requires a scanline - * buffer for the ``reference line''; the - * scanline against which delta encoding - * is referenced. The reference line must - * be initialized to be ``white'' (done elsewhere). - */ - esp->refline = (tif_char*) _TIFFmalloc(tif, rowbytes); - if (esp->refline == NULL) { - TIFFError("Fax3SetupState", - "%s: No space for Group 3/4 reference line", - tif->tif_name); - return (0); - } - } else /* 1d encoding */ - EncoderState(tif)->refline = NULL; - return (1); -} - -/* - * CCITT Group 3 FAX Encoding. - */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -#define Fax3FlushBits(tif, sp) { \ - if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ - (void) TIFFFlushData1(tif); \ - *(tif)->tif_rawcp++ = (sp)->data; \ - (tif)->tif_rawcc++; \ - (sp)->data = 0, (sp)->bit = 8; \ -} -#define _FlushBits(tif) { \ - if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ - (void) TIFFFlushData1(tif); \ - *(tif)->tif_rawcp++ = data; \ - (tif)->tif_rawcc++; \ - data = 0, bit = 8; \ -} -static const int _msbmask[9] = - { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; -#define _PutBits(tif, bits, length) { \ - while (length > bit) { \ - data |= bits >> (length - bit); \ - length -= bit; \ - _FlushBits(tif); \ - } \ - data |= (bits & _msbmask[length]) << (bit - length); \ - bit -= length; \ - if (bit == 0) \ - _FlushBits(tif); \ -} - -/* - * Write a variable-length bit-value to - * the output stream. Values are - * assumed to be at most 16 bits. - */ -static void -Fax3PutBits(TIFF* tif, tif_int bits, tif_int length) -{ - Fax3EncodeState* sp = EncoderState(tif); - tif_int bit = sp->bit; - int data = sp->data; - - _PutBits(tif, bits, length); - - sp->data = data; - sp->bit = bit; -} - -/* - * Write a code to the output stream. - */ -#define putcode(tif, te) Fax3PutBits(tif, (te)->code, (te)->length) - -#ifdef FAX3_DEBUG -#define DEBUG_COLOR(w) (tab == TIFFFaxWhiteCodes ? w "W" : w "B") -#define DEBUG_PRINT(what,len) { \ - int t; \ - printf("%08X/%-2d: %s%5d\t", data, bit, DEBUG_COLOR(what), len); \ - for (t = length-1; t >= 0; t--) \ - putchar(code & (1<bit; - int data = sp->data; - tif_int code, length; - - while (span >= 2624) { - const tableentry* te = &tab[63 + (2560>>6)]; - code = te->code, length = te->length; -#ifdef FAX3_DEBUG - DEBUG_PRINT("MakeUp", te->runlen); -#endif - _PutBits(tif, code, length); - span -= te->runlen; - } - if (span >= 64) { - const tableentry* te = &tab[63 + (span>>6)]; - assert(te->runlen == 64*(span>>6)); - code = te->code, length = te->length; -#ifdef FAX3_DEBUG - DEBUG_PRINT("MakeUp", te->runlen); -#endif - _PutBits(tif, code, length); - span -= te->runlen; - } - code = tab[span].code, length = tab[span].length; -#ifdef FAX3_DEBUG - DEBUG_PRINT(" Term", tab[span].runlen); -#endif - _PutBits(tif, code, length); - - sp->data = data; - sp->bit = bit; -} - -/* - * Write an EOL code to the output stream. The zero-fill - * logic for byte-aligning encoded scanlines is handled - * here. We also handle writing the tag bit for the next - * scanline when doing 2d encoding. - */ -static void -Fax3PutEOL(TIFF* tif) -{ - Fax3EncodeState* sp = EncoderState(tif); - tif_int bit = sp->bit; - int data = sp->data; - tif_int code, length, tparm; - - if (sp->b.groupoptions & GROUP3OPT_FILLBITS) { - /* - * Force bit alignment so EOL will terminate on - * a byte boundary. That is, force the bit alignment - * to 16-12 = 4 before putting out the EOL code. - */ - int align = 8 - 4; - if (align != sp->bit) { - if (align > sp->bit) - align = sp->bit + (8 - align); - else - align = sp->bit - align; - code = 0; - tparm=align; - _PutBits(tif, 0, tparm); - } - } - code = EOL, length = 12; - if (is2DEncoding(sp)) - code = (code<<1) | (sp->tag == G3_1D), length++; - _PutBits(tif, code, length); - - sp->data = data; - sp->bit = bit; -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Reset encoding state at the start of a strip. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax3PreEncode(TIFF* tif, tsample_t s) -{ - Fax3EncodeState* sp = EncoderState(tif); - - (void) s; - assert(sp != NULL); - sp->bit = 8; - sp->data = 0; - sp->tag = G3_1D; - /* - * This is necessary for Group 4; otherwise it isn't - * needed because the first scanline of each strip ends - * up being copied into the refline. - */ - if (sp->refline) - _TIFFmemset(sp->refline, 0x00, sp->b.rowbytes); - if (is2DEncoding(sp)) { - float res = tif->tif_dir.td_yresolution; - /* - * The CCITT spec says that when doing 2d encoding, you - * should only do it on K consecutive scanlines, where K - * depends on the resolution of the image being encoded - * (2 for <= 200 lpi, 4 for > 200 lpi). Since the directory - * code initializes td_yresolution to 0, this code will - * select a K of 2 unless the YResolution tag is set - * appropriately. (Note also that we fudge a little here - * and use 150 lpi to avoid problems with units conversion.) - */ - if (tif->tif_dir.td_resolutionunit == RESUNIT_CENTIMETER) - res *= 2.54f; /* convert to inches */ - sp->maxk = (res > 150 ? 4 : 2); - sp->k = sp->maxk-1; - } else - sp->k = sp->maxk = 0; - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static const tif_char zeroruns[256] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x00 - 0x0f */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x10 - 0x1f */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x20 - 0x2f */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x30 - 0x3f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x50 - 0x5f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x70 - 0x7f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x8f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 - 0x9f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 - 0xaf */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 - 0xbf */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 - 0xcf */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 - 0xdf */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0 - 0xef */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 - 0xff */ -}; -static const tif_char oneruns[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 - 0x0f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x1f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 - 0x2f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 - 0x3f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 - 0x4f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 - 0x5f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x6f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 - 0x7f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80 - 0x8f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90 - 0x9f */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0 - 0xaf */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0 - 0xbf */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xc0 - 0xcf */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xd0 - 0xdf */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xe0 - 0xef */ - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, /* 0xf0 - 0xff */ -}; - -/* - * On certain systems it pays to inline - * the routines that find pixel spans. - */ -#ifdef VAXC -static int32 find0span(tif_char*, int32, int32); -static int32 find1span(tif_char*, int32, int32); -#pragma inline(find0span,find1span) -#endif - -/* - * Find a span of ones or zeros using the supplied - * table. The ``base'' of the bit string is supplied - * along with the start+end bit indices. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -INLINE static int32 -find0span(tif_char* bp, int32 bs, int32 be) -{ - int32 bits = be - bs; - int32 n, span; - - bp += bs>>3; - /* - * Check partial byte on lhs. - */ - if (bits > 0 && (n = (bs & 7))) { - span = zeroruns[(*bp << n) & 0xff]; - if (span > 8-n) /* table value too generous */ - span = 8-n; - if (span > bits) /* constrain span to bit range */ - span = bits; - if (n+span < 8) /* doesn't extend to edge of byte */ - return (span); - bits -= span; - bp++; - } else - span = 0; - if (bits >= (int)(2*8*sizeof (long))) { - long* lp; - /* - * Align to longword boundary and check longwords. - */ - while (!isAligned(bp, long)) { - if (*bp != 0x00) - return (span + zeroruns[*bp]); - span += 8, bits -= 8; - bp++; - } - lp = (long*) bp; - while (bits >= (int)(8*sizeof (long)) && *lp == 0) { - span += 8*sizeof (long), bits -= 8*sizeof (long); - lp++; - } - bp = (tif_char*) lp; - } - /* - * Scan full bytes for all 0's. - */ - while (bits >= 8) { - if (*bp != 0x00) /* end of run */ - return (span + zeroruns[*bp]); - span += 8, bits -= 8; - bp++; - } - /* - * Check partial byte on rhs. - */ - if (bits > 0) { - n = zeroruns[*bp]; - span += (n > bits ? bits : n); - } - return (span); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -INLINE static int32 -find1span(tif_char* bp, int32 bs, int32 be) -{ - int32 bits = be - bs; - int32 n, span; - - bp += bs>>3; - /* - * Check partial byte on lhs. - */ - if (bits > 0 && (n = (bs & 7))) { - span = oneruns[(*bp << n) & 0xff]; - if (span > 8-n) /* table value too generous */ - span = 8-n; - if (span > bits) /* constrain span to bit range */ - span = bits; - if (n+span < 8) /* doesn't extend to edge of byte */ - return (span); - bits -= span; - bp++; - } else - span = 0; - if (bits >= (int)(2*8*sizeof (long))) { - long* lp; - /* - * Align to longword boundary and check longwords. - */ - while (!isAligned(bp, long)) { - if (*bp != 0xff) - return (span + oneruns[*bp]); - span += 8, bits -= 8; - bp++; - } - lp = (long*) bp; - while (bits >= (int)(8*sizeof (long)) && *lp == ~0) { - span += 8*sizeof (long), bits -= 8*sizeof (long); - lp++; - } - bp = (tif_char*) lp; - } - /* - * Scan full bytes for all 1's. - */ - while (bits >= 8) { - if (*bp != 0xff) /* end of run */ - return (span + oneruns[*bp]); - span += 8, bits -= 8; - bp++; - } - /* - * Check partial byte on rhs. - */ - if (bits > 0) { - n = oneruns[*bp]; - span += (n > bits ? bits : n); - } - return (span); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Return the offset of the next bit in the range - * [bs..be] that is different from the specified - * color. The end, be, is returned if no such bit - * exists. - */ -#define finddiff(_cp, _bs, _be, _color) \ - (_bs + (_color ? find1span(_cp,_bs,_be) : find0span(_cp,_bs,_be))) -/* - * Like finddiff, but also check the starting bit - * against the end in case start > end. - */ -#define finddiff2(_cp, _bs, _be, _color) \ - (_bs < _be ? finddiff(_cp,_bs,_be,_color) : _be) - -/* - * 1d-encode a row of pixels. The encoding is - * a sequence of all-white or all-black spans - * of pixels encoded with Huffman codes. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax3Encode1DRow(TIFF* tif, tif_char* bp, uint32 bits) -{ - Fax3EncodeState* sp = EncoderState(tif); - int32 span; - uint32 bs = 0; - - for (;;) { - span = find0span(bp, bs, bits); /* white span */ - putspan(tif, span, TIFFFaxWhiteCodes); - bs += span; - if (bs >= bits) - break; - span = find1span(bp, bs, bits); /* black span */ - putspan(tif, span, TIFFFaxBlackCodes); - bs += span; - if (bs >= bits) - break; - } - if (sp->b.mode & (FAXMODE_BYTEALIGN|FAXMODE_WORDALIGN)) { - if (sp->bit != 8) /* byte-align */ - Fax3FlushBits(tif, sp); - if ((sp->b.mode&FAXMODE_WORDALIGN) && - !isAligned(tif->tif_rawcp, uint16)) - Fax3FlushBits(tif, sp); - } - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static const tableentry horizcode = - { 3, 0x1 }; /* 001 */ -static const tableentry passcode = - { 4, 0x1 }; /* 0001 */ -static const tableentry vcodes[7] = { - { 7, 0x03 }, /* 0000 011 */ - { 6, 0x03 }, /* 0000 11 */ - { 3, 0x03 }, /* 011 */ - { 1, 0x1 }, /* 1 */ - { 3, 0x2 }, /* 010 */ - { 6, 0x02 }, /* 0000 10 */ - { 7, 0x02 } /* 0000 010 */ -}; - -/* - * 2d-encode a row of pixels. Consult the CCITT - * documentation for the algorithm. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax3Encode2DRow(TIFF* tif, tif_char* bp, tif_char* rp, uint32 bits) -{ -#define PIXEL(buf,ix) ((((buf)[(ix)>>3]) >> (7-((ix)&7))) & 1) - uint32 a0 = 0; - uint32 a1 = (PIXEL(bp, 0) != 0 ? 0 : finddiff(bp, 0, bits, 0)); - uint32 b1 = (PIXEL(rp, 0) != 0 ? 0 : finddiff(rp, 0, bits, 0)); - uint32 a2, b2; - - for (;;) { - b2 = finddiff2(rp, b1, bits, PIXEL(rp,b1)); - if (b2 >= a1) { - int32 d = b1 - a1; - if (!(-3 <= d && d <= 3)) { /* horizontal mode */ - a2 = finddiff2(bp, a1, bits, PIXEL(bp,a1)); - putcode(tif, &horizcode); - if (a0+a1 == 0 || PIXEL(bp, a0) == 0) { - putspan(tif, a1-a0, TIFFFaxWhiteCodes); - putspan(tif, a2-a1, TIFFFaxBlackCodes); - } else { - putspan(tif, a1-a0, TIFFFaxBlackCodes); - putspan(tif, a2-a1, TIFFFaxWhiteCodes); - } - a0 = a2; - } else { /* vertical mode */ - putcode(tif, &vcodes[d+3]); - a0 = a1; - } - } else { /* pass mode */ - putcode(tif, &passcode); - a0 = b2; - } - if (a0 >= bits) - break; - a1 = finddiff(bp, a0, bits, PIXEL(bp,a0)); - b1 = finddiff(rp, a0, bits, !PIXEL(bp,a0)); - b1 = finddiff(rp, b1, bits, PIXEL(bp,a0)); - } - return (1); -#undef PIXEL -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a buffer of pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax3Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - Fax3EncodeState* sp = EncoderState(tif); - - (void) s; - while ((long)cc > 0) { - if ((sp->b.mode & FAXMODE_NOEOL) == 0) - Fax3PutEOL(tif); - if (is2DEncoding(sp)) { - if (sp->tag == G3_1D) { - if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels)) - return (0); - sp->tag = G3_2D; - } else { - if (!Fax3Encode2DRow(tif, bp, sp->refline, - sp->b.rowpixels)) - return (0); - sp->k--; - } - if (sp->k == 0) { - sp->tag = G3_1D; - sp->k = sp->maxk-1; - } else - _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes); - } else { - if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels)) - return (0); - } - bp += sp->b.rowbytes; - cc -= sp->b.rowbytes; - if (cc != 0) - tif->tif_row++; - } - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax3PostEncode(TIFF* tif) -{ - Fax3EncodeState* sp = EncoderState(tif); - - if (sp->bit != 8) - Fax3FlushBits(tif, sp); - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Fax3Close(TIFF* tif) -{ - if ((Fax3State(tif)->mode & FAXMODE_NORTC) == 0) { - Fax3EncodeState* sp = EncoderState(tif); - tif_int code = EOL; - tif_int length = 12; - int i; - - if (is2DEncoding(sp)) - code = (code<<1) | (sp->tag == G3_1D), length++; - for (i = 0; i < 6; i++) - Fax3PutBits(tif, code, length); - Fax3FlushBits(tif, sp); - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -Fax3Cleanup(TIFF* tif) -{ - if (tif->tif_data) { - if (Fax3State(tif)->rw_mode == O_RDONLY) { - Fax3DecodeState* sp = DecoderState(tif); - if (sp->runs) - _TIFFfree(tif, sp->runs); - } else { - Fax3EncodeState* sp = EncoderState(tif); - if (sp->refline) - _TIFFfree(tif, sp->refline); - } - if (Fax3State(tif)->subaddress) - _TIFFfree(tif, Fax3State(tif)->subaddress); - _TIFFfree(tif, tif->tif_data); - tif->tif_data = NULL; - } -} - -#define FIELD_BADFAXLINES (FIELD_CODEC+0) -#define FIELD_CLEANFAXDATA (FIELD_CODEC+1) -#define FIELD_BADFAXRUN (FIELD_CODEC+2) -#define FIELD_RECVPARAMS (FIELD_CODEC+3) -#define FIELD_SUBADDRESS (FIELD_CODEC+4) -#define FIELD_RECVTIME (FIELD_CODEC+5) - -#define FIELD_OPTIONS (FIELD_CODEC+6) - -static const TIFFFieldInfo faxFieldInfo[] = { - { TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "FaxMode" }, - { TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "FaxFillFunc" }, - { TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, FIELD_BADFAXLINES, - TRUE, FALSE, "BadFaxLines" }, - { TIFFTAG_BADFAXLINES, 1, 1, TIFF_SHORT, FIELD_BADFAXLINES, - TRUE, FALSE, "BadFaxLines" }, - { TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, FIELD_CLEANFAXDATA, - TRUE, FALSE, "CleanFaxData" }, - { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_LONG, FIELD_BADFAXRUN, - TRUE, FALSE, "ConsecutiveBadFaxLines" }, - { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_SHORT, FIELD_BADFAXRUN, - TRUE, FALSE, "ConsecutiveBadFaxLines" }, - { TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, FIELD_RECVPARAMS, - TRUE, FALSE, "FaxRecvParams" }, - { TIFFTAG_FAXSUBADDRESS, -1,-1, TIFF_ASCII, FIELD_SUBADDRESS, - TRUE, FALSE, "FaxSubAddress" }, - { TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, FIELD_RECVTIME, - TRUE, FALSE, "FaxRecvTime" }, -}; -static const TIFFFieldInfo fax3FieldInfo[] = { - { TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, - FALSE, FALSE, "Group3Options" }, -}; -static const TIFFFieldInfo fax4FieldInfo[] = { - { TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, - FALSE, FALSE, "Group4Options" }, -}; -#define N(a) (sizeof (a) / sizeof (a[0])) - -static int -Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - Fax3BaseState* sp = Fax3State(tif); - - switch (tag) { - case TIFFTAG_FAXMODE: - sp->mode = va_arg(ap, int); - return (1); /* NB: pseudo tag */ - case TIFFTAG_FAXFILLFUNC: - if (sp->rw_mode == O_RDONLY) - DecoderState(tif)->fill = va_arg(ap, TIFFFaxFillFunc); - return (1); /* NB: pseudo tag */ - case TIFFTAG_GROUP3OPTIONS: - case TIFFTAG_GROUP4OPTIONS: - sp->groupoptions = va_arg(ap, uint32); - break; - case TIFFTAG_BADFAXLINES: - sp->badfaxlines = va_arg(ap, uint32); - break; - case TIFFTAG_CLEANFAXDATA: - sp->cleanfaxdata = (uint16) va_arg(ap, int); - break; - case TIFFTAG_CONSECUTIVEBADFAXLINES: - sp->badfaxrun = va_arg(ap, uint32); - break; - case TIFFTAG_FAXRECVPARAMS: - sp->recvparams = va_arg(ap, uint32); - break; - case TIFFTAG_FAXSUBADDRESS: - _TIFFsetString(tif, &sp->subaddress, va_arg(ap, char*)); - break; - case TIFFTAG_FAXRECVTIME: - sp->recvtime = va_arg(ap, uint32); - break; - default: - return (*sp->vsetparent)(tif, tag, ap); - } - TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); - tif->tif_flags |= TIFF_DIRTYDIRECT; - return (1); -} - -static int -Fax3VGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - Fax3BaseState* sp = Fax3State(tif); - - switch (tag) { - case TIFFTAG_FAXMODE: - *va_arg(ap, int*) = sp->mode; - break; - case TIFFTAG_FAXFILLFUNC: - if (sp->rw_mode == O_RDONLY) - *va_arg(ap, TIFFFaxFillFunc*) = DecoderState(tif)->fill; - break; - case TIFFTAG_GROUP3OPTIONS: - case TIFFTAG_GROUP4OPTIONS: - *va_arg(ap, uint32*) = sp->groupoptions; - break; - case TIFFTAG_BADFAXLINES: - *va_arg(ap, uint32*) = sp->badfaxlines; - break; - case TIFFTAG_CLEANFAXDATA: - *va_arg(ap, uint16*) = sp->cleanfaxdata; - break; - case TIFFTAG_CONSECUTIVEBADFAXLINES: - *va_arg(ap, uint32*) = sp->badfaxrun; - break; - case TIFFTAG_FAXRECVPARAMS: - *va_arg(ap, uint32*) = sp->recvparams; - break; - case TIFFTAG_FAXSUBADDRESS: - *va_arg(ap, char**) = sp->subaddress; - break; - case TIFFTAG_FAXRECVTIME: - *va_arg(ap, uint32*) = sp->recvtime; - break; - default: - return (*sp->vgetparent)(tif, tag, ap); - } - return (1); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Fax3PrintDir(TIFF* tif, FILE* fd, long flags) -{ - Fax3BaseState* sp = Fax3State(tif); - - (void) flags; - if (TIFFFieldSet(tif,FIELD_OPTIONS)) { - const char* sep = " "; - if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4) { - fprintf(fd, " Group 4 Options:"); - if (sp->groupoptions & GROUP4OPT_UNCOMPRESSED) - fprintf(fd, "%suncompressed data", sep); - } else { - - fprintf(fd, " Group 3 Options:"); - if (sp->groupoptions & GROUP3OPT_2DENCODING) - fprintf(fd, "%s2-d encoding", sep), sep = "+"; - if (sp->groupoptions & GROUP3OPT_FILLBITS) - fprintf(fd, "%sEOL padding", sep), sep = "+"; - if (sp->groupoptions & GROUP3OPT_UNCOMPRESSED) - fprintf(fd, "%suncompressed data", sep); - } - fprintf(fd, " (%lu = 0x%lx)\n", - (tif_long) sp->groupoptions, (tif_long) sp->groupoptions); - } - if (TIFFFieldSet(tif,FIELD_CLEANFAXDATA)) { - fprintf(fd, " Fax Data:"); - switch (sp->cleanfaxdata) { - case CLEANFAXDATA_CLEAN: - fprintf(fd, " clean"); - break; - case CLEANFAXDATA_REGENERATED: - fprintf(fd, " receiver regenerated"); - break; - case CLEANFAXDATA_UNCLEAN: - fprintf(fd, " uncorrected errors"); - break; - } - fprintf(fd, " (%u = 0x%x)\n", - sp->cleanfaxdata, sp->cleanfaxdata); - } - if (TIFFFieldSet(tif,FIELD_BADFAXLINES)) - fprintf(fd," Bad Fax Lines: %lu\n",(tif_long)sp->badfaxlines); - if (TIFFFieldSet(tif,FIELD_BADFAXRUN)) - fprintf(fd, " Consecutive Bad Fax Lines: %lu\n", - (tif_long) sp->badfaxrun); - if (TIFFFieldSet(tif,FIELD_RECVPARAMS)) - fprintf(fd, " Fax Receive Parameters: %08lx\n", - (tif_long) sp->recvparams); - if (TIFFFieldSet(tif,FIELD_SUBADDRESS)) - fprintf(fd, " Fax SubAddress: %s\n", sp->subaddress); - if (TIFFFieldSet(tif,FIELD_RECVTIME)) - fprintf(fd, " Fax Receive Time: %lu secs\n", - (tif_long) sp->recvtime); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static int -InitCCITTFax3(TIFF* tif) -{ - Fax3BaseState* sp; - - /* - * Allocate state block so tag methods have storage to record values. - */ - if (tif->tif_mode == O_RDONLY) - tif->tif_data = (tidata_t) - _TIFFmalloc(tif, sizeof (Fax3DecodeState)); - else - tif->tif_data = (tidata_t) - _TIFFmalloc(tif, sizeof (Fax3EncodeState)); - - if (tif->tif_data == NULL) { - TIFFError("TIFFInitCCITTFax3", - "%s: No space for state block", tif->tif_name); - return (0); - } - - sp = Fax3State(tif); - sp->rw_mode = tif->tif_mode; - - /* - * Merge codec-specific tag information and - * override parent get/set field methods. - */ - _TIFFMergeFieldInfo(tif, faxFieldInfo, N(faxFieldInfo)); - sp->vgetparent = tif->tif_vgetfield; - tif->tif_vgetfield = Fax3VGetField; /* hook for codec tags */ - sp->vsetparent = tif->tif_vsetfield; - tif->tif_vsetfield = Fax3VSetField; /* hook for codec tags */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_printdir = Fax3PrintDir; /* hook for codec tags */ -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - sp->groupoptions = 0; - sp->recvparams = 0; - sp->subaddress = NULL; - - if (sp->rw_mode == O_RDONLY) { - tif->tif_flags |= TIFF_NOBITREV;/* decoder does bit reversal */ - DecoderState(tif)->runs = NULL; - TIFFSetField(tif, TIFFTAG_FAXFILLFUNC, _TIFFFax3fillruns); - } else - EncoderState(tif)->refline = NULL; - - /* - * Install codec methods. - */ - tif->tif_setupdecode = Fax3SetupState; - tif->tif_predecode = Fax3PreDecode; - tif->tif_decoderow = Fax3Decode1D; - tif->tif_decodestrip = Fax3Decode1D; - tif->tif_decodetile = Fax3Decode1D; - tif->tif_setupencode = Fax3SetupState; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_preencode = Fax3PreEncode; - tif->tif_postencode = Fax3PostEncode; - tif->tif_encoderow = Fax3Encode; - tif->tif_encodestrip = Fax3Encode; - tif->tif_encodetile = Fax3Encode; - tif->tif_close = Fax3Close; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - tif->tif_cleanup = Fax3Cleanup; - - return (1); -} - -int -TIFFInitCCITTFax3(TIFF* tif, int scheme) -{ - (void) scheme; - - if (InitCCITTFax3(tif)) { - _TIFFMergeFieldInfo(tif, fax3FieldInfo, N(fax3FieldInfo)); - - /* - * The default format is Class/F-style w/o RTC. - */ - return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_CLASSF); - } else - return (0); -} - -/* - * CCITT Group 4 (T.6) Facsimile-compatible - * Compression Scheme Support. - */ - -#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } -/* - * Decode the requested amount of G4-encoded data. - */ -static int -Fax4Decode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - DECLARE_STATE_2D(tif, sp, "Fax4Decode"); - - (void) s; - CACHE_STATE(tif, sp); - while ((long)occ > 0) { - a0 = 0; - RunLength = 0; - pa = thisrun = sp->curruns; - pb = sp->refruns; - b1 = *pb++; -#ifdef FAX3_DEBUG - printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); - printf("-------------------- %d\n", tif->tif_row); - fflush(stdout); -#endif - EXPAND2D(EOFG4); - if (EOLcnt) - goto EOFG4; - (*sp->fill)(buf, thisrun, pa, lastx); - SETVAL(0); /* imaginary change for reference */ - SWAP(uint32*, sp->curruns, sp->refruns); - buf += sp->b.rowbytes; - occ -= sp->b.rowbytes; - if (occ != 0) - tif->tif_row++; - continue; - EOFG4: - NeedBits16( 13, BADG4 ); - BADG4: -#ifdef FAX3_DEBUG - if( GetBits(13) != 0x1001 ) - fputs( "Bad RTC\n", stderr ); -#endif - ClrBits( 13 ); - (*sp->fill)(buf, thisrun, pa, lastx); - UNCACHE_STATE(tif, sp); - return (-1); - } - UNCACHE_STATE(tif, sp); - return (1); -} -#undef SWAP - -/* - * Encode the requested amount of data. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax4Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - Fax3EncodeState *sp = EncoderState(tif); - - (void) s; - while ((long)cc > 0) { - if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels)) - return (0); - _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes); - bp += sp->b.rowbytes; - cc -= sp->b.rowbytes; - if (cc != 0) - tif->tif_row++; - } - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -Fax4PostEncode(TIFF* tif) -{ - Fax3EncodeState *sp = EncoderState(tif); - - /* terminate strip w/ EOFB */ - Fax3PutBits(tif, EOL, 12); - Fax3PutBits(tif, EOL, 12); - if (sp->bit != 8) - Fax3FlushBits(tif, sp); - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -int -TIFFInitCCITTFax4(TIFF* tif, int scheme) -{ - (void) scheme; - - if (InitCCITTFax3(tif)) { /* reuse G3 support */ - _TIFFMergeFieldInfo(tif, fax4FieldInfo, N(fax4FieldInfo)); - - tif->tif_decoderow = Fax4Decode; - tif->tif_decodestrip = Fax4Decode; - tif->tif_decodetile = Fax4Decode; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_encoderow = Fax4Encode; - tif->tif_encodestrip = Fax4Encode; - tif->tif_encodetile = Fax4Encode; - tif->tif_postencode = Fax4PostEncode; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - /* - * Suppress RTC at the end of each strip. - */ - return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_NORTC); - } else - return (0); -} - -/* - * CCITT Group 3 1-D Modified Huffman RLE Compression Support. - * (Compression algorithms 2 and 32771) - */ - -/* - * Decode the requested amount of RLE-encoded data. - */ -static int -Fax3DecodeRLE(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - DECLARE_STATE(tif, sp, "Fax3DecodeRLE"); - int mode = sp->b.mode; - - (void) s; - CACHE_STATE(tif, sp); - thisrun = sp->curruns; - while ((long)occ > 0) { - a0 = 0; - RunLength = 0; - pa = thisrun; -#ifdef FAX3_DEBUG - printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); - printf("-------------------- %d\n", tif->tif_row); - fflush(stdout); -#endif - EXPAND1D(EOFRLE); - (*sp->fill)(buf, thisrun, pa, lastx); - /* - * Cleanup at the end of the row. - */ - if (mode & FAXMODE_BYTEALIGN) { - int n = BitsAvail - (BitsAvail &~ 7); - ClrBits(n); - } else if (mode & FAXMODE_WORDALIGN) { - int n = BitsAvail - (BitsAvail &~ 15); - ClrBits(n); - if (BitsAvail == 0 && !isAligned(cp, uint16)) - cp++; - } - buf += sp->b.rowbytes; - occ -= sp->b.rowbytes; - if (occ != 0) - tif->tif_row++; - continue; - EOFRLE: /* premature EOF */ - (*sp->fill)(buf, thisrun, pa, lastx); - UNCACHE_STATE(tif, sp); - return (-1); - } - UNCACHE_STATE(tif, sp); - return (1); -} - -int -TIFFInitCCITTRLE(TIFF* tif, int scheme) -{ - (void) scheme; - - if (InitCCITTFax3(tif)) { /* reuse G3 support */ - tif->tif_decoderow = Fax3DecodeRLE; - tif->tif_decodestrip = Fax3DecodeRLE; - tif->tif_decodetile = Fax3DecodeRLE; - /* - * Suppress RTC+EOLs when encoding and byte-align data. - */ - return TIFFSetField(tif, TIFFTAG_FAXMODE, - FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_BYTEALIGN); - } else - return (0); -} - -int -TIFFInitCCITTRLEW(TIFF* tif, int scheme) -{ - (void) scheme; - - if (InitCCITTFax3(tif)) { /* reuse G3 support */ - tif->tif_decoderow = Fax3DecodeRLE; - tif->tif_decodestrip = Fax3DecodeRLE; - tif->tif_decodetile = Fax3DecodeRLE; - /* - * Suppress RTC+EOLs when encoding and word-align data. - */ - return TIFFSetField(tif, TIFFTAG_FAXMODE, - FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_WORDALIGN); - } else - return (0); -} -#endif /* CCITT_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_fax3.h b/src/libs/pdflib/libs/tiff/tif_fax3.h deleted file mode 100644 index 79db35d26e..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_fax3.h +++ /dev/null @@ -1,525 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_fax3.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1990-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _FAX3_ -#define _FAX3_ -/* - * TIFF Library. - * - * CCITT Group 3 (T.4) and Group 4 (T.6) Decompression Support. - * - * Decoder support is derived, with permission, from the code - * in Frank Cringle's viewfax program; - * Copyright (C) 1990, 1995 Frank D. Cringle. - */ -#include "tiff.h" - -/* - * To override the default routine used to image decoded - * spans one can use the pseduo tag TIFFTAG_FAXFILLFUNC. - * The routine must have the type signature given below; - * for example: - * - * fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx) - * - * where buf is place to set the bits, runs is the array of b&w run - * lengths (white then black), erun is the last run in the array, and - * lastx is the width of the row in pixels. Fill routines can assume - * the run array has room for at least lastx runs and can overwrite - * data in the run array as needed (e.g. to append zero runs to bring - * the count up to a nice multiple). - */ -typedef void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32); - -/* - * The default run filler; made external for other decoders. - */ -#if defined(__cplusplus) -extern "C" { -#endif -extern void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32); -#if defined(__cplusplus) -} -#endif - - -/* finite state machine codes */ -#define S_Null 0 -#define S_Pass 1 -#define S_Horiz 2 -#define S_V0 3 -#define S_VR 4 -#define S_VL 5 -#define S_Ext 6 -#define S_TermW 7 -#define S_TermB 8 -#define S_MakeUpW 9 -#define S_MakeUpB 10 -#define S_MakeUp 11 -#define S_EOL 12 - -typedef struct { /* state table entry */ - unsigned char State; /* see above */ - unsigned char Width; /* width of code in bits */ - uint32 Param; /* unsigned 32-bit run length in bits */ -} TIFFFaxTabEnt; - -extern const TIFFFaxTabEnt TIFFFaxMainTable[]; -extern const TIFFFaxTabEnt TIFFFaxWhiteTable[]; -extern const TIFFFaxTabEnt TIFFFaxBlackTable[]; - -/* - * The following macros define the majority of the G3/G4 decoder - * algorithm using the state tables defined elsewhere. To build - * a decoder you need some setup code and some glue code. Note - * that you may also need/want to change the way the NeedBits* - * macros get input data if, for example, you know the data to be - * decoded is properly aligned and oriented (doing so before running - * the decoder can be a big performance win). - * - * Consult the decoder in the TIFF library for an idea of what you - * need to define and setup to make use of these definitions. - * - * NB: to enable a debugging version of these macros define FAX3_DEBUG - * before including this file. Trace output goes to stdout. - */ - -#ifndef EndOfData -#define EndOfData() (cp >= ep) -#endif -/* - * Need <=8 or <=16 bits of input data. Unlike viewfax we - * cannot use/assume a word-aligned, properly bit swizzled - * input data set because data may come from an arbitrarily - * aligned, read-only source such as a memory-mapped file. - * Note also that the viewfax decoder does not check for - * running off the end of the input data buffer. This is - * possible for G3-encoded data because it prescans the input - * data to count EOL markers, but can cause problems for G4 - * data. In any event, we don't prescan and must watch for - * running out of data since we can't permit the library to - * scan past the end of the input data buffer. - * - * Finally, note that we must handle remaindered data at the end - * of a strip specially. The coder asks for a fixed number of - * bits when scanning for the next code. This may be more bits - * than are actually present in the data stream. If we appear - * to run out of data but still have some number of valid bits - * remaining then we makeup the requested amount with zeros and - * return successfully. If the returned data is incorrect then - * we should be called again and get a premature EOF error; - * otherwise we should get the right answer. - */ -#ifndef NeedBits8 -#define NeedBits8(n,eoflab) do { \ - if (BitsAvail < (n)) { \ - if (EndOfData()) { \ - if (BitsAvail == 0) /* no valid bits */ \ - goto eoflab; \ - BitsAvail = (n); /* pad with zeros */ \ - } else { \ - BitAcc |= ((uint32) bitmap[*cp++])<>= (n); \ -} while (0) - -#ifdef FAX3_DEBUG -static const char* StateNames[] = { - "Null ", - "Pass ", - "Horiz ", - "V0 ", - "VR ", - "VL ", - "Ext ", - "TermW ", - "TermB ", - "MakeUpW", - "MakeUpB", - "MakeUp ", - "EOL ", -}; -#define DEBUG_SHOW putchar(BitAcc & (1 << t) ? '1' : '0') -#define LOOKUP8(wid,tab,eoflab) do { \ - int t; \ - NeedBits8(wid,eoflab); \ - TabEnt = tab + GetBits(wid); \ - printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail, \ - StateNames[TabEnt->State], TabEnt->Param); \ - for (t = 0; t < TabEnt->Width; t++) \ - DEBUG_SHOW; \ - putchar('\n'); \ - fflush(stdout); \ - ClrBits(TabEnt->Width); \ -} while (0) -#define LOOKUP16(wid,tab,eoflab) do { \ - int t; \ - NeedBits16(wid,eoflab); \ - TabEnt = tab + GetBits(wid); \ - printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail, \ - StateNames[TabEnt->State], TabEnt->Param); \ - for (t = 0; t < TabEnt->Width; t++) \ - DEBUG_SHOW; \ - putchar('\n'); \ - fflush(stdout); \ - ClrBits(TabEnt->Width); \ -} while (0) - -#define SETVAL(x) do { \ - *pa++ = RunLength + (x); \ - printf("SETVAL: %d\t%d\n", RunLength + (x), a0); \ - a0 += x; \ - RunLength = 0; \ -} while (0) -#else -#define LOOKUP8(wid,tab,eoflab) do { \ - NeedBits8(wid,eoflab); \ - TabEnt = tab + GetBits(wid); \ - ClrBits(TabEnt->Width); \ -} while (0) -#define LOOKUP16(wid,tab,eoflab) do { \ - NeedBits16(wid,eoflab); \ - TabEnt = tab + GetBits(wid); \ - ClrBits(TabEnt->Width); \ -} while (0) - -/* - * Append a run to the run length array for the - * current row and reset decoding state. - */ -#define SETVAL(x) do { \ - *pa++ = RunLength + (x); \ - a0 += (x); \ - RunLength = 0; \ -} while (0) -#endif - -/* - * Synchronize input decoding at the start of each - * row by scanning for an EOL (if appropriate) and - * skipping any trash data that might be present - * after a decoding error. Note that the decoding - * done elsewhere that recognizes an EOL only consumes - * 11 consecutive zero bits. This means that if EOLcnt - * is non-zero then we still need to scan for the final flag - * bit that is part of the EOL code. - */ -#define SYNC_EOL(eoflab) do { \ - if (EOLcnt == 0) { \ - for (;;) { \ - NeedBits16(11,eoflab); \ - if (GetBits(11) == 0) \ - break; \ - ClrBits(1); \ - } \ - } \ - for (;;) { \ - NeedBits8(8,eoflab); \ - if (GetBits(8)) \ - break; \ - ClrBits(8); \ - } \ - while (GetBits(1) == 0) \ - ClrBits(1); \ - ClrBits(1); /* EOL bit */ \ - EOLcnt = 0; /* reset EOL counter/flag */ \ -} while (0) - -/* - * Cleanup the array of runs after decoding a row. - * We adjust final runs to insure the user buffer is not - * overwritten and/or undecoded area is white filled. - */ -#define CLEANUP_RUNS() do { \ - if (RunLength) \ - SETVAL(0); \ - if (a0 != lastx) { \ - badlength(a0, lastx); \ - while (a0 > lastx && pa > thisrun) \ - a0 -= *--pa; \ - if (a0 < lastx) { \ - if (a0 < 0) \ - a0 = 0; \ - if ((pa-thisrun)&1) \ - SETVAL(0); \ - SETVAL(lastx - a0); \ - } else if (a0 > lastx) { \ - SETVAL(lastx); \ - SETVAL(0); \ - } \ - } \ -} while (0) - -/* - * Decode a line of 1D-encoded data. - * - * The line expanders are written as macros so that they can be reused - * but still have direct access to the local variables of the "calling" - * function. - * - * Note that unlike the original version we have to explicitly test for - * a0 >= lastx after each black/white run is decoded. This is because - * the original code depended on the input data being zero-padded to - * insure the decoder recognized an EOL before running out of data. - */ -#define EXPAND1D(eoflab) do { \ - for (;;) { \ - for (;;) { \ - LOOKUP16(12, TIFFFaxWhiteTable, eof1d); \ - switch (TabEnt->State) { \ - case S_EOL: \ - EOLcnt = 1; \ - goto done1d; \ - case S_TermW: \ - SETVAL(TabEnt->Param); \ - goto doneWhite1d; \ - case S_MakeUpW: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - unexpected("WhiteTable", a0); \ - goto done1d; \ - } \ - } \ - doneWhite1d: \ - if (a0 >= lastx) \ - goto done1d; \ - for (;;) { \ - LOOKUP16(13, TIFFFaxBlackTable, eof1d); \ - switch (TabEnt->State) { \ - case S_EOL: \ - EOLcnt = 1; \ - goto done1d; \ - case S_TermB: \ - SETVAL(TabEnt->Param); \ - goto doneBlack1d; \ - case S_MakeUpB: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - unexpected("BlackTable", a0); \ - goto done1d; \ - } \ - } \ - doneBlack1d: \ - if (a0 >= lastx) \ - goto done1d; \ - if( *(pa-1) == 0 && *(pa-2) == 0 ) \ - pa -= 2; \ - } \ -eof1d: \ - prematureEOF(a0); \ - CLEANUP_RUNS(); \ - goto eoflab; \ -done1d: \ - CLEANUP_RUNS(); \ -} while (0) - -/* - * Update the value of b1 using the array - * of runs for the reference line. - */ -#define CHECK_b1 do { \ - if (pa != thisrun) while (b1 <= a0 && b1 < lastx) { \ - b1 += pb[0] + pb[1]; \ - pb += 2; \ - } \ -} while (0) - -/* - * Expand a row of 2D-encoded data. - */ -#define EXPAND2D(eoflab) do { \ - while (a0 < lastx) { \ - LOOKUP8(7, TIFFFaxMainTable, eof2d); \ - switch (TabEnt->State) { \ - case S_Pass: \ - CHECK_b1; \ - b1 += *pb++; \ - RunLength += b1 - a0; \ - a0 = b1; \ - b1 += *pb++; \ - break; \ - case S_Horiz: \ - if ((pa-thisrun)&1) { \ - for (;;) { /* black first */ \ - LOOKUP16(13, TIFFFaxBlackTable, eof2d); \ - switch (TabEnt->State) { \ - case S_TermB: \ - SETVAL(TabEnt->Param); \ - goto doneWhite2da; \ - case S_MakeUpB: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - goto badBlack2d; \ - } \ - } \ - doneWhite2da:; \ - for (;;) { /* then white */ \ - LOOKUP16(12, TIFFFaxWhiteTable, eof2d); \ - switch (TabEnt->State) { \ - case S_TermW: \ - SETVAL(TabEnt->Param); \ - goto doneBlack2da; \ - case S_MakeUpW: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - goto badWhite2d; \ - } \ - } \ - doneBlack2da:; \ - } else { \ - for (;;) { /* white first */ \ - LOOKUP16(12, TIFFFaxWhiteTable, eof2d); \ - switch (TabEnt->State) { \ - case S_TermW: \ - SETVAL(TabEnt->Param); \ - goto doneWhite2db; \ - case S_MakeUpW: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - goto badWhite2d; \ - } \ - } \ - doneWhite2db:; \ - for (;;) { /* then black */ \ - LOOKUP16(13, TIFFFaxBlackTable, eof2d); \ - switch (TabEnt->State) { \ - case S_TermB: \ - SETVAL(TabEnt->Param); \ - goto doneBlack2db; \ - case S_MakeUpB: \ - case S_MakeUp: \ - a0 += TabEnt->Param; \ - RunLength += TabEnt->Param; \ - break; \ - default: \ - goto badBlack2d; \ - } \ - } \ - doneBlack2db:; \ - } \ - CHECK_b1; \ - break; \ - case S_V0: \ - CHECK_b1; \ - SETVAL(b1 - a0); \ - b1 += *pb++; \ - break; \ - case S_VR: \ - CHECK_b1; \ - SETVAL(b1 - a0 + TabEnt->Param); \ - b1 += *pb++; \ - break; \ - case S_VL: \ - CHECK_b1; \ - SETVAL(b1 - a0 - TabEnt->Param); \ - b1 -= *--pb; \ - break; \ - case S_Ext: \ - *pa++ = lastx - a0; \ - extension(a0); \ - goto eol2d; \ - case S_EOL: \ - *pa++ = lastx - a0; \ - NeedBits8(4,eof2d); \ - if (GetBits(4)) \ - unexpected("EOL", a0); \ - ClrBits(4); \ - EOLcnt = 1; \ - goto eol2d; \ - default: \ - badMain2d: \ - unexpected("MainTable", a0); \ - goto eol2d; \ - badBlack2d: \ - unexpected("BlackTable", a0); \ - goto eol2d; \ - badWhite2d: \ - unexpected("WhiteTable", a0); \ - goto eol2d; \ - eof2d: \ - prematureEOF(a0); \ - CLEANUP_RUNS(); \ - goto eoflab; \ - } \ - } \ - if (RunLength) { \ - if (RunLength + a0 < lastx) { \ - /* expect a final V0 */ \ - NeedBits8(1,eof2d); \ - if (!GetBits(1)) \ - goto badMain2d; \ - ClrBits(1); \ - } \ - SETVAL(0); \ - } \ -eol2d: \ - CLEANUP_RUNS(); \ -} while (0) -#endif /* _FAX3_ */ diff --git a/src/libs/pdflib/libs/tiff/tif_fax3sm.c b/src/libs/pdflib/libs/tiff/tif_fax3sm.c deleted file mode 100644 index fd51b4d1f4..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_fax3sm.c +++ /dev/null @@ -1,2091 +0,0 @@ -/* WARNING, this file was automatically generated by the - mkg3states program */ - -/* PDFlib GmbH cvsid: $Id: tif_fax3sm.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -#include "tiff.h" -#include "port.h" -#include "tif_fax3.h" - -const TIFFFaxTabEnt TIFFFaxMainTable[128] = -{ - {12, 7, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0}, {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, - {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, {5, 6, 2}, {3, 1, 0}, - {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, - {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0}, {5, 7, 3}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, - {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, {1, 4, 0}, {3, 1, 0}, - {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, - {4, 6, 2}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0}, {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, - {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, {6, 7, 0}, {3, 1, 0}, - {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, - {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0}, {5, 6, 2}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, - {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, {1, 4, 0}, {3, 1, 0}, - {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, - {4, 7, 3}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0}, {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, - {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, {4, 6, 2}, {3, 1, 0}, - {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, {4, 3, 1}, {3, 1, 0}, - {1, 4, 0}, {3, 1, 0}, {5, 3, 1}, {3, 1, 0}, {2, 3, 0}, {3, 1, 0}, - {4, 3, 1}, {3, 1, 0} -}; - -const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = -{ - {12, 11, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 11, 1792}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1600}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1088}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, - {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, - {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, {9, 9, 1280}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, - {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, - {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 9, 768}, {7, 4, 6}, - {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {11, 11, 1856}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, {9, 9, 896}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, - {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, - {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, - {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, - {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, - {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, - {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, - {7, 8, 43}, {7, 6, 17}, {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, - {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, - {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, - {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {11, 12, 2112}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 40}, {7, 6, 16}, {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, - {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, - {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1600}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, - {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, - {9, 9, 1088}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, - {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1280}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 768}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 12, 2368}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 896}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, - {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, - {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1472}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, {9, 9, 1216}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, - {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, - {9, 9, 960}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 9, 704}, {7, 4, 6}, - {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {11, 12, 1984}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, {9, 9, 832}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, - {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1600}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, - {9, 9, 1344}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, - {7, 8, 42}, {7, 6, 16}, {9, 9, 1088}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, - {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, - {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, - {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1536}, {7, 4, 5}, - {7, 8, 43}, {7, 6, 17}, {9, 9, 1280}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, - {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, - {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, {9, 9, 1024}, {7, 4, 6}, - {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 9, 768}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {11, 11, 1920}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 40}, {7, 6, 16}, {9, 9, 896}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, - {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, - {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1728}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, {9, 9, 1408}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, - {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, - {9, 9, 1152}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, - {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 12, 2240}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1600}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1088}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, - {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, - {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, {9, 9, 1280}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, - {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, - {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 9, 768}, {7, 4, 6}, - {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {11, 12, 2496}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, {9, 9, 896}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, - {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, - {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, - {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, - {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {12, 11, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, - {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, - {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, - {7, 8, 43}, {7, 6, 17}, {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, - {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, - {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, - {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {11, 11, 1792}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 40}, {7, 6, 16}, {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, - {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, - {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1600}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, - {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, - {9, 9, 1088}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, - {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1280}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 768}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 11, 1856}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 896}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, - {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, - {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1472}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, {9, 9, 1216}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, - {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, - {9, 9, 960}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 9, 704}, {7, 4, 6}, - {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {11, 12, 2176}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, {9, 9, 832}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, - {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1600}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, - {9, 9, 1344}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, - {7, 8, 42}, {7, 6, 16}, {9, 9, 1088}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, - {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, - {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, - {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1536}, {7, 4, 5}, - {7, 8, 43}, {7, 6, 17}, {9, 9, 1280}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, - {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, - {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, {9, 9, 1024}, {7, 4, 6}, - {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 9, 768}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {11, 12, 2432}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 40}, {7, 6, 16}, {9, 9, 896}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, - {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, - {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1728}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, {9, 9, 1408}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, - {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, - {9, 9, 1152}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, - {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 12, 2048}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1600}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1088}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, - {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, - {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, {9, 9, 1280}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, - {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, - {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 9, 768}, {7, 4, 6}, - {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {11, 11, 1920}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, {9, 9, 896}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, - {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, - {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, - {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, - {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, - {9, 8, 576}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, - {7, 8, 35}, {9, 5, 128}, {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1472}, {7, 4, 5}, - {7, 8, 43}, {7, 6, 17}, {9, 9, 1216}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 29}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, - {7, 8, 61}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, - {7, 8, 59}, {7, 4, 5}, {7, 8, 41}, {7, 6, 16}, {9, 9, 960}, {7, 4, 6}, - {7, 8, 31}, {7, 5, 8}, {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 9, 704}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {11, 12, 2304}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, - {7, 8, 40}, {7, 6, 16}, {9, 9, 832}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, - {7, 8, 56}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 46}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, - {9, 8, 512}, {7, 4, 6}, {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, - {7, 8, 0}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {9, 9, 1600}, {7, 4, 5}, {7, 8, 44}, {7, 6, 17}, {9, 9, 1344}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, - {7, 8, 50}, {7, 6, 14}, {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 48}, {7, 4, 3}, {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, - {9, 9, 1088}, {7, 4, 6}, {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, - {7, 8, 38}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, - {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {0, 0, 0}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, {7, 7, 24}, {7, 6, 14}, - {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 7, 23}, {7, 4, 3}, - {7, 7, 27}, {7, 4, 5}, {7, 8, 39}, {7, 6, 16}, {9, 8, 576}, {7, 4, 6}, - {7, 7, 19}, {7, 5, 8}, {7, 8, 55}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 45}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 8, 53}, {7, 5, 9}, {9, 8, 448}, {7, 4, 6}, {7, 8, 35}, {9, 5, 128}, - {7, 8, 51}, {7, 6, 15}, {7, 8, 63}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {9, 9, 1536}, {7, 4, 5}, {7, 8, 43}, {7, 6, 17}, - {9, 9, 1280}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 29}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, - {7, 8, 33}, {9, 5, 128}, {7, 8, 49}, {7, 6, 14}, {7, 8, 61}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 8, 47}, {7, 4, 3}, {7, 8, 59}, {7, 4, 5}, - {7, 8, 41}, {7, 6, 16}, {9, 9, 1024}, {7, 4, 6}, {7, 8, 31}, {7, 5, 8}, - {7, 8, 57}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 7, 26}, {7, 5, 9}, - {9, 9, 768}, {7, 4, 6}, {7, 8, 37}, {9, 5, 128}, {7, 7, 25}, {7, 6, 15}, - {9, 8, 320}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, - {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, {9, 7, 256}, {7, 4, 6}, - {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {11, 12, 2560}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 6, 12}, {7, 5, 9}, {9, 6, 1664}, {7, 4, 6}, {7, 7, 20}, {9, 5, 128}, - {7, 7, 24}, {7, 6, 14}, {7, 7, 28}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 7, 23}, {7, 4, 3}, {7, 7, 27}, {7, 4, 5}, {7, 8, 40}, {7, 6, 16}, - {9, 9, 896}, {7, 4, 6}, {7, 7, 19}, {7, 5, 8}, {7, 8, 56}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 46}, {7, 4, 3}, - {7, 5, 11}, {7, 4, 5}, {7, 8, 54}, {7, 5, 9}, {9, 8, 512}, {7, 4, 6}, - {7, 8, 36}, {9, 5, 128}, {7, 8, 52}, {7, 6, 15}, {7, 8, 0}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 6, 13}, {7, 4, 3}, {9, 9, 1728}, {7, 4, 5}, - {7, 8, 44}, {7, 6, 17}, {9, 9, 1408}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, - {9, 6, 192}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 8, 30}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, {7, 6, 12}, {7, 5, 9}, - {9, 6, 1664}, {7, 4, 6}, {7, 8, 34}, {9, 5, 128}, {7, 8, 50}, {7, 6, 14}, - {7, 8, 62}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, {7, 8, 48}, {7, 4, 3}, - {7, 8, 60}, {7, 4, 5}, {7, 8, 42}, {7, 6, 16}, {9, 9, 1152}, {7, 4, 6}, - {7, 8, 32}, {7, 5, 8}, {7, 8, 58}, {9, 5, 64}, {7, 5, 10}, {7, 4, 4}, - {7, 4, 2}, {7, 4, 7}, {7, 7, 22}, {7, 4, 3}, {7, 5, 11}, {7, 4, 5}, - {7, 7, 26}, {7, 5, 9}, {9, 8, 640}, {7, 4, 6}, {7, 8, 38}, {9, 5, 128}, - {7, 7, 25}, {7, 6, 15}, {9, 8, 384}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7}, - {7, 6, 13}, {7, 4, 3}, {7, 7, 18}, {7, 4, 5}, {7, 7, 21}, {7, 6, 17}, - {9, 7, 256}, {7, 4, 6}, {7, 6, 1}, {7, 5, 8}, {9, 6, 192}, {9, 5, 64}, - {7, 5, 10}, {7, 4, 4}, {7, 4, 2}, {7, 4, 7} -}; - -const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = -{ - {12, 11, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 17}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 11, 1792}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 23}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 20}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 25}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 12, 128}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 56}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 30}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 11, 1856}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 57}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 21}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 54}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 52}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 48}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 2112}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 44}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 36}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 12, 384}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 28}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 60}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 40}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2368}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 10, 64}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 17}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 1984}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 50}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 34}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 1664}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 26}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 1408}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 32}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 11, 1920}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 61}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 42}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 1024}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 768}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 62}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2240}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 46}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 38}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 512}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 19}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 24}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 22}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2496}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 10, 64}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {12, 11, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 18}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 17}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 11, 1792}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 23}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 20}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 25}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 12, 192}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 1280}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 31}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 11, 1856}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 58}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 21}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 896}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 640}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 49}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2176}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 45}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 37}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 12, 448}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 29}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 1536}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 41}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 2432}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 16}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 10, 64}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 17}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2048}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 51}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 35}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 12, 320}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 27}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 59}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 33}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 11, 1920}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 12, 256}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 43}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 1152}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 55}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 63}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 2304}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 47}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 39}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 53}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 19}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 24}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 22}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2560}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 10, 64}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {12, 11, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 17}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 11, 1792}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 23}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 20}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 25}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 12, 128}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 56}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 30}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 11, 1856}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 57}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 21}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 54}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 52}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 48}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2112}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 44}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 36}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 12, 384}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 28}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 60}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 40}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2368}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 10, 64}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 18}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 17}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 1984}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 50}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 34}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 1728}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 26}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 1472}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 32}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 11, 1920}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 61}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 42}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 1088}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 832}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 62}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2240}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 46}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 38}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 576}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 19}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 24}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 22}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 2496}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 16}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 10, 64}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {12, 11, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 17}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 11, 1792}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 23}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 20}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 25}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 12, 192}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 1344}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 31}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 11, 1856}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 58}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 11, 21}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 960}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 13, 704}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 49}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 12, 2176}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 45}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 37}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 12, 448}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 29}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 13, 1600}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 41}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2432}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 10, 64}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 9, 15}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 18}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 10, 17}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2048}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 51}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 35}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 12, 320}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 27}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 59}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 33}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {11, 11, 1920}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {10, 12, 256}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 43}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {10, 13, 1216}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {0, 0, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 9, 15}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 55}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 63}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {11, 12, 2304}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 12, 47}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 12, 39}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 12, 53}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {0, 0, 0}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 13}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 19}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 11, 24}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 11, 22}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {11, 12, 2560}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 10}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 10, 16}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 10, 0}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {10, 10, 64}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 6, 9}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 7, 11}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 5, 7}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 8, 14}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2}, {8, 6, 8}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, - {8, 4, 5}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, {8, 7, 12}, {8, 2, 3}, - {8, 3, 1}, {8, 2, 2}, {8, 4, 6}, {8, 2, 3}, {8, 3, 4}, {8, 2, 2}, - {8, 5, 7}, {8, 2, 3}, {8, 3, 1}, {8, 2, 2}, {8, 4, 5}, {8, 2, 3}, - {8, 3, 4}, {8, 2, 2} -}; diff --git a/src/libs/pdflib/libs/tiff/tif_getimage.c b/src/libs/pdflib/libs/tiff/tif_getimage.c deleted file mode 100644 index 03b94884e3..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_getimage.c +++ /dev/null @@ -1,2422 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_getimage.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1991-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library - * - * Read and return a packed RGBA image. - */ -#include "tiffiop.h" -#include -#include - -static int gtTileContig(TIFFRGBAImage*, uint32*, uint32, uint32); -static int gtTileSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); -static int gtStripContig(TIFFRGBAImage*, uint32*, uint32, uint32); -static int gtStripSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); -static int pickTileContigCase(TIFF*, TIFFRGBAImage*); -static int pickTileSeparateCase(TIFF*, TIFFRGBAImage*); - -static const char photoTag[] = "PhotometricInterpretation"; - -/* - * Check the image to see if TIFFReadRGBAImage can deal with it. - * 1/0 is returned according to whether or not the image can - * be handled. If 0 is returned, emsg contains the reason - * why it is being rejected. - */ -int -TIFFRGBAImageOK(TIFF* tif, char emsg[1024]) -{ - TIFFDirectory* td = &tif->tif_dir; - uint16 photometric; - int colorchannels; - - switch (td->td_bitspersample) { - case 1: case 2: case 4: - case 8: case 16: - break; - default: - sprintf(emsg, "Sorry, can not handle images with %d-bit samples", - td->td_bitspersample); - return (0); - } - colorchannels = td->td_samplesperpixel - td->td_extrasamples; - if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric)) { - switch (colorchannels) { - case 1: - photometric = PHOTOMETRIC_MINISBLACK; - break; - case 3: - photometric = PHOTOMETRIC_RGB; - break; - default: - sprintf(emsg, "Missing needed %s tag", photoTag); - return (0); - } - } - switch (photometric) { - case PHOTOMETRIC_MINISWHITE: - case PHOTOMETRIC_MINISBLACK: - case PHOTOMETRIC_PALETTE: - if (td->td_planarconfig == PLANARCONFIG_CONTIG - && td->td_samplesperpixel != 1 - && td->td_bitspersample < 8 ) { - sprintf(emsg, - "Sorry, can not handle contiguous data with %s=%d, " - "and %s=%d and Bits/Sample=%d", - photoTag, photometric, - "Samples/pixel", td->td_samplesperpixel, - td->td_bitspersample); - return (0); - } - /* - ** We should likely validate that any extra samples are either - ** to be ignored, or are alpha, and if alpha we should try to use - ** them. But for now we won't bother with this. - */ - break; - case PHOTOMETRIC_YCBCR: - if (td->td_planarconfig != PLANARCONFIG_CONTIG) { - sprintf(emsg, "Sorry, can not handle YCbCr images with %s=%d", - "Planarconfiguration", td->td_planarconfig); - return (0); - } - break; - case PHOTOMETRIC_RGB: - if (colorchannels < 3) { - sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", - "Color channels", colorchannels); - return (0); - } - break; -#ifdef CMYK_SUPPORT - case PHOTOMETRIC_SEPARATED: - if (td->td_inkset != INKSET_CMYK) { - sprintf(emsg, "Sorry, can not handle separated image with %s=%d", - "InkSet", td->td_inkset); - return (0); - } - if (td->td_samplesperpixel < 4) { - sprintf(emsg, "Sorry, can not handle separated image with %s=%d", - "Samples/pixel", td->td_samplesperpixel); - return (0); - } - break; -#endif - case PHOTOMETRIC_LOGL: - if (td->td_compression != COMPRESSION_SGILOG) { - sprintf(emsg, "Sorry, LogL data must have %s=%d", - "Compression", COMPRESSION_SGILOG); - return (0); - } - break; - case PHOTOMETRIC_LOGLUV: - if (td->td_compression != COMPRESSION_SGILOG && - td->td_compression != COMPRESSION_SGILOG24) { - sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d", - "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24); - return (0); - } - if (td->td_planarconfig != PLANARCONFIG_CONTIG) { - sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d", - "Planarconfiguration", td->td_planarconfig); - return (0); - } - break; - default: - sprintf(emsg, "Sorry, can not handle image with %s=%d", - photoTag, photometric); - return (0); - } - return (1); -} - -void -TIFFRGBAImageEnd(TIFF* tif, TIFFRGBAImage* img) -{ - if (img->Map) - _TIFFfree(tif, img->Map), img->Map = NULL; - if (img->BWmap) - _TIFFfree(tif, img->BWmap), img->BWmap = NULL; - if (img->PALmap) - _TIFFfree(tif, img->PALmap), img->PALmap = NULL; - if (img->ycbcr) - _TIFFfree(tif, img->ycbcr), img->ycbcr = NULL; - - if( img->redcmap ) { - _TIFFfree(tif, img->redcmap ); - _TIFFfree(tif, img->greencmap ); - _TIFFfree(tif, img->bluecmap ); - } -} - -static int -isCCITTCompression(TIFF* tif) -{ - uint16 compress; - TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress); - return (compress == COMPRESSION_CCITTFAX3 || - compress == COMPRESSION_CCITTFAX4 || - compress == COMPRESSION_CCITTRLE || - compress == COMPRESSION_CCITTRLEW); -} - -int -TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) -{ - uint16* sampleinfo; - uint16 extrasamples; - uint16 planarconfig; - uint16 compress; - int colorchannels; - uint16 *red_orig, *green_orig, *blue_orig; - int n_color; - - /* Initialize to normal values */ - img->row_offset = 0; - img->col_offset = 0; - img->redcmap = NULL; - img->greencmap = NULL; - img->bluecmap = NULL; - - img->tif = tif; - img->stoponerr = stop; - TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &img->bitspersample); - switch (img->bitspersample) { - case 1: case 2: case 4: - case 8: case 16: - break; - default: - sprintf(emsg, "Sorry, can not image with %d-bit samples", - img->bitspersample); - return (0); - } - img->alpha = 0; - TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &img->samplesperpixel); - TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, - &extrasamples, &sampleinfo); - if (extrasamples == 1) - switch (sampleinfo[0]) { - case EXTRASAMPLE_ASSOCALPHA: /* data is pre-multiplied */ - case EXTRASAMPLE_UNASSALPHA: /* data is not pre-multiplied */ - img->alpha = sampleinfo[0]; - break; - } - colorchannels = img->samplesperpixel - extrasamples; - TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &compress); - TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG, &planarconfig); - if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &img->photometric)) { - switch (colorchannels) { - case 1: - if (isCCITTCompression(tif)) - img->photometric = PHOTOMETRIC_MINISWHITE; - else - img->photometric = PHOTOMETRIC_MINISBLACK; - break; - case 3: - img->photometric = PHOTOMETRIC_RGB; - break; - default: - sprintf(emsg, "Missing needed %s tag", photoTag); - return (0); - } - } - switch (img->photometric) { - case PHOTOMETRIC_PALETTE: - if (!TIFFGetField(tif, TIFFTAG_COLORMAP, - &red_orig, &green_orig, &blue_orig)) { - TIFFError(TIFFFileName(tif), "Missing required \"Colormap\" tag"); - return (0); - } - - /* copy the colormaps so we can modify them */ - n_color = (1L << img->bitspersample); - img->redcmap = (uint16 *) _TIFFmalloc(tif, sizeof(uint16)*n_color); - img->greencmap = (uint16 *) _TIFFmalloc(tif, sizeof(uint16)*n_color); - img->bluecmap = (uint16 *) _TIFFmalloc(tif, sizeof(uint16)*n_color); - if( !img->redcmap || !img->greencmap || !img->bluecmap ) { - TIFFError(TIFFFileName(tif), "Out of memory for colormap copy"); - return (0); - } - - memcpy( img->redcmap, red_orig, n_color * 2 ); - memcpy( img->greencmap, green_orig, n_color * 2 ); - memcpy( img->bluecmap, blue_orig, n_color * 2 ); - - /* fall thru... */ - case PHOTOMETRIC_MINISWHITE: - case PHOTOMETRIC_MINISBLACK: - if (planarconfig == PLANARCONFIG_CONTIG - && img->samplesperpixel != 1 - && img->bitspersample < 8 ) { - sprintf(emsg, - "Sorry, can not handle contiguous data with %s=%d, " - "and %s=%d and Bits/Sample=%d", - photoTag, img->photometric, - "Samples/pixel", img->samplesperpixel, - img->bitspersample); - return (0); - } - break; - case PHOTOMETRIC_YCBCR: - if (planarconfig != PLANARCONFIG_CONTIG) { - sprintf(emsg, "Sorry, can not handle YCbCr images with %s=%d", - "Planarconfiguration", planarconfig); - return (0); - } - /* It would probably be nice to have a reality check here. */ - if (planarconfig == PLANARCONFIG_CONTIG) - /* can rely on libjpeg to convert to RGB */ - /* XXX should restore current state on exit */ - switch (compress) { - case COMPRESSION_OJPEG: - case COMPRESSION_JPEG: - TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB); - img->photometric = PHOTOMETRIC_RGB; - break; - - default: - /* do nothing */; - break; - } - break; - case PHOTOMETRIC_RGB: - if (colorchannels < 3) { - sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", - "Color channels", colorchannels); - return (0); - } - break; - case PHOTOMETRIC_SEPARATED: { - uint16 inkset; - TIFFGetFieldDefaulted(tif, TIFFTAG_INKSET, &inkset); - if (inkset != INKSET_CMYK) { - sprintf(emsg, "Sorry, can not handle separated image with %s=%d", - "InkSet", inkset); - return (0); - } - if (img->samplesperpixel < 4) { - sprintf(emsg, "Sorry, can not handle separated image with %s=%d", - "Samples/pixel", img->samplesperpixel); - return (0); - } - break; - } - case PHOTOMETRIC_LOGL: - if (compress != COMPRESSION_SGILOG) { - sprintf(emsg, "Sorry, LogL data must have %s=%d", - "Compression", COMPRESSION_SGILOG); - return (0); - } - TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); - img->photometric = PHOTOMETRIC_MINISBLACK; /* little white lie */ - img->bitspersample = 8; - break; - case PHOTOMETRIC_LOGLUV: - if (compress != COMPRESSION_SGILOG && compress != COMPRESSION_SGILOG24){ - sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d", - "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24); - return (0); - } - if (planarconfig != PLANARCONFIG_CONTIG) { - sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d", - "Planarconfiguration", planarconfig); - return (0); - } - TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); - img->photometric = PHOTOMETRIC_RGB; /* little white lie */ - img->bitspersample = 8; - break; - default: - sprintf(emsg, "Sorry, can not handle image with %s=%d", - photoTag, img->photometric); - return (0); - } - img->Map = NULL; - img->BWmap = NULL; - img->PALmap = NULL; - img->ycbcr = NULL; - TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &img->width); - TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &img->height); - TIFFGetFieldDefaulted(tif, TIFFTAG_ORIENTATION, &img->orientation); - img->isContig = - !(planarconfig == PLANARCONFIG_SEPARATE && colorchannels > 1); - if (img->isContig) { - img->get = TIFFIsTiled(tif) ? gtTileContig : gtStripContig; - (void) pickTileContigCase(tif, img); - } else { - img->get = TIFFIsTiled(tif) ? gtTileSeparate : gtStripSeparate; - (void) pickTileSeparateCase(tif, img); - } - return (1); -} - -int -TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) -{ - if (img->get == NULL) { - TIFFError(TIFFFileName(img->tif), "No \"get\" routine setup"); - return (0); - } - if (img->put.any == NULL) { - TIFFError(TIFFFileName(img->tif), - "No \"put\" routine setupl; probably can not handle image format"); - return (0); - } - return (*img->get)(img, raster, w, h); -} - -/* - * Read the specified image into an ABGR-format raster. - */ -int -TIFFReadRGBAImage(TIFF* tif, - uint32 rwidth, uint32 rheight, uint32* raster, int stop) -{ - char emsg[1024]; - TIFFRGBAImage img; - int ok; - - if (TIFFRGBAImageBegin(&img, tif, stop, emsg)) { - /* XXX verify rwidth and rheight against width and height */ - ok = TIFFRGBAImageGet(&img, raster+(rheight-img.height)*rwidth, - rwidth, img.height); - TIFFRGBAImageEnd(tif, &img); - } else { - TIFFError(TIFFFileName(tif), emsg); - ok = 0; - } - return (ok); -} - -static uint32 -setorientation(TIFFRGBAImage* img, uint32 h) -{ - TIFF* tif = img->tif; - uint32 y; - - switch (img->orientation) { - case ORIENTATION_BOTRIGHT: - case ORIENTATION_RIGHTBOT: /* XXX */ - case ORIENTATION_LEFTBOT: /* XXX */ - TIFFWarning(TIFFFileName(tif), "using bottom-left orientation"); - img->orientation = ORIENTATION_BOTLEFT; - /* fall thru... */ - case ORIENTATION_BOTLEFT: - y = 0; - break; - case ORIENTATION_TOPRIGHT: - case ORIENTATION_RIGHTTOP: /* XXX */ - case ORIENTATION_LEFTTOP: /* XXX */ - default: - TIFFWarning(TIFFFileName(tif), "using top-left orientation"); - img->orientation = ORIENTATION_TOPLEFT; - /* fall thru... */ - case ORIENTATION_TOPLEFT: - y = h-1; - break; - } - return (y); -} - -/* - * Get an tile-organized image that has - * PlanarConfiguration contiguous if SamplesPerPixel > 1 - * or - * SamplesPerPixel == 1 - */ -static int -gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) -{ - TIFF* tif = img->tif; - tileContigRoutine put = img->put.contig; - uint16 orientation; - uint32 col, row, y, rowstoread, ret = 1; - uint32 pos; - uint32 tw, th; - tif_char* buf; - int32 fromskew, toskew; - uint32 nrow; - - buf = (tif_char*) _TIFFmalloc(tif, TIFFTileSize(tif)); - if (buf == 0) { - TIFFError(TIFFFileName(tif), "No space for tile buffer"); - return (0); - } - TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); - TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); - y = setorientation(img, h); - orientation = img->orientation; - toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? tw+w : tw-w); - for (row = 0; row < h; row += nrow) - { - rowstoread = th - (row + img->row_offset) % th; - nrow = (row + rowstoread > h ? h - row : rowstoread); - for (col = 0; col < w; col += tw) - { - if (TIFFReadTile(tif, buf, col+img->col_offset, - row+img->row_offset, 0, 0) < 0 && img->stoponerr) - { - ret = 0; - break; - } - - pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); - - if (col + tw > w) - { - /* - * Tile is clipped horizontally. Calculate - * visible portion and skewing factors. - */ - uint32 npix = w - col; - fromskew = tw - npix; - (*put)(img, raster+y*w+col, col, y, - npix, nrow, fromskew, toskew + fromskew, buf + pos); - } - else - { - (*put)(img, raster+y*w+col, col, y, tw, nrow, 0, toskew, - buf + pos); - } - } - - y += (orientation == ORIENTATION_TOPLEFT ? -(int32) nrow : (int32)nrow); - } - _TIFFfree(tif, buf); - return (ret); -} - -/* - * Get an tile-organized image that has - * SamplesPerPixel > 1 - * PlanarConfiguration separated - * We assume that all such images are RGB. - */ -static int -gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) -{ - TIFF* tif = img->tif; - tileSeparateRoutine put = img->put.separate; - uint16 orientation; - uint32 col, row, y, rowstoread; - uint32 pos; - uint32 tw, th; - tif_char* buf; - tif_char* r; - tif_char* g; - tif_char* b; - tif_char* a; - tsize_t tilesize; - int32 fromskew, toskew; - int alpha = img->alpha; - uint32 nrow; - int ret = 1; - - tilesize = TIFFTileSize(tif); - buf = (tif_char*) _TIFFmalloc(tif, 4*tilesize); - if (buf == 0) { - TIFFError(TIFFFileName(tif), "No space for tile buffer"); - return (0); - } - r = buf; - g = r + tilesize; - b = g + tilesize; - a = b + tilesize; - if (!alpha) - memset(a, 0xff, tilesize); - TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); - TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); - y = setorientation(img, h); - orientation = img->orientation; - toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? tw+w : tw-w); - for (row = 0; row < h; row += nrow) - { - rowstoread = th - (row + img->row_offset) % th; - nrow = (row + rowstoread > h ? h - row : rowstoread); - for (col = 0; col < w; col += tw) - { - if (TIFFReadTile(tif, r, col+img->col_offset, - row+img->row_offset,0,0) < 0 && img->stoponerr) - { - ret = 0; - break; - } - if (TIFFReadTile(tif, g, col+img->col_offset, - row+img->row_offset,0,1) < 0 && img->stoponerr) - { - ret = 0; - break; - } - if (TIFFReadTile(tif, b, col+img->col_offset, - row+img->row_offset,0,2) < 0 && img->stoponerr) - { - ret = 0; - break; - } - if (alpha && TIFFReadTile(tif,a,col+img->col_offset, - row+img->row_offset,0,3) < 0 && img->stoponerr) - { - ret = 0; - break; - } - - pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); - - if (col + tw > w) - { - /* - * Tile is clipped horizontally. Calculate - * visible portion and skewing factors. - */ - uint32 npix = w - col; - fromskew = tw - npix; - (*put)(img, raster+y*w+col, col, y, - npix, nrow, fromskew, toskew + fromskew, - r + pos, g + pos, b + pos, a + pos); - } - else - { - (*put)(img, raster+y*w+col, col, y, - tw, nrow, 0, toskew, r + pos, g + pos, b + pos, a + pos); - } - } - - y += (orientation == ORIENTATION_TOPLEFT ?-(int32) nrow : (int32) nrow); - } - _TIFFfree(tif, buf); - return (ret); -} - -/* - * Get a strip-organized image that has - * PlanarConfiguration contiguous if SamplesPerPixel > 1 - * or - * SamplesPerPixel == 1 - */ -static int -gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) -{ - TIFF* tif = img->tif; - tileContigRoutine put = img->put.contig; - uint16 orientation; - uint32 row, y, nrow, rowstoread; - uint32 pos; - tif_char* buf; - uint32 rowsperstrip; - uint32 imagewidth = img->width; - tsize_t scanline; - int32 fromskew, toskew; - int ret = 1; - - buf = (tif_char*) _TIFFmalloc(tif, TIFFStripSize(tif)); - if (buf == 0) { - TIFFError(TIFFFileName(tif), "No space for strip buffer"); - return (0); - } - y = setorientation(img, h); - orientation = img->orientation; - toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? w+w : w-w); - TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); - scanline = TIFFScanlineSize(tif); - fromskew = (w < imagewidth ? imagewidth - w : 0); - for (row = 0; row < h; row += nrow) - { - rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip; - nrow = (row + rowstoread > h ? h - row : rowstoread); - if (TIFFReadEncodedStrip(tif, - TIFFComputeStrip(tif,row+img->row_offset, 0), - buf, - ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 - && img->stoponerr) - { - ret = 0; - break; - } - - pos = ((row + img->row_offset) % rowsperstrip) * scanline; - (*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, buf + pos); - y += (orientation == ORIENTATION_TOPLEFT ?-(int32) nrow : (int32) nrow); - } - _TIFFfree(tif, buf); - return (ret); -} - -/* - * Get a strip-organized image with - * SamplesPerPixel > 1 - * PlanarConfiguration separated - * We assume that all such images are RGB. - */ -static int -gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) -{ - TIFF* tif = img->tif; - tileSeparateRoutine put = img->put.separate; - uint16 orientation; - tif_char *buf; - tif_char *r, *g, *b, *a; - uint32 row, y, nrow, rowstoread; - uint32 pos; - tsize_t scanline; - uint32 rowsperstrip, offset_row; - uint32 imagewidth = img->width; - tsize_t stripsize; - int32 fromskew, toskew; - int alpha = img->alpha; - int ret = 1; - - stripsize = TIFFStripSize(tif); - r = buf = (tif_char *)_TIFFmalloc(tif, 4*stripsize); - if (buf == 0) { - TIFFError(TIFFFileName(tif), "No space for tile buffer"); - return (0); - } - g = r + stripsize; - b = g + stripsize; - a = b + stripsize; - if (!alpha) - memset(a, 0xff, stripsize); - y = setorientation(img, h); - orientation = img->orientation; - toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? w+w : w-w); - TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); - scanline = TIFFScanlineSize(tif); - fromskew = (w < imagewidth ? imagewidth - w : 0); - for (row = 0; row < h; row += nrow) - { - rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip; - nrow = (row + rowstoread > h ? h - row : rowstoread); - offset_row = row + img->row_offset; - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0), - r, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 - && img->stoponerr) - { - ret = 0; - break; - } - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1), - g, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 - && img->stoponerr) - { - ret = 0; - break; - } - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2), - b, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 - && img->stoponerr) - { - ret = 0; - break; - } - if (alpha && - (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 3), - a, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 - && img->stoponerr)) - { - ret = 0; - break; - } - - pos = ((row + img->row_offset) % rowsperstrip) * scanline; - (*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, r + pos, - g + pos, b + pos, a + pos); - y += (orientation == ORIENTATION_TOPLEFT ? -(int32) nrow : (int32)nrow); - } - _TIFFfree(tif, buf); - return (ret); -} - -/* - * The following routines move decoded data returned - * from the TIFF library into rasters filled with packed - * ABGR pixels (i.e. suitable for passing to lrecwrite.) - * - * The routines have been created according to the most - * important cases and optimized. pickTileContigCase and - * pickTileSeparateCase analyze the parameters and select - * the appropriate "put" routine to use. - */ -#define REPEAT8(op) REPEAT4(op); REPEAT4(op) -#define REPEAT4(op) REPEAT2(op); REPEAT2(op) -#define REPEAT2(op) op; op -#define CASE8(x,op) \ - switch (x) { \ - case 7: op; case 6: op; case 5: op; \ - case 4: op; case 3: op; case 2: op; \ - case 1: op; \ - } -#define CASE4(x,op) switch (x) { case 3: op; case 2: op; case 1: op; } -#define NOP - -#define UNROLL8(w, op1, op2) { \ - uint32 _x; \ - for (_x = w; _x >= 8; _x -= 8) { \ - op1; \ - REPEAT8(op2); \ - } \ - if (_x > 0) { \ - op1; \ - CASE8(_x,op2); \ - } \ -} -#define UNROLL4(w, op1, op2) { \ - uint32 _x; \ - for (_x = w; _x >= 4; _x -= 4) { \ - op1; \ - REPEAT4(op2); \ - } \ - if (_x > 0) { \ - op1; \ - CASE4(_x,op2); \ - } \ -} -#define UNROLL2(w, op1, op2) { \ - uint32 _x; \ - for (_x = w; _x >= 2; _x -= 2) { \ - op1; \ - REPEAT2(op2); \ - } \ - if (_x) { \ - op1; \ - op2; \ - } \ -} - -#define SKEW(r,g,b,skew) { r += skew; g += skew; b += skew; } -#define SKEW4(r,g,b,a,skew) { r += skew; g += skew; b += skew; a+= skew; } - -#define A1 ((uint32)(0xffL<<24)) -#define PACK(r,g,b) \ - ((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|A1) -#define PACK4(r,g,b,a) \ - ((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|((uint32)(a)<<24)) -#define W2B(v) (((v)>>8)&0xff) -#define PACKW(r,g,b) \ - ((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|A1) -#define PACKW4(r,g,b,a) \ -((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|((uint32)W2B(a)<<24)) - -#define DECLAREContigPutFunc(name) \ -static void name(\ - TIFFRGBAImage* img, \ - uint32* cp, \ - uint32 x, uint32 y, \ - uint32 w, uint32 h, \ - int32 fromskew, int32 toskew, \ - tif_char* pp \ -) - -/* - * 8-bit palette => colormap/RGB - */ -DECLAREContigPutFunc(put8bitcmaptile) -{ - uint32** PALmap = img->PALmap; - int samplesperpixel = img->samplesperpixel; - - (void) y; - while (h-- > 0) { - for (x = w; x-- > 0;) - { - *cp++ = PALmap[*pp][0]; - pp += samplesperpixel; - } - cp += toskew; - pp += fromskew; - } -} - -/* - * 4-bit palette => colormap/RGB - */ -DECLAREContigPutFunc(put4bitcmaptile) -{ - uint32** PALmap = img->PALmap; - - (void) x; (void) y; - fromskew /= 2; - while (h-- > 0) { - uint32* bw; - UNROLL2(w, bw = PALmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 2-bit palette => colormap/RGB - */ -DECLAREContigPutFunc(put2bitcmaptile) -{ - uint32** PALmap = img->PALmap; - - (void) x; (void) y; - fromskew /= 4; - while (h-- > 0) { - uint32* bw; - UNROLL4(w, bw = PALmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 1-bit palette => colormap/RGB - */ -DECLAREContigPutFunc(put1bitcmaptile) -{ - uint32** PALmap = img->PALmap; - - (void) x; (void) y; - fromskew /= 8; - while (h-- > 0) { - uint32* bw; - UNROLL8(w, bw = PALmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 8-bit greyscale => colormap/RGB - */ -DECLAREContigPutFunc(putgreytile) -{ - int samplesperpixel = img->samplesperpixel; - uint32** BWmap = img->BWmap; - - (void) y; - while (h-- > 0) { - for (x = w; x-- > 0;) - { - *cp++ = BWmap[*pp][0]; - pp += samplesperpixel; - } - cp += toskew; - pp += fromskew; - } -} - -/* - * 16-bit greyscale => colormap/RGB - */ -DECLAREContigPutFunc(put16bitbwtile) -{ - int samplesperpixel = img->samplesperpixel; - uint32** BWmap = img->BWmap; - - (void) y; - while (h-- > 0) { - uint16 *wp = (uint16 *) pp; - - for (x = w; x-- > 0;) - { - /* use high order byte of 16bit value */ - - *cp++ = BWmap[*wp >> 8][0]; - pp += 2 * samplesperpixel; - wp += samplesperpixel; - } - cp += toskew; - pp += fromskew; - } -} - -/* - * 1-bit bilevel => colormap/RGB - */ -DECLAREContigPutFunc(put1bitbwtile) -{ - uint32** BWmap = img->BWmap; - - (void) x; (void) y; - fromskew /= 8; - while (h-- > 0) { - uint32* bw; - UNROLL8(w, bw = BWmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 2-bit greyscale => colormap/RGB - */ -DECLAREContigPutFunc(put2bitbwtile) -{ - uint32** BWmap = img->BWmap; - - (void) x; (void) y; - fromskew /= 4; - while (h-- > 0) { - uint32* bw; - UNROLL4(w, bw = BWmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 4-bit greyscale => colormap/RGB - */ -DECLAREContigPutFunc(put4bitbwtile) -{ - uint32** BWmap = img->BWmap; - - (void) x; (void) y; - fromskew /= 2; - while (h-- > 0) { - uint32* bw; - UNROLL2(w, bw = BWmap[*pp++], *cp++ = *bw++); - cp += toskew; - pp += fromskew; - } -} - -/* - * 8-bit packed samples, no Map => RGB - */ -DECLAREContigPutFunc(putRGBcontig8bittile) -{ - int samplesperpixel = img->samplesperpixel; - - (void) x; (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - UNROLL8(w, NOP, - *cp++ = PACK(pp[0], pp[1], pp[2]); - pp += samplesperpixel); - cp += toskew; - pp += fromskew; - } -} - -/* - * 8-bit packed samples, w/ Map => RGB - */ -DECLAREContigPutFunc(putRGBcontig8bitMaptile) -{ - TIFFRGBValue* Map = img->Map; - int samplesperpixel = img->samplesperpixel; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - for (x = w; x-- > 0;) { - *cp++ = PACK(Map[pp[0]], Map[pp[1]], Map[pp[2]]); - pp += samplesperpixel; - } - pp += fromskew; - cp += toskew; - } -} - -/* - * 8-bit packed samples => RGBA w/ associated alpha - * (known to have Map == NULL) - */ -DECLAREContigPutFunc(putRGBAAcontig8bittile) -{ - int samplesperpixel = img->samplesperpixel; - - (void) x; (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - UNROLL8(w, NOP, - *cp++ = PACK4(pp[0], pp[1], pp[2], pp[3]); - pp += samplesperpixel); - cp += toskew; - pp += fromskew; - } -} - -/* - * 8-bit packed samples => RGBA w/ unassociated alpha - * (known to have Map == NULL) - */ -DECLAREContigPutFunc(putRGBUAcontig8bittile) -{ - int samplesperpixel = img->samplesperpixel; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - uint32 r, g, b, a; - for (x = w; x-- > 0;) { - a = pp[3]; - r = (pp[0] * a) / 255; - g = (pp[1] * a) / 255; - b = (pp[2] * a) / 255; - *cp++ = PACK4(r,g,b,a); - pp += samplesperpixel; - } - cp += toskew; - pp += fromskew; - } -} - -/* - * 16-bit packed samples => RGB - */ -DECLAREContigPutFunc(putRGBcontig16bittile) -{ - int samplesperpixel = img->samplesperpixel; - uint16 *wp = (uint16 *)pp; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - for (x = w; x-- > 0;) { - *cp++ = PACKW(wp[0], wp[1], wp[2]); - wp += samplesperpixel; - } - cp += toskew; - wp += fromskew; - } -} - -/* - * 16-bit packed samples => RGBA w/ associated alpha - * (known to have Map == NULL) - */ -DECLAREContigPutFunc(putRGBAAcontig16bittile) -{ - int samplesperpixel = img->samplesperpixel; - uint16 *wp = (uint16 *)pp; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - for (x = w; x-- > 0;) { - *cp++ = PACKW4(wp[0], wp[1], wp[2], wp[3]); - wp += samplesperpixel; - } - cp += toskew; - wp += fromskew; - } -} - -/* - * 16-bit packed samples => RGBA w/ unassociated alpha - * (known to have Map == NULL) - */ -DECLAREContigPutFunc(putRGBUAcontig16bittile) -{ - int samplesperpixel = img->samplesperpixel; - uint16 *wp = (uint16 *)pp; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - uint32 r,g,b,a; - /* - * We shift alpha down four bits just in case unsigned - * arithmetic doesn't handle the full range. - * We still have plenty of accuracy, since the output is 8 bits. - * So we have (r * 0xffff) * (a * 0xfff)) = r*a * (0xffff*0xfff) - * Since we want r*a * 0xff for eight bit output, - * we divide by (0xffff * 0xfff) / 0xff == 0x10eff. - */ - for (x = w; x-- > 0;) { - a = wp[3] >> 4; - r = (wp[0] * a) / 0x10eff; - g = (wp[1] * a) / 0x10eff; - b = (wp[2] * a) / 0x10eff; - *cp++ = PACK4(r,g,b,a); - wp += samplesperpixel; - } - cp += toskew; - wp += fromskew; - } -} - -/* - * 8-bit packed CMYK samples w/o Map => RGB - * - * NB: The conversion of CMYK->RGB is *very* crude. - */ -DECLAREContigPutFunc(putRGBcontig8bitCMYKtile) -{ - int samplesperpixel = img->samplesperpixel; - uint16 r, g, b, k; - - (void) x; (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - UNROLL8(w, NOP, - k = 255 - pp[3]; - r = (k*(255-pp[0]))/255; - g = (k*(255-pp[1]))/255; - b = (k*(255-pp[2]))/255; - *cp++ = PACK(r, g, b); - pp += samplesperpixel); - cp += toskew; - pp += fromskew; - } -} - -/* - * 8-bit packed CMYK samples w/Map => RGB - * - * NB: The conversion of CMYK->RGB is *very* crude. - */ -DECLAREContigPutFunc(putRGBcontig8bitCMYKMaptile) -{ - int samplesperpixel = img->samplesperpixel; - TIFFRGBValue* Map = img->Map; - uint16 r, g, b, k; - - (void) y; - fromskew *= samplesperpixel; - while (h-- > 0) { - for (x = w; x-- > 0;) { - k = 255 - pp[3]; - r = (k*(255-pp[0]))/255; - g = (k*(255-pp[1]))/255; - b = (k*(255-pp[2]))/255; - *cp++ = PACK(Map[r], Map[g], Map[b]); - pp += samplesperpixel; - } - pp += fromskew; - cp += toskew; - } -} - -#define DECLARESepPutFunc(name) \ -static void name(\ - TIFFRGBAImage* img,\ - uint32* cp,\ - uint32 x, uint32 y, \ - uint32 w, uint32 h,\ - int32 fromskew, int32 toskew,\ - tif_char* r, tif_char* g, tif_char* b, tif_char* a\ -) - -/* - * 8-bit unpacked samples => RGB - */ -DECLARESepPutFunc(putRGBseparate8bittile) -{ - (void) img; (void) x; (void) y; (void) a; - while (h-- > 0) { - UNROLL8(w, NOP, *cp++ = PACK(*r++, *g++, *b++)); - SKEW(r, g, b, fromskew); - cp += toskew; - } -} - -/* - * 8-bit unpacked samples => RGB - */ -DECLARESepPutFunc(putRGBseparate8bitMaptile) -{ - TIFFRGBValue* Map = img->Map; - - (void) y; (void) a; - while (h-- > 0) { - for (x = w; x > 0; x--) - *cp++ = PACK(Map[*r++], Map[*g++], Map[*b++]); - SKEW(r, g, b, fromskew); - cp += toskew; - } -} - -/* - * 8-bit unpacked samples => RGBA w/ associated alpha - */ -DECLARESepPutFunc(putRGBAAseparate8bittile) -{ - (void) img; (void) x; (void) y; - while (h-- > 0) { - UNROLL8(w, NOP, *cp++ = PACK4(*r++, *g++, *b++, *a++)); - SKEW4(r, g, b, a, fromskew); - cp += toskew; - } -} - -/* - * 8-bit unpacked samples => RGBA w/ unassociated alpha - */ -DECLARESepPutFunc(putRGBUAseparate8bittile) -{ - (void) img; (void) y; - while (h-- > 0) { - uint32 rv, gv, bv, av; - for (x = w; x-- > 0;) { - av = *a++; - rv = (*r++ * av) / 255; - gv = (*g++ * av) / 255; - bv = (*b++ * av) / 255; - *cp++ = PACK4(rv,gv,bv,av); - } - SKEW4(r, g, b, a, fromskew); - cp += toskew; - } -} - -/* - * 16-bit unpacked samples => RGB - */ -DECLARESepPutFunc(putRGBseparate16bittile) -{ - uint16 *wr = (uint16*) r; - uint16 *wg = (uint16*) g; - uint16 *wb = (uint16*) b; - - (void) img; (void) y; (void) a; - while (h-- > 0) { - for (x = 0; x < w; x++) - *cp++ = PACKW(*wr++, *wg++, *wb++); - SKEW(wr, wg, wb, fromskew); - cp += toskew; - } -} - -/* - * 16-bit unpacked samples => RGBA w/ associated alpha - */ -DECLARESepPutFunc(putRGBAAseparate16bittile) -{ - uint16 *wr = (uint16*) r; - uint16 *wg = (uint16*) g; - uint16 *wb = (uint16*) b; - uint16 *wa = (uint16*) a; - - (void) img; (void) y; - while (h-- > 0) { - for (x = 0; x < w; x++) - *cp++ = PACKW4(*wr++, *wg++, *wb++, *wa++); - SKEW4(wr, wg, wb, wa, fromskew); - cp += toskew; - } -} - -/* - * 16-bit unpacked samples => RGBA w/ unassociated alpha - */ -DECLARESepPutFunc(putRGBUAseparate16bittile) -{ - uint16 *wr = (uint16*) r; - uint16 *wg = (uint16*) g; - uint16 *wb = (uint16*) b; - uint16 *wa = (uint16*) a; - - (void) img; (void) y; - while (h-- > 0) { - uint32 vr,vg,vb,va; - /* - * We shift alpha down four bits just in case unsigned - * arithmetic doesn't handle the full range. - * We still have plenty of accuracy, since the output is 8 bits. - * So we have (r * 0xffff) * (a * 0xfff)) = r*a * (0xffff*0xfff) - * Since we want r*a * 0xff for eight bit output, - * we divide by (0xffff * 0xfff) / 0xff == 0x10eff. - */ - for (x = w; x-- > 0;) { - va = *wa++ >> 4; - vr = (*wr++ * va) / 0x10eff; - vg = (*wg++ * va) / 0x10eff; - vb = (*wb++ * va) / 0x10eff; - *cp++ = PACK4(vr,vg,vb,va); - } - SKEW4(wr, wg, wb, wa, fromskew); - cp += toskew; - } -} - -/* - * YCbCr -> RGB conversion and packing routines. The colorspace - * conversion algorithm comes from the IJG v5a code; see below - * for more information on how it works. - */ - -#define YCbCrtoRGB(dst, yc) { \ - int Y = (yc); \ - dst = PACK( \ - clamptab[Y+Crrtab[Cr]], \ - clamptab[Y + (int)((Cbgtab[Cb]+Crgtab[Cr])>>16)], \ - clamptab[Y+Cbbtab[Cb]]); \ -} -#define YCbCrSetup \ - TIFFYCbCrToRGB* ycbcr = img->ycbcr; \ - int* Crrtab = ycbcr->Cr_r_tab; \ - int* Cbbtab = ycbcr->Cb_b_tab; \ - int32* Crgtab = ycbcr->Cr_g_tab; \ - int32* Cbgtab = ycbcr->Cb_g_tab; \ - TIFFRGBValue* clamptab = ycbcr->clamptab - -/* - * 8-bit packed YCbCr samples => RGB - * This function is generic for different sampling sizes, - * and can handle blocks sizes that aren't multiples of the - * sampling size. However, it is substantially less optimized - * than the specific sampling cases. It is used as a fallback - * for difficult blocks. - */ -#ifdef notdef -static void putcontig8bitYCbCrGenericTile( - TIFFRGBAImage* img, - uint32* cp, - uint32 x, uint32 y, - uint32 w, uint32 h, - int32 fromskew, int32 toskew, - tif_char* pp, - int h_group, - int v_group ) - -{ - YCbCrSetup; - - uint32* cp1 = cp+w+toskew; - uint32* cp2 = cp1+w+toskew; - uint32* cp3 = cp2+w+toskew; - int32 incr = 3*w+4*toskew; - int Cb, Cr; - int group_size = v_group * h_group + 2; - - (void) y; - fromskew = (fromskew * group_size) / h_group; - - for( yy = 0; yy < h; yy++ ) - { - tif_char *pp_line; - int y_line_group = yy / v_group; - int y_remainder = yy - y_line_group * v_group; - - pp_line = pp + v_line_group * - - - for( xx = 0; xx < w; xx++ ) - { - Cb = pp - } - } - for (; h >= 4; h -= 4) { - x = w>>2; - do { - Cb = pp[16]; - Cr = pp[17]; - - YCbCrtoRGB(cp [0], pp[ 0]); - YCbCrtoRGB(cp [1], pp[ 1]); - YCbCrtoRGB(cp [2], pp[ 2]); - YCbCrtoRGB(cp [3], pp[ 3]); - YCbCrtoRGB(cp1[0], pp[ 4]); - YCbCrtoRGB(cp1[1], pp[ 5]); - YCbCrtoRGB(cp1[2], pp[ 6]); - YCbCrtoRGB(cp1[3], pp[ 7]); - YCbCrtoRGB(cp2[0], pp[ 8]); - YCbCrtoRGB(cp2[1], pp[ 9]); - YCbCrtoRGB(cp2[2], pp[10]); - YCbCrtoRGB(cp2[3], pp[11]); - YCbCrtoRGB(cp3[0], pp[12]); - YCbCrtoRGB(cp3[1], pp[13]); - YCbCrtoRGB(cp3[2], pp[14]); - YCbCrtoRGB(cp3[3], pp[15]); - - cp += 4, cp1 += 4, cp2 += 4, cp3 += 4; - pp += 18; - } while (--x); - cp += incr, cp1 += incr, cp2 += incr, cp3 += incr; - pp += fromskew; - } -} -#endif - -/* - * 8-bit packed YCbCr samples w/ 4,4 subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr44tile) -{ - YCbCrSetup; - uint32* cp1 = cp+w+toskew; - uint32* cp2 = cp1+w+toskew; - uint32* cp3 = cp2+w+toskew; - int32 incr = 3*w+4*toskew; - - (void) y; - /* adjust fromskew */ - fromskew = (fromskew * 18) / 4; - if ((h & 3) == 0 && (w & 3) == 0) { - for (; h >= 4; h -= 4) { - x = w>>2; - do { - int Cb = pp[16]; - int Cr = pp[17]; - - YCbCrtoRGB(cp [0], pp[ 0]); - YCbCrtoRGB(cp [1], pp[ 1]); - YCbCrtoRGB(cp [2], pp[ 2]); - YCbCrtoRGB(cp [3], pp[ 3]); - YCbCrtoRGB(cp1[0], pp[ 4]); - YCbCrtoRGB(cp1[1], pp[ 5]); - YCbCrtoRGB(cp1[2], pp[ 6]); - YCbCrtoRGB(cp1[3], pp[ 7]); - YCbCrtoRGB(cp2[0], pp[ 8]); - YCbCrtoRGB(cp2[1], pp[ 9]); - YCbCrtoRGB(cp2[2], pp[10]); - YCbCrtoRGB(cp2[3], pp[11]); - YCbCrtoRGB(cp3[0], pp[12]); - YCbCrtoRGB(cp3[1], pp[13]); - YCbCrtoRGB(cp3[2], pp[14]); - YCbCrtoRGB(cp3[3], pp[15]); - - cp += 4, cp1 += 4, cp2 += 4, cp3 += 4; - pp += 18; - } while (--x); - cp += incr, cp1 += incr, cp2 += incr, cp3 += incr; - pp += fromskew; - } - } else { - while (h > 0) { - for (x = w; x > 0;) { - int Cb = pp[16]; - int Cr = pp[17]; - switch (x) { - default: - switch (h) { - default: YCbCrtoRGB(cp3[3], pp[15]); /* FALLTHROUGH */ - case 3: YCbCrtoRGB(cp2[3], pp[11]); /* FALLTHROUGH */ - case 2: YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 3: - switch (h) { - default: YCbCrtoRGB(cp3[2], pp[14]); /* FALLTHROUGH */ - case 3: YCbCrtoRGB(cp2[2], pp[10]); /* FALLTHROUGH */ - case 2: YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 2: - switch (h) { - default: YCbCrtoRGB(cp3[1], pp[13]); /* FALLTHROUGH */ - case 3: YCbCrtoRGB(cp2[1], pp[ 9]); /* FALLTHROUGH */ - case 2: YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 1: - switch (h) { - default: YCbCrtoRGB(cp3[0], pp[12]); /* FALLTHROUGH */ - case 3: YCbCrtoRGB(cp2[0], pp[ 8]); /* FALLTHROUGH */ - case 2: YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - } - if (x < 4) { - cp += x; cp1 += x; cp2 += x; cp3 += x; - x = 0; - } - else { - cp += 4; cp1 += 4; cp2 += 4; cp3 += 4; - x -= 4; - } - pp += 18; - } - if (h <= 4) - break; - h -= 4; - cp += incr, cp1 += incr, cp2 += incr, cp3 += incr; - pp += fromskew; - } - } -} - -/* - * 8-bit packed YCbCr samples w/ 4,2 subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr42tile) -{ - YCbCrSetup; - uint32* cp1 = cp+w+toskew; - int32 incr = 2*toskew+w; - - (void) y; - fromskew = (fromskew * 10) / 4; - if ((h & 3) == 0 && (w & 1) == 0) { - for (; h >= 2; h -= 2) { - x = w>>2; - do { - int Cb = pp[8]; - int Cr = pp[9]; - - YCbCrtoRGB(cp [0], pp[0]); - YCbCrtoRGB(cp [1], pp[1]); - YCbCrtoRGB(cp [2], pp[2]); - YCbCrtoRGB(cp [3], pp[3]); - YCbCrtoRGB(cp1[0], pp[4]); - YCbCrtoRGB(cp1[1], pp[5]); - YCbCrtoRGB(cp1[2], pp[6]); - YCbCrtoRGB(cp1[3], pp[7]); - - cp += 4, cp1 += 4; - pp += 10; - } while (--x); - cp += incr, cp1 += incr; - pp += fromskew; - } - } else { - while (h > 0) { - for (x = w; x > 0;) { - int Cb = pp[8]; - int Cr = pp[9]; - switch (x) { - default: - switch (h) { - default: YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 3: - switch (h) { - default: YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 2: - switch (h) { - default: YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 1: - switch (h) { - default: YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - } - if (x < 4) { - cp += x; cp1 += x; - x = 0; - } - else { - cp += 4; cp1 += 4; - x -= 4; - } - pp += 10; - } - if (h <= 2) - break; - h -= 2; - cp += incr, cp1 += incr; - pp += fromskew; - } - } -} - -/* - * 8-bit packed YCbCr samples w/ 4,1 subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr41tile) -{ - YCbCrSetup; - - (void) y; - /* XXX adjust fromskew */ - do { - x = w>>2; - do { - int Cb = pp[4]; - int Cr = pp[5]; - - YCbCrtoRGB(cp [0], pp[0]); - YCbCrtoRGB(cp [1], pp[1]); - YCbCrtoRGB(cp [2], pp[2]); - YCbCrtoRGB(cp [3], pp[3]); - - cp += 4; - pp += 6; - } while (--x); - - if( (w&3) != 0 ) - { - int Cb = pp[4]; - int Cr = pp[5]; - - switch( (w&3) ) { - case 3: YCbCrtoRGB(cp [2], pp[2]); - case 2: YCbCrtoRGB(cp [1], pp[1]); - case 1: YCbCrtoRGB(cp [0], pp[0]); - case 0: break; - } - - cp += (w&3); - pp += 6; - } - - cp += toskew; - pp += fromskew; - } while (--h); - -} - -/* - * 8-bit packed YCbCr samples w/ 2,2 subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr22tile) -{ - YCbCrSetup; - uint32* cp1 = cp+w+toskew; - int32 incr = 2*toskew+w; - - (void) y; - fromskew = (fromskew * 6) / 2; - if ((h & 1) == 0 && (w & 1) == 0) { - for (; h >= 2; h -= 2) { - x = w>>1; - do { - int Cb = pp[4]; - int Cr = pp[5]; - - YCbCrtoRGB(cp [0], pp[0]); - YCbCrtoRGB(cp [1], pp[1]); - YCbCrtoRGB(cp1[0], pp[2]); - YCbCrtoRGB(cp1[1], pp[3]); - - cp += 2, cp1 += 2; - pp += 6; - } while (--x); - cp += incr, cp1 += incr; - pp += fromskew; - } - } else { - while (h > 0) { - for (x = w; x > 0;) { - int Cb = pp[4]; - int Cr = pp[5]; - switch (x) { - default: - switch (h) { - default: YCbCrtoRGB(cp1[1], pp[ 3]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - case 1: - switch (h) { - default: YCbCrtoRGB(cp1[0], pp[ 2]); /* FALLTHROUGH */ - case 1: YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */ - } /* FALLTHROUGH */ - } - if (x < 2) { - cp += x; cp1 += x; - x = 0; - } - else { - cp += 2; cp1 += 2; - x -= 2; - } - pp += 6; - } - if (h <= 2) - break; - h -= 2; - cp += incr, cp1 += incr; - pp += fromskew; - } - } -} - -/* - * 8-bit packed YCbCr samples w/ 2,1 subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr21tile) -{ - YCbCrSetup; - - (void) y; - fromskew = (fromskew * 4) / 2; - do { - x = w>>1; - do { - int Cb = pp[2]; - int Cr = pp[3]; - - YCbCrtoRGB(cp[0], pp[0]); - YCbCrtoRGB(cp[1], pp[1]); - - cp += 2; - pp += 4; - } while (--x); - - if( (w&1) != 0 ) - { - int Cb = pp[2]; - int Cr = pp[3]; - - YCbCrtoRGB(cp [0], pp[0]); - - cp += 1; - pp += 4; - } - - cp += toskew; - pp += fromskew; - } while (--h); -} - -/* - * 8-bit packed YCbCr samples w/ no subsampling => RGB - */ -DECLAREContigPutFunc(putcontig8bitYCbCr11tile) -{ - YCbCrSetup; - - (void) y; - fromskew *= 3; - do { - x = w; /* was x = w>>1; patched 2000/09/25 warmerda@home.com */ - do { - int Cb = pp[1]; - int Cr = pp[2]; - - YCbCrtoRGB(*cp++, pp[0]); - - pp += 3; - } while (--x); - cp += toskew; - pp += fromskew; - } while (--h); -} -#undef YCbCrSetup -#undef YCbCrtoRGB - -#define LumaRed coeffs[0] -#define LumaGreen coeffs[1] -#define LumaBlue coeffs[2] -#define SHIFT 16 -#define FIX(x) ((int32)((x) * (1L<RGB conversion tables. The conversion - * is done according to the 6.0 spec: - * - * R = Y + Cr*(2 - 2*LumaRed) - * B = Y + Cb*(2 - 2*LumaBlue) - * G = Y - * - LumaBlue*Cb*(2-2*LumaBlue)/LumaGreen - * - LumaRed*Cr*(2-2*LumaRed)/LumaGreen - * - * To avoid floating point arithmetic the fractional constants that - * come out of the equations are represented as fixed point values - * in the range 0...2^16. We also eliminate multiplications by - * pre-calculating possible values indexed by Cb and Cr (this code - * assumes conversion is being done for 8-bit samples). - */ -static void -TIFFYCbCrToRGBInit(TIFFYCbCrToRGB* ycbcr, TIFF* tif) -{ - TIFFRGBValue* clamptab; - float* coeffs; - int i; - - clamptab = (TIFFRGBValue*)( - (tidata_t) ycbcr+TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long))); - _TIFFmemset(clamptab, 0, 256); /* v < 0 => 0 */ - ycbcr->clamptab = (clamptab += 256); - for (i = 0; i < 256; i++) - clamptab[i] = i; - _TIFFmemset(clamptab+256, 255, 2*256); /* v > 255 => 255 */ - TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRCOEFFICIENTS, &coeffs); - _TIFFmemcpy(ycbcr->coeffs, coeffs, 3*sizeof (float)); - { float f1 = 2-2*LumaRed; int32 D1 = FIX(f1); - float f2 = LumaRed*f1/LumaGreen; int32 D2 = -FIX(f2); - float f3 = 2-2*LumaBlue; int32 D3 = FIX(f3); - float f4 = LumaBlue*f3/LumaGreen; int32 D4 = -FIX(f4); - int x; - - ycbcr->Cr_r_tab = (int*) (clamptab + 3*256); - ycbcr->Cb_b_tab = ycbcr->Cr_r_tab + 256; - ycbcr->Cr_g_tab = (int32*) (ycbcr->Cb_b_tab + 256); - ycbcr->Cb_g_tab = ycbcr->Cr_g_tab + 256; - /* - * i is the actual input pixel value in the range 0..255 - * Cb and Cr values are in the range -128..127 (actually - * they are in a range defined by the ReferenceBlackWhite - * tag) so there is some range shifting to do here when - * constructing tables indexed by the raw pixel data. - * - * XXX handle ReferenceBlackWhite correctly to calculate - * Cb/Cr values to use in constructing the tables. - */ - for (i = 0, x = -128; i < 256; i++, x++) { - ycbcr->Cr_r_tab[i] = (int)((D1*x + ONE_HALF)>>SHIFT); - ycbcr->Cb_b_tab[i] = (int)((D3*x + ONE_HALF)>>SHIFT); - ycbcr->Cr_g_tab[i] = D2*x; - ycbcr->Cb_g_tab[i] = D4*x + ONE_HALF; - } - } -} -#undef SHIFT -#undef ONE_HALF -#undef FIX -#undef LumaBlue -#undef LumaGreen -#undef LumaRed - -static tileContigRoutine -initYCbCrConversion(TIFF* tif, TIFFRGBAImage* img) -{ - uint16 hs, vs; - - if (img->ycbcr == NULL) { - img->ycbcr = (TIFFYCbCrToRGB*) _TIFFmalloc(tif, - TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long)) - + 4*256*sizeof (TIFFRGBValue) - + 2*256*sizeof (int) - + 2*256*sizeof (int32) - ); - if (img->ycbcr == NULL) { - TIFFError(TIFFFileName(img->tif), - "No space for YCbCr->RGB conversion state"); - return (NULL); - } - TIFFYCbCrToRGBInit(img->ycbcr, img->tif); - } else { - float* coeffs; - - TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRCOEFFICIENTS, &coeffs); - if (_TIFFmemcmp(coeffs, img->ycbcr->coeffs, 3*sizeof (float)) != 0) - TIFFYCbCrToRGBInit(img->ycbcr, img->tif); - } - /* - * The 6.0 spec says that subsampling must be - * one of 1, 2, or 4, and that vertical subsampling - * must always be <= horizontal subsampling; so - * there are only a few possibilities and we just - * enumerate the cases. - */ - TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &hs, &vs); - switch ((hs<<4)|vs) { - case 0x44: return ((tileContigRoutine)putcontig8bitYCbCr44tile); - case 0x42: return ((tileContigRoutine)putcontig8bitYCbCr42tile); - case 0x41: return ((tileContigRoutine)putcontig8bitYCbCr41tile); - case 0x22: return ((tileContigRoutine)putcontig8bitYCbCr22tile); - case 0x21: return ((tileContigRoutine)putcontig8bitYCbCr21tile); - case 0x11: return ((tileContigRoutine)putcontig8bitYCbCr11tile); - } - return (NULL); -} - -/* - * Greyscale images with less than 8 bits/sample are handled - * with a table to avoid lots of shifts and masks. The table - * is setup so that put*bwtile (below) can retrieve 8/bitspersample - * pixel values simply by indexing into the table with one - * number. - */ -static int -makebwmap(TIFF* tif, TIFFRGBAImage* img) -{ - TIFFRGBValue* Map = img->Map; - int bitspersample = img->bitspersample; - int nsamples = 8 / bitspersample; - int i; - uint32* p; - - if( nsamples == 0 ) - nsamples = 1; - - img->BWmap = (uint32**) _TIFFmalloc(tif, - 256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32))); - if (img->BWmap == NULL) { - TIFFError(TIFFFileName(img->tif), "No space for B&W mapping table"); - return (0); - } - p = (uint32*)(img->BWmap + 256); - for (i = 0; i < 256; i++) { - TIFFRGBValue c; - img->BWmap[i] = p; - switch (bitspersample) { -#define GREY(x) c = Map[x]; *p++ = PACK(c,c,c); - case 1: - GREY(i>>7); - GREY((i>>6)&1); - GREY((i>>5)&1); - GREY((i>>4)&1); - GREY((i>>3)&1); - GREY((i>>2)&1); - GREY((i>>1)&1); - GREY(i&1); - break; - case 2: - GREY(i>>6); - GREY((i>>4)&3); - GREY((i>>2)&3); - GREY(i&3); - break; - case 4: - GREY(i>>4); - GREY(i&0xf); - break; - case 8: - case 16: - GREY(i); - break; - } -#undef GREY - } - return (1); -} - -/* - * Construct a mapping table to convert from the range - * of the data samples to [0,255] --for display. This - * process also handles inverting B&W images when needed. - */ -static int -setupMap(TIFF* tif, TIFFRGBAImage* img) -{ - int32 x, range; - - range = (int32)((1L<bitspersample)-1); - - /* treat 16 bit the same as eight bit */ - if( img->bitspersample == 16 ) - range = (int32) 255; - - img->Map=(TIFFRGBValue*)_TIFFmalloc(tif,(range+1)*sizeof(TIFFRGBValue)); - if (img->Map == NULL) { - TIFFError(TIFFFileName(img->tif), - "No space for photometric conversion table"); - return (0); - } - if (img->photometric == PHOTOMETRIC_MINISWHITE) { - for (x = 0; x <= range; x++) - img->Map[x] = (TIFFRGBValue) (((range - x) * 255) / range); - } else { - for (x = 0; x <= range; x++) - img->Map[x] = (TIFFRGBValue) ((x * 255) / range); - } - if (img->bitspersample <= 16 && - (img->photometric == PHOTOMETRIC_MINISBLACK || - img->photometric == PHOTOMETRIC_MINISWHITE)) { - /* - * Use photometric mapping table to construct - * unpacking tables for samples <= 8 bits. - */ - if (!makebwmap(tif, img)) - return (0); - /* no longer need Map, free it */ - _TIFFfree(tif, img->Map), img->Map = NULL; - } - return (1); -} - -static int -checkcmap(TIFFRGBAImage* img) -{ - uint16* r = img->redcmap; - uint16* g = img->greencmap; - uint16* b = img->bluecmap; - long n = 1L<bitspersample; - - while (n-- > 0) - if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) - return (16); - return (8); -} - -static void -cvtcmap(TIFFRGBAImage* img) -{ - uint16* r = img->redcmap; - uint16* g = img->greencmap; - uint16* b = img->bluecmap; - long i; - - for (i = (1L<bitspersample)-1; i >= 0; i--) { -#define CVT(x) ((uint16)((x)>>8)) - r[i] = CVT(r[i]); - g[i] = CVT(g[i]); - b[i] = CVT(b[i]); -#undef CVT - } -} - -/* - * Palette images with <= 8 bits/sample are handled - * with a table to avoid lots of shifts and masks. The table - * is setup so that put*cmaptile (below) can retrieve 8/bitspersample - * pixel values simply by indexing into the table with one - * number. - */ -static int -makecmap(TIFF* tif, TIFFRGBAImage* img) -{ - int bitspersample = img->bitspersample; - int nsamples = 8 / bitspersample; - uint16* r = img->redcmap; - uint16* g = img->greencmap; - uint16* b = img->bluecmap; - uint32 *p; - int i; - - img->PALmap = (uint32**) _TIFFmalloc(tif, - 256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32))); - if (img->PALmap == NULL) { - TIFFError(TIFFFileName(img->tif), "No space for Palette mapping table"); - return (0); - } - p = (uint32*)(img->PALmap + 256); - for (i = 0; i < 256; i++) { - TIFFRGBValue c; - img->PALmap[i] = p; -#define CMAP(x) c = x; *p++ = PACK(r[c]&0xff, g[c]&0xff, b[c]&0xff); - switch (bitspersample) { - case 1: - CMAP(i>>7); - CMAP((i>>6)&1); - CMAP((i>>5)&1); - CMAP((i>>4)&1); - CMAP((i>>3)&1); - CMAP((i>>2)&1); - CMAP((i>>1)&1); - CMAP(i&1); - break; - case 2: - CMAP(i>>6); - CMAP((i>>4)&3); - CMAP((i>>2)&3); - CMAP(i&3); - break; - case 4: - CMAP(i>>4); - CMAP(i&0xf); - break; - case 8: - CMAP(i); - break; - } -#undef CMAP - } - return (1); -} - -/* - * Construct any mapping table used - * by the associated put routine. - */ -static int -buildMap(TIFF* tif, TIFFRGBAImage* img) -{ - switch (img->photometric) { - case PHOTOMETRIC_RGB: - case PHOTOMETRIC_YCBCR: - case PHOTOMETRIC_SEPARATED: - if (img->bitspersample == 8) - break; - /* fall thru... */ - case PHOTOMETRIC_MINISBLACK: - case PHOTOMETRIC_MINISWHITE: - if (!setupMap(tif, img)) - return (0); - break; - case PHOTOMETRIC_PALETTE: - /* - * Convert 16-bit colormap to 8-bit (unless it looks - * like an old-style 8-bit colormap). - */ - if (checkcmap(img) == 16) - cvtcmap(img); - else - TIFFWarning(TIFFFileName(img->tif), "Assuming 8-bit colormap"); - /* - * Use mapping table and colormap to construct - * unpacking tables for samples < 8 bits. - */ - if (img->bitspersample <= 8 && !makecmap(tif, img)) - return (0); - break; - } - return (1); -} - -/* - * Select the appropriate conversion routine for packed data. - */ -static int -pickTileContigCase(TIFF* tif, TIFFRGBAImage* img) -{ - tileContigRoutine put = 0; - - if (buildMap(tif, img)) { - switch (img->photometric) { - case PHOTOMETRIC_RGB: - switch (img->bitspersample) { - case 8: - if (!img->Map) { - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - put = putRGBAAcontig8bittile; - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - put = putRGBUAcontig8bittile; - else - put = putRGBcontig8bittile; - } else - put = putRGBcontig8bitMaptile; - break; - case 16: - put = putRGBcontig16bittile; - if (!img->Map) { - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - put = putRGBAAcontig16bittile; - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - put = putRGBUAcontig16bittile; - } - break; - } - break; - case PHOTOMETRIC_SEPARATED: - if (img->bitspersample == 8) { - if (!img->Map) - put = putRGBcontig8bitCMYKtile; - else - put = putRGBcontig8bitCMYKMaptile; - } - break; - case PHOTOMETRIC_PALETTE: - switch (img->bitspersample) { - case 8: put = put8bitcmaptile; break; - case 4: put = put4bitcmaptile; break; - case 2: put = put2bitcmaptile; break; - case 1: put = put1bitcmaptile; break; - } - break; - case PHOTOMETRIC_MINISWHITE: - case PHOTOMETRIC_MINISBLACK: - switch (img->bitspersample) { - case 16: put = put16bitbwtile; break; - case 8: put = putgreytile; break; - case 4: put = put4bitbwtile; break; - case 2: put = put2bitbwtile; break; - case 1: put = put1bitbwtile; break; - } - break; - case PHOTOMETRIC_YCBCR: - if (img->bitspersample == 8) - put = initYCbCrConversion(tif, img); - break; - } - } - return ((img->put.contig = put) != 0); -} - -/* - * Select the appropriate conversion routine for unpacked data. - * - * NB: we assume that unpacked single channel data is directed - * to the "packed routines. - */ -static int -pickTileSeparateCase(TIFF* tif, TIFFRGBAImage* img) -{ - tileSeparateRoutine put = 0; - - if (buildMap(tif, img)) { - switch (img->photometric) { - case PHOTOMETRIC_RGB: - switch (img->bitspersample) { - case 8: - if (!img->Map) { - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - put = putRGBAAseparate8bittile; - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - put = putRGBUAseparate8bittile; - else - put = putRGBseparate8bittile; - } else - put = putRGBseparate8bitMaptile; - break; - case 16: - put = putRGBseparate16bittile; - if (!img->Map) { - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - put = putRGBAAseparate16bittile; - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - put = putRGBUAseparate16bittile; - } - break; - } - break; - } - } - return ((img->put.separate = put) != 0); -} - -/* - * Read a whole strip off data from the file, and convert to RGBA form. - * If this is the last strip, then it will only contain the portion of - * the strip that is actually within the image space. The result is - * organized in bottom to top form. - */ - - -int -TIFFReadRGBAStrip(TIFF* tif, uint32 row, uint32 * raster ) - -{ - char emsg[1024]; - TIFFRGBAImage img; - int ok; - uint32 rowsperstrip, rows_to_read; - - if( TIFFIsTiled( tif ) ) - { - TIFFError(TIFFFileName(tif), - "Can't use TIFFReadRGBAStrip() with tiled file."); - return (0); - } - - TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); - if( (row % rowsperstrip) != 0 ) - { - TIFFError(TIFFFileName(tif), - "Row passed to TIFFReadRGBAStrip() must be first in a strip."); - return (0); - } - - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - - img.row_offset = row; - img.col_offset = 0; - - if( row + rowsperstrip > img.height ) - rows_to_read = img.height - row; - else - rows_to_read = rowsperstrip; - - ok = TIFFRGBAImageGet(&img, raster, img.width, rows_to_read ); - - TIFFRGBAImageEnd(tif, &img); - } else { - TIFFError(TIFFFileName(tif), emsg); - ok = 0; - } - - return (ok); -} - -/* - * Read a whole tile off data from the file, and convert to RGBA form. - * The returned RGBA data is organized from bottom to top of tile, - * and may include zeroed areas if the tile extends off the image. - */ - -int -TIFFReadRGBATile(TIFF* tif, uint32 col, uint32 row, uint32 * raster) - -{ - char emsg[1024]; - TIFFRGBAImage img; - int ok; - uint32 tile_xsize, tile_ysize; - uint32 read_xsize, read_ysize; - uint32 i_row; - - /* - * Verify that our request is legal - on a tile file, and on a - * tile boundary. - */ - - if( !TIFFIsTiled( tif ) ) - { - TIFFError(TIFFFileName(tif), - "Can't use TIFFReadRGBATile() with stripped file."); - return (0); - } - - TIFFGetFieldDefaulted(tif, TIFFTAG_TILEWIDTH, &tile_xsize); - TIFFGetFieldDefaulted(tif, TIFFTAG_TILELENGTH, &tile_ysize); - if( (col % tile_xsize) != 0 || (row % tile_ysize) != 0 ) - { - TIFFError(TIFFFileName(tif), - "Row/col passed to TIFFReadRGBATile() must be top" - "left corner of a tile."); - return (0); - } - - /* - * Setup the RGBA reader. - */ - - if ( !TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - TIFFError(TIFFFileName(tif), emsg); - return( 0 ); - } - - /* - * The TIFFRGBAImageGet() function doesn't allow us to get off the - * edge of the image, even to fill an otherwise valid tile. So we - * figure out how much we can read, and fix up the tile buffer to - * a full tile configuration afterwards. - */ - - if( row + tile_ysize > img.height ) - read_ysize = img.height - row; - else - read_ysize = tile_ysize; - - if( col + tile_xsize > img.width ) - read_xsize = img.width - col; - else - read_xsize = tile_xsize; - - /* - * Read the chunk of imagery. - */ - - img.row_offset = row; - img.col_offset = col; - - ok = TIFFRGBAImageGet(&img, raster, read_xsize, read_ysize ); - - TIFFRGBAImageEnd(tif, &img); - - /* - * If our read was incomplete we will need to fix up the tile by - * shifting the data around as if a full tile of data is being returned. - * - * This is all the more complicated because the image is organized in - * bottom to top format. - */ - - if( read_xsize == tile_xsize && read_ysize == tile_ysize ) - return( ok ); - - for( i_row = 0; i_row < read_ysize; i_row++ ) - { - memmove( raster + (tile_ysize - i_row - 1) * tile_xsize, - raster + (read_ysize - i_row - 1) * read_xsize, - read_xsize * sizeof(uint32) ); - _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize+read_xsize, - 0, sizeof(uint32) * (tile_xsize - read_xsize) ); - } - - for( i_row = read_ysize; i_row < tile_ysize; i_row++ ) - { - _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize, - 0, sizeof(uint32) * tile_xsize ); - } - - return (ok); -} diff --git a/src/libs/pdflib/libs/tiff/tif_luv.c b/src/libs/pdflib/libs/tiff/tif_luv.c deleted file mode 100644 index 7e95a3d95b..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_luv.c +++ /dev/null @@ -1,1627 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_luv.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* - * Copyright (c) 1997 Greg Ward Larson - * Copyright (c) 1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler, Greg Larson and Silicon Graphics may not be used in any - * advertising or publicity relating to the software without the specific, - * prior written permission of Sam Leffler, Greg Larson and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER, GREG LARSON OR SILICON GRAPHICS BE LIABLE - * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef LOGLUV_SUPPORT - -/* - * TIFF Library. - * LogLuv compression support for high dynamic range images. - * - * Contributed by Greg Larson. - * - * LogLuv image support uses the TIFF library to store 16 or 10-bit - * log luminance values with 8 bits each of u and v or a 14-bit index. - * - * The codec can take as input and produce as output 32-bit IEEE float values - * as well as 16-bit integer values. A 16-bit luminance is interpreted - * as a sign bit followed by a 15-bit integer that is converted - * to and from a linear magnitude using the transformation: - * - * L = 2^( (Le+.5)/256 - 64 ) # real from 15-bit - * - * Le = floor( 256*(log2(L) + 64) ) # 15-bit from real - * - * The actual conversion to world luminance units in candelas per sq. meter - * requires an additional multiplier, which is stored in the TIFFTAG_STONITS. - * This value is usually set such that a reasonable exposure comes from - * clamping decoded luminances above 1 to 1 in the displayed image. - * - * The 16-bit values for u and v may be converted to real values by dividing - * each by 32768. (This allows for negative values, which aren't useful as - * far as we know, but are left in case of future improvements in human - * color vision.) - * - * Conversion from (u,v), which is actually the CIE (u',v') system for - * you color scientists, is accomplished by the following transformation: - * - * u = 4*x / (-2*x + 12*y + 3) - * v = 9*y / (-2*x + 12*y + 3) - * - * x = 9*u / (6*u - 16*v + 12) - * y = 4*v / (6*u - 16*v + 12) - * - * This process is greatly simplified by passing 32-bit IEEE floats - * for each of three CIE XYZ coordinates. The codec then takes care - * of conversion to and from LogLuv, though the application is still - * responsible for interpreting the TIFFTAG_STONITS calibration factor. - * - * By definition, a CIE XYZ vector of [1 1 1] corresponds to a neutral white - * point of (x,y)=(1/3,1/3). However, most color systems assume some other - * white point, such as D65, and an absolute color conversion to XYZ then - * to another color space with a different white point may introduce an - * unwanted color cast to the image. It is often desirable, therefore, to - * perform a white point conversion that maps the input white to [1 1 1] - * in XYZ, then record the original white point using the TIFFTAG_WHITEPOINT - * tag value. A decoder that demands absolute color calibration may use - * this white point tag to get back the original colors, but usually it - * will be ignored and the new white point will be used instead that - * matches the output color space. - * - * Pixel information is compressed into one of two basic encodings, depending - * on the setting of the compression tag, which is one of COMPRESSION_SGILOG - * or COMPRESSION_SGILOG24. For COMPRESSION_SGILOG, greyscale data is - * stored as: - * - * 1 15 - * |-+---------------| - * - * COMPRESSION_SGILOG color data is stored as: - * - * 1 15 8 8 - * |-+---------------|--------+--------| - * S Le ue ve - * - * For the 24-bit COMPRESSION_SGILOG24 color format, the data is stored as: - * - * 10 14 - * |----------|--------------| - * Le' Ce - * - * There is no sign bit in the 24-bit case, and the (u,v) chromaticity is - * encoded as an index for optimal color resolution. The 10 log bits are - * defined by the following conversions: - * - * L = 2^((Le'+.5)/64 - 12) # real from 10-bit - * - * Le' = floor( 64*(log2(L) + 12) ) # 10-bit from real - * - * The 10 bits of the smaller format may be converted into the 15 bits of - * the larger format by multiplying by 4 and adding 13314. Obviously, - * a smaller range of magnitudes is covered (about 5 orders of magnitude - * instead of 38), and the lack of a sign bit means that negative luminances - * are not allowed. (Well, they aren't allowed in the real world, either, - * but they are useful for certain types of image processing.) - * - * The desired user format is controlled by the setting the internal - * pseudo tag TIFFTAG_SGILOGDATAFMT to one of: - * SGILOGDATAFMT_FLOAT = IEEE 32-bit float XYZ values - * SGILOGDATAFMT_16BIT = 16-bit integer encodings of logL, u and v - * Raw data i/o is also possible using: - * SGILOGDATAFMT_RAW = 32-bit unsigned integer with encoded pixel - * In addition, the following decoding is provided for ease of display: - * SGILOGDATAFMT_8BIT = 8-bit default RGB gamma-corrected values - * - * For grayscale images, we provide the following data formats: - * SGILOGDATAFMT_FLOAT = IEEE 32-bit float Y values - * SGILOGDATAFMT_16BIT = 16-bit integer w/ encoded luminance - * SGILOGDATAFMT_8BIT = 8-bit gray monitor values - * - * Note that the COMPRESSION_SGILOG applies a simple run-length encoding - * scheme by separating the logL, u and v bytes for each row and applying - * a PackBits type of compression. Since the 24-bit encoding is not - * adaptive, the 32-bit color format takes less space in many cases. - * - * Further control is provided over the conversion from higher-resolution - * formats to final encoded values through the pseudo tag - * TIFFTAG_SGILOGENCODE: - * SGILOGENCODE_NODITHER = do not dither encoded values - * SGILOGENCODE_RANDITHER = apply random dithering during encoding - * - * The default value of this tag is SGILOGENCODE_NODITHER for - * COMPRESSION_SGILOG to maximize run-length encoding and - * SGILOGENCODE_RANDITHER for COMPRESSION_SGILOG24 to turn - * quantization errors into noise. - */ - -#include -#include -#include -#include - -/* - * State block for each open TIFF - * file using LogLuv compression/decompression. - */ -typedef struct logLuvState LogLuvState; - -struct logLuvState { - int user_datafmt; /* user data format */ - int encode_meth; /* encoding method */ - int pixel_size; /* bytes per pixel */ - - tidata_t* tbuf; /* translation buffer */ - int tbuflen; /* buffer length */ - void (*tfunc)(LogLuvState*, tidata_t, int); - - TIFFVSetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ -}; - -#define DecoderState(tif) ((LogLuvState*) (tif)->tif_data) -#ifdef PDFLIB_TIFFWRITE_SUPPORT -#define EncoderState(tif) ((LogLuvState*) (tif)->tif_data) -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#define N(a) (sizeof(a)/sizeof(a[0])) -#define SGILOGDATAFMT_UNKNOWN -1 - -#define MINRUN 4 /* minimum run length */ - -/* - * Decode a string of 16-bit gray pixels. - */ -static int -LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) -{ - LogLuvState* sp = DecoderState(tif); - int shft, i, npixels; - tif_char* bp; - int16* tp; - int16 b; - int cc, rc; - - assert(s == 0); - assert(sp != NULL); - - npixels = occ / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_16BIT) - tp = (int16*) op; - else { - assert(sp->tbuflen >= npixels); - tp = (int16*) sp->tbuf; - } - _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); - - bp = (tif_char*) tif->tif_rawcp; - cc = tif->tif_rawcc; - /* get each byte string */ - for (shft = 2*8; (shft -= 8) >= 0; ) { - for (i = 0; i < npixels && cc > 0; ) - if (*bp >= 128) { /* run */ - rc = *bp++ + (2-128); - b = (int16)*bp++ << shft; - cc -= 2; - while (rc--) - tp[i++] |= b; - } else { /* non-run */ - rc = *bp++; /* nul is noop */ - while (--cc && rc--) - tp[i++] |= (int16)*bp++ << shft; - } - if (i != npixels) { - TIFFError(tif->tif_name, - "LogL16Decode: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - return (0); - } - } - (*sp->tfunc)(sp, op, npixels); - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - return (1); -} - -/* - * Decode a string of 24-bit pixels. - */ -static int -LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) -{ - LogLuvState* sp = DecoderState(tif); - int cc, i, npixels; - tif_char* bp; - uint32* tp; - - assert(s == 0); - assert(sp != NULL); - - npixels = occ / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_RAW) - tp = (uint32 *)op; - else { - assert(sp->tbuflen >= npixels); - tp = (uint32 *) sp->tbuf; - } - /* copy to array of uint32 */ - bp = (tif_char*) tif->tif_rawcp; - cc = tif->tif_rawcc; - for (i = 0; i < npixels && cc > 0; i++) { - tp[i] = bp[0] << 16 | bp[1] << 8 | bp[2]; - bp += 3; - cc -= 3; - } - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - if (i != npixels) { - TIFFError(tif->tif_name, - "LogLuvDecode24: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); - return (0); - } - (*sp->tfunc)(sp, op, npixels); - return (1); -} - -/* - * Decode a string of 32-bit pixels. - */ -static int -LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) -{ - LogLuvState* sp; - int shft, i, npixels; - tif_char* bp; - uint32* tp; - uint32 b; - int cc, rc; - - assert(s == 0); - sp = DecoderState(tif); - assert(sp != NULL); - - npixels = occ / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_RAW) - tp = (uint32*) op; - else { - assert(sp->tbuflen >= npixels); - tp = (uint32*) sp->tbuf; - } - _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); - - bp = (tif_char*) tif->tif_rawcp; - cc = tif->tif_rawcc; - /* get each byte string */ - for (shft = 4*8; (shft -= 8) >= 0; ) { - for (i = 0; i < npixels && cc > 0; ) - if (*bp >= 128) { /* run */ - rc = *bp++ + (2-128); - b = (uint32)*bp++ << shft; - cc -= 2; - while (rc--) - tp[i++] |= b; - } else { /* non-run */ - rc = *bp++; /* nul is noop */ - while (--cc && rc--) - tp[i++] |= (uint32)*bp++ << shft; - } - if (i != npixels) { - TIFFError(tif->tif_name, - "LogLuvDecode32: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - return (0); - } - } - (*sp->tfunc)(sp, op, npixels); - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - return (1); -} - -/* - * Decode a strip of pixels. We break it into rows to - * maintain synchrony with the encode algorithm, which - * is row by row. - */ -static int -LogLuvDecodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - tsize_t rowlen = TIFFScanlineSize(tif); - - assert(cc%rowlen == 0); - while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) - bp += rowlen, cc -= rowlen; - return (cc == 0); -} - -/* - * Decode a tile of pixels. We break it into rows to - * maintain synchrony with the encode algorithm, which - * is row by row. - */ -static int -LogLuvDecodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - tsize_t rowlen = TIFFTileRowSize(tif); - - assert(cc%rowlen == 0); - while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) - bp += rowlen, cc -= rowlen; - return (cc == 0); -} - -/* - * Encode a row of 16-bit pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - LogLuvState* sp = EncoderState(tif); - int shft, i, j, npixels; - tidata_t op; - int16* tp; - int16 b; - int occ, rc=0, mask, beg; - - assert(s == 0); - assert(sp != NULL); - npixels = cc / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_16BIT) - tp = (int16*) bp; - else { - tp = (int16*) sp->tbuf; - assert(sp->tbuflen >= npixels); - (*sp->tfunc)(sp, bp, npixels); - } - /* compress each byte string */ - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - for (shft = 2*8; (shft -= 8) >= 0; ) - for (i = 0; i < npixels; i += rc) { - if (occ < 4) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - } - mask = 0xff << shft; /* find next run */ - for (beg = i; beg < npixels; beg += rc) { - b = tp[beg] & mask; - rc = 1; - while (rc < 127+2 && beg+rc < npixels && - (tp[beg+rc] & mask) == b) - rc++; - if (rc >= MINRUN) - break; /* long enough */ - } - if (beg-i > 1 && beg-i < MINRUN) { - b = tp[i] & mask; /* check short run */ - j = i+1; - while ((tp[j++] & mask) == b) - if (j == beg) { - *op++ = 128-2+j-i; - *op++ = b >> shft; - occ -= 2; - i = beg; - break; - } - } - while (i < beg) { /* write out non-run */ - if ((j = beg-i) > 127) j = 127; - if (occ < j+3) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - - tif->tif_rawcc; - } - *op++ = j; occ--; - while (j--) { - *op++ = tp[i++] >> shft & 0xff; - occ--; - } - } - if (rc >= MINRUN) { /* write out run */ - *op++ = 128-2+rc; - *op++ = tp[beg] >> shft & 0xff; - occ -= 2; - } else - rc = 0; - } - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - - return (0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a row of 24-bit pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - LogLuvState* sp = EncoderState(tif); - int i, npixels, occ; - tidata_t op; - uint32* tp; - - assert(s == 0); - assert(sp != NULL); - npixels = cc / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_RAW) - tp = (uint32*) bp; - else { - tp = (uint32*) sp->tbuf; - assert(sp->tbuflen >= npixels); - (*sp->tfunc)(sp, bp, npixels); - } - /* write out encoded pixels */ - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - for (i = npixels; i--; ) { - if (occ < 3) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - } - *op++ = (tidataval_t)(*tp >> 16); - *op++ = (tidataval_t)(*tp >> 8 & 0xff); - *op++ = (tidataval_t)(*tp++ & 0xff); - occ -= 3; - } - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - - return (0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a row of 32-bit pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - LogLuvState* sp = EncoderState(tif); - int shft, i, j, npixels; - tidata_t op; - uint32* tp; - uint32 b; - int occ, rc=0, mask, beg; - - assert(s == 0); - assert(sp != NULL); - - npixels = cc / sp->pixel_size; - - if (sp->user_datafmt == SGILOGDATAFMT_RAW) - tp = (uint32*) bp; - else { - tp = (uint32*) sp->tbuf; - assert(sp->tbuflen >= npixels); - (*sp->tfunc)(sp, bp, npixels); - } - /* compress each byte string */ - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - for (shft = 4*8; (shft -= 8) >= 0; ) - for (i = 0; i < npixels; i += rc) { - if (occ < 4) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; - } - mask = 0xff << shft; /* find next run */ - for (beg = i; beg < npixels; beg += rc) { - b = tp[beg] & mask; - rc = 1; - while (rc < 127+2 && beg+rc < npixels && - (tp[beg+rc] & mask) == b) - rc++; - if (rc >= MINRUN) - break; /* long enough */ - } - if (beg-i > 1 && beg-i < MINRUN) { - b = tp[i] & mask; /* check short run */ - j = i+1; - while ((tp[j++] & mask) == b) - if (j == beg) { - *op++ =(tidataval_t)(128-2+j-i); - *op++ =(tidataval_t)(b >> shft); - occ -= 2; - i = beg; - break; - } - } - while (i < beg) { /* write out non-run */ - if ((j = beg-i) > 127) j = 127; - if (occ < j+3) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - - tif->tif_rawcc; - } - *op++ = j; occ--; - while (j--) { - *op++ = (tidataval_t)(tp[i++] >> shft - & 0xff); - occ--; - } - } - if (rc >= MINRUN) { /* write out run */ - *op++ = 128-2+rc; - *op++ = (tidataval_t)(tp[beg] >> shft & 0xff); - occ -= 2; - } else - rc = 0; - } - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - - return (0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a strip of pixels. We break it into rows to - * avoid encoding runs across row boundaries. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogLuvEncodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - tsize_t rowlen = TIFFScanlineSize(tif); - - assert(cc%rowlen == 0); - while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 0) - bp += rowlen, cc -= rowlen; - return (cc == 0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a tile of pixels. We break it into rows to - * avoid encoding runs across row boundaries. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogLuvEncodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - tsize_t rowlen = TIFFTileRowSize(tif); - - assert(cc%rowlen == 0); - while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 0) - bp += rowlen, cc -= rowlen; - return (cc == 0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode/Decode functions for converting to and from user formats. - */ - -#include "uvcode.h" - -#ifndef UVSCALE -#define U_NEU 0.210526316 -#define V_NEU 0.473684211 -#define UVSCALE 410. -#endif - -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#define log2(x) ((1./M_LN2)*log(x)) -#define exp2(x) exp(M_LN2*(x)) - -#define itrunc(x,m) ((m)==SGILOGENCODE_NODITHER ? \ - (int)(x) : \ - (int)((x) + rand()*(1./RAND_MAX) - .5)) - -#if !LOGLUV_PUBLIC -static -#endif -double -LogL16toY(int p16) /* compute luminance from 16-bit LogL */ -{ - int Le = p16 & 0x7fff; - double Y; - - if (!Le) - return (0.); - Y = exp(M_LN2/256.*(Le+.5) - M_LN2*64.); - return (!(p16 & 0x8000) ? Y : -Y); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -#if !LOGLUV_PUBLIC -static -#endif -int -LogL16fromY(double Y, int em) /* get 16-bit LogL from Y */ -{ - if (Y >= 1.8371976e19) - return (0x7fff); - if (Y <= -1.8371976e19) - return (0xffff); - if (Y > 5.4136769e-20) - return itrunc(256.*(log2(Y) + 64.), em); - if (Y < -5.4136769e-20) - return (~0x7fff | itrunc(256.*(log2(-Y) + 64.), em)); - return (0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -L16toY(LogLuvState* sp, tidata_t op, int n) -{ - int16* l16 = (int16*) sp->tbuf; - float* yp = (float*) op; - - while (n-- > 0) - *yp++ = (float)LogL16toY(*l16++); -} - -static void -L16toGry(LogLuvState* sp, tidata_t op, int n) -{ - int16* l16 = (int16*) sp->tbuf; - uint8* gp = (uint8*) op; - - while (n-- > 0) { - double Y = LogL16toY(*l16++); - *gp++ = (Y <= 0.) ? 0 : (Y >= 1.) ? 255 : (int)(256.*sqrt(Y)); - } -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -L16fromY(LogLuvState* sp, tidata_t op, int n) -{ - int16* l16 = (int16*) sp->tbuf; - float* yp = (float*) op; - - while (n-- > 0) - *l16++ = LogL16fromY(*yp++, sp->encode_meth); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#if !LOGLUV_PUBLIC -static -#endif -void -XYZtoRGB24(float xyz[3], uint8 rgb[3]) -{ - double r, g, b; - /* assume CCIR-709 primaries */ - r = 2.690*xyz[0] + -1.276*xyz[1] + -0.414*xyz[2]; - g = -1.022*xyz[0] + 1.978*xyz[1] + 0.044*xyz[2]; - b = 0.061*xyz[0] + -0.224*xyz[1] + 1.163*xyz[2]; - /* assume 2.0 gamma for speed */ - /* could use integer sqrt approx., but this is probably faster */ - rgb[0] = (r <= 0.) ? 0 : (r >= 1.) ? 255 : (int)(256.*sqrt(r)); - rgb[1] = (g <= 0.) ? 0 : (g >= 1.) ? 255 : (int)(256.*sqrt(g)); - rgb[2] = (b <= 0.) ? 0 : (b >= 1.) ? 255 : (int)(256.*sqrt(b)); -} - -#if !LOGLUV_PUBLIC -static -#endif -double -LogL10toY(int p10) /* compute luminance from 10-bit LogL */ -{ - if (p10 == 0) - return (0.); - return (exp(M_LN2/64.*(p10+.5) - M_LN2*12.)); -} - -#if !LOGLUV_PUBLIC -static -#endif -int -LogL10fromY(double Y, int em) /* get 10-bit LogL from Y */ -{ - if (Y >= 15.742) - return (0x3ff); - else if (Y <= .00024283) - return (0); - else - return itrunc(64.*(log2(Y) + 12.), em); -} - -#define NANGLES 100 -#define uv2ang(u, v) ( (NANGLES*.499999999/M_PI) \ - * atan2((v)-V_NEU,(u)-U_NEU) + .5*NANGLES ) - -static int -oog_encode(double u, double v) /* encode out-of-gamut chroma */ -{ - static int oog_table[NANGLES]; - static int initialized = 0; - register int i; - - if (!initialized) { /* set up perimeter table */ - double eps[NANGLES], ua, va, ang, epsa; - int ui, vi, ustep; - for (i = NANGLES; i--; ) - eps[i] = 2.; - for (vi = UV_NVS; vi--; ) { - va = UV_VSTART + (vi+.5)*UV_SQSIZ; - ustep = uv_row[vi].nus-1; - if (vi == UV_NVS-1 || vi == 0 || ustep <= 0) - ustep = 1; - for (ui = uv_row[vi].nus-1; ui >= 0; ui -= ustep) { - ua = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ; - ang = uv2ang(ua, va); - i = (int) ang; - epsa = fabs(ang - (i+.5)); - if (epsa < eps[i]) { - oog_table[i] = uv_row[vi].ncum + ui; - eps[i] = epsa; - } - } - } - for (i = NANGLES; i--; ) /* fill any holes */ - if (eps[i] > 1.5) { - int i1, i2; - for (i1 = 1; i1 < NANGLES/2; i1++) - if (eps[(i+i1)%NANGLES] < 1.5) - break; - for (i2 = 1; i2 < NANGLES/2; i2++) - if (eps[(i+NANGLES-i2)%NANGLES] < 1.5) - break; - if (i1 < i2) - oog_table[i] = - oog_table[(i+i1)%NANGLES]; - else - oog_table[i] = - oog_table[(i+NANGLES-i2)%NANGLES]; - } - initialized = 1; - } - i = (int) uv2ang(u, v); /* look up hue angle */ - return (oog_table[i]); -} - -#undef uv2ang -#undef NANGLES - -#if !LOGLUV_PUBLIC -static -#endif -int -uv_encode(double u, double v, int em) /* encode (u',v') coordinates */ -{ - register int vi, ui; - - if (v < UV_VSTART) - return oog_encode(u, v); - vi = itrunc((v - UV_VSTART)*(1./UV_SQSIZ), em); - if (vi >= UV_NVS) - return oog_encode(u, v); - if (u < uv_row[vi].ustart) - return oog_encode(u, v); - ui = itrunc((u - uv_row[vi].ustart)*(1./UV_SQSIZ), em); - if (ui >= uv_row[vi].nus) - return oog_encode(u, v); - - return (uv_row[vi].ncum + ui); -} - -#if !LOGLUV_PUBLIC -static -#endif -int -uv_decode(double *up, double *vp, int c) /* decode (u',v') index */ -{ - int upper, lower; - register int ui, vi; - - if (c < 0 || c >= UV_NDIVS) - return (-1); - lower = 0; /* binary search */ - upper = UV_NVS; - while (upper - lower > 1) { - vi = (lower + upper) >> 1; - ui = c - uv_row[vi].ncum; - if (ui > 0) - lower = vi; - else if (ui < 0) - upper = vi; - else { - lower = vi; - break; - } - } - vi = lower; - ui = c - uv_row[vi].ncum; - *up = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ; - *vp = UV_VSTART + (vi+.5)*UV_SQSIZ; - return (0); -} - -#if !LOGLUV_PUBLIC -static -#endif -void -LogLuv24toXYZ(uint32 p, float XYZ[3]) -{ - int Ce; - double L, u, v, s, x, y; - /* decode luminance */ - L = LogL10toY(p>>14 & 0x3ff); - if (L <= 0.) { - XYZ[0] = XYZ[1] = XYZ[2] = 0.; - return; - } - /* decode color */ - Ce = p & 0x3fff; - if (uv_decode(&u, &v, Ce) < 0) { - u = U_NEU; v = V_NEU; - } - s = 1./(6.*u - 16.*v + 12.); - x = 9.*u * s; - y = 4.*v * s; - /* convert to XYZ */ - XYZ[0] = (float)(x/y * L); - XYZ[1] = (float)L; - XYZ[2] = (float)((1.-x-y)/y * L); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -#if !LOGLUV_PUBLIC -static -#endif -uint32 -LogLuv24fromXYZ(float XYZ[3], int em) -{ - int Le, Ce; - double u, v, s; - /* encode luminance */ - Le = LogL10fromY(XYZ[1], em); - /* encode color */ - s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2]; - if (!Le || s <= 0.) { - u = U_NEU; - v = V_NEU; - } else { - u = 4.*XYZ[0] / s; - v = 9.*XYZ[1] / s; - } - Ce = uv_encode(u, v, em); - if (Ce < 0) /* never happens */ - Ce = uv_encode(U_NEU, V_NEU, SGILOGENCODE_NODITHER); - /* combine encodings */ - return (Le << 14 | Ce); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -Luv24toXYZ(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - float* xyz = (float*) op; - - while (n-- > 0) { - LogLuv24toXYZ(*luv, xyz); - xyz += 3; - luv++; - } -} - -static void -Luv24toLuv48(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - int16* luv3 = (int16*) op; - - while (n-- > 0) { - double u, v; - - *luv3++ = (int16)((*luv >> 12 & 0xffd) + 13314); - if (uv_decode(&u, &v, *luv&0x3fff) < 0) { - u = U_NEU; - v = V_NEU; - } - *luv3++ = (int16)(u * (1L<<15)); - *luv3++ = (int16)(v * (1L<<15)); - luv++; - } -} - -static void -Luv24toRGB(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - uint8* rgb = (uint8*) op; - - while (n-- > 0) { - float xyz[3]; - - LogLuv24toXYZ(*luv++, xyz); - XYZtoRGB24(xyz, rgb); - rgb += 3; - } -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Luv24fromXYZ(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - float* xyz = (float*) op; - - while (n-- > 0) { - *luv++ = LogLuv24fromXYZ(xyz, sp->encode_meth); - xyz += 3; - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Luv24fromLuv48(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - int16* luv3 = (int16*) op; - - while (n-- > 0) { - int Le, Ce; - - if (luv3[0] <= 0) - Le = 0; - else if (luv3[0] >= (1<<12)+3314) - Le = (1<<10) - 1; - else if (sp->encode_meth == SGILOGENCODE_NODITHER) - Le = (luv3[0]-3314) >> 2; - else - Le = itrunc(.25*(luv3[0]-3314.), sp->encode_meth); - - Ce = uv_encode((luv[1]+.5)/(1<<15), (luv[2]+.5)/(1<<15), - sp->encode_meth); - if (Ce < 0) /* never happens */ - Ce = uv_encode(U_NEU, V_NEU, SGILOGENCODE_NODITHER); - *luv++ = (uint32)Le << 14 | Ce; - luv3 += 3; - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#if !LOGLUV_PUBLIC -static -#endif -void -LogLuv32toXYZ(uint32 p, float XYZ[3]) -{ - double L, u, v, s, x, y; - /* decode luminance */ - L = LogL16toY((int)p >> 16); - if (L <= 0.) { - XYZ[0] = XYZ[1] = XYZ[2] = 0.; - return; - } - /* decode color */ - u = 1./UVSCALE * ((p>>8 & 0xff) + .5); - v = 1./UVSCALE * ((p & 0xff) + .5); - s = 1./(6.*u - 16.*v + 12.); - x = 9.*u * s; - y = 4.*v * s; - /* convert to XYZ */ - XYZ[0] = (float)(x/y * L); - XYZ[1] = (float)L; - XYZ[2] = (float)((1.-x-y)/y * L); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -#if !LOGLUV_PUBLIC -static -#endif -uint32 -LogLuv32fromXYZ(float XYZ[3], int em) -{ - unsigned int Le, ue, ve; - double u, v, s; - /* encode luminance */ - Le = (unsigned int)LogL16fromY(XYZ[1], em); - /* encode color */ - s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2]; - if (!Le || s <= 0.) { - u = U_NEU; - v = V_NEU; - } else { - u = 4.*XYZ[0] / s; - v = 9.*XYZ[1] / s; - } - if (u <= 0.) ue = 0; - else ue = itrunc(UVSCALE*u, em); - if (ue > 255) ue = 255; - if (v <= 0.) ve = 0; - else ve = itrunc(UVSCALE*v, em); - if (ve > 255) ve = 255; - /* combine encodings */ - return (Le << 16 | ue << 8 | ve); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -Luv32toXYZ(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - float* xyz = (float*) op; - - while (n-- > 0) { - LogLuv32toXYZ(*luv++, xyz); - xyz += 3; - } -} - -static void -Luv32toLuv48(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - int16* luv3 = (int16*) op; - - while (n-- > 0) { - double u, v; - - *luv3++ = (int16)(*luv >> 16); - u = 1./UVSCALE * ((*luv>>8 & 0xff) + .5); - v = 1./UVSCALE * ((*luv & 0xff) + .5); - *luv3++ = (int16)(u * (1L<<15)); - *luv3++ = (int16)(v * (1L<<15)); - luv++; - } -} - -static void -Luv32toRGB(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - uint8* rgb = (uint8*) op; - - while (n-- > 0) { - float xyz[3]; - - LogLuv32toXYZ(*luv++, xyz); - XYZtoRGB24(xyz, rgb); - rgb += 3; - } -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Luv32fromXYZ(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - float* xyz = (float*) op; - - while (n-- > 0) { - *luv++ = LogLuv32fromXYZ(xyz, sp->encode_meth); - xyz += 3; - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -Luv32fromLuv48(LogLuvState* sp, tidata_t op, int n) -{ - uint32* luv = (uint32*) sp->tbuf; - int16* luv3 = (int16*) op; - - if (sp->encode_meth == SGILOGENCODE_NODITHER) { - while (n-- > 0) { - *luv++ = (uint32)luv3[0] << 16 | - (luv3[1]*(uint32)(UVSCALE+.5) >> 7 & 0xff00) | - (luv3[2]*(uint32)(UVSCALE+.5) >> 15 & 0xff); - luv3 += 3; - } - return; - } - while (n-- > 0) { - *luv++ = (uint32)luv3[0] << 16 | - (itrunc(luv3[1]*(UVSCALE/(1<<15)), sp->encode_meth) << 8 & 0xff00) | - (itrunc(luv3[2]*(UVSCALE/(1<<15)), sp->encode_meth) & 0xff); - luv3 += 3; - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -_logLuvNop(LogLuvState* sp, tidata_t op, int n) -{ - (void) sp; (void) op; (void) n; -} - -static int -LogL16GuessDataFmt(TIFFDirectory *td) -{ -#define PACK(s,b,f) (((b)<<6)|((s)<<3)|(f)) - switch (PACK(td->td_samplesperpixel, td->td_bitspersample, - td->td_sampleformat)) { - case PACK(1, 32, SAMPLEFORMAT_IEEEFP): - return (SGILOGDATAFMT_FLOAT); - case PACK(1, 16, SAMPLEFORMAT_VOID): - case PACK(1, 16, SAMPLEFORMAT_INT): - case PACK(1, 16, SAMPLEFORMAT_UINT): - return (SGILOGDATAFMT_16BIT); - case PACK(1, 8, SAMPLEFORMAT_VOID): - case PACK(1, 8, SAMPLEFORMAT_UINT): - return (SGILOGDATAFMT_8BIT); - } -#undef PACK - return (SGILOGDATAFMT_UNKNOWN); -} - -static int -LogL16InitState(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - LogLuvState* sp = DecoderState(tif); - static const char module[] = "LogL16InitState"; - - assert(sp != NULL); - assert(td->td_photometric == PHOTOMETRIC_LOGL); - - /* for some reason, we can't do this in TIFFInitLogL16 */ - if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN) - sp->user_datafmt = LogL16GuessDataFmt(td); - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->pixel_size = sizeof (float); - break; - case SGILOGDATAFMT_16BIT: - sp->pixel_size = sizeof (int16); - break; - case SGILOGDATAFMT_8BIT: - sp->pixel_size = sizeof (uint8); - break; - default: - TIFFError(tif->tif_name, - "No support for converting user data format to LogL"); - return (0); - } - sp->tbuflen = td->td_imagewidth * td->td_rowsperstrip; - sp->tbuf = (tidata_t*) _TIFFmalloc(tif, sp->tbuflen * sizeof (int16)); - if (sp->tbuf == NULL) { - TIFFError(module, "%s: No space for SGILog translation buffer", - tif->tif_name); - return (0); - } - return (1); -} - -static int -LogLuvGuessDataFmt(TIFFDirectory *td) -{ - int guess; - - /* - * If the user didn't tell us their datafmt, - * take our best guess from the bitspersample. - */ -#define PACK(a,b) (((a)<<3)|(b)) - switch (PACK(td->td_bitspersample, td->td_sampleformat)) { - case PACK(32, SAMPLEFORMAT_IEEEFP): - guess = SGILOGDATAFMT_FLOAT; - break; - case PACK(32, SAMPLEFORMAT_VOID): - case PACK(32, SAMPLEFORMAT_UINT): - case PACK(32, SAMPLEFORMAT_INT): - guess = SGILOGDATAFMT_RAW; - break; - case PACK(16, SAMPLEFORMAT_VOID): - case PACK(16, SAMPLEFORMAT_INT): - case PACK(16, SAMPLEFORMAT_UINT): - guess = SGILOGDATAFMT_16BIT; - break; - case PACK( 8, SAMPLEFORMAT_VOID): - case PACK( 8, SAMPLEFORMAT_UINT): - guess = SGILOGDATAFMT_8BIT; - break; - default: - guess = SGILOGDATAFMT_UNKNOWN; - break; -#undef PACK - } - /* - * Double-check samples per pixel. - */ - switch (td->td_samplesperpixel) { - case 1: - if (guess != SGILOGDATAFMT_RAW) - guess = SGILOGDATAFMT_UNKNOWN; - break; - case 3: - if (guess == SGILOGDATAFMT_RAW) - guess = SGILOGDATAFMT_UNKNOWN; - break; - default: - guess = SGILOGDATAFMT_UNKNOWN; - break; - } - return (guess); -} - -static int -LogLuvInitState(TIFF* tif) -{ - TIFFDirectory* td = &tif->tif_dir; - LogLuvState* sp = DecoderState(tif); - static const char module[] = "LogLuvInitState"; - - assert(sp != NULL); - assert(td->td_photometric == PHOTOMETRIC_LOGLUV); - - /* for some reason, we can't do this in TIFFInitLogLuv */ - if (td->td_planarconfig != PLANARCONFIG_CONTIG) { - TIFFError(module, - "SGILog compression cannot handle non-contiguous data"); - return (0); - } - if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN) - sp->user_datafmt = LogLuvGuessDataFmt(td); - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->pixel_size = 3*sizeof (float); - break; - case SGILOGDATAFMT_16BIT: - sp->pixel_size = 3*sizeof (int16); - break; - case SGILOGDATAFMT_RAW: - sp->pixel_size = sizeof (uint32); - break; - case SGILOGDATAFMT_8BIT: - sp->pixel_size = 3*sizeof (uint8); - break; - default: - TIFFError(tif->tif_name, - "No support for converting user data format to LogLuv"); - return (0); - } - sp->tbuflen = td->td_imagewidth * td->td_rowsperstrip; - sp->tbuf = (tidata_t*) _TIFFmalloc(tif, sp->tbuflen * sizeof (uint32)); - if (sp->tbuf == NULL) { - TIFFError(module, "%s: No space for SGILog translation buffer", - tif->tif_name); - return (0); - } - return (1); -} - -static int -LogLuvSetupDecode(TIFF* tif) -{ - LogLuvState* sp = DecoderState(tif); - TIFFDirectory* td = &tif->tif_dir; - - tif->tif_postdecode = _TIFFNoPostDecode; - switch (td->td_photometric) { - case PHOTOMETRIC_LOGLUV: - if (!LogLuvInitState(tif)) - break; - if (td->td_compression == COMPRESSION_SGILOG24) { - tif->tif_decoderow = LogLuvDecode24; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv24toXYZ; - break; - case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv24toLuv48; - break; - case SGILOGDATAFMT_8BIT: - sp->tfunc = Luv24toRGB; - break; - } - } else { - tif->tif_decoderow = LogLuvDecode32; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv32toXYZ; - break; - case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv32toLuv48; - break; - case SGILOGDATAFMT_8BIT: - sp->tfunc = Luv32toRGB; - break; - } - } - return (1); - case PHOTOMETRIC_LOGL: - if (!LogL16InitState(tif)) - break; - tif->tif_decoderow = LogL16Decode; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = L16toY; - break; - case SGILOGDATAFMT_8BIT: - sp->tfunc = L16toGry; - break; - } - return (1); - default: - TIFFError(tif->tif_name, - "Inappropriate photometric interpretation %d for SGILog compression; %s", - td->td_photometric, "must be either LogLUV or LogL"); - break; - } - return (0); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -LogLuvSetupEncode(TIFF* tif) -{ - LogLuvState* sp = EncoderState(tif); - TIFFDirectory* td = &tif->tif_dir; - - switch (td->td_photometric) { - case PHOTOMETRIC_LOGLUV: - if (!LogLuvInitState(tif)) - break; - if (td->td_compression == COMPRESSION_SGILOG24) { - tif->tif_encoderow = LogLuvEncode24; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv24fromXYZ; - break; - case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv24fromLuv48; - break; - case SGILOGDATAFMT_RAW: - break; - default: - goto notsupported; - } - } else { - tif->tif_encoderow = LogLuvEncode32; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv32fromXYZ; - break; - case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv32fromLuv48; - break; - case SGILOGDATAFMT_RAW: - break; - default: - goto notsupported; - } - } - break; - case PHOTOMETRIC_LOGL: - if (!LogL16InitState(tif)) - break; - tif->tif_encoderow = LogL16Encode; - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - sp->tfunc = L16fromY; - break; - case SGILOGDATAFMT_16BIT: - break; - default: - goto notsupported; - } - break; - default: - TIFFError(tif->tif_name, - "Inappropriate photometric interpretation %d for SGILog compression; %s", - td->td_photometric, "must be either LogLUV or LogL"); - break; - } - return (1); -notsupported: - TIFFError(tif->tif_name, - "SGILog compression supported only for %s, or raw data", - td->td_photometric == PHOTOMETRIC_LOGL ? "Y, L" : "XYZ, Luv"); - return (0); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -LogLuvClose(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - - /* - * For consistency, we always want to write out the same - * bitspersample and sampleformat for our TIFF file, - * regardless of the data format being used by the application. - * Since this routine is called after tags have been set but - * before they have been recorded in the file, we reset them here. - */ - td->td_samplesperpixel = - (td->td_photometric == PHOTOMETRIC_LOGL) ? 1 : 3; - td->td_bitspersample = 16; - td->td_sampleformat = SAMPLEFORMAT_INT; -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -LogLuvCleanup(TIFF* tif) -{ - LogLuvState* sp = (LogLuvState *)tif->tif_data; - - if (sp) { - if (sp->tbuf) - _TIFFfree(tif, sp->tbuf); - _TIFFfree(tif, sp); - tif->tif_data = NULL; - } -} - -static int -LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - LogLuvState* sp = DecoderState(tif); - int bps, fmt; - - switch (tag) { - case TIFFTAG_SGILOGDATAFMT: - sp->user_datafmt = va_arg(ap, int); - /* - * Tweak the TIFF header so that the rest of libtiff knows what - * size of data will be passed between app and library, and - * assume that the app knows what it is doing and is not - * confused by these header manipulations... - */ - switch (sp->user_datafmt) { - case SGILOGDATAFMT_FLOAT: - bps = 32, fmt = SAMPLEFORMAT_IEEEFP; - break; - case SGILOGDATAFMT_16BIT: - bps = 16, fmt = SAMPLEFORMAT_INT; - break; - case SGILOGDATAFMT_RAW: - bps = 32, fmt = SAMPLEFORMAT_UINT; - TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); - break; - case SGILOGDATAFMT_8BIT: - bps = 8, fmt = SAMPLEFORMAT_UINT; - break; - default: - TIFFError(tif->tif_name, - "Unknown data format %d for LogLuv compression", - sp->user_datafmt); - return (0); - } - TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps); - TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, fmt); - /* - * Must recalculate sizes should bits/sample change. - */ - tif->tif_tilesize = TIFFTileSize(tif); - tif->tif_scanlinesize = TIFFScanlineSize(tif); - return (1); - case TIFFTAG_SGILOGENCODE: - sp->encode_meth = va_arg(ap, int); - if (sp->encode_meth != SGILOGENCODE_NODITHER && - sp->encode_meth != SGILOGENCODE_RANDITHER) { - TIFFError(tif->tif_name, - "Unknown encoding %d for LogLuv compression", - sp->encode_meth); - return (0); - } - return (1); - default: - return (*sp->vsetparent)(tif, tag, ap); - } -} - -static int -LogLuvVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - LogLuvState *sp = (LogLuvState *)tif->tif_data; - - switch (tag) { - case TIFFTAG_SGILOGDATAFMT: - *va_arg(ap, int*) = sp->user_datafmt; - return (1); - default: - return (*sp->vgetparent)(tif, tag, ap); - } -} - -static const TIFFFieldInfo LogLuvFieldInfo[] = { - { TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, FIELD_PSEUDO, - TRUE, FALSE, "SGILogDataFmt"}, - { TIFFTAG_SGILOGENCODE, 0, 0, TIFF_SHORT, FIELD_PSEUDO, - TRUE, FALSE, "SGILogEncode"} -}; - -int -TIFFInitSGILog(TIFF* tif, int scheme) -{ - static const char module[] = "TIFFInitSGILog"; - LogLuvState* sp; - - assert(scheme == COMPRESSION_SGILOG24 || scheme == COMPRESSION_SGILOG); - - /* - * Allocate state block so tag methods have storage to record values. - */ - tif->tif_data = (tidata_t) _TIFFmalloc(tif, sizeof (LogLuvState)); - if (tif->tif_data == NULL) - goto bad; - sp = (LogLuvState*) tif->tif_data; - _TIFFmemset((tdata_t)sp, 0, sizeof (*sp)); - sp->user_datafmt = SGILOGDATAFMT_UNKNOWN; - sp->encode_meth = (scheme == COMPRESSION_SGILOG24) ? - SGILOGENCODE_RANDITHER : SGILOGENCODE_NODITHER; - sp->tfunc = _logLuvNop; - - /* - * Install codec methods. - * NB: tif_decoderow & tif_encoderow are filled - * in at setup time. - */ - tif->tif_setupdecode = LogLuvSetupDecode; - tif->tif_decodestrip = LogLuvDecodeStrip; - tif->tif_decodetile = LogLuvDecodeTile; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_setupencode = LogLuvSetupEncode; - tif->tif_encodestrip = LogLuvEncodeStrip; - tif->tif_encodetile = LogLuvEncodeTile; - tif->tif_close = LogLuvClose; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - tif->tif_cleanup = LogLuvCleanup; - - /* override SetField so we can handle our private pseudo-tag */ - _TIFFMergeFieldInfo(tif, LogLuvFieldInfo, N(LogLuvFieldInfo)); - sp->vgetparent = tif->tif_vgetfield; - tif->tif_vgetfield = LogLuvVGetField; /* hook for codec tags */ - sp->vsetparent = tif->tif_vsetfield; - tif->tif_vsetfield = LogLuvVSetField; /* hook for codec tags */ - - return (1); -bad: - TIFFError(module, "%s: No space for LogLuv state block", tif->tif_name); - return (0); -} -#endif /* LOGLUV_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_lzw.c b/src/libs/pdflib/libs/tiff/tif_lzw.c deleted file mode 100644 index 4430ee2ef1..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_lzw.c +++ /dev/null @@ -1,727 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_lzw.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef LZW_SUPPORT -/* - * TIFF Library. - * Rev 5.0 Lempel-Ziv & Welch Compression Support - * - * This code is derived from the compress program whose code is - * derived from software contributed to Berkeley by James A. Woods, - * derived from original work by Spencer Thomas and Joseph Orost. - * - * The original Berkeley copyright notice appears below in its entirety. - */ -#include "tif_predict.h" - -#include -#include - -/* - * NB: The 5.0 spec describes a different algorithm than Aldus - * implements. Specifically, Aldus does code length transitions - * one code earlier than should be done (for real LZW). - * Earlier versions of this library implemented the correct - * LZW algorithm, but emitted codes in a bit order opposite - * to the TIFF spec. Thus, to maintain compatibility w/ Aldus - * we interpret MSB-LSB ordered codes to be images written w/ - * old versions of this library, but otherwise adhere to the - * Aldus "off by one" algorithm. - * - * Future revisions to the TIFF spec are expected to "clarify this issue". - */ -#define LZW_COMPAT /* include backwards compatibility code */ -/* - * Each strip of data is supposed to be terminated by a CODE_EOI. - * If the following #define is included, the decoder will also - * check for end-of-strip w/o seeing this code. This makes the - * library more robust, but also slower. - */ -#define LZW_CHECKEOS /* include checks for strips w/o EOI code */ - -#define MAXCODE(n) ((1L<<(n))-1) -/* - * The TIFF spec specifies that encoded bit - * strings range from 9 to 12 bits. - */ -#define BITS_MIN 9 /* start with 9 bits */ -#define BITS_MAX 12 /* max of 12 bit strings */ -/* predefined codes */ -#define CODE_CLEAR 256 /* code to clear string table */ -#define CODE_EOI 257 /* end-of-information code */ -#define CODE_FIRST 258 /* first free code entry */ -#define CODE_MAX MAXCODE(BITS_MAX) -#define HSIZE 9001L /* 91% occupancy */ -#define HSHIFT (13-8) -#ifdef LZW_COMPAT -/* NB: +1024 is for compatibility with old files */ -#define CSIZE (MAXCODE(BITS_MAX)+1024L) -#else -#define CSIZE (MAXCODE(BITS_MAX)+1L) -#endif - -/* - * State block for each open TIFF file using LZW - * compression/decompression. Note that the predictor - * state block must be first in this data structure. - */ -typedef struct { - TIFFPredictorState predict; /* predictor super class */ - - tif_short nbits; /* # of bits/code */ - tif_short maxcode; /* maximum code for lzw_nbits */ - tif_short free_ent; /* next free entry in hash table */ - long nextdata; /* next bits of i/o */ - long nextbits; /* # of valid bits in lzw_nextdata */ -} LZWBaseState; - -#define lzw_nbits base.nbits -#define lzw_maxcode base.maxcode -#define lzw_free_ent base.free_ent -#define lzw_nextdata base.nextdata -#define lzw_nextbits base.nextbits - -/* - * Decoding-specific state. - */ -typedef struct code_ent { - struct code_ent *next; - tif_short length; /* string len, including this token */ - tif_char value; /* data value */ - tif_char firstchar; /* first token of string */ -} code_t; - -typedef int (*decodeFunc)(TIFF*, tidata_t, tsize_t, tsample_t); - -typedef struct { - LZWBaseState base; - long dec_nbitsmask; /* lzw_nbits 1 bits, right adjusted */ - long dec_restart; /* restart count */ -#ifdef LZW_CHECKEOS - long dec_bitsleft; /* available bits in raw data */ -#endif - decodeFunc dec_decode; /* regular or backwards compatible */ - code_t* dec_codep; /* current recognized code */ - code_t* dec_oldcodep; /* previously recognized code */ - code_t* dec_free_entp; /* next free entry */ - code_t* dec_maxcodep; /* max available entry */ - code_t* dec_codetab; /* kept separate for small machines */ -} LZWDecodeState; - -/* - * Encoding-specific state. - */ -typedef uint16 hcode_t; /* codes fit in 16 bits */ -typedef struct { - long hash; - hcode_t code; -} hash_t; - -typedef struct { - LZWBaseState base; - int enc_oldcode; /* last code encountered */ - long enc_checkpoint; /* point at which to clear table */ -#define CHECK_GAP 10000 /* enc_ratio check interval */ - long enc_ratio; /* current compression ratio */ - long enc_incount; /* (input) data bytes encoded */ - long enc_outcount; /* encoded (output) bytes */ - tidata_t enc_rawlimit; /* bound on tif_rawdata buffer */ - hash_t* enc_hashtab; /* kept separate for small machines */ -} LZWEncodeState; - -#define LZWState(tif) ((LZWBaseState*) (tif)->tif_data) -#define DecoderState(tif) ((LZWDecodeState*) LZWState(tif)) -#define EncoderState(tif) ((LZWEncodeState*) LZWState(tif)) - -static int LZWDecode(TIFF*, tidata_t, tsize_t, tsample_t); -#ifdef LZW_COMPAT -static int LZWDecodeCompat(TIFF*, tidata_t, tsize_t, tsample_t); -#endif -/* PDFlib GmbH: apparently unused, therefore disabled to avoid warning -static void cl_hash(LZWEncodeState*); -*/ - -/* - * LZW Decoder. - */ - -#ifdef LZW_CHECKEOS -/* - * This check shouldn't be necessary because each - * strip is suppose to be terminated with CODE_EOI. - */ -#define NextCode(_tif, _sp, _bp, _code, _get) { \ - if ((_sp)->dec_bitsleft < nbits) { \ - TIFFWarning(_tif->tif_name, \ - "LZWDecode: Strip %d not terminated with EOI code", \ - _tif->tif_curstrip); \ - _code = CODE_EOI; \ - } else { \ - _get(_sp,_bp,_code); \ - (_sp)->dec_bitsleft -= nbits; \ - } \ -} -#else -#define NextCode(tif, sp, bp, code, get) get(sp, bp, code) -#endif - -static int -LZWSetupDecode(TIFF* tif) -{ - LZWDecodeState* sp = DecoderState(tif); - static const char module[] = " LZWSetupDecode"; - int code; - - assert(sp != NULL); - if (sp->dec_codetab == NULL) { - sp->dec_codetab=(code_t*)_TIFFmalloc(tif,CSIZE*sizeof(code_t)); - if (sp->dec_codetab == NULL) { - TIFFError(module, "No space for LZW code table"); - return (0); - } - /* - * Pre-load the table. - */ - code = 255; - do { - sp->dec_codetab[code].value = code; - sp->dec_codetab[code].firstchar = code; - sp->dec_codetab[code].length = 1; - sp->dec_codetab[code].next = NULL; - } while (code--); - } - return (1); -} - -/* - * Setup state for decoding a strip. - */ -static int -LZWPreDecode(TIFF* tif, tsample_t s) -{ - LZWDecodeState *sp = DecoderState(tif); - - (void) s; - assert(sp != NULL); - /* - * Check for old bit-reversed codes. - */ - if (tif->tif_rawdata[0] == 0 && (tif->tif_rawdata[1] & 0x1)) { -#ifdef LZW_COMPAT - if (!sp->dec_decode) { - TIFFWarning(tif->tif_name, - "Old-style LZW codes, convert file"); - /* - * Override default decoding methods with - * ones that deal with the old coding. - * Otherwise the predictor versions set - * above will call the compatibility routines - * through the dec_decode method. - */ - tif->tif_decoderow = LZWDecodeCompat; - tif->tif_decodestrip = LZWDecodeCompat; - tif->tif_decodetile = LZWDecodeCompat; - /* - * If doing horizontal differencing, must - * re-setup the predictor logic since we - * switched the basic decoder methods... - */ - (*tif->tif_setupdecode)(tif); - sp->dec_decode = LZWDecodeCompat; - } - sp->lzw_maxcode = MAXCODE(BITS_MIN); -#else /* !LZW_COMPAT */ - if (!sp->dec_decode) { - TIFFError(tif->tif_name, - "Old-style LZW codes not supported"); - sp->dec_decode = LZWDecode; - } - return (0); -#endif/* !LZW_COMPAT */ - } else { - sp->lzw_maxcode = MAXCODE(BITS_MIN)-1; - sp->dec_decode = LZWDecode; - } - sp->lzw_nbits = BITS_MIN; - sp->lzw_nextbits = 0; - sp->lzw_nextdata = 0; - - sp->dec_restart = 0; - sp->dec_nbitsmask = MAXCODE(BITS_MIN); -#ifdef LZW_CHECKEOS - sp->dec_bitsleft = tif->tif_rawcc << 3; -#endif - sp->dec_free_entp = sp->dec_codetab + CODE_FIRST; - /* - * Zero entries that are not yet filled in. We do - * this to guard against bogus input data that causes - * us to index into undefined entries. If you can - * come up with a way to safely bounds-check input codes - * while decoding then you can remove this operation. - */ - _TIFFmemset(sp->dec_free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t)); - sp->dec_oldcodep = &sp->dec_codetab[-1]; - sp->dec_maxcodep = &sp->dec_codetab[sp->dec_nbitsmask-1]; - return (1); -} - -/* - * Decode a "hunk of data". - */ -#define GetNextCode(sp, bp, code) { \ - nextdata = (nextdata<<8) | *(bp)++; \ - nextbits += 8; \ - if (nextbits < nbits) { \ - nextdata = (nextdata<<8) | *(bp)++; \ - nextbits += 8; \ - } \ - code = (hcode_t)((nextdata >> (nextbits-nbits)) & nbitsmask); \ - nextbits -= nbits; \ -} - -static void -codeLoop(TIFF* tif) -{ - TIFFError(tif->tif_name, - "LZWDecode: Bogus encoding, loop in the code table; scanline %d", - tif->tif_row); -} - -static int -LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) -{ - LZWDecodeState *sp = DecoderState(tif); - char *op = (char*) op0; - long occ = (long) occ0; - char *tp; - tif_char *bp; - hcode_t code; - int len; - long nbits, nextbits, nextdata, nbitsmask; - code_t *codep, *free_entp, *maxcodep, *oldcodep; - - (void) s; - assert(sp != NULL); - /* - * Restart interrupted output operation. - */ - if (sp->dec_restart) { - long residue; - - codep = sp->dec_codep; - residue = codep->length - sp->dec_restart; - if (residue > occ) { - /* - * Residue from previous decode is sufficient - * to satisfy decode request. Skip to the - * start of the decoded string, place decoded - * values in the output buffer, and return. - */ - sp->dec_restart += occ; - do { - codep = codep->next; - } while (--residue > occ && codep); - if (codep) { - tp = op + occ; - do { - *--tp = codep->value; - codep = codep->next; - } while (--occ && codep); - } - return (1); - } - /* - * Residue satisfies only part of the decode request. - */ - op += residue, occ -= residue; - tp = op; - do { - int t; - --tp; - t = codep->value; - codep = codep->next; - *tp = t; - } while (--residue && codep); - sp->dec_restart = 0; - } - - bp = (tif_char *)tif->tif_rawcp; - nbits = sp->lzw_nbits; - nextdata = sp->lzw_nextdata; - nextbits = sp->lzw_nextbits; - nbitsmask = sp->dec_nbitsmask; - oldcodep = sp->dec_oldcodep; - free_entp = sp->dec_free_entp; - maxcodep = sp->dec_maxcodep; - - while (occ > 0) { - NextCode(tif, sp, bp, code, GetNextCode); - if (code == CODE_EOI) - break; - if (code == CODE_CLEAR) { - free_entp = sp->dec_codetab + CODE_FIRST; - nbits = BITS_MIN; - nbitsmask = MAXCODE(BITS_MIN); - maxcodep = sp->dec_codetab + nbitsmask-1; - NextCode(tif, sp, bp, code, GetNextCode); - if (code == CODE_EOI) - break; - *op++ = (char)code, occ--; - oldcodep = sp->dec_codetab + code; - continue; - } - codep = sp->dec_codetab + code; - - /* - * Add the new entry to the code table. - */ - assert(&sp->dec_codetab[0] <= free_entp && free_entp - < &sp->dec_codetab[CSIZE]); - free_entp->next = oldcodep; - free_entp->firstchar = free_entp->next->firstchar; - free_entp->length = free_entp->next->length+1; - free_entp->value = (codep < free_entp) ? - codep->firstchar : free_entp->firstchar; - if (++free_entp > maxcodep) { - if (++nbits > BITS_MAX) /* should not happen */ - nbits = BITS_MAX; - nbitsmask = MAXCODE(nbits); - maxcodep = sp->dec_codetab + nbitsmask-1; - } - oldcodep = codep; - if (code >= 256) { - /* - * Code maps to a string, copy string - * value to output (written in reverse). - */ - if (codep->length > occ) { - /* - * String is too long for decode buffer, - * locate portion that will fit, copy to - * the decode buffer, and setup restart - * logic for the next decoding call. - */ - sp->dec_codep = codep; - do { - codep = codep->next; - } while (codep && codep->length > occ); - if (codep) { - sp->dec_restart = occ; - tp = op + occ; - do { - *--tp = codep->value; - codep = codep->next; - } while (--occ && codep); - if (codep) - codeLoop(tif); - } - break; - } - len = codep->length; - tp = op + len; - do { - int t; - --tp; - t = codep->value; - codep = codep->next; - *tp = t; - } while (codep && tp > op); - if (codep) { - codeLoop(tif); - break; - } - op += len, occ -= len; - } else - *op++ = (char)code, occ--; - } - - tif->tif_rawcp = (tidata_t) bp; - sp->lzw_nbits = (tif_short) nbits; - sp->lzw_nextdata = nextdata; - sp->lzw_nextbits = nextbits; - sp->dec_nbitsmask = nbitsmask; - sp->dec_oldcodep = oldcodep; - sp->dec_free_entp = free_entp; - sp->dec_maxcodep = maxcodep; - - if (occ > 0) { - TIFFError(tif->tif_name, - "LZWDecode: Not enough data at scanline %d (short %d bytes)", - tif->tif_row, occ); - return (0); - } - return (1); -} - -#ifdef LZW_COMPAT -/* - * Decode a "hunk of data" for old images. - */ -#define GetNextCodeCompat(sp, bp, code) { \ - nextdata |= (tif_long) *(bp)++ << nextbits; \ - nextbits += 8; \ - if (nextbits < nbits) { \ - nextdata |= (tif_long) *(bp)++ << nextbits; \ - nextbits += 8; \ - } \ - code = (hcode_t)(nextdata & nbitsmask); \ - nextdata >>= nbits; \ - nextbits -= nbits; \ -} - -static int -LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) -{ - LZWDecodeState *sp = DecoderState(tif); - char *op = (char*) op0; - long occ = (long) occ0; - char *tp; - tif_char *bp; - int code, nbits; - long nextbits, nextdata, nbitsmask; - code_t *codep, *free_entp, *maxcodep, *oldcodep; - - (void) s; - assert(sp != NULL); - /* - * Restart interrupted output operation. - */ - if (sp->dec_restart) { - long residue; - - codep = sp->dec_codep; - residue = codep->length - sp->dec_restart; - if (residue > occ) { - /* - * Residue from previous decode is sufficient - * to satisfy decode request. Skip to the - * start of the decoded string, place decoded - * values in the output buffer, and return. - */ - sp->dec_restart += occ; - do { - codep = codep->next; - } while (--residue > occ); - tp = op + occ; - do { - *--tp = codep->value; - codep = codep->next; - } while (--occ); - return (1); - } - /* - * Residue satisfies only part of the decode request. - */ - op += residue, occ -= residue; - tp = op; - do { - *--tp = codep->value; - codep = codep->next; - } while (--residue); - sp->dec_restart = 0; - } - - bp = (tif_char *)tif->tif_rawcp; - nbits = sp->lzw_nbits; - nextdata = sp->lzw_nextdata; - nextbits = sp->lzw_nextbits; - nbitsmask = sp->dec_nbitsmask; - oldcodep = sp->dec_oldcodep; - free_entp = sp->dec_free_entp; - maxcodep = sp->dec_maxcodep; - - while (occ > 0) { - NextCode(tif, sp, bp, code, GetNextCodeCompat); - if (code == CODE_EOI) - break; - if (code == CODE_CLEAR) { - free_entp = sp->dec_codetab + CODE_FIRST; - nbits = BITS_MIN; - nbitsmask = MAXCODE(BITS_MIN); - maxcodep = sp->dec_codetab + nbitsmask; - NextCode(tif, sp, bp, code, GetNextCodeCompat); - if (code == CODE_EOI) - break; - *op++ = code, occ--; - oldcodep = sp->dec_codetab + code; - continue; - } - codep = sp->dec_codetab + code; - - /* - * Add the new entry to the code table. - */ - assert(&sp->dec_codetab[0] <= free_entp && free_entp - < &sp->dec_codetab[CSIZE]); - free_entp->next = oldcodep; - free_entp->firstchar = free_entp->next->firstchar; - free_entp->length = free_entp->next->length+1; - free_entp->value = (codep < free_entp) ? - codep->firstchar : free_entp->firstchar; - if (++free_entp > maxcodep) { - if (++nbits > BITS_MAX) /* should not happen */ - nbits = BITS_MAX; - nbitsmask = MAXCODE(nbits); - maxcodep = sp->dec_codetab + nbitsmask; - } - oldcodep = codep; - if (code >= 256) { - /* - * Code maps to a string, copy string - * value to output (written in reverse). - */ - if (codep->length > occ) { - /* - * String is too long for decode buffer, - * locate portion that will fit, copy to - * the decode buffer, and setup restart - * logic for the next decoding call. - */ - sp->dec_codep = codep; - do { - codep = codep->next; - } while (codep->length > occ); - sp->dec_restart = occ; - tp = op + occ; - do { - *--tp = codep->value; - codep = codep->next; - } while (--occ); - break; - } - op += codep->length, occ -= codep->length; - tp = op; - do { - *--tp = codep->value; - } while( (codep = codep->next) != NULL); - } else - *op++ = code, occ--; - } - - tif->tif_rawcp = (tidata_t) bp; - sp->lzw_nbits = nbits; - sp->lzw_nextdata = nextdata; - sp->lzw_nextbits = nextbits; - sp->dec_nbitsmask = nbitsmask; - sp->dec_oldcodep = oldcodep; - sp->dec_free_entp = free_entp; - sp->dec_maxcodep = maxcodep; - - if (occ > 0) { - TIFFError(tif->tif_name, - "LZWDecodeCompat: Not enough data at scanline %d (short %d bytes)", - tif->tif_row, occ); - return (0); - } - return (1); -} -#endif /* LZW_COMPAT */ - - - -static void -LZWCleanup(TIFF* tif) -{ - if (tif->tif_data) { - if (tif->tif_mode == O_RDONLY) { - if (DecoderState(tif)->dec_codetab) - _TIFFfree(tif, DecoderState(tif)->dec_codetab); - } - _TIFFfree(tif, tif->tif_data); - tif->tif_data = NULL; - } -} - -static int -LZWSetupEncode(TIFF* tif) -{ - TIFFError(tif->tif_name, - "LZW compression is not available to due to Unisys patent enforcement"); - return (0); -} - -int -TIFFInitLZW(TIFF* tif, int scheme) -{ - assert(scheme == COMPRESSION_LZW); - /* - * Allocate state block so tag methods have storage to record values. - */ - if (tif->tif_mode == O_RDONLY) - { - tif->tif_data=(tidata_t) _TIFFmalloc(tif, sizeof (LZWDecodeState)); - if (tif->tif_data == NULL) - goto bad; - DecoderState(tif)->dec_codetab = NULL; - DecoderState(tif)->dec_decode = NULL; - } - - /* - * Install codec methods. - */ - tif->tif_setupencode = LZWSetupEncode; - tif->tif_setupdecode = LZWSetupDecode; - tif->tif_predecode = LZWPreDecode; - tif->tif_decoderow = LZWDecode; - tif->tif_decodestrip = LZWDecode; - tif->tif_decodetile = LZWDecode; - tif->tif_cleanup = LZWCleanup; - - /* - * Setup predictor setup. - */ - if( tif->tif_mode == O_RDONLY ) - (void) TIFFPredictorInit(tif); - - return (1); - -bad: - TIFFError("TIFFInitLZW", "No space for LZW state block"); - return (0); -} - -/* - * Copyright (c) 1985, 1986 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * James A. Woods, derived from original work by Spencer Thomas - * and Joseph Orost. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#endif /* LZW_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_next.c b/src/libs/pdflib/libs/tiff/tif_next.c deleted file mode 100644 index fa92a503cc..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_next.c +++ /dev/null @@ -1,142 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_next.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef NEXT_SUPPORT -/* - * TIFF Library. - * - * NeXT 2-bit Grey Scale Compression Algorithm Support - */ - -#define SETPIXEL(op, v) { \ - switch (npixels++ & 3) { \ - case 0: op[0] = (v) << 6; break; \ - case 1: op[0] |= (v) << 4; break; \ - case 2: op[0] |= (v) << 2; break; \ - case 3: *op++ |= (v); break; \ - } \ -} - -#define LITERALROW 0x00 -#define LITERALSPAN 0x40 -#define WHITE ((1<<2)-1) - -static int -NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - register tif_char *bp, *op; - register tsize_t cc; - register int n; - tidata_t row; - tsize_t scanline; - - (void) s; - /* - * Each scanline is assumed to start off as all - * white (we assume a PhotometricInterpretation - * of ``min-is-black''). - */ - for (op = buf, cc = occ; cc-- > 0;) - *op++ = 0xff; - - bp = (tif_char *)tif->tif_rawcp; - cc = tif->tif_rawcc; - scanline = tif->tif_scanlinesize; - for (row = buf; (long)occ > 0; occ -= scanline, row += scanline) { - n = *bp++, cc--; - switch (n) { - case LITERALROW: - /* - * The entire scanline is given as literal values. - */ - if (cc < scanline) - goto bad; - _TIFFmemcpy(row, bp, scanline); - bp += scanline; - cc -= scanline; - break; - case LITERALSPAN: { - int off; - /* - * The scanline has a literal span - * that begins at some offset. - */ - off = (bp[0] * 256) + bp[1]; - n = (bp[2] * 256) + bp[3]; - if (cc < 4+n) - goto bad; - _TIFFmemcpy(row+off, bp+4, n); - bp += 4+n; - cc -= 4+n; - break; - } - default: { - register int npixels = 0, grey; - tif_long imagewidth = tif->tif_dir.td_imagewidth; - - /* - * The scanline is composed of a sequence - * of constant color ``runs''. We shift - * into ``run mode'' and interpret bytes - * as codes of the form - * until we've filled the scanline. - */ - op = row; - for (;;) { - grey = (n>>6) & 0x3; - n &= 0x3f; - while (n-- > 0) - SETPIXEL(op, grey); - if (npixels >= (int) imagewidth) - break; - if (cc == 0) - goto bad; - n = *bp++, cc--; - } - break; - } - } - } - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - return (1); -bad: - TIFFError(tif->tif_name, "NeXTDecode: Not enough data for scanline %ld", - (long) tif->tif_row); - return (0); -} - -int -TIFFInitNeXT(TIFF* tif, int scheme) -{ - (void) scheme; - tif->tif_decoderow = NeXTDecode; - tif->tif_decodestrip = NeXTDecode; - tif->tif_decodetile = NeXTDecode; - return (1); -} -#endif /* NEXT_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_open.c b/src/libs/pdflib/libs/tiff/tif_open.c deleted file mode 100644 index 7a3592da6f..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_open.c +++ /dev/null @@ -1,535 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_open.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - */ -#include "tiffiop.h" - -static const long typemask[13] = { - 0L, /* TIFF_NOTYPE */ - 0x000000ffL, /* TIFF_BYTE */ - 0xffffffffL, /* TIFF_ASCII */ - 0x0000ffffL, /* TIFF_SHORT */ - 0xffffffffL, /* TIFF_LONG */ - 0xffffffffL, /* TIFF_RATIONAL */ - 0x000000ffL, /* TIFF_SBYTE */ - 0x000000ffL, /* TIFF_UNDEFINED */ - 0x0000ffffL, /* TIFF_SSHORT */ - 0xffffffffL, /* TIFF_SLONG */ - 0xffffffffL, /* TIFF_SRATIONAL */ - 0xffffffffL, /* TIFF_FLOAT */ - 0xffffffffL, /* TIFF_DOUBLE */ -}; -static const int bigTypeshift[13] = { - 0, /* TIFF_NOTYPE */ - 24, /* TIFF_BYTE */ - 0, /* TIFF_ASCII */ - 16, /* TIFF_SHORT */ - 0, /* TIFF_LONG */ - 0, /* TIFF_RATIONAL */ - 24, /* TIFF_SBYTE */ - 24, /* TIFF_UNDEFINED */ - 16, /* TIFF_SSHORT */ - 0, /* TIFF_SLONG */ - 0, /* TIFF_SRATIONAL */ - 0, /* TIFF_FLOAT */ - 0, /* TIFF_DOUBLE */ -}; -static const int litTypeshift[13] = { - 0, /* TIFF_NOTYPE */ - 0, /* TIFF_BYTE */ - 0, /* TIFF_ASCII */ - 0, /* TIFF_SHORT */ - 0, /* TIFF_LONG */ - 0, /* TIFF_RATIONAL */ - 0, /* TIFF_SBYTE */ - 0, /* TIFF_UNDEFINED */ - 0, /* TIFF_SSHORT */ - 0, /* TIFF_SLONG */ - 0, /* TIFF_SRATIONAL */ - 0, /* TIFF_FLOAT */ - 0, /* TIFF_DOUBLE */ -}; - -/* - * Initialize the shift & mask tables, and the - * byte swapping state according to the file - * contents and the machine architecture. - */ -static void -TIFFInitOrder(TIFF* tif, int magic, int bigendian) -{ - tif->tif_typemask = typemask; - if (magic == TIFF_BIGENDIAN) { - tif->tif_typeshift = bigTypeshift; - if (!bigendian) - tif->tif_flags |= TIFF_SWAB; - } else { - tif->tif_typeshift = litTypeshift; - if (bigendian) - tif->tif_flags |= TIFF_SWAB; - } -} - -int -_TIFFgetMode(const char* mode, const char* module) -{ - int m = -1; - - switch (mode[0]) { - case 'r': - m = O_RDONLY; - if (mode[1] == '+') - m = O_RDWR; - break; - case 'w': - case 'a': - m = O_RDWR|O_CREAT; - if (mode[0] == 'w') - m |= O_TRUNC; - break; - default: - TIFFError(module, "\"%s\": Bad mode", mode); - break; - } - return (m); -} - -TIFF* -TIFFClientOpen( - const char* name, const char* mode, - void* clientdata, - TIFFReadWriteProc readproc, - TIFFReadWriteProc writeproc, - TIFFSeekProc seekproc, - TIFFCloseProc closeproc, - TIFFSizeProc sizeproc, - TIFFMapFileProc mapproc, - TIFFUnmapFileProc unmapproc, - void* pdflib_opaque, - TIFFmallocHandler malloc_h, - TIFFreallocHandler realloc_h, - TIFFfreeHandler free_h, - TIFFErrorHandler error_h, - TIFFErrorHandler warn_h -) -{ - static const char module[] = "TIFFClientOpen"; - TIFF pdftiff; - TIFF *tif = &pdftiff; - int m, bigendian; - const char* cp; - - /* PDFlib: we read only */ -/* - m = _TIFFgetMode(mode, module); - if (m == -1) - goto bad2; -*/ - m = O_RDONLY; - /* PDFlib: preset tiff structure so that the first malloc works */ - tif->pdflib_opaque = pdflib_opaque; - tif->pdflib_malloc = malloc_h; - tif->pdflib_realloc = realloc_h; - tif->pdflib_free = free_h; - tif->pdflib_error = error_h; - tif->pdflib_warn = warn_h; - - tif = (TIFF *)_TIFFmalloc(tif, sizeof (TIFF) + strlen(name) + 1); - if (tif == NULL) { - TIFFError(module, "%s: Out of memory (TIFF structure)", name); - goto bad2; - } - _TIFFmemset(tif, 0, sizeof (*tif)); - - /* PDFlib: add own mallochandling */ - tif->pdflib_opaque = pdflib_opaque; - tif->pdflib_malloc = malloc_h; - tif->pdflib_realloc = realloc_h; - tif->pdflib_free = free_h; - tif->pdflib_error = error_h; - tif->pdflib_warn = warn_h; - - tif->tif_name = (char *)tif + sizeof (TIFF); - strcpy(tif->tif_name, name); - tif->tif_mode = m &~ (O_CREAT|O_TRUNC); - tif->tif_curdir = (tdir_t) -1; /* non-existent directory */ - tif->tif_curoff = 0; - tif->tif_curstrip = (tstrip_t) -1; /* invalid strip */ - tif->tif_row = (uint32) -1; /* read/write pre-increment */ - tif->tif_clientdata = clientdata; - tif->tif_readproc = readproc; - tif->tif_writeproc = writeproc; - tif->tif_seekproc = seekproc; - tif->tif_closeproc = closeproc; - tif->tif_sizeproc = sizeproc; - tif->tif_mapproc = mapproc; - tif->tif_unmapproc = unmapproc; - _TIFFSetDefaultCompressionState(tif); /* setup default state */ - /* - * Default is to return data MSB2LSB and enable the - * use of memory-mapped files and strip chopping when - * a file is opened read-only. - */ - tif->tif_flags = FILLORDER_MSB2LSB; -#ifdef HAVE_MMAP - if (m == O_RDONLY ) - tif->tif_flags |= TIFF_MAPPED; -#endif - -#ifdef STRIPCHOP_DEFAULT - if (m == O_RDONLY || m == O_RDWR) - tif->tif_flags |= STRIPCHOP_DEFAULT; -#endif - - { union { int32 i; char c[4]; } u; u.i = 1; bigendian = u.c[0] == 0; } - /* - * Process library-specific flags in the open mode string. - * The following flags may be used to control intrinsic library - * behaviour that may or may not be desirable (usually for - * compatibility with some application that claims to support - * TIFF but only supports some braindead idea of what the - * vendor thinks TIFF is): - * - * 'l' use little-endian byte order for creating a file - * 'b' use big-endian byte order for creating a file - * 'L' read/write information using LSB2MSB bit order - * 'B' read/write information using MSB2LSB bit order - * 'H' read/write information using host bit order - * 'M' enable use of memory-mapped files when supported - * 'm' disable use of memory-mapped files - * 'C' enable strip chopping support when reading - * 'c' disable strip chopping support - * - * The use of the 'l' and 'b' flags is strongly discouraged. - * These flags are provided solely because numerous vendors, - * typically on the PC, do not correctly support TIFF; they - * only support the Intel little-endian byte order. This - * support is not configured by default because it supports - * the violation of the TIFF spec that says that readers *MUST* - * support both byte orders. It is strongly recommended that - * you not use this feature except to deal with busted apps - * that write invalid TIFF. And even in those cases you should - * bang on the vendors to fix their software. - * - * The 'L', 'B', and 'H' flags are intended for applications - * that can optimize operations on data by using a particular - * bit order. By default the library returns data in MSB2LSB - * bit order for compatibiltiy with older versions of this - * library. Returning data in the bit order of the native cpu - * makes the most sense but also requires applications to check - * the value of the FillOrder tag; something they probabyl do - * not do right now. - * - * The 'M' and 'm' flags are provided because some virtual memory - * systems exhibit poor behaviour when large images are mapped. - * These options permit clients to control the use of memory-mapped - * files on a per-file basis. - * - * The 'C' and 'c' flags are provided because the library support - * for chopping up large strips into multiple smaller strips is not - * application-transparent and as such can cause problems. The 'c' - * option permits applications that only want to look at the tags, - * for example, to get the unadulterated TIFF tag information. - */ - for (cp = mode; *cp; cp++) - switch (*cp) { - case 'b': - if ((m&O_CREAT) && !bigendian) - tif->tif_flags |= TIFF_SWAB; - break; - case 'l': - if ((m&O_CREAT) && bigendian) - tif->tif_flags |= TIFF_SWAB; - break; - case 'B': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - FILLORDER_MSB2LSB; - break; - case 'L': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - FILLORDER_LSB2MSB; - break; -#ifdef PDF_UNUSED /* PDFlib GmbH */ - case 'H': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - HOST_FILLORDER; - break; -#endif -#ifdef HAVE_MMAP - case 'M': - if (m == O_RDONLY) - tif->tif_flags |= TIFF_MAPPED; - break; - case 'm': - if (m == O_RDONLY) - tif->tif_flags &= ~TIFF_MAPPED; - break; -#endif - case 'C': - if (m == O_RDONLY) - tif->tif_flags |= TIFF_STRIPCHOP; - break; - case 'c': - if (m == O_RDONLY) - tif->tif_flags &= ~TIFF_STRIPCHOP; - break; - } - /* - * Read in TIFF header. - */ - if (!ReadOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { -#ifdef PDF_USED - if (tif->tif_mode == O_RDONLY) { -#endif - TIFFError(name, "Cannot read TIFF header"); - goto bad; -#ifdef PDF_USED - } - /* - * Setup header and write. - */ - tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB - ? (bigendian ? TIFF_LITTLEENDIAN : TIFF_BIGENDIAN) - : (bigendian ? TIFF_BIGENDIAN : TIFF_LITTLEENDIAN); - tif->tif_header.tiff_version = TIFF_VERSION; - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&tif->tif_header.tiff_version); - tif->tif_header.tiff_diroff = 0; /* filled in later */ - - /* - * This seek shouldn't be necessary, but I have had some - * crazy problems with a failed fseek() on Solaris leaving - * the current file pointer out of whack when an fwrite() - * is done. - */ - TIFFSeekFile( tif, 0, SEEK_SET ); - - if (!WriteOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { - TIFFError(name, "Error writing TIFF header"); - goto bad; - } - /* - * Setup the byte order handling. - */ - TIFFInitOrder(tif, tif->tif_header.tiff_magic, bigendian); - /* - * Setup default directory. - */ - if (!TIFFDefaultDirectory(tif)) - goto bad; - tif->tif_diroff = 0; - return (tif); -#endif - } - /* - * Setup the byte order handling. - */ - if (tif->tif_header.tiff_magic != TIFF_BIGENDIAN && - tif->tif_header.tiff_magic != TIFF_LITTLEENDIAN) { - TIFFError(name, "Not a TIFF file, bad magic number %d (0x%x)", - tif->tif_header.tiff_magic, - tif->tif_header.tiff_magic); - goto bad; - } - TIFFInitOrder(tif, tif->tif_header.tiff_magic, bigendian); - /* - * Swap header if required. - */ - if (tif->tif_flags & TIFF_SWAB) { - TIFFSwabShort(&tif->tif_header.tiff_version); - TIFFSwabLong(&tif->tif_header.tiff_diroff); - } - /* - * Now check version (if needed, it's been byte-swapped). - * Note that this isn't actually a version number, it's a - * magic number that doesn't change (stupid). - */ - if (tif->tif_header.tiff_version != TIFF_VERSION) { - TIFFError(name, - "Not a TIFF file, bad version number %d (0x%x)", - tif->tif_header.tiff_version, - tif->tif_header.tiff_version); - goto bad; - } - tif->tif_flags |= TIFF_MYBUFFER; - tif->tif_rawcp = tif->tif_rawdata = 0; - tif->tif_rawdatasize = 0; - /* - * Setup initial directory. - */ - switch (mode[0]) { - case 'r': - tif->tif_nextdiroff = tif->tif_header.tiff_diroff; -#ifdef HAVE_MMAP - /* - * Try to use a memory-mapped file if the client - * has not explicitly suppressed usage with the - * 'm' flag in the open mode (see above). - */ - if ((tif->tif_flags & TIFF_MAPPED) && - !TIFFMapFileContents(tif, (tdata_t*) &tif->tif_base, &tif->tif_size)) - tif->tif_flags &= ~TIFF_MAPPED; -#endif - if (TIFFReadDirectory(tif)) { - if( m != O_RDONLY - && tif->tif_dir.td_compression != COMPRESSION_NONE ) - { - TIFFError( name, - "Can't open a compressed TIFF file" - " with compression for update." ); - goto bad; - } - tif->tif_rawcc = -1; - tif->tif_flags |= TIFF_BUFFERSETUP; - return (tif); - } - break; - case 'a': - /* - * New directories are automatically append - * to the end of the directory chain when they - * are written out (see TIFFWriteDirectory). - */ - if (!TIFFDefaultDirectory(tif)) - goto bad; - return (tif); - } -bad: - tif->tif_mode = O_RDONLY; /* XXX avoid flush */ - TIFFClose(tif); - return ((TIFF*)0); -bad2: - (void) (*closeproc)(clientdata); - return ((TIFF*)0); -} - -/* - * Query functions to access private data. - */ - -/* - * Return open file's name. - */ -const char * -TIFFFileName(TIFF* tif) -{ - return (tif->tif_name); -} - -#ifdef PDF_USED -/* - * Return open file's I/O descriptor. - */ -int -TIFFFileno(TIFF* tif) -{ - return (tif->tif_fd); -} -#endif - -/* - * Return read/write mode. - */ -int -TIFFGetMode(TIFF* tif) -{ - return (tif->tif_mode); -} - -/* - * Return nonzero if file is organized in - * tiles; zero if organized as strips. - */ -int -TIFFIsTiled(TIFF* tif) -{ - return (isTiled(tif)); -} - -/* - * Return current row being read/written. - */ -uint32 -TIFFCurrentRow(TIFF* tif) -{ - return (tif->tif_row); -} - -/* - * Return index of the current directory. - */ -tdir_t -TIFFCurrentDirectory(TIFF* tif) -{ - return (tif->tif_curdir); -} - -/* - * Return current strip. - */ -tstrip_t -TIFFCurrentStrip(TIFF* tif) -{ - return (tif->tif_curstrip); -} - -/* - * Return current tile. - */ -ttile_t -TIFFCurrentTile(TIFF* tif) -{ - return (tif->tif_curtile); -} - -/* - * Return nonzero if the file has byte-swapped data. - */ -int -TIFFIsByteSwapped(TIFF* tif) -{ - return ((tif->tif_flags & TIFF_SWAB) != 0); -} - -/* - * Return nonzero if the data is returned up-sampled. - */ -int -TIFFIsUpSampled(TIFF* tif) -{ - return (isUpSampled(tif)); -} - -/* - * Return nonzero if the data is returned in MSB-to-LSB bit order. - */ -int -TIFFIsMSB2LSB(TIFF* tif) -{ - return (isFillOrder(tif, FILLORDER_MSB2LSB)); -} diff --git a/src/libs/pdflib/libs/tiff/tif_packbits.c b/src/libs/pdflib/libs/tiff/tif_packbits.c deleted file mode 100644 index 8bea6026e3..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_packbits.c +++ /dev/null @@ -1,299 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_packbits.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef PACKBITS_SUPPORT -/* - * TIFF Library. - * - * PackBits Compression Algorithm Support - */ -#include -#include - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -PackBitsPreEncode(TIFF* tif, tsample_t s) -{ - (void) s; - /* - * Calculate the scanline/tile-width size in bytes. - */ - if (isTiled(tif)) - tif->tif_data = (tidata_t) TIFFTileRowSize(tif); - else - tif->tif_data = (tidata_t) TIFFScanlineSize(tif); - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * NB: tidata is the type representing *(tidata_t); - * if tidata_t is made signed then this type must - * be adjusted accordingly. - */ -typedef unsigned char tidata; - -/* - * Encode a run of pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) -{ - tif_char* bp = (tif_char*) buf; - tidata_t op, ep, lastliteral; - long n, slop; - int b; - enum { BASE, LITERAL, RUN, LITERAL_RUN } state; - - (void) s; - op = tif->tif_rawcp; - ep = tif->tif_rawdata + tif->tif_rawdatasize; - state = BASE; - lastliteral = 0; - while (cc > 0) { - /* - * Find the longest string of identical bytes. - */ - b = *bp++, cc--, n = 1; - for (; cc > 0 && b == *bp; cc--, bp++) - n++; - again: - if (op + 2 >= ep) { /* insure space for new data */ - /* - * Be careful about writing the last - * literal. Must write up to that point - * and then copy the remainder to the - * front of the buffer. - */ - if (state == LITERAL || state == LITERAL_RUN) { - slop = op - lastliteral; - tif->tif_rawcc += lastliteral - tif->tif_rawcp; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - while (slop-- > 0) - *op++ = *lastliteral++; - lastliteral = tif->tif_rawcp; - } else { - tif->tif_rawcc += op - tif->tif_rawcp; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - } - } - switch (state) { - case BASE: /* initial state, set run/literal */ - if (n > 1) { - state = RUN; - if (n > 128) { - *op++ = (tidata) -127; - *op++ = b; - n -= 128; - goto again; - } - *op++ = (tidataval_t)(-(n-1)); - *op++ = b; - } else { - lastliteral = op; - *op++ = 0; - *op++ = b; - state = LITERAL; - } - break; - case LITERAL: /* last object was literal string */ - if (n > 1) { - state = LITERAL_RUN; - if (n > 128) { - *op++ = (tidata) -127; - *op++ = b; - n -= 128; - goto again; - } - *op++ = (tidataval_t)(-(n-1)); /* encode run */ - *op++ = b; - } else { /* extend literal */ - if (++(*lastliteral) == 127) - state = BASE; - *op++ = b; - } - break; - case RUN: /* last object was run */ - if (n > 1) { - if (n > 128) { - *op++ = (tidata) -127; - *op++ = b; - n -= 128; - goto again; - } - *op++ = (tidataval_t)(-(n-1)); - *op++ = b; - } else { - lastliteral = op; - *op++ = 0; - *op++ = b; - state = LITERAL; - } - break; - case LITERAL_RUN: /* literal followed by a run */ - /* - * Check to see if previous run should - * be converted to a literal, in which - * case we convert literal-run-literal - * to a single literal. - */ - if (n == 1 && op[-2] == (tidata) -1 && - *lastliteral < 126) { - state = (((*lastliteral) += 2) == 127 ? - BASE : LITERAL); - op[-2] = op[-1]; /* replicate */ - } else - state = RUN; - goto again; - } - } - tif->tif_rawcc += op - tif->tif_rawcp; - tif->tif_rawcp = op; - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a rectangular chunk of pixels. We break it up - * into row-sized pieces to insure that encoded runs do - * not span rows. Otherwise, there can be problems with - * the decoder if data is read, for example, by scanlines - * when it was encoded by strips. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -PackBitsEncodeChunk(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - tsize_t rowsize = (tsize_t) tif->tif_data; - - assert(rowsize > 0); - -#ifdef YCBCR_SUPPORT - /* - * YCBCR data isn't really separable into rows, so we - * might as well encode the whole tile/strip as one chunk. - */ - if( tif->tif_dir.td_photometric == PHOTOMETRIC_YCBCR ) - rowsize = (tsize_t) tif->tif_data; -#endif - - while ((long)cc > 0) { - int chunk = rowsize; - - if( cc < chunk ) - chunk = cc; - - if (PackBitsEncode(tif, bp, chunk, s) < 0) - return (-1); - bp += chunk; - cc -= chunk; - } - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static int -PackBitsDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) -{ - char *bp; - tsize_t cc; - long n; - int b; - - (void) s; - bp = (char*) tif->tif_rawcp; - cc = tif->tif_rawcc; - while (cc > 0 && (long)occ > 0) { - n = (long) *bp++, cc--; - /* - * Watch out for compilers that - * don't sign extend chars... - */ - if (n >= 128) - n -= 256; - if (n < 0) { /* replicate next byte -n+1 times */ - if (n == -128) /* nop */ - continue; - n = -n + 1; - if( occ < n ) - { - TIFFWarning(tif->tif_name, - "PackBitsDecode: discarding %d bytes " - "to avoid buffer overrun", - n - occ); - n = occ; - } - occ -= n; - b = *bp++, cc--; - while (n-- > 0) - *op++ = b; - } else { /* copy next n+1 bytes literally */ - if (occ < n + 1) - { - TIFFWarning(tif->tif_name, - "PackBitsDecode: discarding %d bytes " - "to avoid buffer overrun", - n - occ + 1); - n = occ - 1; - } - _TIFFmemcpy(op, bp, ++n); - op += n; occ -= n; - bp += n; cc -= n; - } - } - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - if (occ > 0) { - TIFFError(tif->tif_name, - "PackBitsDecode: Not enough data for scanline %ld", - (long) tif->tif_row); - return (0); - } - return (1); -} - -int -TIFFInitPackBits(TIFF* tif, int scheme) -{ - (void) scheme; - tif->tif_decoderow = PackBitsDecode; - tif->tif_decodestrip = PackBitsDecode; - tif->tif_decodetile = PackBitsDecode; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_preencode = PackBitsPreEncode; - tif->tif_encoderow = PackBitsEncode; - tif->tif_encodestrip = PackBitsEncodeChunk; - tif->tif_encodetile = PackBitsEncodeChunk; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - return (1); -} -#endif /* PACKBITS_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_predict.c b/src/libs/pdflib/libs/tiff/tif_predict.c deleted file mode 100644 index 23729f5477..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_predict.c +++ /dev/null @@ -1,465 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_predict.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Predictor Tag Support (used by multiple codecs). - */ -#include "tiffiop.h" -#include "tif_predict.h" - -#include - -#define PredictorState(tif) ((TIFFPredictorState*) (tif)->tif_data) - -static void horAcc8(TIFF*, tidata_t, tsize_t); -static void horAcc16(TIFF*, tidata_t, tsize_t); -static void swabHorAcc16(TIFF*, tidata_t, tsize_t); -static void horDiff8(TIFF*, tidata_t, tsize_t); -static void horDiff16(TIFF*, tidata_t, tsize_t); -static int PredictorDecodeRow(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorDecodeTile(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorEncodeRow(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorEncodeTile(TIFF*, tidata_t, tsize_t, tsample_t); - -static int -PredictorSetup(TIFF* tif) -{ - TIFFPredictorState* sp = PredictorState(tif); - TIFFDirectory* td = &tif->tif_dir; - - if (sp->predictor == 1) /* no differencing */ - return (1); - if (sp->predictor != 2) { - TIFFError(tif->tif_name, "\"Predictor\" value %d not supported", - sp->predictor); - return (0); - } - if (td->td_bitspersample != 8 && td->td_bitspersample != 16) { - TIFFError(tif->tif_name, - "Horizontal differencing \"Predictor\" not supported with %d-bit samples", - td->td_bitspersample); - return (0); - } - sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? - td->td_samplesperpixel : 1); - /* - * Calculate the scanline/tile-width size in bytes. - */ - if (isTiled(tif)) - sp->rowsize = TIFFTileRowSize(tif); - else - sp->rowsize = TIFFScanlineSize(tif); - return (1); -} - -static int -PredictorSetupDecode(TIFF* tif) -{ - TIFFPredictorState* sp = PredictorState(tif); - TIFFDirectory* td = &tif->tif_dir; - - if (!(*sp->setupdecode)(tif) || !PredictorSetup(tif)) - return (0); - if (sp->predictor == 2) { - switch (td->td_bitspersample) { - case 8: sp->pfunc = horAcc8; break; - case 16: sp->pfunc = horAcc16; break; - } - /* - * Override default decoding method with - * one that does the predictor stuff. - */ - sp->coderow = tif->tif_decoderow; - tif->tif_decoderow = PredictorDecodeRow; - sp->codestrip = tif->tif_decodestrip; - tif->tif_decodestrip = PredictorDecodeTile; - sp->codetile = tif->tif_decodetile; - tif->tif_decodetile = PredictorDecodeTile; - /* - * If the data is horizontally differenced - * 16-bit data that requires byte-swapping, - * then it must be byte swapped before the - * accumulation step. We do this with a - * special-purpose routine and override the - * normal post decoding logic that the library - * setup when the directory was read. - */ - if (tif->tif_flags&TIFF_SWAB) { - if (sp->pfunc == horAcc16) { - sp->pfunc = swabHorAcc16; - tif->tif_postdecode = _TIFFNoPostDecode; - } /* else handle 32-bit case... */ - } - } - return (1); -} - -static int -PredictorSetupEncode(TIFF* tif) -{ - TIFFPredictorState* sp = PredictorState(tif); - TIFFDirectory* td = &tif->tif_dir; - - if (!(*sp->setupencode)(tif) || !PredictorSetup(tif)) - return (0); - if (sp->predictor == 2) { - switch (td->td_bitspersample) { - case 8: sp->pfunc = horDiff8; break; - case 16: sp->pfunc = horDiff16; break; - } - /* - * Override default encoding method with - * one that does the predictor stuff. - */ - sp->coderow = tif->tif_encoderow; - tif->tif_encoderow = PredictorEncodeRow; - sp->codestrip = tif->tif_encodestrip; - tif->tif_encodestrip = PredictorEncodeTile; - sp->codetile = tif->tif_encodetile; - tif->tif_encodetile = PredictorEncodeTile; - } - return (1); -} - -#define REPEAT4(n, op) \ - switch (n) { \ - default: { int i; for (i = n-4; i > 0; i--) { op; } } \ - case 4: op; \ - case 3: op; \ - case 2: op; \ - case 1: op; \ - case 0: ; \ - } - -static void -horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc) -{ - TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; - - char* cp = (char*) cp0; - if (cc > stride) { - cc -= stride; - /* - * Pipeline the most common cases. - */ - if (stride == 3) { - tif_int cr = cp[0]; - tif_int cg = cp[1]; - tif_int cb = cp[2]; - do { - cc -= 3, cp += 3; - cp[0] = (cr += cp[0]); - cp[1] = (cg += cp[1]); - cp[2] = (cb += cp[2]); - } while ((int32) cc > 0); - } else if (stride == 4) { - tif_int cr = cp[0]; - tif_int cg = cp[1]; - tif_int cb = cp[2]; - tif_int ca = cp[3]; - do { - cc -= 4, cp += 4; - cp[0] = (cr += cp[0]); - cp[1] = (cg += cp[1]); - cp[2] = (cb += cp[2]); - cp[3] = (ca += cp[3]); - } while ((int32) cc > 0); - } else { - do { - REPEAT4(stride, cp[stride] += *cp; cp++) - cc -= stride; - } while ((int32) cc > 0); - } - } -} - -static void -swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) -{ - TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; - uint16* wp = (uint16*) cp0; - tsize_t wc = cc / 2; - - if (wc > stride) { - TIFFSwabArrayOfShort(wp, wc); - wc -= stride; - do { - REPEAT4(stride, wp[stride] += wp[0]; wp++) - wc -= stride; - } while ((int32) wc > 0); - } -} - -static void -horAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) -{ - tsize_t stride = PredictorState(tif)->stride; - uint16* wp = (uint16*) cp0; - tsize_t wc = cc / 2; - - if (wc > stride) { - wc -= stride; - do { - REPEAT4(stride, wp[stride] += wp[0]; wp++) - wc -= stride; - } while ((int32) wc > 0); - } -} - -/* - * Decode a scanline and apply the predictor routine. - */ -static int -PredictorDecodeRow(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) -{ - TIFFPredictorState *sp = PredictorState(tif); - - assert(sp != NULL); - assert(sp->coderow != NULL); - assert(sp->pfunc != NULL); - if ((*sp->coderow)(tif, op0, occ0, s)) { - (*sp->pfunc)(tif, op0, occ0); - return (1); - } else - return (0); -} - -/* - * Decode a tile/strip and apply the predictor routine. - * Note that horizontal differencing must be done on a - * row-by-row basis. The width of a "row" has already - * been calculated at pre-decode time according to the - * strip/tile dimensions. - */ -static int -PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) -{ - TIFFPredictorState *sp = PredictorState(tif); - - assert(sp != NULL); - assert(sp->codetile != NULL); - if ((*sp->codetile)(tif, op0, occ0, s)) { - tsize_t rowsize = sp->rowsize; - assert(rowsize > 0); - assert(sp->pfunc != NULL); - while ((long)occ0 > 0) { - (*sp->pfunc)(tif, op0, (tsize_t) rowsize); - occ0 -= rowsize; - op0 += rowsize; - } - return (1); - } else - return (0); -} - -static void -horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc) -{ - TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; - char* cp = (char*) cp0; - - if (cc > stride) { - cc -= stride; - /* - * Pipeline the most common cases. - */ - if (stride == 3) { - int r1, g1, b1; - int r2 = cp[0]; - int g2 = cp[1]; - int b2 = cp[2]; - do { - r1 = cp[3]; cp[3] = r1-r2; r2 = r1; - g1 = cp[4]; cp[4] = g1-g2; g2 = g1; - b1 = cp[5]; cp[5] = b1-b2; b2 = b1; - cp += 3; - } while ((int32)(cc -= 3) > 0); - } else if (stride == 4) { - int r1, g1, b1, a1; - int r2 = cp[0]; - int g2 = cp[1]; - int b2 = cp[2]; - int a2 = cp[3]; - do { - r1 = cp[4]; cp[4] = r1-r2; r2 = r1; - g1 = cp[5]; cp[5] = g1-g2; g2 = g1; - b1 = cp[6]; cp[6] = b1-b2; b2 = b1; - a1 = cp[7]; cp[7] = a1-a2; a2 = a1; - cp += 4; - } while ((int32)(cc -= 4) > 0); - } else { - cp += cc - 1; - do { - REPEAT4(stride, cp[stride] -= cp[0]; cp--) - } while ((int32)(cc -= stride) > 0); - } - } -} - -static void -horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc) -{ - TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; - int16 *wp = (int16*) cp0; - tsize_t wc = cc/2; - - if (wc > stride) { - wc -= stride; - wp += wc - 1; - do { - REPEAT4(stride, wp[stride] -= wp[0]; wp--) - wc -= stride; - } while ((int32) wc > 0); - } -} - -static int -PredictorEncodeRow(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - TIFFPredictorState *sp = PredictorState(tif); - - assert(sp != NULL); - assert(sp->pfunc != NULL); - assert(sp->coderow != NULL); -/* XXX horizontal differencing alters user's data XXX */ - (*sp->pfunc)(tif, bp, cc); - return ((*sp->coderow)(tif, bp, cc, s)); -} - -static int -PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s) -{ - TIFFPredictorState *sp = PredictorState(tif); - tsize_t cc = cc0, rowsize; - tif_char* bp = bp0; - - assert(sp != NULL); - assert(sp->pfunc != NULL); - assert(sp->codetile != NULL); - rowsize = sp->rowsize; - assert(rowsize > 0); - while ((long)cc > 0) { - (*sp->pfunc)(tif, bp, (tsize_t) rowsize); - cc -= rowsize; - bp += rowsize; - } - return ((*sp->codetile)(tif, bp0, cc0, s)); -} - -#define FIELD_PREDICTOR (FIELD_CODEC+0) /* XXX */ - -static const TIFFFieldInfo predictFieldInfo[] = { - { TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, FIELD_PREDICTOR, - FALSE, FALSE, "Predictor" }, -}; -#define N(a) (sizeof (a) / sizeof (a[0])) - -static int -PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - TIFFPredictorState *sp = PredictorState(tif); - - switch (tag) { - case TIFFTAG_PREDICTOR: - sp->predictor = (uint16) va_arg(ap, int); - TIFFSetFieldBit(tif, FIELD_PREDICTOR); - break; - default: - return (*sp->vsetparent)(tif, tag, ap); - } - tif->tif_flags |= TIFF_DIRTYDIRECT; - return (1); -} - -static int -PredictorVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - TIFFPredictorState *sp = PredictorState(tif); - - switch (tag) { - case TIFFTAG_PREDICTOR: - *va_arg(ap, uint16*) = sp->predictor; - break; - default: - return (*sp->vgetparent)(tif, tag, ap); - } - return (1); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static void -PredictorPrintDir(TIFF* tif, FILE* fd, long flags) -{ - TIFFPredictorState* sp = PredictorState(tif); - - (void) flags; - if (TIFFFieldSet(tif,FIELD_PREDICTOR)) { - fprintf(fd, " Predictor: "); - switch (sp->predictor) { - case 1: fprintf(fd, "none "); break; - case 2: fprintf(fd, "horizontal differencing "); break; - } - fprintf(fd, "%u (0x%x)\n", sp->predictor, sp->predictor); - } - if (sp->printdir) - (*sp->printdir)(tif, fd, flags); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -int -TIFFPredictorInit(TIFF* tif) -{ - TIFFPredictorState* sp = PredictorState(tif); - - /* - * Merge codec-specific tag information and - * override parent get/set field methods. - */ - _TIFFMergeFieldInfo(tif, predictFieldInfo, N(predictFieldInfo)); - sp->vgetparent = tif->tif_vgetfield; - tif->tif_vgetfield = PredictorVGetField;/* hook for predictor tag */ - sp->vsetparent = tif->tif_vsetfield; - tif->tif_vsetfield = PredictorVSetField;/* hook for predictor tag */ - sp->printdir = tif->tif_printdir; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_printdir = PredictorPrintDir; /* hook for predictor tag */ -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - - sp->setupdecode = tif->tif_setupdecode; - tif->tif_setupdecode = PredictorSetupDecode; - sp->setupencode = tif->tif_setupencode; - tif->tif_setupencode = PredictorSetupEncode; - - sp->predictor = 1; /* default value */ - sp->pfunc = NULL; /* no predictor routine */ - return (1); -} diff --git a/src/libs/pdflib/libs/tiff/tif_predict.h b/src/libs/pdflib/libs/tiff/tif_predict.h deleted file mode 100644 index 48c84e0cef..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_predict.h +++ /dev/null @@ -1,61 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_predict.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1995-1997 Sam Leffler - * Copyright (c) 1995-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFFPREDICT_ -#define _TIFFPREDICT_ -/* - * ``Library-private'' Support for the Predictor Tag - */ - -/* - * Codecs that want to support the Predictor tag must place - * this structure first in their private state block so that - * the predictor code can cast tif_data to find its state. - */ -typedef struct { - int predictor; /* predictor tag value */ - int stride; /* sample stride over data */ - tsize_t rowsize; /* tile/strip row size */ - - TIFFPostMethod pfunc; /* horizontal differencer/accumulator */ - TIFFCodeMethod coderow; /* parent codec encode/decode row */ - TIFFCodeMethod codestrip; /* parent codec encode/decode strip */ - TIFFCodeMethod codetile; /* parent codec encode/decode tile */ - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ - TIFFPrintMethod printdir; /* super-class method */ - TIFFBoolMethod setupdecode; /* super-class method */ - TIFFBoolMethod setupencode; /* super-class method */ -} TIFFPredictorState; - -#if defined(__cplusplus) -extern "C" { -#endif -extern int TIFFPredictorInit(TIFF*); -#if defined(__cplusplus) -} -#endif -#endif /* _TIFFPREDICT_ */ diff --git a/src/libs/pdflib/libs/tiff/tif_read.c b/src/libs/pdflib/libs/tiff/tif_read.c deleted file mode 100644 index 602b9d6725..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_read.c +++ /dev/null @@ -1,636 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_read.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * Scanline-oriented Read Support - */ -#include "tiffiop.h" -#include -#include - -static int TIFFFillStrip(TIFF*, tstrip_t); -static int TIFFFillTile(TIFF*, ttile_t); -static int TIFFStartStrip(TIFF*, tstrip_t); -static int TIFFStartTile(TIFF*, ttile_t); -static int TIFFCheckRead(TIFF*, int); - -#define NOSTRIP ((tstrip_t) -1) /* undefined state */ -#define NOTILE ((ttile_t) -1) /* undefined state */ - -/* - * Seek to a random row+sample in a file. - */ -static int -TIFFSeek(TIFF* tif, uint32 row, tsample_t sample) -{ - register TIFFDirectory *td = &tif->tif_dir; - tstrip_t strip; - - if (row >= td->td_imagelength) { /* out of range */ - TIFFError(tif->tif_name, "%lu: Row out of range, max %lu", - (tif_long) row, (tif_long) td->td_imagelength); - return (0); - } - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { - if (sample >= td->td_samplesperpixel) { - TIFFError(tif->tif_name, - "%lu: Sample out of range, max %lu", - (tif_long)sample,(tif_long)td->td_samplesperpixel); - return (0); - } - strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip; - } else - strip = row / td->td_rowsperstrip; - if (strip != tif->tif_curstrip) { /* different strip, refill */ - if (!TIFFFillStrip(tif, strip)) - return (0); - } else if (row < tif->tif_row) { - /* - * Moving backwards within the same strip: backup - * to the start and then decode forward (below). - * - * NB: If you're planning on lots of random access within a - * strip, it's better to just read and decode the entire - * strip, and then access the decoded data in a random fashion. - */ - if (!TIFFStartStrip(tif, strip)) - return (0); - } - if (row != tif->tif_row) { - /* - * Seek forward to the desired row. - */ - if (!(*tif->tif_seek)(tif, row - tif->tif_row)) - return (0); - tif->tif_row = row; - } - return (1); -} - -int -TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) -{ - int e; - - if (!TIFFCheckRead(tif, 0)) - return (-1); - if( (e = TIFFSeek(tif, row, sample)) != 0) { - /* - * Decompress desired row into user buffer. - */ - e = (*tif->tif_decoderow) - (tif, (tidata_t) buf, tif->tif_scanlinesize, sample); - tif->tif_row++; - if (e) - (*tif->tif_postdecode)(tif, (tidata_t) buf, - tif->tif_scanlinesize); - } - return (e > 0 ? 1 : -1); -} - -/* - * Read a strip of data and decompress the specified - * amount into the user-supplied buffer. - */ -tsize_t -TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) -{ - TIFFDirectory *td = &tif->tif_dir; - uint32 nrows; - tsize_t stripsize; - tstrip_t sep_strip, strips_per_sep; - - if (!TIFFCheckRead(tif, 0)) - return (-1); - if (strip >= td->td_nstrips) { - TIFFError(tif->tif_name, "%ld: Strip out of range, max %ld", - (long) strip, (long) td->td_nstrips); - return (-1); - } - /* - * Calculate the strip size according to the number of - * rows in the strip (check for truncated last strip on any - * of the separations). - */ - if( td->td_rowsperstrip >= td->td_imagelength ) - strips_per_sep = 1; - else - strips_per_sep = (td->td_imagelength+td->td_rowsperstrip-1) - / td->td_rowsperstrip; - - sep_strip = strip % strips_per_sep; - - if (sep_strip != strips_per_sep-1 || - (nrows = td->td_imagelength % td->td_rowsperstrip) == 0) - nrows = td->td_rowsperstrip; - - stripsize = TIFFVStripSize(tif, nrows); - if (size == (tsize_t) -1) - size = stripsize; - else if (size > stripsize) - size = stripsize; - if (TIFFFillStrip(tif, strip) && (*tif->tif_decodestrip)(tif, - (tidata_t) buf, size, (tsample_t)(strip / td->td_stripsperimage))) { - (*tif->tif_postdecode)(tif, (tidata_t) buf, size); - return (size); - } else - return ((tsize_t) -1); -} - -static tsize_t -TIFFReadRawStrip1(TIFF* tif, - tstrip_t strip, tdata_t buf, tsize_t size, const char* module) -{ - TIFFDirectory *td = &tif->tif_dir; - - if (!isMapped(tif)) { - tsize_t cc; - - if (!SeekOK(tif, td->td_stripoffset[strip])) { - TIFFError(module, - "%s: Seek error at scanline %lu, strip %lu", - tif->tif_name, - (tif_long) tif->tif_row, (tif_long) strip); - return (-1); - } - cc = TIFFReadFile(tif, buf, size); - if (cc != size) { - TIFFError(module, - "%s: Read error at scanline %lu; got %lu bytes, expected %lu", - tif->tif_name, - (tif_long) tif->tif_row, - (tif_long) cc, - (tif_long) size); - return (-1); - } - } else { - if (td->td_stripoffset[strip] + size > tif->tif_size) { - TIFFError(module, - "%s: Read error at scanline %lu, strip %lu; got %lu bytes, expected %lu", - tif->tif_name, - (tif_long) tif->tif_row, - (tif_long) strip, - (tif_long)tif->tif_size-td->td_stripoffset[strip], - (tif_long) size); - return (-1); - } - _TIFFmemcpy(buf, tif->tif_base+td->td_stripoffset[strip], size); - } - return (size); -} - -/* - * Read a strip of data from the file. - */ -tsize_t -TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) -{ - static const char module[] = "TIFFReadRawStrip"; - TIFFDirectory *td = &tif->tif_dir; - tsize_t bytecount; - - if (!TIFFCheckRead(tif, 0)) - return ((tsize_t) -1); - if (strip >= td->td_nstrips) { - TIFFError(tif->tif_name, "%lu: Strip out of range, max %lu", - (tif_long) strip, (tif_long) td->td_nstrips); - return ((tsize_t) -1); - } - bytecount = td->td_stripbytecount[strip]; - if (bytecount <= 0) { - TIFFError(tif->tif_name, - "%lu: Invalid strip byte count, strip %lu", - (tif_long) bytecount, (tif_long) strip); - return ((tsize_t) -1); - } - if (size != (tsize_t)-1 && size < bytecount) - bytecount = size; - return (TIFFReadRawStrip1(tif, strip, buf, bytecount, module)); -} - -/* - * Read the specified strip and setup for decoding. - * The data buffer is expanded, as necessary, to - * hold the strip's data. - */ -static int -TIFFFillStrip(TIFF* tif, tstrip_t strip) -{ - static const char module[] = "TIFFFillStrip"; - TIFFDirectory *td = &tif->tif_dir; - tsize_t bytecount; - - bytecount = td->td_stripbytecount[strip]; - if (bytecount <= 0) { - TIFFError(tif->tif_name, - "%lu: Invalid strip byte count, strip %lu", - (tif_long) bytecount, (tif_long) strip); - return (0); - } - if (isMapped(tif) && - (isFillOrder(tif, td->td_fillorder) - || (tif->tif_flags & TIFF_NOBITREV))) { - /* - * The image is mapped into memory and we either don't - * need to flip bits or the compression routine is going - * to handle this operation itself. In this case, avoid - * copying the raw data and instead just reference the - * data from the memory mapped file image. This assumes - * that the decompression routines do not modify the - * contents of the raw data buffer (if they try to, - * the application will get a fault since the file is - * mapped read-only). - */ - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) - _TIFFfree(tif, tif->tif_rawdata); - tif->tif_flags &= ~TIFF_MYBUFFER; - if ( td->td_stripoffset[strip] + bytecount > tif->tif_size) { - /* - * This error message might seem strange, but it's - * what would happen if a read were done instead. - */ - TIFFError(module, - "%s: Read error on strip %lu; got %lu bytes, expected %lu", - tif->tif_name, - (tif_long) strip, - (tif_long)tif->tif_size-td->td_stripoffset[strip], - (tif_long) bytecount); - tif->tif_curstrip = NOSTRIP; - return (0); - } - tif->tif_rawdatasize = bytecount; - tif->tif_rawdata = tif->tif_base + td->td_stripoffset[strip]; - } else { - /* - * Expand raw data buffer, if needed, to - * hold data strip coming from file - * (perhaps should set upper bound on - * the size of a buffer we'll use?). - */ - if (bytecount > tif->tif_rawdatasize) { - tif->tif_curstrip = NOSTRIP; - if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { - TIFFError(module, - "%s: Data buffer too small to hold strip %lu", - tif->tif_name, (tif_long) strip); - return (0); - } - if (!TIFFReadBufferSetup(tif, 0, - TIFFroundup(bytecount, 1024))) - return (0); - } - if (TIFFReadRawStrip1(tif, strip, (tif_char *)tif->tif_rawdata, - bytecount, module) != bytecount) - return (0); - if (!isFillOrder(tif, td->td_fillorder) && - (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits(tif->tif_rawdata, bytecount); - } - return (TIFFStartStrip(tif, strip)); -} - -/* - * Tile-oriented Read Support - * Contributed by Nancy Cam (Silicon Graphics). - */ - -/* - * Read and decompress a tile of data. The - * tile is selected by the (x,y,z,s) coordinates. - */ -tsize_t -TIFFReadTile(TIFF* tif, - tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s) -{ - if (!TIFFCheckRead(tif, 1) || !TIFFCheckTile(tif, x, y, z, s)) - return (-1); - return (TIFFReadEncodedTile(tif, - TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1)); -} - -/* - * Read a tile of data and decompress the specified - * amount into the user-supplied buffer. - */ -tsize_t -TIFFReadEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t tilesize = tif->tif_tilesize; - - if (!TIFFCheckRead(tif, 1)) - return (-1); - if (tile >= td->td_nstrips) { - TIFFError(tif->tif_name, "%ld: Tile out of range, max %ld", - (long) tile, (tif_long) td->td_nstrips); - return (-1); - } - if (size == (tsize_t) -1) - size = tilesize; - else if (size > tilesize) - size = tilesize; - if (TIFFFillTile(tif, tile) && (*tif->tif_decodetile)(tif, - (tidata_t) buf, size, (tsample_t)(tile/td->td_stripsperimage))) { - (*tif->tif_postdecode)(tif, (tidata_t) buf, size); - return (size); - } else - return (-1); -} - -static tsize_t -TIFFReadRawTile1(TIFF* tif, - ttile_t tile, tdata_t buf, tsize_t size, const char* module) -{ - TIFFDirectory *td = &tif->tif_dir; - - if (!isMapped(tif)) { - tsize_t cc; - - if (!SeekOK(tif, td->td_stripoffset[tile])) { - TIFFError(module, - "%s: Seek error at row %ld, col %ld, tile %ld", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (long) tile); - return ((tsize_t) -1); - } - cc = TIFFReadFile(tif, buf, size); - if (cc != size) { - TIFFError(module, - "%s: Read error at row %ld, col %ld; got %lu bytes, expected %lu", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (tif_long) cc, - (tif_long) size); - return ((tsize_t) -1); - } - } else { - if (td->td_stripoffset[tile] + size > tif->tif_size) { - TIFFError(module, - "%s: Read error at row %ld, col %ld, tile %ld; got %lu bytes, expected %lu", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (long) tile, - (tif_long) tif->tif_size - td->td_stripoffset[tile], - (tif_long) size); - return ((tsize_t) -1); - } - _TIFFmemcpy(buf, tif->tif_base+td->td_stripoffset[tile], size); - } - return (size); -} - -/* - * Read a tile of data from the file. - */ -tsize_t -TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) -{ - static const char module[] = "TIFFReadRawTile"; - TIFFDirectory *td = &tif->tif_dir; - tsize_t bytecount; - - if (!TIFFCheckRead(tif, 1)) - return ((tsize_t) -1); - if (tile >= td->td_nstrips) { - TIFFError(tif->tif_name, "%lu: Tile out of range, max %lu", - (tif_long) tile, (tif_long) td->td_nstrips); - return ((tsize_t) -1); - } - bytecount = td->td_stripbytecount[tile]; - if (size != (tsize_t) -1 && size < bytecount) - bytecount = size; - return (TIFFReadRawTile1(tif, tile, buf, bytecount, module)); -} - -/* - * Read the specified tile and setup for decoding. - * The data buffer is expanded, as necessary, to - * hold the tile's data. - */ -static int -TIFFFillTile(TIFF* tif, ttile_t tile) -{ - static const char module[] = "TIFFFillTile"; - TIFFDirectory *td = &tif->tif_dir; - tsize_t bytecount; - - bytecount = td->td_stripbytecount[tile]; - if (bytecount <= 0) { - TIFFError(tif->tif_name, - "%lu: Invalid tile byte count, tile %lu", - (tif_long) bytecount, (tif_long) tile); - return (0); - } - if (isMapped(tif) && - (isFillOrder(tif, td->td_fillorder) || - (tif->tif_flags & TIFF_NOBITREV))) { - /* - * The image is mapped into memory and we either don't - * need to flip bits or the compression routine is going - * to handle this operation itself. In this case, avoid - * copying the raw data and instead just reference the - * data from the memory mapped file image. This assumes - * that the decompression routines do not modify the - * contents of the raw data buffer (if they try to, - * the application will get a fault since the file is - * mapped read-only). - */ - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) - _TIFFfree(tif, tif->tif_rawdata); - tif->tif_flags &= ~TIFF_MYBUFFER; - if ( td->td_stripoffset[tile] + bytecount > tif->tif_size) { - tif->tif_curtile = NOTILE; - return (0); - } - tif->tif_rawdatasize = bytecount; - tif->tif_rawdata = tif->tif_base + td->td_stripoffset[tile]; - } else { - /* - * Expand raw data buffer, if needed, to - * hold data tile coming from file - * (perhaps should set upper bound on - * the size of a buffer we'll use?). - */ - if (bytecount > tif->tif_rawdatasize) { - tif->tif_curtile = NOTILE; - if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { - TIFFError(module, - "%s: Data buffer too small to hold tile %ld", - tif->tif_name, (long) tile); - return (0); - } - if (!TIFFReadBufferSetup(tif, 0, - TIFFroundup(bytecount, 1024))) - return (0); - } - if (TIFFReadRawTile1(tif, tile, (tif_char *)tif->tif_rawdata, - bytecount, module) != bytecount) - return (0); - if (!isFillOrder(tif, td->td_fillorder) && - (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits(tif->tif_rawdata, bytecount); - } - return (TIFFStartTile(tif, tile)); -} - -/* - * Setup the raw data buffer in preparation for - * reading a strip of raw data. If the buffer - * is specified as zero, then a buffer of appropriate - * size is allocated by the library. Otherwise, - * the client must guarantee that the buffer is - * large enough to hold any individual strip of - * raw data. - */ -int -TIFFReadBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) -{ - static const char module[] = "TIFFReadBufferSetup"; - - if (tif->tif_rawdata) { - if (tif->tif_flags & TIFF_MYBUFFER) - _TIFFfree(tif, tif->tif_rawdata); - tif->tif_rawdata = NULL; - } - if (bp) { - tif->tif_rawdatasize = size; - tif->tif_rawdata = (tidata_t) bp; - tif->tif_flags &= ~TIFF_MYBUFFER; - } else { - tif->tif_rawdatasize = TIFFroundup(size, 1024); - tif->tif_rawdata = - (tidata_t) _TIFFmalloc(tif, tif->tif_rawdatasize); - tif->tif_flags |= TIFF_MYBUFFER; - } - if (tif->tif_rawdata == NULL) { - TIFFError(module, - "%s: No space for data buffer at scanline %ld", - tif->tif_name, (long) tif->tif_row); - tif->tif_rawdatasize = 0; - return (0); - } - return (1); -} - -/* - * Set state to appear as if a - * strip has just been read in. - */ -static int -TIFFStartStrip(TIFF* tif, tstrip_t strip) -{ - TIFFDirectory *td = &tif->tif_dir; - - if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { - if (!(*tif->tif_setupdecode)(tif)) - return (0); - tif->tif_flags |= TIFF_CODERSETUP; - } - tif->tif_curstrip = strip; - tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; - tif->tif_rawcp = tif->tif_rawdata; - tif->tif_rawcc = td->td_stripbytecount[strip]; - return ((*tif->tif_predecode)(tif, - (tsample_t)(strip / td->td_stripsperimage))); -} - -/* - * Set state to appear as if a - * tile has just been read in. - */ -static int -TIFFStartTile(TIFF* tif, ttile_t tile) -{ - TIFFDirectory *td = &tif->tif_dir; - - if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { - if (!(*tif->tif_setupdecode)(tif)) - return (0); - tif->tif_flags |= TIFF_CODERSETUP; - } - tif->tif_curtile = tile; - tif->tif_row = - (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) * - td->td_tilelength; - tif->tif_col = - (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) * - td->td_tilewidth; - tif->tif_rawcp = tif->tif_rawdata; - tif->tif_rawcc = td->td_stripbytecount[tile]; - return ((*tif->tif_predecode)(tif, - (tsample_t)(tile/td->td_stripsperimage))); -} - -static int -TIFFCheckRead(TIFF* tif, int tiles) -{ - if (tif->tif_mode == O_WRONLY) { - TIFFError(tif->tif_name, "File not open for reading"); - return (0); - } - if (tiles ^ isTiled(tif)) { - TIFFError(tif->tif_name, tiles ? - "Can not read tiles from a stripped image" : - "Can not read scanlines from a tiled image"); - return (0); - } - return (1); -} - -void -_TIFFNoPostDecode(TIFF* tif, tidata_t buf, tsize_t cc) -{ - (void) tif; (void) buf; (void) cc; -} - -void -_TIFFSwab16BitData(TIFF* tif, tidata_t buf, tsize_t cc) -{ - (void) tif; - assert((cc & 1) == 0); - TIFFSwabArrayOfShort((uint16*) buf, cc/2); -} - -void -_TIFFSwab32BitData(TIFF* tif, tidata_t buf, tsize_t cc) -{ - (void) tif; - assert((cc & 3) == 0); - TIFFSwabArrayOfLong((uint32*) buf, cc/4); -} - -void -_TIFFSwab64BitData(TIFF* tif, tidata_t buf, tsize_t cc) -{ - (void) tif; - assert((cc & 7) == 0); - TIFFSwabArrayOfDouble((double*) buf, cc/8); -} diff --git a/src/libs/pdflib/libs/tiff/tif_strip.c b/src/libs/pdflib/libs/tiff/tif_strip.c deleted file mode 100644 index dc3eb6c21b..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_strip.c +++ /dev/null @@ -1,192 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_strip.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1991-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Strip-organized Image Support Routines. - */ -#include "tiffiop.h" - -/* - * Compute which strip a (row,sample) value is in. - */ -tstrip_t -TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample) -{ - TIFFDirectory *td = &tif->tif_dir; - tstrip_t strip; - - strip = row / td->td_rowsperstrip; - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { - if (sample >= td->td_samplesperpixel) { - TIFFError(tif->tif_name, - "%u: Sample out of range, max %u", - sample, td->td_samplesperpixel); - return ((tstrip_t) 0); - } - strip += sample*td->td_stripsperimage; - } - return (strip); -} - -/* - * Compute how many strips are in an image. - */ -tstrip_t -TIFFNumberOfStrips(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tstrip_t nstrips; - - nstrips = (td->td_rowsperstrip == (uint32) -1 ? - (td->td_imagelength != 0 ? 1 : 0) : - TIFFhowmany(td->td_imagelength, td->td_rowsperstrip)); - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - nstrips *= td->td_samplesperpixel; - return (nstrips); -} - -/* - * Compute the # bytes in a variable height, row-aligned strip. - */ -tsize_t -TIFFVStripSize(TIFF* tif, uint32 nrows) -{ - TIFFDirectory *td = &tif->tif_dir; - - if (nrows == (uint32) -1) - nrows = td->td_imagelength; -#ifdef YCBCR_SUPPORT - if (td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_photometric == PHOTOMETRIC_YCBCR && - !isUpSampled(tif)) { - /* - * Packed YCbCr data contain one Cb+Cr for every - * HorizontalSampling*VerticalSampling Y values. - * Must also roundup width and height when calculating - * since images that are not a multiple of the - * horizontal/vertical subsampling area include - * YCbCr data for the extended image. - */ - tsize_t w = - TIFFroundup(td->td_imagewidth, td->td_ycbcrsubsampling[0]); - tsize_t scanline = TIFFhowmany(w*td->td_bitspersample, 8); - tsize_t samplingarea = - td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1]; - nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]); - /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ - return ((tsize_t) - (nrows*scanline + 2*(nrows*scanline / samplingarea))); - } else -#endif - return ((tsize_t)(nrows * TIFFScanlineSize(tif))); -} - -/* - * Compute the # bytes in a (row-aligned) strip. - * - * Note that if RowsPerStrip is larger than the - * recorded ImageLength, then the strip size is - * truncated to reflect the actual space required - * to hold the strip. - */ -tsize_t -TIFFStripSize(TIFF* tif) -{ - TIFFDirectory* td = &tif->tif_dir; - uint32 rps = td->td_rowsperstrip; - if (rps > td->td_imagelength) - rps = td->td_imagelength; - return (TIFFVStripSize(tif, rps)); -} - -/* - * Compute a default strip size based on the image - * characteristics and a requested value. If the - * request is <1 then we choose a strip size according - * to certain heuristics. - */ -uint32 -TIFFDefaultStripSize(TIFF* tif, uint32 request) -{ - return (*tif->tif_defstripsize)(tif, request); -} - -uint32 -_TIFFDefaultStripSize(TIFF* tif, uint32 s) -{ - if ((int32) s < 1) { - /* - * If RowsPerStrip is unspecified, try to break the - * image up into strips that are approximately 8Kbytes. - */ - tsize_t scanline = TIFFScanlineSize(tif); - s = (uint32)(8*1024) / (scanline == 0 ? 1 : scanline); - if (s == 0) /* very wide images */ - s = 1; - } - return (s); -} - -/* - * Return the number of bytes to read/write in a call to - * one of the scanline-oriented i/o routines. Note that - * this number may be 1/samples-per-pixel if data is - * stored as separate planes. - */ -tsize_t -TIFFScanlineSize(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - scanline = td->td_bitspersample * td->td_imagewidth; - if (td->td_planarconfig == PLANARCONFIG_CONTIG) - scanline *= td->td_samplesperpixel; - return ((tsize_t) TIFFhowmany(scanline, 8)); -} - -/* - * Return the number of bytes required to store a complete - * decoded and packed raster scanline (as opposed to the - * I/O size returned by TIFFScanlineSize which may be less - * if data is store as separate planes). - */ -tsize_t -TIFFRasterScanlineSize(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - scanline = td->td_bitspersample * td->td_imagewidth; - if (td->td_planarconfig == PLANARCONFIG_CONTIG) { - scanline *= td->td_samplesperpixel; - return ((tsize_t) TIFFhowmany(scanline, 8)); - } else - return ((tsize_t) - TIFFhowmany(scanline, 8)*td->td_samplesperpixel); -} diff --git a/src/libs/pdflib/libs/tiff/tif_swab.c b/src/libs/pdflib/libs/tiff/tif_swab.c deleted file mode 100644 index 824e5d3ded..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_swab.c +++ /dev/null @@ -1,205 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_swab.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library Bit & Byte Swapping Support. - * - * XXX We assume short = 16-bits and long = 32-bits XXX - */ -#include "tiffiop.h" - -void -TIFFSwabShort(uint16* wp) -{ - register tif_char* cp = (tif_char*) wp; - int t; - - t = cp[1]; cp[1] = cp[0]; cp[0] = t; -} - -void -TIFFSwabLong(uint32* lp) -{ - register tif_char* cp = (tif_char*) lp; - int t; - - t = cp[3]; cp[3] = cp[0]; cp[0] = t; - t = cp[2]; cp[2] = cp[1]; cp[1] = t; -} - -void -TIFFSwabArrayOfShort(uint16* wp, register tif_long n) -{ - register tif_char* cp; - register int t; - - /* XXX unroll loop some */ - while (n-- > 0) { - cp = (tif_char*) wp; - t = cp[1]; cp[1] = cp[0]; cp[0] = t; - wp++; - } -} - -void -TIFFSwabArrayOfLong(register uint32* lp, register tif_long n) -{ - register unsigned char *cp; - register int t; - - /* XXX unroll loop some */ - while (n-- > 0) { - cp = (unsigned char *)lp; - t = cp[3]; cp[3] = cp[0]; cp[0] = t; - t = cp[2]; cp[2] = cp[1]; cp[1] = t; - lp++; - } -} - -void -TIFFSwabDouble(double *dp) -{ - register uint32* lp = (uint32*) dp; - uint32 t; - - TIFFSwabArrayOfLong(lp, 2); - t = lp[0]; lp[0] = lp[1]; lp[1] = t; -} - -void -TIFFSwabArrayOfDouble(double* dp, register tif_long n) -{ - register uint32* lp = (uint32*) dp; - register uint32 t; - - TIFFSwabArrayOfLong(lp, n + n); - while (n-- > 0) { - t = lp[0]; lp[0] = lp[1]; lp[1] = t; - lp += 2; - } -} - -/* - * Bit reversal tables. TIFFBitRevTable[] gives - * the bit reversed value of . Used in various - * places in the library when the FillOrder requires - * bit reversal of byte values (e.g. CCITT Fax 3 - * encoding/decoding). TIFFNoBitRevTable is provided - * for algorithms that want an equivalent table that - * do not reverse bit values. - */ -static const unsigned char TIFFBitRevTable[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 -}; -static const unsigned char TIFFNoBitRevTable[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, -}; - -const unsigned char* -TIFFGetBitRevTable(int reversed) -{ - return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable); -} - -void -TIFFReverseBits(register tif_char* cp, register tif_long n) -{ - for (; n > 8; n -= 8) { - cp[0] = TIFFBitRevTable[cp[0]]; - cp[1] = TIFFBitRevTable[cp[1]]; - cp[2] = TIFFBitRevTable[cp[2]]; - cp[3] = TIFFBitRevTable[cp[3]]; - cp[4] = TIFFBitRevTable[cp[4]]; - cp[5] = TIFFBitRevTable[cp[5]]; - cp[6] = TIFFBitRevTable[cp[6]]; - cp[7] = TIFFBitRevTable[cp[7]]; - cp += 8; - } - while (n-- > 0) - *cp = TIFFBitRevTable[*cp], cp++; -} diff --git a/src/libs/pdflib/libs/tiff/tif_thunder.c b/src/libs/pdflib/libs/tiff/tif_thunder.c deleted file mode 100644 index 70f9968696..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_thunder.c +++ /dev/null @@ -1,154 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_thunder.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef THUNDER_SUPPORT -/* - * TIFF Library. - * - * ThunderScan 4-bit Compression Algorithm Support - */ - -/* - * ThunderScan uses an encoding scheme designed for - * 4-bit pixel values. Data is encoded in bytes, with - * each byte split into a 2-bit code word and a 6-bit - * data value. The encoding gives raw data, runs of - * pixels, or pixel values encoded as a delta from the - * previous pixel value. For the latter, either 2-bit - * or 3-bit delta values are used, with the deltas packed - * into a single byte. - */ -#define THUNDER_DATA 0x3f /* mask for 6-bit data */ -#define THUNDER_CODE 0xc0 /* mask for 2-bit code word */ -/* code values */ -#define THUNDER_RUN 0x00 /* run of pixels w/ encoded count */ -#define THUNDER_2BITDELTAS 0x40 /* 3 pixels w/ encoded 2-bit deltas */ -#define DELTA2_SKIP 2 /* skip code for 2-bit deltas */ -#define THUNDER_3BITDELTAS 0x80 /* 2 pixels w/ encoded 3-bit deltas */ -#define DELTA3_SKIP 4 /* skip code for 3-bit deltas */ -#define THUNDER_RAW 0xc0 /* raw data encoded */ - -static const int twobitdeltas[4] = { 0, 1, 0, -1 }; -static const int threebitdeltas[8] = { 0, 1, 2, 3, 0, -3, -2, -1 }; - -#define SETPIXEL(op, v) { \ - lastpixel = (v) & 0xf; \ - if (npixels++ & 1) \ - *op++ |= lastpixel; \ - else \ - op[0] = lastpixel << 4; \ -} - -static int -ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels) -{ - register tif_char *bp; - register tsize_t cc; - tif_int lastpixel; - tsize_t npixels; - - bp = (tif_char *)tif->tif_rawcp; - cc = tif->tif_rawcc; - lastpixel = 0; - npixels = 0; - while (cc > 0 && npixels < maxpixels) { - int n, delta; - - n = *bp++, cc--; - switch (n & THUNDER_CODE) { - case THUNDER_RUN: /* pixel run */ - /* - * Replicate the last pixel n times, - * where n is the lower-order 6 bits. - */ - if (npixels & 1) { - op[0] |= lastpixel; - lastpixel = *op++; npixels++; n--; - } else - lastpixel |= lastpixel << 4; - npixels += n; - for (; n > 0; n -= 2) - *op++ = lastpixel; - if (n == -1) - *--op &= 0xf0; - lastpixel &= 0xf; - break; - case THUNDER_2BITDELTAS: /* 2-bit deltas */ - if ((delta = ((n >> 4) & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); - if ((delta = ((n >> 2) & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); - if ((delta = (n & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); - break; - case THUNDER_3BITDELTAS: /* 3-bit deltas */ - if ((delta = ((n >> 3) & 7)) != DELTA3_SKIP) - SETPIXEL(op, lastpixel + threebitdeltas[delta]); - if ((delta = (n & 7)) != DELTA3_SKIP) - SETPIXEL(op, lastpixel + threebitdeltas[delta]); - break; - case THUNDER_RAW: /* raw data */ - SETPIXEL(op, n); - break; - } - } - tif->tif_rawcp = (tidata_t) bp; - tif->tif_rawcc = cc; - if (npixels != maxpixels) { - TIFFError(tif->tif_name, - "ThunderDecode: %s data at scanline %ld (%lu != %lu)", - npixels < maxpixels ? "Not enough" : "Too much", - (long) tif->tif_row, (long) npixels, (long) maxpixels); - return (0); - } - return (1); -} - -static int -ThunderDecodeRow(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) -{ - tidata_t row = buf; - - (void) s; - while ((long)occ > 0) { - if (!ThunderDecode(tif, row, tif->tif_dir.td_imagewidth)) - return (0); - occ -= tif->tif_scanlinesize; - row += tif->tif_scanlinesize; - } - return (1); -} - -int -TIFFInitThunderScan(TIFF* tif, int scheme) -{ - (void) scheme; - tif->tif_decoderow = ThunderDecodeRow; - tif->tif_decodestrip = ThunderDecodeRow; - return (1); -} -#endif /* THUNDER_SUPPORT */ diff --git a/src/libs/pdflib/libs/tiff/tif_tile.c b/src/libs/pdflib/libs/tiff/tif_tile.c deleted file mode 100644 index 8aa105b3a8..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_tile.c +++ /dev/null @@ -1,219 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_tile.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1991-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - * - * Tiled Image Support Routines. - */ -#include "tiffiop.h" - -/* - * Compute which tile an (x,y,z,s) value is in. - */ -ttile_t -TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) -{ - TIFFDirectory *td = &tif->tif_dir; - uint32 dx = td->td_tilewidth; - uint32 dy = td->td_tilelength; - uint32 dz = td->td_tiledepth; - ttile_t tile = 1; - - if (td->td_imagedepth == 1) - z = 0; - if (dx == (uint32) -1) - dx = td->td_imagewidth; - if (dy == (uint32) -1) - dy = td->td_imagelength; - if (dz == (uint32) -1) - dz = td->td_imagedepth; - if (dx != 0 && dy != 0 && dz != 0) { - uint32 xpt = TIFFhowmany(td->td_imagewidth, dx); - uint32 ypt = TIFFhowmany(td->td_imagelength, dy); - uint32 zpt = TIFFhowmany(td->td_imagedepth, dz); - - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - tile = (xpt*ypt*zpt)*s + - (xpt*ypt)*(z/dz) + - xpt*(y/dy) + - x/dx; - else - tile = (xpt*ypt)*(z/dz) + xpt*(y/dy) + x/dx + s; - } - return (tile); -} - -/* - * Check an (x,y,z,s) coordinate - * against the image bounds. - */ -int -TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) -{ - TIFFDirectory *td = &tif->tif_dir; - - if (x >= td->td_imagewidth) { - TIFFError(tif->tif_name, "Col %ld out of range, max %lu", - (long) x, (tif_long) td->td_imagewidth); - return (0); - } - if (y >= td->td_imagelength) { - TIFFError(tif->tif_name, "Row %ld out of range, max %lu", - (long) y, (tif_long) td->td_imagelength); - return (0); - } - if (z >= td->td_imagedepth) { - TIFFError(tif->tif_name, "Depth %ld out of range, max %lu", - (long) z, (tif_long) td->td_imagedepth); - return (0); - } - if (td->td_planarconfig == PLANARCONFIG_SEPARATE && - s >= td->td_samplesperpixel) { - TIFFError(tif->tif_name, "Sample %d out of range, max %u", - (int) s, td->td_samplesperpixel); - return (0); - } - return (1); -} - -/* - * Compute how many tiles are in an image. - */ -ttile_t -TIFFNumberOfTiles(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - uint32 dx = td->td_tilewidth; - uint32 dy = td->td_tilelength; - uint32 dz = td->td_tiledepth; - ttile_t ntiles; - - if (dx == (uint32) -1) - dx = td->td_imagewidth; - if (dy == (uint32) -1) - dy = td->td_imagelength; - if (dz == (uint32) -1) - dz = td->td_imagedepth; - ntiles = (dx == 0 || dy == 0 || dz == 0) ? 0 : - (TIFFhowmany(td->td_imagewidth, dx) * - TIFFhowmany(td->td_imagelength, dy) * - TIFFhowmany(td->td_imagedepth, dz)); - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - ntiles *= td->td_samplesperpixel; - return (ntiles); -} - -/* - * Compute the # bytes in each row of a tile. - */ -tsize_t -TIFFTileRowSize(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t rowsize; - - if (td->td_tilelength == 0 || td->td_tilewidth == 0) - return ((tsize_t) 0); - rowsize = td->td_bitspersample * td->td_tilewidth; - if (td->td_planarconfig == PLANARCONFIG_CONTIG) - rowsize *= td->td_samplesperpixel; - return ((tsize_t) TIFFhowmany(rowsize, 8)); -} - -/* - * Compute the # bytes in a variable length, row-aligned tile. - */ -tsize_t -TIFFVTileSize(TIFF* tif, uint32 nrows) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t tilesize; - - if (td->td_tilelength == 0 || td->td_tilewidth == 0 || - td->td_tiledepth == 0) - return ((tsize_t) 0); -#ifdef YCBCR_SUPPORT - if (td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_photometric == PHOTOMETRIC_YCBCR && - !isUpSampled(tif)) { - /* - * Packed YCbCr data contain one Cb+Cr for every - * HorizontalSampling*VerticalSampling Y values. - * Must also roundup width and height when calculating - * since images that are not a multiple of the - * horizontal/vertical subsampling area include - * YCbCr data for the extended image. - */ - tsize_t w = - TIFFroundup(td->td_tilewidth, td->td_ycbcrsubsampling[0]); - tsize_t rowsize = TIFFhowmany(w*td->td_bitspersample, 8); - tsize_t samplingarea = - td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1]; - nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]); - /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ - tilesize = nrows*rowsize + 2*(nrows*rowsize / samplingarea); - } else -#endif - tilesize = nrows * TIFFTileRowSize(tif); - return ((tsize_t)(tilesize * td->td_tiledepth)); -} - -/* - * Compute the # bytes in a row-aligned tile. - */ -tsize_t -TIFFTileSize(TIFF* tif) -{ - return (TIFFVTileSize(tif, tif->tif_dir.td_tilelength)); -} - -/* - * Compute a default tile size based on the image - * characteristics and a requested value. If a - * request is <1 then we choose a size according - * to certain heuristics. - */ -void -TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) -{ - (*tif->tif_deftilesize)(tif, tw, th); -} - -void -_TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) -{ - (void) tif; - if (*(int32*) tw < 1) - *tw = 256; - if (*(int32*) th < 1) - *th = 256; - /* roundup to a multiple of 16 per the spec */ - if (*tw & 0xf) - *tw = TIFFroundup(*tw, 16); - if (*th & 0xf) - *th = TIFFroundup(*th, 16); -} diff --git a/src/libs/pdflib/libs/tiff/tif_unix.c b/src/libs/pdflib/libs/tiff/tif_unix.c deleted file mode 100644 index 00c82e316a..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_unix.c +++ /dev/null @@ -1,223 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_unix.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library UNIX-specific Routines. - */ -#include "tiffiop.h" -#include "pc_config.h" -#include - -static tsize_t -_tiffReadProc(void* fd, tdata_t buf, tsize_t size) -{ - return ((tsize_t) fread(buf, 1, (size_t) size, (FILE *)fd)); -} - -static tsize_t -_tiffWriteProc(void* fd, tdata_t buf, tsize_t size) -{ - return ((tsize_t) fwrite(buf, 1, (size_t) size, (FILE *)fd)); -} - -static toff_t -_tiffSeekProc(void* fd, toff_t off, int whence) -{ - return ((toff_t) fseek((FILE *)fd, (long) off, whence)); -} - -static int -_tiffCloseProc(void* fd) -{ - return (fclose((FILE *)fd)); -} - -static toff_t -_tiffSizeProc(void* fd) -{ -#if defined(MVS) && defined(I370) -#define PDF_FTELL_BUSIZE 32000 - - char buf[PDF_FTELL_BUSIZE]; - size_t filelen = 0; - - fseek((FILE *)fd, 0, SEEK_SET); - - while (!feof((FILE *)fd)) - filelen += fread((void *) buf, 1, PDF_FTELL_BUSIZE, (FILE *)fd); - - return filelen; -#else - fseek((FILE *)fd, 0, SEEK_END); - return (toff_t) ftell((FILE *)fd); -#endif -} - -#ifdef HAVE_MMAP -#include - -static int -_tiffMapProc(void* fd, tdata_t* pbase, toff_t* psize) -{ - toff_t size = _tiffSizeProc((FILE *)fd); - if (size != (toff_t) -1) { - *pbase = (tdata_t) - mmap(0, size, PROT_READ, MAP_SHARED, (FILE *) fd, 0); - if (*pbase != (tdata_t) -1) { - *psize = size; - return (1); - } - } - return (0); -} - -static void -_tiffUnmapProc(void* fd, tdata_t base, toff_t size) -{ - (void) fd; - (void) munmap(base, (off_t) size); -} -#else /* !HAVE_MMAP */ -static int -_tiffMapProc(void* fd, tdata_t* pbase, toff_t* psize) -{ - (void) fd; (void) pbase; (void) psize; - return (0); -} - -static void -_tiffUnmapProc(void* fd, tdata_t base, toff_t size) -{ - (void) fd; (void) base; (void) size; -} -#endif /* !HAVE_MMAP */ - -/* - * Open a TIFF file descriptor for read/writing. - */ -TIFF* -TIFFFdOpen(void* fd, const char* name, const char* mode, void* pdflib_opaque, - TIFFmallocHandler malloc_h, TIFFreallocHandler realloc_h, - TIFFfreeHandler free_h, TIFFErrorHandler error_h, - TIFFErrorHandler warn_h) -{ - TIFF* tif; - - tif = TIFFClientOpen(name, mode, fd, - _tiffReadProc, _tiffWriteProc, - _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, - _tiffMapProc, _tiffUnmapProc, pdflib_opaque, - malloc_h, realloc_h, free_h, error_h, warn_h); - if (tif) - tif->tif_fd = (FILE *)fd; - return (tif); -} - -/* - * Open a TIFF file for read/writing. - */ -TIFF* -TIFFOpen(const char* name, const char* mode, void* pdflib_opaque, - TIFFmallocHandler malloc_h, TIFFreallocHandler realloc_h, - TIFFfreeHandler free_h, TIFFErrorHandler error_h, - TIFFErrorHandler warn_h) -{ - static const char module[] = "TIFFOpen"; - FILE *fd; - - if ((fd = fopen(name, READBMODE)) == NULL) { - TIFFError(module, "%s: Cannot open", name); - return ((TIFF *)0); - } - return (TIFFFdOpen(fd, name, mode, pdflib_opaque, - malloc_h, realloc_h, free_h, error_h, warn_h)); -} - -void* -_TIFFmalloc(TIFF* tif, tsize_t s) -{ - if (tif->pdflib_malloc != NULL) - return (tif->pdflib_malloc(tif, (size_t) s)); - else - return (malloc((size_t) s)); -} - -void -_TIFFfree(TIFF* tif, tdata_t p) -{ - if (tif->pdflib_free != NULL) - tif->pdflib_free(tif, p); - else - free(p); -} - -void* -_TIFFrealloc(TIFF* tif, tdata_t p, tsize_t s) -{ - if (tif->pdflib_realloc != NULL) - return (tif->pdflib_realloc(tif, p, (size_t) s)); - else - return (realloc(p, (size_t) s)); -} - -void -_TIFFmemset(tdata_t p, int v, tsize_t c) -{ - memset(p, v, (size_t) c); -} - -void -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) -{ - memcpy(d, s, (size_t) c); -} - -int -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) -{ - return (memcmp(p1, p2, (size_t) c)); -} - -static void -unixWarningHandler(const char* module, const char* fmt, va_list ap) -{ - if (module != NULL) - fprintf(stderr, "%s: ", module); - fprintf(stderr, "Warning, "); - vfprintf(stderr, fmt, ap); - fprintf(stderr, ".\n"); -} -TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler; - -static void -unixErrorHandler(const char* module, const char* fmt, va_list ap) -{ - if (module != NULL) - fprintf(stderr, "%s: ", module); - vfprintf(stderr, fmt, ap); - fprintf(stderr, ".\n"); -} -TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler; diff --git a/src/libs/pdflib/libs/tiff/tif_version.c b/src/libs/pdflib/libs/tiff/tif_version.c deleted file mode 100644 index a2f8109244..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_version.c +++ /dev/null @@ -1,33 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_version.c 14574 2005-10-29 16:27:43Z bonefish $ */ -/* - * Copyright (c) 1992-1997 Sam Leffler - * Copyright (c) 1992-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ -#include "tiffiop.h" - -static const char TIFFVersion[] = TIFFLIB_VERSION_STR; - -const char* -TIFFGetVersion(void) -{ - return (TIFFVersion); -} diff --git a/src/libs/pdflib/libs/tiff/tif_warning.c b/src/libs/pdflib/libs/tiff/tif_warning.c deleted file mode 100644 index 7f204de7dc..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_warning.c +++ /dev/null @@ -1,49 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_warning.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - */ -#include "tiffiop.h" - -TIFFErrorHandler -TIFFSetWarningHandler(TIFFErrorHandler handler) -{ - TIFFErrorHandler prev = _TIFFwarningHandler; - _TIFFwarningHandler = handler; - return (prev); -} - -void -TIFFWarning(const char* module, const char* fmt, ...) -{ - if (_TIFFwarningHandler) { - va_list ap; - va_start(ap, fmt); - (*_TIFFwarningHandler)(module, fmt, ap); - va_end(ap); - } -} diff --git a/src/libs/pdflib/libs/tiff/tif_zip.c b/src/libs/pdflib/libs/tiff/tif_zip.c deleted file mode 100644 index 522ba3087f..0000000000 --- a/src/libs/pdflib/libs/tiff/tif_zip.c +++ /dev/null @@ -1,380 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tif_zip.c 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1995-1997 Sam Leffler - * Copyright (c) 1995-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#include "tiffiop.h" -#ifdef ZIP_SUPPORT -/* - * TIFF Library. - * - * ZIP (aka Deflate) Compression Support - * - * This file is simply an interface to the zlib library written by - * Jean-loup Gailly and Mark Adler. You must use version 1.0 or later - * of the library: this code assumes the 1.0 API and also depends on - * the ability to write the zlib header multiple times (one per strip) - * which was not possible with versions prior to 0.95. Note also that - * older versions of this codec avoided this bug by supressing the header - * entirely. This means that files written with the old library cannot - * be read; they should be converted to a different compression scheme - * and then reconverted. - * - * The data format used by the zlib library is described in the files - * zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available in the - * directory ftp://ftp.uu.net/pub/archiving/zip/doc. The library was - * last found at ftp://ftp.uu.net/pub/archiving/zip/zlib/zlib-0.99.tar.gz. - */ -#include "tif_predict.h" -#include "zlib.h" - -#include -#include - -/* - * Sigh, ZLIB_VERSION is defined as a string so there's no - * way to do a proper check here. Instead we guess based - * on the presence of #defines that were added between the - * 0.95 and 1.0 distributions. - */ -#if !defined(Z_NO_COMPRESSION) || !defined(Z_DEFLATED) -#error "Antiquated ZLIB software; you must use version 1.0 or later" -#endif - -/* - * State block for each open TIFF - * file using ZIP compression/decompression. - */ -typedef struct { - TIFFPredictorState predict; - z_stream stream; - int zipquality; /* compression level */ - int state; /* state flags */ -#define ZSTATE_INIT 0x1 /* zlib setup successfully */ - - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ -} ZIPState; - -#define ZState(tif) ((ZIPState*) (tif)->tif_data) -#define DecoderState(tif) ZState(tif) -#define EncoderState(tif) ZState(tif) - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int ZIPEncode(TIFF*, tidata_t, tsize_t, tsample_t); -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ -static int ZIPDecode(TIFF*, tidata_t, tsize_t, tsample_t); - -static int -ZIPSetupDecode(TIFF* tif) -{ - ZIPState* sp = DecoderState(tif); - static const char module[] = "ZIPSetupDecode"; - - assert(sp != NULL); - if (inflateInit(&sp->stream) != Z_OK) { - TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); - return (0); - } else { - sp->state |= ZSTATE_INIT; - return (1); - } -} - -/* - * Setup state for decoding a strip. - */ -static int -ZIPPreDecode(TIFF* tif, tsample_t s) -{ - ZIPState* sp = DecoderState(tif); - - (void) s; - assert(sp != NULL); - sp->stream.next_in = tif->tif_rawdata; - sp->stream.avail_in = tif->tif_rawcc; - return (inflateReset(&sp->stream) == Z_OK); -} - -static int -ZIPDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) -{ - ZIPState* sp = DecoderState(tif); - static const char module[] = "ZIPDecode"; - - (void) s; - assert(sp != NULL); - sp->stream.next_out = op; - sp->stream.avail_out = occ; - do { - int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); - if (state == Z_STREAM_END) - break; - if (state == Z_DATA_ERROR) { - TIFFError(module, - "%s: Decoding error at scanline %d, %s", - tif->tif_name, tif->tif_row, sp->stream.msg); - if (inflateSync(&sp->stream) != Z_OK) - return (0); - continue; - } - if (state != Z_OK) { - TIFFError(module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); - return (0); - } - } while (sp->stream.avail_out > 0); - if (sp->stream.avail_out != 0) { - TIFFError(module, - "%s: Not enough data at scanline %d (short %d bytes)", - tif->tif_name, tif->tif_row, sp->stream.avail_out); - return (0); - } - return (1); -} - -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -ZIPSetupEncode(TIFF* tif) -{ - ZIPState* sp = EncoderState(tif); - static const char module[] = "ZIPSetupEncode"; - - assert(sp != NULL); - if (deflateInit(&sp->stream, sp->zipquality) != Z_OK) { - TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); - return (0); - } else { - sp->state |= ZSTATE_INIT; - return (1); - } -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Reset encoding state at the start of a strip. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -ZIPPreEncode(TIFF* tif, tsample_t s) -{ - ZIPState *sp = EncoderState(tif); - - (void) s; - assert(sp != NULL); - sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; - return (deflateReset(&sp->stream) == Z_OK); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Encode a chunk of pixels. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -ZIPEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) -{ - ZIPState *sp = EncoderState(tif); - static const char module[] = "ZIPEncode"; - - (void) s; - sp->stream.next_in = bp; - sp->stream.avail_in = cc; - do { - if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { - TIFFError(module, "%s: Encoder error: %s", - tif->tif_name, sp->stream.msg); - return (0); - } - if (sp->stream.avail_out == 0) { - tif->tif_rawcc = tif->tif_rawdatasize; - TIFFFlushData1(tif); - sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; - } - } while (sp->stream.avail_in > 0); - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -/* - * Finish off an encoded strip by flushing the last - * string and tacking on an End Of Information code. - */ -#ifdef PDFLIB_TIFFWRITE_SUPPORT -static int -ZIPPostEncode(TIFF* tif) -{ - ZIPState *sp = EncoderState(tif); - static const char module[] = "ZIPPostEncode"; - int state; - - sp->stream.avail_in = 0; - do { - state = deflate(&sp->stream, Z_FINISH); - switch (state) { - case Z_STREAM_END: - case Z_OK: - if (sp->stream.avail_out != tif->tif_rawdatasize) { - tif->tif_rawcc = - tif->tif_rawdatasize - sp->stream.avail_out; - TIFFFlushData1(tif); - sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; - } - break; - default: - TIFFError(module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); - return (0); - } - } while (state != Z_STREAM_END); - return (1); -} -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - -static void -ZIPCleanup(TIFF* tif) -{ - ZIPState* sp = ZState(tif); - if (sp) { - if (sp->state&ZSTATE_INIT) { - /* NB: avoid problems in the library */ - if (tif->tif_mode == O_RDONLY) - inflateEnd(&sp->stream); - else - deflateEnd(&sp->stream); - } - _TIFFfree(tif, sp); - tif->tif_data = NULL; - } -} - -static int -ZIPVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - ZIPState* sp = ZState(tif); - static const char module[] = "ZIPVSetField"; - - switch (tag) { - case TIFFTAG_ZIPQUALITY: - sp->zipquality = va_arg(ap, int); - if (tif->tif_mode != O_RDONLY && (sp->state&ZSTATE_INIT)) { - if (deflateParams(&sp->stream, - sp->zipquality, Z_DEFAULT_STRATEGY) != Z_OK) { - TIFFError(module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); - return (0); - } - } - return (1); - default: - return (*sp->vsetparent)(tif, tag, ap); - } - /*NOTREACHED*/ -} - -static int -ZIPVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - ZIPState* sp = ZState(tif); - - switch (tag) { - case TIFFTAG_ZIPQUALITY: - *va_arg(ap, int*) = sp->zipquality; - break; - default: - return (*sp->vgetparent)(tif, tag, ap); - } - return (1); -} - -static const TIFFFieldInfo zipFieldInfo[] = { - { TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, FIELD_PSEUDO, - TRUE, FALSE, "" }, -}; -#define N(a) (sizeof (a) / sizeof (a[0])) - -int -TIFFInitZIP(TIFF* tif, int scheme) -{ - ZIPState* sp; - - assert( (scheme == COMPRESSION_DEFLATE) - || (scheme == COMPRESSION_ADOBE_DEFLATE)); - - /* - * Allocate state block so tag methods have storage to record values. - */ - tif->tif_data = (tidata_t) _TIFFmalloc(tif, sizeof (ZIPState)); - if (tif->tif_data == NULL) - goto bad; - sp = ZState(tif); - sp->stream.zalloc = NULL; - sp->stream.zfree = NULL; - sp->stream.opaque = NULL; - sp->stream.data_type = Z_BINARY; - - /* - * Merge codec-specific tag information and - * override parent get/set field methods. - */ - _TIFFMergeFieldInfo(tif, zipFieldInfo, N(zipFieldInfo)); - sp->vgetparent = tif->tif_vgetfield; - tif->tif_vgetfield = ZIPVGetField; /* hook for codec tags */ - sp->vsetparent = tif->tif_vsetfield; - tif->tif_vsetfield = ZIPVSetField; /* hook for codec tags */ - - /* Default values for codec-specific fields */ - sp->zipquality = Z_DEFAULT_COMPRESSION; /* default comp. level */ - sp->state = 0; - - /* - * Install codec methods. - */ - tif->tif_setupdecode = ZIPSetupDecode; - tif->tif_predecode = ZIPPreDecode; - tif->tif_decoderow = ZIPDecode; - tif->tif_decodestrip = ZIPDecode; - tif->tif_decodetile = ZIPDecode; -#ifdef PDFLIB_TIFFWRITE_SUPPORT - tif->tif_setupencode = ZIPSetupEncode; - tif->tif_preencode = ZIPPreEncode; - tif->tif_postencode = ZIPPostEncode; - tif->tif_encoderow = ZIPEncode; - tif->tif_encodestrip = ZIPEncode; - tif->tif_encodetile = ZIPEncode; -#endif /* PDFLIB_TIFFWRITE_SUPPORT */ - tif->tif_cleanup = ZIPCleanup; - /* - * Setup predictor setup. - */ - (void) TIFFPredictorInit(tif); - return (1); -bad: - TIFFError("TIFFInitZIP", "No space for ZIP state block"); - return (0); -} -#endif /* ZIP_SUPORT */ diff --git a/src/libs/pdflib/libs/tiff/tiff.dsp b/src/libs/pdflib/libs/tiff/tiff.dsp deleted file mode 100644 index 9447507b4e..0000000000 --- a/src/libs/pdflib/libs/tiff/tiff.dsp +++ /dev/null @@ -1,267 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tiff" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=tiff - Win32 Debug DLL -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "tiff.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "tiff.mak" CFG="tiff - Win32 Debug DLL" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tiff - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "tiff - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "tiff - Win32 Release mtDLL" (based on "Win32 (x86) Static Library") -!MESSAGE "tiff - Win32 Release DLL" (based on "Win32 (x86) Static Library") -!MESSAGE "tiff - Win32 Debug DLL" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tiff - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /I "../flate" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"tiff.lib" - -!ELSEIF "$(CFG)" == "tiff - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /I "../flate" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"libtiff.lib" - -!ELSEIF "$(CFG)" == "tiff - Win32 Release mtDLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_mtDLL" -# PROP BASE Intermediate_Dir "Release_mtDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_mtDLL" -# PROP Intermediate_Dir "Release_mtDLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdflib" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MD /W3 /O2 /I "../pdcore" /I "../flate" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"libtiff.lib" -# ADD LIB32 /nologo /out:"libtiff.lib" - -!ELSEIF "$(CFG)" == "tiff - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_DLL" -# PROP BASE Intermediate_Dir "Release_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_DLL" -# PROP Intermediate_Dir "Release_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../pdcore" /I "../flate" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MT /W3 /O2 /I "../pdcore" /I "../flate" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"tiff.lib" -# ADD LIB32 /nologo /out:"tiff.lib" - -!ELSEIF "$(CFG)" == "tiff - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_DLL" -# PROP BASE Intermediate_Dir "Debug_DLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_DLL" -# PROP Intermediate_Dir "Debug_DLL" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /I "../flate" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "../pdcore" /I "../flate" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_MT" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"libtiff.lib" -# ADD LIB32 /nologo /out:"libtiff.lib" - -!ENDIF - -# Begin Target - -# Name "tiff - Win32 Release" -# Name "tiff - Win32 Debug" -# Name "tiff - Win32 Release mtDLL" -# Name "tiff - Win32 Release DLL" -# Name "tiff - Win32 Debug DLL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\tif_auxx.c -# End Source File -# Begin Source File - -SOURCE=.\tif_close.c -# End Source File -# Begin Source File - -SOURCE=.\tif_codec.c -# End Source File -# Begin Source File - -SOURCE=.\tif_compress.c -# End Source File -# Begin Source File - -SOURCE=.\tif_dir.c -# End Source File -# Begin Source File - -SOURCE=.\tif_dirinfo.c -# End Source File -# Begin Source File - -SOURCE=.\tif_dirread.c -# End Source File -# Begin Source File - -SOURCE=.\tif_dumpmode.c -# End Source File -# Begin Source File - -SOURCE=.\tif_error.c -# End Source File -# Begin Source File - -SOURCE=.\tif_fax3.c -# End Source File -# Begin Source File - -SOURCE=.\tif_fax3sm.c -# End Source File -# Begin Source File - -SOURCE=.\tif_getimage.c -# End Source File -# Begin Source File - -SOURCE=.\tif_luv.c -# End Source File -# Begin Source File - -SOURCE=.\tif_lzw.c -# End Source File -# Begin Source File - -SOURCE=.\tif_next.c -# End Source File -# Begin Source File - -SOURCE=.\tif_open.c -# End Source File -# Begin Source File - -SOURCE=.\tif_packbits.c -# End Source File -# Begin Source File - -SOURCE=.\tif_predict.c -# End Source File -# Begin Source File - -SOURCE=.\tif_read.c -# End Source File -# Begin Source File - -SOURCE=.\tif_strip.c -# End Source File -# Begin Source File - -SOURCE=.\tif_swab.c -# End Source File -# Begin Source File - -SOURCE=.\tif_tile.c -# End Source File -# Begin Source File - -SOURCE=.\tif_unix.c -# End Source File -# Begin Source File - -SOURCE=.\tif_version.c -# End Source File -# Begin Source File - -SOURCE=.\tif_warning.c -# End Source File -# Begin Source File - -SOURCE=.\tif_zip.c -# End Source File -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/libs/tiff/tiff.h b/src/libs/pdflib/libs/tiff/tiff.h deleted file mode 100644 index fa2066b1d1..0000000000 --- a/src/libs/pdflib/libs/tiff/tiff.h +++ /dev/null @@ -1,458 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tiff.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFF_ -#define _TIFF_ -/* - * Tag Image File Format (TIFF) - * - * Based on Rev 6.0 from: - * Developer's Desk - * Aldus Corporation - * 411 First Ave. South - * Suite 200 - * Seattle, WA 98104 - * 206-622-5500 - */ -#define TIFF_VERSION 42 - -#define TIFF_BIGENDIAN 0x4d4d -#define TIFF_LITTLEENDIAN 0x4949 - -#ifndef _TIFF_DATA_TYPEDEFS_ -#define _TIFF_DATA_TYPEDEFS_ -/* - * Intrinsic data types required by the file format: - * - * 8-bit quantities int8/uint8 - * 16-bit quantities int16/uint16 - * 32-bit quantities int32/uint32 - * strings unsigned char* - */ -#ifdef AIX - #include - typedef u_int8 uint8; - typedef u_int16 uint16; - typedef u_int32 uint32; -#else - #ifdef __STDC__ - typedef signed char int8; /* NB: non-ANSI compilers may not grok */ - #else - typedef char int8; - #endif - typedef unsigned char uint8; - typedef short int16; - typedef unsigned short uint16; /* sizeof (uint16) must == 2 */ - #if defined(__alpha) || (defined(_MIPS_SZLONG) && _MIPS_SZLONG == 64) || \ - defined(__sparcv9) || defined(__LP64__) || defined(__arch64__) - typedef int int32; - typedef unsigned int uint32; /* sizeof (uint32) must == 4 */ - #else - typedef long int32; - typedef unsigned long uint32; /* sizeof (uint32) must == 4 */ - #endif -#endif -#endif /* _TIFF_DATA_TYPEDEFS_ */ - -/* For TIFFReassignTagToIgnore */ -enum TIFFIgnoreSense /* IGNORE tag table */ -{ - TIS_STORE, - TIS_EXTRACT, - TIS_EMPTY -}; - -typedef struct { - uint16 tiff_magic; /* magic number (defines byte order) */ - uint16 tiff_version; /* TIFF version number */ - uint32 tiff_diroff; /* byte offset to first directory */ -} TIFFHeader; - -/* - * TIFF Image File Directories are comprised of - * a table of field descriptors of the form shown - * below. The table is sorted in ascending order - * by tag. The values associated with each entry - * are disjoint and may appear anywhere in the file - * (so long as they are placed on a word boundary). - * - * If the value is 4 bytes or less, then it is placed - * in the offset field to save space. If the value - * is less than 4 bytes, it is left-justified in the - * offset field. - */ -typedef struct { - uint16 tdir_tag; /* see below */ - uint16 tdir_type; /* data type; see below */ - uint32 tdir_count; /* number of items; length in spec */ - uint32 tdir_offset; /* byte offset to field data */ -} TIFFDirEntry; - -/* - * NB: In the comments below, - * - items marked with a + are obsoleted by revision 5.0, - * - items marked with a ! are introduced in revision 6.0. - * - items marked with a % are introduced post revision 6.0. - * - items marked with a $ are obsoleted by revision 6.0. - */ - -/* - * Tag data type information. - * - * Note: RATIONALs are the ratio of two 32-bit integer values. - */ -typedef enum { - TIFF_NOTYPE = 0, /* placeholder */ - TIFF_BYTE = 1, /* 8-bit unsigned integer */ - TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */ - TIFF_SHORT = 3, /* 16-bit unsigned integer */ - TIFF_LONG = 4, /* 32-bit unsigned integer */ - TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */ - TIFF_SBYTE = 6, /* !8-bit signed integer */ - TIFF_UNDEFINED = 7, /* !8-bit untyped data */ - TIFF_SSHORT = 8, /* !16-bit signed integer */ - TIFF_SLONG = 9, /* !32-bit signed integer */ - TIFF_SRATIONAL = 10, /* !64-bit signed fraction */ - TIFF_FLOAT = 11, /* !32-bit IEEE floating point */ - TIFF_DOUBLE = 12 /* !64-bit IEEE floating point */ -} TIFFDataType; - -/* - * TIFF Tag Definitions. - */ -#define TIFFTAG_SUBFILETYPE 254 /* subfile data descriptor */ -#define FILETYPE_REDUCEDIMAGE 0x1 /* reduced resolution version */ -#define FILETYPE_PAGE 0x2 /* one page of many */ -#define FILETYPE_MASK 0x4 /* transparency mask */ -#define TIFFTAG_OSUBFILETYPE 255 /* +kind of data in subfile */ -#define OFILETYPE_IMAGE 1 /* full resolution image data */ -#define OFILETYPE_REDUCEDIMAGE 2 /* reduced size image data */ -#define OFILETYPE_PAGE 3 /* one page of many */ -#define TIFFTAG_IMAGEWIDTH 256 /* image width in pixels */ -#define TIFFTAG_IMAGELENGTH 257 /* image height in pixels */ -#define TIFFTAG_BITSPERSAMPLE 258 /* bits per channel (sample) */ -#define TIFFTAG_COMPRESSION 259 /* data compression technique */ -#define COMPRESSION_NONE 1 /* dump mode */ -#define COMPRESSION_CCITTRLE 2 /* CCITT modified Huffman RLE */ -#define COMPRESSION_CCITTFAX3 3 /* CCITT Group 3 fax encoding */ -#define COMPRESSION_CCITT_T4 3 /* CCITT T.4 (TIFF 6 name) */ -#define COMPRESSION_CCITTFAX4 4 /* CCITT Group 4 fax encoding */ -#define COMPRESSION_CCITT_T6 4 /* CCITT T.6 (TIFF 6 name) */ -#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */ -#define COMPRESSION_OJPEG 6 /* !6.0 JPEG */ -#define COMPRESSION_JPEG 7 /* %JPEG DCT compression */ -#define COMPRESSION_NEXT 32766 /* NeXT 2-bit RLE */ -#define COMPRESSION_CCITTRLEW 32771 /* #1 w/ word alignment */ -#define COMPRESSION_PACKBITS 32773 /* Macintosh RLE */ -#define COMPRESSION_THUNDERSCAN 32809 /* ThunderScan RLE */ -/* codes 32895-32898 are reserved for ANSI IT8 TIFF/IT */ -#define COMPRESSION_DCS 32947 /* Kodak DCS encoding */ -#define COMPRESSION_JBIG 34661 /* ISO JBIG */ -#define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ -#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ -#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ -#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ -#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ -#define PHOTOMETRIC_RGB 2 /* RGB color model */ -#define PHOTOMETRIC_PALETTE 3 /* color map indexed */ -#define PHOTOMETRIC_MASK 4 /* $holdout mask */ -#define PHOTOMETRIC_SEPARATED 5 /* !color separations */ -#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */ -#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */ -#define PHOTOMETRIC_ITULAB 10 /* ITU L*a*b* */ -#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */ -#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */ -#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */ -#define THRESHHOLD_BILEVEL 1 /* b&w art scan */ -#define THRESHHOLD_HALFTONE 2 /* or dithered scan */ -#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */ -#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */ -#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */ -#define TIFFTAG_FILLORDER 266 /* data order within a byte */ -#define FILLORDER_MSB2LSB 1 /* most significant -> least */ -#define FILLORDER_LSB2MSB 2 /* least significant -> most */ -#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */ -#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */ -#define TIFFTAG_MAKE 271 /* scanner manufacturer name */ -#define TIFFTAG_MODEL 272 /* scanner model name/number */ -#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */ -#define TIFFTAG_ORIENTATION 274 /* +image orientation */ -#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */ -#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */ -#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */ -#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */ -#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */ -#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */ -#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */ -#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */ -#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */ -#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */ -#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */ -#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */ -#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */ -#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */ -#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */ -#define TIFFTAG_PLANARCONFIG 284 /* storage organization */ -#define PLANARCONFIG_CONTIG 1 /* single image plane */ -#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */ -#define TIFFTAG_PAGENAME 285 /* page name image is from */ -#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */ -#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */ -#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */ -#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */ -#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */ -#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */ -#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */ -#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */ -#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ -#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */ -#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */ -#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */ -#define TIFFTAG_T4OPTIONS 292 /* TIFF 6.0 proper name alias */ -#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */ -#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */ -#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */ -#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */ -#define TIFFTAG_T6OPTIONS 293 /* TIFF 6.0 proper name */ -#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */ -#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */ -#define RESUNIT_NONE 1 /* no meaningful units */ -#define RESUNIT_INCH 2 /* english */ -#define RESUNIT_CENTIMETER 3 /* metric */ -#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */ -#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */ -#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */ -#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */ -#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */ -#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ -#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */ -#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */ -#define TIFFTAG_SOFTWARE 305 /* name & release */ -#define TIFFTAG_DATETIME 306 /* creation date and time */ -#define TIFFTAG_ARTIST 315 /* creator of image */ -#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */ -#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */ -#define TIFFTAG_WHITEPOINT 318 /* image white point */ -#define TIFFTAG_PRIMARYCHROMATICITIES 319 /* !primary chromaticities */ -#define TIFFTAG_COLORMAP 320 /* RGB map for pallette image */ -#define TIFFTAG_HALFTONEHINTS 321 /* !highlight+shadow info */ -#define TIFFTAG_TILEWIDTH 322 /* !rows/data tile */ -#define TIFFTAG_TILELENGTH 323 /* !cols/data tile */ -#define TIFFTAG_TILEOFFSETS 324 /* !offsets to data tiles */ -#define TIFFTAG_TILEBYTECOUNTS 325 /* !byte counts for tiles */ -#define TIFFTAG_BADFAXLINES 326 /* lines w/ wrong pixel count */ -#define TIFFTAG_CLEANFAXDATA 327 /* regenerated line info */ -#define CLEANFAXDATA_CLEAN 0 /* no errors detected */ -#define CLEANFAXDATA_REGENERATED 1 /* receiver regenerated lines */ -#define CLEANFAXDATA_UNCLEAN 2 /* uncorrected errors exist */ -#define TIFFTAG_CONSECUTIVEBADFAXLINES 328 /* max consecutive bad lines */ -#define TIFFTAG_SUBIFD 330 /* subimage descriptors */ -#define TIFFTAG_INKSET 332 /* !inks in separated image */ -#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black */ -#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */ -#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */ -#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */ -#define TIFFTAG_TARGETPRINTER 337 /* !separation target */ -#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */ -#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */ -#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */ -#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */ -#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */ -#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */ -#define SAMPLEFORMAT_INT 2 /* !signed integer data */ -#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */ -#define SAMPLEFORMAT_VOID 4 /* !untyped data */ -#define SAMPLEFORMAT_COMPLEXINT 5 /* !complex signed int */ -#define SAMPLEFORMAT_COMPLEXIEEEFP 6 /* !complex ieee floating */ -#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */ -#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */ -#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ -/* - * Tags 512-521 are obsoleted by Technical Note #2 - * which specifies a revised JPEG-in-TIFF scheme. - */ -#define TIFFTAG_JPEGPROC 512 /* !JPEG processing algorithm */ -#define JPEGPROC_BASELINE 1 /* !baseline sequential */ -#define JPEGPROC_LOSSLESS 14 /* !Huffman coded lossless */ -#define TIFFTAG_JPEGIFOFFSET 513 /* !pointer to SOI marker */ -#define TIFFTAG_JPEGIFBYTECOUNT 514 /* !JFIF stream length */ -#define TIFFTAG_JPEGRESTARTINTERVAL 515 /* !restart interval length */ -#define TIFFTAG_JPEGLOSSLESSPREDICTORS 517 /* !lossless proc predictor */ -#define TIFFTAG_JPEGPOINTTRANSFORM 518 /* !lossless point transform */ -#define TIFFTAG_JPEGQTABLES 519 /* !Q matrice offsets */ -#define TIFFTAG_JPEGDCTABLES 520 /* !DCT table offsets */ -#define TIFFTAG_JPEGACTABLES 521 /* !AC coefficient offsets */ -#define TIFFTAG_YCBCRCOEFFICIENTS 529 /* !RGB -> YCbCr transform */ -#define TIFFTAG_YCBCRSUBSAMPLING 530 /* !YCbCr subsampling factors */ -#define TIFFTAG_YCBCRPOSITIONING 531 /* !subsample positioning */ -#define YCBCRPOSITION_CENTERED 1 /* !as in PostScript Level 2 */ -#define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */ -#define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */ -/* tags 32952-32956 are private tags registered to Island Graphics */ -#define TIFFTAG_REFPTS 32953 /* image reference points */ -#define TIFFTAG_REGIONTACKPOINT 32954 /* region-xform tack point */ -#define TIFFTAG_REGIONWARPCORNERS 32955 /* warp quadrilateral */ -#define TIFFTAG_REGIONAFFINE 32956 /* affine transformation mat */ -/* tags 32995-32999 are private tags registered to SGI */ -#define TIFFTAG_MATTEING 32995 /* $use ExtraSamples */ -#define TIFFTAG_DATATYPE 32996 /* $use SampleFormat */ -#define TIFFTAG_IMAGEDEPTH 32997 /* z depth of image */ -#define TIFFTAG_TILEDEPTH 32998 /* z depth/data tile */ -/* tags 33300-33309 are private tags registered to Pixar */ -/* - * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH - * are set when an image has been cropped out of a larger image. - * They reflect the size of the original uncropped image. - * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used - * to determine the position of the smaller image in the larger one. - */ -#define TIFFTAG_PIXAR_IMAGEFULLWIDTH 33300 /* full image size in x */ -#define TIFFTAG_PIXAR_IMAGEFULLLENGTH 33301 /* full image size in y */ - /* Tags 33302-33306 are used to identify special image modes and data - * used by Pixar's texture formats. - */ -#define TIFFTAG_PIXAR_TEXTUREFORMAT 33302 /* texture map format */ -#define TIFFTAG_PIXAR_WRAPMODES 33303 /* s & t wrap modes */ -#define TIFFTAG_PIXAR_FOVCOT 33304 /* cotan(fov) for env. maps */ -#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305 -#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306 -/* tag 33405 is a private tag registered to Eastman Kodak */ -#define TIFFTAG_WRITERSERIALNUMBER 33405 /* device serial number */ -/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */ -#define TIFFTAG_COPYRIGHT 33432 /* copyright string */ -/* IPTC TAG from RichTIFF specifications */ -#define TIFFTAG_RICHTIFFIPTC 33723 -/* 34016-34029 are reserved for ANSI IT8 TIFF/IT */ -#define TIFFTAG_STONITS 37439 /* Sample value to Nits */ -/* tag 34929 is a private tag registered to FedEx */ -#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ -/* tag 65535 is an undefined tag used by Eastman Kodak */ -#define TIFFTAG_DCSHUESHIFTVALUES 65535 /* hue shift correction data */ - -/* - * The following are ``pseudo tags'' that can be - * used to control codec-specific functionality. - * These tags are not written to file. Note that - * these values start at 0xffff+1 so that they'll - * never collide with Aldus-assigned tags. - * - * If you want your private pseudo tags ``registered'' - * (i.e. added to this file), send mail to sam@sgi.com - * with the appropriate C definitions to add. - */ -#define TIFFTAG_FAXMODE 65536 /* Group 3/4 format control */ -#define FAXMODE_CLASSIC 0x0000 /* default, include RTC */ -#define FAXMODE_NORTC 0x0001 /* no RTC at end of data */ -#define FAXMODE_NOEOL 0x0002 /* no EOL code at end of row */ -#define FAXMODE_BYTEALIGN 0x0004 /* byte align row */ -#define FAXMODE_WORDALIGN 0x0008 /* word align row */ -#define FAXMODE_CLASSF FAXMODE_NORTC /* TIFF Class F */ -#define TIFFTAG_JPEGQUALITY 65537 /* Compression quality level */ -/* Note: quality level is on the IJG 0-100 scale. Default value is 75 */ -#define TIFFTAG_JPEGCOLORMODE 65538 /* Auto RGB<=>YCbCr convert? */ -#define JPEGCOLORMODE_RAW 0x0000 /* no conversion (default) */ -#define JPEGCOLORMODE_RGB 0x0001 /* do auto conversion */ -#define TIFFTAG_JPEGTABLESMODE 65539 /* What to put in JPEGTables */ -#define JPEGTABLESMODE_QUANT 0x0001 /* include quantization tbls */ -#define JPEGTABLESMODE_HUFF 0x0002 /* include Huffman tbls */ -/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */ -#define TIFFTAG_FAXFILLFUNC 65540 /* G3/G4 fill function */ -#define TIFFTAG_PIXARLOGDATAFMT 65549 /* PixarLogCodec I/O data sz */ -#define PIXARLOGDATAFMT_8BIT 0 /* regular tif_char samples */ -#define PIXARLOGDATAFMT_8BITABGR 1 /* ABGR-order tif_chars */ -#define PIXARLOGDATAFMT_11BITLOG 2 /* 11-bit log-encoded (raw) */ -#define PIXARLOGDATAFMT_12BITPICIO 3 /* as per PICIO (1.0==2048) */ -#define PIXARLOGDATAFMT_16BIT 4 /* signed short samples */ -#define PIXARLOGDATAFMT_FLOAT 5 /* IEEE float samples */ -/* 65550-65556 are allocated to Oceana Matrix */ -#define TIFFTAG_DCSIMAGERTYPE 65550 /* imager model & filter */ -#define DCSIMAGERMODEL_M3 0 /* M3 chip (1280 x 1024) */ -#define DCSIMAGERMODEL_M5 1 /* M5 chip (1536 x 1024) */ -#define DCSIMAGERMODEL_M6 2 /* M6 chip (3072 x 2048) */ -#define DCSIMAGERFILTER_IR 0 /* infrared filter */ -#define DCSIMAGERFILTER_MONO 1 /* monochrome filter */ -#define DCSIMAGERFILTER_CFA 2 /* color filter array */ -#define DCSIMAGERFILTER_OTHER 3 /* other filter */ -#define TIFFTAG_DCSINTERPMODE 65551 /* interpolation mode */ -#define DCSINTERPMODE_NORMAL 0x0 /* whole image, default */ -#define DCSINTERPMODE_PREVIEW 0x1 /* preview of image (384x256) */ -#define TIFFTAG_DCSBALANCEARRAY 65552 /* color balance values */ -#define TIFFTAG_DCSCORRECTMATRIX 65553 /* color correction values */ -#define TIFFTAG_DCSGAMMA 65554 /* gamma value */ -#define TIFFTAG_DCSTOESHOULDERPTS 65555 /* toe & shoulder points */ -#define TIFFTAG_DCSCALIBRATIONFD 65556 /* calibration file desc */ -/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */ -#define TIFFTAG_ZIPQUALITY 65557 /* compression quality level */ -#define TIFFTAG_PIXARLOGQUALITY 65558 /* PixarLog uses same scale */ -/* 65559 is allocated to Oceana Matrix */ -#define TIFFTAG_DCSCLIPRECTANGLE 65559 /* area of image to acquire */ -#define TIFFTAG_SGILOGDATAFMT 65560 /* SGILog user data format */ -#define SGILOGDATAFMT_FLOAT 0 /* IEEE float samples */ -#define SGILOGDATAFMT_16BIT 1 /* 16-bit samples */ -#define SGILOGDATAFMT_RAW 2 /* uninterpreted data */ -#define SGILOGDATAFMT_8BIT 3 /* 8-bit RGB monitor values */ -#define TIFFTAG_SGILOGENCODE 65561 /* SGILog data encoding control*/ -#define SGILOGENCODE_NODITHER 0 /* do not dither encoded values*/ -#define SGILOGENCODE_RANDITHER 1 /* randomly dither encd values */ -#endif /* _TIFF_ */ diff --git a/src/libs/pdflib/libs/tiff/tiffconf.h b/src/libs/pdflib/libs/tiff/tiffconf.h deleted file mode 100644 index 790a5fca1f..0000000000 --- a/src/libs/pdflib/libs/tiff/tiffconf.h +++ /dev/null @@ -1,148 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tiffconf.h 14574 2005-10-29 16:27:43Z bonefish $ */ -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFFCONF_ -#define _TIFFCONF_ -/* - * Library Configuration Definitions. - * - * This file defines the default configuration for the library. - * If the target system does not have make or a way to specify - * #defines on the command line, this file can be edited to - * configure the library. Otherwise, one can override portability - * and configuration-related definitions from a Makefile or command - * line by defining FEATURE_SUPPORT and COMPRESSION_SUPPORT (see below). - */ - -/* - * General portability-related defines: - * - * HAVE_IEEEFP define as 0 or 1 according to the floating point - * format suported by the machine - * BSDTYPES define this if your system does NOT define the - * usual 4BSD typedefs tif_int et. al. - * HAVE_MMAP enable support for memory mapping read-only files; - * this is typically deduced by the configure script - * HOST_FILLORDER native cpu bit order: one of FILLORDER_MSB2LSB - * or FILLODER_LSB2MSB; this is typically set by the - * configure script - * HOST_BIGENDIAN native cpu byte order: 1 if big-endian (Motorola) - * or 0 if little-endian (Intel); this may be used - * in codecs to optimize code - * USE_64BIT_API set to 1 if tif_unix.c should use lseek64(), - * fstat64() and stat64 allowing 2-4GB files. - */ -#ifndef HAVE_IEEEFP -#define HAVE_IEEEFP 1 -#endif -/* not uesd: PDFlib GmbH: -#ifndef HOST_FILLORDER -#define HOST_FILLORDER FILLORDER_MSB2LSB -#endif -#ifndef HOST_BIGENDIAN -#define HOST_BIGENDIAN 1 -#endif -*/ - -#ifndef USE_64BIT_API -# define USE_64BIT_API 0 -#endif - -#ifndef FEATURE_SUPPORT -/* - * Feature support definitions: - * - * COLORIMETRY_SUPPORT enable support for 6.0 colorimetry tags - * YCBCR_SUPPORT enable support for 6.0 YCbCr tags - * CMYK_SUPPORT enable support for 6.0 CMYK tags - * ICC_SUPPORT enable support for ICC profile tag - * PHOTOSHOP_SUPPORT enable support for PHOTOSHOP resource tag - * IPTC_SUPPORT enable support for RichTIFF IPTC tag - */ -#define COLORIMETRY_SUPPORT -#define YCBCR_SUPPORT -#define CMYK_SUPPORT -#define ICC_SUPPORT -#define PHOTOSHOP_SUPPORT -#define IPTC_SUPPORT -#endif /* FEATURE_SUPPORT */ - -#ifndef COMPRESSION_SUPPORT -/* - * Compression support defines: - * - * CCITT_SUPPORT enable support for CCITT Group 3 & 4 algorithms - * PACKBITS_SUPPORT enable support for Macintosh PackBits algorithm - * LZW_SUPPORT enable support for LZW algorithm - * THUNDER_SUPPORT enable support for ThunderScan 4-bit RLE algorithm - * NEXT_SUPPORT enable support for NeXT 2-bit RLE algorithm - * OJPEG_SUPPORT enable support for 6.0-style JPEG DCT algorithms - * (requires IJG software) - * JPEG_SUPPORT enable support for post-6.0-style JPEG DCT algorithms - * (requires freely available IJG software, see tif_jpeg.c) - * ZIP_SUPPORT enable support for Deflate algorithm - * (requires freely available zlib software, see tif_zip.c) - * PIXARLOG_SUPPORT enable support for Pixar log-format algorithm - * LOGLUV_SUPPORT enable support for LogLuv high dynamic range encoding - */ -#define CCITT_SUPPORT -#define PACKBITS_SUPPORT -#define LZW_SUPPORT /* PDFlib GmbH, required for predictor tag */ -#undef THUNDER_SUPPORT /* PDFlib GmbH */ -#undef OJPEG_SUPPORT /* PDFlib GmbH */ -#undef JPEG_SUPPORT /* PDFlib GmbH */ -#define ZIP_SUPPORT /* PDFlib GmbH */ -#define NEXT_SUPPORT -#define LOGLUV_SUPPORT -#endif /* COMPRESSION_SUPPORT */ - -/* - * If JPEG compression is enabled then we must also include - * support for the colorimetry and YCbCr-related tags. - */ -#ifdef JPEG_SUPPORT -#ifndef YCBCR_SUPPORT -#define YCBCR_SUPPORT -#endif -#ifndef COLORIMETRY_SUPPORT -#define COLORIMETRY_SUPPORT -#endif -#endif /* JPEG_SUPPORT */ - -/* - * ``Orthogonal Features'' - * - * STRIPCHOP_DEFAULT default handling of strip chopping support (whether - * or not to convert single-strip uncompressed images - * to mutiple strips of ~8Kb--to reduce memory use) - * SUBIFD_SUPPORT enable support for SubIFD tag (thumbnails and such) - */ -#ifndef STRIPCHOP_DEFAULT -#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP /* default is to enable */ -#endif -#ifndef SUBIFD_SUPPORT -#define SUBIFD_SUPPORT 1 /* enable SubIFD tag (330) support */ -#endif -#endif /* _TIFFCONF_ */ diff --git a/src/libs/pdflib/libs/tiff/tiffio.h b/src/libs/pdflib/libs/tiff/tiffio.h deleted file mode 100644 index c2264269fc..0000000000 --- a/src/libs/pdflib/libs/tiff/tiffio.h +++ /dev/null @@ -1,351 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tiffio.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFFIO_ -#define _TIFFIO_ -/* - * PDFlib Gmbh, special memory management - * therefore all calls to _TIFFmalloc ... are changed to get a TIFF pointer - * which contains a PDF pointer - */ -#define TIFF_PDFLIB_MEM_SUPPORTED - -/* - * TIFF I/O Library Definitions. - */ -#include "tiff.h" -#include "tiffvers.h" -#include "port.h" - -/* - * TIFF is defined as an incomplete type to hide the - * library's internal data structures from clients. - */ -typedef struct tiff TIFF; - -/* - * The following typedefs define the intrinsic size of - * data types used in the *exported* interfaces. These - * definitions depend on the proper definition of types - * in tiff.h. Note also that the varargs interface used - * to pass tag types and values uses the types defined in - * tiff.h directly. - * - * NB: ttag_t is unsigned int and not unsigned short because - * ANSI C requires that the type before the ellipsis be a - * promoted type (i.e. one of int, unsigned int, pointer, - * or double) and because we defined pseudo-tags that are - * outside the range of legal Aldus-assigned tags. - * NB: tsize_t is int32 and not uint32 because some functions - * return -1. - * NB: toff_t is not off_t for many reasons; TIFFs max out at - * 32-bit file offsets being the most important, and to ensure - * that it is unsigned, rather than signed. - */ -typedef uint32 ttag_t; /* directory tag */ -typedef uint16 tdir_t; /* directory index */ -typedef uint16 tsample_t; /* sample number */ -typedef uint32 tstrip_t; /* strip number */ -typedef uint32 ttile_t; /* tile number */ -typedef int32 tsize_t; /* i/o size in bytes */ -typedef void* tdata_t; /* image data ref */ -typedef uint32 toff_t; /* file offset */ - -#ifndef NULL -#define NULL 0 -#endif - -/* - * Flags to pass to TIFFPrintDirectory to control - * printing of data structures that are potentially - * very large. Bit-or these flags to enable printing - * multiple items. - */ -#define TIFFPRINT_NONE 0x0 /* no extra info */ -#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ -#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ -#define TIFFPRINT_COLORMAP 0x4 /* colormap */ -#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ -#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ -#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ - -/* - * RGBA-style image support. - */ -typedef unsigned char TIFFRGBValue; /* 8-bit samples */ -typedef struct _TIFFRGBAImage TIFFRGBAImage; -/* - * The image reading and conversion routines invoke - * ``put routines'' to copy/image/whatever tiles of - * raw image data. A default set of routines are - * provided to convert/copy raw image data to 8-bit - * packed ABGR format rasters. Applications can supply - * alternate routines that unpack the data into a - * different format or, for example, unpack the data - * and draw the unpacked raster on the display. - */ -typedef void (*tileContigRoutine) - (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, - unsigned char*); -typedef void (*tileSeparateRoutine) - (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, - unsigned char*, unsigned char*, unsigned char*, unsigned char*); -/* - * RGBA-reader state. - */ -typedef struct { /* YCbCr->RGB support */ - TIFFRGBValue* clamptab; /* range clamping table */ - int* Cr_r_tab; - int* Cb_b_tab; - int32* Cr_g_tab; - int32* Cb_g_tab; - float coeffs[3]; /* cached for repeated use */ -} TIFFYCbCrToRGB; - -struct _TIFFRGBAImage { - TIFF* tif; /* image handle */ - int stoponerr; /* stop on read error */ - int isContig; /* data is packed/separate */ - int alpha; /* type of alpha data present */ - uint32 width; /* image width */ - uint32 height; /* image height */ - uint16 bitspersample; /* image bits/sample */ - uint16 samplesperpixel; /* image samples/pixel */ - uint16 orientation; /* image orientation */ - uint16 photometric; /* image photometric interp */ - uint16* redcmap; /* colormap pallete */ - uint16* greencmap; - uint16* bluecmap; - /* get image data routine */ - int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32); - union { - void (*any)(TIFFRGBAImage*); - tileContigRoutine contig; - tileSeparateRoutine separate; - } put; /* put decoded strip/tile */ - TIFFRGBValue* Map; /* sample mapping array */ - uint32** BWmap; /* black&white map */ - uint32** PALmap; /* palette image map */ - TIFFYCbCrToRGB* ycbcr; /* YCbCr conversion state */ - - int row_offset; - int col_offset; -}; - -/* - * Macros for extracting components from the - * packed ABGR form returned by TIFFReadRGBAImage. - */ -#define TIFFGetR(abgr) ((abgr) & 0xff) -#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff) -#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff) -#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff) - -/* - * A CODEC is a software package that implements decoding, - * encoding, or decoding+encoding of a compression algorithm. - * The library provides a collection of builtin codecs. - * More codecs may be registered through calls to the library - * and/or the builtin implementations may be overridden. - */ -typedef int (*TIFFInitMethod)(TIFF*, int); -typedef struct { - char* name; - uint16 scheme; - TIFFInitMethod init; -} TIFFCodec; - -#include -#include - -/* share internal LogLuv conversion routines? */ -#ifndef LOGLUV_PUBLIC -#define LOGLUV_PUBLIC 1 -#endif - -#if defined(__cplusplus) -extern "C" { -#endif -typedef tdata_t (*TIFFmallocHandler)(TIFF*, tsize_t); -typedef tdata_t (*TIFFreallocHandler)(TIFF*, tdata_t, tsize_t); -typedef void (*TIFFfreeHandler)(TIFF*, tdata_t); -typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); -typedef tsize_t (*TIFFReadWriteProc)(void*, tdata_t, tsize_t); -typedef toff_t (*TIFFSeekProc)(void*, toff_t, int); -typedef int (*TIFFCloseProc)(void*); -typedef toff_t (*TIFFSizeProc)(void*); -typedef int (*TIFFMapFileProc)(void*, tdata_t*, toff_t*); -typedef void (*TIFFUnmapFileProc)(void*, tdata_t, toff_t); -typedef void (*TIFFExtendProc)(TIFF*); - -extern const char* TIFFGetVersion(void); - -extern const TIFFCodec* TIFFFindCODEC(uint16); -extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); -extern void TIFFUnRegisterCODEC(TIFFCodec*); - -extern tdata_t _TIFFmalloc(TIFF*, tsize_t); -extern tdata_t _TIFFrealloc(TIFF*, tdata_t, tsize_t); -extern void _TIFFmemset(tdata_t, int, tsize_t); -extern void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t); -extern int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t); -extern void _TIFFfree(TIFF*, tdata_t); - -extern void TIFFClose(TIFF*); -extern int TIFFFlush(TIFF*); -extern int TIFFFlushData(TIFF*); -extern int TIFFGetField(TIFF*, ttag_t, ...); -extern int TIFFVGetField(TIFF*, ttag_t, va_list); -extern int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...); -extern int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list); -extern int TIFFReadDirectory(TIFF*); -extern tsize_t TIFFScanlineSize(TIFF*); -extern tsize_t TIFFRasterScanlineSize(TIFF*); -extern tsize_t TIFFStripSize(TIFF*); -extern tsize_t TIFFVStripSize(TIFF*, uint32); -extern tsize_t TIFFTileRowSize(TIFF*); -extern tsize_t TIFFTileSize(TIFF*); -extern tsize_t TIFFVTileSize(TIFF*, uint32); -extern uint32 TIFFDefaultStripSize(TIFF*, uint32); -extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); -extern int TIFFFileno(TIFF*); -extern int TIFFGetMode(TIFF*); -extern int TIFFIsTiled(TIFF*); -extern int TIFFIsByteSwapped(TIFF*); -extern int TIFFIsUpSampled(TIFF*); -extern int TIFFIsMSB2LSB(TIFF*); -extern uint32 TIFFCurrentRow(TIFF*); -extern tdir_t TIFFCurrentDirectory(TIFF*); -extern tdir_t TIFFNumberOfDirectories(TIFF*); -extern uint32 TIFFCurrentDirOffset(TIFF*); -extern tstrip_t TIFFCurrentStrip(TIFF*); -extern ttile_t TIFFCurrentTile(TIFF*); -extern int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t); -extern int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t); -extern int TIFFWriteCheck(TIFF*, int, const char *); -extern int TIFFCreateDirectory(TIFF*); -extern int TIFFLastDirectory(TIFF*); -extern int TIFFSetDirectory(TIFF*, tdir_t); -extern int TIFFSetSubDirectory(TIFF*, uint32); -extern int TIFFUnlinkDirectory(TIFF*, tdir_t); -extern int TIFFSetField(TIFF*, ttag_t, ...); -extern int TIFFVSetField(TIFF*, ttag_t, va_list); -extern int TIFFWriteDirectory(TIFF *); -extern int TIFFRewriteDirectory(TIFF *); -extern int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int); - -#if defined(c_plusplus) || defined(__cplusplus) -extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); -extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0); -extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0); -extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); -#else -extern void TIFFPrintDirectory(TIFF*, FILE*, long); -extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t); -extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t); -extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int); -#endif - -extern int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * ); -extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); -extern int TIFFRGBAImageOK(TIFF*, char [1024]); -extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); -extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); -extern void TIFFRGBAImageEnd(TIFF*, TIFFRGBAImage*); -extern TIFF* TIFFOpen(const char*, const char*, void*, - TIFFmallocHandler, TIFFreallocHandler, TIFFfreeHandler, - TIFFErrorHandler, TIFFErrorHandler); -extern TIFF* TIFFFdOpen(void*, const char*, const char*, void*, - TIFFmallocHandler, TIFFreallocHandler, TIFFfreeHandler, - TIFFErrorHandler, TIFFErrorHandler); -extern TIFF* TIFFClientOpen(const char*, const char*, void*, - TIFFReadWriteProc, TIFFReadWriteProc, - TIFFSeekProc, TIFFCloseProc, - TIFFSizeProc, - TIFFMapFileProc, TIFFUnmapFileProc, void*, - TIFFmallocHandler, TIFFreallocHandler, TIFFfreeHandler, - TIFFErrorHandler, TIFFErrorHandler); -extern const char* TIFFFileName(TIFF*); -extern void TIFFError(const char*, const char*, ...); -extern void TIFFWarning(const char*, const char*, ...); -extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); -extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); -extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); -extern ttile_t TIFFComputeTile(TIFF*, uint32, uint32, uint32, tsample_t); -extern int TIFFCheckTile(TIFF*, uint32, uint32, uint32, tsample_t); -extern ttile_t TIFFNumberOfTiles(TIFF*); -extern tsize_t TIFFReadTile(TIFF*, - tdata_t, uint32, uint32, uint32, tsample_t); -extern tsize_t TIFFWriteTile(TIFF*, - tdata_t, uint32, uint32, uint32, tsample_t); -extern tstrip_t TIFFComputeStrip(TIFF*, uint32, tsample_t); -extern tstrip_t TIFFNumberOfStrips(TIFF*); -extern tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -extern tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -extern tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); -extern tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t); -extern tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -extern tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -extern tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); -extern tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t); -extern void TIFFSetWriteOffset(TIFF*, toff_t); -extern void TIFFSwabShort(uint16*); -extern void TIFFSwabLong(uint32*); -extern void TIFFSwabDouble(double*); -extern void TIFFSwabArrayOfShort(uint16*, unsigned long); -extern void TIFFSwabArrayOfLong(uint32*, unsigned long); -extern void TIFFSwabArrayOfDouble(double*, unsigned long); -extern void TIFFReverseBits(unsigned char *, unsigned long); -extern const unsigned char* TIFFGetBitRevTable(int); - -#ifdef LOGLUV_PUBLIC -#define U_NEU 0.210526316 -#define V_NEU 0.473684211 -#define UVSCALE 410. -extern double LogL16toY(int); -extern double LogL10toY(int); -extern void XYZtoRGB24(float*, uint8*); -extern int uv_decode(double*, double*, int); -extern void LogLuv24toXYZ(uint32, float*); -extern void LogLuv32toXYZ(uint32, float*); -#if defined(c_plusplus) || defined(__cplusplus) -extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER); -extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER); -extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER); -extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER); -extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER); -#else -extern int LogL16fromY(double, int); -extern int LogL10fromY(double, int); -extern int uv_encode(double, double, int); -extern uint32 LogLuv24fromXYZ(float*, int); -extern uint32 LogLuv32fromXYZ(float*, int); -#endif -#endif /* LOGLUV_PUBLIC */ -#if defined(__cplusplus) -} -#endif -#endif /* _TIFFIO_ */ diff --git a/src/libs/pdflib/libs/tiff/tiffiop.h b/src/libs/pdflib/libs/tiff/tiffiop.h deleted file mode 100644 index a573a2cde5..0000000000 --- a/src/libs/pdflib/libs/tiff/tiffiop.h +++ /dev/null @@ -1,279 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tiffiop.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _TIFFIOP_ -#define _TIFFIOP_ -/* - * ``Library-private'' definitions. - */ - -#include "port.h" /* PDFlib GmbH */ -#include "tiffconf.h" - -#include "tiffio.h" -#include "tif_dir.h" - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - -/* - * Typedefs for ``method pointers'' used internally. - */ -typedef unsigned char tidataval_t; /* internal image data value type */ -typedef tidataval_t* tidata_t; /* reference to internal image data */ - -typedef void (*TIFFVoidMethod)(TIFF*); -typedef int (*TIFFBoolMethod)(TIFF*); -typedef int (*TIFFPreMethod)(TIFF*, tsample_t); -typedef int (*TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t); -typedef int (*TIFFSeekMethod)(TIFF*, uint32); -typedef void (*TIFFPostMethod)(TIFF*, tidata_t, tsize_t); -typedef int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list); -typedef int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list); -typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); -typedef uint32 (*TIFFStripMethod)(TIFF*, uint32); -typedef void (*TIFFTileMethod)(TIFF*, uint32*, uint32*); - -struct tiff { - char* tif_name; /* name of open file */ - FILE* tif_fd; /* open file descriptor */ - int tif_mode; /* open mode (O_*) */ - uint32 tif_flags; -#define TIFF_FILLORDER 0x0003 /* natural bit fill order for machine */ -#define TIFF_DIRTYHEADER 0x0004 /* header must be written on close */ -#define TIFF_DIRTYDIRECT 0x0008 /* current directory must be written */ -#define TIFF_BUFFERSETUP 0x0010 /* data buffers setup */ -#define TIFF_CODERSETUP 0x0020 /* encoder/decoder setup done */ -#define TIFF_BEENWRITING 0x0040 /* written 1+ scanlines to file */ -#define TIFF_SWAB 0x0080 /* byte swap file information */ -#define TIFF_NOBITREV 0x0100 /* inhibit bit reversal logic */ -#define TIFF_MYBUFFER 0x0200 /* my raw data buffer; free on close */ -#define TIFF_ISTILED 0x0400 /* file is tile, not strip- based */ -#define TIFF_MAPPED 0x0800 /* file is mapped into memory */ -#define TIFF_POSTENCODE 0x1000 /* need call to postencode routine */ -#define TIFF_INSUBIFD 0x2000 /* currently writing a subifd */ -#define TIFF_UPSAMPLED 0x4000 /* library is doing data up-sampling */ -#define TIFF_STRIPCHOP 0x8000 /* enable strip chopping support */ - toff_t tif_diroff; /* file offset of current directory */ - toff_t tif_nextdiroff; /* file offset of following directory */ - TIFFDirectory tif_dir; /* internal rep of current directory */ - TIFFHeader tif_header; /* file's header block */ - tidata_t tif_clientdir; /* client TIFF directory */ - const int* tif_typeshift; /* data type shift counts */ - const long* tif_typemask; /* data type masks */ - uint32 tif_row; /* current scanline */ - tdir_t tif_curdir; /* current directory (index) */ - tstrip_t tif_curstrip; /* current strip for read/write */ - toff_t tif_curoff; /* current offset for read/write */ - toff_t tif_dataoff; /* current offset for writing dir */ -#if SUBIFD_SUPPORT - uint16 tif_nsubifd; /* remaining subifds to write */ - toff_t tif_subifdoff; /* offset for patching SubIFD link */ -#endif -/* tiling support */ - uint32 tif_col; /* current column (offset by row too) */ - ttile_t tif_curtile; /* current tile for read/write */ - tsize_t tif_tilesize; /* # of bytes in a tile */ -/* compression scheme hooks */ - TIFFBoolMethod tif_setupdecode;/* called once before predecode */ - TIFFPreMethod tif_predecode; /* pre- row/strip/tile decoding */ - TIFFBoolMethod tif_setupencode;/* called once before preencode */ - TIFFPreMethod tif_preencode; /* pre- row/strip/tile encoding */ - TIFFBoolMethod tif_postencode; /* post- row/strip/tile encoding */ - TIFFCodeMethod tif_decoderow; /* scanline decoding routine */ - TIFFCodeMethod tif_encoderow; /* scanline encoding routine */ - TIFFCodeMethod tif_decodestrip;/* strip decoding routine */ - TIFFCodeMethod tif_encodestrip;/* strip encoding routine */ - TIFFCodeMethod tif_decodetile; /* tile decoding routine */ - TIFFCodeMethod tif_encodetile; /* tile encoding routine */ - TIFFVoidMethod tif_close; /* cleanup-on-close routine */ - TIFFSeekMethod tif_seek; /* position within a strip routine */ - TIFFVoidMethod tif_cleanup; /* cleanup state routine */ - TIFFStripMethod tif_defstripsize;/* calculate/constrain strip size */ - TIFFTileMethod tif_deftilesize;/* calculate/constrain tile size */ - tidata_t tif_data; /* compression scheme private data */ -/* input/output buffering */ - tsize_t tif_scanlinesize;/* # of bytes in a scanline */ - tsize_t tif_scanlineskew;/* scanline skew for reading strips */ - tidata_t tif_rawdata; /* raw data buffer */ - tsize_t tif_rawdatasize;/* # of bytes in raw data buffer */ - tidata_t tif_rawcp; /* current spot in raw buffer */ - tsize_t tif_rawcc; /* bytes unread from raw buffer */ -/* memory-mapped file support */ - tidata_t tif_base; /* base of mapped file */ - toff_t tif_size; /* size of mapped file region (bytes) */ - TIFFMapFileProc tif_mapproc; /* map file method */ - TIFFUnmapFileProc tif_unmapproc;/* unmap file method */ -/* input/output callback methods */ - void* tif_clientdata; /* callback parameter */ - TIFFReadWriteProc tif_readproc; /* read method */ - TIFFReadWriteProc tif_writeproc;/* write method */ - TIFFSeekProc tif_seekproc; /* lseek method */ - TIFFCloseProc tif_closeproc; /* close method */ - TIFFSizeProc tif_sizeproc; /* filesize method */ -/* post-decoding support */ - TIFFPostMethod tif_postdecode; /* post decoding routine */ -/* tag support */ - TIFFFieldInfo** tif_fieldinfo; /* sorted table of registered tags */ - int tif_nfields; /* # entries in registered tag table */ - TIFFVSetMethod tif_vsetfield; /* tag set routine */ - TIFFVGetMethod tif_vgetfield; /* tag get routine */ - TIFFPrintMethod tif_printdir; /* directory print routine */ - void* pdflib_opaque; /* for PDFlib memory handling */ - TIFFmallocHandler pdflib_malloc; /* for PDFlib memory handling */ - TIFFreallocHandler pdflib_realloc; /* for PDFlib memory handling */ - TIFFfreeHandler pdflib_free; /* for PDFlib memory handling */ - TIFFErrorHandler pdflib_error; /* for PDFlib */ - TIFFErrorHandler pdflib_warn; /* for PDFlib */ -}; - -#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */ - -#define isTiled(tif) (((tif)->tif_flags & TIFF_ISTILED) != 0) -#define isMapped(tif) (((tif)->tif_flags & TIFF_MAPPED) != 0) -#define isFillOrder(tif, o) (((tif)->tif_flags & (o)) != 0) -#define isUpSampled(tif) (((tif)->tif_flags & TIFF_UPSAMPLED) != 0) -#define TIFFReadFile(tif, buf, size) \ - ((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size)) -#define TIFFWriteFile(tif, buf, size) \ - ((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size)) -#define TIFFSeekFile(tif, off, whence) \ - ((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence)) -#define TIFFCloseFile(tif) \ - ((*(tif)->tif_closeproc)((tif)->tif_clientdata)) -#define TIFFGetFileSize(tif) \ - ((*(tif)->tif_sizeproc)((tif)->tif_clientdata)) -#define TIFFMapFileContents(tif, paddr, psize) \ - ((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize)) -#define TIFFUnmapFileContents(tif, addr, size) \ - ((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size)) - -/* - * Default Read/Seek/Write definitions. - */ -#ifndef ReadOK -#define ReadOK(tif, buf, size) \ - (TIFFReadFile(tif, (tdata_t) buf, (tsize_t)(size)) == (tsize_t)(size)) -#endif -#ifndef SeekOK -#define SeekOK(tif, off) \ - (TIFFSeekFile(tif, (toff_t) off, SEEK_SET) != (toff_t) -1) -#endif -#ifndef WriteOK -#define WriteOK(tif, buf, size) \ - (TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size) -#endif - -/* NB: the uint32 casts are to silence certain ANSI-C compilers */ -#define TIFFhowmany(x, y) ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) -#define TIFFroundup(x, y) (TIFFhowmany(x,y)*((uint32)(y))) - -#if defined(__cplusplus) -extern "C" { -#endif -extern int PDFlibEncodeError(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFgetMode(const char*, const char*); -extern int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t); -extern int _TIFFNoPreCode (TIFF*, tsample_t); -extern int _TIFFNoSeek(TIFF*, uint32); -extern void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t); -extern void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t); -extern void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t); -extern int TIFFFlushData1(TIFF*); -extern void TIFFFreeDirectory(TIFF*); -extern int TIFFDefaultDirectory(TIFF*); -extern int TIFFSetCompressionScheme(TIFF*, int); -extern int TIFFSetDefaultCompressionState(TIFF*); -extern void _TIFFSetDefaultCompressionState(TIFF*); -extern uint32 _TIFFDefaultStripSize(TIFF*, uint32); -extern void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*); - -extern void _TIFFsetByteArray(TIFF*, void**, void*, long); -extern void _TIFFsetString(TIFF*, char**, char*); -extern void _TIFFsetShortArray(TIFF*, uint16**, uint16*, long); -extern void _TIFFsetLongArray(TIFF*, uint32**, uint32*, long); -extern void _TIFFsetFloatArray(TIFF*, float**, float*, long); -extern void _TIFFsetDoubleArray(TIFF*, double**, double*, long); - -extern void _TIFFprintAscii(FILE*, const char*); -extern void _TIFFprintAsciiTag(FILE*, const char*, const char*); - -GLOBALDATA(TIFFErrorHandler,_TIFFwarningHandler); -GLOBALDATA(TIFFErrorHandler,_TIFFerrorHandler); - -extern int TIFFInitDumpMode(TIFF*, int); -#ifdef PACKBITS_SUPPORT -extern int TIFFInitPackBits(TIFF*, int); -#endif -#ifdef CCITT_SUPPORT -extern int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int); -extern int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int); -#endif -#ifdef THUNDER_SUPPORT -extern int TIFFInitThunderScan(TIFF*, int); -#endif -#ifdef NEXT_SUPPORT -extern int TIFFInitNeXT(TIFF*, int); -#endif -#ifdef LZW_SUPPORT -extern int TIFFInitLZW(TIFF*, int); -#endif -#ifdef OJPEG_SUPPORT -extern int TIFFInitOJPEG(TIFF*, int); -#endif -#ifdef JPEG_SUPPORT -extern int TIFFInitJPEG(TIFF*, int); -#endif -#ifdef JBIG_SUPPORT -extern int TIFFInitJBIG(TIFF*, int); -#endif -#ifdef ZIP_SUPPORT -extern int TIFFInitZIP(TIFF*, int); -#endif -#ifdef PIXARLOG_SUPPORT -extern int TIFFInitPixarLog(TIFF*, int); -#endif -#ifdef LOGLUV_SUPPORT -extern int TIFFInitSGILog(TIFF*, int); -#endif -#ifdef VMS -extern const TIFFCodec _TIFFBuiltinCODECS[]; -#else -extern TIFFCodec _TIFFBuiltinCODECS[]; -#endif - -#if defined(__cplusplus) -} -#endif -#endif /* _TIFFIOP_ */ diff --git a/src/libs/pdflib/libs/tiff/tiffvers.h b/src/libs/pdflib/libs/tiff/tiffvers.h deleted file mode 100644 index 61610c2816..0000000000 --- a/src/libs/pdflib/libs/tiff/tiffvers.h +++ /dev/null @@ -1,13 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: tiffvers.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 3.5.7\n\ -Copyright (c) 1988-1996 Sam Leffler\n\ -Copyright (c) 1991-1996 Silicon Graphics, Inc." -/* - * This define can be used in code that requires - * compilation-related definitions specific to a - * version or versions of the library. Runtime - * version checking should be done based on the - * string returned by TIFFGetVersion. - */ -#define TIFFLIB_VERSION 20011123 diff --git a/src/libs/pdflib/libs/tiff/uvcode.h b/src/libs/pdflib/libs/tiff/uvcode.h deleted file mode 100644 index 4f4b66eb58..0000000000 --- a/src/libs/pdflib/libs/tiff/uvcode.h +++ /dev/null @@ -1,175 +0,0 @@ -/* PDFlib GmbH cvsid: $Id: uvcode.h 14574 2005-10-29 16:27:43Z bonefish $ */ - -/* Version 1.0 generated April 7, 1997 by Greg Ward Larson, SGI */ -#define UV_SQSIZ (float)0.003500 -#define UV_NDIVS 16289 -#define UV_VSTART (float)0.016940 -#define UV_NVS 163 -static struct { - float ustart; - short nus, ncum; -} uv_row[UV_NVS] = { - {(float)0.247663, 4, 0}, - {(float)0.243779, 6, 4}, - {(float)0.241684, 7, 10}, - {(float)0.237874, 9, 17}, - {(float)0.235906, 10, 26}, - {(float)0.232153, 12, 36}, - {(float)0.228352, 14, 48}, - {(float)0.226259, 15, 62}, - {(float)0.222371, 17, 77}, - {(float)0.220410, 18, 94}, - {(float)0.214710, 21, 112}, - {(float)0.212714, 22, 133}, - {(float)0.210721, 23, 155}, - {(float)0.204976, 26, 178}, - {(float)0.202986, 27, 204}, - {(float)0.199245, 29, 231}, - {(float)0.195525, 31, 260}, - {(float)0.193560, 32, 291}, - {(float)0.189878, 34, 323}, - {(float)0.186216, 36, 357}, - {(float)0.186216, 36, 393}, - {(float)0.182592, 38, 429}, - {(float)0.179003, 40, 467}, - {(float)0.175466, 42, 507}, - {(float)0.172001, 44, 549}, - {(float)0.172001, 44, 593}, - {(float)0.168612, 46, 637}, - {(float)0.168612, 46, 683}, - {(float)0.163575, 49, 729}, - {(float)0.158642, 52, 778}, - {(float)0.158642, 52, 830}, - {(float)0.158642, 52, 882}, - {(float)0.153815, 55, 934}, - {(float)0.153815, 55, 989}, - {(float)0.149097, 58, 1044}, - {(float)0.149097, 58, 1102}, - {(float)0.142746, 62, 1160}, - {(float)0.142746, 62, 1222}, - {(float)0.142746, 62, 1284}, - {(float)0.138270, 65, 1346}, - {(float)0.138270, 65, 1411}, - {(float)0.138270, 65, 1476}, - {(float)0.132166, 69, 1541}, - {(float)0.132166, 69, 1610}, - {(float)0.126204, 73, 1679}, - {(float)0.126204, 73, 1752}, - {(float)0.126204, 73, 1825}, - {(float)0.120381, 77, 1898}, - {(float)0.120381, 77, 1975}, - {(float)0.120381, 77, 2052}, - {(float)0.120381, 77, 2129}, - {(float)0.112962, 82, 2206}, - {(float)0.112962, 82, 2288}, - {(float)0.112962, 82, 2370}, - {(float)0.107450, 86, 2452}, - {(float)0.107450, 86, 2538}, - {(float)0.107450, 86, 2624}, - {(float)0.107450, 86, 2710}, - {(float)0.100343, 91, 2796}, - {(float)0.100343, 91, 2887}, - {(float)0.100343, 91, 2978}, - {(float)0.095126, 95, 3069}, - {(float)0.095126, 95, 3164}, - {(float)0.095126, 95, 3259}, - {(float)0.095126, 95, 3354}, - {(float)0.088276, 100, 3449}, - {(float)0.088276, 100, 3549}, - {(float)0.088276, 100, 3649}, - {(float)0.088276, 100, 3749}, - {(float)0.081523, 105, 3849}, - {(float)0.081523, 105, 3954}, - {(float)0.081523, 105, 4059}, - {(float)0.081523, 105, 4164}, - {(float)0.074861, 110, 4269}, - {(float)0.074861, 110, 4379}, - {(float)0.074861, 110, 4489}, - {(float)0.074861, 110, 4599}, - {(float)0.068290, 115, 4709}, - {(float)0.068290, 115, 4824}, - {(float)0.068290, 115, 4939}, - {(float)0.068290, 115, 5054}, - {(float)0.063573, 119, 5169}, - {(float)0.063573, 119, 5288}, - {(float)0.063573, 119, 5407}, - {(float)0.063573, 119, 5526}, - {(float)0.057219, 124, 5645}, - {(float)0.057219, 124, 5769}, - {(float)0.057219, 124, 5893}, - {(float)0.057219, 124, 6017}, - {(float)0.050985, 129, 6141}, - {(float)0.050985, 129, 6270}, - {(float)0.050985, 129, 6399}, - {(float)0.050985, 129, 6528}, - {(float)0.050985, 129, 6657}, - {(float)0.044859, 134, 6786}, - {(float)0.044859, 134, 6920}, - {(float)0.044859, 134, 7054}, - {(float)0.044859, 134, 7188}, - {(float)0.040571, 138, 7322}, - {(float)0.040571, 138, 7460}, - {(float)0.040571, 138, 7598}, - {(float)0.040571, 138, 7736}, - {(float)0.036339, 142, 7874}, - {(float)0.036339, 142, 8016}, - {(float)0.036339, 142, 8158}, - {(float)0.036339, 142, 8300}, - {(float)0.032139, 146, 8442}, - {(float)0.032139, 146, 8588}, - {(float)0.032139, 146, 8734}, - {(float)0.032139, 146, 8880}, - {(float)0.027947, 150, 9026}, - {(float)0.027947, 150, 9176}, - {(float)0.027947, 150, 9326}, - {(float)0.023739, 154, 9476}, - {(float)0.023739, 154, 9630}, - {(float)0.023739, 154, 9784}, - {(float)0.023739, 154, 9938}, - {(float)0.019504, 158, 10092}, - {(float)0.019504, 158, 10250}, - {(float)0.019504, 158, 10408}, - {(float)0.016976, 161, 10566}, - {(float)0.016976, 161, 10727}, - {(float)0.016976, 161, 10888}, - {(float)0.016976, 161, 11049}, - {(float)0.012639, 165, 11210}, - {(float)0.012639, 165, 11375}, - {(float)0.012639, 165, 11540}, - {(float)0.009991, 168, 11705}, - {(float)0.009991, 168, 11873}, - {(float)0.009991, 168, 12041}, - {(float)0.009016, 170, 12209}, - {(float)0.009016, 170, 12379}, - {(float)0.009016, 170, 12549}, - {(float)0.006217, 173, 12719}, - {(float)0.006217, 173, 12892}, - {(float)0.005097, 175, 13065}, - {(float)0.005097, 175, 13240}, - {(float)0.005097, 175, 13415}, - {(float)0.003909, 177, 13590}, - {(float)0.003909, 177, 13767}, - {(float)0.002340, 177, 13944}, - {(float)0.002389, 170, 14121}, - {(float)0.001068, 164, 14291}, - {(float)0.001653, 157, 14455}, - {(float)0.000717, 150, 14612}, - {(float)0.001614, 143, 14762}, - {(float)0.000270, 136, 14905}, - {(float)0.000484, 129, 15041}, - {(float)0.001103, 123, 15170}, - {(float)0.001242, 115, 15293}, - {(float)0.001188, 109, 15408}, - {(float)0.001011, 103, 15517}, - {(float)0.000709, 97, 15620}, - {(float)0.000301, 89, 15717}, - {(float)0.002416, 82, 15806}, - {(float)0.003251, 76, 15888}, - {(float)0.003246, 69, 15964}, - {(float)0.004141, 62, 16033}, - {(float)0.005963, 55, 16095}, - {(float)0.008839, 47, 16150}, - {(float)0.010490, 40, 16197}, - {(float)0.016994, 31, 16237}, - {(float)0.023659, 21, 16268}, -}; diff --git a/src/libs/pdflib/pdflib-config.in b/src/libs/pdflib/pdflib-config.in deleted file mode 100644 index 23d497d0a9..0000000000 --- a/src/libs/pdflib/pdflib-config.in +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -# -# Return information about the local PDFlib installation -# -# $Id: pdflib-config.in 14574 2005-10-29 16:27:43Z bonefish $ - -# installation directories -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -bindir=@bindir@ - -usage() -{ - cat <&2 -fi - -while test $# -gt 0; do - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case $1 in - --bindings) - echo @BINDINGS@ - ;; - --libdir) - echo $libdir - ;; - --includedir) - echo $includedir - ;; - --version) - echo @VERSION@ - ;; - --majorversion) - echo @PDFLIB_MAJOR@ - ;; - --minorversion) - echo @PDFLIB_MINOR@ - ;; - --pdi) - echo @WITH_PDI@ - ;; - --revision) - echo @PDFLIB_REVISION@ - ;; - --libversion) - echo @PDFLIB_LTCURRENT@:@PDFLIB_LTREVISION@:@PDFLIB_LTAGE@ - ;; - --libs|--ldflags) - echo -L@libdir@ -l@PDFLIBNAME@ @EXTERNALLIBS@ - ;; - --cflags|--includes) - echo -I@includedir@ - ;; - --all) - echo "PDFlib @VERSION@" - echo "bindings: @BINDINGS@" - echo "includedir: $includedir" - echo "libdir: $libdir" - echo "libversion: @PDFLIB_LTCURRENT@:@PDFLIB_LTREVISION@:@PDFLIB_LTAGE@" - echo "pdi: @WITH_PDI@" - echo "ldflags: -L@libdir@ -l@PDFLIBNAME@ @EXTERNALLIBS@" - echo "cflags: -I@includedir@" - ;; - *) - usage 1 1>&2 - ;; - esac - shift -done diff --git a/src/libs/pdflib/progs/Makefile b/src/libs/pdflib/progs/Makefile deleted file mode 100644 index 5f6c2a2d7c..0000000000 --- a/src/libs/pdflib/progs/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# Main libs Makefile -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -include ../config/mkcommon.inc - -MAKEOPT = -i -SUB_DIRS = $(PROGTARGETS) - -include ../config/mksubdirs.inc diff --git a/src/libs/pdflib/progs/pdflib/Makefile b/src/libs/pdflib/progs/pdflib/Makefile deleted file mode 100644 index b2e196d6ab..0000000000 --- a/src/libs/pdflib/progs/pdflib/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Makefile for PDFlib clients -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../.. - -include $(top_builddir)/config/mkcommon.inc - -DEPLIBS = $(PDFLIBLINK) -LIBS = $(DEPLIBS) $(EXTERNALLIBS) -INCLUDES = $(PDFLIBINC) -CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES) -FLAGS = $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -EXTRA_SOURCES = getopt.c - -# ------------------------------ - -SRC = \ - $(srcdir)/pdfimpose.c \ - $(srcdir)/pdfimage.c \ - $(srcdir)/text2pdf.c - -PROGS = \ - pdfimpose$(EXE) \ - pdfimage$(EXE) \ - text2pdf$(EXE) - -include $(top_builddir)/config/mkprogs.inc - -pdfimpose$(EXE): pdfimpose.c $(DEPLIBS) $(EXTRA_SOURCES) - $(PROGS_BUILD) - -pdfimage$(EXE): pdfimage.c $(DEPLIBS) $(EXTRA_SOURCES) - $(PROGS_BUILD) - -text2pdf$(EXE): text2pdf.c $(DEPLIBS) $(EXTRA_SOURCES) - $(PROGS_BUILD) - diff --git a/src/libs/pdflib/progs/pdflib/getopt.c b/src/libs/pdflib/progs/pdflib/getopt.c deleted file mode 100644 index 13d99c9a84..0000000000 --- a/src/libs/pdflib/progs/pdflib/getopt.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 1987 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)getopt.c 4.13 (Berkeley) 2/23/91"; -#endif /* LIBC_SCCS and not lint */ - -#include -#include - -/* - * get option letter from argument vector - */ -int opterr = 1, /* if error message should be printed */ - optind = 1, /* index into parent argv vector */ - optopt; /* character checked for validity */ -char *optarg; /* argument associated with option */ - -#define BADCH (int)'?' -#define EMSG "" - -int -getopt(int nargc, char *const* nargv, const char *ostr) -{ - static char *place = EMSG; /* option letter processing */ - register char *oli; /* option letter list index */ - char *p; - - if (!*place) { /* update scanning pointer */ - if (optind >= nargc || *(place = nargv[optind]) != '-') { - place = EMSG; - return(EOF); - } - if (place[1] && *++place == '-') { /* found "--" */ - ++optind; - place = EMSG; - return(EOF); - } - } /* option letter okay? */ - if ((optopt = (int)*place++) == (int)':' || - !(oli = strchr(ostr, optopt))) { - /* - * if the user didn't specify '-' as an option, - * assume it means EOF. - */ - if (optopt == (int)'-') - return(EOF); - if (!*place) - ++optind; - if (opterr) { - if (!(p = strrchr(*nargv, '/'))) - p = *nargv; - else - ++p; - (void)fprintf(stderr, "%s: illegal option -- %c\n", - p, optopt); - } - return(BADCH); - } - if (*++oli != ':') { /* don't need argument */ - optarg = NULL; - if (!*place) - ++optind; - } - else { /* need an argument */ - if (*place) /* no white space */ - optarg = place; - else if (nargc <= ++optind) { /* no arg */ - place = EMSG; - if (!(p = strrchr(*nargv, '/'))) - p = *nargv; - else - ++p; - if (opterr) - (void)fprintf(stderr, - "%s: option requires an argument -- %c\n", - p, optopt); - return(BADCH); - } - else /* white space */ - optarg = nargv[optind]; - place = EMSG; - ++optind; - } - return(optopt); /* dump back option letter */ -} diff --git a/src/libs/pdflib/progs/pdflib/pdfimage.c b/src/libs/pdflib/progs/pdflib/pdfimage.c deleted file mode 100644 index deedacb2eb..0000000000 --- a/src/libs/pdflib/progs/pdflib/pdfimage.c +++ /dev/null @@ -1,165 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdfimage.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Convert BMP/PNG/TIFF/GIF/JPEG images to PDF - * - */ - -#include -#include -#include -#include - -#if defined(__CYGWIN32__) -#include -#elif defined(WIN32) -int getopt(int argc, char * const argv[], const char *optstring); -extern char *optarg; -extern int optind; -#elif !defined(WIN32) && !defined(MAC) -#include -#endif - -#ifdef WIN32 -#include -#endif - -#ifdef NeXT -#include /* for getopt(), optind, optarg */ -#endif - -#ifdef __CYGWIN32__ -#include /* for getopt(), optind, optarg */ -#endif - -#include "pdflib.h" - -#if defined WIN32 || defined __DJGPP__ || \ - defined __OS2__ || defined __IBMC__ || defined __IBMCPP__ || \ - defined __POWERPC__ || defined __CFM68K__ || defined __MC68K__ - -#define READMODE "rb" - -#else - -#define READMODE "r" - -#endif /* Mac, Windows, and OS/2 platforms */ - -static void -usage(void) -{ - fprintf(stderr, "pdfimage: convert images to PDF.\n"); - fprintf(stderr, "(C) PDFlib GmbH and Thomas Merz 1997-2004\n"); - fprintf(stderr, "usage: pdfimage [options] imagefile(s)\n"); - fprintf(stderr, "Available options:\n"); - fprintf(stderr, "-o output file (required)\n"); - fprintf(stderr, "-p bookmark page numbering starting from num\n"); - fprintf(stderr, "-r force resolution overriding image settings\n"); - - exit(1); -} - -int -main(int argc, char *argv[]) -{ - char *pdffilename = NULL; - FILE *imagefile; - PDF *p; - int image; - int opt; - int resolution = 0; - int page_numbering = 0; - int current_page = 1; - char optlist[128]; - - while ((opt = getopt(argc, argv, "r:o:p:w")) != -1) - switch (opt) { - case 'o': - pdffilename = optarg; - break; - - case 'p': - page_numbering = 1; - if (optarg) { - current_page = atoi(optarg); - } - break; - - case 'r': - if (!optarg || (resolution = atoi(optarg)) <= 0) { - fprintf(stderr, "Error: non-positive resolution.\n"); - usage(); - } - - case '?': - default: - usage(); - } - - if (optind == argc) { - fprintf(stderr, "Error: no image files given.\n"); - usage(); - } - - if (pdffilename == NULL) { - fprintf(stderr, "Error: no output file given.\n"); - usage(); - } - - p = PDF_new(); - - if (PDF_open_file(p, pdffilename) == -1) { - fprintf(stderr, "Error: cannot open output file %s.\n", pdffilename); - exit(1); - } - - PDF_set_info(p, "Creator", "pdfimage"); - - while (optind++ < argc) { - fprintf(stderr, "Processing image file '%s'...\n", argv[optind-1]); - - image = PDF_load_image(p, "auto", argv[optind-1], 0, ""); - - if (image == -1) { - fprintf(stderr, "Error: %s (skipped).\n", PDF_get_errmsg(p)); - continue; - } - - /* dummy page size, will be adjusted later */ - PDF_begin_page(p, 20, 20); - - /* define outline with filename or page number */ - if (page_numbering) { - char buf[32]; - sprintf(buf, "Page %d", current_page++); - PDF_add_bookmark(p, buf, 0, 0); - } else { - PDF_add_bookmark(p, argv[optind-1], 0, 0); - } - - if (resolution != 0) - sprintf(optlist, "dpi %d", resolution); - else - sprintf(optlist, "adjustpage"); - - PDF_fit_image(p, image, 0.0, 0.0, optlist); - - PDF_end_page(p); - } - - PDF_close(p); - PDF_delete(p); - exit(0); -} diff --git a/src/libs/pdflib/progs/pdflib/pdfimpose.c b/src/libs/pdflib/progs/pdflib/pdfimpose.c deleted file mode 100644 index 1841366817..0000000000 --- a/src/libs/pdflib/progs/pdflib/pdfimpose.c +++ /dev/null @@ -1,329 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdfimpose.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Impose multiple PDF documents on a single sheet, - * or concatenate multiple PDFs (if no -g option is supplied) - * (requires the PDF import library PDI) - * - */ - -#include -#include -#include - -#if defined(__CYGWIN32__) -#include -#elif defined(WIN32) -int getopt(int argc, char * const argv[], const char *optstring); -extern char *optarg; -extern int optind; -#elif !defined(WIN32) && !defined(MAC) -#include -#endif - -#include "pdflib.h" - -/* Array of known page sizes including name, width, and height */ - -typedef struct { const char *name; float width; float height; } PageSize_s; - -PageSize_s PageSizes[] = { - {"a0", 2380.0f, 3368.0f}, - {"a1", 1684.0f, 2380.0f}, - {"a2", 1190.0f, 1684.0f}, - {"a3", 842.0f, 1190.0f}, - {"a4", 595.0f, 842.0f}, - {"a5", 421.0f, 595.0f}, - {"a6", 297.0f, 421.0f}, - {"b5", 501.0f, 709.0f}, - {"letter", 612.0f, 792.0f}, - {"legal", 612.0f, 1008.0f}, - {"ledger", 1224.0f, 792.0f}, - {"p11x17", 792.0f, 1224.0f} -}; - -#define PAGESIZELISTLEN (sizeof(PageSizes)/sizeof(PageSizes[0])) - -static void -usage(void) -{ - fprintf(stderr, - "\npdfimpose: impose multiple PDF documents on a single sheet.\n"); - fprintf(stderr, "(C) PDFlib GmbH and Thomas Merz 2001-2004\n"); - fprintf(stderr, "usage: pdfimpose [options] pdffiles(s)\n\n"); - fprintf(stderr, "Available options:\n"); - fprintf(stderr, "-b print boxes around imposed pages\n"); - fprintf(stderr, - "-g wxh number of columns and rows per sheet (default: 1x1)\n"); - fprintf(stderr, "-l landscape mode\n"); - fprintf(stderr, "-n start each document on a new page\n"); - fprintf(stderr, "-o output file\n"); - fprintf(stderr, "-p page format (a0-a6, letter, legal, etc.)\n"); - fprintf(stderr, "-q quiet mode: do not emit info messages\n"); - fprintf(stderr, "-v PDF output version: 1.3, 1.4, or 1.5\n"); - - exit(1); -} - -int -main(int argc, char *argv[]) -{ - char *pdffilename = NULL; - char *pdfversion = NULL; - PDF *p; - int opt; - int doc, page; - int pageno, docpages; - char *filename; - int quiet = 0, landscape = 0, boxes = 0, newpage = 0; - int cols = 1, rows = 1; - int c = 0, r = 0; - float sheetwidth = 595.0f, sheetheight = 842.0f; - float width, height, scale = 1.0f; - float rowheight = 0.0f, colwidth = 0.0f; - - while ((opt = getopt(argc, argv, "bg:lnp:o:qv:")) != -1) - switch (opt) { - case 'b': - boxes = 1; - break; - - case 'g': - if (sscanf(optarg, "%dx%d", &rows, &cols) != 2) { - fprintf(stderr, "Error: Couldn't parse -g option.\n"); - usage(); - } - if (rows <= 0 || cols <= 0) { - fprintf(stderr, "Bad row or column number.\n"); - usage(); - } - break; - - case 'l': - landscape = 1; - break; - - case 'n': - newpage = 1; - break; - - case 'p': - for(c = 0; c < PAGESIZELISTLEN; c++) - if (!strcmp((const char *) optarg, PageSizes[c].name)) { - sheetheight = PageSizes[c].height; - sheetwidth = PageSizes[c].width; - break; - } - if (c == PAGESIZELISTLEN) { /* page size name not found */ - fprintf(stderr, "Error: Unknown page size '%s'.\n", optarg); - usage(); - } - break; - - case 'o': - pdffilename = optarg; - break; - - case 'v': - pdfversion = optarg; - if (strcmp(pdfversion, "1.3") && strcmp(pdfversion, "1.4") && - strcmp(pdfversion, "1.5")) { - fprintf(stderr, "Error: bad PDF version number '%s'.\n", - optarg); - usage(); - } - - break; - - case 'q': - quiet = 1; - break; - - case '?': - default: - usage(); - } - - if (optind == argc) { - fprintf(stderr, "Error: no PDF files given.\n"); - usage(); - } - - if (pdffilename == NULL) { - fprintf(stderr, "Error: no PDF output file given.\n"); - usage(); - } - - p = PDF_new(); - - if (pdfversion) - PDF_set_parameter(p, "compatibility", pdfversion); - - if (PDF_open_file(p, pdffilename) == -1) { - fprintf(stderr, "Error: %s.\n", PDF_get_errmsg(p)); - exit(1); - } - - PDF_set_info(p, "Creator", "pdfimpose by PDFlib GmbH"); - - PDF_set_parameter(p, "openaction", "fitpage"); - - if (!quiet) - PDF_set_parameter(p, "pdiwarning", "true"); /* report PDI problems */ - - /* multi-page imposition: calculate scaling factor and cell dimensions */ - if (rows != 1 || cols != 1) { - if (landscape) { - height = sheetheight; - sheetheight = sheetwidth; - sheetwidth = height; - } - - if (rows > cols) - scale = 1.0f / rows; - else - scale = 1.0f / cols; - - rowheight = sheetheight * scale; - colwidth = sheetwidth * scale; - } - - /* process all PDF documents */ - while (optind++ < argc) { - filename = argv[optind-1]; - - if (!quiet) - fprintf(stderr, "Imposing '%s'...\n", filename); - - if ((doc = PDF_open_pdi(p, filename, "", 0)) == -1) { - if (quiet) - fprintf(stderr, "Error: %s.\n", PDF_get_errmsg(p)); - continue; - } - - /* query number of pages in the document */ - docpages = (int) PDF_get_pdi_value(p, "/Root/Pages/Count", doc, -1, 0); - - /* single cell only: concatenate, using original page dimensions */ - if (rows == 1 && cols == 1) { - /* open all pages and add to the output file */ - for (pageno = 1; pageno <= docpages ; pageno++) { - - page = PDF_open_pdi_page(p, doc, pageno, ""); - - if (page == -1) { - /* we'll get an exception in verbose mode anyway */ - if (quiet) - fprintf(stderr, - "Couldn't open page %d of PDF file '%s' (%s)\n", - pageno, filename, PDF_get_errmsg(p)); - break; - } - - sheetwidth = PDF_get_pdi_value(p, "width", doc, page, 0); - sheetheight = PDF_get_pdi_value(p, "height", doc, page, 0); - - PDF_begin_page(p, sheetwidth, sheetheight); - - /* define bookmark with filename */ - if (pageno == 1) - PDF_add_bookmark(p, argv[optind-1], 0, 0); - - PDF_place_pdi_page(p, page, 0.0f, 0.0f, 1.0f, 1.0f); - PDF_close_pdi_page(p, page); - PDF_end_page(p); - } - - } else { /* impose multiple pages */ - - if (newpage) - r = c = 0; - - /* open all pages and add to the output file */ - for (pageno = 1; pageno <= docpages ; pageno++) { - - page = PDF_open_pdi_page(p, doc, pageno, ""); - - if (page == -1) { - /* we'll get an exception in verbose mode anyway */ - if (quiet) - fprintf(stderr, - "Couldn't open page %d of PDF file '%s' (%s)\n", - pageno, filename, PDF_get_errmsg(p)); - break; - } - - /* start a new page */ - if (r == 0 && c == 0) - PDF_begin_page(p, sheetwidth, sheetheight); - - /* define bookmark with filename */ - if (pageno == 1) - PDF_add_bookmark(p, argv[optind-1], 0, 0); - - width = PDF_get_pdi_value(p, "width", doc, page, 0); - height = PDF_get_pdi_value(p, "height", doc, page, 0); - - /* - * The save/restore pair is required to get the clipping right, - * and helps PostScript printing manage its memory efficiently. - */ - PDF_save(p); - PDF_rect(p, c * colwidth, sheetheight - (r + 1) * rowheight, - colwidth, rowheight); - PDF_clip(p); - - PDF_setcolor(p, "stroke", "gray", 0.0f, 0.0f, 0.0f, 0.0f); - - /* TODO: adjust scaling factor if page doesn't fit into cell */ - PDF_place_pdi_page(p, page, - c * colwidth, sheetheight - (r + 1) * rowheight, - scale, scale); - - PDF_close_pdi_page(p, page); - - /* only half of the linewidth will be drawn due to clip() */ - if (boxes) { - PDF_setlinewidth(p, 1.0f * scale); - PDF_rect(p, c * colwidth, - sheetheight - (r + 1) * rowheight, - colwidth, rowheight); - PDF_stroke(p); - } - - PDF_restore(p); - - c++; - if (c == cols) { - c = 0; - r++; - } - if (r == rows) { - r = 0; - PDF_end_page(p); - } - } - } - - PDF_close_pdi(p, doc); - } - - /* finish last page if multi-page imposition */ - if ((rows != 1 || cols != 1) && (r != 0 || c != 0)) - PDF_end_page(p); - - PDF_close(p); - PDF_delete(p); - exit(0); -} diff --git a/src/libs/pdflib/progs/pdflib/text2pdf.c b/src/libs/pdflib/progs/pdflib/text2pdf.c deleted file mode 100644 index e88cc45831..0000000000 --- a/src/libs/pdflib/progs/pdflib/text2pdf.c +++ /dev/null @@ -1,233 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: text2pdf.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * Convert text files to PDF - * - */ - -#include -#include -#include - -#if defined(__CYGWIN32__) -#include -#elif defined(WIN32) -int getopt(int argc, char * const argv[], const char *optstring); -extern char *optarg; -extern int optind; -#elif !defined(WIN32) && !defined(MAC) -#include -#endif - - -#ifdef WIN32 -#include -#endif - -#ifdef NeXT -#include /* for getopt(), optind, optarg */ -#endif - -#ifdef __CYGWIN32__ -#include /* for getopt(), optind, optarg */ -#endif - -#if defined WIN32 || defined __DJGPP__ || \ - defined __OS2__ || defined __IBMC__ || defined __IBMCPP__ || \ - defined __POWERPC__ || defined __CFM68K__ || defined __MC68K__ || \ - defined AS400 || defined __ILEC400__ - -#define READMODE "rb" - -#else - -#define READMODE "r" - -#endif /* Mac, Windows, and OS/2 platforms */ - -/* figure out whether or not we're running on an EBCDIC-based machine */ -#define ASCII_A 0x41 -#define PLATFORM_A 'A' -#define EBCDIC_BRACKET 0x4A -#define PLATFORM_BRACKET '[' - -#if (ASCII_A != PLATFORM_A && EBCDIC_BRACKET == PLATFORM_BRACKET) -#define PDFLIB_EBCDIC -#endif - -#include "pdflib.h" - -static void -usage(void) -{ - fprintf(stderr, "text2pdf - convert text files to PDF.\n"); - fprintf(stderr, "(C) PDFlib GmbH and Thomas Merz 1997-2004\n"); - fprintf(stderr, "usage: text2pdf [options] [textfile]\n"); - fprintf(stderr, "Available options:\n"); - fprintf(stderr, - "-e encoding font encoding to use. Common encoding names:\n"); - fprintf(stderr, - " winansi, macroman, ebcdic, or user-defined\n"); - fprintf(stderr, " host = default encoding of this platform\n"); - fprintf(stderr, "-f fontname name of font to use\n"); - fprintf(stderr, "-h height page height in points\n"); - fprintf(stderr, "-m margin margin size in points\n"); - fprintf(stderr, "-o filename PDF output file name\n"); - fprintf(stderr, "-s size font size\n"); - fprintf(stderr, "-w width page width in points\n"); - - exit(1); -} - -#define BUFLEN 512 - -int -main(int argc, char *argv[]) -{ - char buf[BUFLEN], *s; - char *pdffilename = NULL; - FILE *textfile = stdin; - PDF *p; - int opt; - int font; - char *fontname, *encoding; - float fontsize; - float x, y, width = a4_width, height = a4_height, margin = 20; - char ff, nl; - - fontname = "Courier"; - fontsize = 12.0; - encoding = "host"; - nl = '\n'; - ff = '\f'; - - while ((opt = getopt(argc, argv, "e:f:h:m:o:s:w:")) != -1) - switch (opt) { - case 'e': - encoding = optarg; - break; - - case 'f': - fontname = optarg; - break; - - case 'h': - height = atoi(optarg); - if (height < 0) { - fprintf(stderr, "Error: bad page height %f!\n", height); - usage(); - } - break; - - case 'm': - margin = atoi(optarg); - if (margin < 0) { - fprintf(stderr, "Error: bad margin %f!\n", margin); - usage(); - } - break; - - case 'o': - pdffilename = optarg; - break; - - case 's': - fontsize = atoi(optarg); - if (fontsize < 0) { - fprintf(stderr, "Error: bad font size %f!\n", fontsize); - usage(); - } - break; - - case 'w': - width = atoi(optarg); - if (width < 0) { - fprintf(stderr, "Error: bad page width %f!\n", width); - usage(); - } - break; - - case '?': - default: - usage(); - } - - if (!strcmp(encoding, "ebcdic")) { - /* form feed is 0x0C in both ASCII and EBCDIC */ - nl = 0x15; - } - - if (pdffilename == NULL) - usage(); - - if (optind < argc) { - if ((textfile = fopen(argv[optind], READMODE)) == NULL) { - fprintf(stderr, "Error: cannot open input file %s.\n",argv[optind]); - exit(2); - } - } else - textfile = stdin; - - p = PDF_new(); - if (p == NULL) { - fprintf(stderr, "Error: cannot open output file %s.\n", pdffilename); - exit(1); - } - - PDF_open_file(p, pdffilename); - - PDF_set_info(p, "Title", "Converted text"); - PDF_set_info(p, "Creator", "text2pdf"); - - x = margin; - y = height - margin; - - while ((s = fgets(buf, BUFLEN, textfile)) != NULL) { - if (s[0] == ff) { - if (y == height - margin) - PDF_begin_page(p, width, height); - PDF_end_page(p); - y = height - margin; - continue; - } - - if (s[0] != '\0' && s[strlen(s) - 1] == nl) - s[strlen(s) - 1] = '\0'; /* remove newline character */ - - if (y < margin) { /* page break necessary? */ - y = height - margin; - PDF_end_page(p); - } - - if (y == height - margin) { - PDF_begin_page(p, width, height); - font = PDF_findfont(p, fontname, encoding, 0); - PDF_setfont(p, font, fontsize); - PDF_set_text_pos(p, x, y); - y -= fontsize; - } - - PDF_continue_text(p, s); - y -= fontsize; - - } - - if (y != height - margin) - PDF_end_page(p); - - PDF_close(p); - PDF_delete(p); - - exit(0); -} diff --git a/src/libs/pdflib/readme.txt b/src/libs/pdflib/readme.txt deleted file mode 100644 index a8bb0981f7..0000000000 --- a/src/libs/pdflib/readme.txt +++ /dev/null @@ -1,189 +0,0 @@ -================================================ -PDFlib - A library for generating PDF on the fly -================================================ - -Portable C library for dynamically generating PDF ("Adobe Acrobat") files, -with support for many other programming languages. - -The PDFlib distribution is available from http://www.pdflib.com - -PDFlib is a library for generating PDF files. It offers an API with -support for text, vector graphics, raster image, and hypertext. Call PDFlib -routines from within your client program and voila: dynamic PDF files! - -PDFlib is available on a wide variety of operating system platforms, -and supports many programming languages and development environments: - -- C -- C++ -- Cobol -- COM (Visual Basic, ASP, Windows Script Host, Delphi, and many others) -- Java via the JNI, including servlets and JSP (but not EJB) -- .NET framework (VB.NET, ASP.NET, C# and others). -- Perl -- PHP Hypertext Processor -- Python -- RPG -- Tcl - -An overview of PDFlib features can be found in the PDFlib reference manual -in the PDF file PDFlib-manual.pdf. Documentation for the COM and .NET -editions is available separately. - - -PDFlib flavors -============== -The PDFlib software is available in different flavors (see the PDFlib -manual for a detailed comparison): - -- PDFlib Lite - Open-source edition for basic PDF generation, free for personal use. - PDFlib Lite does not support all languages, and is not available on - EBCDIC platforms. - -- PDFlib - The commercial edition adds various features for advanced PDF generation. - -- PDFlib+PDI - Includes PDFlib plus the PDF Import library PDI which can be used to - integrate pages from existing PDF documents in the generated output - -- PDFlib Personalization Server (PPS) - Includes PDFlib+PDI, plus advanced block processing functions for - easily personalizing PDF documents. PPS also includes the Block - plugin for Adobe Acrobat which can be used to create PDFlib blocks - interactively. The Block plugin is distributed in a separate installer. - - -First Steps with a binary Package -================================= -PDFlib, PDFlib+PDI, and PPS are available in binary form, and require -a commercial license. All of these products are available in a single -library, and can be evaluated without any restrictions without any -license. However, unless a valid license key is applied a demo stamp -will be generated across all pages. -The binary packages support C plus various other language bindings. -Instructions for using these packages can be found in doc/readme-binary.txt. - - -First Steps with the PDFlib Lite Source Package -=============================================== -PDFlib Lite is available in source form, and can be used for free under -certain conditions. Source code is also available for selected language -wrappers. If you are working with a source code package you need an ANSI C -compiler. Detailed instructions for building PDFlib from source code -can be found in doc/readme-source-*.txt - - -Quick Start and Documentation -============================= -For a jump-start, take a look at the PDFlib samples which are available -for all supported languages: - -- The following examples work with all editions of PDFlib: - The hello, pdfclock, and image samples generate PDF output with simple text, - vector graphics, and images. The chartab examples contains a more advanced - sample for using fonts and encodings in PDFlib. It can also be used to - create handy character set reference tables. - -- The invoice and quickreference examples require PDFlib+PDI, and demonstrate - how to deal with existing PDF documents. - -- The businesscard example requires the PDFlib Personalization Server (PPS), - and contains a simple personalization example. - -After reviewing these samples you should take a look at the main PDFlib -documentation: the "PDFlib Reference Manual" is included as PDF in all packages. -It is the definite reference for using PDFlib. The majority of questions -will be answered in this manual. - - -Other PDFlib resources -====================== -In addition to the PDFlib reference manual the following resources -are available: - -- The PDFlib FAQ collects information about known bugs, patches, - and workarounds: http://www.pdflib.com - -- The PDFlib mailing list discusses PDFlib deployment in a variety of - environments. You can access the mailing list archives over the Web, - and don't need to subscribe in order to use it: - http://groups.yahoo.com/group/pdflib - -- Commercial PDFlib licensees are eligible for professional product - support from PDFlib GmbH. Please send your inquiry along with your - PDFlib license number to support@pdflib.com. - - -Submitting Bug Reports -====================== -In case of trouble you should always check the PDFlib Web site -in order to see whether your problem is already known, or a patch exists. -If not so, please observe the following: - -If you have trouble with running PDFlib, please send the following -information to support@pdflib.com - -- a description of your problem -- the platform in use -- the PDFlib version number you are using -- the language binding you are using, along with relevant version numbers -- relevant code snippets for reproducing the problem, or a small PDF file - exhibiting the problem if you can't construct a code snippet easily -- sample data files if necessary (image files, for example) -- details of the PDF viewer (if relevant) where the problem occurs - -If you have trouble compiling the PDFlib Lite source code, please send the -following information to support@pdflib.com: - -- a description of your problem and the platform in use -- the PDFlib version number you are using -- the output of "./libtool --config" (Unix systems only) -- most welcome: suggested patches or solutions, other helpful information - - -A Shameless Plug -================ -My book contains a lot of information on PostScript, Fonts, and PDF -(currently only available in German): - -Die PostScript- & PDF-Bibel -Thomas Merz, Olaf Druemmer -654 Seiten, ISBN 3-935320-01-9, Euro 25,- -Kopublikation PDFlib GmbH/dpunkt Verlag -PDF available at http://www.pdflib.com -e-mail orders for the printed book: books@pdflib.com - - -Licensing and Copyright -======================= -THIS IS NOT PUBLIC DOMAIN OR FREEWARE SOFTWARE! - -PDFlib Lite can freely be used for non-profit personal use. -The license text can be found in the file PDFlib-Lite-license.pdf. - -PDFlib, PDFlib+PDI, and PPS can only be used under the terms of -a commercial license, and always require a license fee. Details -of the license can be found in the file PDFlib-license.pdf. -Licensing information is available in the file PDFlib-purchase-order.pdf, -and on our Web site www.pdflib.com. - - - -Please contact us if you're interested in obtaining a commercial PDFlib license: - -PDFlib GmbH -Tal 40, 80331 Munich, Germany -fax +49/89/29 16 46 86 - -License inquiries: sales@pdflib.com - -Support for PDFlib licensees: support@pdflib.com - - -Technical inquiries if you have not licensed PDFlib: -mailing list and archives at http://groups.yahoo.com/group/pdflib - -Copyright (c) 1997-2004 PDFlib GmbH and Thomas Merz. All rights reserved. -PDFlib and the PDFlib logo are registered trademarks of PDFlib GmbH.

~5tz!?IM*-yd-*ggd~$jW_VMj9LnkqyW9{v_yV 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⪼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≪KLK)$=^ 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

_4?->Wh>c?sa%82>|JxQXS^Y|vFBteAE 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

2*vc z?{F>?&6&|9tgG+jsky??bdzMV*Xc-)MWz{Mt2@W9%-O^K5Qppn)9ahKZnmKnRr2Azqu%e>P(81K*=dWw zR{ryY`TC-agCV+acf(U58~P2ChxhLbUsZm11iY_m4xzc@m<@H(qXMC{oNSZETgL8- zW4Ifc3kkIF6bSY4WC~8lGcoKPY<4m;gFU;ENaL36Qua~%Hoa5?5hSukwZ9G(=w2sF zI!;tGlE~bFSkpQr^$|G2tl_K@1|T=Zb=Je~*de}6&Z@{pFHMLix}MD?$HMTDofOx6 z!wv-WFk17wqK@0m0cS?Fji-7v-U=*C?)NZ=^TBs4^u0g%+7oBmCbi_BZxna*Q{c7_?2mhJ}yn8p2cD{4xBKC zDOnFDPh(GeG3+jn>ME>VeF90Nnr6*3Pol=?HFXR1!}A#IufO{i{$hSvz_x|@NZ+< zpi!SizObWUBm=hkUHbPq=B|S3bcylJT2(cy<_Zo3Wu$y_qFxa^cL1VvfYWxoT76md z=+Pm;lw)nuE-?^?lS;^T43UBhUC9^8ViN>-&8$oVHS%K*ZKzt3OlHWWs9k4) zz*pbPY5Urm*IT76Eya3f>KSBRt=+f3p>IO<1$bII;)KwQ4f zWf;%t(kWW(nSQL1c6c^Lln8##@ntYeI$1hxM1J#^x4Qh!HLr=;hb6W3$>fE$@;^(D zXEfaz5fGH?xEYWOQoego?qkIo?;{}9A@)BGyzr15!TnS2 z&@2<8nAg>HWmTyiuT9MH36$*Cm8=lx6s>MCk=<)@qR!V`{(76b;qIL5QzF)drI@eqg2QRzf z>LA=P8Al0S0`_he#D$&PoEDmModlFOKVRZZ>snm2-eb$sDGW0V)EW}ZegBNer#e4_*4+oIeN2K+yxd_;LSFRLuMtdH;5CPqB97Db`MY zUN2TROT%kvu`p^t`9>H+u~548vZwb&?@fb|X`Z+}F9Yh`3vN`BP{!W-fsYAEASJN1 zI2?9V?@C(iE;&)Lr+i}Cl+3SJu3QzDQl?loJO+JKX*p3o%5kuCq;9X_U>L_+uyj8- z=t<$3XmAy*Vn=%^b2y#h%P;n!pO$c_$6UGAIvn4%H{ggg#CH8m1iNV@4sYwlJ4hQS z1bwj@;KAlKr6{Ls94)T8)8WAzBfvJvXs6RI2M=AB z9I2)&2BNb{CmwOlZZ_07zj~kO)x}WA+Tp(~iEDB&L()JR61jIfR2;Sm^{E%AVM6T( z`O#Ld+O0NSPdj#_JRO&3m*yS;A9P;h@!FB}?Zc^| z!pfM*Al3Mc1jLxpe+mFoACTM%5^pQSbS8ZvRMZ);Ogs(t@ApLz$FmO8NQOHtrAp07 zO;joI`#T`X*$~vP`JjzC$aH}+1fjzqV-6x_ z!bv+VB$(Hwj>5P15jWHPNjqL7St=Z$OkWxFcC?C| z_aPhBsIATmkaZBKcl_(i!x)Q_ohx^pTkG1!pzdox?1(rB4gnF4)K-LhC!N@~;joeS z^S!8{X~v$Z$|QHJ`XNFlai9uZkxere(j}n@174>3!tp#LY3W&Ya{FA{=mqjhQ;c?F z^!9Kt@pA$jM&<_U#!W_K{;Q2jLu-!79#_Iur^UQhJE!8=Wc*+>=P?aA_HDz&_9eL` zB&2@PB^P>F#M;q&ys0!W@o?@}DX+^t)iHL$FVr;BiR6eFn{u213UQR;;cws5Yq4)t&sb_n|5ICE!0_=DHH=_NMAo@@KT_RF;3VFxJoWS~>I9!bY*q)XRI znKp#w1>^8hvNDw;FcU=#F6D37qJAyxS=w|ccgWnGer{i>bx5d&z1aH(f*cD2XDiwt zNiCPKduTsXC8K50XTteMKSQMoVerGHm*nv-dBgNlTT~xBn6KtMaYI zc39v+cqwCRQTZ8(*-6mc6}U(H-1a%A7)%2pRg4o+ZiahsUpCaQL+6p5xELK*U4|em zS4xr-tr_OKE+V|d?3lM|uQn7KV({wlJ{Rn(i5)MKAE)j7xhmM5>z7A~~ z-szipjr0DL?_sVvG5!8L?Q33|DebdJjZo|F&w89WsfD#x^iZ@lb$FUf`QlYmNYPGE zqOK%X&#z#C%CK4W(^c~(u{3o;Mrx>LhU$wc{kv5|dT z_K3d*GW-V}RrE984ho4;puq#4P2#tiwP405mW^*sXUpvCU@_+~Ys;pJ%FFbJ@+3O0u8byyBzAFl ziU|&LHgkLW#kX90MA;#7vP3y#ep@lL@h}i*Cdnqt@|;(pFOM011B~;i z_LXYzbuXWV5~lJ;K*-(Sd1f8-NR9BS;J+5<$&ur5c0K|SydqA8;1Xf4VR53l{TjGhP|i~vF`cBku3T%wtV5*E}&P1pSr)_sa7MN<)8$;9`T zbPUQ;b*2NutJ7AF&he4DZp$VygIN7P8UfBndQHHc839sLI4n0fOfDO|Idfv&%sia| z6!W55A(I#eB#q3E!L?MG^e2ttCttKnM8U9r;-www*gAT<$Lf1hFfv?5F)~J{r{)n6Y!)AH{45lLG4rgPnfz%M=nbi|_HHax8>`0-7*}Gt#_W zz+(q1CTOOt%J(^Qg%rU{&bCAKam?t zPI-b4gty@_T=4|kLt#fjQ-jFoA zQ5()@V79KV(auCf)LDV0h8)?YZUc;U?L~b57f$~A``_TjiSu{7%yOGT=`_a^ordn+ z$RsZ9avO0tc)lFvjtm)F3!6yfrZIymgiir};%yQeRI*uotDChJ4o@qUjo{Pz-a#rx zCgcSkLY97#PE~S29~Xk(F+FVz+-Qx@bVhO*5p8N)<7^uwsGd1&{iR=s1!OL8Zgb z_iBF;?IEbL7;&#Q_XqF(L-I-f2zsi-8idf7zPVlxI*AB$EPb|sH-6D;b!6#a;R_UVPrI##^jkX-nWRL&>Z*5)3|Dm^@S*FVVgt zev3sRC}o!Zv319}BzTz5@U19nuwZ%`#I_*bzD8phnVRt#d*2{Ao_~p8;;^Ke@f)9Y z*y2}>IbE$G`iNmF8(zve*2NZqaz7t5^0m7zaH*qqJ}*8_;>lj-VXZOg9A$Lvz1< zG?xNEq}=BE7RcxsJbq}dYpvL15`1}svqhXruu*Ls)m_wvB5c8pbQdN1j{|DHwW@tq ziU}s@Oj~=~HOx|M}1; z{P5{RjZ`V$p=T_=J*%iIo{^&d*g=kYsVJueZM?6frq2a>RUJ%nw7IP;aEC=CXK`12 zRHiM18#hLL4pq@82|i;VC>15;XYTw%&>dkTAxYLTj_pb;GP2<3108YQQR z^cj?(fyLp81C;FFH&(nxZzim<2Yd8&e*jx0AL62}&C(-5t#7*BbMDr<16z&HF z9Vkl8g5S_4zOC;?%m>c2Mu{nACzVJMnh;mJZLJZI6g8b-16!~DGbu&ol@wwr4fU@v z+cB|4s`1}ndNgECfX|2xomr8<`enh?sN;uQ^f^6O>#8FFRjc^#i^Tm8{fFq?GH-k( zlHr?*w!q5bETi#C)r5x}5Qq;l_`J`_`sgM2gi|Y$_T5TCAJE4}4oTpWV!U`OWD9A# zHkLL}1(P(WJ$3@(hqU6yKTgs1xxEI<^V4?+*NFG<)lDoVjWrz=86yLeac)4Nm69<| zEn=}xnyRs;`C64#Jhn7VmKy{NA$Yhx2)2R@lmAqepA_c*PFdD@i+RBKSJb+J$)9L{ z`4(o~xX{=bBX0YoTveR^DID=S&afL9qrTzp_;9U!oaKqM5+v-5lgepl;_YK@P^apT?`O7JmCV*yi>6rSkFHqtt6hG}Hs6yuD(UYdE8K;i z8+3%L#35#Eh%jS4ndD~3iJX%Dk_T837P;56F>KqXSd+XKcOq7GMANC7dCqO|@9aHGm+c4EWZVM&YJL$jN znaH2+?3D2m*F3i^+lh`A%3UMr7o}?AVSFa!WT60q`Y{pn32hXPr|4#WB%)VleVz@C z?oeQfRPWJ_FU6bTB{x6k<3jMSfT!K#Njq;8$rhQgmdc&`IJSWzyYvMiRcwxaEjik( zJ%e=?qrD_zwV)@W>Q8FRm$dUhy#0WC@aI|*=<1O;s-^CyZW-vqd|SsIp0!nScQ=>29uUMvkQQ?%ukqq(ke8V75spZ3y>wAwj@V>Z7MKuS~=>-FOK zP;;3N1Gv=K-VBP^w?D&S1~```CBT!E{6WgftoD#?`qeZ}6vY0{ z;RkT40^Bv~Vd|d5@`alpnZ>5W@u$|%)Lr_p8uRuG6n}VZm44r=9A(m2X7Cb!%>Fc? z^PGWW1VvO?fHqHXR<3zrOypnx3b%Qbwbi2mC7GJXVG zwk8C9R1g|{B;yt4v7Wu6Ol0IHYGFlXDkc|2NKc)}BQ1nFTJRZjvYa|q`A=MtEd z6dS6e6gnebet-5u0KbD}$Iz-1;xXG%vb8W-dPMoq?MI2Hv`1);1}SbfR0-R%&GBud zq7|_fy8LM1>zV1}g9HedNJNbE(jal(BDL-LxN*TBQCMJY{3E}nsurWH$C$}}KFEM^ z6K{tw9ATjl_F6ss95|8=T3XcIIW3}^8hPhS7ycq&!X;d$Q8L@KALp}W1%g6UAFzU> zftQT6(QiyGMz%I^mkygbrBZ$ypK@3_2TkhNyl30at9p!A8%vODgXhGO2TW0OuNgV! z05Wl^Oma(&+2SMGS!o>!2FIC|af37F(B*DP@;s7W-8}q{0N0WQ+#cO3U<_+m3ALLO zQE{A=fLTpar6~9(Nf${XB*2ws8HNpS)%C6|DvmCk)hZ`x{*Gr|ISIK$R|!qA5-DKe zL_CNpc%o)T@}?iQXVA-l=aUzn0u})Q;8p+0+MoxdXfVg432S(RtSjM)t5#;!q7u8Y zqCBPJ2yCLoHV;a6VCz4Yv6puk0+{Hz#wfP5R#lICgd!cX9`0wQZfJm#h)mIRIS?js zve?@BU{mYccOB71_HHp!3yGRyK3d_oM>roO|KQU^iiOlifrW+r4wo`EL?kSTGqOqBy7uu)?~rlXQIB4x z{2Dj0oH0VS3Zk~zm@jbbzm_C{qCk5wy9V(_2e%TvpJQU&2Q!~EciWjaTr)*PgfvX7 z@@+FCzKyGW!WZ4A+x1SA`HAqE=Hh^hk(RNrzgnSBUrQZaeNDfomS%P=fbWHs3!r)t`pabY zePoI$~P?ti9Qsxr;k= z7NCmGhe0{2!y^Fs@^kvllPoRR29-7n{}4OK&!HRbpH|QZJ)j*v@zmG*1m0)6h`;X0 zS2Z3e;s(UWa++Rx;Ig@{g$sVoOp{O_r$dBwKuf_vkVMS2RAWDRxoRcwOmHCk<##7j zO6Be?m_2IWXav{8r}zzB6O+pQkdNNnJXw>T^WoCirMfG%F^b;OiiXf53d41#@~~Sz zj*mnaf8tyZ&m6VTyr%3%Tp~DXisPgr1#4ag^A+C)o8ZrFZ`i$;%b%S>QMJrjtOB~u z*%w%cYS<3K0_6Kk+U12mBKt@TGA;-a?^!qq)jyl;zU!+d=R}|UJexu4d@%mQT~U_X zQAgT3rQW!H+S703!IR<<&}w*3e+Qp_e=GV3@anl%1AUvRJDJn&$(M3rTxjc%vdmc| z27K)%sj@2X&fw&d0~$8z2g6Gk7F?%k8U4D|M>^koAEbPT!_=je0)=SN*_Hn<9~qx{o{J z3=?$I#u(<^C3F`^nZ_evB!~QJ-#bA0cp`qxTz!&QqCR|W?b)d~cFvo`Nm3ucO_WLn z0FjTBcsv8;5ugv1*3u<~kD#0tx32?<3AN)Jt%(m@DC>AiOlR789q z$K$#8y)oXsKQdCr*k8V6thM)?bFDSM%5>zkl%0^*j-`Nf)#wo9xg}-6JA?^d7^tB! zftvhA$AO*a$skJSa=)0Z@Sh|JY*-8N!my@$g3y9c3a{Te5>|-}wq^Jv59HUh9I#mK z$kGS?>WQ5ffr=5FLL+Yu4CBM`q}Tyim!hU#Gd!PN=FeR23=+V;1p)IigNMIBvgb|r z=OiA$yPkkf$-SN)d^SL-(6P{SAPbvW;R(Oj%@P+xY~^-?7o&-KDwWLCDDdRCmG?7- zf^rfOwar#pkH&*?GfN+BXRuz0$E`{eM@Ou|K=Fb}Oe~46fkf2rXQ@6e z7&(HGraNlIqPcQIskLuKgIOtO9)3GcVzo-L;tC8tmp zbP!3J5~wU&CI*>bl!rO-8Q4Z9B<8?tA8s@BZd^IecUX8_5oUkzAuUnM-?qOGsTNA8zCR2L>Jh{O{gzr*!A)2&08mNBTPzFR+OYs0yJ*)bAjDA zRRvNrIt}l?tGyiORw3`XORvM-OSOiH<+}%k%yh15889T;>^=}^6*S{=fL2wAkkL%Px1jzkq2mtdyo1NIaN)<$($s`vvV;*zde*S_YFfO03@TeC z0wwWi1u<3ViBQPgXkF+<9=-U~XAGpQTIGV-@-^`F!#O8(1awS*tIkp8#13v!dd#&QDO&{N! z7gGR`!uTau1j|H-{-h04XF+17NO%?}(r$V%+U9fWp2x5)M;?7MMiMgomV_lRm+hon zB0;Un3oU3T1q5~ojy|jjO0lUH2xZTAQy0bq5w9-jr=^jFYEbqyC6P=}WgG+SdI$nk z)jLu^I!jttjx6>B^1j*sOEoZFnKcCXUf``ivO=Z|1abB3FTR)dy1psYuq?@^(D-_( zWbEz6sL%`GjeBvi2$v`PqYP^toZhApdxg4@Co7I>0HCFeqcHji-DS;qo+{Q(*?jda zk+9bz!X~=5dMDg1^`ec5)Vg4nP{nZ%h&m)y`12%V*J}zOdtA8%QJ?qUHP)-IMA+6R ztnd1`3N&DAGjA2md0Nax5mPTaN$D`UPUT)^&H*18Wvr#oI5ccNU&Md;5oMYmZh$tp zHKy;vJQ^8JD%co{76u^=46fWO+CUB{Ysx;W>ORukW_FyKaz-+dXCiiTTqi_5uM1yb z3Py~!&RI}6ldUE9*9%C@$L88CSwDxoxLW$4{8HH$-D;OYTjB=MfI?$(ZU`Ylwcn)0Wwy0L0$LJ*Xd-90)ZOsTUqA_ zl8NUC2EoD97uQ{QQ&@p!Pw#1Shq`oVpHo=|P5C`=4-O1!=@9$iFb3K$2;HQUcXfAN zB zF|LgZ6jdp9Je9;u+Rsk7D8Wn~Dv;HsJUFB>yR`F}NU{$hin_2tfMqdy?zEj(R}*I) zY(=YlHS-zJjvy0yB|Z?Q-+og8^(2zz4)Im9+jnUjHD1;_-5&`z7U>d2&@FR_FxYph zRh1_d1X%;dQA9|=j{-0*Pc4IP-V4gBZ)Doa{x&N4k7gw@_eS=_|H+OIVW^Q$|5DU) z^|Qaqv}O3e7_~s3%esuJ^fWv5n%#WZD7`V_o%GcX`bZ zm74fzE-}Hv-rjhK^NdIzng~ZD@Mi4GHl5<$K)ySBSYcCBR_Sntb*-W@7!&yuf5B(V zcT|?}+itrlRAmc(*_$Vr@E6F!`{F~U#85U^>aq*LtxLP1Ny(Uz_{291)aq-JQ{=eNQpnw~IBe)A7d4Tr zr02cyM2pJja;&)5CIQ6=R#$|DI+zKF#{*T`3Nl*+eG18 zHJ@AN6D{<=Ye;of?y*-|C5Jvqo@;krs^~19GRXXyJ|MUo4QuzPJS_}n)-)wW56Q8z zy$m_>qo!Rqj8azf-dc?0%ZB2|SF}kJTf#!iTfes)O3Z6}MqMb&XuAnplVN>3+@r`F zJ_EsdS185{+J{vjG^ar}Z;7HTs*8S)^PP|M{g<&mKKsyr$1bhn&bplT|BzR;^ALSU z?k4aqkntS4xTzCp`YM@K(7)YA;?lM9Qi9|Sk63_;!pWc^Ah7W&%7S#92xIx+uatL|!akfU2E^-G;{V zbBa(9#*<>rHT~sI&B-}YC0P7hp6g#am+OcC4saH#d3vUN`kT5oMQzmsnBTs{-Z!iu z$z1&S)y-B%@Q#<$bRftL2?3EpVo7;QM}?f#YR0NEuo7SBDEq9L$|SkAdSm6RZ*VRK z6O)Na8G5yrzxRu{$lDo|r7cADwps$37JCl@-`K~^HY~bX4jnSRu z8(xadN4xfM+Jxxm0Uw*&U1cH4drr}Lo7e4qAHmuMU+ebLCa~JOCMlgU%=zap&$+g= z>DORJmRG7IPWx_~{=}Yo#x|Ye8>U*yjoSV9dasCT$<+ufe`NQ%j?63)hF!GCt=OMF zjYH$R3%a6W`#o4~HzrV$mk|3JY8s?`SnTPbBGQ>B+!cp?G;rhcW%60WJD>7sngIlDNHY)=rh8^97bP4z-v#hNcac5 zqW-O>RE_~SJC~Z{x8K`eG_<+=+~KXjKBft<-LtYa3@=>vnYE}%UhJK&efmKtYHsny zW@Hm;M&fPb=q=vYsCDd%wC!;Q7g=A~$XoHC8CXX1Gf%(sE!E`np$WCoh$GP7T{&vF zY1E)rjHynBUz)DcfrULPbLR}UU^7v)f1cW6@?(}%{C?vTi=LtT@U^>=5=Hq0#0{3r}E8vWm;2L_@dGJMY6XZ`rAG1|lFG;kfnAA+3)^+q5L6PFw~^|4v)T^>ZqAT9j>@yBb`4e1b-1Uduzr;d z*NdBHq2!l_*QPIrWv;ujAL}No$=egO#YkNI1#0@JA;66;=ZN?cVG|B5OP7~Ssj&)2 zgffGmSg1*4AG0Vr*y|04=s=TOvKjSb2Z0{~I7wz9S`zk0mk%maQT#sE0(v;I_a2~7Q}0Vv!z*K}biU8|}g z5H0Mdb^G!{7-0&hu8gHx-v2l3eM*Woou$w}K-<(#|1SoGl zNjZtn6~q^N_^IGkx`e(mb;0N_ed5Q;BrUvX(4<*E;~4Xt>Mi1~#^M!+Dns>ny*oPQ zsSHs5eZbtK`05qPmAVr9j^#(OV!YgQ0oi1IL;(F<| z*V{(7j+cFY6wWbuCCYD!oH3TLC$>`HJqWxBaqL-?f*gYr-W3(MwjT7l=< z(x-x8&xkuzE)w~=$gh@P$guHqc)}dtv%-?d;x?qh>h|gx_oxBN4^V9~_8$iM1r%Qx zZn->>Nnu%hI`2-~gU$B&1=4e(6Bw}4Xm_ip6wwP{>=isPQAP`N?L)kzwHBmh1szGb zygFr>h<0tBwZo{=ne(zJTKQF9rBQGb67li3$IJzjZOPLct20#5YP#~@xu|N2WD9-` zWrifQfV|$wp0)2&Wnjz<*J;dl;>2wir;BW0>Q|c@ThkQ~^b8*_vPE#O*c5D}n?>x1 z_$xUj>x)I zhd6pgFv{~f90VFCQ3EyE64mF`-R3ki_8vH97=h&6eH)JqH0ULOybiLkoO)#x4%MJX zQjt>Bmi||~1Kl{sJJXA2et-2-;C)A%v;#-}^k%(g6mR(|Q*(Jq{|PBE5taj5aA2q4 zix-mVqBsErOwU26APHC1NqGYjLne)9L@y1GWV{dP;iHHd3A#R(RRuO=*rlB6h(;e3 z(vrZNF))+*as{d{&Cmij;5tJa031(YE0(0gXVQbo34_LuEF}`gGHJZf!1)qy3tY>q z2Rg$?XoD4QMTGfHlaOzk@V3j5{;5`qA6{9PVFn~m;5R7no&^9XeQ}?g{}-q=D+Pe* z>bk;Qkt^h!xCo$&fDhvI3g{xBkq5d6bT@PMe~$JSh84#5cn0gI&rpjIOkGAUB05Cn z0W43WY(YioC28%xtkY1Q@@R%*uauD-W0zj|8Jjh|Qte|Mv1-;By4%g|MDg~ZW4d&% zSbOlBmudMv>JxLG+EX%eYzaKl38@l)-@u%#UOcVAJ)cG5p`r2xR6aCJt zSKMJOn^g#R>M2gEMPHih1HL-`wAIg4N5wM~hLjjI3-h1!L%VUw;2obDYsMw`zjeSFltS=?V+9i#RK@wR7 z*zs>UI*BV|EDm2scpK9Dt#LGp$!}rGahwQY<2cSmCig>ggztcRc^OStDkgFP>+b_U@u;3$uNit$^TFBi-puu#?+ej!HHbcz$FJ%6%Pm{M z-X#)eqIK^oh9@FMt_ecxNQprZ!-LdclwAe5XcW6fRly-WOInj7~rIq8a-8M40&_6H1JC`Ga73EnLGT+zD7*l2N&?Dx?PFz~*9F#R)-F^Ov z?VMJ+#=H(~G3n)P_YLQ7s&LH{vi1|eI9q>2yqR)C!p+chrd1F|Q0LYXOeIh3M#f2l z03PxThvcpk39jNp+l?=|e~1Oh&i?`t9|PV&)V6y1;lK<`IvO_BQ>n~vW};H3&)*V3 zc%7|5tU7350Xg9H*pwQ`Nx$~7en>r<@n&=jhb^v^xl>X86e>;qekuL?tQ~wVq)8!D zcSQ|wZmKN2=Je#Y>|Bo4yXN^$oYAv}YP+~A;<050_si?#J6v2~(sTEXN@ht-QSFwV z^;XBRmOa5JhWwXAMD}q(L7fbT%I90o=+oJ*oUN+boby{f3EX_j%+-pkxQe8;VKYQzx3V9m#U-6GrX|{KIVFUq0tI&Qaw*kslFTs5Q(Q&Iykan6|-#v zCkpz1c?fLPx*v>!IVFHoDml0kX%BYGVVh;=Jj*0w06l z115QeSfqK$HzRck0TUjXM>uk-f#{R121JakBQjhlM&j6R@E zJ1<}m!SU%-U^ypIhmi=wKHC*AZs#o9enx&IdwT5(?@wa$p8;*J-t7xV3nlIsydt-W zPP~|nWH{Ja@YOMoW}gK9<{A8{>|F8@;@^b**Fby|17$0Qfr;DR9Y_d37DA6O!X!Kk zzS>1UN2EbImkBe%;jeDnvdt=ze6-h09e$e^Joh+%Q19#^rzW7?s|x}Ixg)TC?b&6* zbmLWdM#4-~O|K(fogAWuw@Qb;E`I?m+OSgy zQeqHFM?g(U;7#}eFUEij^vZD UV|wKc9F;$`mB=95<-f-N2Q-T_Hvj+t diff --git a/src/add-ons/print/drivers/pdf/doc/images/printers.jpeg b/src/add-ons/print/drivers/pdf/doc/images/printers.jpeg deleted file mode 100644 index 65d9445f314c1f8262a6bfddc0f5ba3430b4c8b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24312 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 diff --git a/src/add-ons/print/drivers/pdf/encoding/t1enc0.enc b/src/add-ons/print/drivers/pdf/encoding/t1enc0.enc deleted file mode 100644 index bfffa802e8..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/t1enc0.enc +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% t1enc0 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: glyph name index (decimal) % index (hex) -space 0 % 0x00 -exclam 1 % 0x01 -quotedbl 2 % 0x02 -numbersign 3 % 0x03 -dollar 4 % 0x04 -percent 5 % 0x05 -ampersand 6 % 0x06 -quotesingle 7 % 0x07 -parenleft 8 % 0x08 -parenright 9 % 0x09 -asterisk 10 % 0x0a -plus 11 % 0x0b -comma 12 % 0x0c -hyphen 13 % 0x0d -period 14 % 0x0e -slash 15 % 0x0f -zero 16 % 0x10 -one 17 % 0x11 -two 18 % 0x12 -three 19 % 0x13 -four 20 % 0x14 -five 21 % 0x15 -six 22 % 0x16 -seven 23 % 0x17 -eight 24 % 0x18 -nine 25 % 0x19 -colon 26 % 0x1a -semicolon 27 % 0x1b -less 28 % 0x1c -equal 29 % 0x1d -greater 30 % 0x1e -question 31 % 0x1f -at 32 % 0x20 -A 33 % 0x21 -B 34 % 0x22 -C 35 % 0x23 -D 36 % 0x24 -E 37 % 0x25 -F 38 % 0x26 -G 39 % 0x27 -H 40 % 0x28 -I 41 % 0x29 -J 42 % 0x2a -K 43 % 0x2b -L 44 % 0x2c -M 45 % 0x2d -N 46 % 0x2e -O 47 % 0x2f -P 48 % 0x30 -Q 49 % 0x31 -R 50 % 0x32 -S 51 % 0x33 -T 52 % 0x34 -U 53 % 0x35 -V 54 % 0x36 -W 55 % 0x37 -X 56 % 0x38 -Y 57 % 0x39 -Z 58 % 0x3a -bracketleft 59 % 0x3b -backslash 60 % 0x3c -bracketright 61 % 0x3d -asciicircum 62 % 0x3e -underscore 63 % 0x3f -grave 64 % 0x40 -a 65 % 0x41 -b 66 % 0x42 -c 67 % 0x43 -d 68 % 0x44 -e 69 % 0x45 -f 70 % 0x46 -g 71 % 0x47 -h 72 % 0x48 -i 73 % 0x49 -j 74 % 0x4a -k 75 % 0x4b -l 76 % 0x4c -m 77 % 0x4d -n 78 % 0x4e -o 79 % 0x4f -p 80 % 0x50 -q 81 % 0x51 -r 82 % 0x52 -s 83 % 0x53 -t 84 % 0x54 -u 85 % 0x55 -v 86 % 0x56 -w 87 % 0x57 -x 88 % 0x58 -y 89 % 0x59 -z 90 % 0x5a -braceleft 91 % 0x5b -bar 92 % 0x5c -braceright 93 % 0x5d -asciitilde 94 % 0x5e -space 95 % 0x5f -exclamdown 96 % 0x60 -cent 97 % 0x61 -sterling 98 % 0x62 -currency 99 % 0x63 -yen 100 % 0x64 -brokenbar 101 % 0x65 -section 102 % 0x66 -dieresis 103 % 0x67 -copyright 104 % 0x68 -ordfeminine 105 % 0x69 -guillemotleft 106 % 0x6a -logicalnot 107 % 0x6b -hyphen 108 % 0x6c -registered 109 % 0x6d -macron 110 % 0x6e -degree 111 % 0x6f -plusminus 112 % 0x70 -twosuperior 113 % 0x71 -threesuperior 114 % 0x72 -acute 115 % 0x73 -mu 116 % 0x74 -paragraph 117 % 0x75 -periodcentered 118 % 0x76 -cedilla 119 % 0x77 -onesuperior 120 % 0x78 -ordmasculine 121 % 0x79 -guillemotright 122 % 0x7a -onequarter 123 % 0x7b -onehalf 124 % 0x7c -threequarters 125 % 0x7d -questiondown 126 % 0x7e -Agrave 127 % 0x7f -Aacute 128 % 0x80 -Acircumflex 129 % 0x81 -Atilde 130 % 0x82 -Adieresis 131 % 0x83 -Aring 132 % 0x84 -AE 133 % 0x85 -Ccedilla 134 % 0x86 -Egrave 135 % 0x87 -Eacute 136 % 0x88 -Ecircumflex 137 % 0x89 -Edieresis 138 % 0x8a -Igrave 139 % 0x8b -Iacute 140 % 0x8c -Icircumflex 141 % 0x8d -Idieresis 142 % 0x8e -Eth 143 % 0x8f -Ntilde 144 % 0x90 -Ograve 145 % 0x91 -Oacute 146 % 0x92 -Ocircumflex 147 % 0x93 -Otilde 148 % 0x94 -Odieresis 149 % 0x95 -multiply 150 % 0x96 -Oslash 151 % 0x97 -Ugrave 152 % 0x98 -Uacute 153 % 0x99 -Ucircumflex 154 % 0x9a -Udieresis 155 % 0x9b -Yacute 156 % 0x9c -Thorn 157 % 0x9d -germandbls 158 % 0x9e -agrave 159 % 0x9f -aacute 160 % 0xa0 -acircumflex 161 % 0xa1 -atilde 162 % 0xa2 -adieresis 163 % 0xa3 -aring 164 % 0xa4 -ae 165 % 0xa5 -ccedilla 166 % 0xa6 -egrave 167 % 0xa7 -eacute 168 % 0xa8 -ecircumflex 169 % 0xa9 -edieresis 170 % 0xaa -igrave 171 % 0xab -iacute 172 % 0xac -icircumflex 173 % 0xad -idieresis 174 % 0xae -eth 175 % 0xaf -ntilde 176 % 0xb0 -ograve 177 % 0xb1 -oacute 178 % 0xb2 -ocircumflex 179 % 0xb3 -otilde 180 % 0xb4 -odieresis 181 % 0xb5 -divide 182 % 0xb6 -oslash 183 % 0xb7 -ugrave 184 % 0xb8 -uacute 185 % 0xb9 -ucircumflex 186 % 0xba -udieresis 187 % 0xbb -yacute 188 % 0xbc -thorn 189 % 0xbd -ydieresis 190 % 0xbe -Amacron 191 % 0xbf -amacron 192 % 0xc0 -Abreve 193 % 0xc1 -abreve 194 % 0xc2 -Aogonek 195 % 0xc3 -aogonek 196 % 0xc4 -Cacute 197 % 0xc5 -cacute 198 % 0xc6 -Ccircumflex 199 % 0xc7 -ccircumflex 200 % 0xc8 -Cdotaccent 201 % 0xc9 -cdotaccent 202 % 0xca -Ccaron 203 % 0xcb -ccaron 204 % 0xcc -Dcaron 205 % 0xcd -dcaron 206 % 0xce -Dcroat 207 % 0xcf -dcroat 208 % 0xd0 -Emacron 209 % 0xd1 -emacron 210 % 0xd2 -Ebreve 211 % 0xd3 -ebreve 212 % 0xd4 -Edotaccent 213 % 0xd5 -edotaccent 214 % 0xd6 -Eogonek 215 % 0xd7 -eogonek 216 % 0xd8 -Ecaron 217 % 0xd9 -ecaron 218 % 0xda -Gcircumflex 219 % 0xdb -gcircumflex 220 % 0xdc -Gbreve 221 % 0xdd -gbreve 222 % 0xde -Gdotaccent 223 % 0xdf -gdotaccent 224 % 0xe0 -Gcommaaccent 225 % 0xe1 -gcommaaccent 226 % 0xe2 -Hcircumflex 227 % 0xe3 -hcircumflex 228 % 0xe4 -Hbar 229 % 0xe5 -hbar 230 % 0xe6 -Itilde 231 % 0xe7 -itilde 232 % 0xe8 -Imacron 233 % 0xe9 -imacron 234 % 0xea -Ibreve 235 % 0xeb -ibreve 236 % 0xec -Iogonek 237 % 0xed -iogonek 238 % 0xee -Idotaccent 239 % 0xef -dotlessi 240 % 0xf0 -IJ 241 % 0xf1 -ij 242 % 0xf2 -Jcircumflex 243 % 0xf3 -jcircumflex 244 % 0xf4 -Kcommaaccent 245 % 0xf5 -kcommaaccent 246 % 0xf6 -kgreenlandic 247 % 0xf7 -Lacute 248 % 0xf8 -lacute 249 % 0xf9 -Lcommaaccent 250 % 0xfa -lcommaaccent 251 % 0xfb -Lcaron 252 % 0xfc -lcaron 253 % 0xfd -Ldot 254 % 0xfe -ldot 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/t1enc1.enc b/src/add-ons/print/drivers/pdf/encoding/t1enc1.enc deleted file mode 100644 index e5a80f2e24..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/t1enc1.enc +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% t1enc1 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: glyph name index (decimal) % index (hex) -Lslash 0 % 0x00 -lslash 1 % 0x01 -Nacute 2 % 0x02 -nacute 3 % 0x03 -Ncommaaccent 4 % 0x04 -ncommaaccent 5 % 0x05 -Ncaron 6 % 0x06 -ncaron 7 % 0x07 -napostrophe 8 % 0x08 -Eng 9 % 0x09 -eng 10 % 0x0a -Omacron 11 % 0x0b -omacron 12 % 0x0c -Obreve 13 % 0x0d -obreve 14 % 0x0e -Ohungarumlaut 15 % 0x0f -ohungarumlaut 16 % 0x10 -OE 17 % 0x11 -oe 18 % 0x12 -Racute 19 % 0x13 -racute 20 % 0x14 -Rcommaaccent 21 % 0x15 -rcommaaccent 22 % 0x16 -Rcaron 23 % 0x17 -rcaron 24 % 0x18 -Sacute 25 % 0x19 -sacute 26 % 0x1a -Scircumflex 27 % 0x1b -scircumflex 28 % 0x1c -Scedilla 29 % 0x1d -scedilla 30 % 0x1e -Scaron 31 % 0x1f -scaron 32 % 0x20 -Tcommaaccent 33 % 0x21 -tcommaaccent 34 % 0x22 -Tcaron 35 % 0x23 -tcaron 36 % 0x24 -Tbar 37 % 0x25 -tbar 38 % 0x26 -Utilde 39 % 0x27 -utilde 40 % 0x28 -Umacron 41 % 0x29 -umacron 42 % 0x2a -Ubreve 43 % 0x2b -ubreve 44 % 0x2c -Uring 45 % 0x2d -uring 46 % 0x2e -Uhungarumlaut 47 % 0x2f -uhungarumlaut 48 % 0x30 -Uogonek 49 % 0x31 -uogonek 50 % 0x32 -Wcircumflex 51 % 0x33 -wcircumflex 52 % 0x34 -Ycircumflex 53 % 0x35 -ycircumflex 54 % 0x36 -Ydieresis 55 % 0x37 -Zacute 56 % 0x38 -zacute 57 % 0x39 -Zdotaccent 58 % 0x3a -zdotaccent 59 % 0x3b -Zcaron 60 % 0x3c -zcaron 61 % 0x3d -longs 62 % 0x3e -florin 63 % 0x3f -Ohorn 64 % 0x40 -ohorn 65 % 0x41 -Uhorn 66 % 0x42 -uhorn 67 % 0x43 -Gcaron 68 % 0x44 -gcaron 69 % 0x45 -Aringacute 70 % 0x46 -aringacute 71 % 0x47 -AEacute 72 % 0x48 -aeacute 73 % 0x49 -Oslashacute 74 % 0x4a -oslashacute 75 % 0x4b -Scommaaccent 76 % 0x4c -scommaaccent 77 % 0x4d -Tcommaaccent 78 % 0x4e -tcommaaccent 79 % 0x4f -afii57929 80 % 0x50 -afii64937 81 % 0x51 -circumflex 82 % 0x52 -caron 83 % 0x53 -macron 84 % 0x54 -breve 85 % 0x55 -dotaccent 86 % 0x56 -ring 87 % 0x57 -ogonek 88 % 0x58 -tilde 89 % 0x59 -hungarumlaut 90 % 0x5a -gravecomb 91 % 0x5b -acutecomb 92 % 0x5c -tildecomb 93 % 0x5d -hookabovecomb 94 % 0x5e -dotbelowcomb 95 % 0x5f -tonos 96 % 0x60 -dieresistonos 97 % 0x61 -Alphatonos 98 % 0x62 -anoteleia 99 % 0x63 -Epsilontonos 100 % 0x64 -Etatonos 101 % 0x65 -Iotatonos 102 % 0x66 -Omicrontonos 103 % 0x67 -Upsilontonos 104 % 0x68 -Omegatonos 105 % 0x69 -iotadieresistonos 106 % 0x6a -Alpha 107 % 0x6b -Beta 108 % 0x6c -Gamma 109 % 0x6d -Delta 110 % 0x6e -Epsilon 111 % 0x6f -Zeta 112 % 0x70 -Eta 113 % 0x71 -Theta 114 % 0x72 -Iota 115 % 0x73 -Kappa 116 % 0x74 -Lambda 117 % 0x75 -Mu 118 % 0x76 -Nu 119 % 0x77 -Xi 120 % 0x78 -Omicron 121 % 0x79 -Pi 122 % 0x7a -Rho 123 % 0x7b -Sigma 124 % 0x7c -Tau 125 % 0x7d -Upsilon 126 % 0x7e -Phi 127 % 0x7f -Chi 128 % 0x80 -Psi 129 % 0x81 -Omega 130 % 0x82 -Iotadieresis 131 % 0x83 -Upsilondieresis 132 % 0x84 -alphatonos 133 % 0x85 -epsilontonos 134 % 0x86 -etatonos 135 % 0x87 -iotatonos 136 % 0x88 -upsilondieresistonos 137 % 0x89 -alpha 138 % 0x8a -beta 139 % 0x8b -gamma 140 % 0x8c -delta 141 % 0x8d -epsilon 142 % 0x8e -zeta 143 % 0x8f -eta 144 % 0x90 -theta 145 % 0x91 -iota 146 % 0x92 -kappa 147 % 0x93 -lambda 148 % 0x94 -mu 149 % 0x95 -nu 150 % 0x96 -xi 151 % 0x97 -omicron 152 % 0x98 -pi 153 % 0x99 -rho 154 % 0x9a -sigma1 155 % 0x9b -sigma 156 % 0x9c -tau 157 % 0x9d -upsilon 158 % 0x9e -phi 159 % 0x9f -chi 160 % 0xa0 -psi 161 % 0xa1 -omega 162 % 0xa2 -iotadieresis 163 % 0xa3 -upsilondieresis 164 % 0xa4 -omicrontonos 165 % 0xa5 -upsilontonos 166 % 0xa6 -omegatonos 167 % 0xa7 -theta1 168 % 0xa8 -Upsilon1 169 % 0xa9 -phi1 170 % 0xaa -omega1 171 % 0xab -afii10023 172 % 0xac -afii10051 173 % 0xad -afii10052 174 % 0xae -afii10053 175 % 0xaf -afii10054 176 % 0xb0 -afii10055 177 % 0xb1 -afii10056 178 % 0xb2 -afii10057 179 % 0xb3 -afii10058 180 % 0xb4 -afii10059 181 % 0xb5 -afii10060 182 % 0xb6 -afii10061 183 % 0xb7 -afii10062 184 % 0xb8 -afii10145 185 % 0xb9 -afii10017 186 % 0xba -afii10018 187 % 0xbb -afii10019 188 % 0xbc -afii10020 189 % 0xbd -afii10021 190 % 0xbe -afii10022 191 % 0xbf -afii10024 192 % 0xc0 -afii10025 193 % 0xc1 -afii10026 194 % 0xc2 -afii10027 195 % 0xc3 -afii10028 196 % 0xc4 -afii10029 197 % 0xc5 -afii10030 198 % 0xc6 -afii10031 199 % 0xc7 -afii10032 200 % 0xc8 -afii10033 201 % 0xc9 -afii10034 202 % 0xca -afii10035 203 % 0xcb -afii10036 204 % 0xcc -afii10037 205 % 0xcd -afii10038 206 % 0xce -afii10039 207 % 0xcf -afii10040 208 % 0xd0 -afii10041 209 % 0xd1 -afii10042 210 % 0xd2 -afii10043 211 % 0xd3 -afii10044 212 % 0xd4 -afii10045 213 % 0xd5 -afii10046 214 % 0xd6 -afii10047 215 % 0xd7 -afii10048 216 % 0xd8 -afii10049 217 % 0xd9 -afii10065 218 % 0xda -afii10066 219 % 0xdb -afii10067 220 % 0xdc -afii10068 221 % 0xdd -afii10069 222 % 0xde -afii10070 223 % 0xdf -afii10072 224 % 0xe0 -afii10073 225 % 0xe1 -afii10074 226 % 0xe2 -afii10075 227 % 0xe3 -afii10076 228 % 0xe4 -afii10077 229 % 0xe5 -afii10078 230 % 0xe6 -afii10079 231 % 0xe7 -afii10080 232 % 0xe8 -afii10081 233 % 0xe9 -afii10082 234 % 0xea -afii10083 235 % 0xeb -afii10084 236 % 0xec -afii10085 237 % 0xed -afii10086 238 % 0xee -afii10087 239 % 0xef -afii10088 240 % 0xf0 -afii10089 241 % 0xf1 -afii10090 242 % 0xf2 -afii10091 243 % 0xf3 -afii10092 244 % 0xf4 -afii10093 245 % 0xf5 -afii10094 246 % 0xf6 -afii10095 247 % 0xf7 -afii10096 248 % 0xf8 -afii10097 249 % 0xf9 -afii10071 250 % 0xfa -afii10099 251 % 0xfb -afii10100 252 % 0xfc -afii10101 253 % 0xfd -afii10102 254 % 0xfe -afii10103 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/t1enc2.enc b/src/add-ons/print/drivers/pdf/encoding/t1enc2.enc deleted file mode 100644 index 67d04c4a64..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/t1enc2.enc +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% t1enc2 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: glyph name index (decimal) % index (hex) -afii10104 0 % 0x00 -afii10105 1 % 0x01 -afii10106 2 % 0x02 -afii10107 3 % 0x03 -afii10108 4 % 0x04 -afii10109 5 % 0x05 -afii10110 6 % 0x06 -afii10193 7 % 0x07 -afii10146 8 % 0x08 -afii10194 9 % 0x09 -afii10147 10 % 0x0a -afii10195 11 % 0x0b -afii10148 12 % 0x0c -afii10196 13 % 0x0d -afii10050 14 % 0x0e -afii10098 15 % 0x0f -afii10846 16 % 0x10 -afii57799 17 % 0x11 -afii57801 18 % 0x12 -afii57800 19 % 0x13 -afii57802 20 % 0x14 -afii57793 21 % 0x15 -afii57794 22 % 0x16 -afii57795 23 % 0x17 -afii57798 24 % 0x18 -afii57797 25 % 0x19 -afii57806 26 % 0x1a -afii57796 27 % 0x1b -afii57807 28 % 0x1c -afii57839 29 % 0x1d -afii57645 30 % 0x1e -afii57841 31 % 0x1f -afii57842 32 % 0x20 -afii57804 33 % 0x21 -afii57803 34 % 0x22 -afii57658 35 % 0x23 -afii57664 36 % 0x24 -afii57665 37 % 0x25 -afii57666 38 % 0x26 -afii57667 39 % 0x27 -afii57668 40 % 0x28 -afii57669 41 % 0x29 -afii57670 42 % 0x2a -afii57671 43 % 0x2b -afii57672 44 % 0x2c -afii57673 45 % 0x2d -afii57674 46 % 0x2e -afii57675 47 % 0x2f -afii57676 48 % 0x30 -afii57677 49 % 0x31 -afii57678 50 % 0x32 -afii57679 51 % 0x33 -afii57680 52 % 0x34 -afii57681 53 % 0x35 -afii57682 54 % 0x36 -afii57683 55 % 0x37 -afii57684 56 % 0x38 -afii57685 57 % 0x39 -afii57686 58 % 0x3a -afii57687 59 % 0x3b -afii57688 60 % 0x3c -afii57689 61 % 0x3d -afii57690 62 % 0x3e -afii57716 63 % 0x3f -afii57717 64 % 0x40 -afii57718 65 % 0x41 -afii57388 66 % 0x42 -afii57403 67 % 0x43 -afii57407 68 % 0x44 -afii57409 69 % 0x45 -afii57410 70 % 0x46 -afii57411 71 % 0x47 -afii57412 72 % 0x48 -afii57413 73 % 0x49 -afii57414 74 % 0x4a -afii57415 75 % 0x4b -afii57416 76 % 0x4c -afii57417 77 % 0x4d -afii57418 78 % 0x4e -afii57419 79 % 0x4f -afii57420 80 % 0x50 -afii57421 81 % 0x51 -afii57422 82 % 0x52 -afii57423 83 % 0x53 -afii57424 84 % 0x54 -afii57425 85 % 0x55 -afii57426 86 % 0x56 -afii57427 87 % 0x57 -afii57428 88 % 0x58 -afii57429 89 % 0x59 -afii57430 90 % 0x5a -afii57431 91 % 0x5b -afii57432 92 % 0x5c -afii57433 93 % 0x5d -afii57434 94 % 0x5e -afii57440 95 % 0x5f -afii57441 96 % 0x60 -afii57442 97 % 0x61 -afii57443 98 % 0x62 -afii57444 99 % 0x63 -afii57445 100 % 0x64 -afii57446 101 % 0x65 -afii57470 102 % 0x66 -afii57448 103 % 0x67 -afii57449 104 % 0x68 -afii57450 105 % 0x69 -afii57451 106 % 0x6a -afii57452 107 % 0x6b -afii57453 108 % 0x6c -afii57454 109 % 0x6d -afii57455 110 % 0x6e -afii57456 111 % 0x6f -afii57457 112 % 0x70 -afii57458 113 % 0x71 -afii57392 114 % 0x72 -afii57393 115 % 0x73 -afii57394 116 % 0x74 -afii57395 117 % 0x75 -afii57396 118 % 0x76 -afii57397 119 % 0x77 -afii57398 120 % 0x78 -afii57399 121 % 0x79 -afii57400 122 % 0x7a -afii57401 123 % 0x7b -afii57381 124 % 0x7c -afii63167 125 % 0x7d -afii57511 126 % 0x7e -afii57506 127 % 0x7f -afii57507 128 % 0x80 -afii57512 129 % 0x81 -afii57513 130 % 0x82 -afii57508 131 % 0x83 -afii57505 132 % 0x84 -afii57509 133 % 0x85 -afii57514 134 % 0x86 -afii57519 135 % 0x87 -afii57534 136 % 0x88 -Wgrave 137 % 0x89 -wgrave 138 % 0x8a -Wacute 139 % 0x8b -wacute 140 % 0x8c -Wdieresis 141 % 0x8d -wdieresis 142 % 0x8e -Ygrave 143 % 0x8f -ygrave 144 % 0x90 -afii61664 145 % 0x91 -afii301 146 % 0x92 -afii299 147 % 0x93 -afii300 148 % 0x94 -figuredash 149 % 0x95 -endash 150 % 0x96 -emdash 151 % 0x97 -afii00208 152 % 0x98 -underscoredbl 153 % 0x99 -quoteleft 154 % 0x9a -quoteright 155 % 0x9b -quotesinglbase 156 % 0x9c -quotereversed 157 % 0x9d -quotedblleft 158 % 0x9e -quotedblright 159 % 0x9f -quotedblbase 160 % 0xa0 -dagger 161 % 0xa1 -daggerdbl 162 % 0xa2 -bullet 163 % 0xa3 -onedotenleader 164 % 0xa4 -twodotenleader 165 % 0xa5 -ellipsis 166 % 0xa6 -afii61573 167 % 0xa7 -afii61574 168 % 0xa8 -afii61575 169 % 0xa9 -perthousand 170 % 0xaa -minute 171 % 0xab -second 172 % 0xac -guilsinglleft 173 % 0xad -guilsinglright 174 % 0xae -exclamdbl 175 % 0xaf -fraction 176 % 0xb0 -zerosuperior 177 % 0xb1 -foursuperior 178 % 0xb2 -fivesuperior 179 % 0xb3 -sixsuperior 180 % 0xb4 -sevensuperior 181 % 0xb5 -eightsuperior 182 % 0xb6 -ninesuperior 183 % 0xb7 -parenleftsuperior 184 % 0xb8 -parenrightsuperior 185 % 0xb9 -nsuperior 186 % 0xba -zeroinferior 187 % 0xbb -oneinferior 188 % 0xbc -twoinferior 189 % 0xbd -threeinferior 190 % 0xbe -fourinferior 191 % 0xbf -fiveinferior 192 % 0xc0 -sixinferior 193 % 0xc1 -seveninferior 194 % 0xc2 -eightinferior 195 % 0xc3 -nineinferior 196 % 0xc4 -parenleftinferior 197 % 0xc5 -parenrightinferior 198 % 0xc6 -colonmonetary 199 % 0xc7 -franc 200 % 0xc8 -lira 201 % 0xc9 -peseta 202 % 0xca -afii57636 203 % 0xcb -dong 204 % 0xcc -Euro 205 % 0xcd -afii61248 206 % 0xce -Ifraktur 207 % 0xcf -afii61289 208 % 0xd0 -afii61352 209 % 0xd1 -weierstrass 210 % 0xd2 -Rfraktur 211 % 0xd3 -prescription 212 % 0xd4 -trademark 213 % 0xd5 -Omega 214 % 0xd6 -estimated 215 % 0xd7 -aleph 216 % 0xd8 -onethird 217 % 0xd9 -twothirds 218 % 0xda -oneeighth 219 % 0xdb -threeeighths 220 % 0xdc -fiveeighths 221 % 0xdd -seveneighths 222 % 0xde -arrowleft 223 % 0xdf -arrowup 224 % 0xe0 -arrowright 225 % 0xe1 -arrowdown 226 % 0xe2 -arrowboth 227 % 0xe3 -arrowupdn 228 % 0xe4 -arrowupdnbse 229 % 0xe5 -carriagereturn 230 % 0xe6 -arrowdblleft 231 % 0xe7 -arrowdblup 232 % 0xe8 -arrowdblright 233 % 0xe9 -arrowdbldown 234 % 0xea -arrowdblboth 235 % 0xeb -universal 236 % 0xec -partialdiff 237 % 0xed -existential 238 % 0xee -emptyset 239 % 0xef -Delta 240 % 0xf0 -gradient 241 % 0xf1 -element 242 % 0xf2 -notelement 243 % 0xf3 -suchthat 244 % 0xf4 -product 245 % 0xf5 -summation 246 % 0xf6 -minus 247 % 0xf7 -fraction 248 % 0xf8 -asteriskmath 249 % 0xf9 -periodcentered 250 % 0xfa -radical 251 % 0xfb -proportional 252 % 0xfc -infinity 253 % 0xfd -orthogonal 254 % 0xfe -angle 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/t1enc3.enc b/src/add-ons/print/drivers/pdf/encoding/t1enc3.enc deleted file mode 100644 index 4eea00e567..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/t1enc3.enc +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% t1enc3 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: glyph name index (decimal) % index (hex) -logicaland 0 % 0x00 -logicalor 1 % 0x01 -intersection 2 % 0x02 -union 3 % 0x03 -integral 4 % 0x04 -therefore 5 % 0x05 -similar 6 % 0x06 -congruent 7 % 0x07 -approxequal 8 % 0x08 -notequal 9 % 0x09 -equivalence 10 % 0x0a -lessequal 11 % 0x0b -greaterequal 12 % 0x0c -propersubset 13 % 0x0d -propersuperset 14 % 0x0e -notsubset 15 % 0x0f -reflexsubset 16 % 0x10 -reflexsuperset 17 % 0x11 -circleplus 18 % 0x12 -circlemultiply 19 % 0x13 -perpendicular 20 % 0x14 -dotmath 21 % 0x15 -house 22 % 0x16 -revlogicalnot 23 % 0x17 -integraltp 24 % 0x18 -integralbt 25 % 0x19 -angleleft 26 % 0x1a -angleright 27 % 0x1b -SF100000 28 % 0x1c -SF110000 29 % 0x1d -SF010000 30 % 0x1e -SF030000 31 % 0x1f -SF020000 32 % 0x20 -SF040000 33 % 0x21 -SF080000 34 % 0x22 -SF090000 35 % 0x23 -SF060000 36 % 0x24 -SF070000 37 % 0x25 -SF050000 38 % 0x26 -SF430000 39 % 0x27 -SF240000 40 % 0x28 -SF510000 41 % 0x29 -SF520000 42 % 0x2a -SF390000 43 % 0x2b -SF220000 44 % 0x2c -SF210000 45 % 0x2d -SF250000 46 % 0x2e -SF500000 47 % 0x2f -SF490000 48 % 0x30 -SF380000 49 % 0x31 -SF280000 50 % 0x32 -SF270000 51 % 0x33 -SF260000 52 % 0x34 -SF360000 53 % 0x35 -SF370000 54 % 0x36 -SF420000 55 % 0x37 -SF190000 56 % 0x38 -SF200000 57 % 0x39 -SF230000 58 % 0x3a -SF470000 59 % 0x3b -SF480000 60 % 0x3c -SF410000 61 % 0x3d -SF450000 62 % 0x3e -SF460000 63 % 0x3f -SF400000 64 % 0x40 -SF540000 65 % 0x41 -SF530000 66 % 0x42 -SF440000 67 % 0x43 -upblock 68 % 0x44 -dnblock 69 % 0x45 -block 70 % 0x46 -lfblock 71 % 0x47 -rtblock 72 % 0x48 -ltshade 73 % 0x49 -shade 74 % 0x4a -dkshade 75 % 0x4b -filledbox 76 % 0x4c -H22073 77 % 0x4d -H18543 78 % 0x4e -H18551 79 % 0x4f -filledrect 80 % 0x50 -triagup 81 % 0x51 -triagrt 82 % 0x52 -triagdn 83 % 0x53 -triaglf 84 % 0x54 -lozenge 85 % 0x55 -circle 86 % 0x56 -H18533 87 % 0x57 -invbullet 88 % 0x58 -invcircle 89 % 0x59 -openbullet 90 % 0x5a -smileface 91 % 0x5b -invsmileface 92 % 0x5c -sun 93 % 0x5d -female 94 % 0x5e -male 95 % 0x5f -spade 96 % 0x60 -club 97 % 0x61 -heart 98 % 0x62 -diamond 99 % 0x63 -musicalnote 100 % 0x64 -musicalnotedbl 101 % 0x65 -dotlessj 102 % 0x66 -LL 103 % 0x67 -ll 104 % 0x68 -Scedilla 105 % 0x69 -scedilla 106 % 0x6a -commaaccent 107 % 0x6b -afii10063 108 % 0x6c -afii10064 109 % 0x6d -afii10192 110 % 0x6e -afii10831 111 % 0x6f -afii10832 112 % 0x70 -Acute 113 % 0x71 -Caron 114 % 0x72 -Dieresis 115 % 0x73 -DieresisAcute 116 % 0x74 -DieresisGrave 117 % 0x75 -Grave 118 % 0x76 -Hungarumlaut 119 % 0x77 -Macron 120 % 0x78 -cyrBreve 121 % 0x79 -cyrFlex 122 % 0x7a -dblGrave 123 % 0x7b -cyrbreve 124 % 0x7c -cyrflex 125 % 0x7d -dblgrave 126 % 0x7e -dieresisacute 127 % 0x7f -dieresisgrave 128 % 0x80 -copyrightserif 129 % 0x81 -registerserif 130 % 0x82 -trademarkserif 131 % 0x83 -onefitted 132 % 0x84 -rupiah 133 % 0x85 -threequartersemdash 134 % 0x86 -centinferior 135 % 0x87 -centsuperior 136 % 0x88 -commainferior 137 % 0x89 -commasuperior 138 % 0x8a -dollarinferior 139 % 0x8b -dollarsuperior 140 % 0x8c -hypheninferior 141 % 0x8d -hyphensuperior 142 % 0x8e -periodinferior 143 % 0x8f -periodsuperior 144 % 0x90 -asuperior 145 % 0x91 -bsuperior 146 % 0x92 -dsuperior 147 % 0x93 -esuperior 148 % 0x94 -isuperior 149 % 0x95 -lsuperior 150 % 0x96 -msuperior 151 % 0x97 -osuperior 152 % 0x98 -rsuperior 153 % 0x99 -ssuperior 154 % 0x9a -tsuperior 155 % 0x9b -Brevesmall 156 % 0x9c -Caronsmall 157 % 0x9d -Circumflexsmall 158 % 0x9e -Dotaccentsmall 159 % 0x9f -Hungarumlautsmall 160 % 0xa0 -Lslashsmall 161 % 0xa1 -OEsmall 162 % 0xa2 -Ogoneksmall 163 % 0xa3 -Ringsmall 164 % 0xa4 -Scaronsmall 165 % 0xa5 -Tildesmall 166 % 0xa6 -Zcaronsmall 167 % 0xa7 -exclamsmall 168 % 0xa8 -dollaroldstyle 169 % 0xa9 -ampersandsmall 170 % 0xaa -zerooldstyle 171 % 0xab -oneoldstyle 172 % 0xac -twooldstyle 173 % 0xad -threeoldstyle 174 % 0xae -fouroldstyle 175 % 0xaf -fiveoldstyle 176 % 0xb0 -sixoldstyle 177 % 0xb1 -sevenoldstyle 178 % 0xb2 -eightoldstyle 179 % 0xb3 -nineoldstyle 180 % 0xb4 -questionsmall 181 % 0xb5 -Gravesmall 182 % 0xb6 -Asmall 183 % 0xb7 -Bsmall 184 % 0xb8 -Csmall 185 % 0xb9 -Dsmall 186 % 0xba -Esmall 187 % 0xbb -Fsmall 188 % 0xbc -Gsmall 189 % 0xbd -Hsmall 190 % 0xbe -Ismall 191 % 0xbf -Jsmall 192 % 0xc0 -Ksmall 193 % 0xc1 -Lsmall 194 % 0xc2 -Msmall 195 % 0xc3 -Nsmall 196 % 0xc4 -Osmall 197 % 0xc5 -Psmall 198 % 0xc6 -Qsmall 199 % 0xc7 -Rsmall 200 % 0xc8 -Ssmall 201 % 0xc9 -Tsmall 202 % 0xca -Usmall 203 % 0xcb -Vsmall 204 % 0xcc -Wsmall 205 % 0xcd -Xsmall 206 % 0xce -Ysmall 207 % 0xcf -Zsmall 208 % 0xd0 -exclamdownsmall 209 % 0xd1 -centoldstyle 210 % 0xd2 -Dieresissmall 211 % 0xd3 -Macronsmall 212 % 0xd4 -Acutesmall 213 % 0xd5 -Cedillasmall 214 % 0xd6 -questiondownsmall 215 % 0xd7 -Agravesmall 216 % 0xd8 -Aacutesmall 217 % 0xd9 -Acircumflexsmall 218 % 0xda -Atildesmall 219 % 0xdb -Adieresissmall 220 % 0xdc -Aringsmall 221 % 0xdd -AEsmall 222 % 0xde -Ccedillasmall 223 % 0xdf -Egravesmall 224 % 0xe0 -Eacutesmall 225 % 0xe1 -Ecircumflexsmall 226 % 0xe2 -Edieresissmall 227 % 0xe3 -Igravesmall 228 % 0xe4 -Iacutesmall 229 % 0xe5 -Icircumflexsmall 230 % 0xe6 -Idieresissmall 231 % 0xe7 -Ethsmall 232 % 0xe8 -Ntildesmall 233 % 0xe9 -Ogravesmall 234 % 0xea -Oacutesmall 235 % 0xeb -Ocircumflexsmall 236 % 0xec -Otildesmall 237 % 0xed -Odieresissmall 238 % 0xee -Oslashsmall 239 % 0xef -Ugravesmall 240 % 0xf0 -Uacutesmall 241 % 0xf1 -Ucircumflexsmall 242 % 0xf2 -Udieresissmall 243 % 0xf3 -Yacutesmall 244 % 0xf4 -Thornsmall 245 % 0xf5 -Ydieresissmall 246 % 0xf6 -radicalex 247 % 0xf7 -arrowvertex 248 % 0xf8 -arrowhorizex 249 % 0xf9 -registersans 250 % 0xfa -copyrightsans 251 % 0xfb -trademarksans 252 % 0xfc -parenlefttp 253 % 0xfd -parenleftex 254 % 0xfe -parenleftbt 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/t1enc4.enc b/src/add-ons/print/drivers/pdf/encoding/t1enc4.enc deleted file mode 100644 index 67d221c877..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/t1enc4.enc +++ /dev/null @@ -1,31 +0,0 @@ -% Encoding definition for PDFlib -% t1enc4 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: glyph name index (decimal) % index (hex) -bracketlefttp 0 % 0x00 -bracketleftex 1 % 0x01 -bracketleftbt 2 % 0x02 -bracelefttp 3 % 0x03 -braceleftmid 4 % 0x04 -braceleftbt 5 % 0x05 -braceex 6 % 0x06 -integralex 7 % 0x07 -parenrighttp 8 % 0x08 -parenrightex 9 % 0x09 -parenrightbt 10 % 0x0a -bracketrighttp 11 % 0x0b -bracketrightex 12 % 0x0c -bracketrightbt 13 % 0x0d -bracerighttp 14 % 0x0e -bracerightmid 15 % 0x0f -bracerightbt 16 % 0x10 -ff 17 % 0x11 -fi 18 % 0x12 -fl 19 % 0x13 -ffi 20 % 0x14 -ffl 21 % 0x15 -afii57705 22 % 0x16 -afii57694 23 % 0x17 -afii57695 24 % 0x18 -afii57723 25 % 0x19 -afii57700 26 % 0x1a diff --git a/src/add-ons/print/drivers/pdf/encoding/ttenc0.cpg b/src/add-ons/print/drivers/pdf/encoding/ttenc0.cpg deleted file mode 100644 index 22acaba1db..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/ttenc0.cpg +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% ttenc0 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: unicode (hex) index (decimal) % index (hex) -0x20 0 % 0x00 -0x21 1 % 0x01 -0x22 2 % 0x02 -0x23 3 % 0x03 -0x24 4 % 0x04 -0x25 5 % 0x05 -0x26 6 % 0x06 -0x27 7 % 0x07 -0x28 8 % 0x08 -0x29 9 % 0x09 -0x2a 10 % 0x0a -0x2b 11 % 0x0b -0x2c 12 % 0x0c -0x2d 13 % 0x0d -0x2e 14 % 0x0e -0x2f 15 % 0x0f -0x30 16 % 0x10 -0x31 17 % 0x11 -0x32 18 % 0x12 -0x33 19 % 0x13 -0x34 20 % 0x14 -0x35 21 % 0x15 -0x36 22 % 0x16 -0x37 23 % 0x17 -0x38 24 % 0x18 -0x39 25 % 0x19 -0x3a 26 % 0x1a -0x3b 27 % 0x1b -0x3c 28 % 0x1c -0x3d 29 % 0x1d -0x3e 30 % 0x1e -0x3f 31 % 0x1f -0x40 32 % 0x20 -0x41 33 % 0x21 -0x42 34 % 0x22 -0x43 35 % 0x23 -0x44 36 % 0x24 -0x45 37 % 0x25 -0x46 38 % 0x26 -0x47 39 % 0x27 -0x48 40 % 0x28 -0x49 41 % 0x29 -0x4a 42 % 0x2a -0x4b 43 % 0x2b -0x4c 44 % 0x2c -0x4d 45 % 0x2d -0x4e 46 % 0x2e -0x4f 47 % 0x2f -0x50 48 % 0x30 -0x51 49 % 0x31 -0x52 50 % 0x32 -0x53 51 % 0x33 -0x54 52 % 0x34 -0x55 53 % 0x35 -0x56 54 % 0x36 -0x57 55 % 0x37 -0x58 56 % 0x38 -0x59 57 % 0x39 -0x5a 58 % 0x3a -0x5b 59 % 0x3b -0x5c 60 % 0x3c -0x5d 61 % 0x3d -0x5e 62 % 0x3e -0x5f 63 % 0x3f -0x60 64 % 0x40 -0x61 65 % 0x41 -0x62 66 % 0x42 -0x63 67 % 0x43 -0x64 68 % 0x44 -0x65 69 % 0x45 -0x66 70 % 0x46 -0x67 71 % 0x47 -0x68 72 % 0x48 -0x69 73 % 0x49 -0x6a 74 % 0x4a -0x6b 75 % 0x4b -0x6c 76 % 0x4c -0x6d 77 % 0x4d -0x6e 78 % 0x4e -0x6f 79 % 0x4f -0x70 80 % 0x50 -0x71 81 % 0x51 -0x72 82 % 0x52 -0x73 83 % 0x53 -0x74 84 % 0x54 -0x75 85 % 0x55 -0x76 86 % 0x56 -0x77 87 % 0x57 -0x78 88 % 0x58 -0x79 89 % 0x59 -0x7a 90 % 0x5a -0x7b 91 % 0x5b -0x7c 92 % 0x5c -0x7d 93 % 0x5d -0x7e 94 % 0x5e -0xa0 95 % 0x5f -0xa1 96 % 0x60 -0xa2 97 % 0x61 -0xa3 98 % 0x62 -0xa4 99 % 0x63 -0xa5 100 % 0x64 -0xa6 101 % 0x65 -0xa7 102 % 0x66 -0xa8 103 % 0x67 -0xa9 104 % 0x68 -0xaa 105 % 0x69 -0xab 106 % 0x6a -0xac 107 % 0x6b -0xad 108 % 0x6c -0xae 109 % 0x6d -0xaf 110 % 0x6e -0xb0 111 % 0x6f -0xb1 112 % 0x70 -0xb2 113 % 0x71 -0xb3 114 % 0x72 -0xb4 115 % 0x73 -0xb5 116 % 0x74 -0xb6 117 % 0x75 -0xb7 118 % 0x76 -0xb8 119 % 0x77 -0xb9 120 % 0x78 -0xba 121 % 0x79 -0xbb 122 % 0x7a -0xbc 123 % 0x7b -0xbd 124 % 0x7c -0xbe 125 % 0x7d -0xbf 126 % 0x7e -0xc0 127 % 0x7f -0xc1 128 % 0x80 -0xc2 129 % 0x81 -0xc3 130 % 0x82 -0xc4 131 % 0x83 -0xc5 132 % 0x84 -0xc6 133 % 0x85 -0xc7 134 % 0x86 -0xc8 135 % 0x87 -0xc9 136 % 0x88 -0xca 137 % 0x89 -0xcb 138 % 0x8a -0xcc 139 % 0x8b -0xcd 140 % 0x8c -0xce 141 % 0x8d -0xcf 142 % 0x8e -0xd0 143 % 0x8f -0xd1 144 % 0x90 -0xd2 145 % 0x91 -0xd3 146 % 0x92 -0xd4 147 % 0x93 -0xd5 148 % 0x94 -0xd6 149 % 0x95 -0xd7 150 % 0x96 -0xd8 151 % 0x97 -0xd9 152 % 0x98 -0xda 153 % 0x99 -0xdb 154 % 0x9a -0xdc 155 % 0x9b -0xdd 156 % 0x9c -0xde 157 % 0x9d -0xdf 158 % 0x9e -0xe0 159 % 0x9f -0xe1 160 % 0xa0 -0xe2 161 % 0xa1 -0xe3 162 % 0xa2 -0xe4 163 % 0xa3 -0xe5 164 % 0xa4 -0xe6 165 % 0xa5 -0xe7 166 % 0xa6 -0xe8 167 % 0xa7 -0xe9 168 % 0xa8 -0xea 169 % 0xa9 -0xeb 170 % 0xaa -0xec 171 % 0xab -0xed 172 % 0xac -0xee 173 % 0xad -0xef 174 % 0xae -0xf0 175 % 0xaf -0xf1 176 % 0xb0 -0xf2 177 % 0xb1 -0xf3 178 % 0xb2 -0xf4 179 % 0xb3 -0xf5 180 % 0xb4 -0xf6 181 % 0xb5 -0xf7 182 % 0xb6 -0xf8 183 % 0xb7 -0xf9 184 % 0xb8 -0xfa 185 % 0xb9 -0xfb 186 % 0xba -0xfc 187 % 0xbb -0xfd 188 % 0xbc -0xfe 189 % 0xbd -0xff 190 % 0xbe -0x100 191 % 0xbf -0x101 192 % 0xc0 -0x102 193 % 0xc1 -0x103 194 % 0xc2 -0x104 195 % 0xc3 -0x105 196 % 0xc4 -0x106 197 % 0xc5 -0x107 198 % 0xc6 -0x108 199 % 0xc7 -0x109 200 % 0xc8 -0x10a 201 % 0xc9 -0x10b 202 % 0xca -0x10c 203 % 0xcb -0x10d 204 % 0xcc -0x10e 205 % 0xcd -0x10f 206 % 0xce -0x110 207 % 0xcf -0x111 208 % 0xd0 -0x112 209 % 0xd1 -0x113 210 % 0xd2 -0x114 211 % 0xd3 -0x115 212 % 0xd4 -0x116 213 % 0xd5 -0x117 214 % 0xd6 -0x118 215 % 0xd7 -0x119 216 % 0xd8 -0x11a 217 % 0xd9 -0x11b 218 % 0xda -0x11c 219 % 0xdb -0x11d 220 % 0xdc -0x11e 221 % 0xdd -0x11f 222 % 0xde -0x120 223 % 0xdf -0x121 224 % 0xe0 -0x122 225 % 0xe1 -0x123 226 % 0xe2 -0x124 227 % 0xe3 -0x125 228 % 0xe4 -0x126 229 % 0xe5 -0x127 230 % 0xe6 -0x128 231 % 0xe7 -0x129 232 % 0xe8 -0x12a 233 % 0xe9 -0x12b 234 % 0xea -0x12c 235 % 0xeb -0x12d 236 % 0xec -0x12e 237 % 0xed -0x12f 238 % 0xee -0x130 239 % 0xef -0x131 240 % 0xf0 -0x132 241 % 0xf1 -0x133 242 % 0xf2 -0x134 243 % 0xf3 -0x135 244 % 0xf4 -0x136 245 % 0xf5 -0x137 246 % 0xf6 -0x138 247 % 0xf7 -0x139 248 % 0xf8 -0x13a 249 % 0xf9 -0x13b 250 % 0xfa -0x13c 251 % 0xfb -0x13d 252 % 0xfc -0x13e 253 % 0xfd -0x13f 254 % 0xfe -0x140 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/ttenc1.cpg b/src/add-ons/print/drivers/pdf/encoding/ttenc1.cpg deleted file mode 100644 index 80271ef295..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/ttenc1.cpg +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% ttenc1 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: unicode (hex) index (decimal) % index (hex) -0x141 0 % 0x00 -0x142 1 % 0x01 -0x143 2 % 0x02 -0x144 3 % 0x03 -0x145 4 % 0x04 -0x146 5 % 0x05 -0x147 6 % 0x06 -0x148 7 % 0x07 -0x149 8 % 0x08 -0x14a 9 % 0x09 -0x14b 10 % 0x0a -0x14c 11 % 0x0b -0x14d 12 % 0x0c -0x14e 13 % 0x0d -0x14f 14 % 0x0e -0x150 15 % 0x0f -0x151 16 % 0x10 -0x152 17 % 0x11 -0x153 18 % 0x12 -0x154 19 % 0x13 -0x155 20 % 0x14 -0x156 21 % 0x15 -0x157 22 % 0x16 -0x158 23 % 0x17 -0x159 24 % 0x18 -0x15a 25 % 0x19 -0x15b 26 % 0x1a -0x15c 27 % 0x1b -0x15d 28 % 0x1c -0x15e 29 % 0x1d -0x15f 30 % 0x1e -0x160 31 % 0x1f -0x161 32 % 0x20 -0x162 33 % 0x21 -0x163 34 % 0x22 -0x164 35 % 0x23 -0x165 36 % 0x24 -0x166 37 % 0x25 -0x167 38 % 0x26 -0x168 39 % 0x27 -0x169 40 % 0x28 -0x16a 41 % 0x29 -0x16b 42 % 0x2a -0x16c 43 % 0x2b -0x16d 44 % 0x2c -0x16e 45 % 0x2d -0x16f 46 % 0x2e -0x170 47 % 0x2f -0x171 48 % 0x30 -0x172 49 % 0x31 -0x173 50 % 0x32 -0x174 51 % 0x33 -0x175 52 % 0x34 -0x176 53 % 0x35 -0x177 54 % 0x36 -0x178 55 % 0x37 -0x179 56 % 0x38 -0x17a 57 % 0x39 -0x17b 58 % 0x3a -0x17c 59 % 0x3b -0x17d 60 % 0x3c -0x17e 61 % 0x3d -0x17f 62 % 0x3e -0x192 63 % 0x3f -0x1a0 64 % 0x40 -0x1a1 65 % 0x41 -0x1af 66 % 0x42 -0x1b0 67 % 0x43 -0x1e6 68 % 0x44 -0x1e7 69 % 0x45 -0x1fa 70 % 0x46 -0x1fb 71 % 0x47 -0x1fc 72 % 0x48 -0x1fd 73 % 0x49 -0x1fe 74 % 0x4a -0x1ff 75 % 0x4b -0x218 76 % 0x4c -0x219 77 % 0x4d -0x21a 78 % 0x4e -0x21b 79 % 0x4f -0x2bc 80 % 0x50 -0x2bd 81 % 0x51 -0x2c6 82 % 0x52 -0x2c7 83 % 0x53 -0x2c9 84 % 0x54 -0x2d8 85 % 0x55 -0x2d9 86 % 0x56 -0x2da 87 % 0x57 -0x2db 88 % 0x58 -0x2dc 89 % 0x59 -0x2dd 90 % 0x5a -0x300 91 % 0x5b -0x301 92 % 0x5c -0x303 93 % 0x5d -0x309 94 % 0x5e -0x323 95 % 0x5f -0x384 96 % 0x60 -0x385 97 % 0x61 -0x386 98 % 0x62 -0x387 99 % 0x63 -0x388 100 % 0x64 -0x389 101 % 0x65 -0x38a 102 % 0x66 -0x38c 103 % 0x67 -0x38e 104 % 0x68 -0x38f 105 % 0x69 -0x390 106 % 0x6a -0x391 107 % 0x6b -0x392 108 % 0x6c -0x393 109 % 0x6d -0x394 110 % 0x6e -0x395 111 % 0x6f -0x396 112 % 0x70 -0x397 113 % 0x71 -0x398 114 % 0x72 -0x399 115 % 0x73 -0x39a 116 % 0x74 -0x39b 117 % 0x75 -0x39c 118 % 0x76 -0x39d 119 % 0x77 -0x39e 120 % 0x78 -0x39f 121 % 0x79 -0x3a0 122 % 0x7a -0x3a1 123 % 0x7b -0x3a3 124 % 0x7c -0x3a4 125 % 0x7d -0x3a5 126 % 0x7e -0x3a6 127 % 0x7f -0x3a7 128 % 0x80 -0x3a8 129 % 0x81 -0x3a9 130 % 0x82 -0x3aa 131 % 0x83 -0x3ab 132 % 0x84 -0x3ac 133 % 0x85 -0x3ad 134 % 0x86 -0x3ae 135 % 0x87 -0x3af 136 % 0x88 -0x3b0 137 % 0x89 -0x3b1 138 % 0x8a -0x3b2 139 % 0x8b -0x3b3 140 % 0x8c -0x3b4 141 % 0x8d -0x3b5 142 % 0x8e -0x3b6 143 % 0x8f -0x3b7 144 % 0x90 -0x3b8 145 % 0x91 -0x3b9 146 % 0x92 -0x3ba 147 % 0x93 -0x3bb 148 % 0x94 -0x3bc 149 % 0x95 -0x3bd 150 % 0x96 -0x3be 151 % 0x97 -0x3bf 152 % 0x98 -0x3c0 153 % 0x99 -0x3c1 154 % 0x9a -0x3c2 155 % 0x9b -0x3c3 156 % 0x9c -0x3c4 157 % 0x9d -0x3c5 158 % 0x9e -0x3c6 159 % 0x9f -0x3c7 160 % 0xa0 -0x3c8 161 % 0xa1 -0x3c9 162 % 0xa2 -0x3ca 163 % 0xa3 -0x3cb 164 % 0xa4 -0x3cc 165 % 0xa5 -0x3cd 166 % 0xa6 -0x3ce 167 % 0xa7 -0x3d1 168 % 0xa8 -0x3d2 169 % 0xa9 -0x3d5 170 % 0xaa -0x3d6 171 % 0xab -0x401 172 % 0xac -0x402 173 % 0xad -0x403 174 % 0xae -0x404 175 % 0xaf -0x405 176 % 0xb0 -0x406 177 % 0xb1 -0x407 178 % 0xb2 -0x408 179 % 0xb3 -0x409 180 % 0xb4 -0x40a 181 % 0xb5 -0x40b 182 % 0xb6 -0x40c 183 % 0xb7 -0x40e 184 % 0xb8 -0x40f 185 % 0xb9 -0x410 186 % 0xba -0x411 187 % 0xbb -0x412 188 % 0xbc -0x413 189 % 0xbd -0x414 190 % 0xbe -0x415 191 % 0xbf -0x416 192 % 0xc0 -0x417 193 % 0xc1 -0x418 194 % 0xc2 -0x419 195 % 0xc3 -0x41a 196 % 0xc4 -0x41b 197 % 0xc5 -0x41c 198 % 0xc6 -0x41d 199 % 0xc7 -0x41e 200 % 0xc8 -0x41f 201 % 0xc9 -0x420 202 % 0xca -0x421 203 % 0xcb -0x422 204 % 0xcc -0x423 205 % 0xcd -0x424 206 % 0xce -0x425 207 % 0xcf -0x426 208 % 0xd0 -0x427 209 % 0xd1 -0x428 210 % 0xd2 -0x429 211 % 0xd3 -0x42a 212 % 0xd4 -0x42b 213 % 0xd5 -0x42c 214 % 0xd6 -0x42d 215 % 0xd7 -0x42e 216 % 0xd8 -0x42f 217 % 0xd9 -0x430 218 % 0xda -0x431 219 % 0xdb -0x432 220 % 0xdc -0x433 221 % 0xdd -0x434 222 % 0xde -0x435 223 % 0xdf -0x436 224 % 0xe0 -0x437 225 % 0xe1 -0x438 226 % 0xe2 -0x439 227 % 0xe3 -0x43a 228 % 0xe4 -0x43b 229 % 0xe5 -0x43c 230 % 0xe6 -0x43d 231 % 0xe7 -0x43e 232 % 0xe8 -0x43f 233 % 0xe9 -0x440 234 % 0xea -0x441 235 % 0xeb -0x442 236 % 0xec -0x443 237 % 0xed -0x444 238 % 0xee -0x445 239 % 0xef -0x446 240 % 0xf0 -0x447 241 % 0xf1 -0x448 242 % 0xf2 -0x449 243 % 0xf3 -0x44a 244 % 0xf4 -0x44b 245 % 0xf5 -0x44c 246 % 0xf6 -0x44d 247 % 0xf7 -0x44e 248 % 0xf8 -0x44f 249 % 0xf9 -0x451 250 % 0xfa -0x452 251 % 0xfb -0x453 252 % 0xfc -0x454 253 % 0xfd -0x455 254 % 0xfe -0x456 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/ttenc2.cpg b/src/add-ons/print/drivers/pdf/encoding/ttenc2.cpg deleted file mode 100644 index ff4a6fb2f0..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/ttenc2.cpg +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% ttenc2 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: unicode (hex) index (decimal) % index (hex) -0x457 0 % 0x00 -0x458 1 % 0x01 -0x459 2 % 0x02 -0x45a 3 % 0x03 -0x45b 4 % 0x04 -0x45c 5 % 0x05 -0x45e 6 % 0x06 -0x45f 7 % 0x07 -0x462 8 % 0x08 -0x463 9 % 0x09 -0x472 10 % 0x0a -0x473 11 % 0x0b -0x474 12 % 0x0c -0x475 13 % 0x0d -0x490 14 % 0x0e -0x491 15 % 0x0f -0x4d9 16 % 0x10 -0x5b0 17 % 0x11 -0x5b1 18 % 0x12 -0x5b2 19 % 0x13 -0x5b3 20 % 0x14 -0x5b4 21 % 0x15 -0x5b5 22 % 0x16 -0x5b6 23 % 0x17 -0x5b7 24 % 0x18 -0x5b8 25 % 0x19 -0x5b9 26 % 0x1a -0x5bb 27 % 0x1b -0x5bc 28 % 0x1c -0x5bd 29 % 0x1d -0x5be 30 % 0x1e -0x5bf 31 % 0x1f -0x5c0 32 % 0x20 -0x5c1 33 % 0x21 -0x5c2 34 % 0x22 -0x5c3 35 % 0x23 -0x5d0 36 % 0x24 -0x5d1 37 % 0x25 -0x5d2 38 % 0x26 -0x5d3 39 % 0x27 -0x5d4 40 % 0x28 -0x5d5 41 % 0x29 -0x5d6 42 % 0x2a -0x5d7 43 % 0x2b -0x5d8 44 % 0x2c -0x5d9 45 % 0x2d -0x5da 46 % 0x2e -0x5db 47 % 0x2f -0x5dc 48 % 0x30 -0x5dd 49 % 0x31 -0x5de 50 % 0x32 -0x5df 51 % 0x33 -0x5e0 52 % 0x34 -0x5e1 53 % 0x35 -0x5e2 54 % 0x36 -0x5e3 55 % 0x37 -0x5e4 56 % 0x38 -0x5e5 57 % 0x39 -0x5e6 58 % 0x3a -0x5e7 59 % 0x3b -0x5e8 60 % 0x3c -0x5e9 61 % 0x3d -0x5ea 62 % 0x3e -0x5f0 63 % 0x3f -0x5f1 64 % 0x40 -0x5f2 65 % 0x41 -0x60c 66 % 0x42 -0x61b 67 % 0x43 -0x61f 68 % 0x44 -0x621 69 % 0x45 -0x622 70 % 0x46 -0x623 71 % 0x47 -0x624 72 % 0x48 -0x625 73 % 0x49 -0x626 74 % 0x4a -0x627 75 % 0x4b -0x628 76 % 0x4c -0x629 77 % 0x4d -0x62a 78 % 0x4e -0x62b 79 % 0x4f -0x62c 80 % 0x50 -0x62d 81 % 0x51 -0x62e 82 % 0x52 -0x62f 83 % 0x53 -0x630 84 % 0x54 -0x631 85 % 0x55 -0x632 86 % 0x56 -0x633 87 % 0x57 -0x634 88 % 0x58 -0x635 89 % 0x59 -0x636 90 % 0x5a -0x637 91 % 0x5b -0x638 92 % 0x5c -0x639 93 % 0x5d -0x63a 94 % 0x5e -0x640 95 % 0x5f -0x641 96 % 0x60 -0x642 97 % 0x61 -0x643 98 % 0x62 -0x644 99 % 0x63 -0x645 100 % 0x64 -0x646 101 % 0x65 -0x647 102 % 0x66 -0x648 103 % 0x67 -0x649 104 % 0x68 -0x64a 105 % 0x69 -0x64b 106 % 0x6a -0x64c 107 % 0x6b -0x64d 108 % 0x6c -0x64e 109 % 0x6d -0x64f 110 % 0x6e -0x650 111 % 0x6f -0x651 112 % 0x70 -0x652 113 % 0x71 -0x660 114 % 0x72 -0x661 115 % 0x73 -0x662 116 % 0x74 -0x663 117 % 0x75 -0x664 118 % 0x76 -0x665 119 % 0x77 -0x666 120 % 0x78 -0x667 121 % 0x79 -0x668 122 % 0x7a -0x669 123 % 0x7b -0x66a 124 % 0x7c -0x66d 125 % 0x7d -0x679 126 % 0x7e -0x67e 127 % 0x7f -0x686 128 % 0x80 -0x688 129 % 0x81 -0x691 130 % 0x82 -0x698 131 % 0x83 -0x6a4 132 % 0x84 -0x6af 133 % 0x85 -0x6ba 134 % 0x86 -0x6d2 135 % 0x87 -0x6d5 136 % 0x88 -0x1e80 137 % 0x89 -0x1e81 138 % 0x8a -0x1e82 139 % 0x8b -0x1e83 140 % 0x8c -0x1e84 141 % 0x8d -0x1e85 142 % 0x8e -0x1ef2 143 % 0x8f -0x1ef3 144 % 0x90 -0x200c 145 % 0x91 -0x200d 146 % 0x92 -0x200e 147 % 0x93 -0x200f 148 % 0x94 -0x2012 149 % 0x95 -0x2013 150 % 0x96 -0x2014 151 % 0x97 -0x2015 152 % 0x98 -0x2017 153 % 0x99 -0x2018 154 % 0x9a -0x2019 155 % 0x9b -0x201a 156 % 0x9c -0x201b 157 % 0x9d -0x201c 158 % 0x9e -0x201d 159 % 0x9f -0x201e 160 % 0xa0 -0x2020 161 % 0xa1 -0x2021 162 % 0xa2 -0x2022 163 % 0xa3 -0x2024 164 % 0xa4 -0x2025 165 % 0xa5 -0x2026 166 % 0xa6 -0x202c 167 % 0xa7 -0x202d 168 % 0xa8 -0x202e 169 % 0xa9 -0x2030 170 % 0xaa -0x2032 171 % 0xab -0x2033 172 % 0xac -0x2039 173 % 0xad -0x203a 174 % 0xae -0x203c 175 % 0xaf -0x2044 176 % 0xb0 -0x2070 177 % 0xb1 -0x2074 178 % 0xb2 -0x2075 179 % 0xb3 -0x2076 180 % 0xb4 -0x2077 181 % 0xb5 -0x2078 182 % 0xb6 -0x2079 183 % 0xb7 -0x207d 184 % 0xb8 -0x207e 185 % 0xb9 -0x207f 186 % 0xba -0x2080 187 % 0xbb -0x2081 188 % 0xbc -0x2082 189 % 0xbd -0x2083 190 % 0xbe -0x2084 191 % 0xbf -0x2085 192 % 0xc0 -0x2086 193 % 0xc1 -0x2087 194 % 0xc2 -0x2088 195 % 0xc3 -0x2089 196 % 0xc4 -0x208d 197 % 0xc5 -0x208e 198 % 0xc6 -0x20a1 199 % 0xc7 -0x20a3 200 % 0xc8 -0x20a4 201 % 0xc9 -0x20a7 202 % 0xca -0x20aa 203 % 0xcb -0x20ab 204 % 0xcc -0x20ac 205 % 0xcd -0x2105 206 % 0xce -0x2111 207 % 0xcf -0x2113 208 % 0xd0 -0x2116 209 % 0xd1 -0x2118 210 % 0xd2 -0x211c 211 % 0xd3 -0x211e 212 % 0xd4 -0x2122 213 % 0xd5 -0x2126 214 % 0xd6 -0x212e 215 % 0xd7 -0x2135 216 % 0xd8 -0x2153 217 % 0xd9 -0x2154 218 % 0xda -0x215b 219 % 0xdb -0x215c 220 % 0xdc -0x215d 221 % 0xdd -0x215e 222 % 0xde -0x2190 223 % 0xdf -0x2191 224 % 0xe0 -0x2192 225 % 0xe1 -0x2193 226 % 0xe2 -0x2194 227 % 0xe3 -0x2195 228 % 0xe4 -0x21a8 229 % 0xe5 -0x21b5 230 % 0xe6 -0x21d0 231 % 0xe7 -0x21d1 232 % 0xe8 -0x21d2 233 % 0xe9 -0x21d3 234 % 0xea -0x21d4 235 % 0xeb -0x2200 236 % 0xec -0x2202 237 % 0xed -0x2203 238 % 0xee -0x2205 239 % 0xef -0x2206 240 % 0xf0 -0x2207 241 % 0xf1 -0x2208 242 % 0xf2 -0x2209 243 % 0xf3 -0x220b 244 % 0xf4 -0x220f 245 % 0xf5 -0x2211 246 % 0xf6 -0x2212 247 % 0xf7 -0x2215 248 % 0xf8 -0x2217 249 % 0xf9 -0x2219 250 % 0xfa -0x221a 251 % 0xfb -0x221d 252 % 0xfc -0x221e 253 % 0xfd -0x221f 254 % 0xfe -0x2220 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/ttenc3.cpg b/src/add-ons/print/drivers/pdf/encoding/ttenc3.cpg deleted file mode 100644 index 7508da1ae9..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/ttenc3.cpg +++ /dev/null @@ -1,260 +0,0 @@ -% Encoding definition for PDFlib -% ttenc3 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: unicode (hex) index (decimal) % index (hex) -0x2227 0 % 0x00 -0x2228 1 % 0x01 -0x2229 2 % 0x02 -0x222a 3 % 0x03 -0x222b 4 % 0x04 -0x2234 5 % 0x05 -0x223c 6 % 0x06 -0x2245 7 % 0x07 -0x2248 8 % 0x08 -0x2260 9 % 0x09 -0x2261 10 % 0x0a -0x2264 11 % 0x0b -0x2265 12 % 0x0c -0x2282 13 % 0x0d -0x2283 14 % 0x0e -0x2284 15 % 0x0f -0x2286 16 % 0x10 -0x2287 17 % 0x11 -0x2295 18 % 0x12 -0x2297 19 % 0x13 -0x22a5 20 % 0x14 -0x22c5 21 % 0x15 -0x2302 22 % 0x16 -0x2310 23 % 0x17 -0x2320 24 % 0x18 -0x2321 25 % 0x19 -0x2329 26 % 0x1a -0x232a 27 % 0x1b -0x2500 28 % 0x1c -0x2502 29 % 0x1d -0x250c 30 % 0x1e -0x2510 31 % 0x1f -0x2514 32 % 0x20 -0x2518 33 % 0x21 -0x251c 34 % 0x22 -0x2524 35 % 0x23 -0x252c 36 % 0x24 -0x2534 37 % 0x25 -0x253c 38 % 0x26 -0x2550 39 % 0x27 -0x2551 40 % 0x28 -0x2552 41 % 0x29 -0x2553 42 % 0x2a -0x2554 43 % 0x2b -0x2555 44 % 0x2c -0x2556 45 % 0x2d -0x2557 46 % 0x2e -0x2558 47 % 0x2f -0x2559 48 % 0x30 -0x255a 49 % 0x31 -0x255b 50 % 0x32 -0x255c 51 % 0x33 -0x255d 52 % 0x34 -0x255e 53 % 0x35 -0x255f 54 % 0x36 -0x2560 55 % 0x37 -0x2561 56 % 0x38 -0x2562 57 % 0x39 -0x2563 58 % 0x3a -0x2564 59 % 0x3b -0x2565 60 % 0x3c -0x2566 61 % 0x3d -0x2567 62 % 0x3e -0x2568 63 % 0x3f -0x2569 64 % 0x40 -0x256a 65 % 0x41 -0x256b 66 % 0x42 -0x256c 67 % 0x43 -0x2580 68 % 0x44 -0x2584 69 % 0x45 -0x2588 70 % 0x46 -0x258c 71 % 0x47 -0x2590 72 % 0x48 -0x2591 73 % 0x49 -0x2592 74 % 0x4a -0x2593 75 % 0x4b -0x25a0 76 % 0x4c -0x25a1 77 % 0x4d -0x25aa 78 % 0x4e -0x25ab 79 % 0x4f -0x25ac 80 % 0x50 -0x25b2 81 % 0x51 -0x25ba 82 % 0x52 -0x25bc 83 % 0x53 -0x25c4 84 % 0x54 -0x25ca 85 % 0x55 -0x25cb 86 % 0x56 -0x25cf 87 % 0x57 -0x25d8 88 % 0x58 -0x25d9 89 % 0x59 -0x25e6 90 % 0x5a -0x263a 91 % 0x5b -0x263b 92 % 0x5c -0x263c 93 % 0x5d -0x2640 94 % 0x5e -0x2642 95 % 0x5f -0x2660 96 % 0x60 -0x2663 97 % 0x61 -0x2665 98 % 0x62 -0x2666 99 % 0x63 -0x266a 100 % 0x64 -0x266b 101 % 0x65 -0xf6be 102 % 0x66 -0xf6bf 103 % 0x67 -0xf6c0 104 % 0x68 -0xf6c1 105 % 0x69 -0xf6c2 106 % 0x6a -0xf6c3 107 % 0x6b -0xf6c4 108 % 0x6c -0xf6c5 109 % 0x6d -0xf6c6 110 % 0x6e -0xf6c7 111 % 0x6f -0xf6c8 112 % 0x70 -0xf6c9 113 % 0x71 -0xf6ca 114 % 0x72 -0xf6cb 115 % 0x73 -0xf6cc 116 % 0x74 -0xf6cd 117 % 0x75 -0xf6ce 118 % 0x76 -0xf6cf 119 % 0x77 -0xf6d0 120 % 0x78 -0xf6d1 121 % 0x79 -0xf6d2 122 % 0x7a -0xf6d3 123 % 0x7b -0xf6d4 124 % 0x7c -0xf6d5 125 % 0x7d -0xf6d6 126 % 0x7e -0xf6d7 127 % 0x7f -0xf6d8 128 % 0x80 -0xf6d9 129 % 0x81 -0xf6da 130 % 0x82 -0xf6db 131 % 0x83 -0xf6dc 132 % 0x84 -0xf6dd 133 % 0x85 -0xf6de 134 % 0x86 -0xf6df 135 % 0x87 -0xf6e0 136 % 0x88 -0xf6e1 137 % 0x89 -0xf6e2 138 % 0x8a -0xf6e3 139 % 0x8b -0xf6e4 140 % 0x8c -0xf6e5 141 % 0x8d -0xf6e6 142 % 0x8e -0xf6e7 143 % 0x8f -0xf6e8 144 % 0x90 -0xf6e9 145 % 0x91 -0xf6ea 146 % 0x92 -0xf6eb 147 % 0x93 -0xf6ec 148 % 0x94 -0xf6ed 149 % 0x95 -0xf6ee 150 % 0x96 -0xf6ef 151 % 0x97 -0xf6f0 152 % 0x98 -0xf6f1 153 % 0x99 -0xf6f2 154 % 0x9a -0xf6f3 155 % 0x9b -0xf6f4 156 % 0x9c -0xf6f5 157 % 0x9d -0xf6f6 158 % 0x9e -0xf6f7 159 % 0x9f -0xf6f8 160 % 0xa0 -0xf6f9 161 % 0xa1 -0xf6fa 162 % 0xa2 -0xf6fb 163 % 0xa3 -0xf6fc 164 % 0xa4 -0xf6fd 165 % 0xa5 -0xf6fe 166 % 0xa6 -0xf6ff 167 % 0xa7 -0xf721 168 % 0xa8 -0xf724 169 % 0xa9 -0xf726 170 % 0xaa -0xf730 171 % 0xab -0xf731 172 % 0xac -0xf732 173 % 0xad -0xf733 174 % 0xae -0xf734 175 % 0xaf -0xf735 176 % 0xb0 -0xf736 177 % 0xb1 -0xf737 178 % 0xb2 -0xf738 179 % 0xb3 -0xf739 180 % 0xb4 -0xf73f 181 % 0xb5 -0xf760 182 % 0xb6 -0xf761 183 % 0xb7 -0xf762 184 % 0xb8 -0xf763 185 % 0xb9 -0xf764 186 % 0xba -0xf765 187 % 0xbb -0xf766 188 % 0xbc -0xf767 189 % 0xbd -0xf768 190 % 0xbe -0xf769 191 % 0xbf -0xf76a 192 % 0xc0 -0xf76b 193 % 0xc1 -0xf76c 194 % 0xc2 -0xf76d 195 % 0xc3 -0xf76e 196 % 0xc4 -0xf76f 197 % 0xc5 -0xf770 198 % 0xc6 -0xf771 199 % 0xc7 -0xf772 200 % 0xc8 -0xf773 201 % 0xc9 -0xf774 202 % 0xca -0xf775 203 % 0xcb -0xf776 204 % 0xcc -0xf777 205 % 0xcd -0xf778 206 % 0xce -0xf779 207 % 0xcf -0xf77a 208 % 0xd0 -0xf7a1 209 % 0xd1 -0xf7a2 210 % 0xd2 -0xf7a8 211 % 0xd3 -0xf7af 212 % 0xd4 -0xf7b4 213 % 0xd5 -0xf7b8 214 % 0xd6 -0xf7bf 215 % 0xd7 -0xf7e0 216 % 0xd8 -0xf7e1 217 % 0xd9 -0xf7e2 218 % 0xda -0xf7e3 219 % 0xdb -0xf7e4 220 % 0xdc -0xf7e5 221 % 0xdd -0xf7e6 222 % 0xde -0xf7e7 223 % 0xdf -0xf7e8 224 % 0xe0 -0xf7e9 225 % 0xe1 -0xf7ea 226 % 0xe2 -0xf7eb 227 % 0xe3 -0xf7ec 228 % 0xe4 -0xf7ed 229 % 0xe5 -0xf7ee 230 % 0xe6 -0xf7ef 231 % 0xe7 -0xf7f0 232 % 0xe8 -0xf7f1 233 % 0xe9 -0xf7f2 234 % 0xea -0xf7f3 235 % 0xeb -0xf7f4 236 % 0xec -0xf7f5 237 % 0xed -0xf7f6 238 % 0xee -0xf7f8 239 % 0xef -0xf7f9 240 % 0xf0 -0xf7fa 241 % 0xf1 -0xf7fb 242 % 0xf2 -0xf7fc 243 % 0xf3 -0xf7fd 244 % 0xf4 -0xf7fe 245 % 0xf5 -0xf7ff 246 % 0xf6 -0xf8e5 247 % 0xf7 -0xf8e6 248 % 0xf8 -0xf8e7 249 % 0xf9 -0xf8e8 250 % 0xfa -0xf8e9 251 % 0xfb -0xf8ea 252 % 0xfc -0xf8eb 253 % 0xfd -0xf8ec 254 % 0xfe -0xf8ed 255 % 0xff diff --git a/src/add-ons/print/drivers/pdf/encoding/ttenc4.cpg b/src/add-ons/print/drivers/pdf/encoding/ttenc4.cpg deleted file mode 100644 index c96d20774a..0000000000 --- a/src/add-ons/print/drivers/pdf/encoding/ttenc4.cpg +++ /dev/null @@ -1,31 +0,0 @@ -% Encoding definition for PDFlib -% ttenc4 -% WARNING: MACHINE GENERATED DON'T CHANGE! -% Format: unicode (hex) index (decimal) % index (hex) -0xf8ee 0 % 0x00 -0xf8ef 1 % 0x01 -0xf8f0 2 % 0x02 -0xf8f1 3 % 0x03 -0xf8f2 4 % 0x04 -0xf8f3 5 % 0x05 -0xf8f4 6 % 0x06 -0xf8f5 7 % 0x07 -0xf8f6 8 % 0x08 -0xf8f7 9 % 0x09 -0xf8f8 10 % 0x0a -0xf8f9 11 % 0x0b -0xf8fa 12 % 0x0c -0xf8fb 13 % 0x0d -0xf8fc 14 % 0x0e -0xf8fd 15 % 0x0f -0xf8fe 16 % 0x10 -0xfb00 17 % 0x11 -0xfb01 18 % 0x12 -0xfb02 19 % 0x13 -0xfb03 20 % 0x14 -0xfb04 21 % 0x15 -0xfb1f 22 % 0x16 -0xfb2a 23 % 0x17 -0xfb2b 24 % 0x18 -0xfb35 25 % 0x19 -0xfb4b 26 % 0x1a diff --git a/src/add-ons/print/drivers/pdf/source/AboutText.cpp b/src/add-ons/print/drivers/pdf/source/AboutText.cpp deleted file mode 100644 index 45f8fa1201..0000000000 --- a/src/add-ons/print/drivers/pdf/source/AboutText.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - -AboutText.cpp - -Copyright (c) 2001-2006 Haiku. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include - -/* -static const char* -kAbout = -"PDF Writer for BeOS\n" -B_UTF8_COPYRIGHT " 2001-2004 Haiku\n" -"\n" -"Philippe Houdoin\n" -"\tProject Leader\n\n" -"Simon Gauvin\n" -"\tGUI Design\n\n" -"Michael Pfeiffer\n" -"\tPDF Generation\n" -"\tConfiguration\n" -"\tInteractive Features\n" -"\t" B_UTF8_ELLIPSIS -; -*/ diff --git a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp deleted file mode 100644 index 5e96563684..0000000000 --- a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp +++ /dev/null @@ -1,379 +0,0 @@ -/* - -AdvancedSettingsWindow.cpp - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "AdvancedSettingsWindow.h" -#include "PrintUtils.h" - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -static BMessage* BorderWidthMessage(uint32 what, float width) -{ - BMessage* m = new BMessage(what); - m->AddFloat("width", width); - return m; -} - - -AdvancedSettingsWindow::AdvancedSettingsWindow(BMessage *settings) - : HWindow(BRect(0, 0, 450, 180), "Advanced settings", B_TITLED_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | - B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE), - fSettings(settings) -{ - AddShortcut('W', B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED)); - - BString licenseKey; - if (settings->FindString("pdflib_license_key", &licenseKey) != B_OK) - licenseKey = "Not supported."; - - if (settings->FindBool("create_web_links", &fCreateLinks) != B_OK) - fCreateLinks = false; - - if (settings->FindFloat("link_border_width", &fLinkBorderWidth)) - fLinkBorderWidth = 1; - - if (settings->FindBool("create_bookmarks", &fCreateBookmarks) != B_OK) - fCreateBookmarks = false; - - if (settings->FindString("xrefs_file", &fXRefs) != B_OK) - fXRefs = ""; - - if (settings->FindString("bookmark_definition_file", &fBookmarkDefinition) != B_OK) - fBookmarkDefinition = ""; - - if (settings->FindBool("create_xrefs", &fCreateXRefs) != B_OK) - fCreateXRefs = false; - - if (settings->FindInt32("close_option", (int32*)&fCloseOption) != B_OK) - fCloseOption = kNever; - - fLicenseKey = new BTextControl("pdflib_license_key", - "PDFlib license key: ", "", NULL); - fLicenseKey->SetEnabled(false); - fLicenseKey->TextView()->HideTyping(true); - fLicenseKey->TextView()->SetText(licenseKey.String()); - - // Hide the license key field as it is only supported in the commercial - // version of of pdflib. Leave it here for layout atm. - fLicenseKey->Hide(); - // border link - - // bounds.OffsetBy(0.0, fLicenseKey->Bounds().Height() + 10.0); - BPopUpMenu* menuLinkBorder = new BPopUpMenu("Link Border"); - menuLinkBorder->SetRadioMode(true); - - BMenuField* menuFieldLinkBorder = new BMenuField("link_border_width_menu", - "Link border:", menuLinkBorder); - menuFieldLinkBorder->Menu()->SetLabelFromMarked(true); - - BMenuItem* item; - menuLinkBorder->AddItem(item = new BMenuItem("None", - new BMessage(CREATE_LINKS_MSG))); - - item->SetMarked(!fCreateLinks); - menuLinkBorder->AddSeparatorItem(); - - menuLinkBorder->AddItem(item = new BMenuItem("No border", - BorderWidthMessage(LINK_BORDER_MSG, 0.0))); - - if (fCreateLinks && fLinkBorderWidth == 0) - item->SetMarked(true); - - menuLinkBorder->AddItem(item = new BMenuItem("Normal border", - BorderWidthMessage(LINK_BORDER_MSG, 1.0))); - - if (fCreateLinks && fLinkBorderWidth == 1) - item->SetMarked(true); - - menuLinkBorder->AddItem(item = new BMenuItem("Bold border", - BorderWidthMessage(LINK_BORDER_MSG, 2.0))); - - if (fCreateLinks && fLinkBorderWidth == 2) - item->SetMarked(true); - - - // bookmarks - - BPopUpMenu* menuBookmark = new BPopUpMenu("Bookmark Definition File"); - menuBookmark->SetRadioMode(true); - - BMenuField* menuFieldBookmark = new BMenuField("definition_menu", - "Bookmark definition file:", menuBookmark); - menuFieldBookmark->Menu()->SetLabelFromMarked(true); - - menuBookmark->AddItem(item = new BMenuItem("None", - new BMessage(CREATE_BOOKMARKS_MSG))); - item->SetMarked(!fCreateBookmarks); - menuBookmark->AddSeparatorItem(); - - BDirectory bookmarks(_SetupDirectory("bookmarks")); - if (bookmarks.InitCheck() == B_OK) { - BEntry entry; - while (bookmarks.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { - char name[B_FILE_NAME_LENGTH]; - if (entry.GetName(name) == B_OK) { - menuBookmark->AddItem(item = new BMenuItem(name, new BMessage(DEFINITION_MSG))); - if (fCreateBookmarks && strcmp(name, fBookmarkDefinition.String()) == 0) - item->SetMarked(true); - } - } - } - - // cross references - - BPopUpMenu* menuCrossReferences = new BPopUpMenu("Cross References File"); - menuCrossReferences->SetRadioMode(true); - - BMenuField* menuFieldCrossReferences = new BMenuField("xrefs_menu", - "Cross references file:", menuCrossReferences); - menuFieldCrossReferences->Menu()->SetLabelFromMarked(true); - - menuCrossReferences->AddItem(item = new BMenuItem("None", - new BMessage(CREATE_XREFS_MSG))); - item->SetMarked(!fCreateXRefs); - menuCrossReferences->AddSeparatorItem(); - - BDirectory xrefs(_SetupDirectory("xrefs")); - if (xrefs.InitCheck() == B_OK) { - BEntry entry; - while (xrefs.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { - char name[B_FILE_NAME_LENGTH]; - if (entry.GetName(name) == B_OK) { - menuCrossReferences->AddItem(item = new BMenuItem(name, - new BMessage(XREFS_MSG))); - if (fCreateXRefs && strcmp(name, fXRefs.String()) == 0) - item->SetMarked(true); - } - } - } - - BPopUpMenu* menuStatusWindow = - new BPopUpMenu("Close status window when done"); - menuStatusWindow->SetRadioMode(true); - - BMenuField* menuFieldStatusWindow = new BMenuField("close_option_menu", - "Close status window when done:", menuStatusWindow); - menuFieldStatusWindow->Menu()->SetLabelFromMarked(true); - - _AddMenuItem(menuStatusWindow, "Never", kNever); - _AddMenuItem(menuStatusWindow, "No errors", kNoErrors); - _AddMenuItem(menuStatusWindow, "No errors or warnings", - kNoErrorsOrWarnings); - _AddMenuItem(menuStatusWindow, "No errors, warnings or info", - kNoErrorsWarningsOrInfo); - _AddMenuItem(menuStatusWindow, "Always", kAlways); - - BButton *cancelButton = new BButton("cancel", "Cancel", - new BMessage(CANCEL_MSG)); - - BButton *okButton = new BButton("ok", "OK", new BMessage(OK_MSG)); - okButton->MakeDefault(true); - - BButton *openButton = new BButton("openSettingsFolder", - "Open settings folder" B_UTF8_ELLIPSIS, - new BMessage(OPEN_SETTINGS_FOLDER_MSG)); - - BLayoutBuilder::Group<>(this, B_VERTICAL) - .SetInsets(B_USE_DEFAULT_SPACING) - .AddGrid(B_USE_DEFAULT_SPACING, B_USE_SMALL_SPACING) - .Add(fLicenseKey->CreateLabelLayoutItem(), 0, 0) - .Add(fLicenseKey->CreateTextViewLayoutItem(), 1, 0) - .Add(menuFieldLinkBorder->CreateLabelLayoutItem(), 0, 1) - .Add(menuFieldLinkBorder->CreateMenuBarLayoutItem(), 1, 1) - .Add(menuFieldBookmark->CreateLabelLayoutItem(), 0, 2) - .Add(menuFieldBookmark->CreateMenuBarLayoutItem(), 1, 2) - .Add(menuFieldCrossReferences->CreateLabelLayoutItem(), 0, 3) - .Add(menuFieldCrossReferences->CreateMenuBarLayoutItem(), 1, 3) - .Add(menuFieldStatusWindow->CreateLabelLayoutItem(), 0, 4) - .Add(menuFieldStatusWindow->CreateMenuBarLayoutItem(), 1, 4) - .End() - .Add(new BSeparatorView(B_HORIZONTAL, B_FANCY_BORDER)) - .AddGroup(B_HORIZONTAL) - .Add(openButton) - .AddGlue() - .Add(cancelButton) - .Add(okButton) - .End(); - - - BRect winFrame(Frame()); - BRect screenFrame(BScreen().Frame()); - MoveTo((screenFrame.right - winFrame.right) / 2, - (screenFrame.bottom - winFrame.bottom) / 2); -} - - -void -AdvancedSettingsWindow::MessageReceived(BMessage *msg) -{ - void *source; - BMenuItem *item = NULL; - if (msg->FindPointer("source", &source) == B_OK) - item = static_cast (source); - - switch (msg->what){ - case OK_MSG: { - _UpdateSettings(); - Quit(); - } break; - - case CANCEL_MSG: { - Quit(); - } break; - - case CREATE_LINKS_MSG: { - fCreateLinks = false; - } break; - - case LINK_BORDER_MSG: { - float w; - if (msg->FindFloat("width", &w) == B_OK) { - fLinkBorderWidth = w; - fCreateLinks = true; - } - } break; - - case CREATE_BOOKMARKS_MSG: { - fCreateBookmarks = false; - } break; - - case DEFINITION_MSG: { - if (item) { - fBookmarkDefinition = item->Label(); - fCreateBookmarks = true; - } - } break; - - case CREATE_XREFS_MSG: { - fCreateXRefs = false; - } break; - - case XREFS_MSG: { - if (item) { - fXRefs = item->Label(); - fCreateXRefs = true; - } - } break; - - case AUTO_CLOSE_MSG: { - int32 closeOption; - if (msg->FindInt32("close_option", &closeOption) == B_OK) - fCloseOption = (CloseOption)closeOption; - } break; - - case OPEN_SETTINGS_FOLDER_MSG: { - BPath path; - find_directory(B_USER_SETTINGS_DIRECTORY, &path, false); - path.Append("PDF Writer"); - - entry_ref ref; - get_ref_for_path(path.Path(), &ref); - - BMessenger tracker("application/x-vnd.Be-TRAK"); - if (tracker.IsValid()) { - BMessage message(B_REFS_RECEIVED); - message.AddRef("refs", &ref); - tracker.SendMessage(&message); - } - } break; - - default: - inherited::MessageReceived(msg); - break; - } -} - - -void -AdvancedSettingsWindow::_UpdateSettings() -{ -#if 0 - SetString(fSettings, "pdflib_license_key", fLicenseKey); -#endif - - SetInt32(fSettings, "close_option", fCloseOption); - - SetBool(fSettings, "create_web_links", fCreateLinks); - SetFloat(fSettings, "link_border_width", fLinkBorderWidth); - - SetString(fSettings, "xrefs_file", fXRefs); - SetBool(fSettings, "create_xrefs", fCreateXRefs); - - SetBool(fSettings, "create_bookmarks", fCreateBookmarks); - SetString(fSettings, "bookmark_definition_file", fBookmarkDefinition); -} - - -BDirectory -AdvancedSettingsWindow::_SetupDirectory(const char* dirName) -{ - BPath path; - find_directory(B_USER_SETTINGS_DIRECTORY, &path, true); - - BDirectory dir(path.Path()); - if (dir.Contains("PDF Writer")) { - path.Append("PDF Writer"); - dir.SetTo(path.Path()); - } else { - dir.CreateDirectory("PDF Writer", &dir); - } - - if (dir.Contains(dirName)) { - path.Append(dirName); - dir.SetTo(path.Path()); - } else { - dir.CreateDirectory(dirName, &dir); - } - return dir; -} - - -void AdvancedSettingsWindow::_AddMenuItem(BPopUpMenu* menu, const char* label, - CloseOption option) -{ - BMessage* msg = new BMessage(AUTO_CLOSE_MSG); - msg->AddInt32("close_option", option); - BMenuItem* item = new BMenuItem(label, msg); - menu->AddItem(item); - if (fCloseOption == option) - item->SetMarked(true); -} diff --git a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h deleted file mode 100644 index e60693be3d..0000000000 --- a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef ADVANCED_SETTINGS_WINDOW_H -#define ADVANCED_SETTINGS_WINDOW_H - - -#include "BlockingWindow.h" -#include "PrinterDriver.h" - - -#include -#include - - -class BMessage; -class BPopUpMenu; -class BTextControl; - - -class AdvancedSettingsWindow : public HWindow -{ - typedef HWindow inherited; -public: - // Constructors, destructors, operators... - - AdvancedSettingsWindow(BMessage *doc_info); - - virtual void MessageReceived(BMessage *msg); - - enum { - OK_MSG = 'ok__', - CANCEL_MSG = 'cncl', - CREATE_LINKS_MSG = 'clnk', - LINK_BORDER_MSG = 'lnkb', - CREATE_BOOKMARKS_MSG = 'cbmk', - DEFINITION_MSG = 'defi', - CREATE_XREFS_MSG = 'cxrf', - XREFS_MSG = 'xref', - AUTO_CLOSE_MSG = 'acls', - OPEN_SETTINGS_FOLDER_MSG = 'opsf', - }; - -private: - void _UpdateSettings(); - BDirectory _SetupDirectory(const char* dirName); - void _AddMenuItem(BPopUpMenu* menu, const char* label, CloseOption option); - -private: - BMessage* fSettings; - BTextControl* fLicenseKey; - bool fCreateLinks; - float fLinkBorderWidth; - bool fCreateBookmarks; - BString fBookmarkDefinition; - bool fCreateXRefs; - BString fXRefs; - CloseOption fCloseOption; -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Bezier.cpp b/src/add-ons/print/drivers/pdf/source/Bezier.cpp deleted file mode 100644 index 44224af2ef..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Bezier.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include "Bezier.h" - -/* - Bezier curve of degree n with control points P[0] ... P[n]: - P(t) = sum i from 0 to n of B(i, n, t) * P[i] - Bernsteinpolynomial: - B(i, n, t) = n! / (i! * (n-i)!) * t^i * (1-t)^(n-i) -*/ - -Bezier::Bezier(BPoint *points, int noOfPoints) -{ - int i; - fPoints = new BPoint[noOfPoints]; - fBernsteinWeights = new double[noOfPoints]; - fNoOfPoints = noOfPoints; - const int n = noOfPoints - 1; - for (i = 0; i < noOfPoints; i++) { - fPoints[i] = points[i]; - fBernsteinWeights[i] = Fact(n) / (Fact(i) * Fact(n-i)); - } -} - - -Bezier::~Bezier() -{ - delete []fPoints; - delete []fBernsteinWeights; -} - - -double -Bezier::Fact(int n) -{ - double f = 1; - for (; n > 0; n --) f *= n; - return f; -} - - -BPoint -Bezier::PointAt(float t) -{ - const int n = fNoOfPoints - 1; - double x, y; - x = y = 0.0; - for (int i = 0; i < fNoOfPoints; i ++) { - double w = fBernsteinWeights[i] * pow(t, i) * pow(1 - t, n - i); - x += w * fPoints[i].x; - y += w * fPoints[i].y; - } - return BPoint(x, y); -} - diff --git a/src/add-ons/print/drivers/pdf/source/Bezier.h b/src/add-ons/print/drivers/pdf/source/Bezier.h deleted file mode 100644 index 6e13093812..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Bezier.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - -Bezier curve - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef BEZIER_H -#define BEZIER_H - -#include - -class Bezier -{ - BPoint *fPoints; - int fNoOfPoints; - double *fBernsteinWeights; - - double Fact(int n); - -public: - Bezier(BPoint *points, int n); - ~Bezier(); - BPoint PointAt(float t); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Bookmark.cpp b/src/add-ons/print/drivers/pdf/source/Bookmark.cpp deleted file mode 100644 index 62ab3fb933..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Bookmark.cpp +++ /dev/null @@ -1,206 +0,0 @@ -#include -#include "PDFWriter.h" -#include "Bookmark.h" -#include "Scanner.h" -#include "Report.h" - - -Bookmark::Definition::Definition(int level, BFont* font, bool expanded) - : fLevel(level) - , fFont(*font) - , fExpanded(expanded) -{ -} - - -bool Bookmark::Definition::Matches(font_family* family, font_style* style, float size) const -{ - font_family family0; - font_style style0; - - if (fFont.Size() != size) return false; - - fFont.GetFamilyAndStyle(&family0, &style0); - - return strcmp(family0, *family) == 0 && - strcmp(style0, *style) == 0; -} - - -Bookmark::Bookmark(PDFWriter* writer) - : fWriter(writer) -{ - for (int i = 0; i < kMaxBookmarkLevels; i ++) { - fLevels[i] = 0; - } -} - - -Bookmark::Definition* Bookmark::Find(BFont* font) const -{ - font_family family; - font_style style; - float size; - - font->GetFamilyAndStyle(&family, &style); - size = font->Size(); - - for (int i = 0; i < fDefinitions.CountItems(); i++) { - Definition* definition = fDefinitions.ItemAt(i); - if (definition->Matches(&family, &style, size)) { - return definition; - } - } - return NULL; -} - - -void Bookmark::AddDefinition(int level, BFont* font, bool expanded) -{ - ASSERT(1 <= level && level <= kMaxBookmarkLevels); - if (Find(font) == NULL) { - fDefinitions.AddItem(new Definition(level, font, expanded)); - } -} - - -void Bookmark::AddBookmark(BPoint start, float height, const char* text, BFont* font) -{ - Definition* definition = Find(font); - if (definition != NULL) { - fOutlines.AddItem(new Outline(start, height, text, definition)); - } -} - - -int Bookmark::AscendingByStart(const Outline** a, const Outline** b) { - return (int)((*b)->Start().y - (*a)->Start().y); -} - - -void Bookmark::CreateBookmarks() { - char optList[256]; - fOutlines.SortItems(AscendingByStart); - - for (int i = 0; i < fOutlines.CountItems(); i++) { - BString ucs2; - - Outline* o = fOutlines.ItemAt(i); - REPORT(kInfo, fWriter->fPage, "Bookmark '%s' at level %d", o->Text(), o->Level()); - - sprintf(optList, "type=fixed left=%f top=%f", o->Start().x, o->Start().y + o->Height()); - PDF_set_parameter(fWriter->fPdf, "bookmarkdest", optList); - - fWriter->ToPDFUnicode(o->Text(), ucs2); - - int open = o->Expanded() ? 1 : 0; - int bookmark = PDF_add_bookmark(fWriter->fPdf, ucs2.String(), fLevels[o->Level()-1], open); - - if (bookmark < 0) bookmark = 0; - - for (int i = o->Level(); i < kMaxBookmarkLevels; i ++) { - fLevels[i] = bookmark; - } - } - // reset to default - PDF_set_parameter(fWriter->fPdf, "bookmarkdest", "type=fitwindow"); - - fOutlines.MakeEmpty(); -} - -// Reads bookmark definitions from file - -/* -File Format: Definition. -Line comment starts with '#'. - -Definition = Version { Font }. -Version = "Bookmarks" "2.0". -Font = Level Family Style Size Expanded. -Level = int. -Family = String. -Style = String. -Size = float. -Expanded = "expanded" | "collapsed". // new in version 2.0, version 1.0 defaults to collapsed -String = '"' string '"'. -*/ - -bool Bookmark::Exists(const char* f, const char* s) const { - font_family family; - font_style style; - uint32 flags; - int32 nFamilies; - int32 nStyles; - - nFamilies = count_font_families(); - - for (int32 i = 0; i < nFamilies; i ++) { - if (get_font_family(i, &family, &flags) == B_OK && strcmp(f, family) == 0) { - nStyles = count_font_styles(family); - for (int32 j = 0; j < nStyles; j++) { - if (get_font_style(family, j, &style, &flags) == B_OK && strcmp(s, style) == 0) { - return true; - } - } - } - } - return false; -} - - -bool Bookmark::Read(const char* name) { - Scanner scnr(name); - if (scnr.InitCheck() == B_OK) { - BString s; float version; bool ok; - ok = scnr.ReadName(&s) && scnr.ReadFloat(&version); - if (!ok || strcmp(s.String(), "Bookmarks") != 0 || (version != 1.0 && version != 2.0) ) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): '%s' not a bookmarks file or wrong version!", scnr.Line(), scnr.Column(), name); - return false; - } - - while (!scnr.IsEOF()) { - float level, size; - bool expanded = false; - BString family, style, expand; - if (!(scnr.ReadFloat(&level) && level >= 1.0 && level <= 10.0)) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): Invalid level", scnr.Line(), scnr.Column()); - return false; - } - if (!scnr.ReadString(&family)) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): Invalid font family", scnr.Line(), scnr.Column()); - return false; - } - if (!scnr.ReadString(&style)) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): Invalid font style", scnr.Line(), scnr.Column()); - return false; - } - if (!scnr.ReadFloat(&size)) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): Invalid font size", scnr.Line(), scnr.Column()); - return false; - } - if (version == 2.0) { - if (!scnr.ReadName(&expand) || (strcmp(expand.String(), "expanded") != 0 && strcmp(expand.String(), "collapsed") != 0)) { - REPORT(kError, 0, "Bookmarks (line %d, column %d): Invalid expanded value", scnr.Line(), scnr.Column()); - return false; - } - expanded = strcmp(expand.String(), "expanded") == 0; - } - - if (Exists(family.String(), style.String())) { - BFont font; - font.SetFamilyAndStyle(family.String(), style.String()); - font.SetSize(size); - - AddDefinition((int)level, &font, expanded); - } else { - REPORT(kWarning, 0, "Bookmarks (line %d, column %d): Font %s-%s not available!", scnr.Line(), scnr.Column(), family.String(), style.String()); - } - - scnr.SkipSpaces(); - } - return true; - } else { - REPORT(kError, 0, "Bookmarks: Could not open bookmarks file '%d'", name); - } - return false; -} diff --git a/src/add-ons/print/drivers/pdf/source/Bookmark.h b/src/add-ons/print/drivers/pdf/source/Bookmark.h deleted file mode 100644 index 7fd498bba8..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Bookmark.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef _BOOKMARK_H -#define _BOOKMARK_H - -#include -#include -#include - -class PDFWriter; - -const int kMaxBookmarkLevels = 10; - -class Bookmark { - class Definition { - public: - int fLevel; - BFont fFont; - bool fExpanded; - - Definition(int level, BFont* font, bool expanded); - bool Matches(font_family* family, font_style* style, float size) const; - }; - - class Outline { - public: - BPoint fStart; - float fHeight; - BString fText; - Definition *fDefinition; - - Outline(BPoint start, float height, const char* text, Definition* definition) : fStart(start), fHeight(height), fText(text), fDefinition(definition) { } - - int Level() const { return fDefinition->fLevel; } - bool Expanded() const { return fDefinition->fExpanded; } - const char* Text() const { return fText.String(); } - BPoint Start() const { return fStart; } - float Height() const { return fHeight; } - }; - - PDFWriter* fWriter; - TList fDefinitions; - TList fOutlines; // of the current page - - int fLevels[kMaxBookmarkLevels+1]; - - bool Exists(const char* family, const char* style) const; - Definition* Find(BFont* font) const; - - static int AscendingByStart(const Outline** a, const Outline** b); - -public: - - Bookmark(PDFWriter* writer); - - // level starts with 1 - void AddDefinition(int level, BFont* font, bool expanded); - void AddBookmark(BPoint start, float height, const char* text, BFont* font); - bool Read(const char* name); // adds definitions from file - void CreateBookmarks(); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Cache.cpp b/src/add-ons/print/drivers/pdf/source/Cache.cpp deleted file mode 100644 index 34cd3b740f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Cache.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - -"Special" Cache. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "Report.h" -#include "Cache.h" -#include - -class CIReference : public CacheItem { -public: - CIReference(CacheItem* item) : fItem(item) { - ASSERT(dynamic_cast(item) == NULL); - } - - bool Equals(CIDescription* desc) const { - return fItem->Equals(desc); - } - - CacheItem* Reference() { - return fItem; - } - -private: - CacheItem* fItem; -}; - -Cache::Cache() - : fPass(0) - , fNextID(0) -{}; - -void Cache::NextPass() { - fPass++; - fNextID = 0; - // max two passes! - ASSERT(fPass == 1); -} - -CacheItem* Cache::Find(CIDescription* desc) { - REPORT(kDebug, -1, "Cache::Find() pass = %d next id = %d", fPass, fNextID); - int id = fNextID ++; - const int32 n = CountItems(); - CacheItem* item = ItemAt(id); - - // In 2. pass for each item an entry must exists - ASSERT(fPass != 1 || item != NULL); - if (fPass == 1) return item->Reference(); - - // In 1. pass we create an entry for each bitmap - for (int32 i = 0; i < n; i ++) { - item = ItemAt(i); - // skip references - if (item != item->Reference()) continue; - if (item->Equals(desc)) { - // found item in cache, create a reference to it - CacheItem* ref = new CIReference(item->Reference()); - if (ref == NULL) return NULL; - fCache.AddItem(ref); - return item; - } - } - // item not in cache, create one - item = desc->NewItem(id); - if (item != NULL) { - ASSERT(dynamic_cast(item) == NULL); - fCache.AddItem(item); - } - return item; -} diff --git a/src/add-ons/print/drivers/pdf/source/Cache.h b/src/add-ons/print/drivers/pdf/source/Cache.h deleted file mode 100644 index 28c6660bca..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Cache.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - -"Special" Cache. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _CACHE_H -#define _CACHE_H - -#include "PrintUtils.h" - -class CacheItem; - -// CacheItemDescription -class CIDescription { -public: - CIDescription() {}; - virtual ~CIDescription() {}; - - virtual CacheItem* NewItem(int id) { return NULL; } -}; - -class CacheItem { -public: - CacheItem() {} - virtual ~CacheItem() {} - - virtual bool Equals(CIDescription* desc) const = 0; - virtual CacheItem* Reference() { return this; } -}; - -class Cache { -public: - Cache(); - virtual ~Cache() {}; - - void NextPass(); - - // returns the CacheItem at "NextID", returns NULL on error - CacheItem* Find(CIDescription* desc); - void MakeEmpty() { fCache.MakeEmpty(); } - int32 CountItems() const { return fCache.CountItems(); } - CacheItem* ItemAt(int32 i) const { return fCache.ItemAt(i); } - -private: - int8 fPass; - int32 fNextID; - TList fCache; -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/DocInfoWindow.cpp b/src/add-ons/print/drivers/pdf/source/DocInfoWindow.cpp deleted file mode 100644 index 91082610e0..0000000000 --- a/src/add-ons/print/drivers/pdf/source/DocInfoWindow.cpp +++ /dev/null @@ -1,551 +0,0 @@ -/* - -DocInfoWindow.cpp - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "DocInfoWindow.h" -#include "PrintUtils.h" - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include - - -// #pragma mark -- DocInfoWindow - - -DocInfoWindow::DocInfoWindow(BMessage *docInfo) - : HWindow(BRect(0, 0, 400, 250), "Document information", B_TITLED_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, B_NOT_MINIMIZABLE | B_CLOSE_ON_ESCAPE), - fDocInfo(docInfo) -{ - BRect bounds(Bounds()); - BView *background = new BView(bounds, "bachground", B_FOLLOW_ALL, B_WILL_DRAW); - background->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); - AddChild(background); - - bounds.InsetBy(10.0, 10.0); - BButton *button = new BButton(bounds, "ok", "OK", new BMessage(OK_MSG), - B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM); - background->AddChild(button); - button->ResizeToPreferred(); - button->MoveTo(bounds.right - button->Bounds().Width(), - bounds.bottom - button->Bounds().Height()); - - BRect buttonFrame(button->Frame()); - button = new BButton(buttonFrame, "cancel", "Cancel", new BMessage(CANCEL_MSG), - B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM); - background->AddChild(button); - button->ResizeToPreferred(); - button->MoveTo(buttonFrame.left - (button->Bounds().Width() + 10.0), - buttonFrame.top); - - bounds.bottom = buttonFrame.top - 10.0; - -#if HAVE_FULLVERSION_PDF_LIB - BString permissions; - if (_DocInfo()->FindString("permissions", &permissions) == B_OK) - fPermissions.Decode(permissions.String()); - - BTabView *tabView = new BTabView(bounds, "tabView"); - _SetupDocInfoView(_CreateTabPanel(tabView, "Information")); - _SetupPasswordView(_CreateTabPanel(tabView, "Password")); - _SetupPermissionsView(_CreateTabPanel(tabView, "Permissions")); - - background->AddChild(tabView); -#else - BBox* panel = new BBox(bounds, "top_panel", B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP, B_NO_BORDER); - - _SetupDocInfoView(panel); - background->AddChild(panel); -#endif - - if (fTable->ChildAt(0)) - fTable->ChildAt(0)->MakeFocus(); - - BRect winFrame(Frame()); - BRect screenFrame(BScreen().Frame()); - MoveTo((screenFrame.right - winFrame.right) / 2, - (screenFrame.bottom - winFrame.bottom) / 2); - - SetSizeLimits(400.0, 10000.0, 250.0, 10000.0); -} - - -void -DocInfoWindow::Quit() -{ - _EmptyKeyList(); - inherited::Quit(); -} - - -bool -DocInfoWindow::QuitRequested() -{ - return true; -} - - -void -DocInfoWindow::MessageReceived(BMessage *msg) -{ - switch (msg->what) { - case OK_MSG: { - BMessage doc_info; - _ReadFieldsFromTable(doc_info); - _DocInfo()->RemoveName("doc_info"); - _DocInfo()->AddMessage("doc_info", &doc_info); -#if HAVE_FULLVERSION_PDF_LIB - _ReadPasswords(); - _ReadPermissions(); -#endif - Quit(); - } break; - - case CANCEL_MSG: { - Quit(); - } break; - - case ADD_KEY_MSG: { - case DEFAULT_KEY_MSG: - _AddKey(msg, msg->what == ADD_KEY_MSG); - } break; - - case REMOVE_KEY_MSG: { - _RemoveKey(msg); - } break; - - default: { - inherited::MessageReceived(msg); - } break; - } -} - - -void -DocInfoWindow::FrameResized(float newWidth, float newHeight) -{ - BTextControl *textControl = dynamic_cast (fTable->ChildAt(0)); - if (textControl) { - float width, height; - textControl->GetPreferredSize(&width, &height); - - int32 count = fKeyList->CountItems(); - float fieldsHeight = (height * count) + (2 * count); - - _AdjustScrollBar(height, fieldsHeight); - - while (textControl) { - textControl->SetDivider(textControl->Bounds().Width() / 2.0); - textControl = dynamic_cast (textControl->NextSibling()); - } - } -} - - -void -DocInfoWindow::_SetupDocInfoView(BBox* panel) -{ - BRect bounds(panel->Bounds()); -#if HAVE_FULLVERSION_PDF_LIB - bounds.InsetBy(10.0, 10.0); -#endif - - // add list of keys - fKeyList = new BMenu("Delete key"); - BMenuField *menu = new BMenuField(bounds, "delete", "", fKeyList, - B_FOLLOW_BOTTOM); - panel->AddChild(menu); - menu->SetDivider(0); - -#ifdef __HAIKU__ - menu->ResizeToPreferred(); - menu->MoveTo(bounds.left, bounds.bottom - menu->Bounds().Height()); -#else - menu->ResizeTo(menu->StringWidth("Delete key") + 15.0, 25.0); - menu->MoveTo(bounds.left, bounds.bottom - 25.0); -#endif - - const char* title[6] = { "Title", "Author", "Subject", "Keywords", "Creator", - NULL }; // PDFlib sets these: "Producer", "CreationDate", not "ModDate" - BMenu* defaultKeys = new BMenu("Default keys"); - for (int32 i = 0; title[i] != NULL; ++i) - defaultKeys->AddItem(new BMenuItem(title[i], new BMessage(DEFAULT_KEY_MSG))); - - BRect frame(menu->Frame()); - menu = new BMenuField(frame, "add", "", defaultKeys, B_FOLLOW_BOTTOM); - panel->AddChild(menu); - menu->SetDivider(0); - -#ifdef __HAIKU__ - menu->ResizeToPreferred(); - menu->MoveBy(frame.Width() + 10.0, 0.0); -#else - menu->ResizeTo(menu->StringWidth("Default keys") + 15.0, 25.0); - menu->MoveBy(menu->Bounds().Width() + 10.0, 0.0); -#endif - - frame = menu->Frame(); - frame.left = frame.right + 10.0; - frame.right = bounds.right; - BTextControl *add = new BTextControl(frame, "add", "Add key:", "", - new BMessage(ADD_KEY_MSG), B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM); - panel->AddChild(add); - - float width, height; - add->GetPreferredSize(&width, &height); - add->ResizeTo(bounds.right - frame.left, height); - add->SetDivider(be_plain_font->StringWidth("Add key: ")); - - bounds.bottom = frame.top - 10.0; - bounds.right -= B_V_SCROLL_BAR_WIDTH; - bounds.InsetBy(2.0, 2.0); - fTable = new BView(bounds, "table", B_FOLLOW_ALL, B_WILL_DRAW); - fTable->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); - - fTableScrollView = new BScrollView("scroll_table", fTable, B_FOLLOW_ALL, 0, - false, true); - panel->AddChild(fTableScrollView); - - BMessage docInfo; - fDocInfo->FindMessage("doc_info", &docInfo); - - // fill table - _BuildTable(docInfo); -} - - -void -DocInfoWindow::_BuildTable(const BMessage& docInfo) -{ - _EmptyKeyList(); - - while (fTable->ChildAt(0)) { - BView *child = fTable->ChildAt(0); - fTable->RemoveChild(child); - delete child; - } - - fTable->ScrollTo(0, 0); - -#ifdef B_BEOS_VERSION_DANO - const -#endif - char *name; - uint32 type; - int32 count; - - float rowHeight = 20.0; - float fieldsHeight = 2.0; - float width = fTable->Bounds().Width() - 4.0; - for (int32 i = 0; docInfo.GetInfo(B_STRING_TYPE, i, &name, &type, &count) - == B_OK; i++) { - if (type != B_STRING_TYPE) - continue; - - BString value; - BTextControl* textControl; - if (docInfo.FindString(name, &value) == B_OK) { - BRect rect(2.0, fieldsHeight, width, rowHeight); - textControl = _AddFieldToTable(rect, name, value.String()); - - rowHeight = textControl->Bounds().Height(); - fieldsHeight += rowHeight + 2.0; - } - } - - _AdjustScrollBar(rowHeight, fieldsHeight); -} - - -BTextControl* -DocInfoWindow::_AddFieldToTable(BRect rect, const char* name, const char* value) -{ - BTextControl *textControl = new BTextControl(rect, name, name, value, NULL, - B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW | B_NAVIGABLE); - fTable->AddChild(textControl); - float width, height; - textControl->GetPreferredSize(&width, &height); - - textControl->ResizeTo(rect.Width(), height); - textControl->SetDivider(rect.Width() / 2.0); - - fKeyList->AddItem(new BMenuItem(name, new BMessage(REMOVE_KEY_MSG))); - - return textControl; -} - - -void -DocInfoWindow::_AdjustScrollBar(float controlHeight, float fieldsHeight) -{ - BScrollBar *sb = fTableScrollView->ScrollBar(B_VERTICAL); - if (!sb) - return; - - sb->SetRange(0.0, 0.0); - float tableHeight = fTable->Bounds().Height(); - if ((fieldsHeight - tableHeight) > 0.0) { - sb->SetProportion(tableHeight / fieldsHeight); - sb->SetRange(0.0, fieldsHeight - tableHeight); - sb->SetSteps(controlHeight + 2.0, tableHeight); - } -} - - -void -DocInfoWindow::_ReadFieldsFromTable(BMessage& docInfo) -{ - docInfo.MakeEmpty(); - - BView* child; - for (int32 i = 0; (child = fTable->ChildAt(i)) != NULL; i++) { - BTextControl* textControl = dynamic_cast(child); - if (textControl) - docInfo.AddString(textControl->Label(), textControl->Text()); - } -} - - -void -DocInfoWindow::_RemoveKey(BMessage *msg) -{ - void *p; - if (msg->FindPointer("source", &p) != B_OK) - return; - - BMenuItem *item = reinterpret_cast(p); - if (!item) - return; - - BMessage docInfo; - _ReadFieldsFromTable(docInfo); - - const char *label = item->Label(); - if (docInfo.HasString(label)) { - docInfo.RemoveName(label); - _BuildTable(docInfo); - } -} - - -bool -DocInfoWindow::_IsKeyValid(const char* key) const -{ - if (*key == 0) - return false; - - while (*key) { - if (isspace(*key) || iscntrl(*key)) - break; - key++; - } - return *key == 0; -} - - -void -DocInfoWindow::_AddKey(BMessage *msg, bool textControl) -{ - void *p; - if (msg->FindPointer("source", &p) != B_OK || p == NULL) - return; - - const char* key = NULL; - if (textControl) { - BTextControl *text = reinterpret_cast(p); - key = text->Text(); - } else { - BMenuItem *item = reinterpret_cast(p); - key = item->Label(); - } - - if (!_IsKeyValid(key)) - return; - - BMessage docInfo; - _ReadFieldsFromTable(docInfo); - - if (!docInfo.HasString(key)) { - // key is valid and is not in list already - docInfo.AddString(key, ""); - - float width = fTable->Bounds().Width() - 4.0; - BTextControl *textControl = - _AddFieldToTable(BRect(2.0, 0.0, width, 20.0), key, ""); - - float rowHeight = textControl->Bounds().Height(); - int32 count = fKeyList->CountItems(); - float fieldsHeight = (rowHeight * count) + (2 * count); - textControl->MoveTo(2.0, fieldsHeight - rowHeight); - - _AdjustScrollBar(rowHeight, fieldsHeight); - } -} - - -void -DocInfoWindow::_EmptyKeyList() -{ - while (fKeyList->CountItems() > 0L) - delete fKeyList->RemoveItem((int32)0); -} - - -#if HAVE_FULLVERSION_PDF_LIB - -void -DocInfoWindow::_SetupPasswordView(BBox* panel) -{ - BRect bounds(panel->Bounds().InsetByCopy(10.0, 10.0)); - - fMasterPassword = _AddPasswordControl(bounds, panel, "master_password", - "Master password:"); - bounds.OffsetBy(0, fMasterPassword->Bounds().Height()); - fUserPassword = _AddPasswordControl(bounds, panel, "user_password", - "User password:"); - - float divider = max_c(panel->StringWidth("Master password:"), - panel->StringWidth("User password:")); - fMasterPassword->SetDivider(divider); - fUserPassword->SetDivider(divider); -} - - -void -DocInfoWindow::_SetupPermissionsView(BBox* panel) -{ - (void)panel; -} - - -BBox* -DocInfoWindow::_CreateTabPanel(BTabView* tabView, const char* label) -{ - BRect rect(tabView->Bounds().InsetByCopy(3.0, 15.0)); - rect.OffsetTo(B_ORIGIN); - BBox* panel = new BBox(rect, "top_panel", B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP, B_NO_BORDER); - - BTab* tab = new BTab(); - tabView->AddTab(panel, tab); - tab->SetLabel(label); - - return panel; -} - - -BTextControl* -DocInfoWindow::_AddPasswordControl(BRect r, BView* panel, const char* name, - const char* label) -{ - BString text; - _DocInfo()->FindString(name, &text); - BTextControl* textControl = new BTextControl(r, name, label, "", NULL, - B_FOLLOW_LEFT_RIGHT); - panel->AddChild(textControl); - textControl->ResizeToPreferred(); - textControl->TextView()->HideTyping(true); - textControl->TextView()->SetText(text.String()); - - return textControl; -} - - -void -DocInfoWindow::_ReadPasswords() -{ - SetString(_DocInfo(), "master_password", fMasterPassword->TextView()->Text()); - SetString(_DocInfo(), "user_password", fUserPassword->TextView()->Text()); -} - - -void -DocInfoWindow::_ReadPermissions() -{ - BString permissions; - fPermissions.Encode(permissions); - - SetString(_DocInfo(), "permissions", permissions.String()); -} - - -// #pragma mark -- Permissions - - -// pdflib 5.x supports password protection and permissions in the commercial version only! -static const PermissionLabels gPermissionLabels[] = { - PermissionLabels("Prevent printing the file.", "noprint"), - PermissionLabels("Prevent making any changes.", "nomodify"), - PermissionLabels("Prevent copying or extracting text or graphics.", "nocopy"), - PermissionLabels("Prevent adding or changing comments or form fields.", "noannots"), - PermissionLabels("Prevent form field filling.", "noforms"), - PermissionLabels("Prevent extracting text of graphics.", "noaccessible"), - PermissionLabels("Prevent inserting, deleting, or rotating pages and creating " - "bookmarks and thumbnails, even if nomodify hasn't been specified", "noassemble"), - PermissionLabels("Prevent high-resolution printing.", "nohiresprint") -}; - -Permissions::Permissions() -{ - fNofPermissions = sizeof(gPermissionLabels) / sizeof(PermissionLabels); - fPermissions = new Permission[fNofPermissions]; - for (int32 i = 0; i < fNofPermissions; i++) - fPermissions[i].SetLabels(&gPermissionLabels[i]); -} - - -void Permissions::Decode(const char* s) -{ - for (int32 i = 0; i < fNofPermissions; i++) - At(i)->SetAllowed((strstr(s, At(i)->GetPDFName()) == NULL)); -} - - -void Permissions::Encode(BString& permissions) -{ - permissions.Truncate(0); - for (int32 i = 0; i < fNofPermissions; i++) { - if (!At(i)->IsAllowed()) - permissions.Append(At(i)->GetPDFName()).Append(" "); - } -} - -#endif // HAVE_FULLVERSION_PDF_LIB diff --git a/src/add-ons/print/drivers/pdf/source/DocInfoWindow.h b/src/add-ons/print/drivers/pdf/source/DocInfoWindow.h deleted file mode 100644 index f6d7454ebb..0000000000 --- a/src/add-ons/print/drivers/pdf/source/DocInfoWindow.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ -#ifndef DOCINFOWINDOW_H -#define DOCINFOWINDOW_H - - -#include "BlockingWindow.h" - - -#include - - -class BBox; -class BMenu; -class BScrollView; -class BTabView; -class BTextControl; -class BView; - - -#define HAVE_FULLVERSION_PDF_LIB 0 - - -#if HAVE_FULLVERSION_PDF_LIB - -class PermissionLabels { -public: - PermissionLabels(const char* name, const char* pdfName) - : fName(name), fPDFName(pdfName) { } - - const char* GetName() const { return fName; } - const char* GetPDFName() const { return fName; } - -private: - const char* fName; - const char* fPDFName; -}; - - -class Permission { -public: - Permission() - : fLabels(NULL), fAllowed(true) { } - - const char* GetName() const { return fLabels->GetName(); } - const char* GetPDFName() const { return fLabels->GetPDFName(); } - bool IsAllowed() const { return fAllowed; } - - void SetLabels(const PermissionLabels* labels) { fLabels = labels; } - void SetAllowed(bool allowed) { fAllowed = allowed; } - -private: - const PermissionLabels* fLabels; - bool fAllowed; -}; - -class Permissions { -public: - Permissions(); - - // accessors - Permission* At(int32 i) { return &fPermissions[i]; } - int32 Length() const { return fNofPermissions; } - - // decode/encode pdflib permission string - void Decode(const char* s); - void Encode(BString& permissions); - -private: - Permission* fPermissions; - int32 fNofPermissions; -}; - -#endif // HAVE_FULLVERSION_PDF_LIB - - -class DocInfoWindow : public HWindow -{ - typedef HWindow inherited; -public: - DocInfoWindow(BMessage *doc_info); - - virtual void Quit(); - virtual bool QuitRequested(); - virtual void MessageReceived(BMessage *message); - virtual void FrameResized(float newWidth, float newHeight); - - enum { - OK_MSG = 'ok__', - CANCEL_MSG = 'cncl', - ADD_KEY_MSG = 'add_', - REMOVE_KEY_MSG = 'rmov', - DEFAULT_KEY_MSG = 'dflt', - }; - -private: - BMessage* _DocInfo() { return fDocInfo; } - void _SetupDocInfoView(BBox* panel); - void _BuildTable(const BMessage& fromDocInfo); - void _AdjustScrollBar(float controlHeight, - float fieldsHeight); - BTextControl* _AddFieldToTable(BRect rect, const char* name, - const char* value); - void _ReadFieldsFromTable(BMessage& docInfo); - - void _RemoveKey(BMessage* msg); - bool _IsKeyValid(const char *key) const; - void _AddKey(BMessage* msg, bool textControl); - - void _EmptyKeyList(); - -#if HAVE_FULLVERSION_PDF_LIB - void _SetupPasswordView(BBox* panel); - void _SetupPermissionsView(BBox* panel); - BBox* _CreateTabPanel(BTabView* tabView, const char* label); - BTextControl* _AddPasswordControl(BRect r, BView* panel, - const char* name, const char* label); - - void _ReadPasswords(); - void _ReadPermissions(); -#endif // HAVE_FULLVERSION_PDF_LIB - -private: - BMessage* fDocInfo; // owned by parent window - BView* fTable; - BScrollView* fTableScrollView; - BMenu* fKeyList; - -#if HAVE_FULLVERSION_PDF_LIB - BTextControl* fMasterPassword; - BTextControl* fUserPassword; - Permissions fPermissions; -#endif // HAVE_FULLVERSION_PDF_LIB -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/DrawShape.cpp b/src/add-ons/print/drivers/pdf/source/DrawShape.cpp deleted file mode 100644 index cbec9a7211..0000000000 --- a/src/add-ons/print/drivers/pdf/source/DrawShape.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* - -DrawShape - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "DrawShape.h" -#include "Bezier.h" -#include "PDFLinePathBuilder.h" -#include "Log.h" -#include "Report.h" -#include "PDFWriter.h" - -#ifdef CODEWARRIOR - #pragma mark [BShape drawing support routines] -#endif - -// -------------------------------------------------- -DrawShape::DrawShape(PDFWriter *writer, bool stroke) - : fWriter(writer) - , fStroke(stroke) - , fDrawn(false) - , fCurrentPoint(0, 0) -{ -} - - -// -------------------------------------------------- -DrawShape::~DrawShape() -{ - Draw(); -} - - -// -------------------------------------------------- -// approximate length of bezier curve -float -DrawShape::BezierLength(BPoint *curve, int n) { - float len = 0.0; - if (n <= 0) return len; - BPoint start = curve[0]; - for (int i = 1; i < n; i++) { - BPoint end = curve[i]; - BPoint diff = start - end; - len += sqrt(diff.x * diff.x + diff.y * diff.y); - start = end; - } - return scale(len); -} - - -// -------------------------------------------------- -int -DrawShape::BezierPoints(BPoint *curve, int n) { - float len = BezierLength(curve, n); - if (len <= kMinBezierPoints) return kMinBezierPoints; - if (len > kMaxBezierPoints) return kMaxBezierPoints; - return (int)len; -} - - -// -------------------------------------------------- -void -DrawShape::CreateBezierPath(BPoint *curve) { - Bezier bezier(curve, 4); - const int n = BezierPoints(curve, 4)-1; - REPORT(kDebug, 0, "BezierPoints %d", n); - for (int i = 0; i <= n; i ++) { - fSubPath.AddPoint(bezier.PointAt(i / (float) n)); - } -} - - -// -------------------------------------------------- -void -DrawShape::EndSubPath() -{ - PDFLinePathBuilder builder(&fSubPath, fWriter); - builder.CreateLinePath(); -} - - -// -------------------------------------------------- -status_t -DrawShape::IterateBezierTo(int32 bezierCount, BPoint *control) -{ - REPORT(kDebug, 0, "BezierTo"); - for (int32 i = 0; i < bezierCount; i++, control += 3) { - REPORT(kDebug, 0," (%f %f) (%f %f) (%f %f)", tx(control[0].x), ty(control[0].y), tx(control[1].x), ty(control[1].y), tx(control[2].x), ty(control[2].y)); - if (TransformPath()) { - BPoint p[4] = { fCurrentPoint, control[0], control[1], control[2] }; - CreateBezierPath(p); - } else { - PDF_curveto(Pdf(), - tx(control[0].x), ty(control[0].y), - tx(control[1].x), ty(control[1].y), - tx(control[2].x), ty(control[2].y)); - } - fCurrentPoint = control[2]; - } - return B_OK; -} - - -// -------------------------------------------------- -status_t -DrawShape::IterateClose(void) -{ - REPORT(kDebug, 0, "IterateClose %s", IsDrawing() ? (fStroke ? "stroke" : "fill") : "clip"); - if (fDrawn) REPORT(kDebug, 0, ">>> IterateClose called multiple times!"); - if (TransformPath()) - fSubPath.Close(); - else - PDF_closepath(Pdf()); - Draw(); - return B_OK; -} - - -// -------------------------------------------------- -void -DrawShape::Draw() -{ - if (!fDrawn) { - fDrawn = true; - if (IsDrawing()) { - if (fStroke) - fWriter->StrokeOrClip(); // strokes always - else { - fWriter->FillOrClip(); // fills always - } - } else if (TransformPath()) { - EndSubPath(); - } else { - PDF_closepath(Pdf()); - } - } -} - - -// -------------------------------------------------- -status_t -DrawShape::IterateLineTo(int32 lineCount, BPoint *linePoints) -{ - REPORT(kDebug, 0, "IterateLineTo %d", (int)lineCount); - BPoint *p = linePoints; - for (int32 i = 0; i < lineCount; i++) { - REPORT(kDebug, 0, "(%f, %f) ", p->x, p->y); - - if (TransformPath()) { - fSubPath.AddPoint(*p); - } else { - PDF_lineto(Pdf(), tx(p->x), ty(p->y)); - } - fCurrentPoint = *p; - p++; - } - return B_OK; -} - - -// -------------------------------------------------- -status_t -DrawShape::IterateMoveTo(BPoint *point) -{ - REPORT(kDebug, 0, "IterateMoveTo "); - if (!TransformPath()) { - PDF_moveto(Pdf(), tx(point->x), ty(point->y)); - } else { - EndSubPath(); - fSubPath.MakeEmpty(); - fSubPath.AddPoint(*point); - } - REPORT(kDebug, 0, "(%f, %f)", point->x, point->y); - fCurrentPoint = *point; - return B_OK; -} - diff --git a/src/add-ons/print/drivers/pdf/source/DrawShape.h b/src/add-ons/print/drivers/pdf/source/DrawShape.h deleted file mode 100644 index 87cf28ce8f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/DrawShape.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - -DrawShape - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef DRAW_SHAPE_H -#define DRAW_SHAPE_H - -#include "PDFWriter.h" - -class DrawShape : public BShapeIterator -{ - PDFWriter *fWriter; - bool fStroke; - bool fDrawn; - BPoint fCurrentPoint; - SubPath fSubPath; - - inline FILE *Log() { return fWriter->fLog; } - inline PDF *Pdf() { return fWriter->fPdf; } - inline float tx(float x) { return fWriter->tx(x); } - inline float ty(float y) { return fWriter->ty(y); } - inline float scale(float f) { return fWriter->scale(f); } - - inline bool IsDrawing() const { return fWriter->IsDrawing(); } - inline bool IsClipping() const { return fWriter->IsClipping(); } - - inline bool IsStroking() const { return fStroke; } - inline bool IsFilling() const { return !fStroke; } - - inline float PenSize() const { return fWriter->PenSize(); } - inline bool TransformPath() const { return IsStroking() && IsClipping(); } - - enum { - kMinBezierPoints = 2, // must be greater or equal to 2 - kMaxBezierPoints = 30 - }; - - float BezierLength(BPoint *p, int n); - int BezierPoints(BPoint *p, int n); - void CreateBezierPath(BPoint *p); - void EndSubPath(); - -public: - DrawShape(PDFWriter *writer, bool stroke); - ~DrawShape(); - status_t IterateBezierTo(int32 bezierCount, BPoint *bezierPoints); - status_t IterateClose(void); - status_t IterateLineTo(int32 lineCount, BPoint *linePoints); - status_t IterateMoveTo(BPoint *point); - - void Draw(); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Driver.cpp b/src/add-ons/print/drivers/pdf/source/Driver.cpp deleted file mode 100644 index 8e60ba7c12..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Driver.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - - -#include -#include - -#include - -#include "Driver.h" -#include "PDFWriter.h" -#include "PrinterDriver.h" -#include "PrinterSettings.h" - - -static PrinterDriver *instanciate_driver(BNode *spoolDir); - -// ======== For testing only ================== - -BMessage* -take_job(BFile *spoolFile, BNode *spoolDir, BMessage *msg) -{ - PrinterDriver *driver = instanciate_driver(spoolDir); - status_t status = driver->PrintJob(spoolFile, spoolDir, msg); - delete driver; - - msg = new BMessage('okok'); - if (status != B_OK) - msg->what = 'baad'; - - return msg; -} - - -BMessage* -config_page(BNode *spoolDir, BMessage *msg) -{ - BMessage *pagesetupMsg = new BMessage(*msg); - PrinterSettings::Read(spoolDir, pagesetupMsg, PrinterSettings::kPageSettings); - - BString printerName; - spoolDir->ReadAttrString("Printer Name", &printerName); - - PrinterDriver *driver = instanciate_driver(spoolDir); - if (driver->PageSetup(pagesetupMsg, printerName.String()) == B_OK) { - pagesetupMsg->what = 'okok'; - PrinterSettings::Update(spoolDir, pagesetupMsg, - PrinterSettings::kPageSettings); - } else { - delete pagesetupMsg; - pagesetupMsg = NULL; - } - delete driver; - return pagesetupMsg; -} - - -BMessage* -config_job(BNode *spoolDir, BMessage *msg) -{ - BMessage *jobsetupMsg = new BMessage(*msg); - PrinterSettings::Read(spoolDir, jobsetupMsg, PrinterSettings::kJobSettings); - - BString printerName; - spoolDir->ReadAttrString("Printer Name", &printerName); - - PrinterDriver *driver = instanciate_driver(spoolDir); - if (driver->JobSetup(jobsetupMsg, printerName.String()) == B_OK) { - jobsetupMsg->what = 'okok'; - PrinterSettings::Update(spoolDir, jobsetupMsg, - PrinterSettings::kJobSettings); - } else { - delete jobsetupMsg; - jobsetupMsg = NULL; - } - delete driver; - return jobsetupMsg; -} - - -char* -add_printer(char *printerName) -{ - return printerName; -} - - -static PrinterDriver* -instanciate_driver(BNode *spoolDir) -{ - return new PDFWriter(); -} - - -/** - * default_settings - * - * @param BNode* printer spool directory - * @return BMessage* the settings - */ -BMessage* -default_settings(BNode* printer) -{ - BMessage *msg = new BMessage(); - PrinterSettings::Read(printer, msg, PrinterSettings::kPageSettings); - - return msg; -} diff --git a/src/add-ons/print/drivers/pdf/source/Driver.h b/src/add-ons/print/drivers/pdf/source/Driver.h deleted file mode 100644 index 0adda6eed5..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Driver.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include - -extern "C" -{ - BMessage * take_job(BFile * spool_file, BNode * spool_dir, BMessage * msg); - BMessage * config_page(BNode * spool_dir, BMessage * msg); - BMessage * config_job(BNode * spool_dir, BMessage * msg); - char * add_printer(char * printer_name); - BMessage * default_settings(BNode * printer); -} diff --git a/src/add-ons/print/drivers/pdf/source/Fonts.cpp b/src/add-ons/print/drivers/pdf/source/Fonts.cpp deleted file mode 100644 index cce4c518f5..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Fonts.cpp +++ /dev/null @@ -1,560 +0,0 @@ -/* - -Copyright (c) 2001, 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include -#include "Fonts.h" -#include "Report.h" - -// FontFile - -// --------------------------------------- -// Implementation of BArchivable interface -// --------------------------------------- - - -// -------------------------------------------------- -FontFile::FontFile(BMessage *archive) -{ - int8 type; - archive->FindString("name", &fName); - archive->FindString("path", &fPath); - archive->FindInt64 ("size", &fSize); - if (B_OK == archive->FindInt8 ("type", &type)) - fType = (font_type)type; - else - fType = unknown_type; - archive->FindBool ("embed", &fEmbed); - archive->FindString("subst", &fSubst); -} - -// -------------------------------------------------- -BArchivable *FontFile::Instantiate(BMessage *archive) -{ - if (!validate_instantiation(archive, "FontFile")) { - return NULL; - } - return new FontFile(archive); -} - - -// -------------------------------------------------- -status_t FontFile::Archive(BMessage *archive, bool deep) const -{ - archive->AddString("class", "FontFile"); - archive->AddString("name", fName); - archive->AddString("path", fPath); - archive->AddInt64 ("size", fSize); - archive->AddInt8 ("type", (int8)fType); - archive->AddBool ("embed", fEmbed); - archive->AddString("subst", fSubst); - return B_OK; -} - - -// Fonts - -#define fmin(x, y) ( (x < y) ? x : y); - -#define TRUETYPE_VERSION 0x00010000 -#define OPENTYPE_CFF_VERSION 'OTTO' - -#define TRUETTYPE_TABLE_NAME_TAG 'name' - -static uint16 ttf_get_uint16(FILE * ttf); -static uint32 ttf_get_uint32(FILE *ttf); -static status_t ttf_get_fontname(const char * path, char * fontname, size_t fn_size); -static status_t psf_get_fontname(const char * path, char * fontname, size_t fn_size); - - -// -------------------------------------------------- -Fonts::Fonts() -{ - SetDefaultCJKOrder(); -} - - -void -Fonts::SetDefaultCJKOrder() -{ - SetCJKOrder(0, japanese_encoding, true); - SetCJKOrder(1, chinese_gb1_encoding, true); - SetCJKOrder(2, chinese_cns1_encoding, true); - SetCJKOrder(3, korean_encoding, true); -} - -// -------------------------------------------------- -bool -Fonts::SetCJKOrder(int i, font_encoding enc, bool active) -{ - if (0 <= i && i < no_of_cjk_encodings) { - fCJKOrder[i].encoding = enc; - fCJKOrder[i].active = active; - return true; - } - return false; -} - - -// -------------------------------------------------- -bool -Fonts::GetCJKOrder(int i, font_encoding& enc, bool& active) const -{ - if (0 <= i && i < no_of_cjk_encodings) { - enc = fCJKOrder[i].encoding; - active = fCJKOrder[i].active; - return true; - } - return false; -} - - -// --------------------------------------- -// Implementation of BArchivable interface -// --------------------------------------- - - -// -------------------------------------------------- -Fonts::Fonts(BMessage *archive) -{ - BMessage m; - for (int i = 0; archive->FindMessage("fontfile", i, &m) == B_OK; i++) { - BArchivable* base = instantiate_object(&m); - if (base) { - FontFile* f = dynamic_cast(base); - if (f) fFontFiles.AddItem(f); - else delete f; - } - } - if (archive->FindMessage("cjk_order", &m) == B_OK) { - for (int i = 0; i < no_of_cjk_encodings; i++) { - bool active; int32 encoding; - if (m.FindInt32("encoding", i, &encoding) == B_OK && - m.FindBool("active", i, &active) == B_OK && - first_cjk_encoding <= encoding && - encoding < first_cjk_encoding + no_of_cjk_encodings) { - SetCJKOrder(i, (font_encoding)encoding, active); - } else { - SetDefaultCJKOrder(); return; - } - } - return; - } - SetDefaultCJKOrder(); -} - - -// -------------------------------------------------- -BArchivable *Fonts::Instantiate(BMessage *archive) -{ - if (!validate_instantiation(archive, "Fonts")) { - return NULL; - } - return new Fonts(archive); -} - - -// -------------------------------------------------- -status_t Fonts::Archive(BMessage *archive, bool deep) const -{ - archive->AddString("class", "Fonts"); - const int n = Length(); - for (int i = 0; i < n; i++) { - FontFile* f = At(i); - BMessage m; - if (f->Archive(&m) == B_OK) { - archive->AddMessage("fontfile", &m); - } - } - BMessage m; - font_encoding enc; - bool active; - for (int i = 0; GetCJKOrder(i, enc, active); i++) { - m.AddInt32("encoding", enc); - m.AddBool("active", active); - } - archive->AddMessage("cjk_order", &m); - return B_OK; -} - - -// -------------------------------------------------- -status_t -Fonts::CollectFonts() -{ - BPath path; - directory_which * which_dir; - directory_which lookup_dirs[] = { - B_SYSTEM_FONTS_DIRECTORY, - B_SYSTEM_NONPACKAGED_FONTS_DIRECTORY, - B_USER_FONTS_DIRECTORY, - B_USER_NONPACKAGED_FONTS_DIRECTORY, - (directory_which) -1 - }; - - which_dir = lookup_dirs; - while (*which_dir >= 0) { - if ( find_directory(*which_dir, &path) == B_OK ) - LookupFontFiles(path); - - which_dir++; - }; - - return B_OK; -} - - -// -------------------------------------------------- -status_t -Fonts::LookupFontFiles(BPath path) -{ - BDirectory dir(path.Path()); - BEntry entry; - - if (dir.InitCheck() != B_OK) - return B_ERROR; - - dir.Rewind(); - while (dir.GetNextEntry(&entry) >= 0) { - BPath name; - char fn[512]; - font_type ft = unknown_type; // to keep the compiler silent. - off_t size; - status_t status; - - entry.GetPath(&name); - if (entry.IsDirectory()) - // recursivly lookup in sub-directories... - LookupFontFiles(name); - - if (! entry.IsFile()) - continue; - - fn[0] = 0; - ft = unknown_type; - - // is it a truetype file? - status = ttf_get_fontname(name.Path(), fn, sizeof(fn)); - if (status == B_OK ) { - ft = true_type_type; - } else { - // okay, maybe it's a postscript type file? - status = psf_get_fontname(name.Path(), fn, sizeof(fn)); - if (status == B_OK) { - ft = type1_type; - } - } - - if (ft == unknown_type) - // not a font file... - continue; - - if (entry.GetSize(&size) != B_OK) - size = 1024*1024*1024; - - REPORT(kDebug, -1, "Installed font %s -> %s", fn, name.Path()); - fFontFiles.AddItem(new FontFile(fn, name.Path(), size, ft, size < 100*1024)); - } // while dir.GetNextEntry()... - - return B_OK; -} - -// -------------------------------------------------- -void -Fonts::SetTo(BMessage *archive) -{ - BArchivable *a = Instantiate(archive); - Fonts *f = a ? dynamic_cast(a) : NULL; - if (f) { - const int n = Length(); - const int m = f->Length(); - for (int i = 0; i < m; i ++) { - FontFile *font = f->At(i); - for (int j = 0; j < n; j ++) { - if (strcmp(font->Path(), At(j)->Path()) == 0) { - At(j)->SetEmbed(font->Embed()); - At(j)->SetSubst(font->Subst()); - break; - } - } - } - - font_encoding enc; - bool active; - for (int i = 0; f->GetCJKOrder(i, enc, active); i++) { - SetCJKOrder(i, enc, active); - } - delete f; - } -} - - -// -------------------------------------------------- -static uint16 ttf_get_uint16(FILE * ttf) -{ - uint16 v; - - if (fread(&v, 1, 2, ttf) != 2) - return 0; - - return B_BENDIAN_TO_HOST_INT16(v); -} - - -// -------------------------------------------------- -static uint32 ttf_get_uint32(FILE *ttf) -{ - uint32 buf; - - if (fread(&buf, 1, 4, ttf) != 4) - return 0; - - return B_BENDIAN_TO_HOST_INT32(buf); -} - - -// -------------------------------------------------- -static status_t ttf_get_fontname(const char * path, char * fontname, size_t fn_size) -{ - FILE * ttf; - status_t status; - uint16 nb_tables, nb_records; - uint16 i; - uint32 tag; - uint32 table_offset; - uint32 strings_offset; - char family_name[256]; - char face_name[256]; - int names_found; - - status = B_ERROR; - - ttf = fopen(path, "rb"); - if (! ttf) - return status; - - tag = ttf_get_uint32(ttf); /* version */ - switch(tag) { - case TRUETYPE_VERSION: - case OPENTYPE_CFF_VERSION: - break; - - default: - goto exit; - } - - /* set up table directory */ - nb_tables = ttf_get_uint16(ttf); - - fseek(ttf, 12, SEEK_SET); - - table_offset = 0; // quiet the compiler... - - for (i = 0; i < nb_tables; ++i) { - tag = ttf_get_uint32(ttf); - ttf_get_uint32(ttf); // checksum - table_offset = ttf_get_uint32(ttf); - - if (tag == TRUETTYPE_TABLE_NAME_TAG) - break; - } - - if (tag != TRUETTYPE_TABLE_NAME_TAG) - // Mandatory name table not found! - goto exit; - - // move to name table start - fseek(ttf, table_offset, SEEK_SET); - - ttf_get_uint16(ttf); // name table format (must be 0!) - nb_records = ttf_get_uint16(ttf); - strings_offset = table_offset + ttf_get_uint16(ttf); // string storage offset is from table offset - - // offs = ttf->dir[idx].offset + tp->offsetStrings; - - // printf(" pid eid lid nid len offset value\n"); - // 65536 65536 65536 65536 65536 65536 ...... - - family_name[0] = 0; - face_name[0] = 0; - names_found = 0; - - for (i = 0; i < nb_records; ++i) { - uint16 platform_id, encoding_id, name_id; - uint16 string_len, string_offset; - - platform_id = ttf_get_uint16(ttf); - encoding_id = ttf_get_uint16(ttf); - ttf_get_uint16(ttf); // language_id - name_id = ttf_get_uint16(ttf); - string_len = ttf_get_uint16(ttf); - string_offset = ttf_get_uint16(ttf); - - if ( name_id != 1 && name_id != 2 ) - continue; - - // printf("%5d %5d %5d %5d %5d %5d ", - // platform_id, encoding_id, language_id, name_id, string_len, string_offset); - - if (string_len != 0) { - long pos; - char * buffer; - - pos = ftell(ttf); - fseek(ttf, strings_offset + string_offset, SEEK_SET); - - buffer = (char *) malloc(string_len + 16); - - fread(buffer, 1, string_len, ttf); - buffer[string_len] = '\0'; - - fseek(ttf, pos, SEEK_SET); - - if ( (platform_id == 3 && encoding_id == 1) || // Windows Unicode - (platform_id == 0) ) { // Unicode - // dirty unicode -> ascii conversion - int k; - - for (k=0; k < string_len/2; k++) - buffer[k] = buffer[2*k + 1]; - buffer[k] = '\0'; - } - - // printf("%s\n", buffer); - - if (name_id == 1) - strncpy(family_name, buffer, sizeof(family_name)); - else if (name_id == 2) - strncpy(face_name, buffer, sizeof(face_name)); - - names_found += name_id; - - free(buffer); - } - // else - // printf("\n"); - - if (names_found == 3) - break; - } - - if (names_found == 3) { -#ifndef __POWERPC__ - snprintf(fontname, fn_size, "%s-%s", family_name, face_name); -#else - sprintf(fontname, "%s-%s", family_name, face_name); -#endif - status = B_OK; - } - -exit: - fclose(ttf); - return status; -} - - -// -------------------------------------------------- -static status_t psf_get_fontname(const char * path, char * fontname, size_t fn_size) -{ - FILE * psf; - status_t status; - int i; - char line[1024]; - char * token; - char * name; - - // *.afm search for "FontName " line - // *.pfa search for "/FontName / def" line - - status = B_ERROR; - - psf = fopen(path, "r"); - if (! psf) - return status; - - name = NULL; - - i = 0; - while ( fgets(line, sizeof(line), psf) != NULL ) { - i++; - if ( i > 64 ) - // only check the first 64 lines of files... - break; - - token = strtok(line, " \r\n"); - if (! token) - continue; - - if (strcmp(token, "FontName") == 0) - name = strtok(NULL, " \r\n"); - else if (strcmp(token, "/FontName") == 0) { - name = strtok(NULL, " \r\n"); - if (name) - name++; // skip the '/' - } - - if (name) - break; - } - - if (name) { - strncpy(fontname, name, fn_size); - status = B_OK; - } - - fclose(psf); - return status; -} - -// Implementation of UserDefinedEncodings - -UserDefinedEncodings::UserDefinedEncodings() - : fCurrentEncoding(0) - , fCurrentIndex(0) -{ - memset(fUsedMask, 0, sizeof(fUsedMask)); - memset(fEncoding, 0, sizeof(fEncoding)); - memset(fIndex, 0, sizeof(fIndex)); -} - -bool UserDefinedEncodings::Get(uint16 unicode, uint8 &encoding, uint8 &index) { - bool missing = !IsUsed(unicode); - if (missing) { - SetUsed(unicode); - fEncoding[unicode] = fCurrentEncoding; fIndex[unicode] = fCurrentIndex; - if (fCurrentIndex == 255) { - fCurrentIndex = 0; fCurrentEncoding ++; - } else { - fCurrentIndex ++; - } - } - encoding = fEncoding[unicode]; index = fIndex[unicode]; - return missing; -} diff --git a/src/add-ons/print/drivers/pdf/source/Fonts.h b/src/add-ons/print/drivers/pdf/source/Fonts.h deleted file mode 100644 index a5cd04680d..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Fonts.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef FONTS_H -#define FONTS_H - -#include -#include -#include -#include "PrintUtils.h" - -enum font_encoding -{ - macroman_encoding, - // TrueType - tt_encoding0, - tt_encoding1, - tt_encoding2, - tt_encoding3, - tt_encoding4, - // Type 1 - t1_encoding0, - t1_encoding1, - t1_encoding2, - t1_encoding3, - t1_encoding4, - // CJK - japanese_encoding, - chinese_cns1_encoding, - chinese_gb1_encoding, - korean_encoding, - first_cjk_encoding = japanese_encoding, - no_of_cjk_encodings = korean_encoding - first_cjk_encoding + 1, - invalid_encoding = korean_encoding + 1, - user_defined_encoding_start -}; - - -enum font_type -{ - true_type_type, - type1_type, - unknown_type -}; - - -class FontFile : public BArchivable -{ -private: - BString fName; - BString fPath; - int64 fSize; - font_type fType; - bool fEmbed; - BString fSubst; - -public: - FontFile() { } - FontFile(const char *n, const char *p, int64 s, font_type t, bool embed) : fName(n), fPath(p), fSize(s), fType(t), fEmbed(embed) { } - FontFile(BMessage *archive); - ~FontFile() {}; - - static BArchivable* Instantiate(BMessage *archive); - status_t Archive(BMessage *archive, bool deep = true) const; - - // accessors - const char* Name() const { return fName.String(); } - const char* Path() const { return fPath.String(); } - int64 Size() const { return fSize; } - font_type Type() const { return fType; } - bool Embed() const { return fEmbed; } - const char* Subst() const { return fSubst.String(); } - - // setters - void SetEmbed(bool embed) { fEmbed = embed; } - void SetSubst(const char* subst) { fSubst = subst; } -}; - - -class Fonts : public BArchivable { -private: - TList fFontFiles; - - struct { - font_encoding encoding; - bool active; - } fCJKOrder[no_of_cjk_encodings]; - - status_t LookupFontFiles(BPath path); - -public: - Fonts(); - Fonts(BMessage *archive); - - static BArchivable* Instantiate(BMessage *archive); - status_t Archive(BMessage *archive, bool deep = true) const; - - status_t CollectFonts(); - void SetTo(BMessage *archive); - - FontFile* At(int i) const { return fFontFiles.ItemAt(i); } - int32 Length() const { return fFontFiles.CountItems(); } - - void SetDefaultCJKOrder(); - bool SetCJKOrder(int i, font_encoding enc, bool active); - bool GetCJKOrder(int i, font_encoding& enc, bool& active) const; -}; - -class UsedFont { -private: - BString fFamily; - BString fStyle; - float fSize; - -public: - UsedFont(const char* family, const char* style, float size) : fFamily(family), fStyle(style), fSize(size) {} - - const char* GetFamily() const { return fFamily.String(); } - const char* GetStyle() const { return fStyle.String(); } - float GetSize() const { return fSize; } - - bool Equals(const char* family, const char* style, float size) const { return strcmp(GetFamily(), family) == 0 && strcmp(GetStyle(), style) == 0 && fSize == size; } -}; - - -class UserDefinedEncodings { -public: - UserDefinedEncodings(); - // returns true if new encoding and index pair - bool Get(uint16 unicode, uint8 &encoding, uint8 &index); - -private: - bool IsUsed(uint16 unicode) const { return (fUsedMask[unicode / 8] & (1 << (unicode % 8))) != 0; } - void SetUsed(uint16 unicode) { fUsedMask[unicode / 8] |= 1 << (unicode % 8); } - - uint8 fUsedMask[65536/8]; // exists an encoding and index for this code point? - uint8 fEncoding[65536]; // the encoding for each code point - uint8 fIndex[65536]; // the index for each code point - - uint8 fCurrentEncoding; - uint8 fCurrentIndex; -}; - -#endif // FONTS_H diff --git a/src/add-ons/print/drivers/pdf/source/FontsWindow.cpp b/src/add-ons/print/drivers/pdf/source/FontsWindow.cpp deleted file mode 100644 index 1e4c622487..0000000000 --- a/src/add-ons/print/drivers/pdf/source/FontsWindow.cpp +++ /dev/null @@ -1,505 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include -#include "BlockingWindow.h" -#include "FontsWindow.h" -#include "Fonts.h" - - -class CJKFontItem : public BStringItem -{ - font_encoding fEncoding; - bool fActive; - -public: - CJKFontItem(const char* label, font_encoding encoding, bool active = true); - void SetActive(bool active) { fActive = active; } - void DrawItem(BView* owner, BRect rect, bool drawEverything); - - bool Active() const { return fActive; } - font_encoding Encoding() const { return fEncoding; } -}; - -CJKFontItem::CJKFontItem(const char* label, font_encoding encoding, bool active) - : BStringItem(label) - , fEncoding(encoding) - , fActive(active) -{ -} - -void -CJKFontItem::DrawItem(BView* owner, BRect rect, bool drawEverything) -{ - BStringItem::DrawItem(owner, rect, drawEverything); - if (!fActive) { - owner->SetHighColor(0, 0, 0, 0); - float y = (rect.top + rect.bottom) / 2; - owner->StrokeLine(BPoint(rect.left, y), BPoint(rect.right, y)); - } -} - -static const char* FontName(font_encoding enc) { - switch(enc) { - case japanese_encoding: return "Japanese"; - case chinese_cns1_encoding: return "Traditional Chinese"; - case chinese_gb1_encoding: return "Simplified Chinese"; - case korean_encoding: return "Korean"; - default: return "invalid font encoding!"; - } -} - - -// #pragma mark -- of DragListView - - -DragListView::DragListView(BRect frame, const char *name, - list_view_type type, - uint32 resizingMode, uint32 flags) - : BListView(frame, name, type, resizingMode, flags) -{ -} - - -bool -DragListView::InitiateDrag(BPoint point, int32 index, bool wasSelected) -{ - BMessage m; - DragMessage(&m, ItemFrame(index), this); - return true; -} - - -/** - * Constuctor - * - * @param - * @return - */ -FontsWindow::FontsWindow(Fonts *fonts) - : HWindow(BRect(0,0,400,220), "Fonts", B_TITLED_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | - B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE) -{ - // ---- Ok, build a default page setup user interface - - AddShortcut('W',B_COMMAND_KEY,new BMessage(B_QUIT_REQUESTED)); - - fFonts = fonts; - - BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); - - // --- Embedding tab --- - - // add a *dialog* background - BView* embeddingPanel = new BView("Embedding", B_WILL_DRAW - | B_FRAME_EVENTS | B_NAVIGABLE_JUMP); - embeddingPanel->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); - - // add font list -#if USE_CLV - fList = new BColumnListView(BRect(), - "fonts_list", B_FOLLOW_ALL, B_WILL_DRAW | B_NAVIGABLE_JUMP); - embeddingPanel->AddChild(fList); -#else - fList = new BListView("fonts_list", B_MULTIPLE_SELECTION_LIST); - BScrollView* embeddingScrollView = new BScrollView("scroll_list", - fList, 0, false, true); - fList->SetSelectionMessage(new BMessage(SELECTION_MSG)); -#endif - FillFontList(); - - // add a "Embed" button, and make it default - fEmbedButton = new BButton("embed", "Embed", new BMessage(EMBED_MSG)); - fEmbedButton->SetEnabled(false); - fEmbedButton->MakeDefault(true); - - - // add a "Substitute" button - fSubstButton = new BButton("substitute", "Substitute", - new BMessage(SUBST_MSG)); - fSubstButton->SetEnabled(false); - embeddingScrollView->SetExplicitMinSize(BSize(200, 200)); - - BLayoutBuilder::Group<>(embeddingPanel, B_VERTICAL) - .SetInsets(B_USE_DEFAULT_SPACING) - .Add(embeddingScrollView) - .AddGroup(B_HORIZONTAL) - .AddGlue() - .Add(fEmbedButton) - .Add(fSubstButton); - - tabView->AddTab(embeddingPanel); - - // --- CJK tab --- - - // add a *dialog* background - BView* cjkPanel = new BView("CJK", B_WILL_DRAW | B_FRAME_EVENTS - | B_NAVIGABLE_JUMP); - cjkPanel->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); - - BListView* list = - new DragListView(BRect(), - "cjk", B_MULTIPLE_SELECTION_LIST); - BScrollView* cjkScrollView = new BScrollView("cjk_scroll_list", - list, 0, false, true); - - font_encoding enc; bool active; - for (int i = 0; fFonts->GetCJKOrder(i, enc, active); i++) { - list->AddItem(new CJKFontItem(FontName(enc), enc, active)); - } - list->SetSelectionMessage(new BMessage(CJK_SELECTION_MSG)); - fCJKList = list; - - // add a "Embed" button - fEnableButton = new BButton("enable", "Enable", new BMessage(ENABLE_MSG)); - fEnableButton->SetEnabled(false); - - // add a "Disable" button - fDisableButton = new BButton("disable", "Disable", - new BMessage(DISABLE_MSG)); - fDisableButton->SetEnabled(false); - - // add a "Down" button - fDownButton = new BButton("down", "Down", new BMessage(DOWN_MSG)); - fDownButton->SetEnabled(false); - - // add a "Up" button - fUpButton = new BButton("up", "Up", new BMessage(UP_MSG)); - fUpButton->SetEnabled(false); - - BLayoutBuilder::Group<>(cjkPanel, B_VERTICAL) - .SetInsets(B_USE_DEFAULT_SPACING) - .Add(cjkScrollView) - .AddGroup(B_HORIZONTAL) - .AddGlue() - .Add(fEnableButton) - .Add(fDisableButton) - .Add(fDownButton) - .Add(fUpButton); - - tabView->AddTab(cjkPanel); - - // add the tabView to the window - BLayoutBuilder::Group<>(this, B_VERTICAL) - .SetInsets(B_USE_DEFAULT_SPACING) - .Add(tabView); - - MoveTo(320,320); -} - - -// -------------------------------------------------- -FontsWindow::~FontsWindow() -{ -} - - -// -------------------------------------------------- -bool -FontsWindow::QuitRequested() -{ - return true; -} - - -// -------------------------------------------------- -void -FontsWindow::Quit() -{ - inherited::Quit(); -} - - -class ListIterator -{ - virtual bool DoItem(BListItem* item) = 0; -public: - static bool DoIt(BListItem* item, void* data); - virtual ~ListIterator() {} -}; - - -bool -ListIterator::DoIt(BListItem* item, void* data) -{ - if (item->IsSelected()) { - ListIterator* e = (ListIterator*)data; - return e->DoItem(item); - } - return false; -} - -class CountItems : public ListIterator -{ - BListView* fList; - Fonts* fFonts; - int fNumEmbed; - int fNumSubst; - - bool DoItem(BListItem* item); - -public: - CountItems(BListView* list, Fonts* fonts); - int GetNumEmbed() { return fNumEmbed; } - int GetNumSubst() { return fNumSubst; } -}; - -CountItems::CountItems(BListView* list, Fonts* fonts) - : fList(list) - , fFonts(fonts) - , fNumEmbed(0) - , fNumSubst(0) -{ } - -bool CountItems::DoItem(BListItem* item) -{ - int32 i = fList->IndexOf(item); - if (0 <= i && i < fFonts->Length()) { - if (fFonts->At(i)->Embed()) { - fNumEmbed ++; - } else { - fNumSubst ++; - } - } - return false; -} - -class EmbedFont : public ListIterator -{ - FontsWindow* fWindow; - BListView* fList; - Fonts* fFonts; - bool fEmbed; - - bool DoItem(BListItem* item); -public: - EmbedFont(FontsWindow* window, BListView* list, Fonts* fonts, bool embed); -}; - -EmbedFont::EmbedFont(FontsWindow* window, BListView* list, Fonts* fonts, bool embed) - : fWindow(window) - , fList(list) - , fFonts(fonts) - , fEmbed(embed) -{ -} - -bool -EmbedFont::DoItem(BListItem* item) -{ - int32 i = fList->IndexOf(item); - if (0 <= i && i < fFonts->Length()) { - fFonts->At(i)->SetEmbed(fEmbed); - fWindow->SetItemText((BStringItem*)item, fFonts->At(i)); - } - return false; -} - -// move selected item in list one position up or down -void -FontsWindow::MoveItemInList(BListView* list, bool up) -{ - int32 from = list->CurrentSelection(0); - if (from >= 0) { - int32 to; - if (up) { - if (from == 0) return; // at top of list - to = from - 1; - } else { - if (from == list->CountItems() -1) return; // at bottom of list - to = from + 1; - } - list->SwapItems(from, to); - - font_encoding enc; - bool active; - fFonts->GetCJKOrder(from, enc, active); - - font_encoding enc1; - bool active1; - fFonts->GetCJKOrder(to, enc1, active1); - fFonts->SetCJKOrder(to, enc, active); - fFonts->SetCJKOrder(from, enc1, active1); - } -} - - -void -FontsWindow::EnableItemInList(BListView* list, bool enable) -{ - int32 i = list->CurrentSelection(0); - if (i >= 0) { - BListItem* item0 = list->ItemAt(i); - CJKFontItem* item = dynamic_cast(item0); - if (item) { - item->SetActive(enable); - list->Invalidate(); - font_encoding enc; - bool active; - fFonts->GetCJKOrder(i, enc, active); - fFonts->SetCJKOrder(i, enc, enable); - } - } -} - -// -------------------------------------------------- -void -FontsWindow::MessageReceived(BMessage *msg) -{ - switch (msg->what){ - case OK_MSG: Quit(); - break; - - case CANCEL_MSG: Quit(); - break; - - case EMBED_MSG: - { - #if USE_CLV - #else - EmbedFont e(this, fList, fFonts, true); - fList->DoForEach(EmbedFont::DoIt, (void*)&e); - } - PostMessage(SELECTION_MSG); - fList->Invalidate(); - #endif - break; - - case SUBST_MSG: - { - #if USE_CLV - #else - EmbedFont e(this, fList, fFonts, false); - fList->DoForEach(EmbedFont::DoIt, (void*)&e); - } - PostMessage(SELECTION_MSG); - fList->Invalidate(); - #endif - break; - - case SELECTION_MSG: - { - CountItems count(fList, fFonts); - fList->DoForEach(CountItems::DoIt, (void*)&count); - fEmbedButton->SetEnabled(count.GetNumSubst() > 0); - fSubstButton->SetEnabled(count.GetNumEmbed() > 0); - } - break; - - case UP_MSG: - case DOWN_MSG: - MoveItemInList(fCJKList, msg->what == UP_MSG); - PostMessage(CJK_SELECTION_MSG); - break; - - case ENABLE_MSG: - case DISABLE_MSG: - EnableItemInList(fCJKList, msg->what == ENABLE_MSG); - PostMessage(CJK_SELECTION_MSG); - break; - - case CJK_SELECTION_MSG: - { - int32 i = fCJKList->CurrentSelection(0); - if (i >= 0) { - BListItem* item0 = fCJKList->ItemAt(i); - CJKFontItem* item = dynamic_cast(item0); - if (item) { - fUpButton->SetEnabled(i != 0); - fDownButton->SetEnabled(i != fCJKList->CountItems()-1); - fEnableButton->SetEnabled(!item->Active()); - fDisableButton->SetEnabled(item->Active()); - } - } - } - break; - - default: - inherited::MessageReceived(msg); - break; - } -} - -void -FontsWindow::SetItemText(BStringItem* i, FontFile* f) -{ - const int64 KB = 1024; - const int64 MB = KB * KB; - char buffer[40]; - BString s; - s << f->Name() << ": "; - if (f->Type() == true_type_type) s << "TrueType"; - else s << "Type 1"; - s << " ("; - if (f->Size() >= MB) { - sprintf(buffer, "%d MB", (int)(f->Size()/MB)); - } else if (f->Size() >= KB) { - sprintf(buffer, "%d KB", (int)(f->Size()/KB)); - } else { - sprintf(buffer, "%d B", (int)(f->Size())); - } - s << buffer; - s << ") "; - s << (f->Embed() ? "embed" : "substitute"); - i->SetText(s.String()); -} - -void -FontsWindow::FillFontList() -{ - const int n = fFonts->Length(); - for (int i = 0; i < n; i++) { -#if USE_CLV -#else - BStringItem* s; - FontFile* f = fFonts->At(i); - fList->AddItem(s = new BStringItem("")); - SetItemText(s, f); -#endif - } -} - -void -FontsWindow::EmptyFontList() -{ -#if USE_CLV -#else - const int n = fList->CountItems(); - for (int i = 0; i < n; i++) { - BListItem* item = fList->ItemAt(i); - delete item; - } - fList->MakeEmpty(); -#endif -} diff --git a/src/add-ons/print/drivers/pdf/source/FontsWindow.h b/src/add-ons/print/drivers/pdf/source/FontsWindow.h deleted file mode 100644 index a91544f8ba..0000000000 --- a/src/add-ons/print/drivers/pdf/source/FontsWindow.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef FONTSWINDOW_H -#define FONTSWINDOW_H - -#include -#include -#include -#include -#include -#include -#include -#include "PrintUtils.h" -#include "Fonts.h" - -#define USE_CLV 0 -#if USE_CLV -#include "ColumnListView.h" -#endif - - -class DragListView : public BListView -{ -public: - DragListView(BRect frame, const char *name, - list_view_type type = B_SINGLE_SELECTION_LIST, - uint32 resizingMode = B_FOLLOW_ALL, - uint32 flags = B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS); - bool InitiateDrag(BPoint point, int32 index, bool wasSelected); -}; - - -class FontsWindow : public HWindow -{ -public: - // Constructors, destructors, operators... - - FontsWindow(Fonts* fonts); - ~FontsWindow(); - - typedef HWindow inherited; - - // public constantes - enum { - OK_MSG = 'ok__', - CANCEL_MSG = 'cncl', - EMBED_MSG = 'mbed', - SUBST_MSG = 'subs', - SELECTION_MSG = 'sele', - CJK_SELECTION_MSG = 'cjks', - UP_MSG = 'up__', - DOWN_MSG = 'down', - ENABLE_MSG = 'enbl', - DISABLE_MSG = 'dsbl', - }; - - // Virtual function overrides -public: - virtual void MessageReceived(BMessage *msg); - virtual bool QuitRequested(); - void Quit(); - -private: - Fonts* fFonts; -#if USE_CLV - BColumnListView fList; -#else - BListView* fList; -#endif - BButton* fEmbedButton; - BButton* fSubstButton; - - BListView* fCJKList; - BButton* fUpButton; - BButton* fDownButton; - BButton* fEnableButton; - BButton* fDisableButton; - - - void FillFontList(); - void EmptyFontList(); - void SetItemText(BStringItem* i, FontFile* f); - void MoveItemInList(BListView* list, bool up); - void EnableItemInList(BListView* list, bool enable); - - friend class EmbedFont; -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Image.cpp b/src/add-ons/print/drivers/pdf/source/Image.cpp deleted file mode 100644 index fe1f1b56ea..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Image.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* - -Image Cache Item. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Report.h" -#include "Image.h" -#include "ImageCache.h" - -// Implementation of ImageDescription - -ImageDescription::ImageDescription(PDF* pdf, BBitmap* bitmap, int mask) - : fPDF(pdf) - , fBitmap(bitmap) - , fMask(mask) -{ - bitmap->Lock(); - fWidth = bitmap->Bounds().IntegerWidth()+1; - fHeight = bitmap->Bounds().IntegerHeight()+1; - fColorSpace = bitmap->ColorSpace(); - bitmap->Unlock(); -} - -CacheItem* ImageDescription::NewItem(int id) { - REPORT(kDebug, -1, "ImageDescription::NewItem %d", id); - Image* image = Store(fPDF, id, fBitmap, fMask); - if (image == NULL) { - REPORT(kDebug, -1, "Could not store image in cache!"); - } - return image; -} - -Image* ImageDescription::Store(PDF* pdf, int id, BBitmap* bitmap, int mask) { - BString fileName(kImagePathPrefix); - BString pdfFileName; - int w, h; - color_space cs; - - fileName << id; - pdfFileName = fileName; - pdfFileName << ".png"; - - bitmap->Lock(); - w = bitmap->Bounds().IntegerWidth()+1; - h = bitmap->Bounds().IntegerHeight()+1; - cs = bitmap->ColorSpace(); - bitmap->Unlock(); - -#if STORE_AS_BBITMAP - fileName << ".bitmap"; -#else - fileName << ".png"; -#endif - if (!StorePNG(pdfFileName.String(), bitmap)) { - REPORT(kError, -1, "Image cache could not store image as PNG file."); - return NULL; - } - - if (!StoreBitmap(fileName.String(), bitmap)) { - REPORT(kError, -1, "Image cache could not store image as flattend BBitmap."); - unlink(pdfFileName.String()); - return NULL; - } - - int image; - image = PDF_open_image_file(pdf, "png", pdfFileName.String(), - mask == -1 ? "" : "masked", mask == -1 ? 0 : mask); - -#if STORE_AS_BBITMAP - unlink(pdfFileName.String()); -#endif - - if (image < 0) { - REPORT(kError, -1, "Image cache could not embed image."); - return NULL; - } - - return new Image(pdf, image, fileName.String(), w, h, cs, mask); -} - -bool ImageDescription::StorePNG(const char* fileName, BBitmap* bitmap) { - bool ok = true; - BTranslatorRoster *roster = BTranslatorRoster::Default(); - BBitmapStream stream(bitmap); // init with contents of bitmap - BFile file(fileName, B_CREATE_FILE | B_WRITE_ONLY | B_ERASE_FILE); - ok = roster->Translate(&stream, NULL, NULL, &file, B_PNG_FORMAT) == B_OK; - BBitmap *bm = NULL; stream.DetachBitmap(&bm); // otherwise bitmap destructor crashes here! - ASSERT(bm == bitmap); - return ok; -} - -bool ImageDescription::StoreBitmap(const char* fileName, BBitmap* bitmap) { - bool ok = true; -#if STORE_AS_BBITMAP - BMessage msg; - BFile file(fileName, B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE); - ok = file.InitCheck() == B_OK && bitmap->Archive(&msg) == B_OK && msg.Flatten(&file) == B_OK; -#endif - return ok; -} - -// Implementation of Image - -Image::Image(PDF* pdf, int imageID, const char* fileName, int width, int height, color_space colorSpace, int mask) - : fPDF(pdf) - , fImageID(imageID) - , fFileName(fileName) - , fWidth(width) - , fHeight(height) - , fColorSpace(colorSpace) - , fMask(mask) -{ -} - -Image::~Image() { - PDF_close_image(fPDF, ImageID()); - unlink(FileName()); -} - -bool Image::Equals(CIDescription* description) const { - REPORT(kDebug, -1, "Image::Equals called."); - ImageDescription* desc = dynamic_cast(description); - ASSERT(desc != NULL); - if (desc->Width() != Width() || desc->Height() != Height() || - desc->ColorSpace() != ColorSpace() || - desc->Mask() != Mask()) return false; - return Equals(desc->Bitmap()); -} - -bool Image::Equals(BBitmap* bitmap) const { - REPORT(kDebug, -1, "Image::Equals called."); - bool equals = false; - BBitmap* bm = NULL; -#if STORE_AS_BBITMAP - BMessage msg; - BFile file(FileName(), B_READ_ONLY); - if (file.InitCheck() == B_OK && msg.Unflatten(&file) == B_OK) { - BArchivable* a = BBitmap::Instantiate(&msg); - bm = dynamic_cast(a); - if (bm == NULL && a != NULL) delete a; - } -#else - bm = BTranslationUtils::GetBitmapFile(FileName()); -#endif - if (bm) { - bm->Lock(); - bitmap->Lock(); - - equals = bm->BitsLength() == bitmap->BitsLength() && - bm->ColorSpace() == bitmap->ColorSpace() && - memcmp(bm->Bits(), bitmap->Bits(), bm->BitsLength()) == 0; - - bitmap->Unlock(); - bm->Unlock(); - delete bm; - } else { - REPORT(kError, -1, "Could not load image from cache!"); - } - return equals; -} diff --git a/src/add-ons/print/drivers/pdf/source/Image.h b/src/add-ons/print/drivers/pdf/source/Image.h deleted file mode 100644 index aa7a62d3c9..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Image.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - -Image Cache Item. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _IMAGE_CACHE_ITEM_H -#define _IMAGE_CACHE_ITEM_H - -#include "pdflib.h" -#include - -#include "pdflib.h" -#include "PrintUtils.h" -#include "Cache.h" - -class Image; - -class ImageDescription : public CIDescription { -public: - ImageDescription(PDF* pdf, BBitmap* bitmap, int mask); - - CacheItem* NewItem(int id); - - BBitmap* Bitmap() { return fBitmap; } - int Width() const { return fWidth; } - int Height() const { return fHeight; } - color_space ColorSpace() const { return fColorSpace; } - int Mask() const { return fMask; } - -private: - Image* Store(PDF* pdf, int id, BBitmap* bitmap, int mask); - bool StoreBitmap(const char* fileName, BBitmap* bitmap); - bool StorePNG(const char* fileName, BBitmap* bitmap); - - PDF* fPDF; - BBitmap* fBitmap; - int fWidth, fHeight; - color_space fColorSpace; - int fMask; -}; - -class Image : public CacheItem { -public: - Image(PDF* pdf, int imageID, const char* fileName, int width, int height, color_space colorSpace, int mask); - ~Image(); - - int ImageID() const { return fImageID; }; - const char* FileName() const { return fFileName.String(); }; - int Width() const { return fWidth; }; - int Height() const { return fHeight; }; - color_space ColorSpace() const { return fColorSpace; }; - int Mask() const { return fMask; }; - bool Equals(CIDescription* desc) const; - bool Equals(BBitmap* bitmap) const; - -private: - PDF* fPDF; - int fImageID; - BString fFileName; - int fWidth, fHeight; - color_space fColorSpace; - int fMask; -}; - - - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/ImageCache.cpp b/src/add-ons/print/drivers/pdf/source/ImageCache.cpp deleted file mode 100644 index 8fc236d6e2..0000000000 --- a/src/add-ons/print/drivers/pdf/source/ImageCache.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - -Image Cache. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include - -#include "Report.h" -#include "ImageCache.h" -#include "Image.h" -#include "Mask.h" - -const char* kTemporaryPath = "/tmp/PDFWriter"; -const char* kCachePath = NULL; -const char* kImagePathPrefix = NULL; -const char* kMaskPathPrefix = NULL; - -// Implementation of ImageCache - -ImageCache::ImageCache() -{ - BString path(kTemporaryPath); - path << "/Cache" << (int)find_thread(NULL); - kCachePath = strdup(path.String()); - BString path2(path); - path += "/Image"; - kImagePathPrefix = strdup(path.String()); - path2 += "/Mask"; - kMaskPathPrefix = strdup(path2.String()); - mkdir(kTemporaryPath, 0777); - mkdir(kCachePath, 0777); -} - -ImageCache::~ImageCache() { - rmdir(kCachePath); - free((void*)kCachePath); - free((void*)kImagePathPrefix); - free((void*)kMaskPathPrefix); -} - -void ImageCache::Flush() { - fImageCache.MakeEmpty(); - fMaskCache.MakeEmpty(); -} - -void ImageCache::NextPass() { - fImageCache.NextPass(); - fMaskCache.NextPass(); -} - -int ImageCache::GetImage(PDF* pdf, BBitmap* bitmap, int mask) { - ImageDescription desc(pdf, bitmap, mask); - CacheItem* item = fImageCache.Find(&desc); - Image* image = dynamic_cast(item); - if (image) { - return image->ImageID(); - } - REPORT(kError, -1, "Image cache could not find image. Please make sure to have enough disk space available."); - return -1; -} - -int ImageCache::GetMask(PDF* pdf, const char* mask, int length, int width, int height, int bpc) { - MaskDescription desc(pdf, mask, length, width, height, bpc); - CacheItem* item = fMaskCache.Find(&desc); - Mask* image = dynamic_cast(item); - if (image) { - return image->ImageID(); - } - REPORT(kError, -1, "Mask cache could not find image. Please make sure to have enough disk space available."); - return -1; -} - - diff --git a/src/add-ons/print/drivers/pdf/source/ImageCache.h b/src/add-ons/print/drivers/pdf/source/ImageCache.h deleted file mode 100644 index 4c5a7983f5..0000000000 --- a/src/add-ons/print/drivers/pdf/source/ImageCache.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - -Image Cache. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _IMAGE_CACHE_H -#define _IMAGE_CACHE_H - -#include -#include -#include - -#include "pdflib.h" -#include "PrintUtils.h" -#include "Cache.h" - -extern const char* kTemporaryPath; -extern const char* kCachePath; -extern const char* kImagePathPrefix; -extern const char* kMaskPathPrefix; - -#define STORE_AS_BBITMAP 1 - -class ImageCache { -public: - ImageCache(); - ~ImageCache(); - void Flush(); - - void NextPass(); - int GetImage(PDF* pdf, BBitmap* bitmap, int mask); - int GetMask(PDF* pdf, const char* mask, int length, int width, int height, int bpc); - -private: - Cache fImageCache; - Cache fMaskCache; -}; - -#endif - diff --git a/src/add-ons/print/drivers/pdf/source/Jamfile b/src/add-ons/print/drivers/pdf/source/Jamfile deleted file mode 100644 index 1478a1b598..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Jamfile +++ /dev/null @@ -1,52 +0,0 @@ -SubDir HAIKU_TOP src add-ons print drivers pdf source ; - -SetSubDirSupportedPlatformsBeOSCompatible ; - -UsePrivateHeaders print ; -SubDirHdrs [ FDirName $(HAIKU_TOP) headers libs print libprint ] ; -SubDirHdrs [ FDirName $(HAIKU_TOP) src libs pdflib libs pdflib ] ; - -AddResources PDF\ Writer : - PDFWriter.rdef -; - -Addon PDF\ Writer : - AboutText.cpp - AdvancedSettingsWindow.cpp - Bezier.cpp - Bookmark.cpp - Cache.cpp - DocInfoWindow.cpp - DrawShape.cpp - Driver.cpp - Fonts.cpp - FontsWindow.cpp - Image.cpp - ImageCache.cpp - JobSetupWindow.cpp - LinePathBuilder.cpp - Link.cpp - Mask.cpp - PDFLinePathBuilder.cpp - PDFText.cpp - PDFWriter.cpp - PageSetupWindow.cpp - PictureIterator.cpp - PrinterDriver.cpp - PrinterPrefs.cpp - PrinterSettings.cpp - RegExp.cpp - Report.cpp - Scanner.cpp - StatusWindow.cpp - SubPath.cpp - XReferences.cpp - : - be - textencoding - translation - libpdf.a - libprint.a - libprintutils.a - [ TargetLibsupc++ ] -; diff --git a/src/add-ons/print/drivers/pdf/source/JobSetupWindow.cpp b/src/add-ons/print/drivers/pdf/source/JobSetupWindow.cpp deleted file mode 100644 index af2176cd67..0000000000 --- a/src/add-ons/print/drivers/pdf/source/JobSetupWindow.cpp +++ /dev/null @@ -1,250 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001-2003 OpenBeOS. -Copyright (c) 2010 Haiku, Inc. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include -#include -#include -#include - -#include "PrintUtils.h" - -#include "PrinterDriver.h" -#include "JobSetupWindow.h" -#include "DocInfoWindow.h" - -static const char* includeKeys[] = { - "doc_info", -#if HAVE_FULLVERSION_PDF_LIB - "master_password", "user_password", "permissions", -#endif - NULL -}; - -// -------------------------------------------------- -JobSetupWindow::JobSetupWindow(BMessage *msg, const char * printerName) - : HWindow(BRect(0, 0, 100, 100), "Job setup", - B_TITLED_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, - B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | B_NOT_ZOOMABLE - | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE) -{ - fSetupMsg = msg; - fExitSem = create_sem(0, "JobSetup"); - fResult = B_ERROR; - - if (printerName) { - BString title; - title << printerName << " job setup"; - SetTitle(title.String()); - fPrinterName = printerName; - } - - // PrinterDriver ensures that property exists - int32 firstPage; - fSetupMsg->FindInt32("first_page", &firstPage); - int32 lastPage; - fSetupMsg->FindInt32("last_page", &lastPage); - - BMessage doc_info; - if (fSetupMsg->FindMessage("doc_info", &doc_info) != B_OK) { - // default fields - doc_info.AddString("Author", ""); - doc_info.AddString("Subject", ""); - doc_info.AddString("Keywords", ""); - fSetupMsg->AddMessage("doc_info", &doc_info); - } - AddFields(&fDocInfo, fSetupMsg, NULL, includeKeys); - - bool allPages = firstPage == 1 && lastPage == MAX_INT32; - - fAll = new BRadioButton("allPages", "Print all pages", - new BMessage(ALL_PAGES_MGS)); - fAll->SetValue(allPages); - - fRange = new BRadioButton("pagesRange", "Print pages:", - new BMessage(RANGE_SELECTION_MSG)); - fRange->SetValue(!allPages); - - fFrom = new BTextControl("from", "From:", "SomeSpaceHere", NULL); - fFrom->SetAlignment(B_ALIGN_LEFT, B_ALIGN_RIGHT); - fFrom->SetEnabled(!allPages); - - fTo = new BTextControl("to", "To:", "", NULL); - fTo->SetAlignment(B_ALIGN_LEFT, B_ALIGN_RIGHT); - fTo->SetEnabled(!allPages); - - BString buffer; - buffer << firstPage; - fFrom->SetText(buffer.String()); - - buffer = ""; - buffer << lastPage; - fTo->SetText(buffer.String()); - - for (uint32 i = 0; i < '0'; i++) { - fTo->TextView()->DisallowChar(i); - fFrom->TextView()->DisallowChar(i); - } - - for (uint32 i = '9' + 1; i < 255; i++) { - fTo->TextView()->DisallowChar(i); - fFrom->TextView()->DisallowChar(i); - } - - BButton* documentInfo = new BButton("documentInfo", - "Document" B_UTF8_ELLIPSIS, - new BMessage(DOC_INFO_MSG)); - - BButton* cancel = new BButton("cancel", "Cancel", new BMessage(CANCEL_MSG)); - - BButton* ok = new BButton("ok", "OK", new BMessage(OK_MSG)); - ok->MakeDefault(true); - - BLayoutBuilder::Group<>(this, B_VERTICAL, B_USE_SMALL_SPACING) - .SetInsets(B_USE_DEFAULT_SPACING) - .Add(fAll) - .Add(fRange) - .AddGrid(B_USE_SMALL_SPACING, B_USE_SMALL_SPACING) - .SetInsets(B_USE_SMALL_SPACING, 0, B_USE_SMALL_SPACING, 0) - .Add(fFrom->CreateLabelLayoutItem(), 0, 0) - .Add(fFrom->CreateTextViewLayoutItem(), 1, 0) - .Add(fTo->CreateLabelLayoutItem(), 0, 1) - .Add(fTo->CreateTextViewLayoutItem(), 1, 1) - .End() - .AddGlue() - .Add(new BSeparatorView(B_HORIZONTAL, B_FANCY_BORDER)) - .AddGroup(B_HORIZONTAL) - .Add(documentInfo) - .AddGlue() - .Add(cancel) - .Add(ok) - .End(); -} - - -// -------------------------------------------------- -void -JobSetupWindow::UpdateJobMessage() -{ - int32 copies = 1; - - int32 from; - int32 to; - if (fAll->Value() == B_CONTROL_ON) { - from = 1; to = MAX_INT32; - } else { - from = atoi(fFrom->Text()); - to = atoi(fTo->Text()); - if (from <= 0) from = 1; - if (to < from) to = from; - } - - fSetupMsg->ReplaceInt32("copies", copies); - fSetupMsg->ReplaceInt32("first_page", from); - fSetupMsg->ReplaceInt32("last_page", to); - AddFields(fSetupMsg, &fDocInfo); -} - - -// -------------------------------------------------- -JobSetupWindow::~JobSetupWindow() -{ - delete_sem(fExitSem); -} - - -// -------------------------------------------------- -bool -JobSetupWindow::QuitRequested() -{ - release_sem(fExitSem); - return true; -} - - -// -------------------------------------------------- -void -JobSetupWindow::MessageReceived(BMessage *msg) -{ - switch (msg->what) { - case OK_MSG: - UpdateJobMessage(); - fResult = B_OK; - release_sem(fExitSem); - break; - - case CANCEL_MSG: - release_sem(fExitSem); - break; - - case ALL_PAGES_MGS: - fTo->SetEnabled(false); - fFrom->SetEnabled(false); - break; - - case RANGE_SELECTION_MSG: - fTo->SetEnabled(true); - fFrom->SetEnabled(true); - break; - - case DOC_INFO_MSG: - (new DocInfoWindow(&fDocInfo))->Show(); - break; - - default: - inherited::MessageReceived(msg); - break; - } -} - - -// -------------------------------------------------- -status_t -JobSetupWindow::Go() -{ - MoveTo(300,300); - Show(); - - while (acquire_sem(fExitSem) == B_INTERRUPTED) { - } - - // Cache the value as after Quit() this object is deleted. - status_t result = fResult; - if (Lock()) - Quit(); - - return result; -} - - diff --git a/src/add-ons/print/drivers/pdf/source/JobSetupWindow.h b/src/add-ons/print/drivers/pdf/source/JobSetupWindow.h deleted file mode 100644 index 5895ff7836..0000000000 --- a/src/add-ons/print/drivers/pdf/source/JobSetupWindow.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef JOBSETUPWINDOW_H -#define JOBSETUPWINDOW_H - -#include -#include "BlockingWindow.h" -#include "PrintUtils.h" - -class JobSetupWindow : public HWindow -{ -public: - // Constructors, destructors, operators... - - JobSetupWindow(BMessage *msg, const char *printer_name = NULL); - ~JobSetupWindow(); - - typedef HWindow inherited; - - // public constantes - enum { - NB_COPIES_MSG = 'copy', - ALL_PAGES_MGS = 'all_', - RANGE_SELECTION_MSG = 'rnge', - RANGE_FROM_MSG = 'from', - RANGE_TO_MSG = 'to__', - OK_MSG = 'ok__', - CANCEL_MSG = 'cncl', - DOC_INFO_MSG = 'doci' - }; - - // Virtual function overrides -public: - virtual void MessageReceived(BMessage *msg); - virtual bool QuitRequested(); - status_t Go(); - - // From here, it's none of your business! ;-) -private: - BString fPrinterName; - long fExitSem; - status_t fResult; - BMessage *fSetupMsg; - BMessage fDocInfo; - BRadioButton *fAll; - BRadioButton *fRange; - BTextControl *fFrom; - BTextControl *fTo; - - void UpdateJobMessage(); -}; - -#endif - diff --git a/src/add-ons/print/drivers/pdf/source/LinePathBuilder.cpp b/src/add-ons/print/drivers/pdf/source/LinePathBuilder.cpp deleted file mode 100644 index fe9023879e..0000000000 --- a/src/add-ons/print/drivers/pdf/source/LinePathBuilder.cpp +++ /dev/null @@ -1,341 +0,0 @@ -/* - -LinePathBuilder - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include "LinePathBuilder.h" - -#include - -static const float kNearZero = 0.000000000001; -static const float kMinPenSize = 0.0001; - -LinePathBuilder::LinePathBuilder(SubPath *subPath, float penSize, cap_mode capMode, join_mode joinMode, float miterLimit) - : fSubPath(subPath) - , fPenSize(penSize) - , fCapMode(capMode) - , fJoinMode(joinMode) - , fMiterLimit(miterLimit) - , fFirst(true) -{ -} - - -// vector of length w/2 in direction of line [a, b] -bool -LinePathBuilder::Vector(BPoint a, BPoint b, float w, BPoint &v) -{ - v = b - a; - float l = 2.0 * sqrt(v.x * v.x + v.y * v.y); - if (fabs(l) <= kNearZero) return false; - w /= l; - v.x *= w; - v.y *= w; - return true; -} - - -// calculate line [pa, pb] parallel to line [a, b] in distance of w/2 -bool -LinePathBuilder::Parallel(BPoint a, BPoint b, float w, BPoint &pa, BPoint &pb) -{ - BPoint d; - if (!Vector(a, b, w, d)) return false; - BPoint r(-d.y, d.x); - - pa = a - r; - pb = b - r; - return true; -} - - -// calculate intercept point e of lines [a, b] and [c, d] -bool -LinePathBuilder::Cut(BPoint a, BPoint b, BPoint c, BPoint d, BPoint &e) -{ - BPoint r = b - a; - BPoint s = d - c; - BPoint v = c - a; - float div = r.x * s.y - r.y * s.x; - if (fabs(div) <= kNearZero) return false; - float u = (r.y * v.x - r.x * v.y) / div; - e.x = c.x + s.x * u; - e.y = c.y + s.y * u; - return true; -} - - -void -LinePathBuilder::RoundCap(BPoint a, BPoint b, BPoint ra, BPoint rb, bool start) -{ - BPoint bezier[3]; - BPoint v; - if (start) { // first quarter circle - Vector(b, a, PenSize(), v); - BPoint v055(0.55*v.x, 0.55*v.y); - BPoint vr055(-v.y, v.x); - bezier[0] = a + v + vr055; - bezier[1] = ra + v055; - bezier[2] = ra; - AddPoint(a+v); - BezierTo(bezier); - } else { // second quarter circle - Vector(a, b, PenSize(), v); - BPoint v055(0.55*v.x, 0.55*v.y); - BPoint vr055(v.y, -v.x); - bezier[0] = rb + v055; - bezier[1] = b + v + vr055; - bezier[2] = b + v; - AddPoint(rb); - BezierTo(bezier); - } -} - - -void -LinePathBuilder::Corner(BPoint a, BPoint b, bool start) -{ - BPoint ra, rb, r; - if (Parallel(a, b, PenSize(), ra, rb)) { - BPoint v; - switch (LineCapMode()) { - case B_ROUND_CAP: - RoundCap(a, b, ra, rb, start); - return; - case B_BUTT_CAP: // nothing to do - break; - case B_SQUARE_CAP: - Vector(a, b, PenSize(), v); - ra -= v; - rb += v; - break; - } - if (start) r = ra; else r = rb; - AddPoint(r); - } -} - - -bool -LinePathBuilder::Inside(BPoint a, BPoint b, BPoint r) -{ - BPoint v; - Vector(a, b, 2.0, v); - - if (kNearZero <= fabs(v.x)) return (r.x - b.x) / v.x <= 0.0; - else if (kNearZero <= fabs(v.y)) return (r.y - b.y) / v.y <= 0.0; - else return false; // should not reach here (length of v > 0.0!) -} - - -bool -LinePathBuilder::InMiterLimit(BPoint a, BPoint b) -{ - BPoint d = a - b; - return 2.0*sqrt(d.x*d.x + d.y*d.y)/PenSize() <= LineMiterLimit(); -} - - -void -LinePathBuilder::RoundJoin(BPoint p[4]) -{ - BPoint v[2]; - Vector(p[0], p[1], PenSize() * 0.63, v[0]); - Vector(p[3], p[2], PenSize() * 0.63, v[1]); - AddPoint(p[1]); - BPoint bezier[3] = {p[1]+v[0], p[2]+v[1], p[2] }; - BezierTo(bezier); -} - - -void -LinePathBuilder::Connect(BPoint a, BPoint b, BPoint c) -{ - BPoint p[4], r, v; - if (Parallel(a, b, PenSize(), p[0], p[1]) && - Parallel(b, c, PenSize(), p[2], p[3]) && - Cut(p[0], p[1], p[2], p[3], r)) { - - - - if (LineJoinMode() != B_BUTT_JOIN && - LineJoinMode() != B_SQUARE_JOIN && - Inside(p[0], p[1], r)) { - if (!Inside(p[1], p[0], r) || !Inside(p[2], p[3], r)) { - AddPoint(p[1]); AddPoint(p[2]); - } else { - AddPoint(r); - } - return; - } - - switch (LineJoinMode()) { - case B_ROUND_JOIN: - RoundJoin(p); - break; - case B_MITER_JOIN: - if (InMiterLimit(b, r)) { - AddPoint(r); - break; - } - // fall through - case B_BEVEL_JOIN: - AddPoint(p[1]); AddPoint(p[2]); - break; - case B_BUTT_JOIN: // ??? - AddPoint(p[1]); AddPoint(b); AddPoint(p[2]); - break; - case B_SQUARE_JOIN: // ??? - Vector(a, b, PenSize(), v); - AddPoint(p[1] + v); AddPoint(b + v); - Vector(b, c, PenSize(), v); - AddPoint(b - v); AddPoint(p[2] - v); - break; - } - } -} - - -bool -LinePathBuilder::IdenticalPoints(int i, int j) -{ - BPoint d = fSubPath->PointAt(i) - fSubPath->PointAt(j); - return d.x * d.x + d.y * d.y < kNearZero; -} - - -// remove identical points -void -LinePathBuilder::OptimizeSubPath() -{ - int i, j = 0; - const int n = fSubPath->CountPoints(); - for (i = 1; i < n; i++) { - if (!IdenticalPoints(i, j)) { - fSubPath->AtPut(++j, fSubPath->PointAt(i)); - } - } - fSubPath->Truncate(i-j-1); - - // check also first point == last point if path is closed - if (fSubPath->IsClosed() && fSubPath->CountPoints() >= 2) { - const int n = fSubPath->CountPoints()-1; - if (IdenticalPoints(0, n)) fSubPath->Truncate(1); - } -} - - -BPoint -LinePathBuilder::PointAt(int i) -{ - const int n = fSubPath->CountPoints(); - return fSubPath->PointAt((i+n) % n); -} - - -void -LinePathBuilder::AddPoint(BPoint p) -{ - if (fFirst) { - fFirst = false; - MoveTo(p); - } else { - LineTo(p); - } -} - - -void -LinePathBuilder::CreateLinePath() -{ - OptimizeSubPath(); - if (fPenSize < kMinPenSize) fPenSize = kMinPenSize; - - const bool start = true; - const bool end = false; - const int n = fSubPath->CountPoints(); - - if (n < 2) return; - - bool is_closed = fSubPath->IsClosed() && n != 2; - - if (fSubPath->IsClosed() && n == 2) { - switch (LineJoinMode()) { - case B_ROUND_JOIN: - fCapMode = B_ROUND_CAP; - break; - case B_MITER_JOIN: // fall through - case B_BEVEL_JOIN: // fall through - case B_BUTT_JOIN: - fCapMode = B_BUTT_CAP; - break; - case B_SQUARE_JOIN: - fCapMode = B_SQUARE_CAP; - break; - } - } - - // ahead - if (is_closed) { - Connect(PointAt(n-1), PointAt(0), PointAt(1)); - } else { - Corner(PointAt(0), PointAt(1), start); - } - - for (int i = 1; i < n-1; i++) { - Connect(PointAt(i-1), PointAt(i), PointAt(i+1)); - } - - if (is_closed) { - Connect(PointAt(n-2), PointAt(n-1), PointAt(n)); - Connect(PointAt(n-1), PointAt(n), PointAt(n+1)); - } else { - Corner(PointAt(n-2), PointAt(n-1), end); - } - - // and back - if (is_closed) { - ClosePath(); fFirst = true; - Connect(PointAt(n+1), PointAt(n), PointAt(n-1)); - Connect(PointAt(n), PointAt(n-1), PointAt(n-2)); - } else { - Corner(PointAt(n-1), PointAt(n-2), start); - } - - for (int i = n-2; i >= 1; i--) { - Connect(PointAt(i+1), PointAt(i), PointAt(i-1)); - } - - if (is_closed) { - Connect(PointAt(1), PointAt(0), PointAt(n-1)); - } else { - Corner(PointAt(1), PointAt(0), end); - } - ClosePath(); -} - diff --git a/src/add-ons/print/drivers/pdf/source/LinePathBuilder.h b/src/add-ons/print/drivers/pdf/source/LinePathBuilder.h deleted file mode 100644 index 06b559c280..0000000000 --- a/src/add-ons/print/drivers/pdf/source/LinePathBuilder.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - -LinePathBuilder - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef LINE_PATH_BUILDER_H -#define LINE_PATH_BUILDER_H - -#include "SubPath.h" -#include - -class LinePathBuilder -{ - SubPath *fSubPath; - float fPenSize; - cap_mode fCapMode; - join_mode fJoinMode; - float fMiterLimit; - bool fFirst; - - float PenSize() const { return fPenSize; } - cap_mode LineCapMode() const { return fCapMode; } - join_mode LineJoinMode() const { return fJoinMode; } - float LineMiterLimit() const { return fMiterLimit; } - - bool Vector(BPoint a, BPoint b, float w, BPoint &v); - bool Parallel(BPoint a, BPoint b, float w, BPoint &pa, BPoint &pb); - bool Cut(BPoint a, BPoint b, BPoint c, BPoint d, BPoint &e); - bool Inside(BPoint a, BPoint b, BPoint r); - bool InMiterLimit(BPoint a, BPoint b); - - void RoundCap(BPoint a, BPoint b, BPoint ra, BPoint rb, bool start); - void RoundJoin(BPoint p[4]); - void AddPoint(BPoint p); - void Corner(BPoint a, BPoint b, bool start); - void Connect(BPoint a, BPoint b, BPoint c); - - bool IdenticalPoints(int i, int j); - void OptimizeSubPath(); - - BPoint PointAt(int i); - - -protected: - virtual void MoveTo(BPoint p) = 0; - virtual void LineTo(BPoint p) = 0; - virtual void BezierTo(BPoint p[3]) = 0; - virtual void ClosePath(void) = 0; - -public: - LinePathBuilder(SubPath *subPath, float penSize, cap_mode capMode, join_mode joinMode, float miterLimit); - virtual ~LinePathBuilder() { } - - virtual void CreateLinePath(); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Link.cpp b/src/add-ons/print/drivers/pdf/source/Link.cpp deleted file mode 100644 index ea24d3bc4f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Link.cpp +++ /dev/null @@ -1,476 +0,0 @@ -/* - -Detection and adding of web links. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include "Link.h" -#include "XReferences.h" -#include "Bookmark.h" -#include "PDFSystem.h" -#include "PDFWriter.h" -#include "Log.h" -#include "Report.h" - -Link::Link(PDFWriter* writer, BString* utf8) - : fWriter(writer) - , fUtf8(utf8) - , fContainsLink(false) -{ -} - -bool -Link::BoundingBox(BRect* rect) { - return fWriter->fTextLine.BoundingBox(fStartPos, fEndPos+1, rect); -} - - -// create link from fStartPos to fEndPos and fStart to end -void -Link::CreateLink() -{ - static bool reported = false; // report warning once only - BRect bounds; - if (BoundingBox(&bounds)) { - CreateLink(bounds.left, bounds.bottom, bounds.right, bounds.top); - } else if (!reported) { - REPORT(kWarning, fWriter->fPage, "Warning: Can not create link for rotated font!"); - reported = true; - } -} - -void -Link::Do() { - int pos = 0; - do { - DetectLink(pos); - if (ContainsLink()) { - CreateLink(); - pos = fEndPos; - } - } while (ContainsLink()); -} - -// TODO: check this list and add more prefixes -const char* WebLink::fURLPrefix[] = { - "http://", - "https://", - "ftp://", - "telnet://", - "mailto:", - "news://", - "nntp://", - "gopher://", - "wais://", - "prospero://", - "mid:", - "cid:", - "afs://", - NULL -}; - - -// Superset of xpalphas rule in BNF for specific URL schemes -// See: http://www.w3.org/Addressing/URL/5_BNF.html -bool -WebLink::IsValidCodePoint(const char* cp, int cps) { - if (cps == 1) { - char c = *cp; - switch (c) { - // safe - case '$': case '-': case '_': case '@': - case '.': case '&': case '+': - // extra - case '!': case '*': case '"': case '\'': - case '(': case ')': case ',': - // hex (prefix only) - case '%': - // reserved (subset) - case '/': case '?': case '=': - // national (subset) - case '~': - return true; - default: - return isalpha(c) || isdigit(c); - } - } - return false; -} - - -bool -WebLink::DetectUrlWithPrefix(int start) -{ - int pos = INT_MAX; - const char* prefix = NULL; - const char* utf8 = fUtf8->String(); - - // search prefix with smallest position - for (int i = 0; fURLPrefix[i]; i ++) { - int p = fUtf8->FindFirst(fURLPrefix[i], start); - if (p >= start && p < pos) { - pos = p; - prefix = fURLPrefix[i]; - } - } - - if (pos != INT_MAX) { - fStartPos = pos; - fEndPos = pos + strlen(prefix); - - // search end of url - int prev; - int cps; - const char* cp; - - prev = fEndPos; - pos = fEndPos; - cp = &utf8[pos]; - cps = fWriter->CodePointSize(cp); - while (IsValidCodePoint(cp, cps)) { - prev = pos; - pos += cps; - cp = &utf8[pos]; - cps = fWriter->CodePointSize(cp); - } - - // skip from end over '.' and '@' - while (fStartPos < prev && (utf8[prev] == '.' || utf8[prev] == '@')) { - // search to begin of code point - do { - prev --; - } while (!fWriter->BeginsChar(utf8[prev])); - } - - if (prev != fEndPos) { // url not empty - fEndPos = prev; - return true; - } - } - - return false; -} - - -bool -WebLink::IsValidStart(const char* cp) -{ - return *cp != '.' && *cp != '@' && IsValidCodePoint(cp, 1); -} - -bool -WebLink::IsValidChar(const char* cp) -{ - return IsValidCodePoint(cp, 1); -} - -// TODO: add better url detection (ie. "e.g." is detected as "http://e.g") -// A complete implementation should identify these kind of urls correctly: -// domain/~user -// domain/page.html?value=key -bool -WebLink::DetectUrlWithoutPrefix(int start) -{ - const char* utf8 = fUtf8->String(); - - while (utf8[start]) { - // search to start - while (utf8[start] && !IsValidStart(&utf8[start])) { - start += fWriter->CodePointSize(&utf8[start]); - } - - // search end and count dots and @s - int numDots = 0, numAts = 0; - int end = start; - int prev = end; - while (utf8[end] && IsValidChar(&utf8[end])) { - if (utf8[end] == '.') numDots ++; - else if (utf8[end] == '@') numAts ++; - prev = end; end += fWriter->CodePointSize(&utf8[end]); - } - - // skip from end over '.' and '@' - while (start < prev && (utf8[prev] == '.' || utf8[prev] == '@')) { - if (utf8[prev] == '.') numDots --; - else if (utf8[prev] == '@') numAts --; - // search to begin of code point - do { - prev --; - } while (!fWriter->BeginsChar(utf8[prev])); - } - - fStartPos = start; fEndPos = prev; - int32 length = fEndPos - fStartPos; - - if (numAts == 1) { - fKind = kMailtoKind; - return true; - } else if (numDots >= 2 && length > 2*numDots+1 && numAts == 0) { - if (strncmp(&utf8[start], "ftp", 3) == 0) fKind = kFtpKind; - else fKind = kHttpKind; - return true; - } - - // next iteration - start = end; - } - return false; -} - -void -WebLink::DetectLink(int start) -{ - fContainsLink = true; - fKind = kUnknownKind; - if (DetectUrlWithPrefix(start)) return; - if (DetectUrlWithoutPrefix(start)) return; - fContainsLink = false; -} - - -// create link from fStartPos to fEndPos and fStart to end -void -WebLink::CreateLink(float llx, float lly, float urx, float ury) -{ - BString url; - - // prepend protocol if required - switch (fKind) { - case kMailtoKind: url = "mailto:"; break; - case kHttpKind: url = "http://"; break; - case kFtpKind: url = "ftp://"; break; - case kUnknownKind: break; - default: - LOG((fWriter->fLog, "Error: Link kind missing!!!")); - } - - // append url - int endPos = fEndPos + fWriter->CodePointSize(&fUtf8->String()[fEndPos]); - - for (int i = fStartPos; i < endPos; i ++) { - url.Append(fUtf8->ByteAt(i), 1); - } - - REPORT(kInfo, fWriter->fPage, "Web link '%s'", url.String()); - // XXX: url should be in 7-bit ascii encoded! - PDF_add_weblink(fWriter->fPdf, llx, lly, urx, ury, url.String()); -} - - -WebLink::WebLink(PDFWriter* writer, BString* utf8) - : Link(writer, utf8) -{ -} - - -// TextSegment - -TextSegment::TextSegment(const char* text, BPoint start, float escpSpace, float escpNoSpace, BRect* bounds, BFont* font, PDFSystem* system) - : fText(text) - , fStart(start) - , fEscpSpace(escpSpace) - , fEscpNoSpace(escpNoSpace) - , fBounds(*bounds) - , fFont(*font) - , fSystem(*system) - , fSpaces(0) -{ -} - - -void TextSegment::PrependSpaces(int32 n) { - ASSERT(fSpaces == 0); - fSpaces = n; - BString spaces; - spaces.Append(' ', n); - fText.Prepend(spaces.String()); -} - - -// TextLine - -TextLine::TextLine(PDFWriter* writer) - : fWriter(writer) -{ -} - - -void TextLine::Add(TextSegment* segment) { - // simply skip rotated text - if (segment->Font()->Rotation() != 0.0) { - delete segment; return; - } - - if (!Follows(segment)) { - Flush(); - } - - fSegments.AddItem(segment); -} - - -bool TextLine::Follows(TextSegment* segment) const { - const int32 n = fSegments.CountItems(); - if (n == 0) return true; - TextSegment* s = fSegments.ItemAt(n-1); - // ATM segments must have same PDFSystem! - PDFSystem* os = s->System(); - PDFSystem* ns = segment->System(); - if (os->Origin() != ns->Origin() || os->Scale() != ns->Scale() || os->Height() != ns->Height()) return false; - - // follows the new segment the latest one? - BPoint start = segment->Start(); - BRect b = s->Bounds(); - float w = segment->Font()->StringWidth(" ", 1); - if (b.top <= start.y && start.y <= b.bottom && (b.right-w/2.0) <= start.x) { - // insert spaces - if (w > 0.0) { - int n = (int)((start.x - b.right) / w); - if (n > 200) n = 200; // santiy check - if (n > 0) { - segment->PrependSpaces(n); - } - } - return true; - } - return false; -} - -bool TextLine::BoundingBox(int startPos, int endPos, BRect* bounds) { - const int32 n = fSegments.CountItems(); - if (n == 0) return false; - - // build the text in the line - BString line; - for (int32 i = 0; i < n; i ++) { - line << fSegments.ItemAt(i)->Text(); - } - - const char* c = line.String(); - const char* pStart = &c[startPos]; - const char* pEnd = &c[endPos]; - - for (int32 i = 0; i < n; i ++) { - - TextSegment* seg = fSegments.ItemAt(i); - BPoint pos = seg->Start(); - BFont* font = seg->Font(); - const char* sc = seg->Text(); - float escpSpace = seg->EscpSpace(); - float escpNoSpace = seg->EscpNoSpace(); - int32 spaces = seg->Spaces(); - PDFSystem* system = seg->System(); - - - while (*sc != 0) { - ASSERT(*sc == *c); - - int s = fWriter->CodePointSize((char*)c); - - float w = font->StringWidth(c, s); - - if (c == pStart) { - bounds->left = bounds->right = system->tx(pos.x); - bounds->top = bounds->bottom = system->ty(pos.y); - } - if (pStart <= c && c < pEnd) { - font_height height; - font->GetHeight(&height); - float top = system->ty(pos.y - height.ascent); - float bottom = system->ty(pos.y + height.descent); - - if (bounds->top < top) bounds->top = top; - if (bounds->bottom > bottom) bounds->bottom = bottom; - bounds->right = system->tx(pos.x+w); - } - if (spaces == 0) { - // position of next character - if (*(unsigned char*)c <= 0x20) { // should test if c is a white-space! - w += escpSpace; - } else { - w += escpNoSpace; - } - - pos.x += w; - } else { - // skip over the prepended spaces - spaces --; - } - - // next character - c += s; sc += s; - - if (c >= pEnd) { - return true; - } - } - } - return false; -} - - -void TextLine::Flush() { - const int32 n = fSegments.CountItems(); - if (n == 0) return; - - // build the text in the line - BString line; - for (int32 i = 0; i < n; i ++) { - line << fSegments.ItemAt(i)->Text(); - } - - const char* c = line.String(); - - if (!fWriter->MakesPDF()) { - if (fWriter->fCreateXRefs) fWriter->RecordDests(c); - } else { - // simple link handling for now - WebLink webLink(fWriter, &line); - if (fWriter->fCreateWebLinks) webLink.Do(); - - // local links - LocalLink localLink(fWriter->fXRefs, fWriter->fXRefDests, fWriter, &line, fWriter->fPage); - if (fWriter->fCreateXRefs) localLink.Do(); - - // simple bookmark adding - if (fWriter->fCreateBookmarks) { - TextSegment* s = fSegments.ItemAt(0); - BFont* f = s->Font(); - PDFSystem* system = s->System(); - BPoint start(system->tx(s->Start().x), system->ty(s->Start().y)); - - font_height height; - f->GetHeight(&height); - float h = system->scale(height.ascent); - - fWriter->fBookmark->AddBookmark(start, h, c, f); - } - } - fSegments.MakeEmpty(); -} - diff --git a/src/add-ons/print/drivers/pdf/source/Link.h b/src/add-ons/print/drivers/pdf/source/Link.h deleted file mode 100644 index 5efbe23f0c..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Link.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - -Detection and adding of web links. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _LINK_H -#define _LINK_H - -#include -#include -#include -#include "PrintUtils.h" -#include "PDFSystem.h" - -class PDFSystem; -class PDFWriter; - -class TextLine; - -class Link { -protected: - PDFWriter* fWriter; - BString* fUtf8; - - bool fContainsLink; - int fStartPos, fEndPos; - - virtual void DetectLink(int start) = 0; - virtual void CreateLink(float llx, float lly, float urx, float ury) = 0; - - void CreateLink(); - bool ContainsLink() const { return fContainsLink; } - -private: - bool BoundingBox(BRect* rect); - -public: - Link(PDFWriter* writer, BString* utf8); - virtual ~Link() {} - void Do(); -}; - -class WebLink : public Link { - enum kind { - kMailtoKind, - kHttpKind, - kFtpKind, - kUnknownKind - }; - - enum kind fKind; - - static const char* fURLPrefix[]; - - bool IsValidStart(const char* cp); - bool IsValidChar(const char* cp); - bool DetectUrlWithoutPrefix(int start); - - bool IsValidCodePoint(const char* cp, int cps); - bool DetectUrlWithPrefix(int start); - - void CreateLink(float llx, float lly, float urx, float ury); - void DetectLink(int start); - -public: - WebLink(PDFWriter* writer, BString* utf8); -}; - -class TextSegment { - BString fText; - BPoint fStart; - float fEscpSpace; // escapement space - float fEscpNoSpace; // escapement no space - BRect fBounds; - BFont fFont; - PDFSystem fSystem; - int32 fSpaces; - -public: - TextSegment(const char* text, BPoint start, float escpSpace, float escpNoSpace, BRect* bounds, BFont* font, PDFSystem* system); - - void PrependSpaces(int32 n); - - const char* Text() const { return fText.String(); } - BPoint Start() const { return fStart; } - float EscpSpace() const { return fEscpSpace; } - float EscpNoSpace() const { return fEscpNoSpace; } - BRect Bounds() const { return fBounds; } - BFont* Font() { return &fFont; } - PDFSystem* System() { return &fSystem; } - int32 Spaces() const { return fSpaces; } -}; - - -class TextLine { - TList fSegments; - PDFWriter* fWriter; - - bool Follows(TextSegment* segment) const; - -public: - TextLine(PDFWriter* writer); - - void Add(TextSegment* segment); - void Flush(); - // startPos inclusive, endPos exclusive - bool BoundingBox(int startPos, int endPos, BRect* bounds); -}; - - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Log.h b/src/add-ons/print/drivers/pdf/source/Log.h deleted file mode 100644 index d6e8f518ba..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Log.h +++ /dev/null @@ -1,12 +0,0 @@ - -#ifndef LOG_H -#define LOG_H - -#if LOGGING - #define LOG(l) fprintf l -#else - #define LOG(l) ___do_nothing() - inline void ___do_nothing() { } -#endif - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Mask.cpp b/src/add-ons/print/drivers/pdf/source/Mask.cpp deleted file mode 100644 index 12374fdb22..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Mask.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - -Mask Cache Item. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include - -#include "Report.h" -#include "Mask.h" -#include "ImageCache.h" - -// Implementation of MaskDescription - -MaskDescription::MaskDescription(PDF* pdf, const char* mask, int length, int width, int height, int bpc) - : fPDF(pdf) - , fMask(mask) - , fLength(length) - , fWidth(width) - , fHeight(height) - , fBPC(bpc) -{ -} - -CacheItem* MaskDescription::NewItem(int id) { - REPORT(kDebug, -1, "MaskDescription::NewItem called"); - int imageID; - BString fileName(kMaskPathPrefix); - const char* name; - ::Mask* mask = NULL; - - fileName << id; - name = fileName.String(); - - if (!StoreMask(name)) { - REPORT(kError, -1, "Could not store mask in cache."); - return NULL; - } - - imageID = MakePDFMask(); - - if (imageID == -1) { - REPORT(kError, -1, "Could not embed mask in PDF file."); - unlink(name); - } else { - mask = new ::Mask(fPDF, imageID, name, Length(), Width(), Height(), BPC()); - } - return mask; -} - -bool MaskDescription::StoreMask(const char* name) { - bool ok; - BFile file(name, B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE); - if (file.InitCheck() != B_OK) return false; - ok = file.Write(Mask(), Length()) == Length(); - if (!ok) { - unlink(name); - } else { - } - return ok; -} - -int MaskDescription::MakePDFMask() { -// *maskId = PDF_open_image(fPdf, "raw", "memory", (const char *) mask, length, width, height, 1, bpc, "mask"); - BString options; - int maskID; - PDF_create_pvf(fPDF, "mask", 0, Mask(), Length(), NULL); - options << "width " << fWidth << " height " << fHeight << " components 1 bpc " << fBPC; - maskID = PDF_load_image(fPDF, "raw", "mask", 0, options.String()); - PDF_delete_pvf(fPDF, "mask", 0); - return maskID; -} - -// Implementation of Mask - -Mask::Mask(PDF* pdf, int imageID, const char* fileName, int length, int width, int height, int bpc) - : fPDF(pdf) - , fImageID(imageID) - , fFileName(fileName) - , fLength(length) - , fWidth(width) - , fHeight(height) - , fBPC(bpc) -{ -} - -Mask::~Mask() { - PDF_close_image(fPDF, ImageID()); - unlink(FileName()); -} - -bool Mask::Equals(CIDescription* description) const { - REPORT(kDebug, -1, "Mask::Equals called"); - MaskDescription* desc = dynamic_cast(description); - if (desc && Length() == desc->Length() && Width() == desc->Width() && Height() == desc->Height() && BPC() == desc->BPC()) { - off_t size; - BFile file(FileName(), B_READ_ONLY); - if (file.InitCheck() == B_OK && file.GetSize(&size) == B_OK && size == Length()) { - char* buffer = new char[Length()]; - if (buffer == NULL) return false; - bool ok = file.Read(buffer, Length()) == Length() && - memcmp(desc->Mask(), buffer, Length()) == 0; - delete[] buffer; - return ok; - } - } - return false; -} diff --git a/src/add-ons/print/drivers/pdf/source/Mask.h b/src/add-ons/print/drivers/pdf/source/Mask.h deleted file mode 100644 index 4a924d9e14..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Mask.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - -Mask Cache Item. - -Copyright (c) 2003 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _MASK_CACHE_ITEM_H -#define _MASK_CACHE_ITEM_H - -#include - -#include "pdflib.h" -#include "Cache.h" - -class MaskDescription : public CIDescription { -public: - MaskDescription(PDF* pdf, const char* mask, int length, int width, int height, int bpc); - - CacheItem* NewItem(int id); - - const char* Mask() const { return fMask; } - int Length() const { return fLength; } - int Width() const { return fWidth; } - int Height() const { return fHeight; } - int BPC() const { return fBPC; } - -private: - bool StoreMask(const char* name); - int MakePDFMask(); - - PDF* fPDF; - const char* fMask; - int fLength; - int fWidth; - int fHeight; - int fBPC; -}; - -class Mask : public CacheItem { -public: - Mask(PDF* pdf, int imageID, const char* fileName, int length, int width, int height, int bpc); - ~Mask(); - - int ImageID() const { return fImageID; }; - const char* FileName() const { return fFileName.String(); }; - int Length() const { return fLength; }; - int Width() const { return fWidth; } - int Height() const { return fHeight; } - int BPC() const { return fBPC; } - bool Equals(CIDescription* desc) const; - -private: - PDF* fPDF; - int fImageID; - BString fFileName; - int fLength; - int fWidth; - int fHeight; - int fBPC; -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/MessagePrinter.cpp b/src/add-ons/print/drivers/pdf/source/MessagePrinter.cpp deleted file mode 100644 index 3cd43b00fc..0000000000 --- a/src/add-ons/print/drivers/pdf/source/MessagePrinter.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - -MessagePrinter.cpp - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include - -#include "MessagePrinter.h" - -/** - * Print() - * - * @param BMessage* - * @return status_t, any result from the operation - */ -status_t MessagePrinter::Print(BMessage* msg) -{ - status_t status; - BFile file; - BPath settingsPath; - // char settingsPath[B_PATH_NAME_LENGTH]; - char *name; - uint32 type; - int32 count; - - // open a file to print message on the desktop - status = find_directory(B_DESKTOP_DIRECTORY, &settingsPath); - if (status != B_OK) { - BAlert* alert = new BAlert("","Find directory error", "Doh!"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return status; - } - - settingsPath.Append(msgFileName); - status = file.SetTo(settingsPath.Path(), B_WRITE_ONLY | B_CREATE_FILE); - if (status != B_OK) { - BAlert* alert = new BAlert("","File write error", "Doh!"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return status; - } - - // print the contents of the message to file - for ( int32 i = 0; - msg->GetInfo(B_ANY_TYPE, i, &name, &type, &count) == B_OK; - i++ ) - { - BString out; - // count - out << i; - if (file.Write(out.String(), out.Length()) < 0) { - BAlert* alert = new BAlert("","Count write error", "Doh!"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return B_ERROR; - } - // name - out = " "; - out << name; - if (file.Write(out.String(), out.Length()) < 0) { - BAlert* alert = new BAlert("","Name write error", "Doh!"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return B_ERROR; - } - - // type - switch (type) { - case B_INT32_TYPE: - { - int32 v; - out = " B_INT32_TYPE "; - msg->FindInt32(name, 0, &v); - out << v << '\n'; - } - break; - case B_UINT32_TYPE: - { - int32 v; - out = " B_UINT32_TYPE "; - msg->FindInt32(name, 0, &v); - out << v << '\n'; - } - break; - case B_INT64_TYPE: - { - int64 v; - out = " B_INT64_TYPE "; - msg->FindInt64(name, 0, &v); - out << v << '\n'; - } - break; - case B_FLOAT_TYPE: - { - float f; - out = " B_FLOAT_TYPE "; - msg->FindFloat(name, 0, &f); - out << f << '\n'; - } - break; - case B_BOOL_TYPE: - { - bool b; - out = " B_BOOL_TYPE "; - msg->FindBool(name, 0, &b); - out << (int)b << '\n'; - } - break; - case B_MESSAGE_TYPE: - { - BMessage *m = new BMessage(); - MessagePrinter *mp = new MessagePrinter(name); - msg->FindMessage(name, m); - mp->Print(m); - out = " B_MESSAGE_TYPE \n"; - delete m; - delete mp; - } - break; - case B_RECT_TYPE: - { - BRect r; - out = " B_RECT_TYPE "; - msg->FindRect(name, 0, &r); - out << "{ " - << r.left <<" " - << r.top <<" " - << r.right <<" " - << r.bottom <<" " - << " }" - << '\n'; - } - break; - case B_STRING_TYPE: - { - BString s; - out = " B_STRING_TYPE "; - msg->FindString(name, 0, &s); - out << s.String() << '\n'; - } - break; - default: - out = " UNKNOWN TYPE \n"; - break; - } - if (file.Write(out.String(), out.Length()) < 0) { - BAlert* alert = new BAlert("","Value write error", "Doh!"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return B_ERROR; - } - } - return status; -} - diff --git a/src/add-ons/print/drivers/pdf/source/MessagePrinter.h b/src/add-ons/print/drivers/pdf/source/MessagePrinter.h deleted file mode 100644 index 130b5d1905..0000000000 --- a/src/add-ons/print/drivers/pdf/source/MessagePrinter.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - -MessagePrinter.h - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef MSG_PRINTER_H -#define MSG_PRINTER_H - -#include -#include -#include - -const char FILE_NAME[] = "MessageFile"; - -/** - * Class - */ -class MessagePrinter -{ -private: - BNode node; - status_t _err; - char msgFileName[B_FILE_NAME_LENGTH]; - -public: - MessagePrinter() { strcpy(msgFileName, FILE_NAME); } - MessagePrinter(const char *fileName) { strcpy(msgFileName, fileName); } - ~MessagePrinter() { } - - status_t Print(BMessage *msg); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Notes.txt b/src/add-ons/print/drivers/pdf/source/Notes.txt deleted file mode 100644 index dcce250abc..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Notes.txt +++ /dev/null @@ -1,59 +0,0 @@ -Notes: - -1) Called after printer is created: - char* add_printer(char* printer_name); - -2) Called by print_server if app uses page setup settings before calling - ConfigPage(). - - BMessage* default_settings(BNode* printer); - - BNode is the spool dir where attributes exist - BMessage contains the attribute default settings - -3) Called by BPrintJob::ConfigPage() - - BMessage* config_page(BNode* printer, BMessage* settings); - - BMessage* settings is the current settings - returns the settings specified in the dialog - -4) Called by print_server to start printing - - BMessage* take_job(BFile* spool, BNode* printer, BMessage* msg); - -- there is always a config_page() before a config_job() -- if settings passed to config_job is empty the print_server will call - config_page() - -Path for settings: - 1) default_settings() should write the attributes to the BNode and return - them in the BMessage - 2) config_page() could be called with an empty settings BMessage, which - should then call default_settings()? - -- default_settings does not exist - -===================================================== -Simon 02/01/2002: -===================================================== -1) Added default_settings() to Driver.cpp to use PrinterSettings class that controls settings - -- accorting to the scheme above I have found no code that calls page setup before calling ConfigPage(), so the default_settings() function never gets called resulting in a badly formated message (has the wrong set of data fields we need) being sent to PageSetupWindow constructor. Therefore, on the council of Philippe, I have added a Validate() method to the PrinterSettings class that validates the structure of the message and adds constructs the message to be correct for PageSetupWindow. This means that PageSetupWindow will always get a good message, and I have taken out the code in the PageSetupWindow constructor to check for the presence of the data fields it needs. However, the result of the initial problem, that default_settings() is not called, resulted in my adding these Validate calls to both config_page() and config_job() functions, which really they should not be there... - -- what is really needed is a test app with a bunch of test harnesses to check all combination of app based printing scenarios, and also test for bad coding errors that an app may perform, rather than using StyleEdit and Gobe to test the driver. - -NOTE: depending on the app that causes config_page() to be called, the message will have different configurations of data fields. StyledEdit passes only a single field, while Gobe passes a bunch. The issue is that config_page() cannot simply call default_settings() in the case where the message does not have the data fields we want, since we will wipe them out with the new default one. So rather than calling default_settings() from config_page(), I just add the data fields we need with a call to PrinterSettings::ReadSettings(), or PrinterSettings::GetDefaults() if there are no previously saved settings. - -2) Code now does the following: - -a) Reads BNode to check if there is a previous BFS attibute called printer_settings that has the latest default settings - -b) If no attib printer_settings, then reads pdf_default_settings file in /home/config/settings for initial defaults. If pdf_default_settings not there, it uses hard coded values, writes the pdf_default_settings file and saves BMessage to spool BNode as a BFS attribute called printer_settings - -c) If pdf_default_settings are there it uses these values, then saves BMessage to spool BNode as a BFS attribute called printer_settings - -d) PageSetupWindow::UpdateSetupMessage() will call the PrinterSettings class to write the new settings created in the dialog to the spooler BNode attribute printer_settings - -3) Added a debug MessagePrinter class that prints the contents of a BMessage to a text file on the desktop with the name of the message as the name of the file. If there are BMessages in the BMessage it will print these too, but in seperate files. You can see the use of this class in the code commented out in Driver.cpp, which should be removed at some later time, and perhaps put in a printer testing app. - diff --git a/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.cpp b/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.cpp deleted file mode 100644 index de797d6b4b..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - -PDFLinePathBuilder - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "PDFLinePathBuilder.h" - -PDFLinePathBuilder::PDFLinePathBuilder(SubPath *subPath, PDFWriter *writer) - : LinePathBuilder(subPath, writer->PenSize(), writer->LineCapMode(), writer->LineJoinMode(), writer->LineMiterLimit()) - , fWriter(writer) -{ -} - -void -PDFLinePathBuilder::MoveTo(BPoint p) -{ - PDF_moveto(Pdf(), tx(p.x), ty(p.y)); -} - -void -PDFLinePathBuilder::LineTo(BPoint p) -{ - PDF_lineto(Pdf(), tx(p.x), ty(p.y)); -} - -void -PDFLinePathBuilder::BezierTo(BPoint p[3]) -{ - PDF_curveto(Pdf(), - tx(p[0].x), ty(p[0].y), - tx(p[1].x), ty(p[1].y), - tx(p[2].x), ty(p[2].y)); -} - -void -PDFLinePathBuilder::ClosePath(void) -{ - PDF_closepath(Pdf()); -} - - diff --git a/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.h b/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.h deleted file mode 100644 index eb70d5f51f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFLinePathBuilder.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - -PDFLinePathBuilder - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef PDFLINE_PATH_BUILDER_H -#define PDFLINE_PATH_BUILDER_H - -#include "LinePathBuilder.h" -#include "PDFWriter.h" - -class PDFLinePathBuilder : public LinePathBuilder -{ - PDFWriter *fWriter; - - PDF *Pdf() const { return fWriter->fPdf; } - float tx(float x) const { return fWriter->tx(x); } - float ty(float y) const { return fWriter->ty(y); } - -protected: - void MoveTo(BPoint p); - void LineTo(BPoint p); - void BezierTo(BPoint p[3]); - void ClosePath(void); - -public: - PDFLinePathBuilder(SubPath *subPath, PDFWriter *writer); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/PDFSystem.h b/src/add-ons/print/drivers/pdf/source/PDFSystem.h deleted file mode 100644 index f36bf15a92..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFSystem.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001-2003 OpenBeOS. -Copyright (c) 2006 Haiku. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _PDF_SYSTEM_H -#define _PDF_SYSTEM_H - -// PDF coordinate system -class PDFSystem { -private: - float fHeight; - float fX; - float fY; - float fScale; - -public: - PDFSystem() - : fHeight(0), fX(0), fY(0), fScale(1) { } - PDFSystem(float h, float x, float y, float s) - : fHeight(h), fX(x), fY(y), fScale(s) { } - - void SetHeight(float h) { fHeight = h; } - void SetOrigin(float x, float y) { fX = x; fY = y; } - void SetScale(float scale) { fScale = scale; } - float Height() const { return fHeight; } - BPoint Origin() const { return BPoint(fX, fY); } - float Scale() const { return fScale; } - - inline float tx(float x) { return fX + fScale*x; } - inline float ty(float y) { return fHeight - (fY + fScale * y); } - inline float scale(float f) { return fScale * f; } -}; - - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/PDFText.cpp b/src/add-ons/print/drivers/pdf/source/PDFText.cpp deleted file mode 100644 index f7f6790ac9..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFText.cpp +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Copyright 2001-2009, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Philippe Houdoin - * Simon Gauvin - * Michael Pfeiffer - */ - -#include -#include -#include - -#include -#include -#include -#include - -#include "PDFWriter.h" -#include "Link.h" -#include "Bookmark.h" -#include "DrawShape.h" -#include "XReferences.h" -#include "Log.h" -#include "Report.h" -#include "pdflib.h" - - -typedef struct { - uint16 from; - uint16 to; - int16 length; - uint16 *unicodes; -} unicode_to_encoding; - -typedef struct { - uint16 unicode; - uint16 cid; -} unicode_to_cid; - -typedef struct { - uint16 length; - unicode_to_cid *table; -} cid_table; - -#ifdef UNICODE5_FROM -# error check code! -#endif - -#define ELEMS(v, e) sizeof(v) / sizeof(e) - -// Adobe Glyph List -#include "enc_range.h" -#include "unicode0.h" -#include "unicode1.h" -#include "unicode2.h" -#include "unicode3.h" -#include "unicode4.h" - - -static unicode_to_encoding encodings[] = { - {UNICODE0_FROM, UNICODE0_TO, ELEMS(unicode0, uint16), unicode0}, - {UNICODE1_FROM, UNICODE1_TO, ELEMS(unicode1, uint16), unicode1}, - {UNICODE2_FROM, UNICODE2_TO, ELEMS(unicode2, uint16), unicode2}, - {UNICODE3_FROM, UNICODE3_TO, ELEMS(unicode3, uint16), unicode3}, - {UNICODE4_FROM, UNICODE4_TO, ELEMS(unicode4, uint16), unicode4} -}; - -// unicode to cid -#include "japanese.h" -#include "gb1.h" -#include "cns1.h" -#include "korean.h" - - -static cid_table cid_tables[] = { - {ELEMS(japanese, unicode_to_cid), japanese}, - {ELEMS(CNS1, unicode_to_cid), CNS1}, - {ELEMS(GB1, unicode_to_cid), GB1}, - {ELEMS(korean, unicode_to_cid), korean} -}; - -static const char* encoding_names[] = { - "macroman", - // TrueType - "ttenc0", - "ttenc1", - "ttenc2", - "ttenc3", - "ttenc4", - // Type 1 - "t1enc0", - "t1enc1", - "t1enc2", - "t1enc3", - "t1enc4", - // CJK - "UniJIS-UCS2-H", - "UniCNS-UCS2-H", - "UniGB-UCS2-H", - "UniKS-UCS2-H" -}; - - -// #pragma mark - - - -static bool -find_encoding(uint16 unicode, uint8 &encoding, uint16 &index) -{ - for (unsigned int i = 0; i < ELEMS(encodings, unicode_to_encoding); i++) { - if (encodings[i].from <= unicode && unicode <= encodings[i].to) { - int16 bottom = 0; - int16 top = encodings[i].length-1; - uint16* codes = encodings[i].unicodes; - while (top >= bottom) { - int16 m = (top + bottom) / 2; - if (unicode < codes[m]) { - top = m-1; - } else if (unicode > codes[m]) { - bottom = m+1; - } else { - index = m; - encoding = i; - return true; - } - } - return false; - } - } - return false; -} - - -static bool -find_in_cid_tables(uint16 unicode, font_encoding &encoding, uint16 &index, - font_encoding* order) -{ - for (unsigned int i = 0; i < ELEMS(cid_tables, cid_table); i++) { - encoding = order[i]; - if (encoding == invalid_encoding) break; - int index = encoding - first_cjk_encoding; - int32 bottom = 0; - int32 top = cid_tables[index].length-1; - unicode_to_cid *table = cid_tables[index].table; - while (top >= bottom) { - int32 m = (top + bottom) / 2; - if (unicode < table[m].unicode) { - top = m-1; - } else if (unicode > table[m].unicode) { - bottom = m+1; - } else { - index = table[m].cid; - return true; - } - } - } - return false; -} - - -void -PDFWriter::MakeUserDefinedEncoding(uint16 unicode, uint8 &enc, uint8 &index) -{ - if (fUserDefinedEncodings.Get(unicode, enc, index)) { - BString s("user"); - s << (int)enc; - PDF_encoding_set_char(fPdf, s.String(), (int)index, NULL, (int)unicode); - } -} - - -void -PDFWriter::RecordFont(const char* family, const char* style, float size) -{ - const int32 n = fUsedFonts.CountItems(); - for (int32 i = 0; i < n; i ++) { - if (fUsedFonts.ItemAt(i)->Equals(family, style, size)) return; - } - - UsedFont* font; - font = new UsedFont(family, style, size); - fUsedFonts.AddItem(font); - - REPORT(kInfo, -1, "Used font: \"%s\" \"%s\" %f", family, style, size); -} - - -void -PDFWriter::GetFontName(BFont *font, char *fontname) -{ - font_family family; - font_style style; - - font->GetFamilyAndStyle(&family, &style); - strcat(strcat(strcpy(fontname, family), "-"), style); - - RecordFont(family, style, font->Size()); -} - - -void -PDFWriter::GetFontName(BFont *font, char *fontname, bool &embed, - font_encoding encoding) -{ - GetFontName(font, fontname); - - switch (encoding) { - case japanese_encoding: - strcpy(fontname, "HeiseiMin-W3"); return; - case chinese_cns1_encoding: - strcpy(fontname, "MHei-Medium"); return; - case chinese_gb1_encoding: - strcpy(fontname, "STSong-Light"); return; - case korean_encoding: - strcpy(fontname, "HYGoThic-Medium"); return; - default:; - } -} - - -int -PDFWriter::FindFont(char* fontName, bool embed, font_encoding encoding) -{ - static Font* cache = NULL; - if (cache && cache->encoding == encoding - && strcmp(cache->name.String(), fontName) == 0) - return cache->font; - - REPORT(kDebug, fPage, "FindFont %s", fontName); - Font *f = NULL; - const int n = fFontCache.CountItems(); - for (int i = 0; i < n; i++) { - f = fFontCache.ItemAt(i); - if (f->encoding == encoding && strcmp(f->name.String(), fontName) == 0) { - cache = f; - return f->font; - } - } - - if (embed) embed = EmbedFont(fontName); - - BString s; - const char* encoding_name; - if (encoding < user_defined_encoding_start) { - encoding_name = encoding_names[encoding]; - } else { - s = "user"; - s << (int)(encoding - user_defined_encoding_start); - encoding_name = s.String(); - } - REPORT(kDebug, fPage, "Create new font, %sembed, encoding %s", - embed ? "" : "do not ", encoding_name); - int font = PDF_findfont(fPdf, fontName, encoding_name, embed); - if (font != -1) { - REPORT(kDebug, fPage, "font created"); - cache = new Font(fontName, font, encoding); - fFontCache.AddItem(cache); - } else { - REPORT(kError, fPage, "Could not create font '%s': %s", fontName, - PDF_get_errmsg(fPdf)); - } - return font; -} - - -void -PDFWriter::ToUtf8(uint32 encoding, const char *string, BString &utf8) -{ - int32 len = strlen(string); - int32 srcLen = len, destLen = 255; - int32 state = 0; - char buffer[256]; - int32 srcStart = 0; - - do { - convert_to_utf8(encoding, &string[srcStart], &srcLen, buffer, &destLen, - &state); - srcStart += srcLen; - len -= srcLen; - srcLen = len; - - utf8.Append(buffer, destLen); - destLen = 255; - } while (len > 0); -}; - - -void -PDFWriter::ToUnicode(const char *string, BString &unicode) -{ - int32 len = strlen(string); - int32 srcLen = len, destLen = 255; - int32 state = 0; - char buffer[256]; - int32 srcStart = 0; - int i = 0; - - unicode = ""; - if (len == 0) return; - - do { - convert_from_utf8(B_UNICODE_CONVERSION, &string[srcStart], &srcLen, - buffer, &destLen, &state); - srcStart += srcLen; - len -= srcLen; - srcLen = len; - - char *b = unicode.LockBuffer(i + destLen); - memcpy(&b[i], buffer, destLen); - unicode.UnlockBuffer(i + destLen); - i += destLen; - destLen = 255; - } while (len > 0); -} - - -void -PDFWriter::ToPDFUnicode(const char *string, BString &unicode) -{ - // PDFlib requires BOM at begin and two 0 at end of string - BString s; - ToUnicode(string, s); - unicode << "\xfe\xff"; - int32 len = s.Length()+2; - char* buf = unicode.LockBuffer(len + 2); - // reserve space for two additional '\0' - memcpy(&buf[2], s.String(), s.Length()); - buf[len] = buf[len+1] = 0; - unicode.UnlockBuffer(len + 2); -} - - -uint16 -PDFWriter::CodePointSize(const char* s) -{ - uint16 i = 1; - for (s++; !BeginsChar(*s); s++) i++; - return i; -} - - -void -PDFWriter::RecordDests(const char* s) -{ - ::RecordDests record(fXRefDests, &fTextLine, fPage); - fXRefs->Matches(s, &record, true); -} - - -void -PDFWriter::DrawChar(uint16 unicode, const char* utf8, int16 size) -{ - // try to convert from utf8 to MacRoman encoding schema... - int32 srcLen = size; - int32 destLen = 1; - char dest[3] = "\0\0"; - int32 state = 0; - bool embed = true; - font_encoding encoding = macroman_encoding; - char fontName[B_FONT_FAMILY_LENGTH+B_FONT_STYLE_LENGTH+1]; - - if (convert_from_utf8(B_MAC_ROMAN_CONVERSION, utf8, &srcLen, dest, &destLen, - &state, 0) != B_OK || dest[0] == 0) { - // could not convert to MacRoman - font_encoding fenc; - uint16 index = 0; - uint8 enc; - - GetFontName(&fState->beFont, fontName); - embed = EmbedFont(fontName); - - REPORT(kDebug, -1, "find_encoding unicode %d\n", (int)unicode); - if (find_encoding(unicode, enc, index)) { - // is code point in the Adobe Glyph List? - // Note if rendering the glyphs only would be desired, we could - // always use the second method below (MakeUserDefinedEncoding), - // but extracting text from the generated PDF would be almost - // impossible (OCR!) - REPORT(kDebug, -1, "encoding for %x -> %d %d", unicode, (int)enc, - (int)index); - // use one of the user pre-defined encodings - if (fState->beFont.FileFormat() == B_TRUETYPE_WINDOWS) { - encoding = font_encoding(enc + tt_encoding0); - } else { - encoding = font_encoding(enc + t1_encoding0); - } - *dest = index; - } else if (embed) { - // if the font is embedded, create a user defined encoding at runtime - uint8 index; - MakeUserDefinedEncoding(unicode, enc, index); - *dest = index; - encoding = font_encoding(user_defined_encoding_start + enc); - } else if (find_in_cid_tables(unicode, fenc, index, fFontSearchOrder)) { - // font is not embedded use one of the CJK fonts for substitution - REPORT(kDebug, -1, "cid table %d index = %d", (int)fenc, (int)index); - dest[0] = unicode / 256; - dest[1] = unicode % 256; - destLen = 2; - encoding = fenc; - embed = false; - } else { - static bool found = false; - REPORT(kDebug, -1, "encoding for %x not found!", (int)unicode); - if (!found) { - found = true; - REPORT(kError, fPage, "Could not find an encoding for character " - "with unicode %d! Message is not repeated for other unicode " - "values.", (int)unicode); - } - *dest = 0; // paint a box (is 0 a box in MacRoman) or - return; // simply skip character - } - } else { - REPORT(kDebug, -1, "macroman srcLen=%d destLen=%d dest= %d %d!", srcLen, - destLen, (int)dest[0], (int)dest[1]); - } - - // Note we have to build the user defined encoding before it is used in - // PDF_find_font! - if (!MakesPDF()) return; - - int font; - - GetFontName(&fState->beFont, fontName, embed, encoding); - font = FindFont(fontName, embed, encoding); - if (font < 0) { - REPORT(kWarning, fPage, "**** PDF_findfont(%s) failed, back to default " - "font", fontName); - font = PDF_findfont(fPdf, "Helvetica", "macroman", 0); - } - - fState->font = font; - - uint16 face = fState->beFont.Face(); - PDF_set_parameter(fPdf, "underline", (face & B_UNDERSCORE_FACE) != 0 - ? "true" : "false"); - PDF_set_parameter(fPdf, "strikeout", (face & B_STRIKEOUT_FACE) != 0 - ? "true" : "false"); - PDF_set_value(fPdf, "textrendering", (face & B_OUTLINED_FACE) != 0 ? 1 : 0); - - PDF_setfont(fPdf, fState->font, scale(fState->beFont.Size())); - - const float x = tx(fState->penX); - const float y = ty(fState->penY); - const float rotation = fState->beFont.Rotation(); - const bool rotate = rotation != 0.0; - - if (rotate) { - PDF_save(fPdf); - PDF_translate(fPdf, x, y); - PDF_rotate(fPdf, rotation); - PDF_set_text_pos(fPdf, 0, 0); - } else - PDF_set_text_pos(fPdf, x, y); - - PDF_show2(fPdf, dest, destLen); - - if (rotate) { - PDF_restore(fPdf); - } -} - - -void -PDFWriter::ClipChar(BFont* font, const char* unicode, const char* utf8, - int16 size, float width) -{ - BShape glyph; - bool hasGlyph[1]; - font->GetHasGlyphs(utf8, 1, hasGlyph); - if (hasGlyph[0]) { - BShape *glyphs[1]; - glyphs[0] = &glyph; - font->GetGlyphShapes(utf8, 1, glyphs); - } else { - REPORT(kWarning, fPage, "glyph for %*.*s not found!", size, size, utf8); - // create a rectangle instead - font_height height; - fState->beFont.GetHeight(&height); - BRect r(0, 0, width, height.ascent); - float w = r.Width() < r.Height() ? r.Width()*0.1 : r.Height()*0.1; - BRect o = r; o.InsetBy(w, w); - w *= 2.0; - BRect i = r; i.InsetBy(w, w); - - o.OffsetBy(0, -height.ascent); - i.OffsetBy(0, -height.ascent); - - glyph.MoveTo(BPoint(o.left, o.top)); - glyph.LineTo(BPoint(o.right, o.top)); - glyph.LineTo(BPoint(o.right, o.bottom)); - glyph.LineTo(BPoint(o.left, o.bottom)); - glyph.Close(); - - glyph.MoveTo(BPoint(i.left, i.top)); - glyph.LineTo(BPoint(i.left, i.bottom)); - glyph.LineTo(BPoint(i.right, i.bottom)); - glyph.LineTo(BPoint(i.right, i.top)); - glyph.Close(); - } - - BPoint p(fState->penX, fState->penY); - PushInternalState(); SetOrigin(p); - { - DrawShape iterator(this, false); - iterator.Iterate(&glyph); - } - PopInternalState(); -} - - -void -PDFWriter::DrawString(char *string, float escapementNoSpace, - float escapementSpace) -{ - REPORT(kDebug, fPage, "DrawString string=\"%s\", escapementNoSpace=%f, " - "escapementSpace=%f, at %f, %f", string, escapementNoSpace, - escapementSpace, fState->penX, fState->penY); - - if (IsDrawing()) { - // text color is always the high color and not the pattern! - SetColor(fState->foregroundColor); - } - // convert string to UTF8 - BString utf8; - if (fState->beFont.Encoding() == B_UNICODE_UTF8) { - utf8 = string; - } else { - ToUtf8(fState->beFont.Encoding()-1, string, utf8); - } - - // convert string in UTF8 to unicode UCS2 - BString unicode; - ToUnicode(utf8.String(), unicode); - // need font object to calculate width of utf8 code point - BFont font = fState->beFont; - font.SetEncoding(B_UNICODE_UTF8); - // constants to calculate position of next character - const double rotation = DEGREE2RAD(fState->beFont.Rotation()); - const bool rotate = rotation != 0.0; - const double cos1 = rotate ? cos(rotation) : 1; - const double sin1 = rotate ? -sin(rotation) : 0; - - BPoint start(fState->penX, fState->penY); - - BeginTransparency(); - // If !MakesPDF() all the effort below just for the bounding box! - // draw each character - const char *c = utf8.String(); - const unsigned char *u = (unsigned char*)unicode.String(); - for (int i = 0; i < unicode.Length(); i += 2) { - int s = CodePointSize((char*)c); - - float w = font.StringWidth(c, s); - - if (MakesPDF() && IsClipping()) { - ClipChar(&font, (char*)u, c, s, w); - } else { - DrawChar(u[0]*256+u[1], c, s); - } - - // position of next character - if (*(unsigned char*)c <= 0x20) { // should test if c is a white-space! - w += escapementSpace; - } else { - w += escapementNoSpace; - } - - fState->penX += w * cos1; - fState->penY += w * sin1; - - // next character - c += s; u += 2; - } - EndTransparency(); - - // text line processing (for non rotated text only!) - BPoint end(fState->penX, fState->penY); - BRect bounds; - font_height height; - - font.GetHeight(&height); - - bounds.left = start.x; - bounds.right = end.x; - bounds.top = start.y - height.ascent; - bounds.bottom = end.y + height.descent; - - TextSegment* segment = new TextSegment(utf8.String(), start, escapementSpace, - escapementNoSpace, &bounds, &font, pdfSystem()); - - fTextLine.Add(segment); -} - - -bool -PDFWriter::EmbedFont(const char* name) -{ - static FontFile* cache = NULL; - if (cache && strcmp(cache->Name(), name) == 0) return cache->Embed(); - - const int n = fFonts->Length(); - for (int i = 0; i < n; i++) { - FontFile* f = fFonts->At(i); - if (strcmp(f->Name(), name) == 0) { - cache = f; - return f->Embed(); - } - } - return false; -} diff --git a/src/add-ons/print/drivers/pdf/source/PDFWriter.cpp b/src/add-ons/print/drivers/pdf/source/PDFWriter.cpp deleted file mode 100644 index 530090aca0..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFWriter.cpp +++ /dev/null @@ -1,2452 +0,0 @@ -/* - * Copyright 2001-2009, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Philippe Houdoin - * Simon Gauvin - * Michael Pfeiffer - */ - -/*! Based on: - - gdevbjc.c from Aladdin GhostScript - - LMDriver.cpp from Ryan Lockhart Lexmark 5/7xxxx BeOS driver -*/ - -#include "PDFWriter.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "Bezier.h" -#include "LinePathBuilder.h" -#include "DrawShape.h" -#include "Log.h" -#include "pdflib.h" -#include "Bookmark.h" -#include "XReferences.h" -#include "Report.h" - - -static const char* kEncodingDirectory = "PDF Writer"; -static const char* kSettingsDirectory = "PDF Writer"; -static const char* kBookmarksDirectory = "bookmarks"; -static const char* kCrossReferencesDirectory = "xrefs"; - - -PDFWriter::PDFWriter() - : - PrinterDriver(), - fTextLine(this) -{ - fFontSearchOrder[0] = japanese_encoding; - fFontSearchOrder[1] = chinese_cns1_encoding; - fFontSearchOrder[2] = chinese_gb1_encoding; - fFontSearchOrder[3] = korean_encoding; - - fPage = 0; - fEmbedMaxFontSize = 250 * 1024; - fScreen = new BScreen(); - fFonts = NULL; - fBookmark = new Bookmark(this); - fXRefs = new XRefDefs(); - fXRefDests = NULL; -} - - -PDFWriter::~PDFWriter() -{ - delete fScreen; - delete fFonts; - delete fBookmark; - delete fXRefs; - delete fXRefDests; -} - - -// #pragma mark Public methods - - -status_t -PDFWriter::PrintPage(int32 pageNumber, int32 pageCount) -{ - status_t status; - BRect r; - uint32 pictureCount; - BRect paperRect; - BRect printRect; - BRect *picRects; - BPoint *picPoints; - BRegion *picRegion; - BPicture **pictures; - uint32 i; - int32 orientation; - - status = B_OK; - - fPage = pageNumber; - - if (pageNumber == 1) { - if (MakesPattern()) { - REPORT(kDebug, fPage, ">>>>> Collecting patterns..."); - } else if (MakesPDF()) { - REPORT(kDebug, fPage, ">>>>> Generating PDF..."); - fImageCache.NextPass(); - } - } - - paperRect = JobMsg()->FindRect("paper_rect"); - printRect = JobMsg()->FindRect("printable_rect"); - if (B_OK != JobMsg()->FindInt32("orientation", &orientation)) orientation = 0; - if (orientation == 1) { - printRect.Set(printRect.top, printRect.left, - printRect.bottom, printRect.right); - } - - JobFile()->Read(&pictureCount, sizeof(uint32)); - - // TODO: error checking! - pictures = (BPicture **)malloc(pictureCount * sizeof(BPicture *)); - picRects = (BRect *)malloc(pictureCount * sizeof(BRect)); - picPoints = (BPoint *)malloc(pictureCount * sizeof(BPoint)); - picRegion = new BRegion(); - - for (i = 0; i < pictureCount; i++) { - JobFile()->Seek(40 + sizeof(off_t), SEEK_CUR); - JobFile()->Read(&picPoints[i], sizeof(BPoint)); - JobFile()->Read(&picRects[i], sizeof(BRect)); - pictures[i] = new BPicture(); - pictures[i]->Unflatten(JobFile()); - picRegion->Include(picRects[i]); - } - - r = picRegion->Frame(); - delete picRegion; - - PDF_TRY(fPdf) { - BeginPage(paperRect, printRect); - for (i = 0; i < pictureCount; i++) { - SetOrigin(picPoints[i]); - PushInternalState(); - Iterate(pictures[i]); - delete pictures[i]; - PopInternalState(); - } - EndPage(); - } PDF_CATCH(fPdf) { - REPORT(kError, 0, PDF_get_errmsg(fPdf)); - } - - free(pictures); - free(picRects); - free(picPoints); - - return status; -} - - -status_t -PDFWriter::BeginJob() -{ - fLog = fopen("/tmp/pdf_writer.log", "w"); - - PDF_boot(); - - fPdf = PDF_new2(_ErrorHandler, NULL, NULL, NULL, this); - // set *this* as pdf cookie - if (fPdf == NULL) - return B_ERROR; - - // load font embedding settings - fFonts = new Fonts(); - fFonts->CollectFonts(); - BMessage fonts; - if (B_OK == JobMsg()->FindMessage("fonts", &fonts)) - fFonts->SetTo(&fonts); - - // set font search order - int j = 0; - font_encoding enc; - bool active; - - for (int i = 0; j < no_of_cjk_encodings - && fFonts->GetCJKOrder(i, enc, active); i ++) { - if (active) fFontSearchOrder[j++] = enc; - } - for (; j < no_of_cjk_encodings; j ++) { - fFontSearchOrder[j] = invalid_encoding; - } - - return InitWriter(); -} - - -status_t -PDFWriter::EndJob() -{ -#ifdef DEBUG - Report* r = Report::Instance(); - int32 n = r->CountItems(); - fprintf(fLog, "Report:\n"); - fprintf(fLog, "=======\n"); - if (n == 0) { - fprintf(fLog, "\n"); - } - for (int32 i = 0; i < n; i++) { - ReportRecord* rr = r->ItemAt(i); - switch (rr->Kind()) { - case kInfo: fprintf(fLog, "Info"); break; - case kWarning: fprintf(fLog, "Warning"); break; - case kError: fprintf(fLog, "Error"); break; - case kDebug: fprintf(fLog, "Debug"); break; - } - fprintf(fLog, " %s", rr->Label()); - if (rr->Page() > 0) fprintf(fLog, " (Page %d)", (int)rr->Page()); - fprintf(fLog, ": %s\n", rr->Desc()); - } -#endif - fImageCache.Flush(); - - PDF_close(fPdf); - REPORT(kDebug, 0, ">>>> PDF_close"); - - PDF_delete(fPdf); - PDF_shutdown(); - - fclose(fLog); - return B_OK; -} - - -void -PDFWriter::SetAttribute(const char* name, const char* value) -{ - if (!name || !value) - return; - - BFile *file = dynamic_cast(Transport()); - if (file != NULL) - file->WriteAttr(name, B_STRING_TYPE, 0, value, strlen(value) + 1); -} - - -status_t -PDFWriter::InitWriter() -{ - char buffer[512]; - BString s; - - fState = NULL; - fStateDepth = 0; - - // Set MIME type explicit as we *do* know it's a PDF document - BFile *file = dynamic_cast(Transport()); - if (file) - BNodeInfo(file).SetType("application/pdf"); - - // pdflib scope: object -/* - const char* license_key; - if (JobMsg()->FindString("pdflib_license_key", &license_key) == B_OK && - license_key[0] != 0) { - REPORT(kDebug, 0, "license key found %s!", license_key); - PDF_set_parameter(fPdf, "license", license_key); - } -*/ - - fPDFVersion = kPDF13; - const char *compatibility; - if (JobMsg()->FindString("pdf_compatibility", &compatibility) == B_OK) { - PDF_set_parameter(fPdf, "compatibility", compatibility); - if (strcmp(compatibility, "1.3") == 0) fPDFVersion = kPDF13; - else if (strcmp(compatibility, "1.4") == 0) fPDFVersion = kPDF14; - else if (strcmp(compatibility, "1.5") == 0) fPDFVersion = kPDF15; - } - -/* - // set user/master password - BString master_password, user_password; - if (JobMsg()->FindString("master_password", &master_password) == B_OK && - JobMsg()->FindString("user_password", &user_password) == B_OK && - master_password.Length() > 0 && user_password.Length() > 0) { - PDF_set_parameter(fPdf, "masterpassword", master_password.String()); - PDF_set_parameter(fPdf, "userpassword", user_password.String()); - } - - // set permissions - BString permissions; - if (JobMsg()->FindString("permissions", &permissions) == B_OK && - permissions.Length() > 0) { - PDF_set_parameter(fPdf, "permissions", permissions.String()); - } -*/ - - REPORT(kDebug, 0, ">>>> PDF_open_mem"); - PDF_open_mem(fPdf, _WriteData); // use callback to stream PDF document data to printer transport - - // pdflib scope: - - PDF_set_parameter(fPdf, "flush", "content"); - - // set document info - BMessage doc; - bool setTitle = true; - bool setCreator = true; - if (JobMsg()->FindMessage("doc_info", &doc) == B_OK) { -#ifndef B_BEOS_VERSION_DANO - char *name; -#else - const char *name; -#endif - uint32 type; - int32 count; - for (int32 i = 0; doc.GetInfo(B_STRING_TYPE, i, &name, &type, &count) - != B_BAD_INDEX; i++) { - if (type == B_STRING_TYPE) { - BString value; - if (doc.FindString(name, &value) == B_OK && value != "") { - SetAttribute(name, value.String()); - BString s; - ToPDFUnicode(value.String(), s); - PDF_set_info(fPdf, name, s.String()); - } - } - } - BString s; - if (doc.FindString("Title", &s) == B_OK && s != "") - setTitle = false; - if (doc.FindString("Creator", &s) == B_OK && s != "") - setCreator = false; - } - - // find job title - if (setTitle && JobFile()->ReadAttr("_spool/Description", B_STRING_TYPE, 0, - buffer, sizeof(buffer))) { - SetAttribute("Title", buffer); - ToPDFUnicode(buffer, s); PDF_set_info(fPdf, "Title", s.String()); - } - - // find job creator - if (setCreator && JobFile()->ReadAttr("_spool/MimeType", B_STRING_TYPE, 0, - buffer, sizeof(buffer))) { - SetAttribute("Creator", buffer); - ToPDFUnicode(buffer, s); PDF_set_info(fPdf, "Creator", s.String()); - } - - int32 compression; - if (JobMsg()->FindInt32("pdf_compression", &compression) == B_OK) { - PDF_set_value(fPdf, "compress", compression); - } - - // PDF_set_parameter(fPdf, "warning", "false"); - - PDF_set_parameter(fPdf, "fontwarning", "false"); - // PDF_set_parameter(fPdf, "native-unicode", "true"); - - REPORT(kDebug, 0, "Start of declarations:"); - - DeclareEncodingFiles(); - DeclareFonts(); - - REPORT(kDebug, fPage, "End of declarations."); - - // Links - float width; - if (JobMsg()->FindFloat("link_border_width", &width) != B_OK) { - width = 1; - } - PDF_set_border_style(fPdf, "solid", width); - - if (JobMsg()->FindBool("create_web_links", &fCreateWebLinks) != B_OK) { - fCreateWebLinks = false; - } - - // Bookmarks - if (JobMsg()->FindBool("create_bookmarks", &fCreateBookmarks) != B_OK) { - fCreateBookmarks = false; - } - - if (fCreateBookmarks) { - BString name; - if (JobMsg()->FindString("bookmark_definition_file", &name) == B_OK - && LoadBookmarkDefinitions(name.String())) { - } else { - fCreateBookmarks = false; - } - } - - // Cross References - if (JobMsg()->FindBool("create_xrefs", &fCreateXRefs) != B_OK) { - fCreateXRefs = false; - } - - if (fCreateXRefs) { - BString name; - if (JobMsg()->FindString("xrefs_file", &name) == B_OK - && LoadXRefsDefinitions(name.String())) { - } else { - REPORT(kError, 0, "Could not read xrefs file!"); - fCreateXRefs = false; - } - } - - return B_OK; -} - - -void -PDFWriter::DeclareEncodingFiles() -{ - BPath prefix; - if (find_directory(B_SYSTEM_DATA_DIRECTORY, &prefix) != B_OK) - return; - - DeclareEncodingFile(&prefix, "t1enc0", "t1enc0.enc"); - DeclareEncodingFile(&prefix, "t1enc1", "t1enc1.enc"); - DeclareEncodingFile(&prefix, "t1enc2", "t1enc2.enc"); - DeclareEncodingFile(&prefix, "t1enc3", "t1enc3.enc"); - DeclareEncodingFile(&prefix, "t1enc4", "t1enc4.enc"); - - DeclareEncodingFile(&prefix, "ttenc0", "ttenc0.cpg"); - DeclareEncodingFile(&prefix, "ttenc1", "ttenc1.cpg"); - DeclareEncodingFile(&prefix, "ttenc2", "ttenc2.cpg"); - DeclareEncodingFile(&prefix, "ttenc3", "ttenc3.cpg"); - DeclareEncodingFile(&prefix, "ttenc4", "ttenc4.cpg"); -} - - -void -PDFWriter::DeclareEncodingFile(BPath* prefix, const char* id, const char* name) -{ - BPath path(*prefix); - path.Append(kEncodingDirectory); - path.Append(name); - - BString encodingDeclaration; - encodingDeclaration << id << "==" << path.Path(); - PDF_set_parameter(fPdf, "Encoding", encodingDeclaration.String()); -} - - -status_t -PDFWriter::DeclareFonts() -{ - char buffer[1024]; - const char *parameter_name; - - for (int i = 0; i < fFonts->Length(); i++) { - FontFile* f = fFonts->At(i); - if (f->Type() == true_type_type) { - parameter_name = "FontOutline"; - } else { // f->Type() == type1_type - if (strstr(f->Path(), ".afm")) - parameter_name = "FontAFM"; - else if (strstr(f->Path(), ".pfm")) - parameter_name = "FontPFM"; - else // should not reach here! - continue; - } -#ifndef __POWERPC__ - snprintf(buffer, sizeof(buffer), "%s==%s", f->Name(), f->Path()); -#else - sprintf(buffer, "%s==%s", f->Name(), f->Path()); -#endif - PDF_set_parameter(fPdf, parameter_name, buffer); - } - return B_OK; -} - - -bool -PDFWriter::LoadBookmarkDefinitions(const char* name) -{ - BPath path; - if (find_directory(B_USER_SETTINGS_DIRECTORY, &path, true) != B_OK) - return false; - - path.Append(kSettingsDirectory); - path.Append(kBookmarksDirectory); - - return fBookmark->Read(path.Path()); -} - - -bool -PDFWriter::LoadXRefsDefinitions(const char* name) -{ - BPath path; - if (find_directory(B_USER_SETTINGS_DIRECTORY, &path, true) != B_OK) - return false; - - path.Append(kSettingsDirectory); - path.Append(kCrossReferencesDirectory); - - if (!fXRefs->Read(path.Path())) - return false; - - fXRefDests = new XRefDests(fXRefs->Count()); - return true; -} - - -status_t -PDFWriter::BeginPage(BRect paperRect, BRect printRect) -{ - float width = paperRect.Width() < 10 ? a4_width : paperRect.Width(); - float height = paperRect.Height() < 10 ? a4_height : paperRect.Height(); - - fMode = kDrawingMode; - - ASSERT(fState == NULL); - fState = new State(height, printRect.left, printRect.top); - - if (MakesPDF()) - PDF_begin_page(fPdf, width, height); - - REPORT(kDebug, fPage, ">>>> PDF_begin_page [%f, %f]", width, height); - - if (MakesPDF()) - PDF_initgraphics(fPdf); - - fState->penX = 0; - fState->penY = 0; - - // TODO: should we clip to the printRect here? - - PushState(); // so that fState->prev != NULL - - return B_OK; -} - - -status_t -PDFWriter::EndPage() -{ - fTextLine.Flush(); - if (fCreateBookmarks) fBookmark->CreateBookmarks(); - - while (fState->prev != NULL) PopState(); - - if (MakesPDF()) - PDF_end_page(fPdf); - REPORT(kDebug, fPage, ">>>> PDF_end_page"); - - delete fState; fState = NULL; - - return B_OK; -} - - -// #pragma mark PDFlib callbacks - - -size_t -PDFWriter::WriteData(void *data, size_t size) -{ - REPORT(kDebug, fPage, ">>>> WriteData %p, %ld", data, size); - - return Transport()->Write(data, size); -} - - -void -PDFWriter::ErrorHandler(int type, const char *msg) -{ - REPORT(kError, fPage, "PDFlib %d: %s", type, msg); -} - - -// #pragma mark Generic drawing support routines - - -void -PDFWriter::PushInternalState() -{ - REPORT(kDebug, fPage, "PushInternalState"); - fState = new State(fState); fStateDepth ++; -} - - -bool -PDFWriter::PopInternalState() -{ - REPORT(kDebug, fPage, "PopInternalState"); - if (fStateDepth != 0) { - State* s = fState; fStateDepth --; - fState = fState->prev; - delete s; - return true; - } else { - REPORT(kDebug, fPage, "State stack underflow!"); - return false; - } -} - - -PDFWriter::Transparency* -PDFWriter::FindTransparency(uint8 alpha) -{ - const int n = fTransparencyCache.CountItems(); - for (int i = 0; i < n; i ++) { - Transparency* t = fTransparencyCache.ItemAt(i); - if (t->Matches(alpha)) { - // return handle for existing gstate - return t; - } - } - - // create new handle for gstate - char trans[256]; - float a = (float)alpha/255.0; - sprintf(trans, "opacitystroke=%f opacityfill=%f", a, a); - - volatile int handle = -1; - PDF_TRY(fPdf) { - handle = PDF_create_gstate(fPdf, trans); - } PDF_CATCH(fPdf) { - REPORT(kError, 0, PDF_get_errmsg(fPdf)); - } - REPORT(kDebug, fPage, trans); - - if (handle >= 0) { - // store in cache - Transparency* t = new Transparency(alpha, handle); - fTransparencyCache.AddItem(t); - return t; - } - - return NULL; -} - - -void -PDFWriter::BeginTransparency() -{ - if (!SupportsOpacity() || !MakesPDF() || !IsDrawing()) - return; - - REPORT(kDebug, fPage, ">>> BeginTransparency"); - REPORT(kDebug, fPage, "current_color(%d, %d, %d, %d)", - fState->currentColor.red, fState->currentColor.green, - fState->currentColor.blue, fState->currentColor.alpha); - REPORT(kDebug, fPage, "drawing_mode %d alpha %d", (int)fState->drawingMode, - (int)fState->currentColor.alpha); - - uint8 alpha = fState->currentColor.alpha; - if (fState->drawingMode == B_OP_ALPHA && alpha < 255) { - PDF_save(fPdf); - Transparency* t = FindTransparency(alpha); - if (t != NULL) { - PDF_TRY(fPdf) { - PDF_set_gstate(fPdf, t->Handle()); - } PDF_CATCH(fPdf) { - REPORT(kError, 0, PDF_get_errmsg(fPdf)); - } - fTransparencyStack.AddItem(t); - return; - } - } - // if transparency is not set then push NULL to transparency stack - fTransparencyStack.AddItem(NULL); -} - - -void -PDFWriter::EndTransparency() -{ - if (!SupportsOpacity() || !MakesPDF() || !IsDrawing()) return; - REPORT(kDebug, fPage, "<<< EndTransparency"); - int lastItem = fTransparencyStack.CountItems()-1; - Transparency* t = fTransparencyStack.RemoveItem(lastItem); - - if (t != NULL) { - PDF_restore(fPdf); - } -} - - -void -PDFWriter::SetColor(rgb_color color) -{ - if (!MakesPDF()) { - // create PDFlib gstate handles - if (SupportsOpacity() && fState->currentColor.alpha != color.alpha - && color.alpha < 255) { - FindTransparency(color.alpha); - } - } else if (fState->currentColor.red != color.red || - fState->currentColor.blue != color.blue || - fState->currentColor.green != color.green || - fState->currentColor.alpha != color.alpha) { - fState->currentColor = color; - float red = color.red / 255.0; - float green = color.green / 255.0; - float blue = color.blue / 255.0; - PDF_setcolor(fPdf, "both", "rgb", red, green, blue, 0.0); - REPORT(kDebug, fPage, "set_color(%f, %f, %f, %f)", red, green, blue, - color.alpha / 255.0); - } -} - - -int -PDFWriter::FindPattern() -{ - // TODO: use hashtable instead of BList for fPatterns - const int n = fPatterns.CountItems(); - for (int i = 0; i < n; i ++) { - Pattern* p = fPatterns.ItemAt(i); - if (p->Matches(fState->pattern0, fState->backgroundColor, - fState->foregroundColor)) - return p->patternId; - } - return -1; -} - - -void -PDFWriter::CreatePattern() -{ - REPORT(kDebug, fPage, "CreatePattern"); -#if 1 - // use filled pathes for pattern - // pro: see con of bitmap pattern - // con: not rendered (correctly) in BePDF with small zoom factor - int pattern = PDF_begin_pattern(fPdf, 8, 8, 8, 8, 1); - - if (pattern == -1) { - REPORT(kError, fPage, "CreatePattern could not create pattern"); - return; - } - - const int kPassForeground = 0; - const int kPassBackground = 1; - const int kNumPasses = 2; - - for (int pass = 0; pass < kNumPasses; pass ++) { - float r, g, b; - bool is_transparent; - - if (pass == kPassForeground) { - r = fState->foregroundColor.red / 255.0; - g = fState->foregroundColor.green / 255.0; - b = fState->foregroundColor.blue / 255.0; - is_transparent = fState->foregroundColor.alpha < 128; - } else { - r = fState->backgroundColor.red / 255.0; - g = fState->backgroundColor.green / 255.0; - b = fState->backgroundColor.blue / 255.0; - is_transparent = fState->backgroundColor.alpha < 128; - } - - PDF_setcolor(fPdf, "fill", "rgb", r, g, b, 0); - - if (is_transparent) continue; - - uint8* data = (uint8*)fState->pattern0.data; - for (int8 y = 0; y <= 7; y ++, data ++) { - uint8 d = *data; - for (int8 x = 0; x <= 7; x ++, d >>= 1) { - if ((d & 1) == 1) { // foreground - if (pass != kPassForeground) continue; - } else { // background - if (pass != kPassBackground) continue; - } - - // create rectangle for pixel - float x1 = x + 1, y1 = y + 1; - PDF_moveto(fPdf, x, y); - PDF_lineto(fPdf, x, y1); - PDF_lineto(fPdf, x1, y1); - PDF_lineto(fPdf, x1, y); - PDF_closepath(fPdf); - PDF_fill(fPdf); - } - } - } - - PDF_end_pattern(fPdf); - -#else - // use bitmap for pattern - // pro: BePDF renders pattern also with small zoom factor - // con: BePDF omits mask during rendering - BBitmap bm(BRect(0, 0, 7, 7), B_RGBA32); - - uint8* data = (uint8*)fState->pattern0.data; - rgb_color h = fState->foregroundColor; - rgb_color l = fState->backgroundColor; - if (h.alpha < 128) { - h.red = h.green = h.blue = 255; - } - if (l.alpha < 128) { - l.red = l.green = l.blue = 255; - } - - uint8* row = (uint8*)bm.Bits(); - for (int8 y = 0; y <= 7; y ++, data ++) { - uint8 d = *data; - uint8* b = row; row += bm.BytesPerRow(); - for (int8 x = 0; x <= 7; x ++, d >>= 1, b += 4) { - if (d & 1 == 1) { - b[2] = h.red; //fState->foregroundColor.red; - b[1] = h.green; //fState->foregroundColor.green; - b[0] = h.blue; //fState->foregroundColor.blue; - b[3] = h.alpha; //fState->foregroundColor.alpha; - } else { - b[2] = l.red; //fState->backgroundColor.red; - b[1] = l.green; //fState->backgroundColor.green; - b[0] = l.blue; //fState->backgroundColor.blue; - b[3] = l.alpha; //fState->backgroundColor.alpha; - } - } - } - - int mask, image; - - if (!GetImages(bm.Bounds(), 8, 8, bm.BytesPerRow(), bm.ColorSpace(), 0, - bm.Bits(), &mask, &image)) { - return; - } - - int pattern = PDF_begin_pattern(fPdf, 8, 8, 8, 8, 1); - if (pattern == -1) { - REPORT(kError, fPage, "CreatePattern could not create pattern"); -#if !USE_IMAGE_CACHE - PDF_close_image(fPdf, image); - if (mask != -1) PDF_close_image(fPdf, mask); -#endif - return; - } - PDF_setcolor(fPdf, "both", "rgb", 0, 0, 1, 0); - PDF_place_image(fPdf, image, 0, 0, 1); - PDF_end_pattern(fPdf); -#if !USE_IMAGE_CACHE - PDF_close_image(fPdf, image); - if (mask != -1) PDF_close_image(fPdf, mask); -#endif -#endif - - Pattern* p = new Pattern(fState->pattern0, fState->backgroundColor, - fState->foregroundColor, pattern); - fPatterns.AddItem(p); -} - - -void -PDFWriter::SetPattern() -{ - REPORT(kDebug, fPage, "SetPattern (bitmap version)"); - if (MakesPattern()) { - if (FindPattern() == -1) CreatePattern(); - } else { - int pattern = FindPattern(); - if (pattern != -1) { - PDF_setcolor(fPdf, "both", "pattern", pattern, 0, 0, 0); - } else { - // TODO: fall back to another method - REPORT(kError, fPage, "pattern missing!"); - } - } -} - - -void -PDFWriter::StrokeOrClip() -{ - if (IsDrawing()) { - PDF_stroke(fPdf); - } else { - REPORT(kError, fPage, "Clipping not implemented for this primitive!!!"); - PDF_closepath(fPdf); - } -} - - -void -PDFWriter::FillOrClip() -{ - if (IsDrawing()) { - PDF_fill(fPdf); - } else { - PDF_closepath(fPdf); - } -} - - -void -PDFWriter::Paint(bool stroke) -{ - if (stroke) { - StrokeOrClip(); - } else { - FillOrClip(); - } -} - - -void -PDFWriter::SetColor() -{ - if (IsSame(fState->pattern0, B_SOLID_HIGH)) { - SetColor(fState->foregroundColor); - } else if (IsSame(fState->pattern0, B_SOLID_LOW)) { - SetColor(fState->backgroundColor); - } else { - SetPattern(); - } -} - - -// #pragma mark Image drawing support routines - - -int32 -PDFWriter::BytesPerPixel(int32 pixelFormat) -{ - switch (pixelFormat) { - case B_RGB32: // fall through - case B_RGB32_BIG: // fall through - case B_RGBA32: // fall through - case B_RGBA32_BIG: - return 4; - - case B_RGB24_BIG: // fall through - case B_RGB24: - return 3; - - case B_RGB16: // fall through - case B_RGB16_BIG: // fall through - case B_RGB15: // fall through - case B_RGB15_BIG: // fall through - case B_RGBA15: // fall through - case B_RGBA15_BIG: - return 2; - - case B_GRAY8: // fall through - case B_CMAP8: - return 1; - case B_GRAY1: - return 0; - default: return -1; - } -} - - -bool -PDFWriter::HasAlphaChannel(int32 pixelFormat) -{ - switch (pixelFormat) { - case B_RGB32: // fall through - case B_RGB32_BIG: // fall through - case B_RGBA32: // fall through - case B_RGBA32_BIG: // fall through -// case B_RGB24: // fall through -// case B_RGB24_BIG: // fall through -// case B_RGB16: // fall through -// case B_RGB16_BIG: // fall through - case B_RGB15: // fall through - case B_RGB15_BIG: // fall through - case B_RGBA15: // fall through - case B_RGBA15_BIG: // fall through - case B_CMAP8: - return true; - default: - return false; - } -} - - -bool -PDFWriter::NeedsBPC1Mask(int32 pixelFormat) -{ - switch (pixelFormat) { -// case B_RGB32: // fall through -// case B_RGB32_BIG: // fall through - case B_RGB15: // fall through - case B_RGB15_BIG: // fall through - case B_RGBA15: // fall through - case B_RGBA15_BIG: // fall through - case B_CMAP8: - return true; - default: - return false; - }; -} - - -bool -PDFWriter::IsTransparentRGB32(uint8* in) -{ - return *((uint32*)in) == B_TRANSPARENT_MAGIC_RGBA32; -} - - -bool -PDFWriter::IsTransparentRGB32_BIG(uint8* in) -{ - return *(uint32*)in == B_TRANSPARENT_MAGIC_RGBA32_BIG; -} - - -bool -PDFWriter::IsTransparentRGBA32(uint8* in) -{ - return in[3] < 128 || IsTransparentRGB32(in); -} - - -bool -PDFWriter::IsTransparentRGBA32_BIG(uint8* in) -{ - return in[0] < 127 || IsTransparentRGB32_BIG(in); -} - - -bool -PDFWriter::IsTransparentRGB15(uint8* in) -{ - return *((uint16*)in) == B_TRANSPARENT_MAGIC_RGBA15; -} - - -bool -PDFWriter::IsTransparentRGB15_BIG(uint8* in) -{ - // 01234567 01234567 - // 00123434 01201234 - // -RRRRRGG GGGBBBBB - return *(uint16*)in == B_TRANSPARENT_MAGIC_RGBA15_BIG; -} - - -bool -PDFWriter::IsTransparentRGBA15(uint8* in) -{ - // 01234567 01234567 - // 01201234 00123434 - // GGGBBBBB ARRRRRGG - return (in[1] & 1) == 0 || IsTransparentRGB15(in); -} - - -bool -PDFWriter::IsTransparentRGBA15_BIG(uint8* in) -{ - // 01234567 01234567 - // 00123434 01201234 - // ARRRRRGG GGGBBBBB - return (in[0] & 1) == 0 || IsTransparentRGB15_BIG(in); -} - - -bool -PDFWriter::IsTransparentCMAP8(uint8* in) -{ - return *in == B_TRANSPARENT_MAGIC_CMAP8; -} - - -uint8 * -PDFWriter::CreateMask(BRect src, int32 bytesPerRow, int32 pixelFormat, - int32 flags, void *data) -{ - uint8 *in; - uint8 *inRow; - int32 x, y; - - uint8 *mask; - uint8 *maskRow; - uint8 *out; - int32 maskWidth; - uint8 shift; - bool alpha; - int32 bpp; - - bpp = BytesPerPixel(pixelFormat); - if (bpp < 0) - return NULL; - - int32 width = src.IntegerWidth() + 1; - int32 height = src.IntegerHeight() + 1; - - // Image Mask - inRow = (uint8 *) data; - inRow += bytesPerRow * (int) src.top + bpp * (int) src.left; - - maskWidth = (width+7)/8; - maskRow = mask = new uint8[maskWidth * height]; - memset(mask, 0, maskWidth*height); - alpha = false; - - for (y = height; y > 0; y--) { - in = inRow; - out = maskRow; - shift = 7; - - bool a = false; - - for (x = width; x > 0; x-- ) { - // For each pixel - switch (pixelFormat) { - case B_RGB32: a = IsTransparentRGB32(in); break; - case B_RGB32_BIG: a = IsTransparentRGB32_BIG(in); break; - case B_RGBA32: a = IsTransparentRGBA32(in); break; - case B_RGBA32_BIG: a = IsTransparentRGBA32_BIG(in); break; - //case B_RGB24: a = IsTransparentRGB24(in); break; - //case B_RGB24_BIG: a = IsTransparentRGB24_BIG(in); break; - //case B_RGB16: a = IsTransparentRGB16(in); break; - //case B_RGB16_BIG: a = IsTransparentRGB16_BIG(in); break; - case B_RGB15: a = IsTransparentRGB15(in); break; - case B_RGB15_BIG: a = IsTransparentRGB15_BIG(in); break; - case B_RGBA15: a = IsTransparentRGBA15(in); break; - case B_RGBA15_BIG: a = IsTransparentRGBA15_BIG(in); break; - case B_CMAP8: a = IsTransparentCMAP8(in); break; - //case B_GRAY8: a = IsTransparentGRAY8(in); break; - //case B_GRAY1: a = false; break; - default: - a = false; // should not reach here - REPORT(kDebug, fPage, - "CreateMask: non transparentable pixelFormat"); - } - - if (a) { - out[0] |= (1 << shift); - alpha = true; - } - // next pixel - if (shift == 0) out ++; - shift = (shift + 7) & 0x07; - in += bpp; - } - - // next row - inRow += bytesPerRow; - maskRow += maskWidth; - } - - if (!alpha) { - delete []mask; - mask = NULL; - } - return mask; -} - - -uint8 -PDFWriter::AlphaFromRGBA32(uint8* in) -{ - return in[2]; -} - - -uint8 -PDFWriter::AlphaFromRGBA32_BIG(uint8* in) -{ - return in[0]; -} - - -uint8 * -PDFWriter::CreateSoftMask(BRect src, int32 bytesPerRow, int32 pixelFormat, - int32 flags, void *data) -{ -#if 1 - // TODO: CreateSoftMask??? - return NULL; -#else - static bool errorReported = false; - - uint8 *in; - uint8 *inRow; - int32 x, y; - - uint8 *mask; - uint8 *maskRow; - uint8 *out; - bool alpha; - int32 bpp; - - bpp = BytesPerPixel(pixelFormat); - if (bpp < 0) - return NULL; - - int32 width = src.IntegerWidth() + 1; - int32 height = src.IntegerHeight() + 1; - - // Image Mask - inRow = (uint8 *) data; - inRow += bytesPerRow * (int) src.top + bpp * (int) src.left; - - // soft mask with 8 bits per component - maskRow = mask = new uint8[width * height]; - memset(mask, 0, width * height); - alpha = false; - - for (y = height; y > 0; y--) { - in = inRow; - out = maskRow; - - uint8 a; - - for (x = width; x > 0; x-- ) { - // For each pixel - switch (pixelFormat) { - case B_RGB32: // fall through - case B_RGBA32: - a = AlphaFromRGBA32(in); - break; - - case B_RGB32_BIG: // fall through - case B_RGBA32_BIG: - a = AlphaFromRGBA32_BIG(in); - break; - - default: - a = 255; // should not reach here - if (!errorReported) { - REPORT(kDebug, fPage, - "CreateSoftMask: non transparentable pixelFormat"); - errorReported = true; - } - } - - *out = a; - if (a != 255) { - alpha = true; - } - // next pixel - out ++; - in += bpp; - } - - // next row - inRow += bytesPerRow; - maskRow += width; - } - - if (!alpha) { - delete []mask; - mask = NULL; - } - return mask; -#endif -} - - -void -PDFWriter::ConvertFromRGB32(uint8* in, uint8 *out) -{ - *((rgb_color*)out) = *((rgb_color*)in); -} - - -void -PDFWriter::ConvertFromRGBA32(uint8* in, uint8 *out) -{ - *((rgb_color*)out) = *((rgb_color*)in); -} - - -void -PDFWriter::ConvertFromRGB24(uint8* in, uint8 *out) -{ - out[0] = in[0]; - out[1] = in[1]; - out[2] = in[2]; - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGB16(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 01201234 01234345 - // GGGBBBBB RRRRRGGG - out[0] = in[0] & 0xf8; // blue - out[1] = ((in[0] & 7) << 2) | (in[1] & 0xe0); // green - out[2] = in[1] << 3; // red - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGB15(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 01201234 00123434 - // GGGBBBBB -RRRRRGG - out[0] = in[0] & 0xf8; // blue - out[1] = ((in[0] & 7) << 3) | (in[1] & 0xc0); // green - out[2] = (in[1] & ~1) << 2; // red - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGBA15(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 01201234 00123434 - // GGGBBBBB ARRRRRGG - out[0] = in[0] & 0xf8; // blue - out[1] = ((in[0] & 7) << 3) | (in[1] & 0xc0); // green - out[2] = (in[1] & ~1) << 2; // red - out[3] = in[1] << 7; -} - - -void -PDFWriter::ConvertFromCMAP8(uint8* in, uint8 *out) -{ - rgb_color c = fScreen->ColorForIndex(in[0]); - out[0] = c.blue; - out[1] = c.green; - out[2] = c.red; - out[3] = c.alpha; -} - - -void -PDFWriter::ConvertFromGRAY8(uint8* in, uint8 *out) -{ - out[0] = in[0]; - out[1] = in[0]; - out[2] = in[0]; - out[3] = 255; -} - - -void -PDFWriter::ConvertFromGRAY1(uint8* in, uint8 *out, int8 bit) -{ - uint8 gray = (in[0] & (1 << bit)) ? 255 : 0; - out[0] = gray; - out[1] = gray; - out[2] = gray; - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGB32_BIG(uint8* in, uint8 *out) -{ - out[0] = in[3]; - out[1] = in[2]; - out[2] = in[1]; - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGBA32_BIG(uint8* in, uint8 *out) -{ - out[0] = in[3]; - out[1] = in[2]; - out[2] = in[1]; - out[3] = in[0]; -} - - -void -PDFWriter::ConvertFromRGB24_BIG(uint8* in, uint8 *out) -{ - out[0] = in[2]; - out[1] = in[1]; - out[2] = in[0]; - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGB16_BIG(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 01234345 01201234 - // RRRRRGGG GGGBBBBB - out[0] = in[2] & 0xf8; // blue - out[1] = ((in[1] & 7) << 2) | (in[0] & 0xe0); // green - out[2] = in[0] << 3; // red - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGB15_BIG(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 00123434 01201234 - // -RRRRRGG GGGBBBBB - out[0] = in[1] & 0xf8; // blue - out[1] = ((in[1] & 7) << 3) | (in[0] & 0xc0); // green - out[2] = (in[0] & ~1) << 2; // red - out[3] = 255; -} - - -void -PDFWriter::ConvertFromRGBA15_BIG(uint8* in, uint8 *out) -{ - // 01234567 01234567 - // 00123434 01201234 - // ARRRRRGG GGGBBBBB - out[0] = in[1] & 0xf8; // blue - out[1] = ((in[1] & 7) << 3) | (in[0] & 0xc0); // green - out[2] = (in[0] & ~1) << 2; // red - out[3] = in[0] << 7; -} - - -//! Convert and clip bits to colorspace B_RGBA32 -BBitmap * -PDFWriter::ConvertBitmap(BRect src, int32 bytesPerRow, int32 pixelFormat, - int32 flags, void *data) -{ - uint8 *in; - uint8 *inLeft; - uint8 *out; - uint8 *outLeft; - int32 x, y; - int8 bit; - int32 bpp = 4; - - bpp = BytesPerPixel(pixelFormat); - if (bpp < 0) - return NULL; - - int32 width = src.IntegerWidth(); - int32 height = src.IntegerHeight(); - BBitmap *bm = new BBitmap(BRect(0, 0, width, height), B_RGB32); - if (!bm->IsValid()) { - delete bm; - REPORT(kError, fPage, "BBitmap constructor failed"); - return NULL; - } - - inLeft = (uint8 *)data; - inLeft += bytesPerRow * (int)src.top + bpp * (int)src.left; - outLeft = (uint8*)bm->Bits(); - - for (y = height; y >= 0; y--) { - in = inLeft; - out = outLeft; - - for (x = 0; x <= width; x++) { - // For each pixel - switch (pixelFormat) { - case B_RGB32: ConvertFromRGB32(in, out); break; - case B_RGBA32: ConvertFromRGBA32(in, out); break; - case B_RGB24: ConvertFromRGB24(in, out); break; - case B_RGB16: ConvertFromRGB16(in, out); break; - case B_RGB15: ConvertFromRGB15(in, out); break; - case B_RGBA15: ConvertFromRGBA15(in, out); break; - case B_CMAP8: ConvertFromCMAP8(in, out); break; - case B_GRAY8: ConvertFromGRAY8(in, out); break; - case B_GRAY1: - bit = x & 7; - ConvertFromGRAY1(in, out, bit); - if (bit == 7) in ++; - break; - case B_RGB32_BIG: ConvertFromRGB32_BIG(in, out); break; - case B_RGBA32_BIG: ConvertFromRGBA32_BIG(in, out); break; - case B_RGB24_BIG: ConvertFromRGB24_BIG(in, out); break; - case B_RGB16_BIG: ConvertFromRGB16_BIG(in, out); break; - case B_RGB15_BIG: ConvertFromRGB15_BIG(in, out); break; - case B_RGBA15_BIG: ConvertFromRGBA15_BIG(in, out); break; - default:; // should not reach here - } - in += bpp; // next pixel - out += 4; - } - - // next row - inLeft += bytesPerRow; - outLeft += bm->BytesPerRow(); - } - - return bm; -} - - -bool -PDFWriter::StoreTranslatorBitmap(BBitmap *bitmap, const char *filename, - uint32 type) -{ - BTranslatorRoster *roster = BTranslatorRoster::Default(); - if (!roster) { - REPORT(kDebug, fPage, "TranslatorRoster is NULL!"); - return false; - } - BBitmapStream stream(bitmap); // init with contents of bitmap -/* - translator_info info, *i = NULL; - if (quality != -1.0 && roster->Identify(&stream, NULL, &info) == B_OK) { - #ifdef DEBUG - LOG((fLog, ">>> translator_info:\n")); - LOG((fLog, " type = %4.4s\n", (char*)&info.type)); - LOG((fLog, " id = %d\n", info.translator)); - LOG((fLog, " group = %4.4s\n", (char*)&info.group)); - LOG((fLog, " quality = %f\n", info.quality)); - LOG((fLog, " capability = %f\n", info.type)); - LOG((fLog, " name = %s\n", info.name)); - LOG((fLog, " MIME = %s\n", info.MIME)); - #endif - - int32 numInfo; - translator_info *tInfo = NULL; - if (roster->GetTranslators(&stream, NULL, &tInfo, &numInfo, - info.type, NULL, type) == B_OK) { - -// #ifdef DEBUG - for (int j = 0; j < numInfo; j++) { - LOG((fLog, ">>> translator_info [%d]:\n", j)); - LOG((fLog, " type = %4.4s\n", (char*)&tInfo[j].type)); - LOG((fLog, " id = %d\n", tInfo[j].translator)); - LOG((fLog, " group = %4.4s\n", (char*)&tInfo[j].group)); - LOG((fLog, " quality = %f\n", tInfo[j].quality)); - LOG((fLog, " capability = %f\n", tInfo[j].type)); - LOG((fLog, " name = %s\n", tInfo[j].name)); - LOG((fLog, " MIME = %s\n", tInfo[j].MIME)); - } -// #endif - - BMessage m; - status_t s = roster->GetConfigurationMessage(tInfo[0].translator, &m); - if (s == B_OK) { - fMessagePrinter.Print(&m); - } else { - LOG((fLog, "ERROR: could not get configuration message %d\n", s)); - } - - info = tInfo[0]; - info.quality = quality; - delete []tInfo; - - i = &info; - } - } -*/ - BFile file(filename, B_CREATE_FILE | B_WRITE_ONLY | B_ERASE_FILE); - bool res = roster->Translate(&stream, NULL /*i*/, NULL, &file, type) == B_OK; - BBitmap *bm = NULL; - // detach bitmap so BBitmapStream destructor does not delete our bitmap! - stream.DetachBitmap(&bm); - ASSERT(bm == bitmap); - return res; -} - - -bool -PDFWriter::GetImages(BRect src, int32 /*width*/, int32 /*height*/, - int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data, int* maskId, - int* image) -{ - uint8 *mask = NULL; - *maskId = -1; - - int32 width = src.IntegerWidth() + 1; - int32 height = src.IntegerHeight() + 1; - - int length = 0; - int bpc = 0; - - if (HasAlphaChannel(pixelFormat)) { - if (NeedsBPC1Mask(pixelFormat) || !SupportsSoftMask()) { - int32 w = (width+7)/8; - length = w * height; - bpc = 1; - mask = CreateMask(src, bytesPerRow, pixelFormat, flags, data); - REPORT(kDebug, fPage, "Mask created mask = %p", mask); - } else { - length = width * height; - bpc = 8; - mask = CreateSoftMask(src, bytesPerRow, pixelFormat, flags, data); - REPORT(kDebug, fPage, "SoftMask created mask = %p", mask); - } - } - - if (mask) { -// PDFlib deprecated: -// *maskId = PDF_open_image(fPdf, "raw", "memory", (const char *) mask, length, width, height, 1, bpc, "mask"); -#if USE_IMAGE_CACHE - *maskId = fImageCache.GetMask(fPdf, (char*)mask, length, width, height, bpc); -#else - BString options; - PDF_create_pvf(fPdf, "mask", 0, mask, length, NULL); - options << "width " << width << " height " << height << " components 1 bpc " << bpc; - *maskId = PDF_load_image(fPdf, "raw", "mask", 0, options.String()); - PDF_delete_pvf(fPdf, "mask", 0); -#endif - delete []mask; - } - - BBitmap * bm = ConvertBitmap(src, bytesPerRow, pixelFormat, flags, data); - if (!bm) { - REPORT(kError, fPage, "ConvertBitmap failed!"); -#if !USE_IMAGE_CACHE - if (*maskId != -1) PDF_close_image(fPdf, *maskId); -#endif - return false; - } - -#if USE_IMAGE_CACHE - *image = fImageCache.GetImage(fPdf, bm, *maskId); - delete bm; -#else - char *pdfLibFormat = "png"; - char *bitmapFileName = "/tmp/pdfwriter.png"; - const uint32 beosFormat = B_PNG_FORMAT; - - if (!StoreTranslatorBitmap(bm, bitmapFileName, beosFormat)) { - delete bm; - REPORT(kError, fPage, "StoreTranslatorBitmap failed"); -#if !USE_IMAGE_CACHE - if (*maskId != -1) PDF_close_image(fPdf, *maskId); -#endif - return false; - } - delete bm; - - *image = PDF_open_image_file(fPdf, pdfLibFormat, bitmapFileName, - *maskId == -1 ? "" : "masked", *maskId == -1 ? 0 : *maskId); -#endif - - return *image >= 0; -} - - -// #pragma mark BPicture playback handlers - - -void -PDFWriter::Op(int number) -{ - REPORT(kError, fPage, "Unhandled operand %d", number); -} - - -void -PDFWriter::MovePenBy(BPoint delta) -{ - REPORT(kDebug, fPage, "MovePenBy delta=[%f, %f]", delta.x, delta.y); - fState->penX += delta.x; - fState->penY += delta.y; -} - - -void -PDFWriter::StrokeLine(BPoint start, BPoint end) -{ - REPORT(kDebug, fPage, "StrokeLine start=[%f, %f], end=[%f, %f]", - start.x, start.y, end.x, end.y); - - SetColor(); - if (!MakesPDF()) - return; - - if (IsClipping()) { - BShape shape; - shape.MoveTo(start); - shape.LineTo(end); - StrokeShape(&shape); - } else { - BeginTransparency(); - PDF_moveto(fPdf, tx(start.x), ty(start.y)); - PDF_lineto(fPdf, tx(end.x), ty(end.y)); - StrokeOrClip(); - EndTransparency(); - } -} - - -void -PDFWriter::StrokeRect(BRect rect) -{ - REPORT(kDebug, fPage, "StrokeRect rect=[%f, %f, %f, %f]", - rect.left, rect.top, rect.right, rect.bottom); - - SetColor(); - if (!MakesPDF()) - return; - - if (IsClipping()) { - BShape shape; - shape.MoveTo(BPoint(rect.left, rect.top)); - shape.LineTo(BPoint(rect.right, rect.top)); - shape.LineTo(BPoint(rect.right, rect.bottom)); - shape.LineTo(BPoint(rect.left, rect.bottom)); - shape.Close(); - StrokeShape(&shape); - } else { - BeginTransparency(); - PDF_rect(fPdf, tx(rect.left), ty(rect.bottom), scale(rect.Width()), - scale(rect.Height())); - StrokeOrClip(); - EndTransparency(); - } -} - - -void -PDFWriter::FillRect(BRect rect) -{ - REPORT(kDebug, fPage, "FillRect rect=[%f, %f, %f, %f]", - rect.left, rect.top, rect.right, rect.bottom); - - SetColor(); - if (!MakesPDF()) - return; - - BeginTransparency(); - PDF_rect(fPdf, tx(rect.left), ty(rect.bottom), scale(rect.Width()), - scale(rect.Height())); - FillOrClip(); - EndTransparency(); -} - - -/*! The quarter ellipses in the corners of the rectangle are - approximated with bezier curves. - The constant 0.555... is taken from gobeProductive. -*/ -void -PDFWriter::PaintRoundRect(BRect rect, BPoint radii, bool stroke) -{ - SetColor(); - if (!MakesPDF()) - return; - - BPoint center; - - float sx = radii.x; - float sy = radii.y; - - char str[256]; - sprintf(str, "PaintRoundRect sx %f sy %f", sx, sy); - REPORT(kDebug, fPage, str); - - float ax = sx; - float bx = 0.5555555555555 * sx; - float ay = sy; - float by = 0.5555555555555 * sy; - - center.x = rect.left + sx; - center.y = rect.top + sy; - - BShape shape; - shape.MoveTo(BPoint(center.x - ax, center.y)); - BPoint a[3] = { - BPoint(center.x - ax, center.y - by), - BPoint(center.x - bx, center.y - ay), - BPoint(center.x , center.y - ay)}; - shape.BezierTo(a); - - center.x = rect.right - sx; - shape.LineTo(BPoint(center.x, center.y - ay)); - - BPoint b[3] = { - BPoint(center.x + bx, center.y - ay), - BPoint(center.x + ax, center.y - by), - BPoint(center.x + ax, center.y)}; - shape.BezierTo(b); - - center.y = rect.bottom - sy; - shape.LineTo(BPoint(center.x + sx, center.y)); - - BPoint c[3] = { - BPoint(center.x + ax, center.y + by), - BPoint(center.x + bx, center.y + ay), - BPoint(center.x , center.y + ay)}; - shape.BezierTo(c); - - center.x = rect.left + sx; - shape.LineTo(BPoint(center.x, center.y + ay)); - - BPoint d[3] = { - BPoint(center.x - bx, center.y + ay), - BPoint(center.x - ax, center.y + by), - BPoint(center.x - ax, center.y)}; - shape.BezierTo(d); - - shape.Close(); - - PaintShape(&shape, stroke); -} - - -void -PDFWriter::StrokeRoundRect(BRect rect, BPoint radii) -{ - REPORT(kDebug, fPage, "StrokeRoundRect center=[%f, %f, %f, %f], " - "radii=[%f, %f]", rect.left, rect.top, rect.right, rect.bottom, radii.x, - radii.y); - PaintRoundRect(rect, radii, kStroke); -} - - -void -PDFWriter::FillRoundRect(BRect rect, BPoint radii) -{ - REPORT(kDebug, fPage, "FillRoundRect rect=[%f, %f, %f, %f], radii=[%f, %f]", - rect.left, rect.top, rect.right, rect.bottom, radii.x, radii.y); - PaintRoundRect(rect, radii, kFill); -} - - -void -PDFWriter::StrokeBezier(BPoint *control) -{ - REPORT(kDebug, fPage, "StrokeBezier"); - SetColor(); - if (!MakesPDF()) - return; - - BShape shape; - shape.MoveTo(control[0]); - shape.BezierTo(&control[1]); - StrokeShape(&shape); -} - - -void -PDFWriter::FillBezier(BPoint *control) -{ - REPORT(kDebug, fPage, "FillBezier"); - SetColor(); - if (!MakesPDF()) return; - PDF_moveto(fPdf, tx(control[0].x), ty(control[0].y)); - PDF_curveto(fPdf, tx(control[1].x), ty(control[1].y), - tx(control[2].x), ty(control[2].y), tx(control[3].x), ty(control[3].y)); - PDF_closepath(fPdf); - FillOrClip(); -} - - -/*! Note the pen size is also scaled! - We should approximate it with bezier curves too! -*/ -void -PDFWriter::PaintArc(BPoint center, BPoint radii, float startTheta, - float arcTheta, int stroke) -{ - float sx = scale(radii.x); - float sy = scale(radii.y); - float smax = sx > sy ? sx : sy; - - SetColor(); - if (!MakesPDF()) return; - if (IsClipping()); // TODO clip to line path - - PDF_save(fPdf); - PDF_scale(fPdf, sx, sy); - PDF_setlinewidth(fPdf, fState->penSize / smax); - PDF_arc(fPdf, tx(center.x) / sx, ty(center.y) / sy, 1, startTheta, - startTheta + arcTheta); - Paint(stroke); - PDF_restore(fPdf); -} - - -void -PDFWriter::StrokeArc(BPoint center, BPoint radii, float startTheta, - float arcTheta) -{ - REPORT(kDebug, fPage, "StrokeArc center=[%f, %f], radii=[%f, %f], " - "startTheta=%f, arcTheta=%f", center.x, center.y, radii.x, radii.y, - startTheta, arcTheta); - PaintArc(center, radii, startTheta, arcTheta, true); -} - - -void -PDFWriter::FillArc(BPoint center, BPoint radii, float startTheta, float arcTheta) -{ - REPORT(kDebug, fPage, "FillArc center=[%f, %f], radii=[%f, %f], " - "startTheta=%f, arcTheta=%f", center.x, center.y, radii.x, radii.y, - startTheta, arcTheta); - PaintArc(center, radii, startTheta, arcTheta, false); -} - - -void -PDFWriter::PaintEllipse(BPoint center, BPoint radii, bool stroke) -{ - float sx = radii.x; - float sy = radii.y; - - float ax = sx; - float bx = 0.5555555555555 * sx; - float ay = sy; - float by = 0.5555555555555 * sy; - - SetColor(); - if (!MakesPDF()) return; - - BShape shape; - - shape.MoveTo(BPoint(center.x - ax, center.y)); - - BPoint a[3] = { - BPoint(center.x - ax, center.y - by), - BPoint(center.x - bx, center.y - ay), - BPoint(center.x , center.y - ay) }; - shape.BezierTo(a); - - BPoint b[3] = { - BPoint(center.x + bx, center.y - ay), - BPoint(center.x + ax, center.y - by), - BPoint(center.x + ax, center.y)}; - shape.BezierTo(b); - - BPoint c[3] = { - BPoint(center.x + ax, center.y + by), - BPoint(center.x + bx, center.y + ay), - BPoint(center.x , center.y + ay)}; - shape.BezierTo(c); - - BPoint d[3] = { - BPoint(center.x - bx, center.y + ay), - BPoint(center.x - ax, center.y + by), - BPoint(center.x - ax, center.y)}; - shape.BezierTo(d); - - shape.Close(); - - PaintShape(&shape, stroke); -} - - -void -PDFWriter::StrokeEllipse(BPoint center, BPoint radii) -{ - REPORT(kDebug, fPage, "StrokeEllipse center=[%f, %f], radii=[%f, %f]", - center.x, center.y, radii.x, radii.y); - PaintEllipse(center, radii, true); -} - - -void -PDFWriter::FillEllipse(BPoint center, BPoint radii) -{ - REPORT(kDebug, fPage, "FillEllipse center=[%f, %f], radii=[%f, %f]", - center.x, center.y, radii.x, radii.y); - PaintEllipse(center, radii, false); -} - - -void -PDFWriter::StrokePolygon(int32 numPoints, BPoint *points, bool isClosed) -{ - int32 i; - float x0, y0; - REPORT(kDebug, fPage, "StrokePolygon numPoints=%ld, isClosed=%d\npoints=", - numPoints, isClosed); - - if (numPoints <= 1) - return; - - x0 = y0 = 0.0; - - SetColor(); - if (!MakesPDF()) - return; - - if (IsClipping()) { - BShape shape; - shape.MoveTo(*points); - for (i = 1, points ++; i < numPoints; i++, points++) { - shape.LineTo(*points); - } - if (isClosed) - shape.Close(); - StrokeShape(&shape); - } else { - BeginTransparency(); - for ( i = 0; i < numPoints; i++, points++ ) { - REPORT(kDebug, fPage, " [%f, %f]", points->x, points->y); - if (i != 0) { - PDF_lineto(fPdf, tx(points->x), ty(points->y)); - } else { - x0 = tx(points->x); - y0 = ty(points->y); - PDF_moveto(fPdf, x0, y0); - } - } - if (isClosed) - PDF_lineto(fPdf, x0, y0); - StrokeOrClip(); - EndTransparency(); - } -} - - -void -PDFWriter::FillPolygon(int32 numPoints, BPoint *points, bool isClosed) -{ - REPORT(kDebug, fPage, "FillPolygon numPoints=%ld, isClosed=%dpoints=", - numPoints, isClosed); - - SetColor(); - if (!MakesPDF()) - return; - - BeginTransparency(); - for (int32 i = 0; i < numPoints; i++, points++ ) { - REPORT(kDebug, fPage, " [%f, %f]", points->x, points->y); - if (i != 0) { - PDF_lineto(fPdf, tx(points->x), ty(points->y)); - } else { - PDF_moveto(fPdf, tx(points->x), ty(points->y)); - } - } - PDF_closepath(fPdf); - FillOrClip(); - EndTransparency(); -} - - -void -PDFWriter::PaintShape(BShape *shape, bool stroke) -{ - if (stroke) StrokeShape(shape); else FillShape(shape); -} - - -void -PDFWriter::StrokeShape(BShape *shape) -{ - REPORT(kDebug, fPage, "StrokeShape"); - SetColor(); - if (!MakesPDF()) - return; - BeginTransparency(); - DrawShape iterator(this, true); - iterator.Iterate(shape); - EndTransparency(); -} - - -void -PDFWriter::FillShape(BShape *shape) -{ - REPORT(kDebug, fPage, "FillShape"); - SetColor(); - if (!MakesPDF()) return; - BeginTransparency(); - DrawShape iterator(this, false); - iterator.Iterate(shape); - EndTransparency(); -} - - -void -PDFWriter::ClipToPicture(BPicture *picture, BPoint point, - bool clipToInversePicture) -{ - REPORT(kDebug, fPage, "ClipToPicture at (%f, %f) clip_to_inverse_picture " - "= %s", point.x, point.y, clipToInversePicture ? "true" : "false"); - - if (!MakesPDF()) - return; - if (clipToInversePicture) { - REPORT(kError, fPage, "Clipping to inverse picture not implemented!"); - return; - } - if (fMode == kDrawingMode) { - const bool set_origin = point.x != 0 || point.y != 0; - PushInternalState(); - if (set_origin) { - SetOrigin(point); PushInternalState(); - } - - fMode = kClippingMode; - // create subpath(s) for clipping - Iterate(picture); - fMode = kDrawingMode; - // and clip to it/them - PDF_clip(fPdf); - - if (set_origin) { - PopInternalState(); - } - PopInternalState(); - - REPORT(kDebug, fPage, "Returning from ClipToPicture"); - } else { - REPORT(kError, fPage, - "Nested call of ClipToPicture not implemented yet!"); - } -} - - -void -PDFWriter::DrawPixels(BRect src, BRect dest, int32 width, int32 height, - int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data) -{ - REPORT(kDebug, fPage, "DrawPixels src=[%f, %f, %f, %f], dest=[%f, %f, %f, " - "%f], width=%ld, height=%ld, bytesPerRow=%ld, pixelFormat=%ld, " - "flags=%ld, data=%p", src.left, src.top, src.right, src.bottom, - dest.left, dest.top, dest.right, dest.bottom, width, height, bytesPerRow, - pixelFormat, flags, data); - - SetColor(); - - if (IsClipping()) { - REPORT(kError, fPage, "DrawPixels for clipping not implemented yet!"); - return; - } - - int maskId, image; - - if (!GetImages(src, width, height, bytesPerRow, pixelFormat, flags, data, - &maskId, &image)) { - return; - } - if (!MakesPDF()) return; - - const float scaleX = (dest.Width()+1) / (src.Width()+1); - const float scaleY = (dest.Height()+1) / (src.Height()+1); - - const bool needs_scaling = scaleX != 1.0 || scaleY != 1.0; - - if (needs_scaling) { - PDF_save(fPdf); - PDF_scale(fPdf, scaleX, scaleY); - } - - // This seems to work with Gobe Productive, why? - // Can use Begin/EndTransparency if the alpha value for each pixel - // is the same. - // Otherwise we need "SoftMasks". Don't know if PDFlib 5.x already - // supports them. - BeginTransparency(); - - float x = tx(dest.left) / scaleX; - float y = ty(dest.bottom) / scaleY; - - if ( image >= 0 ) { - PDF_place_image(fPdf, image, x, y, scale(1.0)); -#if !USE_IMAGE_CACHE - PDF_close_image(fPdf, image); -#endif - } else { - REPORT(kError, fPage, "PDF_open_image_file failed!"); - } - -#if !USE_IMAGE_CACHE - if (maskId != -1) PDF_close_image(fPdf, maskId); -#endif - EndTransparency(); - - if (needs_scaling) PDF_restore(fPdf); -} - - -void -PDFWriter::SetClippingRects(BRect *rects, uint32 numRects) -{ - uint32 i; - - REPORT(kDebug, fPage, "SetClippingRects numRects=%ld\nrects=", \ - numRects); - - if (!MakesPDF()) return; - - for ( i = 0; i < numRects; i++, rects++ ) { - REPORT(kDebug, fPage, " [%f, %f, %f, %f]", \ - rects->left, rects->top, rects->right, rects->bottom); - PDF_moveto(fPdf, tx(rects->left), ty(rects->top)); - PDF_lineto(fPdf, tx(rects->right), ty(rects->top)); - PDF_lineto(fPdf, tx(rects->right), ty(rects->bottom)); - PDF_lineto(fPdf, tx(rects->left), ty(rects->bottom)); - PDF_closepath(fPdf); - } - if (numRects > 0) PDF_clip(fPdf); -} - - -void -PDFWriter::PushState() -{ - REPORT(kDebug, fPage, "PushState"); - PushInternalState(); -// LOG((fLog, "height = %f x0 = %f y0 = %f", fState->height, fState->x0, fState->y0)); - if (!MakesPDF()) return; - PDF_save(fPdf); -} - - -void -PDFWriter::PopState() -{ - REPORT(kDebug, fPage, "PopState"); - if (PopInternalState()) { - if (!MakesPDF()) return; - PDF_restore(fPdf); - } -} - - -void -PDFWriter::EnterStateChange() -{ - REPORT(kDebug, fPage, "EnterStateChange"); - // nothing to do -} - - -void -PDFWriter::ExitStateChange() -{ - REPORT(kDebug, fPage, "ExitStateChange"); - // nothing to do -} - - -void -PDFWriter::EnterFontState() -{ - REPORT(kDebug, fPage, "EnterFontState"); - // nothing to do -} - - -void -PDFWriter::ExitFontState() -{ - REPORT(kDebug, fPage, "ExitFontState"); - // nothing to do -} - - -void -PDFWriter::SetOrigin(BPoint pt) -{ - REPORT(kDebug, fPage, "SetOrigin pt=[%f, %f]", pt.x, pt.y); - - // XXX scale pt with current scaling factor or with - // scaling factor of previous state? (fState->prev->scale) - BPoint o = fState->prev->pdfSystem.Origin(); - pdfSystem()->SetOrigin( - o.x + pdfSystem()->scale(pt.x), - o.y + pdfSystem()->scale(pt.y) - ); -} - - -void -PDFWriter::SetPenLocation(BPoint pt) -{ - REPORT(kDebug, fPage, "SetPenLocation pt=[%f, %f]", pt.x, pt.y); - - fState->penX = pt.x; - fState->penY = pt.y; -} - - -void -PDFWriter::SetDrawingMode(drawing_mode mode) -{ - REPORT(kDebug, fPage, "SetDrawingMode mode=%d", mode); - fState->drawingMode = mode; -} - - -void -PDFWriter::SetLineMode(cap_mode capMode, join_mode joinMode, float miterLimit) -{ - REPORT(kDebug, fPage, "SetLineMode"); - fState->capMode = capMode; - fState->joinMode = joinMode; - fState->miterLimit = miterLimit; - if (!MakesPDF()) return; - int m = 0; - switch (capMode) { - case B_BUTT_CAP: m = 0; break; - case B_ROUND_CAP: m = 1; break; - case B_SQUARE_CAP: m = 2; break; - } - PDF_setlinecap(fPdf, m); - - m = 0; - switch (joinMode) { - case B_MITER_JOIN: m = 0; break; - case B_ROUND_JOIN: m = 1; break; - case B_BUTT_JOIN: // fall through TODO: check this; no equivalent in PDF? - case B_SQUARE_JOIN: // fall through TODO: check this too - case B_BEVEL_JOIN: m = 2; break; - } - PDF_setlinejoin(fPdf, m); - - PDF_setmiterlimit(fPdf, miterLimit); - -} - - -void -PDFWriter::SetPenSize(float size) -{ - REPORT(kDebug, fPage, "SetPenSize size=%f", size); - if (size <= 0.00001) - size = 1; - - // TODO: scaling required? - fState->penSize = scale(size); - if (!MakesPDF()) - return; - - PDF_setlinewidth(fPdf, size); -} - - -void -PDFWriter::SetForeColor(rgb_color color) -{ - //if (IsClipping()) return; // ignore - - float red = color.red / 255.0; - float green = color.green / 255.0; - float blue = color.blue / 255.0; - - REPORT(kDebug, fPage, "SetForColor color=[%d, %d, %d, %d] -> [%f, %f, %f]", - color.red, color.green, color.blue, color.alpha, red, green, blue); - - fState->foregroundColor = color; -} - - -void -PDFWriter::SetBackColor(rgb_color color) -{ - //if (IsClipping()) return; // ignore - - float red, green, blue; - - red = color.red / 255.0; - green = color.green / 255.0; - blue = color.blue / 255.0; - - REPORT(kDebug, fPage, "SetBackColor color=[%d, %d, %d, %d] -> [%f, %f, %f]", - color.red, color.green, color.blue, color.alpha, red, green, blue); - - fState->backgroundColor = color; -} - - -void -PDFWriter::SetStipplePattern(pattern pat) -{ - REPORT(kDebug, fPage, "SetStipplePattern"); - fState->pattern0 = pat; -} - - -void -PDFWriter::SetScale(float scale) -{ - REPORT(kDebug, fPage, "SetScale scale=%f", scale); - pdfSystem()->SetScale(scale * fState->prev->pdfSystem.Scale()); -} - - -void -PDFWriter::SetFontFamily(char *family) -{ - REPORT(kDebug, fPage, "SetFontFamily family=\"%s\"", family); - - fState->beFont.SetFamilyAndStyle(family, NULL); -} - - -void -PDFWriter::SetFontStyle(char *style) -{ - REPORT(kDebug, fPage, "SetFontStyle style=\"%s\"", style); - - fState->beFont.SetFamilyAndStyle(NULL, style); -} - - -void -PDFWriter::SetFontSpacing(int32 spacing) -{ - REPORT(kDebug, fPage, "SetFontSpacing spacing=%ld", spacing); - // XXX scaling required? - // if it is, do it when the font is used... - fState->beFont.SetSpacing(spacing); -} - - -void -PDFWriter::SetFontSize(float size) -{ - REPORT(kDebug, fPage, "SetFontSize size=%f", size); - - fState->beFont.SetSize(size); -} - - -void -PDFWriter::SetFontRotate(float rotation) -{ - REPORT(kDebug, fPage, "SetFontRotate rotation=%f", rotation); - fState->beFont.SetRotation(RAD2DEGREE(rotation)); -} - - -void -PDFWriter::SetFontEncoding(int32 encoding) -{ - REPORT(kDebug, fPage, "SetFontEncoding encoding=%ld", encoding); - fState->beFont.SetEncoding(encoding); -} - - -void -PDFWriter::SetFontFlags(int32 flags) -{ - REPORT(kDebug, fPage, "SetFontFlags flags=%ld (0x%lx)", flags, flags); - fState->beFont.SetFlags(flags); -} - - -void -PDFWriter::SetFontShear(float shear) -{ - REPORT(kDebug, fPage, "SetFontShear shear=%f", shear); - fState->beFont.SetShear(shear); -} - - -void -PDFWriter::SetFontFace(int32 flags) -{ - REPORT(kDebug, fPage, "SetFontFace flags=%ld (0x%lx)", flags, flags); -// fState->beFont.SetFace(flags); -} - - -// #pragma mark Redirectors to instance callbacks/handlers - - -size_t -_WriteData(PDF *pdf, void *data, size_t size) -{ - return ((PDFWriter *)PDF_get_opaque(pdf))->WriteData(data, size); -} - - -void -_ErrorHandler(PDF *pdf, int type, const char *msg) -{ - return ((PDFWriter *)PDF_get_opaque(pdf))->ErrorHandler(type, msg); -} - diff --git a/src/add-ons/print/drivers/pdf/source/PDFWriter.h b/src/add-ons/print/drivers/pdf/source/PDFWriter.h deleted file mode 100644 index 9b165668bb..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFWriter.h +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright 2001-2009, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Philippe Houdoin - * Simon Gauvin - * Michael Pfeiffer - */ -#ifndef PDFWRITER_H -#define PDFWRITER_H - -#include -#include -#include -#include - -#include - -#include "PrinterDriver.h" -#include "PictureIterator.h" -#include "Fonts.h" -#include "SubPath.h" -#include "PrintUtils.h" -#include "Link.h" -#include "ImageCache.h" -#include "PDFSystem.h" - -#include "pdflib.h" - -#define USE_IMAGE_CACHE 1 - -#define RAD2DEGREE(r) (180.0 * r / M_PI) -#define DEGREE2RAD(d) (M_PI * d / 180.0) - -class DrawShape; -class WebLink; -class Bookmark; -class XRefDefs; -class XRefDests; - -class PDFWriter : public PrinterDriver, public PictureIterator { - friend class DrawShape; - friend class PDFLinePathBuilder; - friend class WebLink; - friend class Link; - friend class Bookmark; - friend class LocalLink; - friend class TextLine; - - public: - // constructors / destructor - PDFWriter(); - ~PDFWriter(); - - // public methods - status_t BeginJob(); - status_t PrintPage(int32 pageNumber, int32 pageCount); - status_t EndJob(); - status_t InitWriter(); - status_t BeginPage(BRect paperRect, BRect printRect); - status_t EndPage(); - - void SetAttribute(const char* name, const char* value); - bool LoadBookmarkDefinitions(const char* name); - bool LoadXRefsDefinitions(const char* name); - void RecordDests(const char* s); - - // PDFLib callbacks - size_t WriteData(void *data, size_t size); - void ErrorHandler(int type, const char *msg); - - // Image support - int32 BytesPerPixel(int32 pixelFormat); - - bool HasAlphaChannel(int32 pixelFormat); - bool NeedsBPC1Mask(int32 pixelFormat); - - inline bool IsTransparentRGB32(uint8* in); - inline bool IsTransparentRGBA32(uint8* in); - inline bool IsTransparentRGB32_BIG(uint8* in); - inline bool IsTransparentRGBA32_BIG(uint8* in); - //inline bool IsTransparentRGB24(uint8* in); - //inline bool IsTransparentRGB24_BIG(uint8* in); - //inline bool IsTransparentRGB16(uint8* in); - //inline bool IsTransparentRGB16_BIG(uint8* in); - inline bool IsTransparentRGB15(uint8* in); - inline bool IsTransparentRGB15_BIG(uint8* in); - inline bool IsTransparentRGBA15(uint8* in); - inline bool IsTransparentRGBA15_BIG(uint8* in); - inline bool IsTransparentCMAP8(uint8* in); - //inline bool IsTransparentGRAY8(uint8* in); - //inline bool IsTransparentGRAY1(uint8* in); - - inline uint8 AlphaFromRGBA32(uint8* in); - inline uint8 AlphaFromRGBA32_BIG(uint8* in); - - inline void ConvertFromRGB32(uint8* in, uint8* out); - inline void ConvertFromRGB32_BIG(uint8* in, uint8* out); - inline void ConvertFromRGBA32(uint8* in, uint8* out); - inline void ConvertFromRGBA32_BIG(uint8* in, uint8* out); - inline void ConvertFromRGB24(uint8* in, uint8* out); - inline void ConvertFromRGB24_BIG(uint8* in, uint8* out); - inline void ConvertFromRGB16(uint8* in, uint8* out); - inline void ConvertFromRGB16_BIG(uint8* in, uint8* out); - inline void ConvertFromRGB15(uint8* in, uint8* out); - inline void ConvertFromRGBA15_BIG(uint8* in, uint8* out); - inline void ConvertFromRGB15_BIG(uint8* in, uint8* out); - inline void ConvertFromRGBA15(uint8* in, uint8* out); - inline void ConvertFromCMAP8(uint8* in, uint8* out); - inline void ConvertFromGRAY8(uint8* in, uint8* out); - inline void ConvertFromGRAY1(uint8* in, uint8* out, int8 bit); - - uint8 *CreateMask(BRect src, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data); - uint8 *CreateSoftMask(BRect src, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data); - BBitmap *ConvertBitmap(BRect src, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data); - bool GetImages(BRect src, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data, int* mask, int* image); - - // String handling - bool BeginsChar(char byte) { return BEGINS_CHAR(byte); } - void ToUtf8(uint32 encoding, const char *string, BString &utf8); - void ToUnicode(const char *string, BString &unicode); - void ToPDFUnicode(const char *string, BString &unicode); - uint16 CodePointSize(const char *s); - void DrawChar(uint16 unicode, const char *utf8, int16 size); - void ClipChar(BFont* font, const char* unicode, const char *utf8, int16 size, float width); - bool EmbedFont(const char* n); - void DeclareEncodingFiles(); - void DeclareEncodingFile(BPath* path, const char* id, - const char* name); - status_t DeclareFonts(); - void RecordFont(const char* family, const char* style, float size); - - // BPicture playback handlers - void Op(int number); - void MovePenBy(BPoint delta); - void StrokeLine(BPoint start, BPoint end); - void StrokeRect(BRect rect); - void FillRect(BRect rect); - void StrokeRoundRect(BRect rect, BPoint radii); - void FillRoundRect(BRect rect, BPoint radii); - void StrokeBezier(BPoint *control); - void FillBezier(BPoint *control); - void StrokeArc(BPoint center, BPoint radii, float startTheta, float arcTheta); - void FillArc(BPoint center, BPoint radii, float startTheta, float arcTheta); - void StrokeEllipse(BPoint center, BPoint radii); - void FillEllipse(BPoint center, BPoint radii); - void StrokePolygon(int32 numPoints, BPoint *points, bool isClosed); - void FillPolygon(int32 numPoints, BPoint *points, bool isClosed); - void StrokeShape(BShape *shape); - void FillShape(BShape *shape); - void DrawString(char *string, float deltax, float deltay); - void DrawPixels(BRect src, BRect dest, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data); - void SetClippingRects(BRect *rects, uint32 numRects); - void ClipToPicture(BPicture *picture, BPoint point, bool clip_to_inverse_picture); - void PushState(); - void PopState(); - void EnterStateChange(); - void ExitStateChange(); - void EnterFontState(); - void ExitFontState(); - void SetOrigin(BPoint pt); - void SetPenLocation(BPoint pt); - void SetDrawingMode(drawing_mode mode); - void SetLineMode(cap_mode capMode, join_mode joinMode, float miterLimit); - void SetPenSize(float size); - void SetForeColor(rgb_color color); - void SetBackColor(rgb_color color); - void SetStipplePattern(pattern p); - void SetScale(float scale); - void SetFontFamily(char *family); - void SetFontStyle(char *style); - void SetFontSpacing(int32 spacing); - void SetFontSize(float size); - void SetFontRotate(float rotation); - void SetFontEncoding(int32 encoding); - void SetFontFlags(int32 flags); - void SetFontShear(float shear); - void SetFontFace(int32 flags); - - static inline bool IsSame(const pattern &p1, const pattern &p2); - static inline bool IsSame(const rgb_color &c1, const rgb_color &c2); - - private: - - enum PDFVersion { - kPDF13, - kPDF14, - kPDF15 - }; - - class State - { - public: - State *prev; - BFont beFont; - int font; - PDFSystem pdfSystem; - float penX; - float penY; - drawing_mode drawingMode; - rgb_color foregroundColor; - rgb_color backgroundColor; - rgb_color currentColor; - cap_mode capMode; - join_mode joinMode; - float miterLimit; - float penSize; - pattern pattern0; - int32 fontSpacing; - - // initialize with defalt values - State(float h = a4_height, float x = 0, float y = 0) - { - static rgb_color white = {255, 255, 255, 255}; - static rgb_color black = {0, 0, 0, 255}; - prev = NULL; - font = 0; - pdfSystem.SetHeight(h); - pdfSystem.SetOrigin(x, y); - penX = 0; - penY = 0; - drawingMode = B_OP_COPY; - foregroundColor = white; - backgroundColor = black; - currentColor = black; - capMode = B_BUTT_CAP; - joinMode = B_MITER_JOIN; - miterLimit = B_DEFAULT_MITER_LIMIT; - penSize = 1; - pattern0 = B_SOLID_HIGH; - fontSpacing = B_STRING_SPACING; - } - - State(State *prev) - { - *this = *prev; - this->prev = prev; - } - }; - - class Font - { - public: - Font(char *n, int f, font_encoding e) : name(n), font(f), encoding(e) { } - BString name; - int font; - font_encoding encoding; - }; - - class Pattern - { - public: - pattern pat; - rgb_color lowColor, highColor; - int patternId; - - Pattern(const pattern &p, rgb_color low, rgb_color high, int id) - : pat(p) - , lowColor(low) - , highColor(high) - , patternId(id) - {}; - - inline bool Matches(const pattern &p, rgb_color low, rgb_color high) const { - return IsSame(pat, p) && IsSame(lowColor, low) && IsSame(highColor, high); - }; - }; - - class Transparency - { - uint8 alpha; - int handle; - public: - Transparency(uint8 alpha, int handle) - : alpha(alpha) - , handle(handle) - {}; - - inline bool Matches(uint8 alpha) const { - return this->alpha == alpha; - }; - - inline int Handle() const { return handle; } - }; - - PDFVersion fPDFVersion; - FILE *fLog; - PDF *fPdf; - int32 fPage; - State *fState; - int32 fStateDepth; - TList fFontCache; - TList fPatterns; - TList fTransparencyCache; - TList fTransparencyStack; - ImageCache fImageCache; - int64 fEmbedMaxFontSize; - BScreen *fScreen; - Fonts *fFonts; - bool fCreateWebLinks; - bool fCreateBookmarks; - Bookmark *fBookmark; - bool fCreateXRefs; - XRefDefs *fXRefs; - XRefDests *fXRefDests; - font_encoding fFontSearchOrder[no_of_cjk_encodings]; - TextLine fTextLine; - TList fUsedFonts; - UserDefinedEncodings fUserDefinedEncodings; - - enum - { - kDrawingMode, - kClippingMode - } fMode; - - inline float tx(float x) { return fState->pdfSystem.tx(x); } - inline float ty(float y) { return fState->pdfSystem.ty(y); } - inline float scale(float f) { return fState->pdfSystem.scale(f); } - - PDFSystem* pdfSystem() const { return &fState->pdfSystem; } - - enum - { - kStroke = true, - kFill = false - }; - - inline bool MakesPattern() { return Pass() == 0; } - inline bool MakesPDF() { return Pass() == 1; } - - inline bool IsDrawing() const { return fMode == kDrawingMode; } - inline bool IsClipping() const { return fMode == kClippingMode; } - - // PDF features depending on PDF version: - inline bool SupportsSoftMask() const { return fPDFVersion >= kPDF14; } - inline bool SupportsOpacity() const { return fPDFVersion >= kPDF14; } - - inline float PenSize() const { return fState->penSize; } - inline cap_mode LineCapMode() const { return fState->capMode; } - inline join_mode LineJoinMode() const { return fState->joinMode; } - inline float LineMiterLimit() const { return fState->miterLimit; } - - bool StoreTranslatorBitmap(BBitmap *bitmap, const char *filename, uint32 type); - - void GetFontName(BFont *font, char *fontname); - void GetFontName(BFont *font, char *fontname, bool &embed, font_encoding encoding); - int FindFont(char *fontname, bool embed, font_encoding encoding); - void MakeUserDefinedEncoding(uint16 unicode, uint8 &enc, uint8 &index); - - // alpha transparency - Transparency* FindTransparency(uint8 alpha); - void BeginTransparency(); - void EndTransparency(); - - void PushInternalState(); - bool PopInternalState(); - - void SetColor(rgb_color toSet); - void SetColor(); - void CreatePattern(); - int FindPattern(); - void SetPattern(); - - void StrokeOrClip(); - void FillOrClip(); - void Paint(bool stroke); - void PaintShape(BShape *shape, bool stroke); - void PaintRoundRect(BRect rect, BPoint radii, bool stroke); - void PaintArc(BPoint center, BPoint radii, float startTheta, float arcTheta, int stroke); - void PaintEllipse(BPoint center, BPoint radii, bool stroke); -}; - - -inline bool -PDFWriter::IsSame(const pattern &p1, const pattern &p2) -{ - char *a = (char*)p1.data; - char *b = (char*)p2.data; - return memcmp(a, b, 8) == 0; -} - - -inline bool -PDFWriter::IsSame(const rgb_color &c1, const rgb_color &c2) -{ - char *a = (char*)&c1; - char *b = (char*)&c1; - return memcmp(a, b, sizeof(rgb_color)) == 0; -} - - -// PDFLib C callbacks class instance redirectors -size_t _WriteData(PDF *p, void *data, size_t size); -void _ErrorHandler(PDF *p, int type, const char *msg); - -#endif // PDFWRITER_H diff --git a/src/add-ons/print/drivers/pdf/source/PDFWriter.rdef b/src/add-ons/print/drivers/pdf/source/PDFWriter.rdef deleted file mode 100644 index bcd82def92..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PDFWriter.rdef +++ /dev/null @@ -1,78 +0,0 @@ -/* -** PDFWriter.rdef -** -*/ - -/* BEOS:APP_SIG : - application:/x-vnd.obos.app-name - */ - -resource app_signature "application/x-vnd.obos.pdfwriter"; - -/* BEOS:APP_FLAGS : - 00000000 = SINGLE LAUNCH - 00000001 = MULTIPLE LAUNCH - 00000002 = EXCLUSIVE LAUNCH - 00000004 = BACKGROUND APP + SINGLE LAUNCH - 00000005 = BACKGROUND APP + MULTIPLE LAUNCH - 00000006 = BACKGROUND APP + EXCLUSIVE LAUNCH - 00000008 = ARGV_ONLY + SINGLE LAUNCH - 00000009 = ARGV_ONLY + MULTIPLE LAUNCH - 0000000A = ARGV_ONLY + EXCLUSIVE LAUNCH - 0000000C = ARGV_ONLY + BACKGROUND APP + SINGLE LAUNCH - 0000000D = ARGV_ONLY + BACKGROUND APP + MULTIPLE LAUNCH - 0000000E = ARGV_ONLY + BACKGROUND APP + EXCLUSIVE LAUNCH - */ - -resource app_flags B_SINGLE_LAUNCH; - -/* BEOS:FILE_TYPES : - "types" = "text/plain", - "types" = .... - */ - -resource app_version { - - major = 2, - middle = 0, - minor = 1, - - /* 0 = development 1 = alpha 2 = beta - 3 = gamma 4 = golden master 5 = final */ - variety = 2, - - internal = 1, - - short_info = "v2.0 Beta 1", - long_info = "v2.0 Beta 1. Copyrights (©) 2002-2003 OpenBeOS" -}; - -resource vector_icon { - $"6E6369660F050002001602B76E70BBF8583D120FB8A7674742A04ABEFB00AEFF" - $"E1053802001603373333B9333339333337333348E54F4B555400FFBFE5FF9B02" - $"00160336C6F3B9284239E396376BBA4A71BE484A25005346B5FFFF02001602B5" - $"00003A6000BA6000B500004A2E244AB9D001C0FF9A020116023AA41339C70ABC" - $"27003D026D4ACAB74AC8AB0183FFAD020106023600000000000000003700004A" - $"10004AB0000035FF06FB1E9303020106023600000000000000003700004A1000" - $"4AB00000FFE3E3FFDD05050101000073020116023E1E40BC9E383B21B93C88A5" - $"4824E3485D850090FF3C0501020006023B61A038E755B9F2003C4C154AC9623D" - $"6A0500FF6D6DFFDA1C1C05FF0200060239658D3E8928BDB2D1387A224A4B6346" - $"066BFF1467FF6B06F8B7110606BE023A5F485C46584C5E5656525A5656604C58" - $"483A0608EFB6302E302E25372248223A2248465A4A59485B4A59584B41573E58" - $"3F563D543C0608AAFF503A4E3C3231342F302E302E25372248223A2248465A46" - $"5A464C543C4A46543C0606FF06573E583F563D543C543C4A46465A464C465A4A" - $"59485B4A59584B410604DB4A594A4F4A59584B41563F563F4E470A0426484256" - $"4252264406057A0322513A5E42543C58425452B77BC262B77BC262254A080226" - $"502C530A06542A3C22353135324C3B4C3A0202404A3E4C4248434D454B414F02" - $"0332332B3332334B3E4B3E453E3547444E26400606F60F3E3022492444244D24" - $"5A2255225A225A305A30553049324D3244320803522E522756270404B6412E27" - $"45294526452C422B0604F649272E4E2C4E2F4E2C4E294EB71B4E260802522B55" - $"2B0604FA2F3B42444E37483AC5AFBBFC3B2FBE1DB8CC3532150A090100000A00" - $"030806011001178400040A010102000A0001051001178200040A020105000A03" - $"0106000A040108000A050103000A060104000A08010920251C0A070109202221" - $"0A00010730241C01178100040A00010730221E01178100040A0001071815FF01" - $"178100040A0A010A000A0E0110023DCCCC0000000000003E00004599994A7000" - $"0A0B01101A3DCCCC0000000000003E00004599994A700026FF01178100040A0B" - $"01101A3DCCCC0000000000003E00004599994A7000152601178200040A0B010B" - $"30244C01178402040A0C010B20244C0A0D040C0D0E0F38244C15FF0117822204" -}; diff --git a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp b/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp deleted file mode 100644 index ec3b8673b4..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp +++ /dev/null @@ -1,420 +0,0 @@ -/* - -PDF Writer printer driver. - -Version: 12.19.2000 - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "PageSetupWindow.h" - -#include "AdvancedSettingsWindow.h" -#include "Fonts.h" -#include "FontsWindow.h" -#include "BlockingWindow.h" -#include "MarginView.h" -#include "PrinterDriver.h" -#include "pdflib.h" // for pageFormat constants -#include "PrintUtils.h" - - -#include -#include -#include -#include -#include -#include -#include -#include - - -// static global variables -static struct -{ - const char *label; - float width; - float height; -} pageFormat[] = -{ - { "Letter", letter_width, letter_height }, - { "Legal", legal_width, legal_height }, - { "Ledger", ledger_width, ledger_height }, - { "p11x17", p11x17_width, p11x17_height }, - { "A0", a0_width, a0_height }, - { "A1", a1_width, a1_height }, - { "A2", a2_width, a2_height }, - { "A3", a3_width, a3_height }, - { "A4", a4_width, a4_height }, - { "A5", a5_width, a5_height }, - { "A6", a6_width, a6_height }, - { "B5", b5_width, b5_height }, - { NULL, 0.0, 0.0 } -}; - - -static struct -{ - const char *label; - int32 orientation; -} orientation[] = -{ - { "Portrait", PrinterDriver::PORTRAIT_ORIENTATION }, - { "Landscape", PrinterDriver::LANDSCAPE_ORIENTATION }, - { NULL, 0 } -}; - -// PDFLib 5.x does not support PDF 1.2 anymore! -static const char *pdf_compatibility[] = { "1.3", "1.4", NULL }; - - -PageSetupWindow::PageSetupWindow(BMessage *msg, const char *printerName) - : HWindow(BRect(0, 0, 200, 100), "Paper setup", B_TITLED_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, - B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | B_NOT_ZOOMABLE - | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE), - fResult(B_ERROR), - fSetupMsg(msg), - fAdvancedSettings(*msg), - fPrinterDirName(printerName) -{ - fExitSem = create_sem(0, "PageSetup"); - - if (printerName) - SetTitle(BString(printerName).Append(" paper setup").String()); - - if (fSetupMsg->FindInt32("orientation", &fCurrentOrientation) != B_OK) - fCurrentOrientation = PrinterDriver::PORTRAIT_ORIENTATION; - - BRect page; - float width = letter_width; - float height = letter_height; - if (fSetupMsg->FindRect("paper_rect", &page) == B_OK) { - width = page.Width(); - height = page.Height(); - } else { - page.Set(0, 0, width, height); - } - - BString label; - if (fSetupMsg->FindString("pdf_paper_size", &label) != B_OK) - label = "Letter"; - - int32 compression; - fSetupMsg->FindInt32("pdf_compression", &compression); - - int32 units; - if (fSetupMsg->FindInt32("units", &units) != B_OK) - units = kUnitInch; - - // re-calculate the margin from the printable rect in points - BRect margin = page; - if (fSetupMsg->FindRect("printable_rect", &margin) == B_OK) { - margin.top -= page.top; - margin.left -= page.left; - margin.right = page.right - margin.right; - margin.bottom = page.bottom - margin.bottom; - } else { - margin.Set(28.34, 28.34, 28.34, 28.34); // 28.34 dots = 1cm - } - - BString setting_value; - if (fSetupMsg->FindString("pdf_compatibility", &setting_value) != B_OK) - setting_value = "1.3"; - - // Load font settings - fFonts = new Fonts(); - fFonts->CollectFonts(); - BMessage fonts; - if (fSetupMsg->FindMessage("fonts", &fonts) == B_OK) - fFonts->SetTo(&fonts); - - fMarginView = new MarginView(int32(width), int32(height), margin, - MarginUnit(units)); - - BPopUpMenu* pageSize = new BPopUpMenu("Page size"); - pageSize->SetRadioMode(true); - - fPageSizeMenu = new BMenuField("page_size", "Page size:", pageSize); - fPageSizeMenu->Menu()->SetLabelFromMarked(true); - - for (int32 i = 0; pageFormat[i].label != NULL; i++) { - BMessage* message = new BMessage(PAGE_SIZE_CHANGED); - message->AddFloat("width", pageFormat[i].width); - message->AddFloat("height", pageFormat[i].height); - BMenuItem* item = new BMenuItem(pageFormat[i].label, message); - pageSize->AddItem(item); - - if (label.Compare(pageFormat[i].label) == 0) - item->SetMarked(true); - } - - BPopUpMenu* orientationPopUpMenu = new BPopUpMenu("Orientation"); - orientationPopUpMenu->SetRadioMode(true); - - fOrientationMenu = new BMenuField("orientation", "Orientation:", - orientationPopUpMenu); - fOrientationMenu->Menu()->SetLabelFromMarked(true); - - for (int32 i = 0; orientation[i].label != NULL; i++) { - BMessage* message = new BMessage(ORIENTATION_CHANGED); - message->AddInt32("orientation", orientation[i].orientation); - BMenuItem* item = new BMenuItem(orientation[i].label, message); - orientationPopUpMenu->AddItem(item); - - if (fCurrentOrientation == orientation[i].orientation) - item->SetMarked(true); - } - - BPopUpMenu* compatibility = new BPopUpMenu("PDF compatibility"); - compatibility->SetRadioMode(true); - - fPDFCompatibilityMenu = new BMenuField("pdf_compatibility", - "PDF compatibility:", compatibility); - fPDFCompatibilityMenu->Menu()->SetLabelFromMarked(true); - - for (int32 i = 0; pdf_compatibility[i] != NULL; i++) { - BMenuItem* item = new BMenuItem(pdf_compatibility[i], NULL); - compatibility->AddItem(item); - if (setting_value == pdf_compatibility[i]) - item->SetMarked(true); - } - - fPDFCompressionSlider = new BSlider("pdf_compression", - "Compression:", NULL, 0, 9, B_HORIZONTAL); - fPDFCompressionSlider->SetLimitLabels("None", "Best"); - fPDFCompressionSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); - fPDFCompressionSlider->SetValue(compression); - - BButton *cancel = new BButton("cancel", "Cancel", new BMessage(CANCEL_MSG)); - - BButton *ok = new BButton("ok", "OK", new BMessage(OK_MSG)); - ok->MakeDefault(true); - - BButton *fontsButton = new BButton("fonts", "Fonts" B_UTF8_ELLIPSIS, - new BMessage(FONTS_MSG)); - - BButton* advancedButton = new BButton("advanced", - "Advanced" B_UTF8_ELLIPSIS, - new BMessage(ADVANCED_MSG)); - - float padding = 10; - - BLayoutBuilder::Group<>(this, B_VERTICAL, padding) - .SetInsets(B_USE_DEFAULT_SPACING) - .AddGroup(B_HORIZONTAL, 5, 1) - .AddGroup(B_VERTICAL, 0, 1.0f) - .Add(fMarginView) - .End() - .AddGrid(padding, padding / 2) - .SetInsets(padding, padding * 2, padding, padding) - .Add(fPageSizeMenu->CreateLabelLayoutItem(), 0, 0) - .Add(fPageSizeMenu->CreateMenuBarLayoutItem(), 1, 0) - .Add(fOrientationMenu->CreateLabelLayoutItem(), 0, 1) - .Add(fOrientationMenu->CreateMenuBarLayoutItem(), 1, 1) - .Add(fPDFCompatibilityMenu->CreateLabelLayoutItem(), 0, 2) - .Add(fPDFCompatibilityMenu->CreateMenuBarLayoutItem(), 1, 2) - .Add(fPDFCompressionSlider, 0, 3, 2) - .End() - .End() - .Add(new BSeparatorView(B_HORIZONTAL, B_FANCY_BORDER)) - .AddGroup(B_HORIZONTAL, 10, 1.0f) - .Add(fontsButton) - .Add(advancedButton) - .AddGlue() - .Add(cancel) - .Add(ok) - .End(); - - BRect winFrame(Frame()); - BRect screenFrame(BScreen().Frame()); - MoveTo((screenFrame.right - winFrame.right) / 2, - (screenFrame.bottom - winFrame.bottom) / 2); -} - - -PageSetupWindow::~PageSetupWindow() -{ - delete_sem(fExitSem); - delete fFonts; -} - - -void -PageSetupWindow::MessageReceived(BMessage *msg) -{ - switch (msg->what) { - case OK_MSG: { - _UpdateSetupMessage(); - fResult = B_OK; - release_sem(fExitSem); - } break; - - case CANCEL_MSG: { - fResult = B_ERROR; - release_sem(fExitSem); - } break; - - case PAGE_SIZE_CHANGED: { - float w, h; - msg->FindFloat("width", &w); - msg->FindFloat("height", &h); - if (fCurrentOrientation == PrinterDriver::PORTRAIT_ORIENTATION) { - fMarginView->SetPageSize(w, h); - } else { - fMarginView->SetPageSize(h, w); - } - fMarginView->UpdateView(MARGIN_CHANGED); - } break; - - case ORIENTATION_CHANGED: { - int32 orientation; - msg->FindInt32("orientation", &orientation); - - if (fCurrentOrientation != orientation) { - fCurrentOrientation = orientation; - BPoint p = fMarginView->PageSize(); - fMarginView->SetPageSize(p.y, p.x); - fMarginView->UpdateView(MARGIN_CHANGED); - } - } break; - - case FONTS_MSG: { - (new FontsWindow(fFonts))->Show(); - } break; - - case ADVANCED_MSG: { - (new AdvancedSettingsWindow(&fAdvancedSettings))->Show(); - } break; - - default: - inherited::MessageReceived(msg); - break; - } -} - - -bool -PageSetupWindow::QuitRequested() -{ - release_sem(fExitSem); - return true; -} - - -status_t -PageSetupWindow::Go() -{ - MoveTo(300,300); - Show(); - - while (acquire_sem(fExitSem) == B_INTERRUPTED) { - } - - // Have to cache the value since we delete ourself on Quit() - status_t result = fResult; - if (Lock()) - Quit(); - - return result; -} - - -void -PageSetupWindow::_UpdateSetupMessage() -{ - SetInt32(fSetupMsg, "orientation", fCurrentOrientation); - - BMenuItem *item = fPDFCompatibilityMenu->Menu()->FindMarked(); - if (item) - SetString(fSetupMsg, "pdf_compatibility", item->Label()); - - SetInt32(fSetupMsg, "pdf_compression", fPDFCompressionSlider->Value()); - - item = fPageSizeMenu->Menu()->FindMarked(); - if (item) { - float w, h; - BMessage *msg = item->Message(); - msg->FindFloat("width", &w); - msg->FindFloat("height", &h); - BRect r(0, 0, w, h); - if (fCurrentOrientation == PrinterDriver::LANDSCAPE_ORIENTATION) - r.Set(0, 0, h, w); - - // Save the printable_rect - BRect margin = fMarginView->Margin(); - if (fCurrentOrientation == PrinterDriver::PORTRAIT_ORIENTATION) { - margin.right = w - margin.right; - margin.bottom = h - margin.bottom; - } else { - margin.right = h - margin.right; - margin.bottom = w - margin.bottom; - } - - SetRect(fSetupMsg, "paper_rect", r); - SetRect(fSetupMsg, "printable_rect", margin); - SetInt32(fSetupMsg, "units", fMarginView->Unit()); - SetString(fSetupMsg, "pdf_paper_size", item->Label()); - } - - BMessage fonts; - if (fFonts->Archive(&fonts) == B_OK) { - fSetupMsg->RemoveName("fonts"); - fSetupMsg->AddMessage("fonts", &fonts); - } - - // advanced settings - BString value; - if (fAdvancedSettings.FindString("pdflib_license_key", &value) == B_OK) - SetString(fSetupMsg, "pdflib_license_key", value); - - bool webLinks; - if (fAdvancedSettings.FindBool("create_web_links", &webLinks) == B_OK) - SetBool(fSetupMsg, "create_web_links", webLinks); - - float linkBorder; - if (fAdvancedSettings.FindFloat("link_border_width", &linkBorder) == B_OK) - SetFloat(fSetupMsg, "link_border_width", linkBorder); - - bool createBookmarks; - if (fAdvancedSettings.FindBool("create_bookmarks", &createBookmarks) == B_OK) - SetBool(fSetupMsg, "create_bookmarks", createBookmarks); - - if (fAdvancedSettings.FindString("bookmark_definition_file", &value) == B_OK) - SetString(fSetupMsg, "bookmark_definition_file", value); - - bool createXrefs; - if (fAdvancedSettings.FindBool("create_xrefs", &createXrefs) == B_OK) - SetBool(fSetupMsg, "create_xrefs", createXrefs); - - if (fAdvancedSettings.FindString("xrefs_file", &value) == B_OK) - SetString(fSetupMsg, "xrefs_file", value.String()); - - int32 closeOption; - if (fAdvancedSettings.FindInt32("close_option", &closeOption) == B_OK) - SetInt32(fSetupMsg, "close_option", closeOption); -} diff --git a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.h b/src/add-ons/print/drivers/pdf/source/PageSetupWindow.h deleted file mode 100644 index 005cbf209e..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef PAGESETUPWINDOW_H -#define PAGESETUPWINDOW_H - - -#include "BlockingWindow.h" - - -#include -#include - - -class BMenuField; -class BSlider; -class Fonts; -class MarginView; - - -class PageSetupWindow : public HWindow -{ - typedef HWindow inherited; -public: - // Constructors, destructors, operators... - - PageSetupWindow(BMessage *msg, const char *printerName = NULL); - ~PageSetupWindow(); - - virtual void MessageReceived(BMessage *msg); - virtual bool QuitRequested(); - - status_t Go(); - - enum { - OK_MSG = 'ok__', - CANCEL_MSG = 'cncl', - FONTS_MSG = 'font', - ADVANCED_MSG = 'advc', - PAGE_SIZE_CHANGED = 'pgsz', - ORIENTATION_CHANGED = 'ornt' - }; - -private: - void _UpdateSetupMessage(); -private: - long fExitSem; - status_t fResult; - BMessage* fSetupMsg; - BMenuField* fPageSizeMenu; - BMenuField* fOrientationMenu; - BMenuField* fPDFCompatibilityMenu; - BSlider* fPDFCompressionSlider; - Fonts* fFonts; - BMessage fAdvancedSettings; - MarginView * fMarginView; - - // used for saving settings - BString fPrinterDirName; - int32 fCurrentOrientation; -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/PictureIterator.cpp b/src/add-ons/print/drivers/pdf/source/PictureIterator.cpp deleted file mode 100644 index 813d412285..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PictureIterator.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001, 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "PictureIterator.h" - -// BPicture playback handlers class instance redirectors -static void _MovePenBy(void *p, BPoint delta) { return ((PictureIterator *) p)->MovePenBy(delta); } -static void _StrokeLine(void *p, BPoint start, BPoint end) { return ((PictureIterator *) p)->StrokeLine(start, end); } -static void _StrokeRect(void *p, BRect rect) { return ((PictureIterator *) p)->StrokeRect(rect); } -static void _FillRect(void *p, BRect rect) { return ((PictureIterator *) p)->FillRect(rect); } -static void _StrokeRoundRect(void *p, BRect rect, BPoint radii) { return ((PictureIterator *) p)->StrokeRoundRect(rect, radii); } -static void _FillRoundRect(void *p, BRect rect, BPoint radii) { return ((PictureIterator *) p)->FillRoundRect(rect, radii); } -static void _StrokeBezier(void *p, BPoint *control) { return ((PictureIterator *) p)->StrokeBezier(control); } -static void _FillBezier(void *p, BPoint *control) { return ((PictureIterator *) p)->FillBezier(control); } -static void _StrokeArc(void *p, BPoint center, BPoint radii, float startTheta, float arcTheta) { return ((PictureIterator *) p)->StrokeArc(center, radii, startTheta, arcTheta); } -static void _FillArc(void *p, BPoint center, BPoint radii, float startTheta, float arcTheta) { return ((PictureIterator *) p)->FillArc(center, radii, startTheta, arcTheta); } -static void _StrokeEllipse(void *p, BPoint center, BPoint radii) { return ((PictureIterator *) p)->StrokeEllipse(center, radii); } -static void _FillEllipse(void *p, BPoint center, BPoint radii) { return ((PictureIterator *) p)->FillEllipse(center, radii); } -static void _StrokePolygon(void *p, int32 numPoints, BPoint *points, bool isClosed) { return ((PictureIterator *) p)->StrokePolygon(numPoints, points, isClosed); } -static void _FillPolygon(void *p, int32 numPoints, BPoint *points, bool isClosed) { return ((PictureIterator *) p)->FillPolygon(numPoints, points, isClosed); } -static void _StrokeShape(void * p, BShape *shape) { return ((PictureIterator *) p)->StrokeShape(shape); } -static void _FillShape(void * p, BShape *shape) { return ((PictureIterator *) p)->FillShape(shape); } -static void _DrawString(void *p, char *string, float deltax, float deltay) { return ((PictureIterator *) p)->DrawString(string, deltax, deltay); } -static void _DrawPixels(void *p, BRect src, BRect dest, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data) - { return ((PictureIterator *) p)->DrawPixels(src, dest, width, height, bytesPerRow, pixelFormat, flags, data); } -static void _SetClippingRects(void *p, BRect *rects, uint32 numRects) { return ((PictureIterator *) p)->SetClippingRects(rects, numRects); } -static void _ClipToPicture(void * p, BPicture *picture, BPoint point, bool clip_to_inverse_picture) { return ((PictureIterator *) p)->ClipToPicture(picture, point, clip_to_inverse_picture); } -static void _PushState(void *p) { return ((PictureIterator *) p)->PushState(); } -static void _PopState(void *p) { return ((PictureIterator *) p)->PopState(); } -static void _EnterStateChange(void *p) { return ((PictureIterator *) p)->EnterStateChange(); } -static void _ExitStateChange(void *p) { return ((PictureIterator *) p)->ExitStateChange(); } -static void _EnterFontState(void *p) { return ((PictureIterator *) p)->EnterFontState(); } -static void _ExitFontState(void *p) { return ((PictureIterator *) p)->ExitFontState(); } -static void _SetOrigin(void *p, BPoint pt) { return ((PictureIterator *) p)->SetOrigin(pt); } -static void _SetPenLocation(void *p, BPoint pt) { return ((PictureIterator *) p)->SetPenLocation(pt); } -static void _SetDrawingMode(void *p, drawing_mode mode) { return ((PictureIterator *) p)->SetDrawingMode(mode); } -static void _SetLineMode(void *p, cap_mode capMode, join_mode joinMode, float miterLimit) { return ((PictureIterator *) p)->SetLineMode(capMode, joinMode, miterLimit); } -static void _SetPenSize(void *p, float size) { return ((PictureIterator *) p)->SetPenSize(size); } -static void _SetForeColor(void *p, rgb_color color) { return ((PictureIterator *) p)->SetForeColor(color); } -static void _SetBackColor(void *p, rgb_color color) { return ((PictureIterator *) p)->SetBackColor(color); } -static void _SetStipplePattern(void *p, pattern pat) { return ((PictureIterator *) p)->SetStipplePattern(pat); } -static void _SetScale(void *p, float scale) { return ((PictureIterator *) p)->SetScale(scale); } -static void _SetFontFamily(void *p, char *family) { return ((PictureIterator *) p)->SetFontFamily(family); } -static void _SetFontStyle(void *p, char *style) { return ((PictureIterator *) p)->SetFontStyle(style); } -static void _SetFontSpacing(void *p, int32 spacing) { return ((PictureIterator *) p)->SetFontSpacing(spacing); } -static void _SetFontSize(void *p, float size) { return ((PictureIterator *) p)->SetFontSize(size); } -static void _SetFontRotate(void *p, float rotation) { return ((PictureIterator *) p)->SetFontRotate(rotation); } -static void _SetFontEncoding(void *p, int32 encoding) { return ((PictureIterator *) p)->SetFontEncoding(encoding); } -static void _SetFontFlags(void *p, int32 flags) { return ((PictureIterator *) p)->SetFontFlags(flags); } -static void _SetFontShear(void *p, float shear) { return ((PictureIterator *) p)->SetFontShear(shear); } -static void _SetFontFace(void * p, int32 flags) { return ((PictureIterator *) p)->SetFontFace(flags); } - -// undefined or undocumented operation handlers... -static void _op0(void * p) { return ((PictureIterator *) p)->Op(0); } -static void _op19(void * p) { return ((PictureIterator *) p)->Op(19); } -static void _op45(void * p) { return ((PictureIterator *) p)->Op(45); } -static void _op47(void * p) { return ((PictureIterator *) p)->Op(47); } -static void _op48(void * p) { return ((PictureIterator *) p)->Op(48); } -static void _op49(void * p) { return ((PictureIterator *) p)->Op(49); } - -// Private Variables -// ----------------- - -static void * -playbackHandlers[] = { - (void*)_op0, // 0 no operation - (void*)_MovePenBy, // 1 MovePenBy(void *user, BPoint delta) - (void*)_StrokeLine, // 2 StrokeLine(void *user, BPoint start, BPoint end) - (void*)_StrokeRect, // 3 StrokeRect(void *user, BRect rect) - (void*)_FillRect, // 4 FillRect(void *user, BRect rect) - (void*)_StrokeRoundRect, // 5 StrokeRoundRect(void *user, BRect rect, BPoint radii) - (void*)_FillRoundRect, // 6 FillRoundRect(void *user, BRect rect, BPoint radii) - (void*)_StrokeBezier, // 7 StrokeBezier(void *user, BPoint *control) - (void*)_FillBezier, // 8 FillBezier(void *user, BPoint *control) - (void*)_StrokeArc, // 9 StrokeArc(void *user, BPoint center, BPoint radii, float startTheta, float arcTheta) - (void*)_FillArc, // 10 FillArc(void *user, BPoint center, BPoint radii, float startTheta, float arcTheta) - (void*)_StrokeEllipse, // 11 StrokeEllipse(void *user, BPoint center, BPoint radii) - (void*)_FillEllipse, // 12 FillEllipse(void *user, BPoint center, BPoint radii) - (void*)_StrokePolygon, // 13 StrokePolygon(void *user, int32 numPoints, BPoint *points, bool isClosed) - (void*)_FillPolygon, // 14 FillPolygon(void *user, int32 numPoints, BPoint *points, bool isClosed) - (void*)_StrokeShape, // 15 StrokeShape(void *user, BShape *shape) - (void*)_FillShape, // 16 FillShape(void *user, BShape *shape) - (void*)_DrawString, // 17 DrawString(void *user, char *string, float deltax, float deltay) - (void*)_DrawPixels, // 18 DrawPixels(void *user, BRect src, BRect dest, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data) - (void*)_op19, // 19 *reserved* - (void*)_SetClippingRects, // 20 SetClippingRects(void *user, BRect *rects, uint32 numRects) - (void*)_ClipToPicture, // 21 ClipToPicture(void *user, BPicture *picture, BPoint pt, bool clip_to_inverse_picture) - (void*)_PushState, // 22 PushState(void *user) - (void*)_PopState, // 23 PopState(void *user) - (void*)_EnterStateChange, // 24 EnterStateChange(void *user) - (void*)_ExitStateChange, // 25 ExitStateChange(void *user) - (void*)_EnterFontState, // 26 EnterFontState(void *user) - (void*)_ExitFontState, // 27 ExitFontState(void *user) - (void*)_SetOrigin, // 28 SetOrigin(void *user, BPoint pt) - (void*)_SetPenLocation, // 29 SetPenLocation(void *user, BPoint pt) - (void*)_SetDrawingMode, // 30 SetDrawingMode(void *user, drawing_mode mode) - (void*)_SetLineMode, // 31 SetLineMode(void *user, cap_mode capMode, join_mode joinMode, float miterLimit) - (void*)_SetPenSize, // 32 SetPenSize(void *user, float size) - (void*)_SetForeColor, // 33 SetForeColor(void *user, rgb_color color) - (void*)_SetBackColor, // 34 SetBackColor(void *user, rgb_color color) - (void*)_SetStipplePattern, // 35 SetStipplePattern(void *user, pattern p) - (void*)_SetScale, // 36 SetScale(void *user, float scale) - (void*)_SetFontFamily, // 37 SetFontFamily(void *user, char *family) - (void*)_SetFontStyle, // 38 SetFontStyle(void *user, char *style) - (void*)_SetFontSpacing, // 39 SetFontSpacing(void *user, int32 spacing) - (void*)_SetFontSize, // 40 SetFontSize(void *user, float size) - (void*)_SetFontRotate, // 41 SetFontRotate(void *user, float rotation) - (void*)_SetFontEncoding, // 42 SetFontEncoding(void *user, int32 encoding) - (void*)_SetFontFlags, // 43 SetFontFlags(void *user, int32 flags) - (void*)_SetFontShear, // 44 SetFontShear(void *user, float shear) - (void*)_op45, // 45 *reserved* - (void*)_SetFontFace, // 46 SetFontFace(void *user, int32 flags) - (void*)_op47, - (void*)_op48, - (void*)_op49, - - NULL - }; - -void -PictureIterator::Iterate(BPicture* picture) { - picture->Play(playbackHandlers, 50, this); -} diff --git a/src/add-ons/print/drivers/pdf/source/PictureIterator.h b/src/add-ons/print/drivers/pdf/source/PictureIterator.h deleted file mode 100644 index faeeac3bc1..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PictureIterator.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001, 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _PICTURE_ITERATOR_H -#define _PICTURE_ITERATOR_H - -#include -#include - -class PictureIterator -{ -public: - virtual ~PictureIterator() { } - - // BPicture playback handlers - virtual void Op(int number) { } - virtual void MovePenBy(BPoint delta) { } - virtual void StrokeLine(BPoint start, BPoint end) { } - virtual void StrokeRect(BRect rect) { } - virtual void FillRect(BRect rect) { } - virtual void StrokeRoundRect(BRect rect, BPoint radii) { } - virtual void FillRoundRect(BRect rect, BPoint radii) { } - virtual void StrokeBezier(BPoint *control) { } - virtual void FillBezier(BPoint *control) { } - virtual void StrokeArc(BPoint center, BPoint radii, float startTheta, float arcTheta) { } - virtual void FillArc(BPoint center, BPoint radii, float startTheta, float arcTheta) { } - virtual void StrokeEllipse(BPoint center, BPoint radii) { } - virtual void FillEllipse(BPoint center, BPoint radii) { } - virtual void StrokePolygon(int32 numPoints, BPoint *points, bool isClosed) { } - virtual void FillPolygon(int32 numPoints, BPoint *points, bool isClosed) { } - virtual void StrokeShape(BShape *shape) { } - virtual void FillShape(BShape *shape) { } - virtual void DrawString(char *string, float escapement_nospace, float escapement_space) { } - virtual void DrawPixels(BRect src, BRect dest, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data) { } - virtual void SetClippingRects(BRect *rects, uint32 numRects) { } - virtual void ClipToPicture(BPicture *picture, BPoint point, bool clip_to_inverse_picture) { } - virtual void PushState() { } - virtual void PopState() { } - virtual void EnterStateChange() { } - virtual void ExitStateChange() { } - virtual void EnterFontState() { } - virtual void ExitFontState() { } - virtual void SetOrigin(BPoint pt) { } - virtual void SetPenLocation(BPoint pt) { } - virtual void SetDrawingMode(drawing_mode mode) { } - virtual void SetLineMode(cap_mode capMode, join_mode joinMode, float miterLimit) { } - virtual void SetPenSize(float size) { } - virtual void SetForeColor(rgb_color color) { } - virtual void SetBackColor(rgb_color color) { } - virtual void SetStipplePattern(pattern p) { } - virtual void SetScale(float scale) { } - virtual void SetFontFamily(char *family) { } - virtual void SetFontStyle(char *style) { } - virtual void SetFontSpacing(int32 spacing) { } - virtual void SetFontSize(float size) { } - virtual void SetFontRotate(float rotation) { } - virtual void SetFontEncoding(int32 encoding) { } - virtual void SetFontFlags(int32 flags) { } - virtual void SetFontShear(float shear) { } - virtual void SetFontFace(int32 flags) { } - - virtual void Iterate(BPicture* picture); -}; - -#endif // _PICTURE_ITERATOR_H diff --git a/src/add-ons/print/drivers/pdf/source/PrinterDriver.cpp b/src/add-ons/print/drivers/pdf/source/PrinterDriver.cpp deleted file mode 100644 index 2ccb112c50..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterDriver.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001-2003 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - - -#include -#include // for memset() - -#include - -#include "PrinterDriver.h" - -#include "PageSetupWindow.h" -#include "JobSetupWindow.h" -#include "StatusWindow.h" -#include "PrinterSettings.h" -#include "Report.h" - -// Private prototypes -// ------------------ - -#ifdef CODEWARRIOR - #pragma mark [Constructor & destructor] -#endif - -// Constructor & destructor -// ------------------------ - -// -------------------------------------------------- -PrinterDriver::PrinterDriver() - : fJobFile(NULL), - fPrinterNode(NULL), - fJobMsg(NULL) -{ -} - - -// -------------------------------------------------- -PrinterDriver::~PrinterDriver() -{ -} - -#ifdef CODEWARRIOR - #pragma mark [Public methods] -#endif - -#ifdef B_BEOS_VERSION_DANO -struct print_file_header { - int32 version; - int32 page_count; - off_t first_page; - int32 _reserved_3_; - int32 _reserved_4_; - int32 _reserved_5_; -}; -#endif - -// Public methods -// -------------- - -status_t -PrinterDriver::PrintJob - ( - BFile *jobFile, // spool file - BNode *printerNode, // printer node, used by OpenTransport() to find & load transport add-on - BMessage *jobMsg // job message - ) -{ - print_file_header pfh; - status_t status; - BMessage *msg; - int32 page; - uint32 copy; - uint32 copies; - const int32 passes = 2; - - fJobFile = jobFile; - fPrinterNode = printerNode; - fJobMsg = jobMsg; - - if (!fJobFile || !fPrinterNode) - return B_ERROR; - - if (fPrintTransport.Open(fPrinterNode) != B_OK) { - return B_ERROR; - } - if (fPrintTransport.IsPrintToFileCanceled()) { - return B_OK; - } - - // read print file header - fJobFile->Seek(0, SEEK_SET); - fJobFile->Read(&pfh, sizeof(pfh)); - - // read job message - fJobMsg = msg = new BMessage(); - msg->Unflatten(fJobFile); - // We have to load the settings here for Dano/Zeta because they don't store - // all fields from the message returned by config_job in the job file! - PrinterSettings::Read(printerNode, msg, PrinterSettings::kJobSettings); - - if (msg->HasInt32("copies")) { - copies = msg->FindInt32("copies"); - } else { - copies = 1; - } - - // force creation of Report object - Report::Instance(); - - // show status window - StatusWindow* statusWindow = new StatusWindow(passes, pfh.page_count, this); - - status = BeginJob(); - - fPrinting = true; - for (fPass = 0; fPass < passes && status == B_OK && fPrinting; fPass++) { - for (copy = 0; copy < copies && status == B_OK && fPrinting; copy++) - { - for (page = 1; page <= pfh.page_count && status == B_OK && fPrinting; page++) { - statusWindow->NextPage(); - status = PrintPage(page, pfh.page_count); - } - - // re-read job message for next page - fJobFile->Seek(sizeof(pfh), SEEK_SET); - msg->Unflatten(fJobFile); - } - } - - status_t s = EndJob(); - if (status == B_OK) status = s; - - delete fJobMsg; - - // close status window - if (Report::Instance()->CountItems() != 0) { - statusWindow->WaitForClose(); - } - if (statusWindow->Lock()) { - statusWindow->Quit(); - } - - // delete Report object - Report::Instance()->Free(); - - return status; -} - -/** - * This will stop the printing loop - * - * @param none - * @return void - */ -void -PrinterDriver::StopPrinting() -{ - fPrinting = false; -} - - -// -------------------------------------------------- -status_t -PrinterDriver::BeginJob() -{ - return B_OK; -} - - -// -------------------------------------------------- -status_t -PrinterDriver::PrintPage(int32 pageNumber, int32 pageCount) -{ - char text[128]; - - sprintf(text, "Faking print of page %" B_PRId32 "/%" B_PRId32 "...", pageNumber, pageCount); - BAlert *alert = new BAlert("PrinterDriver::PrintPage()", text, "Hmm?"); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return B_OK; -} - - -// -------------------------------------------------- -status_t -PrinterDriver::EndJob() -{ - return B_OK; -} - - -// -------------------------------------------------- -status_t -PrinterDriver::PrinterSetup(char *printerName) - // name of printer, to attach printer settings -{ - return B_OK; -} - - -// -------------------------------------------------- -status_t -PrinterDriver::PageSetup(BMessage *setupMsg, const char *printerName) -{ - PageSetupWindow *psw; - - psw = new PageSetupWindow(setupMsg, printerName); - return psw->Go(); -} - - -// -------------------------------------------------- -status_t -PrinterDriver::JobSetup(BMessage *jobMsg, const char *printerName) -{ - // set default value if property not set - if (!jobMsg->HasInt32("copies")) - jobMsg->AddInt32("copies", 1); - - if (!jobMsg->HasInt32("first_page")) - jobMsg->AddInt32("first_page", 1); - - if (!jobMsg->HasInt32("last_page")) - jobMsg->AddInt32("last_page", MAX_INT32); - - JobSetupWindow * jsw; - - jsw = new JobSetupWindow(jobMsg, printerName); - return jsw->Go(); -} - -#ifdef CODEWARRIOR - #pragma mark [Privates routines] -#endif - -// Private routines -// ---------------- diff --git a/src/add-ons/print/drivers/pdf/source/PrinterDriver.h b/src/add-ons/print/drivers/pdf/source/PrinterDriver.h deleted file mode 100644 index 2af4c8cd09..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterDriver.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001-2003 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _PRINTER_DRIVER_H -#define _PRINTER_DRIVER_H - -#include -#include - -#include "PrintTransport.h" - -class BNode; - -#ifndef ROUND_UP - #define ROUND_UP(x, y) (((x) + (y) - 1) & ~((y) - 1)) -#endif - -#define MAX_INT32 ((int32)0x7fffffffL) - -// transport add-on calls definition -extern "C" { - typedef BDataIO *(*init_transport_proc)(BMessage *); - typedef void (*exit_transport_proc)(void); -}; - - -// close StatusWindow after pdf generation -enum CloseOption { - kAlways, - kNoErrors, - kNoErrorsOrWarnings, - kNoErrorsWarningsOrInfo, - kNever, -}; - - - -/** - * Class PrinterDriver - */ -class PrinterDriver -{ -public: - // constructors / destructor - PrinterDriver(); - virtual ~PrinterDriver(); - - void StopPrinting(); - - virtual status_t PrintJob(BFile *jobFile, BNode *printerNode, BMessage *jobMsg); - virtual status_t BeginJob(); - virtual status_t PrintPage(int32 pageNumber, int32 pageCount); - virtual status_t EndJob(); - - // configuration default methods - virtual status_t PrinterSetup(char *printerName); - virtual status_t PageSetup(BMessage *msg, const char *printerName = NULL); - virtual status_t JobSetup(BMessage *msg, const char *printerName = NULL); - - // accessors - inline BFile *JobFile() { return fJobFile; } - inline BNode *PrinterNode() { return fPrinterNode; } - inline BMessage *JobMsg() { return fJobMsg; } - inline BDataIO *Transport() { return fPrintTransport.GetDataIO(); } - inline int32 Pass() const { return fPass; } - - // publics status code - typedef enum { - PORTRAIT_ORIENTATION, - LANDSCAPE_ORIENTATION - } Orientation; - - -private: - BFile *fJobFile; - BNode *fPrinterNode; - BMessage *fJobMsg; - - volatile Orientation fOrientation; - - bool fPrinting; - int32 fPass; - - // transport-related - PrintTransport fPrintTransport; -}; - -#endif // _PRINTER_DRIVER_H diff --git a/src/add-ons/print/drivers/pdf/source/PrinterPrefs.cpp b/src/add-ons/print/drivers/pdf/source/PrinterPrefs.cpp deleted file mode 100644 index b0243d2ed6..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterPrefs.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - -PrinterPrefs.cpp - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef PRINTER_PREFS_H -#include "PrinterPrefs.h" -#endif - -/** - * Constructor - * - * @param none - * @return none - */ -PrinterPrefs::PrinterPrefs() -{ -} - -/** - * Destructor - * - * @param none - * @return none - */ -PrinterPrefs::~PrinterPrefs() -{ -} - -/** - * Init the settings message from settings file - * - * @param BMessage*, the settings - * @return status_t, any result from the operation - */ -status_t -PrinterPrefs::LoadSettings(BMessage *settings) -{ - status_t status; - BFile file; - - status = find_directory(B_SYSTEM_SETTINGS_DIRECTORY, &fSettingsPath); - if (status != B_OK) { - // Could not find settings folder. - return status; - } - - fSettingsPath.Append(SETTINGS_FILE_NAME); - status = file.SetTo(fSettingsPath.Path(), B_READ_ONLY); - if (status == B_OK) { - status = settings->Unflatten(&file); - } - - return status; -} - -/** - * Save the settings - * - * @param BMessage*, the settings - * @return status_t - */ -status_t -PrinterPrefs::SaveSettings(BMessage* settings) -{ - status_t status; - BFile file; - - status = file.SetTo(fSettingsPath.Path(), B_WRITE_ONLY | B_CREATE_FILE); - if (status == B_OK) { - return settings->Flatten(&file); - } - return status; -} - - diff --git a/src/add-ons/print/drivers/pdf/source/PrinterPrefs.h b/src/add-ons/print/drivers/pdf/source/PrinterPrefs.h deleted file mode 100644 index 6ea72e6115..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterPrefs.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - -PrinterPrefs.h - -Copyright (c) 2002 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef PRINTER_PREFS_H -#define PRINTER_PREFS_H - -#include -#include - -const char SETTINGS_FILE_NAME[] = "pdf_printer_settings"; - -/** - * Class - */ -class PrinterPrefs -{ -private: - BPath fSettingsPath; - -public: - PrinterPrefs(); - ~PrinterPrefs(); - - status_t LoadSettings(BMessage* settings); - status_t SaveSettings(BMessage* settings); -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp b/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp deleted file mode 100644 index 7109e07b3f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp +++ /dev/null @@ -1,306 +0,0 @@ -/* - -Printer Settings helper class - -Copyright (c) 2001-2003 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "PrinterSettings.h" - -#include - -#include "PrintUtils.h" - -#include "PrinterPrefs.h" - -/** - * Constructor - * - * @param BNode& the spooler folder - * @return void - */ -PrinterSettings::PrinterSettings(BNode &printer, Kind kind) -{ - fNode = printer; - fErr = fNode.InitCheck(); - fKind = kind; -} - -/** - * InitCheck, check status of initialization - * - * @param none - * @return status_t the status - */ -status_t -PrinterSettings::InitCheck() -{ - return fErr; -} - -/** - * Destructor - * - * @param none - * @return void - */ -PrinterSettings::~PrinterSettings() { } - -/** - * ReadSettings() return the settings for the printer from flattened BMessage - * attached as an attribute to the spool folder node. - * - * @param BMessage* the settings in a message object - * @return status_t the status of the read operation - */ -status_t -PrinterSettings::ReadSettings(BMessage *msg) -{ - attr_info info; - char *data = NULL; - status_t err = B_ERROR; - - msg->MakeEmpty(); - msg->what = 0; - - if (fNode.GetAttrInfo(GetAttrName(), &info) == B_OK) { - data = (char *)malloc(info.size); - if (data != NULL) { - err = fNode.ReadAttr(GetAttrName(), B_MESSAGE_TYPE, 0, data, info.size); - if (err >= 0) { - err = B_OK; - msg->Unflatten(data); - } - free(data); - } - } else { // no attributes found, then we create them - GetDefaults(msg); - WriteSettings(msg); - err = B_OK; - } - return err; -} - -/** - * WriteSettings() save the settings in a flattened BMessage and attach this - * to the node as an attribute - * - * @param BMessage* the settings to save in a BMessage object - * @return status_t the status of the write operation - */ -status_t -PrinterSettings::WriteSettings(BMessage* msg) -{ - ssize_t length; - char *data = NULL; - status_t err = B_ERROR; - - length = msg->FlattenedSize(); - if (length < 0) - return length; - data = (char *) malloc(length); - if (data != NULL) { - msg->Flatten(data, length); - err = fNode.WriteAttr(GetAttrName(), B_MESSAGE_TYPE, 0, data, length); - if (err > 0) { - err = B_OK; - } - free(data); - } - return err; -} - -/** - * GetDefaults() return the default settings for the printer using: - * 1) text file pdf_printer_settings in /home/config/settings - * 2) if file not found return hard coded in this method... Yuck! - * - * @param BMessage* the settings in a message object - * @return status_t the status of the read operation - */ -status_t -PrinterSettings::GetDefaults(BMessage *msg) -{ - // check to see if there is a pdf_printer_settings file - PrinterPrefs prefs; - BMessage settings; - settings.what = 'okok'; - - if (prefs.LoadSettings(&settings) == B_OK && Validate(&settings) == B_OK) { - // yes, copy the settings into message - *msg = settings; - } else { - // set default value if property not set - msg->AddInt64("xres", kXRes); - msg->AddInt64("yres", kYRes); - msg->AddInt32("orientation", kOrientation); - msg->AddRect("paper_rect", kPaperRect); - msg->AddRect("printable_rect", kPrintRect); - msg->AddFloat("scaling", kRes); - msg->AddString("pdf_compatibility", kPDFCompatibilty); - msg->AddInt32("pdf_compression", kPDFCompression); - msg->AddInt32("units", kUnits); - msg->AddBool("create_web_links", kCreateWebLinks); - msg->AddFloat("link_border_width", kLinkBorderWidth); - msg->AddBool("create_bookmarks", kCreateBookmarks); - msg->AddString("bookmark_definition_file", kBookmarkDefinitionFile); - msg->AddBool("create_xrefs", kCreateXRefs); - msg->AddString("xrefs_file", kXRefsFile); - msg->AddInt32("close_option", kCloseStatusWindow); -#if HAVE_FULLVERSION_PDF_LIB - msg->AddString("pdflib_license_key", kPDFLibLicenseKey); - msg->AddString("master_password", kMasterPassword); - msg->AddString("user_password", kUserPassword); - msg->AddString("permissions", kPermissions); -#endif - - // create pdf_printer_settings file - prefs.SaveSettings(msg); - } - - return B_OK; -} - -/** - * Validate(), check that the message is built correctly for the PDF driver - Safe: does not modify the message - * - * @param BMessage*, the message to validate - * @return status_t, B_OK if the message is correctly structured - * B_ERROR if the message is corrupt - */ -status_t -PrinterSettings::Validate(const BMessage *msg) -{ - int64 i64; - int32 i32; - float f; - BRect r; - BString s; - bool b; - - // Test for data field existance - if (msg->FindInt64("xres", 0, &i64) != B_OK) { - return B_ERROR; - } - if (msg->FindInt64("yres", 0, &i64) != B_OK) { - return B_ERROR; - } - if (msg->FindInt32("orientation", &i32) != B_OK) { - return B_ERROR; - } - if (msg->FindRect("paper_rect", &r) != B_OK) { - return B_ERROR; - } - if (msg->FindRect("printable_rect", &r) != B_OK) { - return B_ERROR; - } - if (msg->FindFloat("scaling", &f) != B_OK) { - return B_ERROR; - } - if (msg->FindString("pdf_compatibility", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindInt32("pdf_compression", &i32) != B_OK) { - return B_ERROR; - } - if (msg->FindInt32("units", &i32) != B_OK) { - return B_ERROR; - } - if (msg->FindBool("create_web_links", &b) != B_OK) { - return B_ERROR; - } - if (msg->FindFloat("link_border_width", &f) != B_OK) { - return B_ERROR; - } - if (msg->FindBool("create_bookmarks", &b) != B_OK) { - return B_ERROR; - } - if (msg->FindString("bookmark_definition_file", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindBool("create_xrefs", &b) != B_OK) { - return B_ERROR; - } - if (msg->FindString("xrefs_file", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindInt32("close_option", &i32) != B_OK) { - return B_ERROR; - } -#if HAVE_FULLVERSION_PDF_LIB - if (msg->FindString("pdflib_license_key", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindString("user_password", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindString("master_password", &s) != B_OK) { - return B_ERROR; - } - if (msg->FindString("permissions", &s) != B_OK) { - return B_ERROR; - } -#endif - // message ok - return B_OK; -} - - -void -PrinterSettings::Read(BNode* node, BMessage* msg, Kind kind) -{ - PrinterSettings ps(*node, kind); - if (ps.Validate(msg) != B_OK) { - msg->MakeEmpty(); - } - BMessage settings; - // check for previously saved settings - if (ps.ReadSettings(&settings) != B_OK || ps.Validate(&settings) != B_OK) { - // if there were none, then create a default set... - ps.GetDefaults(&settings); - } - AddFields(msg, &settings, NULL, NULL, false); -} - -void -PrinterSettings::Update(BNode* node, BMessage* msg, Kind kind) -{ - // Validate the message so that it is good for PDF Writer GUI - PrinterSettings ps(*node, kind); - ps.WriteSettings(msg); -} - -const char* -PrinterSettings::GetAttrName() const -{ - if (fKind == kJobSettings) { - return kAttrJobSettings; - } else { - return kAttrPageSettings; - } -} diff --git a/src/add-ons/print/drivers/pdf/source/PrinterSettings.h b/src/add-ons/print/drivers/pdf/source/PrinterSettings.h deleted file mode 100644 index 30339fe444..0000000000 --- a/src/add-ons/print/drivers/pdf/source/PrinterSettings.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - -PrinterSettings.h - -Copyright (c) 2001-2003 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef PRINTER_SETTINGS_H -#define PRINTER_SETTINGS_H - -#include - -#include "PrinterDriver.h" - -// Constants -const char kAttrPageSettings[] = "pdfwriter/page_settings"; -const char kAttrJobSettings[] = "pdfwriter/job_settings"; -// page settings -const char kPDFCompatibilty[] = "1.3"; -const char kPrinterSettingsPath[] = "printers/"; -const int64 kXRes = 360; -const int64 kYRes = 360; -const int32 kOrientation = PrinterDriver::PORTRAIT_ORIENTATION; -const float kRes = 72.0f; -const int32 kPDFCompression = 3; -const int32 kUnits = 1; -const float kLetterW = 8.5f * kRes; -const float kLetterH = 11.0f * kRes; -const BRect kPaperRect(0, 0, kLetterW, kLetterH); -const BRect kPrintRect(0, 0, kLetterW, kLetterH); -const bool kCreateWebLinks = false; -const float kLinkBorderWidth = 1.0; -const bool kCreateBookmarks = false; -const char kBookmarkDefinitionFile[] = ""; -const bool kCreateXRefs = false; -const char kXRefsFile[] = ""; -const int32 kCloseStatusWindow = 0; -// requires commercial version of PDFlib -#if HAVE_FULLVERSION_PDF_LIB -const char kPDFLibLicenseKey[] = ""; -const char kUserPassword[] = ""; // none if empty -const char kMasterPassword[] = ""; // none if empty -const char kPermissions[] = ""; // all is allowed -#endif -// job settings (we do not have default values for them) - -/** - * Class - */ -class PrinterSettings -{ -public: - enum Kind { - kPageSettings, - kJobSettings - }; - - PrinterSettings(BNode &printer, Kind kind); - ~PrinterSettings(); - - status_t InitCheck(); - status_t WriteSettings(BMessage *msg); - status_t ReadSettings(BMessage *msg); - status_t GetDefaults(BMessage *msg); - status_t Validate(const BMessage *msg); - - static void Read(BNode* node, BMessage* msg, Kind kind); - static void Update(BNode* node, BMessage* msg, Kind kind); - -private: - PrinterSettings(); - const char* GetAttrName() const; - - BNode fNode; - status_t fErr; - enum Kind fKind; -}; - - -#endif - diff --git a/src/add-ons/print/drivers/pdf/source/RegExp.cpp b/src/add-ons/print/drivers/pdf/source/RegExp.cpp deleted file mode 100644 index 1a270e6ca7..0000000000 --- a/src/add-ons/print/drivers/pdf/source/RegExp.cpp +++ /dev/null @@ -1,1340 +0,0 @@ -/* -Open Tracker License - -Terms and Conditions - -Copyright (c) 1991-2000, Be Incorporated. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice applies to all licensees -and shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Be Incorporated shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization from Be Incorporated. - -Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks -of Be Incorporated in the United States and other countries. Other brand product -names are registered trademarks or trademarks of their respective holders. -All rights reserved. -*/ - -// This code is based on regexp.c, v.1.3 by Henry Spencer: - -// @(#)regexp.c 1.3 of 18 April 87 -// -// Copyright (c) 1986 by University of Toronto. -// Written by Henry Spencer. Not derived from licensed software. -// -// Permission is granted to anyone to use this software for any -// purpose on any computer system, and to redistribute it freely, -// subject to the following restrictions: -// -// 1. The author is not responsible for the consequences of use of -// this software, no matter how awful, even if they arise -// from defects in it. -// -// 2. The origin of this software must not be misrepresented, either -// by explicit claim or by omission. -// -// 3. Altered versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// Beware that some of this code is subtly aware of the way operator -// precedence is structured in regular expressions. Serious changes in -// regular-expression syntax might require a total rethink. -// - -// ALTERED VERSION: Adapted to ANSI C and C++ for the OpenTracker -// project (www.opentracker.org), Jul 11, 2000. - -#include -#include -#include - -#include - -#include "RegExp.h" - -// The first byte of the regexp internal "program" is actually this magic -// number; the start node begins in the second byte. - -const uint8 kRegExpMagic = 0234; - -// The "internal use only" fields in RegExp.h are present to pass info from -// compile to execute that permits the execute phase to run lots faster on -// simple cases. They are: -// -// regstart char that must begin a match; '\0' if none obvious -// reganch is the match anchored (at beginning-of-line only)? -// regmust string (pointer into program) that match must include, or NULL -// regmlen length of regmust string -// -// Regstart and reganch permit very fast decisions on suitable starting points -// for a match, cutting down the work a lot. Regmust permits fast rejection -// of lines that cannot possibly match. The regmust tests are costly enough -// that Compile() supplies a regmust only if the r.e. contains something -// potentially expensive (at present, the only such thing detected is * or + -// at the start of the r.e., which can involve a lot of backup). Regmlen is -// supplied because the test in RunMatcher() needs it and Compile() is computing -// it anyway. -// -// -// -// Structure for regexp "program". This is essentially a linear encoding -// of a nondeterministic finite-state machine (aka syntax charts or -// "railroad normal form" in parsing technology). Each node is an opcode -// plus a "next" pointer, possibly plus an operand. "Next" pointers of -// all nodes except kRegExpBranch implement concatenation; a "next" pointer with -// a kRegExpBranch on both ends of it is connecting two alternatives. (Here we -// have one of the subtle syntax dependencies: an individual kRegExpBranch (as -// opposed to a collection of them) is never concatenated with anything -// because of operator precedence.) The operand of some types of node is -// a literal string; for others, it is a node leading into a sub-FSM. In -// particular, the operand of a kRegExpBranch node is the first node of the branch. -// (NB this is *not* a tree structure: the tail of the branch connects -// to the thing following the set of kRegExpBranches.) The opcodes are: -// - -// definition number opnd? meaning -enum { - kRegExpEnd = 0, // no End of program. - kRegExpBol = 1, // no Match "" at beginning of line. - kRegExpEol = 2, // no Match "" at end of line. - kRegExpAny = 3, // no Match any one character. - kRegExpAnyOf = 4, // str Match any character in this string. - kRegExpAnyBut = 5, // str Match any character not in this string. - kRegExpBranch = 6, // node Match this alternative, or the next... - kRegExpBack = 7, // no Match "", "next" ptr points backward. - kRegExpExactly = 8, // str Match this string. - kRegExpNothing = 9, // no Match empty string. - kRegExpStar = 10, // node Match this (simple) thing 0 or more times. - kRegExpPlus = 11, // node Match this (simple) thing 1 or more times. - kRegExpOpen = 20, // no Mark this point in input as start of #n. - // kRegExpOpen + 1 is number 1, etc. - kRegExpClose = 30 // no Analogous to kRegExpOpen. -}; - -// -// Opcode notes: -// -// kRegExpBranch The set of branches constituting a single choice are hooked -// together with their "next" pointers, since precedence prevents -// anything being concatenated to any individual branch. The -// "next" pointer of the last kRegExpBranch in a choice points to the -// thing following the whole choice. This is also where the -// final "next" pointer of each individual branch points; each -// branch starts with the operand node of a kRegExpBranch node. -// -// kRegExpBack Normal "next" pointers all implicitly point forward; kRegExpBack -// exists to make loop structures possible. -// -// kRegExpStar,kRegExpPlus '?', and complex '*' and '+', are implemented as circular -// kRegExpBranch structures using kRegExpBack. Simple cases (one character -// per match) are implemented with kRegExpStar and kRegExpPlus for speed -// and to minimize recursive plunges. -// -// kRegExpOpen,kRegExpClose ...are numbered at compile time. -// -// -// -// A node is one char of opcode followed by two chars of "next" pointer. -// "Next" pointers are stored as two 8-bit pieces, high order first. The -// value is a positive offset from the opcode of the node containing it. -// An operand, if any, simply follows the node. (Note that much of the -// code generation knows about this implicit relationship.) -// -// Using two bytes for the "next" pointer is vast overkill for most things, -// but allows patterns to get big without disasters. -// - -const char *kMeta = "^$.[()|?+*\\"; -const int32 kMaxSize = 32767L; // Probably could be 65535L. - -// Flags to be passed up and down: -enum { - kHasWidth = 01, // Known never to match null string. - kSimple = 02, // Simple enough to be kRegExpStar/kRegExpPlus operand. - kSPStart = 04, // Starts with * or +. - kWorst = 0 // Worst case. -}; - -const char *kRegExpErrorStringArray[] = { - "Unmatched parenthesis.", - "Expression too long.", - "Too many parenthesis.", - "Junk on end.", - "*+? operand may be empty.", - "Nested *?+.", - "Invalid bracket range.", - "Unmatched brackets.", - "Internal error.", - "?+* follows nothing.", - "Trailing \\.", - "Corrupted expression.", - "Memory corruption.", - "Corrupted pointers.", - "Corrupted opcode." -}; - -#ifdef DEBUG -int32 regnarrate = 0; -#endif - -RegExp::RegExp() - : fError(B_OK), - fRegExp(NULL) -{ -} - -RegExp::RegExp(const char *pattern) - : fError(B_OK), - fRegExp(NULL) -{ - fRegExp = Compile(pattern); -} - -RegExp::RegExp(const BString &pattern) - : fError(B_OK), - fRegExp(NULL) -{ - fRegExp = Compile(pattern.String()); -} - -RegExp::~RegExp() -{ - free(fRegExp); -} - - - -status_t -RegExp::InitCheck() const -{ - return fError; -} - -status_t -RegExp::SetTo(const char *pattern) -{ - fError = B_OK; - free(fRegExp); - fRegExp = Compile(pattern); - return fError; -} - -status_t -RegExp::SetTo(const BString &pattern) -{ - fError = B_OK; - free(fRegExp); - fRegExp = Compile(pattern.String()); - return fError; -} - -bool -RegExp::Matches(const char *string) const -{ - if (!fRegExp || !string) - return false; - - return RunMatcher(fRegExp, string) == 1; -} - -bool -RegExp::Matches(const BString &string) const -{ - if (!fRegExp) - return false; - - return RunMatcher(fRegExp, string.String()) == 1; -} - - -// -// - Compile - compile a regular expression into internal code -// -// We can't allocate space until we know how big the compiled form will be, -// but we can't compile it (and thus know how big it is) until we've got a -// place to put the code. So we cheat: we compile it twice, once with code -// generation turned off and size counting turned on, and once "for real". -// This also means that we don't allocate space until we are sure that the -// thing really will compile successfully, and we never have to move the -// code and thus invalidate pointers into it. (Note that it has to be in -// one piece because free() must be able to free it all.) -// -// Beware that the optimization-preparation code in here knows about some -// of the structure of the compiled regexp. - -regexp * -RegExp::Compile(const char *exp) -{ - regexp *r; - const char *scan; - const char *longest; - int32 len; - int32 flags; - - if (exp == NULL) { - SetError(B_BAD_VALUE); - return NULL; - } - - // First pass: determine size, legality. - fInputScanPointer = exp; - fParenthesisCount = 1; - fCodeSize = 0L; - fCodeEmitPointer = &fDummy; - Char(kRegExpMagic); - if (Reg(0, &flags) == NULL) - return NULL; - - // Small enough for pointer-storage convention? - if (fCodeSize >= kMaxSize) { - SetError(REGEXP_TOO_BIG); - return NULL; - } - - // Allocate space. - r = (regexp *)malloc(sizeof(regexp) + fCodeSize); - - if (!r) { - SetError(B_NO_MEMORY); - return NULL; - } - - // Second pass: emit code. - fInputScanPointer = exp; - fParenthesisCount = 1; - fCodeEmitPointer = r->program; - Char(kRegExpMagic); - if (Reg(0, &flags) == NULL) { - free(r); - return NULL; - } - - // Dig out information for optimizations. - r->regstart = '\0'; // Worst-case defaults. - r->reganch = 0; - r->regmust = NULL; - r->regmlen = 0; - scan = r->program + 1; // First kRegExpBranch. - if (*Next((char *)scan) == kRegExpEnd) { // Only one top-level choice. - scan = Operand(scan); - - // Starting-point info. - if (*scan == kRegExpExactly) - r->regstart = *Operand(scan); - else if (*scan == kRegExpBol) - r->reganch++; - - // - // If there's something expensive in the r.e., find the - // longest literal string that must appear and make it the - // regmust. Resolve ties in favor of later strings, since - // the regstart check works with the beginning of the r.e. - // and avoiding duplication strengthens checking. Not a - // strong reason, but sufficient in the absence of others. - // - if (flags&kSPStart) { - longest = NULL; - len = 0; - for (; scan != NULL; scan = Next((char *)scan)) - if (*scan == kRegExpExactly && (int32)strlen(Operand(scan)) >= len) { - longest = Operand(scan); - len = (int32)strlen(Operand(scan)); - } - r->regmust = longest; - r->regmlen = len; - } - } - - return r; -} - -regexp * -RegExp::Expression() const -{ - return fRegExp; -} - -const char * -RegExp::ErrorString() const -{ - if (fError >= REGEXP_UNMATCHED_PARENTHESIS - && fError <= REGEXP_CORRUPTED_OPCODE) - return kRegExpErrorStringArray[fError - B_ERRORS_END]; - - return strerror(fError); -} - - -void -RegExp::SetError(status_t error) const -{ - fError = error; -} - - -// -// - Reg - regular expression, i.e. main body or parenthesized thing -// -// Caller must absorb opening parenthesis. -// -// Combining parenthesis handling with the base level of regular expression -// is a trifle forced, but the need to tie the tails of the branches to what -// follows makes it hard to avoid. -// -char * -RegExp::Reg(int32 paren, int32 *flagp) -{ - char *ret; - char *br; - char *ender; - int32 parno = 0; - int32 flags; - - *flagp = kHasWidth; // Tentatively. - - // Make an kRegExpOpen node, if parenthesized. - if (paren) { - if (fParenthesisCount >= kSubExpressionMax) { - SetError(REGEXP_TOO_MANY_PARENTHESIS); - return NULL; - } - parno = fParenthesisCount; - fParenthesisCount++; - ret = Node((char)(kRegExpOpen + parno)); - } else - ret = NULL; - - // Pick up the branches, linking them together. - br = Branch(&flags); - if (br == NULL) - return NULL; - if (ret != NULL) - Tail(ret, br); // kRegExpOpen -> first - else - ret = br; - if (!(flags & kHasWidth)) - *flagp &= ~kHasWidth; - *flagp |= flags&kSPStart; - while (*fInputScanPointer == '|') { - fInputScanPointer++; - br = Branch(&flags); - if (br == NULL) - return NULL; - Tail(ret, br); // kRegExpBranch -> kRegExpBranch. - if (!(flags & kHasWidth)) - *flagp &= ~kHasWidth; - *flagp |= flags&kSPStart; - } - - // Make a closing node, and hook it on the end. - ender = Node(paren ? (char)(kRegExpClose + parno) : (char)kRegExpEnd); - Tail(ret, ender); - - // Hook the tails of the branches to the closing node. - for (br = ret; br != NULL; br = Next(br)) - OpTail(br, ender); - - // Check for proper termination. - if (paren && *fInputScanPointer++ != ')') { - SetError(REGEXP_UNMATCHED_PARENTHESIS); - return NULL; - } else if (!paren && *fInputScanPointer != '\0') { - if (*fInputScanPointer == ')') { - SetError(REGEXP_UNMATCHED_PARENTHESIS); - return NULL; - } else { - SetError(REGEXP_JUNK_ON_END); - return NULL; // "Can't happen". - } - // NOTREACHED - } - - return ret; -} - -// -// - Branch - one alternative of an | operator -// -// Implements the concatenation operator. -// -char * -RegExp::Branch(int32 *flagp) -{ - char *ret; - char *chain; - char *latest; - int32 flags; - - *flagp = kWorst; // Tentatively. - - ret = Node(kRegExpBranch); - chain = NULL; - while (*fInputScanPointer != '\0' - && *fInputScanPointer != '|' - && *fInputScanPointer != ')') { - latest = Piece(&flags); - if (latest == NULL) - return NULL; - *flagp |= flags & kHasWidth; - if (chain == NULL) // First piece. - *flagp |= flags & kSPStart; - else - Tail(chain, latest); - chain = latest; - } - if (chain == NULL) // Loop ran zero times. - Node(kRegExpNothing); - - return ret; -} - -// -// - Piece - something followed by possible [*+?] -// -// Note that the branching code sequences used for ? and the general cases -// of * and + are somewhat optimized: they use the same kRegExpNothing node as -// both the endmarker for their branch list and the body of the last branch. -// It might seem that this node could be dispensed with entirely, but the -// endmarker role is not redundant. -// -char * -RegExp::Piece(int32 *flagp) -{ - char *ret; - char op; - char *next; - int32 flags; - - ret = Atom(&flags); - if (ret == NULL) - return NULL; - - op = *fInputScanPointer; - if (!IsMult(op)) { - *flagp = flags; - return ret; - } - - if (!(flags & kHasWidth) && op != '?') { - SetError(REGEXP_STAR_PLUS_OPERAND_EMPTY); - return NULL; - } - *flagp = op != '+' ? kWorst | kSPStart : kWorst | kHasWidth; - - if (op == '*' && (flags & kSimple)) - Insert(kRegExpStar, ret); - else if (op == '*') { - // Emit x* as (x&|), where & means "self". - Insert(kRegExpBranch, ret); // Either x - OpTail(ret, Node(kRegExpBack)); // and loop - OpTail(ret, ret); // back - Tail(ret, Node(kRegExpBranch)); // or - Tail(ret, Node(kRegExpNothing)); // null. - } else if (op == '+' && (flags & kSimple)) - Insert(kRegExpPlus, ret); - else if (op == '+') { - // Emit x+ as x(&|), where & means "self". - next = Node(kRegExpBranch); // Either - Tail(ret, next); - Tail(Node(kRegExpBack), ret); // loop back - Tail(next, Node(kRegExpBranch)); // or - Tail(ret, Node(kRegExpNothing)); // null. - } else if (op == '?') { - // Emit x? as (x|) - Insert(kRegExpBranch, ret); // Either x - Tail(ret, Node(kRegExpBranch)); // or - next = Node(kRegExpNothing); // null. - Tail(ret, next); - OpTail(ret, next); - } - fInputScanPointer++; - if (IsMult(*fInputScanPointer)) { - SetError(REGEXP_NESTED_STAR_QUESTION_PLUS); - return NULL; - } - return ret; -} - -// -// - Atom - the lowest level -// -// Optimization: gobbles an entire sequence of ordinary characters so that -// it can turn them into a single node, which is smaller to store and -// faster to run. Backslashed characters are exceptions, each becoming a -// separate node; the code is simpler that way and it's not worth fixing. -// -char * -RegExp::Atom(int32 *flagp) -{ - char *ret; - int32 flags; - - *flagp = kWorst; // Tentatively. - - switch (*fInputScanPointer++) { - case '^': - ret = Node(kRegExpBol); - break; - case '$': - ret = Node(kRegExpEol); - break; - case '.': - ret = Node(kRegExpAny); - *flagp |= kHasWidth|kSimple; - break; - case '[': - { - int32 cclass; - int32 classend; - - if (*fInputScanPointer == '^') { // Complement of range. - ret = Node(kRegExpAnyBut); - fInputScanPointer++; - } else - ret = Node(kRegExpAnyOf); - if (*fInputScanPointer == ']' || *fInputScanPointer == '-') - Char(*fInputScanPointer++); - while (*fInputScanPointer != '\0' && *fInputScanPointer != ']') { - if (*fInputScanPointer == '-') { - fInputScanPointer++; - if (*fInputScanPointer == ']' || *fInputScanPointer == '\0') - Char('-'); - else { - cclass = UCharAt(fInputScanPointer - 2) + 1; - classend = UCharAt(fInputScanPointer); - if (cclass > classend + 1) { - SetError(REGEXP_INVALID_BRACKET_RANGE); - return NULL; - } - for (; cclass <= classend; cclass++) - Char((char)cclass); - fInputScanPointer++; - } - } else - Char(*fInputScanPointer++); - } - Char('\0'); - if (*fInputScanPointer != ']') { - SetError(REGEXP_UNMATCHED_BRACKET); - return NULL; - } - fInputScanPointer++; - *flagp |= kHasWidth | kSimple; - } - break; - case '(': - ret = Reg(1, &flags); - if (ret == NULL) - return NULL; - *flagp |= flags & (kHasWidth | kSPStart); - break; - case '\0': - case '|': - case ')': - SetError(REGEXP_INTERNAL_ERROR); - return NULL; // Supposed to be caught earlier. - case '?': - case '+': - case '*': - SetError(REGEXP_QUESTION_PLUS_STAR_FOLLOWS_NOTHING); - return NULL; - case '\\': - if (*fInputScanPointer == '\0') { - SetError(REGEXP_TRAILING_BACKSLASH); - return NULL; - } - ret = Node(kRegExpExactly); - Char(*fInputScanPointer++); - Char('\0'); - *flagp |= kHasWidth|kSimple; - break; - default: - { - int32 len; - char ender; - - fInputScanPointer--; - len = (int32)strcspn(fInputScanPointer, kMeta); - if (len <= 0) { - SetError(REGEXP_INTERNAL_ERROR); - return NULL; - } - ender = *(fInputScanPointer + len); - if (len > 1 && IsMult(ender)) - len--; // Back off clear of ?+* operand. - *flagp |= kHasWidth; - if (len == 1) - *flagp |= kSimple; - ret = Node(kRegExpExactly); - while (len > 0) { - Char(*fInputScanPointer++); - len--; - } - Char('\0'); - } - break; - } - - return ret; -} - -// -// - Node - emit a node -// -char * // Location. -RegExp::Node(char op) -{ - char *ret; - char *ptr; - - ret = fCodeEmitPointer; - if (ret == &fDummy) { - fCodeSize += 3; - return ret; - } - - ptr = ret; - *ptr++ = op; - *ptr++ = '\0'; // Null "next" pointer. - *ptr++ = '\0'; - fCodeEmitPointer = ptr; - - return ret; -} - -// -// - Char - emit (if appropriate) a byte of code -// -void -RegExp::Char(char b) -{ - if (fCodeEmitPointer != &fDummy) - *fCodeEmitPointer++ = b; - else - fCodeSize++; -} - -// -// - Insert - insert an operator in front of already-emitted operand -// -// Means relocating the operand. -// -void -RegExp::Insert(char op, char *opnd) -{ - char *src; - char *dst; - char *place; - - if (fCodeEmitPointer == &fDummy) { - fCodeSize += 3; - return; - } - - src = fCodeEmitPointer; - fCodeEmitPointer += 3; - dst = fCodeEmitPointer; - while (src > opnd) - *--dst = *--src; - - place = opnd; // Op node, where operand used to be. - *place++ = op; - *place++ = '\0'; - *place++ = '\0'; -} - -// -// - Tail - set the next-pointer at the end of a node chain -// -void -RegExp::Tail(char *p, char *val) -{ - char *scan; - char *temp; - int32 offset; - - if (p == &fDummy) - return; - - // Find last node. - scan = p; - for (;;) { - temp = Next(scan); - if (temp == NULL) - break; - scan = temp; - } - - if (scan[0] == kRegExpBack) - offset = scan - val; - else - offset = val - scan; - - scan[1] = (char)((offset >> 8) & 0377); - scan[2] = (char)(offset & 0377); -} - -// -// - OpTail - Tail on operand of first argument; nop if operandless -// -void -RegExp::OpTail(char *p, char *val) -{ - // "Operandless" and "op != kRegExpBranch" are synonymous in practice. - if (p == NULL || p == &fDummy || *p != kRegExpBranch) - return; - Tail(Operand(p), val); -} - -// -// RunMatcher and friends -// - -// -// - RunMatcher - match a regexp against a string -// -int32 -RegExp::RunMatcher(regexp *prog, const char *string) const -{ - const char *s; - - // Be paranoid... - if (prog == NULL || string == NULL) { - SetError(B_BAD_VALUE); - return 0; - } - - // Check validity of program. - if (UCharAt(prog->program) != kRegExpMagic) { - SetError(REGEXP_CORRUPTED_PROGRAM); - return 0; - } - - // If there is a "must appear" string, look for it. - if (prog->regmust != NULL) { - s = string; - while ((s = strchr(s, prog->regmust[0])) != NULL) { - if (strncmp(s, prog->regmust, (size_t)prog->regmlen) == 0) - break; // Found it. - s++; - } - if (s == NULL) // Not present. - return 0; - } - - // Mark beginning of line for ^ . - fRegBol = string; - - // Simplest case: anchored match need be tried only once. - if (prog->reganch) - return Try(prog, (char*)string); - - // Messy cases: unanchored match. - s = string; - if (prog->regstart != '\0') - // We know what char it must start with. - while ((s = strchr(s, prog->regstart)) != NULL) { - if (Try(prog, (char*)s)) - return 1; - s++; - } - else - // We don't -- general case. - do { - if (Try(prog, (char*)s)) - return 1; - } while (*s++ != '\0'); - - // Failure. - return 0; -} - -// -// - Try - try match at specific point -// -int32 // 0 failure, 1 success -RegExp::Try(regexp *prog, const char *string) const -{ - int32 i; - const char **sp; - const char **ep; - - fStringInputPointer = string; - fStartPArrayPointer = prog->startp; - fEndPArrayPointer = prog->endp; - - sp = prog->startp; - ep = prog->endp; - for (i = kSubExpressionMax; i > 0; i--) { - *sp++ = NULL; - *ep++ = NULL; - } - if (Match(prog->program + 1)) { - prog->startp[0] = string; - prog->endp[0] = fStringInputPointer; - return 1; - } else - return 0; -} - -// -// - Match - main matching routine -// -// Conceptually the strategy is simple: check to see whether the current -// node matches, call self recursively to see whether the rest matches, -// and then act accordingly. In practice we make some effort to avoid -// recursion, in particular by going through "ordinary" nodes (that don't -// need to know whether the rest of the match failed) by a loop instead of -// by recursion. -/// -int32 // 0 failure, 1 success -RegExp::Match(const char *prog) const -{ - const char *scan; // Current node. - const char *next; // Next node. - - scan = prog; -#ifdef DEBUG - if (scan != NULL && regnarrate) - fprintf(stderr, "%s(\n", Prop(scan)); -#endif - while (scan != NULL) { -#ifdef DEBUG - if (regnarrate) - fprintf(stderr, "%s...\n", Prop(scan)); -#endif - next = Next(scan); - - switch (*scan) { - case kRegExpBol: - if (fStringInputPointer != fRegBol) - return 0; - break; - case kRegExpEol: - if (*fStringInputPointer != '\0') - return 0; - break; - case kRegExpAny: - if (*fStringInputPointer == '\0') - return 0; - fStringInputPointer++; - break; - case kRegExpExactly: - { - const char *opnd = Operand(scan); - // Inline the first character, for speed. - if (*opnd != *fStringInputPointer) - return 0; - - uint32 len = strlen(opnd); - if (len > 1 && strncmp(opnd, fStringInputPointer, len) != 0) - return 0; - - fStringInputPointer += len; - } - break; - case kRegExpAnyOf: - if (*fStringInputPointer == '\0' - || strchr(Operand(scan), *fStringInputPointer) == NULL) - return 0; - fStringInputPointer++; - break; - case kRegExpAnyBut: - if (*fStringInputPointer == '\0' - || strchr(Operand(scan), *fStringInputPointer) != NULL) - return 0; - fStringInputPointer++; - break; - case kRegExpNothing: - break; - case kRegExpBack: - break; - case kRegExpOpen + 1: - case kRegExpOpen + 2: - case kRegExpOpen + 3: - case kRegExpOpen + 4: - case kRegExpOpen + 5: - case kRegExpOpen + 6: - case kRegExpOpen + 7: - case kRegExpOpen + 8: - case kRegExpOpen + 9: - { - int32 no; - const char *save; - - no = *scan - kRegExpOpen; - save = fStringInputPointer; - - if (Match(next)) { - // - // Don't set startp if some later - // invocation of the same parentheses - // already has. - // - if (fStartPArrayPointer[no] == NULL) - fStartPArrayPointer[no] = save; - return 1; - } else - return 0; - } - break; - case kRegExpClose + 1: - case kRegExpClose + 2: - case kRegExpClose + 3: - case kRegExpClose + 4: - case kRegExpClose + 5: - case kRegExpClose + 6: - case kRegExpClose + 7: - case kRegExpClose + 8: - case kRegExpClose + 9: - { - int32 no; - const char *save; - - no = *scan - kRegExpClose; - save = fStringInputPointer; - - if (Match(next)) { - // - // Don't set endp if some later - // invocation of the same parentheses - // already has. - // - if (fEndPArrayPointer[no] == NULL) - fEndPArrayPointer[no] = save; - return 1; - } else - return 0; - } - break; - case kRegExpBranch: - { - const char *save; - - if (*next != kRegExpBranch) // No choice. - next = Operand(scan); // Avoid recursion. - else { - do { - save = fStringInputPointer; - if (Match(Operand(scan))) - return 1; - fStringInputPointer = save; - scan = Next(scan); - } while (scan != NULL && *scan == kRegExpBranch); - return 0; - // NOTREACHED/ - } - } - break; - case kRegExpStar: - case kRegExpPlus: - { - char nextch; - int32 no; - const char *save; - int32 min; - - // - //Lookahead to avoid useless match attempts - // when we know what character comes next. - // - nextch = '\0'; - if (*next == kRegExpExactly) - nextch = *Operand(next); - min = (*scan == kRegExpStar) ? 0 : 1; - save = fStringInputPointer; - no = Repeat(Operand(scan)); - while (no >= min) { - // If it could work, try it. - if (nextch == '\0' || *fStringInputPointer == nextch) - if (Match(next)) - return 1; - // Couldn't or didn't -- back up. - no--; - fStringInputPointer = save + no; - } - return 0; - } - break; - case kRegExpEnd: - return 1; // Success! - - default: - SetError(REGEXP_MEMORY_CORRUPTION); - return 0; - } - - scan = next; - } - - // - // We get here only if there's trouble -- normally "case kRegExpEnd" is - // the terminating point. - // - SetError(REGEXP_CORRUPTED_POINTERS); - return 0; -} - -// -// - Repeat - repeatedly match something simple, report how many -// -int32 -RegExp::Repeat(const char *p) const -{ - int32 count = 0; - const char *scan; - const char *opnd; - - scan = fStringInputPointer; - opnd = Operand(p); - switch (*p) { - case kRegExpAny: - count = (int32)strlen(scan); - scan += count; - break; - - case kRegExpExactly: - while (*opnd == *scan) { - count++; - scan++; - } - break; - - case kRegExpAnyOf: - while (*scan != '\0' && strchr(opnd, *scan) != NULL) { - count++; - scan++; - } - break; - - case kRegExpAnyBut: - while (*scan != '\0' && strchr(opnd, *scan) == NULL) { - count++; - scan++; - } - break; - - default: // Oh dear. Called inappropriately. - SetError(REGEXP_INTERNAL_ERROR); - count = 0; // Best compromise. - break; - } - fStringInputPointer = scan; - - return count; -} - -// -// - Next - dig the "next" pointer out of a node -// -char * -RegExp::Next(char *p) -{ - int32 offset; - - if (p == &fDummy) - return NULL; - - offset = ((*(p + 1) & 0377) << 8) + (*(p + 2) & 0377); - if (offset == 0) - return NULL; - - if (*p == kRegExpBack) - return p - offset; - else - return p + offset; -} - -const char * -RegExp::Next(const char *p) const -{ - int32 offset; - - if (p == &fDummy) - return NULL; - - offset = ((*(p + 1) & 0377) << 8) + (*(p + 2) & 0377); - if (offset == 0) - return NULL; - - if (*p == kRegExpBack) - return p - offset; - else - return p + offset; -} - -inline int32 -RegExp::UCharAt(const char *p) const -{ - return (int32)*(unsigned char *)p; -} - -inline char * -RegExp::Operand(char* p) const -{ - return p + 3; -} - -inline const char * -RegExp::Operand(const char* p) const -{ - return p + 3; -} - -inline bool -RegExp::IsMult(char c) const -{ - return c == '*' || c == '+' || c == '?'; -} - - -#ifdef DEBUG - -// -// - Dump - dump a regexp onto stdout in vaguely comprehensible form -// -void -RegExp::Dump() -{ - const char *s; - char op = kRegExpExactly; // Arbitrary non-kRegExpEnd op. - const char *next; - - s = fRegExp->program + 1; - while (op != kRegExpEnd) { // While that wasn't kRegExpEnd last time... - op = *s; - printf("%2ld%s", s - fRegExp->program, Prop(s)); // Where, what. - next = Next(s); - if (next == NULL) // Next ptr. - printf("(0)"); - else - printf("(%ld)", (s - fRegExp->program) + (next - s)); - s += 3; - if (op == kRegExpAnyOf || op == kRegExpAnyBut || op == kRegExpExactly) { - // Literal string, where present. - while (*s != '\0') { - putchar(*s); - s++; - } - s++; - } - putchar('\n'); - } - - // Header fields of interest. - if (fRegExp->regstart != '\0') - printf("start `%c' ", fRegExp->regstart); - if (fRegExp->reganch) - printf("anchored "); - if (fRegExp->regmust != NULL) - printf("must have \"%s\"", fRegExp->regmust); - printf("\n"); -} - -// -// - Prop - printable representation of opcode -// -char * -RegExp::Prop(const char *op) const -{ - const char *p = NULL; - static char buf[50]; - - (void) strcpy(buf, ":"); - - switch (*op) { - case kRegExpBol: - p = "kRegExpBol"; - break; - case kRegExpEol: - p = "kRegExpEol"; - break; - case kRegExpAny: - p = "kRegExpAny"; - break; - case kRegExpAnyOf: - p = "kRegExpAnyOf"; - break; - case kRegExpAnyBut: - p = "kRegExpAnyBut"; - break; - case kRegExpBranch: - p = "kRegExpBranch"; - break; - case kRegExpExactly: - p = "kRegExpExactly"; - break; - case kRegExpNothing: - p = "kRegExpNothing"; - break; - case kRegExpBack: - p = "kRegExpBack"; - break; - case kRegExpEnd: - p = "kRegExpEnd"; - break; - case kRegExpOpen + 1: - case kRegExpOpen + 2: - case kRegExpOpen + 3: - case kRegExpOpen + 4: - case kRegExpOpen + 5: - case kRegExpOpen + 6: - case kRegExpOpen + 7: - case kRegExpOpen + 8: - case kRegExpOpen + 9: - sprintf(buf + strlen(buf), "kRegExpOpen%d", *op - kRegExpOpen); - p = NULL; - break; - case kRegExpClose + 1: - case kRegExpClose + 2: - case kRegExpClose + 3: - case kRegExpClose + 4: - case kRegExpClose + 5: - case kRegExpClose + 6: - case kRegExpClose + 7: - case kRegExpClose + 8: - case kRegExpClose + 9: - sprintf(buf + strlen(buf), "kRegExpClose%d", *op - kRegExpClose); - p = NULL; - break; - case kRegExpStar: - p = "kRegExpStar"; - break; - case kRegExpPlus: - p = "kRegExpPlus"; - break; - default: - RegExpError("corrupted opcode"); - break; - } - - if (p != NULL) - strcat(buf, p); - - return buf; -} - -void -RegExp::RegExpError(const char *) const -{ - // does nothing now, perhaps it should printf? -} - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/RegExp.h b/src/add-ons/print/drivers/pdf/source/RegExp.h deleted file mode 100644 index f8f55a4f56..0000000000 --- a/src/add-ons/print/drivers/pdf/source/RegExp.h +++ /dev/null @@ -1,179 +0,0 @@ -/* -Open Tracker License - -Terms and Conditions - -Copyright (c) 1991-2000, Be Incorporated. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice applies to all licensees -and shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Be Incorporated shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization from Be Incorporated. - -Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks -of Be Incorporated in the United States and other countries. Other brand product -names are registered trademarks or trademarks of their respective holders. -All rights reserved. -*/ - - -// This code is based on regexp.c, v.1.3 by Henry Spencer: - -// @(#)regexp.c 1.3 of 18 April 87 -// -// Copyright (c) 1986 by University of Toronto. -// Written by Henry Spencer. Not derived from licensed software. -// -// Permission is granted to anyone to use this software for any -// purpose on any computer system, and to redistribute it freely, -// subject to the following restrictions: -// -// 1. The author is not responsible for the consequences of use of -// this software, no matter how awful, even if they arise -// from defects in it. -// -// 2. The origin of this software must not be misrepresented, either -// by explicit claim or by omission. -// -// 3. Altered versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// Beware that some of this code is subtly aware of the way operator -// precedence is structured in regular expressions. Serious changes in -// regular-expression syntax might require a total rethink. -// - -// ALTERED VERSION: Adapted to ANSI C and C++ for the OpenTracker -// project (www.opentracker.org), Jul 11, 2000. - -#ifndef _REG_EXP_H -#define _REG_EXP_H - -#include - -enum { - REGEXP_UNMATCHED_PARENTHESIS = B_ERRORS_END, - REGEXP_TOO_BIG, - REGEXP_TOO_MANY_PARENTHESIS, - REGEXP_JUNK_ON_END, - REGEXP_STAR_PLUS_OPERAND_EMPTY, - REGEXP_NESTED_STAR_QUESTION_PLUS, - REGEXP_INVALID_BRACKET_RANGE, - REGEXP_UNMATCHED_BRACKET, - REGEXP_INTERNAL_ERROR, - REGEXP_QUESTION_PLUS_STAR_FOLLOWS_NOTHING, - REGEXP_TRAILING_BACKSLASH, - REGEXP_CORRUPTED_PROGRAM, - REGEXP_MEMORY_CORRUPTION, - REGEXP_CORRUPTED_POINTERS, - REGEXP_CORRUPTED_OPCODE -}; - -const int32 kSubExpressionMax = 10; - -struct regexp { - const char *startp[kSubExpressionMax]; - const char *endp[kSubExpressionMax]; - char regstart; /* Internal use only. See RegExp.cpp for details. */ - char reganch; /* Internal use only. */ - const char *regmust;/* Internal use only. */ - int regmlen; /* Internal use only. */ - char program[1]; /* Unwarranted chumminess with compiler. */ -}; - -class RegExp { - -public: - RegExp(); - RegExp(const char *); - RegExp(const BString &); - ~RegExp(); - - status_t InitCheck() const; - - status_t SetTo(const char*); - status_t SetTo(const BString &); - - bool Matches(const char *string) const; - bool Matches(const BString &) const; - - int32 RunMatcher(regexp *, const char *) const; - regexp *Compile(const char *); - regexp *Expression() const; - const char *ErrorString() const; - -#ifdef DEBUG - void Dump(); -#endif - -private: - - void SetError(status_t error) const; - - // Working functions for Compile(): - char *Reg(int32, int32 *); - char *Branch(int32 *); - char *Piece(int32 *); - char *Atom(int32 *); - char *Node(char); - char *Next(char *); - const char *Next(const char *) const; - void Char(char); - void Insert(char, char *); - void Tail(char *, char *); - void OpTail(char *, char *); - - // Working functions for RunMatcher(): - int32 Try(regexp *, const char *) const; - int32 Match(const char *) const; - int32 Repeat(const char *) const; - - // Utility functions: -#ifdef DEBUG - char *Prop(const char *) const; - void RegExpError(const char *) const; -#endif - inline int32 UCharAt(const char *p) const; - inline char *Operand(char* p) const; - inline const char *Operand(const char* p) const; - inline bool IsMult(char c) const; - -// --------- Variables ------------- - - mutable status_t fError; - regexp *fRegExp; - - // Work variables for Compile(). - - const char *fInputScanPointer; - int32 fParenthesisCount; - char fDummy; - char *fCodeEmitPointer; // &fDummy = don't. - long fCodeSize; - - // Work variables for RunMatcher(). - - mutable const char *fStringInputPointer; - mutable const char *fRegBol; // Beginning of input, for ^ check. - mutable const char **fStartPArrayPointer; - mutable const char **fEndPArrayPointer; -}; - - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Report.cpp b/src/add-ons/print/drivers/pdf/source/Report.cpp deleted file mode 100644 index 93adf8db13..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Report.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - -Report. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "Report.h" -#include -#include - -#define LOGGING 0 -#define LOG_TO_STDERR 0 - -Report* Report::fInstance = NULL; - - -Report::Report() { - for (int i = 0; i < kNumKinds; i++) { - fNum[i] = 0; - } -} - - -Report::~Report() { -} - - -Report* Report::Instance() { - if (fInstance == NULL) { - fInstance = new Report(); - } - return fInstance; -} - - -void Report::Free() { - delete fInstance; fInstance = NULL; -} - -void Report::Add(kind kind, int32 page, const char* fmt, ...) { - #if !LOGGING - if (kind == kDebug) return; - #endif - - if (kind >= 0 && kind < kNumKinds) { - BAutolock lock(fLock); - fNum[kind] ++; - - va_list list; - char *b = new char[1 << 16]; - va_start(list, fmt); -#if LOG_TO_STDERR - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); -#endif - vsprintf(b, fmt, list); - AddItem(new ReportRecord(kind, page, "", b)); - delete[] b; - va_end(list); - } -} - -int Report::Count(kind kind) { - if (kind >= 0 && kind < kNumKinds) { - BAutolock lock(fLock); - return (int)fNum[kind]; - } - return 0; -} - -ReportRecord* Report::ItemAt(int32 i) { - BAutolock lock(fLock); - return inherited::ItemAt(i); -} - -int32 Report::CountItems() { - BAutolock lock(fLock); - return inherited::CountItems(); -} diff --git a/src/add-ons/print/drivers/pdf/source/Report.h b/src/add-ons/print/drivers/pdf/source/Report.h deleted file mode 100644 index 378333431f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Report.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - -Report. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _REPORT_H -#define _REPORT_H - -#include -#include -#include -#include "PrintUtils.h" - - -enum kind { - kInfo, - kWarning, - kError, - kDebug, -}; - -const int32 kNumKinds = kDebug + 1; - - -class ReportRecord { -public: -private: - kind fKind; - int32 fPage; - BString fLabel; - BString fDesc; - -public: - ReportRecord(kind kind, int32 page, const char* label, const char* desc) - : fKind(kind), fPage(page), fLabel(label), fDesc(desc) - { } - - kind Kind() const { return fKind; } - int32 Page() const { return fPage; } - const char* Label() const { return fLabel.String(); } - const char* Desc() const { return fDesc.String(); } -}; - - -class Report : public TList{ - static Report* fInstance; - int32 fNum[kNumKinds]; - BLocker fLock; - - Report(); - ~Report(); - - typedef TList inherited; - -public: - static Report* Instance(); - void Free(); - - // Only these methods are "synchronized": - // Note that they are *NOT* virtual in the base class! - void Add(kind kind, int32 page, const char* fmt, ...); - int Count(kind kind); - ReportRecord* ItemAt(int32 i); - int32 CountItems(); -}; - - -#define REPORT Report::Instance()->Add - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/Scanner.cpp b/src/add-ons/print/drivers/pdf/source/Scanner.cpp deleted file mode 100644 index 09a688a981..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Scanner.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - -Scanner. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "Scanner.h" -#include - -Scanner::Scanner(const char* name) { - fFile = fopen(name, "r"); - fCur.line = 1; fCur.column = 0; // line and column start at 1 - fPrev.line = 1; fPrev.column = 0; -} - -Scanner::~Scanner() { - if (fFile) fclose(fFile); -} - -status_t Scanner::InitCheck() const { - return fFile != NULL ? B_OK : B_ERROR; -} - -bool Scanner::IsEOF() const { - return feof(fFile); -} - -int Scanner::GetCh() { - int ch = fgetc(fFile); - fPrev = fCur; - if (ch == '\n') { - fCur.column = 0; - fCur.line ++; - } else { - fCur.column ++; - } - return ch; -} - - -void Scanner::UngetCh(int ch) { - ungetc(ch, fFile); - fCur = fPrev; -} - -void Scanner::SkipSpaces() -{ - int c = GetCh(); - for(;;) { - while (!IsEOF() && isspace(c)) c = GetCh(); - if (!IsEOF() && c == '#') { // line comment; skip to end of line - while (!IsEOF() && c != '\n') c = GetCh(); - } else { - UngetCh(c); return; - } - } -} - -bool Scanner::ReadName(BString *s) -{ - SkipSpaces(); - *s = ""; - - int c = GetCh(); - if (isalpha(c)) { - do { - s->Append((char)c, 1); - c = GetCh(); - } while (!IsEOF() && isalpha(c)); - UngetCh(c); - return true; - } - return false; -} - -bool Scanner::ReadString(BString *s) -{ - SkipSpaces(); - *s = ""; - - int c = GetCh(); - if (c == '"') { - c = GetCh(); - while (!IsEOF() && c != '"') { - s->Append((char)c, 1); - c = GetCh(); - } - if (c == '"') return true; - } - return false; -} - -bool Scanner::ReadFloat(float *value) -{ - SkipSpaces(); - BString s = ""; - *value = 0.0; - - int c = GetCh(); - if (isdigit(c) || c == '.') { - do { - s.Append((char)c, 1); - c = GetCh(); - } while(isdigit(c) || c == '.'); - if (EOF != sscanf(s.String(), "%f", value)) { - UngetCh(c); - return true; - } - } - return false; -} - -bool Scanner::NextChar(char ch) { - SkipSpaces(); - int c = GetCh(); - bool match = c == ch; - if (!match) UngetCh(c); - return match; -} - diff --git a/src/add-ons/print/drivers/pdf/source/Scanner.h b/src/add-ons/print/drivers/pdf/source/Scanner.h deleted file mode 100644 index 802bd62ee1..0000000000 --- a/src/add-ons/print/drivers/pdf/source/Scanner.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - -Scanner. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _SCANNER_H -#define _SCANNER_H - -#include -#include - -class Scanner { - class Position { - public: - int32 line; - int32 column; - }; - - FILE* fFile; - Position fCur; - Position fPrev; - - int GetCh(); - void UngetCh(int ch); - -public: - Scanner(const char* name); - status_t InitCheck() const; - ~Scanner(); - - void SkipSpaces(); - bool ReadName(BString* s); - bool ReadString(BString* s); - bool ReadFloat(float* f); - bool NextChar(char c); - bool IsEOF() const; - int32 Line() const { return fCur.line; } - int32 Column() const { return fCur.column; } -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp b/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp deleted file mode 100644 index 5acb939f3f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include "StatusWindow.h" -#include "Report.h" -#include -#include -#include -#include - - -static const uint32 kCancelMsg = 'cncl'; -static const uint32 kProgressMsg = 'prgs'; - - -StatusWindow::StatusWindow(int32 passes, int32 pages, PrinterDriver *pd) - : - HWindow(BRect(100, 100, 200, 200), "PDF Writer", - B_TITLED_WINDOW, - B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_NOT_CLOSABLE | B_FRAME_EVENTS - | B_AUTO_UPDATE_SIZE_LIMITS, - B_CURRENT_WORKSPACE, kCancelMsg) -{ - fPass = 0; - fPages = pages; - fPrinterDriver = pd; - fPageCount = 0; - fReportIndex = 0; - fCloseSem = -1; - int32 closeOption; - - if (pd->JobMsg()->FindInt32("close_option", &closeOption) != B_OK) - closeOption = kNever; - fCloseOption = (CloseOption)closeOption; - - - fPageLabel = new BStringView("page_text", "Page"); - - fPageStatus = new BStatusBar("pageStatus"); - fPageStatus->SetMaxValue(pages * passes); - fPageStatus->SetBarHeight(12); - - fCancel = new BButton("cancel", "Cancel", new BMessage(kCancelMsg)); - - fReport = new BTextView("report"); - fReport->SetStylable(true); - fReport->MakeEditable(false); - fReportScrollView = new BScrollView("report_scroll_viewer", - fReport, 0, false, true); - fReportScrollView->Hide(); - - SetLayout(new BGroupLayout(B_VERTICAL)); - AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) - .AddGroup(B_HORIZONTAL) - .Add(fPageLabel) - .AddGlue() - .End() - .Add(fPageStatus) - .Add(fReportScrollView) - .AddStrut(5) - .AddGroup(B_HORIZONTAL, 10, 1.0f) - .Add(fCancel) - .End() - .SetInsets(10, 10, 10, 10) - ); - - Show(); -} - - -void -StatusWindow::MessageReceived(BMessage *msg) -{ - switch (msg->what) { - case kCancelMsg: - if (fCloseSem == -1) { - fPrinterDriver->StopPrinting(); - fCancel->SetEnabled(false); - } else { - fCancel->SetEnabled(false); - release_sem(fCloseSem); - } - break; - - case kProgressMsg: - fPage = ""; - if (fPass == 0) - fPage << "Collecting Patterns Page: " << fPageCount; - else - fPage << "Generating Page: " << fPageCount; - fPageCount ++; - if (fPageCount == fPages) { - fPass ++; - fPageCount = 0; - } - fPageLabel->SetText(fPage.String()); - fPageStatus->Update(1); - UpdateReport(); - break; - - default: - inherited::MessageReceived(msg); - } -} - - -void -StatusWindow::UpdateReport() -{ - Report* r = Report::Instance(); - const int32 n = r->CountItems(); - const bool update = fReportIndex < n; - if (update && fReportIndex == 0) { - fReportScrollView->SetExplicitMinSize(BSize(600, 400)); - fReportScrollView->Show(); - } - - while (fReportIndex < n) { - ReportRecord* rr = r->ItemAt(fReportIndex ++); - const char* label = NULL; - rgb_color color = {0, 0, 0, 255}; - switch (rr->Kind()) { - case kInfo: label = "Info"; color.green = 255; break; - case kWarning: label = "Warning"; color.red = 255; color.green=255; break; - case kError: label = "Error"; color.red = 255; break; - case kDebug: label = "Debug"; color.blue = 255; break; - } - - int32 cur = fReport->TextLength()-1; - fReport->Insert(fReport->TextLength(), label, strlen(label)); - int32 end = fReport->TextLength(); - fReport->SetFontAndColor(cur, end, NULL, 0, &color); - - char page[80]; - if (rr->Page() > 0) { - sprintf(page, " (Page %d)", (int)rr->Page()); - int32 len = strlen(page); - fReport->Insert(fReport->TextLength(), page, len); - } - - fReport->Insert(fReport->TextLength(), ": ", 2); - - fReport->Insert(fReport->TextLength(), rr->Desc(), strlen(rr->Desc())); - fReport->Insert(fReport->TextLength(), "\n", 1); - } - - if (update) { - fReport->ScrollToOffset(fReport->TextLength()); - fReport->Invalidate(); - } -} - - -void -StatusWindow::NextPage() -{ - PostMessage(kProgressMsg); -} - - -void -StatusWindow::WaitForClose() -{ - fCloseSem = create_sem(0, "close_sem"); - - Lock(); - Report* r = Report::Instance(); - char b[80]; - sprintf(b, "%d Infos, %d Warnings, %d Errors", r->Count(kInfo), - r->Count(kWarning), r->Count(kError)); - fPageLabel->SetText(b); - fCancel->SetLabel("Close"); - fCancel->SetEnabled(true); - UpdateReport(); - - bool hasErrors = r->Count(kError); - bool hasErrorsOrWarnings = hasErrors || r->Count(kWarning); - bool hasErrorsWarningsOrInfo = hasErrorsOrWarnings || r->Count(kInfo); - - if (fCloseOption == kAlways - || (fCloseOption == kNoErrors && !hasErrors) - || (fCloseOption == kNoErrorsOrWarnings && !hasErrorsOrWarnings) - || (fCloseOption == kNoErrorsWarningsOrInfo - && !hasErrorsWarningsOrInfo)) { - PostMessage(kCancelMsg); - } - Unlock(); - - acquire_sem(fCloseSem); - delete_sem(fCloseSem); -} diff --git a/src/add-ons/print/drivers/pdf/source/StatusWindow.h b/src/add-ons/print/drivers/pdf/source/StatusWindow.h deleted file mode 100644 index 56a8a8a481..0000000000 --- a/src/add-ons/print/drivers/pdf/source/StatusWindow.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - -PDF Writer printer driver. - -Copyright (c) 2001 OpenBeOS. - -Authors: - Philippe Houdoin - Simon Gauvin - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef STATUS_WINDOW_H -#define STATUS_WINDOW_H -#include -#include - -//class PrinterDriver; -#include "PrinterDriver.h" -#include "BlockingWindow.h" -#include "PrintUtils.h" - -class StatusWindow : public HWindow -{ -private: - int32 fPass; - int32 fPages; - - BString fPage; - int32 fPageCount; - BStringView *fPageLabel; - BStatusBar *fPageStatus; - BButton *fCancel; - PrinterDriver *fPrinterDriver; - int32 fReportIndex; - BTextView* fReport; - BScrollView* fReportScrollView; - sem_id fCloseSem; - CloseOption fCloseOption; - - void UpdateReport(); - -public: - typedef HWindow inherited; - - StatusWindow(int32 passes, int32 pages, PrinterDriver *pd); - - void MessageReceived(BMessage *msg); - void NextPage(); - void WaitForClose(); -}; -#endif diff --git a/src/add-ons/print/drivers/pdf/source/SubPath.cpp b/src/add-ons/print/drivers/pdf/source/SubPath.cpp deleted file mode 100644 index c1ac585b42..0000000000 --- a/src/add-ons/print/drivers/pdf/source/SubPath.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - -SubPath - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include - -#include "SubPath.h" - - -SubPath::SubPath(int size) -{ - fSize = size <= 0 ? kInitialSize : size; - fLength = 0; - fPoints = new BPoint[fSize]; - fClosed = false; -} - - -SubPath::~SubPath() -{ - delete []fPoints; -} - - -void -SubPath::MakeEmpty() -{ - fLength = 0; - fClosed = false; -} - - -void -SubPath::Truncate(int numOfPoints) -{ - fLength -= numOfPoints; - if (fLength < 0) fLength = 0; -} - - -void -SubPath::CheckSize(int size) -{ - if (fSize < size) { - fSize = size + kIncrement; - BPoint* points = new BPoint[fSize]; - for (int i = 0; i < fLength; i++) points[i] = fPoints[i]; - delete []fPoints; - fPoints = points; - } -} - - -void -SubPath::AddPoint(BPoint p) -{ - CheckSize(fLength + 1); - fPoints[fLength] = p; fLength ++; -} - - -void -SubPath::Close() -{ - fClosed = true; -} - - -void -SubPath::Open() -{ - fClosed = false; -} - - -BPoint -SubPath::PointAt(int i) -{ - if (InBounds(i)) { - return fPoints[i]; - } - return fPoints[0]; -} - -void -SubPath::AtPut(int i, BPoint p) -{ - if (InBounds(i)) { - fPoints[i] = p; - } -} - -void -SubPath::Print() -{ - fprintf(stderr, "SubPath length = %d, size = %d ", (int)fLength, (int)fSize); - for (int i = 0; i < fLength; i++) { - if (i != 0) fprintf(stderr, ", "); - fprintf(stderr, "(%f, %f)", PointAt(i).x, PointAt(i).y); - } - fprintf(stderr, "\n"); -} diff --git a/src/add-ons/print/drivers/pdf/source/SubPath.h b/src/add-ons/print/drivers/pdf/source/SubPath.h deleted file mode 100644 index 4d0f09738a..0000000000 --- a/src/add-ons/print/drivers/pdf/source/SubPath.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - -SubPath - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef SUBPATH_H -#define SUBPATH_H - -#include - -class SubPath { -private: - enum { - kInitialSize = 5, - kIncrement = 10 - }; - int32 fSize; // allocated points - int32 fLength; // number of valid points - BPoint *fPoints; - bool fClosed; // subpath connects last point with first point - - void CheckSize(int size); - bool InBounds(int i) { return 0 <= i && i < fLength; } - -public: - SubPath(int size = 10); - ~SubPath(); - void MakeEmpty(); - void Truncate(int numOfPoints); - - void AddPoint(BPoint p); - void Close(); - void Open(); - - int32 CountPoints() const { return fLength; } - BPoint PointAt(int i); - void AtPut(int i, BPoint p); - bool IsClosed() const { return fClosed; } - void Print(); // for debugging -}; - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/XReferences.cpp b/src/add-ons/print/drivers/pdf/source/XReferences.cpp deleted file mode 100644 index 1e6e1c0e97..0000000000 --- a/src/add-ons/print/drivers/pdf/source/XReferences.cpp +++ /dev/null @@ -1,443 +0,0 @@ -/* - -Cross References. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#include -#include -#include "Scanner.h" -#include "PDFWriter.h" -#include "XReferences.h" -#include "Report.h" - - -// Pattern - -Pattern::Pattern(const char* pattern) { - fPattern.SetTo(pattern); -} - - -Pattern::~Pattern() { -} - - -status_t Pattern::InitCheck() { - return fPattern.InitCheck(); -} - - -bool Pattern::Matches(const char* string, MatchResult* result) const { - regexp* re = fPattern.Expression(); - result->SetRegExp(re); - result->SetString(string); - if (fPattern.RunMatcher(re, string)) { - int32 i; - for (i = 0; i < kSubExpressionMax && re->startp[i]; i++); - result->SetResults(i); - return true; - } else { - result->SetResults(0); - return false; - } -} - - -// MatchResult - -MatchResult::MatchResult() { - fRegExp = NULL; - fString = NULL; - fResults = 0; -} - - -bool MatchResult::HasResult(int32 index) const { - return fRegExp && fString && index >= 0 && index < fResults; -} - - -const char* MatchResult::Start(int index) const { - if (HasResult(index)) { - return fRegExp->startp[index]; - } - return NULL; -} - -int32 MatchResult::StartPos(int index) const { - if (HasResult(index)) { - return fRegExp->startp[index] - fString; - } - return -1; -} - - -int32 MatchResult::EndPos(int index) const { - if (HasResult(index)) { - return fRegExp->endp[index] - fString; - } - return -1; -} - - -void MatchResult::GetString(int index, BString *result) { - *result = ""; - if (HasResult(index)) { - const char* s = fRegExp->startp[index]; - const char* e = fRegExp->endp[index]; - while (s != e) { *result << *s; s++; } - } -} - - -// XRefDef - -Pattern* XRefDef::Matches(PatternList* list, const char* s, const char** start, int32* len) { - MatchResult m; - const int32 n = list->CountItems(); - Pattern* pat = NULL; - for (int32 i = 0; i < n; i++) { - Pattern* p = list->ItemAt(i); - - if (p->Matches(s, &m) && m.CountResults() >= 1) { - if (m.Start(0) <= s) { - if (m.Start(0) == s && m.Length(0) <= *len) continue; - pat = p; - *start = m.Start(0); - *len = m.Length(0); - } - } - } - return pat; -} - - -Pattern* XRefDef::Matches(const char* s, const char** start, int32* len) { - *start = s + strlen(s); *len = 0; - Pattern* pat1 = Matches(&fLinks, s, start, len); - Pattern* pat2 = Matches(&fDests, s, start, len); - return pat2 ? pat2 : pat1; -} - - -// XRefDefs - -void XRefDefs::Add(XRefDef* def) { - def->SetId(fDefs.CountItems()); - fDefs.AddItem(def); -} - - -void XRefDefs::Matches(const char* s, XMatchResult* r, bool all) { - const int32 n = fDefs.CountItems(); - const char* end = s + strlen(s); - MatchResult match; - - do { - // match that starts at lowest position - const char* start1 = end; - XRefDef* def1 = NULL; - Pattern* pat1 = NULL; - int32 len1 = 0; - - for (int32 i = 0; i < n; i ++) { - const char* start; int32 len; - XRefDef* def = fDefs.ItemAt(i); - Pattern* pat = def->Matches(s, &start, &len); - if (pat && start <= start1) { - if (start == start1 && len <= len1) continue; - start1 = start; len1 = len; pat1 = pat; def1 = def; - } - } - - if (def1) { - bool found = pat1->Matches(start1, &match); - bool cont; - ASSERT(found); (void)found; - if (pat1->IsLink()) { - cont = r->MatchLink(def1, &match); - } else { - cont = r->MatchDest(def1, &match); - } - if (!cont) break; - - // update for next iteration - s = start1 + len1; - } else { - if (all) { - do { - s ++; - } while (!BEGINS_CHAR(*s)); - } else { - break; - } - } - } while (*s); -} - - -class AutoDelete { - XRefDef* fDefs; -public: - AutoDelete(XRefDef* defs) : fDefs(defs) { } - ~AutoDelete() { delete fDefs; } - void Release() { fDefs = NULL; } -}; - -/* -FileFormat: Definition. -Line comment starts with: '#' - -Definition = Version {XRefDef}. -Version = "CrossReferences" "1.0". -XRefDef = Pattern {"," Pattern} "-" ">" Pattern {"," Pattern} ".". -Pattern = '"' string '"'. - -Example: -CrossReferences 1.0 -"see [tT]able ([0-9]+)", "see [tT]bl. ([0-9]+)" -> "[tT]able ([0-9]+)". -"see [fF]igure ([0-9]+)" -> "[fF]igure ([0-9]+)". -"page ([0-9]+)" -> "- ([0-9]+) -" -*/ - -bool XRefDefs::Read(const char* name) { - Scanner scnr(name); - - if (scnr.InitCheck() == B_OK) { - - BString s; float f; - bool ok = scnr.ReadName(&s) && scnr.ReadFloat(&f); - if (!ok || strcmp(s.String(), "CrossReferences") != 0 || f != 1.0) { - REPORT(kError, 0, "XRefs (line %d, column %d): '%s' not a cross references file or wrong version!", scnr.Line(), scnr.Column(), name); - return false; - } - - while (!scnr.IsEOF()) { - XRefDef* def = new XRefDef(); - AutoDelete autoDelete(def); - BString pattern; - - // Links: Pattern {"," Pattern}. - do { - if (!scnr.ReadString(&pattern)) { - REPORT(kError, 0, "XRefs (line %d, column %d): Could not parse 'link' pattern", scnr.Line(), scnr.Column()); - return false; - } - LinkPattern* link = new LinkPattern(pattern.String()); - if (link->InitCheck() == B_OK) { - def->AddLink(link); - } else { - delete link; - REPORT(kError, 0, "XRefs (line %d, column %d): Invalid RegExp '%s'", pattern.String(), scnr.Line(), scnr.Column()); - return false; - } - } while (scnr.NextChar(',')); - - // "->" - if (scnr.NextChar('-') && scnr.NextChar('>')) { - - // Dests: Pattern {"," Pattern}. - do { - if (!scnr.ReadString(&pattern)) { - REPORT(kError, 0, "XRefs (line %d, column %d): Could not parse 'destination' pattern", scnr.Line(), scnr.Column()); - return false; - } - DestPattern* dest = new DestPattern(pattern.String()); - if (dest->InitCheck() == B_OK) { - def->AddDest(dest); - } else { - delete dest; - REPORT(kError, 0, "XRefs (line %d, column %d): Invalid RegExp '%s'", scnr.Line(), scnr.Column(), pattern.String()); - return false; - } - } while (scnr.NextChar(',')); - - // "." - if (!scnr.NextChar('.')) { - REPORT(kError, 0, "XRefs (line %d, column %d): '.' expected at end of definition", scnr.Line(), scnr.Column()); - return false; - } - } else { - REPORT(kError, 0, "XRefs (line %d, column %d): '->' expected", scnr.Line(), scnr.Column()); - return false; - } - - this->Add(def); - autoDelete.Release(); - - scnr.SkipSpaces(); - } - return true; - } else { - REPORT(kError, 0, "XRefs: Could not open cross references file '%d'", name); - } - return false; -} - - -// Destination - -Destination::Destination(const char* label, int32 page, BRect bounds) - : fLabel(label) - , fPage(page) - , fBoundingBox(bounds) -{ -} - - -// DestList - -void DestList::Sort() { - // TODO: sort by label -} - - -Destination* DestList::Find(const char* label) { - const int n = CountItems(); - // TODO: binary sort - for (int32 i = 0; i < n; i++) { - Destination* d = ItemAt(i); - if (strcmp(d->Label(), label) == 0) return d; - } - return NULL; -} - - -// XRefDefs - -XRefDests::XRefDests(int32 n) { - fDests.MakeEmpty(); - for (int32 i = 0; i < n; i ++) { - fDests.AddItem(new DestList()); - } -} - - -bool XRefDests::Add(XRefDef* def, const char* label, int32 page, BRect boundingBox) { - DestList* list = GetList(def); - ASSERT(list != NULL); - if (!list->Find(label)) { - list->AddItem(new Destination(label, page, boundingBox)); - return true; - } - return false; -} - - -bool XRefDests::Find(XRefDef* def, const char* label, int32* page, BRect* boundingBox) const { - DestList* list = GetList(def); - ASSERT(list != NULL); - Destination* dest = list->Find(label); - if (dest) { - *page = dest->Page(); - *boundingBox = dest->BoundingBox(); - return true; - } - return false; -} - - -// RecordDests - -RecordDests::RecordDests(XRefDests* dests, TextLine* line, int32 page) - : fDests(dests) - , fLine(line) - , fPage(page) -{ -} - -bool RecordDests::MatchLink(XRefDef* def, MatchResult* result) { - return true; -} - - -bool RecordDests::MatchDest(XRefDef* def, MatchResult* result) { - if (result->CountResults() >= 2) { - BString s; - BRect b; - result->GetString(1, &s); - if (fLine->BoundingBox(result->StartPos(1), result->EndPos(1), &b)) { - fDests->Add(def, s.String(), fPage, b); - } - } - return true; -} - - -// LocalLink - -LocalLink::LocalLink(XRefDefs* defs, XRefDests* dests, PDFWriter* writer, BString* utf8, int32 page) - : ::Link(writer, utf8) - , fDefs(defs) - , fDests(dests) - , fLinkPage(page) -{ -} - - -bool LocalLink::MatchLink(XRefDef* def, MatchResult* result) { - if (result->CountResults() >= 2) { - BString label; - result->GetString(1, &label); - if (fDests->Find(def, label.String(), &fDestPage, &fDestBounds)) { - result->Start(1); - fContainsLink = true; - fStartPos = result->Start(1) - fUtf8->String(); - const char* p = result->Start(1) + result->Length(1); - do { - p --; - } while (!BEGINS_CHAR(*p)); - fEndPos = p - fUtf8->String(); - return false; - } else { - REPORT(kWarning, fLinkPage, "Destination for link '%s' not found!", label.String()); - } - } - return true; -} - - -bool LocalLink::MatchDest(XRefDef* def, MatchResult* result) { - return true; -} - - -void LocalLink::DetectLink(int start) { - fContainsLink = false; - fDefs->Matches(fUtf8->String() + start, this, true); -} - - -void LocalLink::CreateLink(float llx, float lly, float urx, float ury) { - char optList[256]; - if (fDestPage != fLinkPage) { - BString s(&fUtf8->String()[fStartPos], fEndPos-fStartPos+1); - REPORT(kInfo, fLinkPage, "Link '%s' to page %d", s.String(), fDestPage); - sprintf(optList, "type=fixed left=%f top=%f", fDestBounds.left, fDestBounds.top); - PDF_add_locallink(fWriter->fPdf, llx, lly, urx, ury, fDestPage, optList); - } -} diff --git a/src/add-ons/print/drivers/pdf/source/XReferences.h b/src/add-ons/print/drivers/pdf/source/XReferences.h deleted file mode 100644 index ba088fd576..0000000000 --- a/src/add-ons/print/drivers/pdf/source/XReferences.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - -Cross References. - -Copyright (c) 2002 OpenBeOS. - -Author: - Michael Pfeiffer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -#ifndef _X_REF_H -#define _X_REF_H - -#include -#include "Link.h" -#include "RegExp.h" -#include "PrintUtils.h" - -class MatchResult; -class Pattern; - - -// PatternList - -typedef TList PatternList; - - -// Pattern - -class Pattern { -protected: - RegExp fPattern; - - Pattern() { }; - -public: - Pattern(const char* pattern); - virtual ~Pattern(); - status_t InitCheck(); - bool Matches(const char* string, MatchResult* result) const; - - virtual bool IsLink() const { return false; } - virtual bool IsDest() const { return false; } - void Print() const; -}; - - -// two subclasses for destinction between link and anchor - -class LinkPattern : public Pattern { -public: - LinkPattern(const char* pattern) : Pattern(pattern) { } - - bool IsLink() const { return true; } -}; - - -class DestPattern : public Pattern { -public: - DestPattern(const char* pattern) : Pattern(pattern) { } - - bool IsDest() const { return true; } -}; - - -// MatchResult; wrapper for struct regexp - -// NB: Pattern object must not die while MatchResult is alive -// Pattern::Matches() invalidates a previous MatchResult! - -class MatchResult { -private: - regexp* fRegExp; - const char* fString; - int32 fResults; - - bool HasResult(int32 index) const; -public: - MatchResult(); - void SetRegExp(regexp* regexp) { fRegExp = regexp; } - void SetString(const char* string) { fString = string; } - void SetResults(int32 results) { fResults = results; } - - int32 CountResults() const { return fResults; } - const char* Start(int index) const; - int32 StartPos(int index) const; // inclusive - int32 EndPos(int index) const; // exclusive - int32 Length(int index) const { return EndPos(index) - StartPos(index); } - void GetString(int index, BString *result); -}; - - -// XRefDef - -class XRefDef { -private: - PatternList fLinks; - PatternList fDests; - int fId; - - Pattern* Matches(PatternList* list, const char* s, const char** start, int32 *len); - -public: - XRefDef() { fId = -1; } - - void SetId(int32 id) { fId = id; } - int32 Id() const { return fId; } - - void AddLink(LinkPattern* p) { fLinks.AddItem(p); } - void AddDest(DestPattern* p) { fDests.AddItem(p); } - int32 CountLinks() const { return fLinks.CountItems(); } - int32 CountDests() const { return fDests.CountItems(); } - Pattern* LinkAt(int32 index) const { return fLinks.ItemAt(index); } - Pattern* DestAt(int32 index) const { return fDests.ItemAt(index); } - - Pattern* Matches(const char* s, const char** start, int32 *len); -}; - - -// XMatchResult; called from XRefDefs::Matches with matches - -class XMatchResult { -public: - virtual ~XMatchResult() { }; - virtual bool MatchLink(XRefDef* def, MatchResult* result) = 0; - virtual bool MatchDest(XRefDef* def, MatchResult* result) = 0; -}; - - -// XRefDefs - -class XRefDefs { -private: - TList fDefs; -public: - - void Add(XRefDef* def); - int32 Count() { return fDefs.CountItems(); } - // if "all" is false, only start of string is matched - void Matches(const char* s, XMatchResult* result, bool all); - - bool Read(const char* name); -}; - - -// Destination - -class Destination { -private: - BString fLabel; - int32 fPage; - BRect fBoundingBox; - -public: - Destination(const char* label, int32 page, BRect bounds); - const char* Label() const { return fLabel.String(); } - int32 Page() const { return fPage; } - BRect BoundingBox() const { return fBoundingBox; } -}; - - -// DestList - -class DestList : public TList { -public: - void Sort(); - Destination* Find(const char* label); -}; - - -// XRefDests; container for the destinations - -class XRefDests { - TList fDests; - - DestList* GetList(XRefDef* def) const { return fDests.ItemAt(def->Id()); } - -public: - XRefDests(int32 n); - bool Add(XRefDef* def, const char* label, int32 page, BRect boundingBox); - bool Find(XRefDef* def, const char* label, int32* page, BRect* boundingBox) const; -}; - - -// RecordDests; detect destinations and store them in XRefDests object - -class RecordDests : public XMatchResult { - XRefDests* fDests; - TextLine* fLine; - int32 fPage; - -public: - RecordDests(XRefDests* dests, TextLine* line, int32 page); - bool MatchLink(XRefDef* def, MatchResult* result); - bool MatchDest(XRefDef* def, MatchResult* result); -}; - - -// LocalLink; detect links and create local links in PDF to destination - -class LocalLink : public Link, XMatchResult { -protected: - XRefDefs* fDefs; - XRefDests* fDests; - int32 fLinkPage; - - int32 fDestPage; - BRect fDestBounds; - - void DetectLink(int start); - void CreateLink(float llx, float lly, float urx, float ury); - -public: - LocalLink(XRefDefs* defs, XRefDests* dests, PDFWriter* writer, BString* utf8, int32 page); - bool MatchLink(XRefDef* def, MatchResult* result); - bool MatchDest(XRefDef* def, MatchResult* result); -}; - - -#endif diff --git a/src/add-ons/print/drivers/pdf/source/_CopyAndRestart b/src/add-ons/print/drivers/pdf/source/_CopyAndRestart deleted file mode 100755 index bd820b008b..0000000000 --- a/src/add-ons/print/drivers/pdf/source/_CopyAndRestart +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/sh -cd $(dirname "$0") - -# remove cpu postfix -mv PDF\ Writer\ x86 PDF\ Writer - -# copy driver to Print add-ons directory -cp PDF\ Writer /boot/home/config/add-ons/Print - -# restart print_server -/boot/beos/system/servers/print_server \ No newline at end of file diff --git a/src/add-ons/print/drivers/pdf/source/cns1.h b/src/add-ons/print/drivers/pdf/source/cns1.h deleted file mode 100644 index 4fb589b4eb..0000000000 --- a/src/add-ons/print/drivers/pdf/source/cns1.h +++ /dev/null @@ -1,11120 +0,0 @@ -// WARNING: MACHINE GENERATED, DON'T CHANGE! -static unicode_to_cid CNS1[] = { - {0x20, 1}, - {0x21, 2}, - {0x22, 3}, - {0x23, 4}, - {0x24, 5}, - {0x25, 6}, - {0x26, 7}, - {0x27, 8}, - {0x28, 9}, - {0x29, 10}, - {0x2a, 11}, - {0x2b, 12}, - {0x2c, 13}, - {0x2d, 14}, - {0x2e, 15}, - {0x2f, 16}, - {0x30, 17}, - {0x31, 18}, - {0x32, 19}, - {0x33, 20}, - {0x34, 21}, - {0x35, 22}, - {0x36, 23}, - {0x37, 24}, - {0x38, 25}, - {0x39, 26}, - {0x3a, 27}, - {0x3b, 28}, - {0x3c, 29}, - {0x3d, 30}, - {0x3e, 31}, - {0x3f, 32}, - {0x40, 33}, - {0x41, 34}, - {0x42, 35}, - {0x43, 36}, - {0x44, 37}, - {0x45, 38}, - {0x46, 39}, - {0x47, 40}, - {0x48, 41}, - {0x49, 42}, - {0x4a, 43}, - {0x4b, 44}, - {0x4c, 45}, - {0x4d, 46}, - {0x4e, 47}, - {0x4f, 48}, - {0x50, 49}, - {0x51, 50}, - {0x52, 51}, - {0x53, 52}, - {0x54, 53}, - {0x55, 54}, - {0x56, 55}, - {0x57, 56}, - {0x58, 57}, - {0x59, 58}, - {0x5a, 59}, - {0x5b, 60}, - {0x5c, 61}, - {0x5d, 62}, - {0x5e, 63}, - {0x5f, 64}, - {0x60, 65}, - {0x61, 66}, - {0x62, 67}, - {0x63, 68}, - {0x64, 69}, - {0x65, 70}, - {0x66, 71}, - {0x67, 72}, - {0x68, 73}, - {0x69, 74}, - {0x6a, 75}, - {0x6b, 76}, - {0x6c, 77}, - {0x6d, 78}, - {0x6e, 79}, - {0x6f, 80}, - {0x70, 81}, - {0x71, 82}, - {0x72, 83}, - {0x73, 84}, - {0x74, 85}, - {0x75, 86}, - {0x76, 87}, - {0x77, 88}, - {0x78, 89}, - {0x79, 90}, - {0x7a, 91}, - {0x7b, 92}, - {0x7c, 93}, - {0x7d, 94}, - {0x7e, 95}, - {0xa2, 262}, - {0xa3, 263}, - {0xa5, 260}, - {0xa7, 178}, - {0xb0, 280}, - {0xb1, 212}, - {0xb7, 115}, - {0xd7, 210}, - {0xf7, 211}, - {0x2c7, 504}, - {0x2ca, 503}, - {0x2cb, 505}, - {0x2d9, 502}, - {0x391, 417}, - {0x392, 418}, - {0x393, 419}, - {0x394, 420}, - {0x395, 421}, - {0x396, 422}, - {0x397, 423}, - {0x398, 424}, - {0x399, 425}, - {0x39a, 426}, - {0x39b, 427}, - {0x39c, 428}, - {0x39d, 429}, - {0x39e, 430}, - {0x39f, 431}, - {0x3a0, 432}, - {0x3a1, 433}, - {0x3a3, 434}, - {0x3a4, 435}, - {0x3a5, 436}, - {0x3a6, 437}, - {0x3a7, 438}, - {0x3a8, 439}, - {0x3a9, 440}, - {0x3b1, 441}, - {0x3b2, 442}, - {0x3b3, 443}, - {0x3b4, 444}, - {0x3b5, 445}, - {0x3b6, 446}, - {0x3b7, 447}, - {0x3b8, 448}, - {0x3b9, 449}, - {0x3ba, 450}, - {0x3bb, 451}, - {0x3bc, 452}, - {0x3bd, 453}, - {0x3be, 454}, - {0x3bf, 455}, - {0x3c0, 456}, - {0x3c1, 457}, - {0x3c3, 458}, - {0x3c4, 459}, - {0x3c5, 460}, - {0x3c6, 461}, - {0x3c7, 462}, - {0x3c8, 463}, - {0x3c9, 464}, - {0x411, 0}, - {0x412, 1}, - {0x413, 2}, - {0x414, 3}, - {0x415, 4}, - {0x417, 0}, - {0x418, 1}, - {0x419, 2}, - {0x41a, 3}, - {0x41b, 4}, - {0x41c, 5}, - {0x41d, 6}, - {0x41e, 7}, - {0x41f, 8}, - {0x420, 9}, - {0x421, 10}, - {0x422, 11}, - {0x423, 12}, - {0x424, 13}, - {0x425, 14}, - {0x426, 15}, - {0x427, 16}, - {0x428, 17}, - {0x429, 18}, - {0x42a, 19}, - {0x42b, 20}, - {0x42c, 21}, - {0x42d, 22}, - {0x42e, 23}, - {0x42f, 24}, - {0x430, 25}, - {0x431, 26}, - {0x432, 27}, - {0x433, 28}, - {0x434, 29}, - {0x435, 30}, - {0x437, 0}, - {0x438, 1}, - {0x439, 2}, - {0x43a, 3}, - {0x43b, 4}, - {0x43c, 5}, - {0x43d, 6}, - {0x43e, 7}, - {0x43f, 8}, - {0x440, 9}, - {0x441, 10}, - {0x442, 11}, - {0x443, 12}, - {0x444, 13}, - {0x445, 14}, - {0x446, 15}, - {0x447, 16}, - {0x448, 17}, - {0x449, 18}, - {0x44a, 19}, - {0x44b, 20}, - {0x44c, 21}, - {0x44d, 22}, - {0x44e, 23}, - {0x44f, 24}, - {0x2013, 121}, - {0x2014, 123}, - {0x2018, 166}, - {0x2019, 167}, - {0x201c, 168}, - {0x201d, 169}, - {0x2022, 104}, - {0x2025, 111}, - {0x2026, 110}, - {0x2032, 173}, - {0x2035, 172}, - {0x203b, 177}, - {0x203e, 195}, - {0x2103, 266}, - {0x2105, 194}, - {0x2109, 267}, - {0x2160, 343}, - {0x2161, 344}, - {0x2162, 345}, - {0x2163, 346}, - {0x2164, 347}, - {0x2165, 348}, - {0x2166, 349}, - {0x2167, 350}, - {0x2168, 351}, - {0x2169, 352}, - {0x2170, 526}, - {0x2171, 527}, - {0x2172, 528}, - {0x2173, 529}, - {0x2174, 530}, - {0x2175, 531}, - {0x2176, 532}, - {0x2177, 533}, - {0x2178, 534}, - {0x2179, 535}, - {0x2190, 248}, - {0x2191, 245}, - {0x2192, 247}, - {0x2193, 246}, - {0x2196, 249}, - {0x2197, 250}, - {0x2198, 252}, - {0x2199, 251}, - {0x21b9, 0}, - {0x221a, 213}, - {0x221e, 220}, - {0x221f, 233}, - {0x2220, 232}, - {0x2223, 254}, - {0x2225, 253}, - {0x2229, 229}, - {0x222a, 230}, - {0x222b, 237}, - {0x222e, 238}, - {0x2234, 240}, - {0x2235, 239}, - {0x223c, 228}, - {0x2252, 221}, - {0x2260, 219}, - {0x2261, 222}, - {0x2266, 217}, - {0x2267, 218}, - {0x22a5, 231}, - {0x22bf, 234}, - {0x2400, 562}, - {0x2401, 563}, - {0x2402, 564}, - {0x2403, 565}, - {0x2404, 566}, - {0x2405, 567}, - {0x2406, 568}, - {0x2407, 569}, - {0x2408, 570}, - {0x2409, 571}, - {0x240a, 572}, - {0x240b, 573}, - {0x240c, 574}, - {0x240d, 575}, - {0x240e, 576}, - {0x240f, 577}, - {0x2410, 578}, - {0x2411, 579}, - {0x2412, 580}, - {0x2413, 581}, - {0x2414, 582}, - {0x2415, 583}, - {0x2416, 584}, - {0x2417, 585}, - {0x2418, 586}, - {0x2419, 587}, - {0x241a, 588}, - {0x241b, 589}, - {0x241c, 590}, - {0x241d, 591}, - {0x241e, 592}, - {0x241f, 593}, - {0x2421, 594}, - {0x2460, 506}, - {0x2461, 507}, - {0x2462, 508}, - {0x2463, 509}, - {0x2464, 510}, - {0x2465, 511}, - {0x2466, 512}, - {0x2467, 513}, - {0x2468, 514}, - {0x2469, 515}, - {0x2474, 516}, - {0x2475, 517}, - {0x2476, 518}, - {0x2477, 519}, - {0x2478, 520}, - {0x2479, 521}, - {0x247a, 522}, - {0x247b, 523}, - {0x247c, 524}, - {0x247d, 525}, - {0x2500, 311}, - {0x2502, 312}, - {0x250c, 314}, - {0x2510, 315}, - {0x2514, 316}, - {0x2518, 317}, - {0x251c, 309}, - {0x2524, 308}, - {0x252c, 307}, - {0x2534, 306}, - {0x253c, 305}, - {0x2550, 322}, - {0x255e, 323}, - {0x2561, 325}, - {0x256a, 324}, - {0x256d, 318}, - {0x256e, 319}, - {0x256f, 321}, - {0x2570, 320}, - {0x2571, 330}, - {0x2572, 331}, - {0x2573, 332}, - {0x2581, 290}, - {0x2582, 291}, - {0x2583, 292}, - {0x2584, 293}, - {0x2585, 294}, - {0x2586, 295}, - {0x2587, 296}, - {0x2588, 297}, - {0x2589, 304}, - {0x258a, 303}, - {0x258b, 302}, - {0x258c, 301}, - {0x258d, 300}, - {0x258e, 299}, - {0x258f, 298}, - {0x2594, 310}, - {0x2595, 313}, - {0x25a0, 190}, - {0x25a1, 189}, - {0x25b2, 183}, - {0x25b3, 182}, - {0x25bc, 192}, - {0x25bd, 191}, - {0x25c6, 188}, - {0x25c7, 187}, - {0x25cb, 180}, - {0x25ce, 184}, - {0x25cf, 181}, - {0x25e2, 326}, - {0x25e3, 327}, - {0x25e4, 329}, - {0x25e5, 328}, - {0x2605, 186}, - {0x2606, 185}, - {0x2609, 244}, - {0x2640, 241}, - {0x2641, 243}, - {0x2642, 242}, - {0x2e87, 0}, - {0x2e88, 1}, - {0x2e8d, 0}, - {0x2e9d, 732}, - {0x2ec6, 1289}, - {0x2ecd, 0}, - {0x2ed7, 0}, - {0x2ee3, 2550}, - {0x2f33, 551}, - {0x3000, 99}, - {0x3001, 101}, - {0x3002, 102}, - {0x3003, 179}, - {0x3006, 0}, - {0x3007, 1}, - {0x3008, 148}, - {0x3009, 149}, - {0x300a, 144}, - {0x300b, 145}, - {0x300c, 152}, - {0x300d, 153}, - {0x300e, 156}, - {0x300f, 157}, - {0x3010, 140}, - {0x3011, 141}, - {0x3012, 261}, - {0x3014, 136}, - {0x3015, 137}, - {0x301d, 170}, - {0x301e, 171}, - {0x3021, 353}, - {0x3022, 354}, - {0x3023, 355}, - {0x3024, 356}, - {0x3025, 357}, - {0x3026, 358}, - {0x3027, 359}, - {0x3028, 360}, - {0x3029, 361}, - {0x3042, 0}, - {0x3043, 1}, - {0x3044, 2}, - {0x3045, 3}, - {0x3046, 4}, - {0x3047, 5}, - {0x3048, 6}, - {0x3049, 7}, - {0x304a, 8}, - {0x304b, 9}, - {0x304c, 10}, - {0x304d, 11}, - {0x304e, 12}, - {0x304f, 13}, - {0x3050, 14}, - {0x3051, 15}, - {0x3052, 16}, - {0x3053, 17}, - {0x3054, 18}, - {0x3055, 19}, - {0x3056, 20}, - {0x3057, 21}, - {0x3058, 22}, - {0x3059, 23}, - {0x305a, 24}, - {0x305b, 25}, - {0x305c, 26}, - {0x305d, 27}, - {0x305e, 28}, - {0x305f, 29}, - {0x3060, 30}, - {0x3061, 31}, - {0x3062, 32}, - {0x3063, 33}, - {0x3064, 34}, - {0x3065, 35}, - {0x3066, 36}, - {0x3067, 37}, - {0x3068, 38}, - {0x3069, 39}, - {0x306a, 40}, - {0x306b, 41}, - {0x306c, 42}, - {0x306d, 43}, - {0x306e, 44}, - {0x306f, 45}, - {0x3070, 46}, - {0x3071, 47}, - {0x3072, 48}, - {0x3073, 49}, - {0x3074, 50}, - {0x3075, 51}, - {0x3076, 52}, - {0x3077, 53}, - {0x3078, 54}, - {0x3079, 55}, - {0x307a, 56}, - {0x307b, 57}, - {0x307c, 58}, - {0x307d, 59}, - {0x307e, 60}, - {0x307f, 61}, - {0x3080, 62}, - {0x3081, 63}, - {0x3082, 64}, - {0x3083, 65}, - {0x3084, 66}, - {0x3085, 67}, - {0x3086, 68}, - {0x3087, 69}, - {0x3088, 70}, - {0x3089, 71}, - {0x308a, 72}, - {0x308b, 73}, - {0x308c, 74}, - {0x308d, 75}, - {0x308e, 76}, - {0x308f, 77}, - {0x3090, 78}, - {0x3091, 79}, - {0x3092, 80}, - {0x3093, 81}, - {0x309c, 0}, - {0x309e, 0}, - {0x30a2, 0}, - {0x30a3, 1}, - {0x30a4, 2}, - {0x30a5, 3}, - {0x30a6, 4}, - {0x30a7, 5}, - {0x30a8, 6}, - {0x30a9, 7}, - {0x30aa, 8}, - {0x30ab, 9}, - {0x30ac, 10}, - {0x30ad, 11}, - {0x30ae, 12}, - {0x30af, 13}, - {0x30b0, 14}, - {0x30b1, 15}, - {0x30b2, 16}, - {0x30b3, 17}, - {0x30b4, 18}, - {0x30b5, 19}, - {0x30b6, 20}, - {0x30b7, 21}, - {0x30b8, 22}, - {0x30b9, 23}, - {0x30ba, 24}, - {0x30bb, 25}, - {0x30bc, 26}, - {0x30bd, 27}, - {0x30be, 28}, - {0x30bf, 29}, - {0x30c0, 30}, - {0x30c1, 31}, - {0x30c2, 32}, - {0x30c3, 33}, - {0x30c4, 34}, - {0x30c5, 35}, - {0x30c6, 36}, - {0x30c7, 37}, - {0x30c8, 38}, - {0x30c9, 39}, - {0x30ca, 40}, - {0x30cb, 41}, - {0x30cc, 42}, - {0x30cd, 43}, - {0x30ce, 44}, - {0x30cf, 45}, - {0x30d0, 46}, - {0x30d1, 47}, - {0x30d2, 48}, - {0x30d3, 49}, - {0x30d4, 50}, - {0x30d5, 51}, - {0x30d6, 52}, - {0x30d7, 53}, - {0x30d8, 54}, - {0x30d9, 55}, - {0x30da, 56}, - {0x30db, 57}, - {0x30dc, 58}, - {0x30dd, 59}, - {0x30de, 60}, - {0x30df, 61}, - {0x30e0, 62}, - {0x30e1, 63}, - {0x30e2, 64}, - {0x30e3, 65}, - {0x30e4, 66}, - {0x30e5, 67}, - {0x30e6, 68}, - {0x30e7, 69}, - {0x30e8, 70}, - {0x30e9, 71}, - {0x30ea, 72}, - {0x30eb, 73}, - {0x30ec, 74}, - {0x30ed, 75}, - {0x30ee, 76}, - {0x30ef, 77}, - {0x30f0, 78}, - {0x30f1, 79}, - {0x30f2, 80}, - {0x30f3, 81}, - {0x30f4, 82}, - {0x30f5, 83}, - {0x30f6, 84}, - {0x30fe, 0}, - {0x3105, 465}, - {0x3106, 466}, - {0x3107, 467}, - {0x3108, 468}, - {0x3109, 469}, - {0x310a, 470}, - {0x310b, 471}, - {0x310c, 472}, - {0x310d, 473}, - {0x310e, 474}, - {0x310f, 475}, - {0x3110, 476}, - {0x3111, 477}, - {0x3112, 478}, - {0x3113, 479}, - {0x3114, 480}, - {0x3115, 481}, - {0x3116, 482}, - {0x3117, 483}, - {0x3118, 484}, - {0x3119, 485}, - {0x311a, 486}, - {0x311b, 487}, - {0x311c, 488}, - {0x311d, 489}, - {0x311e, 490}, - {0x311f, 491}, - {0x3120, 492}, - {0x3121, 493}, - {0x3122, 494}, - {0x3123, 495}, - {0x3124, 496}, - {0x3125, 497}, - {0x3126, 498}, - {0x3127, 499}, - {0x3128, 500}, - {0x3129, 501}, - {0x32a3, 193}, - {0x338e, 277}, - {0x338f, 278}, - {0x339c, 272}, - {0x339d, 273}, - {0x339e, 274}, - {0x33a1, 276}, - {0x33c4, 279}, - {0x33ce, 275}, - {0x33d1, 236}, - {0x33d2, 235}, - {0x33d5, 271}, - {0x4e00, 595}, - {0x4e01, 597}, - {0x4e03, 598}, - {0x4e07, 6001}, - {0x4e08, 617}, - {0x4e09, 615}, - {0x4e0a, 618}, - {0x4e0b, 616}, - {0x4e0c, 6002}, - {0x4e0d, 660}, - {0x4e0e, 6010}, - {0x4e0f, 6008}, - {0x4e10, 659}, - {0x4e11, 658}, - {0x4e14, 754}, - {0x4e15, 753}, - {0x4e16, 752}, - {0x4e18, 755}, - {0x4e19, 751}, - {0x4e1e, 878}, - {0x4e1f, 879}, - {0x4e26, 1320}, - {0x4e28, 536}, - {0x4e2b, 619}, - {0x4e2d, 661}, - {0x4e2e, 6011}, - {0x4e30, 662}, - {0x4e31, 6030}, - {0x4e32, 1045}, - {0x4e33, 6388}, - {0x4e36, 537}, - {0x4e38, 620}, - {0x4e39, 663}, - {0x4e3b, 756}, - {0x4e3c, 6031}, - {0x4e3f, 538}, - {0x4e42, 5996}, - {0x4e43, 599}, - {0x4e45, 622}, - {0x4e47, 6003}, - {0x4e48, 623}, - {0x4e4b, 664}, - {0x4e4d, 757}, - {0x4e4e, 759}, - {0x4e4f, 758}, - {0x4e52, 880}, - {0x4e53, 881}, - {0x4e56, 1321}, - {0x4e58, 2097}, - {0x4e59, 596}, - {0x4e5c, 5997}, - {0x4e5d, 600}, - {0x4e5e, 625}, - {0x4e5f, 624}, - {0x4e69, 882}, - {0x4e73, 1322}, - {0x4e7e, 2555}, - {0x4e7f, 7733}, - {0x4e82, 3518}, - {0x4e83, 9057}, - {0x4e84, 9058}, - {0x4e85, 539}, - {0x4e86, 601}, - {0x4e88, 666}, - {0x4e8b, 1323}, - {0x4e8c, 602}, - {0x4e8d, 6004}, - {0x4e8e, 626}, - {0x4e91, 667}, - {0x4e92, 669}, - {0x4e93, 6012}, - {0x4e94, 670}, - {0x4e95, 668}, - {0x4e99, 883}, - {0x4e9b, 1324}, - {0x4e9e, 1325}, - {0x4e9f, 1699}, - {0x4ea0, 540}, - {0x4ea1, 627}, - {0x4ea2, 671}, - {0x4ea4, 884}, - {0x4ea5, 886}, - {0x4ea6, 885}, - {0x4ea8, 1046}, - {0x4eab, 1326}, - {0x4eac, 1327}, - {0x4ead, 1700}, - {0x4eae, 1701}, - {0x4eb3, 2098}, - {0x4eb6, 9059}, - {0x4eba, 603}, - {0x4ec0, 673}, - {0x4ec1, 672}, - {0x4ec2, 6013}, - {0x4ec3, 674}, - {0x4ec4, 680}, - {0x4ec6, 675}, - {0x4ec7, 676}, - {0x4ec8, 6015}, - {0x4ec9, 6014}, - {0x4eca, 678}, - {0x4ecb, 679}, - {0x4ecd, 677}, - {0x4ed4, 762}, - {0x4ed5, 763}, - {0x4ed6, 764}, - {0x4ed7, 765}, - {0x4ed8, 761}, - {0x4ed9, 768}, - {0x4eda, 6037}, - {0x4edc, 6033}, - {0x4edd, 6036}, - {0x4ede, 769}, - {0x4edf, 785}, - {0x4ee1, 6035}, - {0x4ee3, 766}, - {0x4ee4, 767}, - {0x4ee5, 760}, - {0x4ee8, 6032}, - {0x4ee9, 6034}, - {0x4ef0, 899}, - {0x4ef1, 6074}, - {0x4ef2, 896}, - {0x4ef3, 900}, - {0x4ef4, 6084}, - {0x4ef5, 6072}, - {0x4ef6, 897}, - {0x4ef7, 6076}, - {0x4efb, 898}, - {0x4efd, 901}, - {0x4eff, 887}, - {0x4f00, 6075}, - {0x4f01, 902}, - {0x4f02, 6079}, - {0x4f04, 6083}, - {0x4f05, 6080}, - {0x4f08, 6077}, - {0x4f09, 888}, - {0x4f0a, 890}, - {0x4f0b, 903}, - {0x4f0d, 892}, - {0x4f0e, 6069}, - {0x4f0f, 895}, - {0x4f10, 893}, - {0x4f11, 894}, - {0x4f12, 6085}, - {0x4f13, 6082}, - {0x4f14, 6073}, - {0x4f15, 891}, - {0x4f18, 6070}, - {0x4f19, 889}, - {0x4f1d, 6078}, - {0x4f22, 6081}, - {0x4f2c, 6071}, - {0x4f2d, 6191}, - {0x4f2f, 1068}, - {0x4f30, 1055}, - {0x4f33, 6192}, - {0x4f34, 1052}, - {0x4f36, 1070}, - {0x4f38, 1060}, - {0x4f3a, 1059}, - {0x4f3b, 6180}, - {0x4f3c, 1063}, - {0x4f3d, 1058}, - {0x4f3e, 6185}, - {0x4f3f, 6193}, - {0x4f41, 6189}, - {0x4f43, 1061}, - {0x4f46, 1064}, - {0x4f47, 1049}, - {0x4f48, 1073}, - {0x4f49, 6182}, - {0x4f4c, 6400}, - {0x4f4d, 1047}, - {0x4f4e, 1069}, - {0x4f4f, 1048}, - {0x4f50, 1056}, - {0x4f51, 1057}, - {0x4f52, 6187}, - {0x4f53, 6183}, - {0x4f54, 1062}, - {0x4f55, 1054}, - {0x4f56, 6179}, - {0x4f57, 1050}, - {0x4f58, 6190}, - {0x4f59, 1071}, - {0x4f5a, 1074}, - {0x4f5b, 1053}, - {0x4f5c, 1066}, - {0x4f5d, 1072}, - {0x4f5e, 1051}, - {0x4f5f, 6188}, - {0x4f60, 1067}, - {0x4f61, 6194}, - {0x4f62, 6181}, - {0x4f63, 1065}, - {0x4f64, 6184}, - {0x4f67, 6186}, - {0x4f69, 1341}, - {0x4f6a, 6402}, - {0x4f6b, 6414}, - {0x4f6c, 1333}, - {0x4f6e, 6415}, - {0x4f6f, 1328}, - {0x4f70, 1338}, - {0x4f73, 1331}, - {0x4f74, 6396}, - {0x4f75, 1339}, - {0x4f76, 6395}, - {0x4f77, 6399}, - {0x4f78, 6406}, - {0x4f79, 6404}, - {0x4f7a, 1347}, - {0x4f7b, 1342}, - {0x4f7c, 6390}, - {0x4f7d, 6392}, - {0x4f7e, 1344}, - {0x4f7f, 1332}, - {0x4f80, 6393}, - {0x4f81, 6405}, - {0x4f82, 6412}, - {0x4f83, 1337}, - {0x4f84, 6398}, - {0x4f85, 6391}, - {0x4f86, 1336}, - {0x4f87, 6394}, - {0x4f88, 1340}, - {0x4f89, 6397}, - {0x4f8b, 1335}, - {0x4f8d, 1330}, - {0x4f8f, 1345}, - {0x4f90, 6407}, - {0x4f91, 1346}, - {0x4f92, 6411}, - {0x4f94, 6409}, - {0x4f95, 6413}, - {0x4f96, 1343}, - {0x4f97, 6401}, - {0x4f98, 6389}, - {0x4f9a, 6403}, - {0x4f9b, 1334}, - {0x4f9c, 6408}, - {0x4f9d, 1329}, - {0x4f9e, 6410}, - {0x4fae, 1716}, - {0x4faf, 1704}, - {0x4fb2, 6749}, - {0x4fb3, 6757}, - {0x4fb5, 1703}, - {0x4fb6, 1711}, - {0x4fb7, 1723}, - {0x4fb9, 6763}, - {0x4fba, 6761}, - {0x4fbb, 6756}, - {0x4fbf, 1705}, - {0x4fc0, 6762}, - {0x4fc1, 6752}, - {0x4fc2, 1719}, - {0x4fc3, 1710}, - {0x4fc4, 1718}, - {0x4fc5, 6747}, - {0x4fc7, 6759}, - {0x4fc9, 6750}, - {0x4fca, 1714}, - {0x4fcb, 6751}, - {0x4fcd, 6746}, - {0x4fce, 1721}, - {0x4fcf, 1708}, - {0x4fd0, 1717}, - {0x4fd1, 1707}, - {0x4fd3, 6748}, - {0x4fd4, 6753}, - {0x4fd6, 6760}, - {0x4fd7, 1715}, - {0x4fd8, 1712}, - {0x4fd9, 6755}, - {0x4fda, 1720}, - {0x4fdb, 6758}, - {0x4fdc, 6754}, - {0x4fdd, 1709}, - {0x4fde, 1722}, - {0x4fdf, 1713}, - {0x4fe0, 1706}, - {0x4fe1, 1702}, - {0x4fec, 6764}, - {0x4fee, 2124}, - {0x4fef, 2102}, - {0x4ff1, 2118}, - {0x4ff3, 2123}, - {0x4ff4, 7204}, - {0x4ff5, 7203}, - {0x4ff6, 7208}, - {0x4ff7, 7209}, - {0x4ff8, 2105}, - {0x4ffa, 2114}, - {0x4ffe, 2127}, - {0x5000, 2115}, - {0x5005, 7197}, - {0x5006, 2108}, - {0x5007, 7198}, - {0x5009, 2129}, - {0x500b, 2120}, - {0x500c, 2099}, - {0x500d, 2100}, - {0x500e, 7217}, - {0x500f, 2572}, - {0x5011, 2113}, - {0x5012, 2112}, - {0x5013, 7199}, - {0x5014, 2116}, - {0x5015, 7749}, - {0x5016, 2107}, - {0x5017, 7210}, - {0x5018, 2122}, - {0x5019, 2121}, - {0x501a, 2111}, - {0x501b, 7202}, - {0x501c, 7211}, - {0x501e, 7196}, - {0x501f, 2110}, - {0x5020, 7212}, - {0x5021, 2119}, - {0x5022, 7200}, - {0x5023, 2101}, - {0x5025, 2104}, - {0x5026, 2103}, - {0x5027, 7213}, - {0x5028, 2117}, - {0x5029, 2106}, - {0x502a, 2126}, - {0x502b, 2128}, - {0x502c, 7207}, - {0x502d, 2125}, - {0x502f, 7215}, - {0x5030, 7201}, - {0x5031, 7216}, - {0x5033, 7205}, - {0x5035, 7214}, - {0x5037, 7206}, - {0x503c, 2109}, - {0x5040, 7757}, - {0x5041, 7745}, - {0x5043, 2560}, - {0x5045, 7750}, - {0x5046, 7756}, - {0x5047, 2559}, - {0x5048, 7743}, - {0x5049, 2563}, - {0x504a, 7747}, - {0x504b, 7740}, - {0x504c, 2561}, - {0x504d, 7744}, - {0x504e, 2566}, - {0x504f, 2571}, - {0x5051, 7761}, - {0x5053, 7739}, - {0x5055, 2567}, - {0x5057, 7760}, - {0x505a, 2562}, - {0x505b, 7746}, - {0x505c, 2558}, - {0x505d, 7741}, - {0x505e, 7737}, - {0x505f, 7751}, - {0x5060, 7738}, - {0x5061, 7736}, - {0x5062, 7748}, - {0x5063, 7754}, - {0x5064, 7755}, - {0x5065, 2564}, - {0x5068, 8376}, - {0x5069, 7752}, - {0x506a, 7735}, - {0x506b, 7753}, - {0x506d, 2574}, - {0x506e, 7758}, - {0x506f, 2573}, - {0x5070, 7734}, - {0x5072, 7742}, - {0x5073, 7759}, - {0x5074, 2569}, - {0x5075, 2568}, - {0x5076, 2565}, - {0x5077, 2570}, - {0x507a, 2556}, - {0x507d, 2557}, - {0x5080, 3052}, - {0x5082, 8379}, - {0x5083, 8372}, - {0x5085, 3049}, - {0x5087, 8380}, - {0x508b, 8370}, - {0x508c, 8373}, - {0x508d, 3048}, - {0x508e, 8374}, - {0x5091, 3051}, - {0x5092, 8378}, - {0x5094, 8368}, - {0x5095, 8367}, - {0x5096, 3053}, - {0x5098, 3054}, - {0x5099, 3050}, - {0x509a, 3055}, - {0x509b, 8366}, - {0x509c, 8377}, - {0x509d, 8375}, - {0x509e, 8369}, - {0x50a2, 3047}, - {0x50a3, 8371}, - {0x50ac, 3525}, - {0x50ad, 3519}, - {0x50ae, 9063}, - {0x50af, 3528}, - {0x50b0, 9069}, - {0x50b1, 9072}, - {0x50b2, 3521}, - {0x50b3, 3522}, - {0x50b4, 9066}, - {0x50b5, 3520}, - {0x50b6, 9075}, - {0x50b7, 3526}, - {0x50b8, 9076}, - {0x50ba, 9071}, - {0x50bb, 3527}, - {0x50bd, 9060}, - {0x50be, 3524}, - {0x50bf, 9061}, - {0x50c1, 9070}, - {0x50c2, 9068}, - {0x50c4, 9064}, - {0x50c5, 3523}, - {0x50c6, 9062}, - {0x50c7, 3529}, - {0x50c8, 9067}, - {0x50c9, 9074}, - {0x50ca, 9065}, - {0x50cb, 9073}, - {0x50ce, 3976}, - {0x50cf, 3973}, - {0x50d1, 3974}, - {0x50d3, 9756}, - {0x50d4, 9748}, - {0x50d5, 3972}, - {0x50d6, 3969}, - {0x50d7, 9749}, - {0x50da, 3971}, - {0x50db, 9752}, - {0x50dd, 9754}, - {0x50e0, 9761}, - {0x50e3, 9760}, - {0x50e4, 9755}, - {0x50e5, 3968}, - {0x50e6, 9747}, - {0x50e7, 3966}, - {0x50e8, 9750}, - {0x50e9, 3977}, - {0x50ea, 9753}, - {0x50ec, 9757}, - {0x50ed, 3970}, - {0x50ee, 3967}, - {0x50ef, 9759}, - {0x50f0, 9758}, - {0x50f1, 3975}, - {0x50f3, 9751}, - {0x50f5, 4357}, - {0x50f9, 4358}, - {0x50fb, 4356}, - {0x5100, 4355}, - {0x5102, 4359}, - {0x5104, 4354}, - {0x5105, 4362}, - {0x5107, 0}, - {0x5108, 4360}, - {0x5109, 4361}, - {0x510c, 0}, - {0x5110, 4749}, - {0x5112, 4746}, - {0x5114, 4748}, - {0x5115, 4750}, - {0x5118, 4747}, - {0x511f, 5045}, - {0x5121, 5046}, - {0x512a, 5044}, - {0x512e, 0}, - {0x5132, 5047}, - {0x5133, 5493}, - {0x5135, 0}, - {0x5137, 5736}, - {0x5138, 5737}, - {0x513b, 5820}, - {0x513c, 5819}, - {0x513f, 604}, - {0x5140, 628}, - {0x5141, 682}, - {0x5143, 681}, - {0x5144, 771}, - {0x5145, 770}, - {0x5146, 906}, - {0x5147, 905}, - {0x5148, 907}, - {0x5149, 904}, - {0x514b, 1076}, - {0x514c, 1075}, - {0x514d, 1077}, - {0x5152, 1349}, - {0x5154, 1348}, - {0x5155, 1350}, - {0x5157, 1724}, - {0x5159, 281}, - {0x515a, 7218}, - {0x515b, 282}, - {0x515c, 2575}, - {0x515d, 284}, - {0x515e, 283}, - {0x515f, 8381}, - {0x5161, 285}, - {0x5162, 3978}, - {0x5163, 286}, - {0x5165, 605}, - {0x5167, 683}, - {0x5168, 908}, - {0x5169, 1351}, - {0x516b, 606}, - {0x516c, 686}, - {0x516d, 684}, - {0x516e, 685}, - {0x5171, 909}, - {0x5175, 1078}, - {0x5176, 1353}, - {0x5177, 1352}, - {0x5178, 1354}, - {0x517c, 2130}, - {0x5180, 4751}, - {0x5182, 541}, - {0x5187, 6009}, - {0x5189, 772}, - {0x518a, 773}, - {0x518d, 910}, - {0x518f, 6195}, - {0x5191, 1726}, - {0x5192, 1725}, - {0x5193, 7220}, - {0x5194, 7219}, - {0x5195, 2576}, - {0x5196, 542}, - {0x5197, 687}, - {0x5198, 6016}, - {0x519e, 6416}, - {0x51a0, 1727}, - {0x51a2, 2133}, - {0x51a4, 2131}, - {0x51a5, 2132}, - {0x51aa, 4752}, - {0x51ab, 543}, - {0x51ac, 774}, - {0x51b0, 911}, - {0x51b1, 6086}, - {0x51b6, 1079}, - {0x51b7, 1080}, - {0x51b9, 6196}, - {0x51bc, 6417}, - {0x51bd, 1355}, - {0x51be, 6418}, - {0x51c4, 7222}, - {0x51c5, 7223}, - {0x51c6, 2136}, - {0x51c8, 7224}, - {0x51ca, 7221}, - {0x51cb, 2137}, - {0x51cc, 2135}, - {0x51cd, 2134}, - {0x51ce, 7225}, - {0x51d0, 7762}, - {0x51d4, 8382}, - {0x51d7, 9077}, - {0x51d8, 9762}, - {0x51dc, 4363}, - {0x51dd, 4753}, - {0x51e0, 607}, - {0x51e1, 621}, - {0x51f0, 2577}, - {0x51f1, 3057}, - {0x51f3, 3979}, - {0x51f5, 5998}, - {0x51f6, 688}, - {0x51f8, 777}, - {0x51f9, 775}, - {0x51fa, 776}, - {0x51fd, 1356}, - {0x5200, 608}, - {0x5201, 609}, - {0x5203, 629}, - {0x5206, 689}, - {0x5207, 690}, - {0x5208, 691}, - {0x5209, 6039}, - {0x520a, 778}, - {0x520c, 6038}, - {0x520e, 915}, - {0x5210, 6088}, - {0x5211, 913}, - {0x5212, 914}, - {0x5213, 6087}, - {0x5216, 916}, - {0x5217, 912}, - {0x521c, 6197}, - {0x521d, 1675}, - {0x521e, 6198}, - {0x5221, 6199}, - {0x5224, 1082}, - {0x5225, 1081}, - {0x5228, 1085}, - {0x5229, 1083}, - {0x522a, 1084}, - {0x522e, 1362}, - {0x5230, 1361}, - {0x5231, 6423}, - {0x5232, 6420}, - {0x5233, 6421}, - {0x5235, 6419}, - {0x5236, 1363}, - {0x5237, 1359}, - {0x5238, 1358}, - {0x523a, 1360}, - {0x523b, 1357}, - {0x5241, 1364}, - {0x5243, 1729}, - {0x5244, 6765}, - {0x5246, 6422}, - {0x5247, 1734}, - {0x5249, 6766}, - {0x524a, 1730}, - {0x524b, 1733}, - {0x524c, 1732}, - {0x524d, 1731}, - {0x524e, 1728}, - {0x5252, 7228}, - {0x5254, 2140}, - {0x5255, 7231}, - {0x5256, 2138}, - {0x525a, 7227}, - {0x525b, 2141}, - {0x525c, 2139}, - {0x525d, 2142}, - {0x525e, 7229}, - {0x525f, 7230}, - {0x5261, 7226}, - {0x5262, 7232}, - {0x5269, 3061}, - {0x526a, 2578}, - {0x526b, 7763}, - {0x526c, 7765}, - {0x526d, 7764}, - {0x526e, 7766}, - {0x526f, 2579}, - {0x5272, 3058}, - {0x5274, 3059}, - {0x5275, 3060}, - {0x5277, 3531}, - {0x5278, 9079}, - {0x527a, 9078}, - {0x527b, 9080}, - {0x527c, 9081}, - {0x527d, 3532}, - {0x527f, 3530}, - {0x5280, 9763}, - {0x5281, 9764}, - {0x5282, 3981}, - {0x5283, 3980}, - {0x5287, 4364}, - {0x5288, 4365}, - {0x5289, 4366}, - {0x528a, 4368}, - {0x528c, 0}, - {0x528d, 4367}, - {0x5291, 4754}, - {0x5293, 4755}, - {0x529b, 610}, - {0x529f, 780}, - {0x52a0, 779}, - {0x52a3, 917}, - {0x52a6, 6089}, - {0x52a9, 1087}, - {0x52aa, 1088}, - {0x52ab, 1086}, - {0x52ac, 1089}, - {0x52ad, 6200}, - {0x52ae, 6201}, - {0x52bb, 1366}, - {0x52bc, 6424}, - {0x52be, 1365}, - {0x52c0, 6767}, - {0x52c1, 1738}, - {0x52c2, 6768}, - {0x52c3, 1737}, - {0x52c7, 1735}, - {0x52c9, 1736}, - {0x52cd, 7233}, - {0x52d2, 2580}, - {0x52d3, 7768}, - {0x52d5, 2583}, - {0x52d6, 7767}, - {0x52d7, 2767}, - {0x52d8, 2582}, - {0x52d9, 2581}, - {0x52db, 3064}, - {0x52dd, 3063}, - {0x52de, 3062}, - {0x52df, 3533}, - {0x52e2, 3536}, - {0x52e3, 3537}, - {0x52e4, 3535}, - {0x52e6, 3534}, - {0x52e9, 9765}, - {0x52eb, 9766}, - {0x52f0, 4369}, - {0x52f3, 4756}, - {0x52f5, 5048}, - {0x52f8, 5641}, - {0x52f9, 544}, - {0x52fa, 630}, - {0x52fb, 692}, - {0x52fc, 6017}, - {0x52fe, 693}, - {0x52ff, 694}, - {0x5305, 781}, - {0x5306, 782}, - {0x5308, 918}, - {0x5309, 6202}, - {0x530a, 6425}, - {0x530b, 6426}, - {0x530d, 1739}, - {0x530e, 7234}, - {0x530f, 2585}, - {0x5310, 2584}, - {0x5311, 8384}, - {0x5312, 8383}, - {0x5315, 611}, - {0x5316, 695}, - {0x5317, 783}, - {0x5319, 2586}, - {0x531a, 5999}, - {0x531c, 6040}, - {0x531d, 784}, - {0x531f, 6091}, - {0x5320, 920}, - {0x5321, 919}, - {0x5322, 6090}, - {0x5323, 1090}, - {0x532a, 2143}, - {0x532d, 7769}, - {0x532f, 3538}, - {0x5330, 9767}, - {0x5331, 3982}, - {0x5338, 545}, - {0x5339, 696}, - {0x533c, 6427}, - {0x533d, 6769}, - {0x533e, 2589}, - {0x533f, 2587}, - {0x5340, 2588}, - {0x5341, 612}, - {0x5343, 631}, - {0x5344, 363}, - {0x5345, 699}, - {0x5347, 698}, - {0x5348, 697}, - {0x5349, 787}, - {0x534a, 786}, - {0x534c, 6041}, - {0x534d, 6092}, - {0x5351, 1370}, - {0x5352, 1367}, - {0x5353, 1369}, - {0x5354, 1368}, - {0x5357, 1740}, - {0x535a, 3065}, - {0x535c, 613}, - {0x535e, 700}, - {0x5360, 789}, - {0x5361, 788}, - {0x5363, 6203}, - {0x5366, 1371}, - {0x5369, 546}, - {0x536c, 6018}, - {0x536e, 791}, - {0x536f, 790}, - {0x5370, 921}, - {0x5371, 922}, - {0x5372, 6204}, - {0x5373, 1091}, - {0x5375, 1092}, - {0x5377, 1372}, - {0x5378, 1373}, - {0x5379, 1374}, - {0x537b, 1741}, - {0x537c, 6770}, - {0x537f, 2144}, - {0x5382, 6000}, - {0x5384, 701}, - {0x538a, 6093}, - {0x538e, 6205}, - {0x538f, 6206}, - {0x5392, 6428}, - {0x5394, 6429}, - {0x5396, 6772}, - {0x5397, 6771}, - {0x5398, 6774}, - {0x5399, 6773}, - {0x539a, 1742}, - {0x539c, 7770}, - {0x539d, 2146}, - {0x539e, 7235}, - {0x539f, 2145}, - {0x53a4, 8385}, - {0x53a5, 3066}, - {0x53a7, 8386}, - {0x53ac, 9768}, - {0x53ad, 3983}, - {0x53b2, 4370}, - {0x53b6, 547}, - {0x53b9, 6019}, - {0x53bb, 792}, - {0x53c3, 2590}, - {0x53c8, 614}, - {0x53c9, 632}, - {0x53ca, 703}, - {0x53cb, 702}, - {0x53cd, 704}, - {0x53d4, 1376}, - {0x53d6, 1375}, - {0x53d7, 1377}, - {0x53db, 1743}, - {0x53df, 2147}, - {0x53e2, 5321}, - {0x53e3, 633}, - {0x53e4, 794}, - {0x53e5, 809}, - {0x53e6, 804}, - {0x53e8, 799}, - {0x53e9, 798}, - {0x53ea, 805}, - {0x53eb, 803}, - {0x53ec, 796}, - {0x53ed, 810}, - {0x53ee, 797}, - {0x53ef, 793}, - {0x53f0, 808}, - {0x53f1, 807}, - {0x53f2, 806}, - {0x53f3, 795}, - {0x53f5, 802}, - {0x53f8, 801}, - {0x53fb, 811}, - {0x53fc, 800}, - {0x5401, 928}, - {0x5403, 934}, - {0x5404, 930}, - {0x5406, 936}, - {0x5407, 6094}, - {0x5408, 933}, - {0x5409, 923}, - {0x540a, 926}, - {0x540b, 929}, - {0x540c, 925}, - {0x540d, 932}, - {0x540e, 935}, - {0x540f, 924}, - {0x5410, 927}, - {0x5411, 931}, - {0x5412, 937}, - {0x5418, 6215}, - {0x5419, 6212}, - {0x541b, 1105}, - {0x541c, 6213}, - {0x541d, 1093}, - {0x541e, 1095}, - {0x541f, 1119}, - {0x5420, 1114}, - {0x5424, 6220}, - {0x5425, 6214}, - {0x5426, 1097}, - {0x5427, 1099}, - {0x5428, 6219}, - {0x5429, 1106}, - {0x542a, 6209}, - {0x542b, 1118}, - {0x542c, 1120}, - {0x542d, 1094}, - {0x542e, 1111}, - {0x5430, 6207}, - {0x5431, 1117}, - {0x5433, 1102}, - {0x5435, 1112}, - {0x5436, 1113}, - {0x5437, 6208}, - {0x5438, 1110}, - {0x5439, 1108}, - {0x543b, 1109}, - {0x543c, 1115}, - {0x543d, 6216}, - {0x543e, 1096}, - {0x5440, 1116}, - {0x5441, 6218}, - {0x5442, 1104}, - {0x5443, 1101}, - {0x5445, 6211}, - {0x5446, 1100}, - {0x5447, 6221}, - {0x5448, 1103}, - {0x544a, 1107}, - {0x544e, 1098}, - {0x544f, 6217}, - {0x5454, 6210}, - {0x5460, 6446}, - {0x5461, 6445}, - {0x5462, 1395}, - {0x5463, 6448}, - {0x5464, 6450}, - {0x5465, 6439}, - {0x5466, 6442}, - {0x5467, 6449}, - {0x5468, 1396}, - {0x546b, 6436}, - {0x546c, 6440}, - {0x546f, 6444}, - {0x5470, 6789}, - {0x5471, 1391}, - {0x5472, 6793}, - {0x5473, 1378}, - {0x5474, 6441}, - {0x5475, 1379}, - {0x5476, 1392}, - {0x5477, 1385}, - {0x5478, 1381}, - {0x547a, 6437}, - {0x547b, 1384}, - {0x547c, 1389}, - {0x547d, 1398}, - {0x547e, 6438}, - {0x547f, 6431}, - {0x5480, 1383}, - {0x5481, 6432}, - {0x5482, 6434}, - {0x5484, 1386}, - {0x5486, 1388}, - {0x5487, 6430}, - {0x5488, 6435}, - {0x548b, 1397}, - {0x548c, 1393}, - {0x548d, 6443}, - {0x548e, 1399}, - {0x5490, 1390}, - {0x5491, 6433}, - {0x5492, 1387}, - {0x5495, 1382}, - {0x5496, 1380}, - {0x5498, 6447}, - {0x549a, 1394}, - {0x54a0, 6788}, - {0x54a1, 6776}, - {0x54a2, 6791}, - {0x54a5, 6778}, - {0x54a6, 1750}, - {0x54a7, 1764}, - {0x54a8, 1746}, - {0x54a9, 1763}, - {0x54aa, 1755}, - {0x54ab, 1760}, - {0x54ac, 1744}, - {0x54ad, 6777}, - {0x54ae, 6783}, - {0x54af, 1759}, - {0x54b0, 6795}, - {0x54b1, 1761}, - {0x54b3, 1751}, - {0x54b6, 6785}, - {0x54b7, 6782}, - {0x54b8, 1749}, - {0x54ba, 6775}, - {0x54bb, 1762}, - {0x54bc, 6790}, - {0x54bd, 1754}, - {0x54be, 6792}, - {0x54bf, 1765}, - {0x54c0, 1745}, - {0x54c1, 1756}, - {0x54c2, 1753}, - {0x54c3, 6780}, - {0x54c4, 1757}, - {0x54c5, 6786}, - {0x54c6, 6787}, - {0x54c7, 1752}, - {0x54c8, 1758}, - {0x54c9, 1748}, - {0x54ce, 1747}, - {0x54cf, 6779}, - {0x54d6, 6784}, - {0x54de, 6794}, - {0x54e0, 7255}, - {0x54e1, 2160}, - {0x54e2, 7237}, - {0x54e4, 7242}, - {0x54e5, 2153}, - {0x54e6, 2164}, - {0x54e7, 7240}, - {0x54e8, 2148}, - {0x54e9, 2158}, - {0x54ea, 2163}, - {0x54eb, 7247}, - {0x54ed, 2159}, - {0x54ee, 2162}, - {0x54f1, 7250}, - {0x54f2, 2154}, - {0x54f3, 7241}, - {0x54f7, 7253}, - {0x54f8, 7254}, - {0x54fa, 2156}, - {0x54fb, 7252}, - {0x54fc, 2152}, - {0x54fd, 2167}, - {0x54ff, 7244}, - {0x5501, 2150}, - {0x5503, 7257}, - {0x5504, 7245}, - {0x5505, 7249}, - {0x5506, 2155}, - {0x5507, 2166}, - {0x5508, 7246}, - {0x5509, 2161}, - {0x550a, 7251}, - {0x550b, 7258}, - {0x550c, 7785}, - {0x550e, 7256}, - {0x550f, 2168}, - {0x5510, 2149}, - {0x5511, 7248}, - {0x5512, 7239}, - {0x5514, 2157}, - {0x5517, 7238}, - {0x551a, 7243}, - {0x5526, 7236}, - {0x5527, 2165}, - {0x552a, 7777}, - {0x552c, 2609}, - {0x552d, 7791}, - {0x552e, 2607}, - {0x552f, 2604}, - {0x5530, 7782}, - {0x5531, 2600}, - {0x5532, 7786}, - {0x5533, 2611}, - {0x5534, 7776}, - {0x5535, 7781}, - {0x5536, 7780}, - {0x5537, 2151}, - {0x5538, 2606}, - {0x5539, 7789}, - {0x553b, 7792}, - {0x553c, 7773}, - {0x553e, 3084}, - {0x5540, 7793}, - {0x5541, 2612}, - {0x5543, 2598}, - {0x5544, 2595}, - {0x5545, 7784}, - {0x5546, 2592}, - {0x5548, 7790}, - {0x554a, 2599}, - {0x554b, 7794}, - {0x554d, 7774}, - {0x554e, 7788}, - {0x554f, 2602}, - {0x5550, 7775}, - {0x5551, 7778}, - {0x5552, 7783}, - {0x5555, 2603}, - {0x5556, 2601}, - {0x5557, 2613}, - {0x555c, 2608}, - {0x555e, 2596}, - {0x555f, 2748}, - {0x5561, 2597}, - {0x5562, 7779}, - {0x5563, 2610}, - {0x5564, 2605}, - {0x5565, 7787}, - {0x5566, 2594}, - {0x556a, 2593}, - {0x5575, 7771}, - {0x5576, 7772}, - {0x5577, 8391}, - {0x557b, 3067}, - {0x557c, 3070}, - {0x557d, 8402}, - {0x557e, 3090}, - {0x557f, 8405}, - {0x5580, 3068}, - {0x5581, 8398}, - {0x5582, 3074}, - {0x5583, 3080}, - {0x5584, 3355}, - {0x5587, 3078}, - {0x5588, 8395}, - {0x5589, 3091}, - {0x558a, 3071}, - {0x558b, 3079}, - {0x558c, 8403}, - {0x558d, 9095}, - {0x558e, 8408}, - {0x558f, 8396}, - {0x5591, 8387}, - {0x5592, 8400}, - {0x5593, 8394}, - {0x5594, 3077}, - {0x5595, 8406}, - {0x5598, 3073}, - {0x5599, 3093}, - {0x559a, 3086}, - {0x559c, 3075}, - {0x559d, 3072}, - {0x559f, 3083}, - {0x55a1, 8407}, - {0x55a2, 8393}, - {0x55a3, 8399}, - {0x55a4, 8401}, - {0x55a5, 8389}, - {0x55a6, 8404}, - {0x55a7, 3069}, - {0x55a8, 8388}, - {0x55aa, 3076}, - {0x55ab, 3092}, - {0x55ac, 3088}, - {0x55ad, 8390}, - {0x55ae, 3082}, - {0x55b1, 3089}, - {0x55b2, 3085}, - {0x55b3, 3081}, - {0x55b5, 8397}, - {0x55bb, 3087}, - {0x55bf, 9093}, - {0x55c0, 9089}, - {0x55c2, 9104}, - {0x55c3, 9082}, - {0x55c4, 9091}, - {0x55c5, 3552}, - {0x55c6, 3553}, - {0x55c7, 3545}, - {0x55c8, 9100}, - {0x55c9, 3555}, - {0x55ca, 9087}, - {0x55cb, 9086}, - {0x55cc, 9084}, - {0x55cd, 9102}, - {0x55ce, 3543}, - {0x55cf, 9096}, - {0x55d0, 9085}, - {0x55d1, 3546}, - {0x55d2, 9094}, - {0x55d3, 3541}, - {0x55d4, 9090}, - {0x55d5, 9097}, - {0x55d6, 9099}, - {0x55d9, 9103}, - {0x55da, 3550}, - {0x55db, 9083}, - {0x55dc, 3544}, - {0x55dd, 9088}, - {0x55df, 3539}, - {0x55e1, 3551}, - {0x55e2, 9098}, - {0x55e3, 3547}, - {0x55e4, 3548}, - {0x55e5, 3554}, - {0x55e6, 3542}, - {0x55e7, 287}, - {0x55e8, 3540}, - {0x55e9, 9092}, - {0x55ef, 3549}, - {0x55f2, 9101}, - {0x55f6, 3999}, - {0x55f7, 3994}, - {0x55f9, 9783}, - {0x55fa, 9779}, - {0x55fc, 9773}, - {0x55fd, 3988}, - {0x55fe, 3984}, - {0x55ff, 9782}, - {0x5600, 3985}, - {0x5601, 9776}, - {0x5602, 9778}, - {0x5604, 9781}, - {0x5606, 3990}, - {0x5608, 3997}, - {0x5609, 3991}, - {0x560c, 9771}, - {0x560d, 3992}, - {0x560e, 3993}, - {0x560f, 9774}, - {0x5610, 3998}, - {0x5612, 9772}, - {0x5613, 9777}, - {0x5614, 3989}, - {0x5615, 9770}, - {0x5616, 3995}, - {0x5617, 3987}, - {0x561b, 3986}, - {0x561c, 9775}, - {0x561d, 9780}, - {0x561f, 3996}, - {0x5627, 9769}, - {0x5629, 4377}, - {0x562e, 4371}, - {0x562f, 4383}, - {0x5630, 4384}, - {0x5632, 4374}, - {0x5634, 4376}, - {0x5636, 4382}, - {0x5639, 4373}, - {0x563b, 4372}, - {0x563f, 4375}, - {0x5645, 8392}, - {0x564e, 4379}, - {0x5653, 4378}, - {0x5657, 4380}, - {0x5659, 4757}, - {0x5662, 4769}, - {0x5664, 4761}, - {0x5665, 4765}, - {0x5668, 4764}, - {0x5669, 4760}, - {0x566a, 4763}, - {0x566b, 4758}, - {0x566c, 4768}, - {0x566f, 4767}, - {0x5671, 4766}, - {0x5674, 4381}, - {0x5676, 4770}, - {0x5678, 4762}, - {0x5679, 4759}, - {0x5680, 5050}, - {0x5685, 5052}, - {0x5687, 5053}, - {0x568d, 0}, - {0x568e, 5049}, - {0x568f, 5054}, - {0x5690, 5051}, - {0x5695, 5322}, - {0x56a5, 5494}, - {0x56a7, 0}, - {0x56a8, 5495}, - {0x56ae, 5323}, - {0x56b4, 5644}, - {0x56b6, 5643}, - {0x56b7, 5642}, - {0x56bc, 5645}, - {0x56be, 0}, - {0x56c0, 5739}, - {0x56c1, 5738}, - {0x56c2, 5740}, - {0x56c8, 5821}, - {0x56c9, 5823}, - {0x56ca, 5822}, - {0x56cc, 5878}, - {0x56d1, 5919}, - {0x56d7, 6005}, - {0x56da, 813}, - {0x56db, 812}, - {0x56dd, 940}, - {0x56de, 939}, - {0x56df, 6096}, - {0x56e0, 938}, - {0x56e1, 6095}, - {0x56e4, 1123}, - {0x56e5, 6224}, - {0x56e7, 6223}, - {0x56ea, 1121}, - {0x56eb, 1124}, - {0x56ee, 6222}, - {0x56f0, 1122}, - {0x56f7, 6451}, - {0x56f9, 6452}, - {0x56fa, 1400}, - {0x56ff, 1766}, - {0x5701, 7259}, - {0x5702, 7260}, - {0x5703, 2169}, - {0x5704, 2170}, - {0x5707, 7796}, - {0x5708, 2614}, - {0x5709, 2616}, - {0x570a, 7795}, - {0x570b, 2615}, - {0x570c, 8409}, - {0x570d, 3094}, - {0x5712, 3556}, - {0x5713, 3557}, - {0x5714, 9105}, - {0x5716, 4001}, - {0x5718, 4000}, - {0x571f, 634}, - {0x5720, 6020}, - {0x5722, 6042}, - {0x5723, 6043}, - {0x5728, 943}, - {0x5729, 947}, - {0x572a, 6098}, - {0x572c, 945}, - {0x572d, 944}, - {0x572e, 6097}, - {0x572f, 946}, - {0x5730, 942}, - {0x5733, 941}, - {0x5734, 6099}, - {0x573b, 1134}, - {0x573e, 1131}, - {0x5740, 1127}, - {0x5741, 6225}, - {0x5745, 6226}, - {0x5747, 1129}, - {0x5749, 6228}, - {0x574a, 1125}, - {0x574b, 6229}, - {0x574c, 6227}, - {0x574d, 1128}, - {0x574e, 1130}, - {0x574f, 1133}, - {0x5750, 1132}, - {0x5751, 1126}, - {0x5752, 6230}, - {0x5761, 1405}, - {0x5762, 6465}, - {0x5764, 1407}, - {0x5766, 1406}, - {0x5768, 6466}, - {0x5769, 1404}, - {0x576a, 1403}, - {0x576b, 6456}, - {0x576d, 6455}, - {0x576f, 6453}, - {0x5770, 6458}, - {0x5771, 6457}, - {0x5772, 6454}, - {0x5773, 6463}, - {0x5774, 6464}, - {0x5775, 6461}, - {0x5776, 6459}, - {0x5777, 1402}, - {0x577b, 6462}, - {0x577c, 1408}, - {0x577d, 6467}, - {0x5780, 6460}, - {0x5782, 1767}, - {0x5783, 1401}, - {0x578b, 1768}, - {0x578c, 6800}, - {0x578f, 6806}, - {0x5793, 1774}, - {0x5794, 6804}, - {0x5795, 6810}, - {0x5797, 6801}, - {0x5798, 6805}, - {0x5799, 6807}, - {0x579a, 6809}, - {0x579b, 6803}, - {0x579d, 6802}, - {0x579e, 6797}, - {0x579f, 6798}, - {0x57a0, 1769}, - {0x57a2, 1771}, - {0x57a3, 1770}, - {0x57a4, 6799}, - {0x57a5, 6808}, - {0x57ae, 1773}, - {0x57b5, 6796}, - {0x57b6, 7270}, - {0x57b8, 7269}, - {0x57b9, 7274}, - {0x57ba, 7265}, - {0x57bc, 7268}, - {0x57bd, 7267}, - {0x57bf, 7271}, - {0x57c1, 7275}, - {0x57c2, 2171}, - {0x57c3, 2174}, - {0x57c6, 7266}, - {0x57c7, 7272}, - {0x57cb, 2173}, - {0x57cc, 7261}, - {0x57ce, 1772}, - {0x57cf, 7810}, - {0x57d0, 7273}, - {0x57d2, 7264}, - {0x57d4, 2172}, - {0x57d5, 7263}, - {0x57dc, 7801}, - {0x57df, 2617}, - {0x57e0, 2621}, - {0x57e1, 7817}, - {0x57e2, 7799}, - {0x57e3, 7813}, - {0x57e4, 2622}, - {0x57e5, 7815}, - {0x57e7, 7821}, - {0x57e9, 7825}, - {0x57ec, 7816}, - {0x57ed, 7804}, - {0x57ee, 7812}, - {0x57f0, 7826}, - {0x57f1, 7824}, - {0x57f2, 7814}, - {0x57f3, 7809}, - {0x57f4, 7802}, - {0x57f5, 8417}, - {0x57f6, 7800}, - {0x57f7, 2626}, - {0x57f8, 7807}, - {0x57f9, 2627}, - {0x57fa, 2623}, - {0x57fb, 7797}, - {0x57fc, 7819}, - {0x57fd, 7805}, - {0x5800, 7803}, - {0x5801, 7822}, - {0x5802, 2624}, - {0x5804, 7828}, - {0x5805, 2618}, - {0x5806, 2620}, - {0x5807, 7811}, - {0x5808, 7806}, - {0x5809, 2175}, - {0x580a, 2619}, - {0x580b, 7808}, - {0x580c, 7823}, - {0x580d, 7827}, - {0x580e, 7818}, - {0x5810, 7820}, - {0x5814, 7798}, - {0x5819, 8412}, - {0x581b, 8421}, - {0x581c, 8420}, - {0x581d, 3102}, - {0x581e, 8413}, - {0x5820, 3103}, - {0x5821, 3101}, - {0x5823, 8415}, - {0x5824, 3098}, - {0x5825, 8419}, - {0x5827, 8414}, - {0x5828, 8416}, - {0x5829, 8410}, - {0x582a, 3096}, - {0x582c, 8429}, - {0x582d, 8428}, - {0x582e, 8425}, - {0x582f, 3095}, - {0x5830, 3099}, - {0x5831, 3100}, - {0x5832, 7262}, - {0x5833, 8422}, - {0x5834, 3097}, - {0x5835, 2625}, - {0x5836, 8424}, - {0x5837, 8411}, - {0x5838, 8427}, - {0x5839, 8426}, - {0x583b, 8430}, - {0x583d, 9119}, - {0x583f, 8423}, - {0x5848, 8418}, - {0x5849, 9111}, - {0x584a, 3567}, - {0x584b, 3570}, - {0x584c, 3565}, - {0x584d, 9110}, - {0x584e, 9114}, - {0x584f, 9109}, - {0x5851, 3559}, - {0x5852, 3569}, - {0x5853, 9106}, - {0x5854, 3563}, - {0x5855, 9113}, - {0x5857, 3561}, - {0x5858, 3560}, - {0x5859, 9116}, - {0x585a, 3562}, - {0x585b, 9118}, - {0x585d, 9115}, - {0x585e, 3558}, - {0x5862, 3568}, - {0x5863, 9120}, - {0x5864, 9108}, - {0x5865, 9117}, - {0x5868, 9107}, - {0x586b, 3564}, - {0x586d, 3566}, - {0x586f, 9112}, - {0x5871, 9121}, - {0x5874, 9791}, - {0x5875, 4002}, - {0x5876, 9797}, - {0x5879, 4007}, - {0x587a, 9793}, - {0x587b, 9800}, - {0x587c, 9785}, - {0x587d, 4009}, - {0x587e, 4003}, - {0x587f, 9790}, - {0x5880, 4385}, - {0x5881, 9789}, - {0x5882, 9798}, - {0x5883, 4004}, - {0x5885, 4008}, - {0x5886, 9788}, - {0x5887, 9794}, - {0x5888, 9799}, - {0x5889, 9784}, - {0x588a, 4006}, - {0x588b, 9792}, - {0x588e, 9796}, - {0x588f, 9802}, - {0x5890, 9786}, - {0x5891, 9795}, - {0x5893, 4005}, - {0x5894, 9801}, - {0x5898, 9787}, - {0x589c, 4389}, - {0x589e, 4387}, - {0x589f, 4386}, - {0x58a6, 4392}, - {0x58a8, 4744}, - {0x58a9, 4391}, - {0x58ae, 4390}, - {0x58b3, 4388}, - {0x58be, 4772}, - {0x58c1, 4771}, - {0x58c5, 4774}, - {0x58c7, 4773}, - {0x58ce, 5058}, - {0x58d1, 5057}, - {0x58d3, 5056}, - {0x58d5, 5055}, - {0x58d8, 5325}, - {0x58d9, 5324}, - {0x58de, 5496}, - {0x58df, 5497}, - {0x58e2, 5498}, - {0x58e4, 5646}, - {0x58e9, 5920}, - {0x58eb, 635}, - {0x58ec, 705}, - {0x58ef, 1135}, - {0x58f4, 6811}, - {0x58f9, 3104}, - {0x58fa, 3105}, - {0x58fc, 9122}, - {0x58fd, 4010}, - {0x58fe, 9803}, - {0x5902, 548}, - {0x5903, 6021}, - {0x5906, 6231}, - {0x590a, 548}, - {0x590c, 6468}, - {0x590d, 6812}, - {0x590e, 7276}, - {0x590f, 2176}, - {0x5914, 5741}, - {0x5915, 636}, - {0x5916, 814}, - {0x5917, 6044}, - {0x5919, 948}, - {0x591a, 949}, - {0x591c, 1409}, - {0x5920, 2628}, - {0x5922, 4012}, - {0x5924, 4013}, - {0x5925, 4011}, - {0x5927, 637}, - {0x5929, 706}, - {0x592a, 708}, - {0x592b, 707}, - {0x592c, 6022}, - {0x592d, 709}, - {0x592e, 815}, - {0x592f, 6045}, - {0x5931, 816}, - {0x5937, 950}, - {0x5938, 951}, - {0x593c, 6100}, - {0x593e, 1136}, - {0x5940, 6232}, - {0x5944, 1413}, - {0x5945, 6469}, - {0x5947, 1411}, - {0x5948, 1412}, - {0x5949, 1410}, - {0x594a, 7277}, - {0x594e, 1778}, - {0x594f, 1777}, - {0x5950, 1779}, - {0x5951, 1776}, - {0x5953, 6813}, - {0x5954, 1414}, - {0x5955, 1775}, - {0x5957, 2177}, - {0x5958, 2178}, - {0x595a, 2179}, - {0x595c, 7829}, - {0x5960, 3106}, - {0x5961, 8431}, - {0x5962, 2629}, - {0x5967, 3571}, - {0x5969, 4015}, - {0x596a, 4014}, - {0x596b, 9804}, - {0x596d, 4393}, - {0x596e, 4775}, - {0x5973, 638}, - {0x5974, 817}, - {0x5976, 818}, - {0x5977, 6106}, - {0x5978, 953}, - {0x5979, 956}, - {0x597b, 6104}, - {0x597c, 6102}, - {0x597d, 955}, - {0x597e, 6105}, - {0x597f, 6107}, - {0x5980, 6101}, - {0x5981, 958}, - {0x5982, 957}, - {0x5983, 954}, - {0x5984, 952}, - {0x5985, 6103}, - {0x598a, 1147}, - {0x598d, 1144}, - {0x598e, 6237}, - {0x598f, 6240}, - {0x5990, 6239}, - {0x5992, 1138}, - {0x5993, 1146}, - {0x5996, 1143}, - {0x5997, 6236}, - {0x5998, 6234}, - {0x5999, 1142}, - {0x599d, 1137}, - {0x599e, 1140}, - {0x59a0, 6235}, - {0x59a1, 6242}, - {0x59a2, 6238}, - {0x59a3, 1141}, - {0x59a4, 1145}, - {0x59a5, 1148}, - {0x59a6, 6233}, - {0x59a7, 6241}, - {0x59a8, 1139}, - {0x59ae, 1419}, - {0x59af, 1427}, - {0x59b1, 6481}, - {0x59b2, 6474}, - {0x59b3, 1428}, - {0x59b4, 6485}, - {0x59b5, 6470}, - {0x59b6, 6477}, - {0x59b9, 1418}, - {0x59ba, 6471}, - {0x59bb, 1416}, - {0x59bc, 6478}, - {0x59bd, 6482}, - {0x59be, 1415}, - {0x59c0, 6483}, - {0x59c1, 6476}, - {0x59c3, 6479}, - {0x59c5, 1430}, - {0x59c6, 1421}, - {0x59c7, 6486}, - {0x59c8, 6484}, - {0x59ca, 1426}, - {0x59cb, 1424}, - {0x59cc, 6475}, - {0x59cd, 1423}, - {0x59ce, 6473}, - {0x59cf, 6472}, - {0x59d0, 1422}, - {0x59d1, 1420}, - {0x59d2, 1429}, - {0x59d3, 1425}, - {0x59d4, 1417}, - {0x59d6, 6480}, - {0x59d8, 1781}, - {0x59da, 1788}, - {0x59db, 6827}, - {0x59dc, 1780}, - {0x59dd, 6819}, - {0x59de, 6815}, - {0x59e0, 6831}, - {0x59e1, 6814}, - {0x59e3, 1783}, - {0x59e4, 6824}, - {0x59e5, 1786}, - {0x59e6, 1789}, - {0x59e8, 1784}, - {0x59e9, 6828}, - {0x59ea, 1787}, - {0x59ec, 2186}, - {0x59ed, 6834}, - {0x59ee, 6816}, - {0x59f1, 6818}, - {0x59f2, 6825}, - {0x59f3, 6829}, - {0x59f4, 6833}, - {0x59f5, 6830}, - {0x59f6, 6823}, - {0x59f7, 6826}, - {0x59fa, 6820}, - {0x59fb, 1791}, - {0x59fc, 6822}, - {0x59fd, 6821}, - {0x59fe, 6832}, - {0x59ff, 1782}, - {0x5a00, 6817}, - {0x5a01, 1790}, - {0x5a03, 1785}, - {0x5a09, 2192}, - {0x5a0a, 7285}, - {0x5a0c, 2191}, - {0x5a0f, 7283}, - {0x5a11, 2180}, - {0x5a13, 2185}, - {0x5a15, 7282}, - {0x5a16, 7279}, - {0x5a17, 7284}, - {0x5a18, 2181}, - {0x5a19, 7278}, - {0x5a1b, 2184}, - {0x5a1c, 2182}, - {0x5a1e, 7286}, - {0x5a1f, 2183}, - {0x5a20, 2187}, - {0x5a23, 2188}, - {0x5a25, 2190}, - {0x5a29, 2189}, - {0x5a2d, 7280}, - {0x5a2e, 7281}, - {0x5a33, 7287}, - {0x5a35, 7836}, - {0x5a36, 2630}, - {0x5a37, 8445}, - {0x5a38, 7835}, - {0x5a39, 7854}, - {0x5a3c, 2636}, - {0x5a3e, 7852}, - {0x5a40, 2635}, - {0x5a41, 2631}, - {0x5a42, 7861}, - {0x5a43, 7845}, - {0x5a44, 7848}, - {0x5a46, 2639}, - {0x5a47, 7858}, - {0x5a48, 7850}, - {0x5a49, 2632}, - {0x5a4a, 2640}, - {0x5a4c, 7855}, - {0x5a4d, 7853}, - {0x5a50, 7838}, - {0x5a51, 7859}, - {0x5a52, 7847}, - {0x5a53, 7842}, - {0x5a55, 7832}, - {0x5a56, 7860}, - {0x5a57, 7844}, - {0x5a58, 7831}, - {0x5a5a, 2638}, - {0x5a5b, 7849}, - {0x5a5c, 7862}, - {0x5a5d, 7846}, - {0x5a5e, 7834}, - {0x5a5f, 7839}, - {0x5a60, 7830}, - {0x5a62, 2637}, - {0x5a64, 7843}, - {0x5a65, 7840}, - {0x5a66, 2633}, - {0x5a67, 7833}, - {0x5a69, 7857}, - {0x5a6a, 2634}, - {0x5a6c, 7841}, - {0x5a6d, 7837}, - {0x5a70, 7856}, - {0x5a77, 3107}, - {0x5a78, 8438}, - {0x5a7a, 8435}, - {0x5a7b, 8452}, - {0x5a7c, 8440}, - {0x5a7d, 8453}, - {0x5a7f, 3109}, - {0x5a83, 8449}, - {0x5a84, 8446}, - {0x5a8a, 8447}, - {0x5a8b, 8450}, - {0x5a8c, 8454}, - {0x5a8e, 7851}, - {0x5a8f, 8456}, - {0x5a90, 9142}, - {0x5a92, 3110}, - {0x5a93, 8457}, - {0x5a94, 8433}, - {0x5a95, 8443}, - {0x5a97, 8448}, - {0x5a9a, 3108}, - {0x5a9b, 3111}, - {0x5a9c, 8455}, - {0x5a9d, 8458}, - {0x5a9e, 8437}, - {0x5a9f, 8434}, - {0x5aa2, 8436}, - {0x5aa5, 8441}, - {0x5aa6, 8439}, - {0x5aa7, 3112}, - {0x5aa9, 8451}, - {0x5aac, 8442}, - {0x5aae, 8444}, - {0x5aaf, 8432}, - {0x5ab0, 9130}, - {0x5ab1, 9128}, - {0x5ab2, 3580}, - {0x5ab3, 3578}, - {0x5ab4, 9138}, - {0x5ab5, 9129}, - {0x5ab6, 9139}, - {0x5ab7, 9135}, - {0x5ab8, 9127}, - {0x5ab9, 9141}, - {0x5aba, 9126}, - {0x5abb, 9133}, - {0x5abc, 3577}, - {0x5abd, 3576}, - {0x5abe, 3575}, - {0x5abf, 9131}, - {0x5ac0, 9136}, - {0x5ac1, 3572}, - {0x5ac2, 3579}, - {0x5ac4, 9124}, - {0x5ac6, 9134}, - {0x5ac7, 9123}, - {0x5ac8, 9132}, - {0x5ac9, 3573}, - {0x5aca, 9137}, - {0x5acb, 9125}, - {0x5acc, 3574}, - {0x5acd, 9140}, - {0x5ad5, 9808}, - {0x5ad6, 4020}, - {0x5ad7, 4019}, - {0x5ad8, 4021}, - {0x5ad9, 9820}, - {0x5ada, 9810}, - {0x5adb, 9816}, - {0x5adc, 9805}, - {0x5add, 9819}, - {0x5ade, 9818}, - {0x5adf, 9822}, - {0x5ae0, 9815}, - {0x5ae1, 4016}, - {0x5ae2, 9814}, - {0x5ae3, 4022}, - {0x5ae5, 9807}, - {0x5ae6, 4017}, - {0x5ae8, 9821}, - {0x5ae9, 4018}, - {0x5aea, 9809}, - {0x5aeb, 9812}, - {0x5aec, 9817}, - {0x5aed, 9811}, - {0x5aee, 9806}, - {0x5af3, 9813}, - {0x5af5, 4397}, - {0x5afb, 4395}, - {0x5b08, 4399}, - {0x5b09, 4394}, - {0x5b0b, 4396}, - {0x5b0c, 4398}, - {0x5b1d, 4776}, - {0x5b24, 5061}, - {0x5b2a, 5060}, - {0x5b30, 5059}, - {0x5b34, 4777}, - {0x5b38, 5326}, - {0x5b3e, 0}, - {0x5b3f, 1}, - {0x5b40, 5647}, - {0x5b43, 5648}, - {0x5b4c, 0}, - {0x5b50, 639}, - {0x5b51, 640}, - {0x5b53, 641}, - {0x5b54, 710}, - {0x5b55, 819}, - {0x5b56, 6108}, - {0x5b57, 959}, - {0x5b58, 960}, - {0x5b5a, 1151}, - {0x5b5b, 1152}, - {0x5b5c, 1150}, - {0x5b5d, 1149}, - {0x5b5f, 1431}, - {0x5b62, 6487}, - {0x5b63, 1433}, - {0x5b64, 1432}, - {0x5b65, 6488}, - {0x5b69, 1792}, - {0x5b6b, 2193}, - {0x5b6c, 7288}, - {0x5b6e, 7864}, - {0x5b70, 2641}, - {0x5b71, 3114}, - {0x5b72, 7863}, - {0x5b73, 3113}, - {0x5b75, 4023}, - {0x5b77, 9823}, - {0x5b78, 4778}, - {0x5b7a, 5062}, - {0x5b7d, 5649}, - {0x5b7f, 5824}, - {0x5b80, 549}, - {0x5b81, 6046}, - {0x5b83, 820}, - {0x5b84, 6047}, - {0x5b85, 963}, - {0x5b87, 961}, - {0x5b88, 962}, - {0x5b89, 964}, - {0x5b8b, 1154}, - {0x5b8c, 1153}, - {0x5b8e, 6243}, - {0x5b8f, 1155}, - {0x5b92, 6244}, - {0x5b93, 6489}, - {0x5b95, 6490}, - {0x5b97, 1434}, - {0x5b98, 1436}, - {0x5b99, 1438}, - {0x5b9a, 1435}, - {0x5b9b, 1439}, - {0x5b9c, 1437}, - {0x5b9f, 0}, - {0x5ba2, 1796}, - {0x5ba3, 1793}, - {0x5ba4, 1795}, - {0x5ba5, 1797}, - {0x5ba6, 1794}, - {0x5ba7, 7289}, - {0x5ba8, 6835}, - {0x5bac, 7291}, - {0x5bad, 7290}, - {0x5bae, 2199}, - {0x5bb0, 2195}, - {0x5bb3, 2196}, - {0x5bb4, 2198}, - {0x5bb5, 2200}, - {0x5bb6, 2197}, - {0x5bb8, 2202}, - {0x5bb9, 2201}, - {0x5bbf, 2646}, - {0x5bc0, 7866}, - {0x5bc1, 7865}, - {0x5bc2, 2645}, - {0x5bc4, 2644}, - {0x5bc5, 2643}, - {0x5bc6, 2647}, - {0x5bc7, 2642}, - {0x5bca, 8464}, - {0x5bcb, 8461}, - {0x5bcc, 3116}, - {0x5bcd, 8460}, - {0x5bce, 8465}, - {0x5bd0, 3118}, - {0x5bd1, 8463}, - {0x5bd2, 3115}, - {0x5bd3, 3117}, - {0x5bd4, 8462}, - {0x5bd6, 9143}, - {0x5bd8, 9144}, - {0x5bd9, 9145}, - {0x5bde, 4024}, - {0x5bdf, 4032}, - {0x5be0, 9824}, - {0x5be1, 4026}, - {0x5be2, 4030}, - {0x5be3, 9825}, - {0x5be4, 4031}, - {0x5be5, 4027}, - {0x5be6, 4028}, - {0x5be7, 4025}, - {0x5be8, 4029}, - {0x5be9, 4402}, - {0x5bea, 8459}, - {0x5beb, 4403}, - {0x5bec, 4401}, - {0x5bee, 4400}, - {0x5bf0, 4779}, - {0x5bf2, 0}, - {0x5bf5, 5499}, - {0x5bf6, 5650}, - {0x5bf8, 642}, - {0x5bfa, 965}, - {0x5c01, 1798}, - {0x5c03, 7292}, - {0x5c04, 2203}, - {0x5c07, 2650}, - {0x5c08, 2649}, - {0x5c09, 2648}, - {0x5c0a, 3119}, - {0x5c0b, 3120}, - {0x5c0c, 8466}, - {0x5c0d, 4033}, - {0x5c0e, 4780}, - {0x5c0f, 643}, - {0x5c10, 6023}, - {0x5c11, 711}, - {0x5c12, 6048}, - {0x5c15, 6109}, - {0x5c16, 966}, - {0x5c1a, 1440}, - {0x5c1f, 9146}, - {0x5c22, 644}, - {0x5c24, 712}, - {0x5c25, 6110}, - {0x5c28, 6245}, - {0x5c2a, 6246}, - {0x5c2c, 1156}, - {0x5c30, 8467}, - {0x5c31, 3121}, - {0x5c33, 9147}, - {0x5c37, 5063}, - {0x5c38, 645}, - {0x5c39, 665}, - {0x5c3a, 713}, - {0x5c3b, 6049}, - {0x5c3c, 821}, - {0x5c3e, 1160}, - {0x5c3f, 1159}, - {0x5c40, 1157}, - {0x5c41, 1158}, - {0x5c44, 6491}, - {0x5c45, 1442}, - {0x5c46, 1443}, - {0x5c47, 6492}, - {0x5c48, 1441}, - {0x5c4b, 1802}, - {0x5c4c, 6836}, - {0x5c4d, 1801}, - {0x5c4e, 1799}, - {0x5c4f, 1800}, - {0x5c50, 2206}, - {0x5c51, 2204}, - {0x5c54, 7294}, - {0x5c55, 2205}, - {0x5c56, 7293}, - {0x5c58, 2194}, - {0x5c59, 7867}, - {0x5c5c, 2652}, - {0x5c5d, 2653}, - {0x5c60, 2651}, - {0x5c62, 4034}, - {0x5c63, 9826}, - {0x5c64, 4404}, - {0x5c65, 4405}, - {0x5c68, 5064}, - {0x5c6a, 0}, - {0x5c6c, 5742}, - {0x5c6e, 6006}, - {0x5c6f, 714}, - {0x5c71, 646}, - {0x5c73, 6051}, - {0x5c74, 6050}, - {0x5c79, 967}, - {0x5c7a, 6112}, - {0x5c7b, 6113}, - {0x5c7c, 6111}, - {0x5c7e, 6114}, - {0x5c86, 6254}, - {0x5c88, 6249}, - {0x5c89, 6251}, - {0x5c8a, 6253}, - {0x5c8b, 6250}, - {0x5c8c, 1164}, - {0x5c8d, 6247}, - {0x5c8f, 6248}, - {0x5c90, 1161}, - {0x5c91, 1162}, - {0x5c92, 6252}, - {0x5c93, 6255}, - {0x5c94, 1163}, - {0x5c95, 6256}, - {0x5c9d, 6506}, - {0x5c9f, 6500}, - {0x5ca0, 6495}, - {0x5ca1, 1445}, - {0x5ca2, 6503}, - {0x5ca3, 6501}, - {0x5ca4, 6494}, - {0x5ca5, 6507}, - {0x5ca6, 6510}, - {0x5ca7, 6505}, - {0x5ca8, 6498}, - {0x5ca9, 1447}, - {0x5caa, 6504}, - {0x5cab, 1448}, - {0x5cac, 6499}, - {0x5cad, 6502}, - {0x5cae, 6493}, - {0x5caf, 6497}, - {0x5cb0, 6509}, - {0x5cb1, 1449}, - {0x5cb3, 1450}, - {0x5cb5, 6496}, - {0x5cb6, 6508}, - {0x5cb7, 1444}, - {0x5cb8, 1446}, - {0x5cc6, 6853}, - {0x5cc7, 6846}, - {0x5cc8, 6852}, - {0x5cc9, 6845}, - {0x5cca, 6847}, - {0x5ccb, 6841}, - {0x5ccc, 6839}, - {0x5cce, 6854}, - {0x5ccf, 6851}, - {0x5cd0, 6837}, - {0x5cd2, 1804}, - {0x5cd3, 6849}, - {0x5cd4, 6850}, - {0x5cd6, 6848}, - {0x5cd7, 6840}, - {0x5cd8, 6838}, - {0x5cd9, 1803}, - {0x5cda, 6844}, - {0x5cdb, 6842}, - {0x5cde, 6843}, - {0x5cdf, 6855}, - {0x5ce8, 2211}, - {0x5cea, 2210}, - {0x5cec, 7295}, - {0x5ced, 2207}, - {0x5cee, 7297}, - {0x5cf0, 2212}, - {0x5cf1, 7298}, - {0x5cf4, 2215}, - {0x5cf6, 2213}, - {0x5cf7, 7299}, - {0x5cf8, 6856}, - {0x5cf9, 7301}, - {0x5cfb, 2209}, - {0x5cfd, 2208}, - {0x5cff, 7296}, - {0x5d00, 7300}, - {0x5d01, 2214}, - {0x5d06, 2655}, - {0x5d07, 2654}, - {0x5d0b, 7869}, - {0x5d0c, 7873}, - {0x5d0d, 7875}, - {0x5d0e, 2656}, - {0x5d0f, 7878}, - {0x5d11, 2660}, - {0x5d12, 7880}, - {0x5d14, 2662}, - {0x5d16, 2658}, - {0x5d17, 2666}, - {0x5d19, 2663}, - {0x5d1a, 7871}, - {0x5d1b, 2657}, - {0x5d1d, 7870}, - {0x5d1e, 7868}, - {0x5d1f, 7882}, - {0x5d20, 7872}, - {0x5d22, 2659}, - {0x5d23, 7881}, - {0x5d24, 2664}, - {0x5d25, 7877}, - {0x5d26, 7876}, - {0x5d27, 2665}, - {0x5d28, 7874}, - {0x5d29, 2661}, - {0x5d2e, 7883}, - {0x5d30, 7879}, - {0x5d31, 8482}, - {0x5d32, 8489}, - {0x5d33, 8478}, - {0x5d34, 3124}, - {0x5d35, 8474}, - {0x5d36, 8490}, - {0x5d37, 8468}, - {0x5d38, 8487}, - {0x5d39, 8485}, - {0x5d3a, 8479}, - {0x5d3c, 8488}, - {0x5d3d, 8481}, - {0x5d3f, 8473}, - {0x5d40, 8491}, - {0x5d41, 8471}, - {0x5d42, 8484}, - {0x5d43, 8469}, - {0x5d45, 8492}, - {0x5d47, 3125}, - {0x5d49, 8486}, - {0x5d4a, 9150}, - {0x5d4b, 8472}, - {0x5d4c, 3122}, - {0x5d4e, 8476}, - {0x5d50, 3123}, - {0x5d51, 8475}, - {0x5d52, 8480}, - {0x5d55, 8477}, - {0x5d59, 8483}, - {0x5d5e, 9154}, - {0x5d62, 9157}, - {0x5d63, 9149}, - {0x5d65, 9151}, - {0x5d67, 9156}, - {0x5d68, 9155}, - {0x5d69, 3581}, - {0x5d6b, 8470}, - {0x5d6c, 9153}, - {0x5d6f, 3582}, - {0x5d71, 9148}, - {0x5d72, 9152}, - {0x5d77, 9833}, - {0x5d79, 9840}, - {0x5d7a, 9831}, - {0x5d7c, 9838}, - {0x5d7d, 9829}, - {0x5d7e, 9837}, - {0x5d7f, 9841}, - {0x5d80, 9828}, - {0x5d81, 9832}, - {0x5d82, 9827}, - {0x5d84, 4035}, - {0x5d86, 9830}, - {0x5d87, 4036}, - {0x5d88, 9836}, - {0x5d89, 9835}, - {0x5d8a, 9834}, - {0x5d8d, 9839}, - {0x5d94, 4407}, - {0x5d9d, 4406}, - {0x5db8, 5068}, - {0x5dba, 5066}, - {0x5dbc, 5065}, - {0x5dbd, 5067}, - {0x5dc7, 0}, - {0x5dc9, 5651}, - {0x5dcd, 5743}, - {0x5dd2, 5826}, - {0x5dd4, 5825}, - {0x5dd6, 5879}, - {0x5ddb, 550}, - {0x5ddd, 647}, - {0x5dde, 968}, - {0x5ddf, 6115}, - {0x5de0, 6257}, - {0x5de1, 1306}, - {0x5de2, 2667}, - {0x5de5, 648}, - {0x5de6, 824}, - {0x5de7, 823}, - {0x5de8, 822}, - {0x5deb, 1165}, - {0x5dee, 2216}, - {0x5df0, 9158}, - {0x5df1, 649}, - {0x5df2, 650}, - {0x5df3, 651}, - {0x5df4, 715}, - {0x5df7, 1805}, - {0x5df9, 6857}, - {0x5dfd, 3126}, - {0x5dfe, 652}, - {0x5dff, 6024}, - {0x5e02, 825}, - {0x5e03, 826}, - {0x5e04, 6052}, - {0x5e06, 969}, - {0x5e0a, 6258}, - {0x5e0c, 1166}, - {0x5e0e, 6259}, - {0x5e11, 1456}, - {0x5e14, 6512}, - {0x5e15, 1454}, - {0x5e16, 1453}, - {0x5e17, 6511}, - {0x5e18, 1451}, - {0x5e19, 6513}, - {0x5e1a, 1452}, - {0x5e1b, 1455}, - {0x5e1d, 1806}, - {0x5e1f, 1808}, - {0x5e20, 6861}, - {0x5e21, 6858}, - {0x5e22, 6859}, - {0x5e23, 6860}, - {0x5e24, 6862}, - {0x5e25, 1807}, - {0x5e28, 7303}, - {0x5e29, 7302}, - {0x5e2b, 2218}, - {0x5e2d, 2217}, - {0x5e33, 2670}, - {0x5e34, 7885}, - {0x5e36, 2669}, - {0x5e37, 2671}, - {0x5e38, 2668}, - {0x5e3d, 3128}, - {0x5e3e, 7884}, - {0x5e40, 3129}, - {0x5e41, 8494}, - {0x5e43, 3130}, - {0x5e44, 8493}, - {0x5e45, 3127}, - {0x5e4a, 9161}, - {0x5e4b, 9163}, - {0x5e4c, 3583}, - {0x5e4d, 9162}, - {0x5e4e, 9160}, - {0x5e4f, 9159}, - {0x5e53, 9844}, - {0x5e54, 4041}, - {0x5e55, 4039}, - {0x5e57, 4040}, - {0x5e58, 9842}, - {0x5e59, 9843}, - {0x5e5b, 4037}, - {0x5e5f, 4409}, - {0x5e61, 4410}, - {0x5e62, 4408}, - {0x5e63, 4038}, - {0x5e68, 0}, - {0x5e6b, 5069}, - {0x5e6e, 0}, - {0x5e72, 653}, - {0x5e73, 827}, - {0x5e74, 971}, - {0x5e75, 6116}, - {0x5e76, 970}, - {0x5e78, 1457}, - {0x5e79, 3584}, - {0x5e7a, 551}, - {0x5e7b, 716}, - {0x5e7c, 828}, - {0x5e7d, 1809}, - {0x5e7e, 3131}, - {0x5e7f, 552}, - {0x5e80, 6053}, - {0x5e82, 6054}, - {0x5e84, 6117}, - {0x5e87, 1168}, - {0x5e88, 6263}, - {0x5e89, 6261}, - {0x5e8a, 1169}, - {0x5e8b, 6260}, - {0x5e8c, 6262}, - {0x5e8d, 6264}, - {0x5e8f, 1167}, - {0x5e95, 1461}, - {0x5e96, 1462}, - {0x5e97, 1459}, - {0x5e9a, 1458}, - {0x5e9b, 6866}, - {0x5e9c, 1460}, - {0x5ea0, 1810}, - {0x5ea2, 6865}, - {0x5ea3, 6867}, - {0x5ea4, 6864}, - {0x5ea5, 6868}, - {0x5ea6, 1811}, - {0x5ea7, 2221}, - {0x5ea8, 7304}, - {0x5eaa, 7306}, - {0x5eab, 2219}, - {0x5eac, 7307}, - {0x5ead, 2220}, - {0x5eae, 7305}, - {0x5eb0, 6863}, - {0x5eb1, 7886}, - {0x5eb2, 7889}, - {0x5eb3, 7890}, - {0x5eb4, 7887}, - {0x5eb5, 2675}, - {0x5eb6, 2674}, - {0x5eb7, 2672}, - {0x5eb8, 2673}, - {0x5eb9, 7888}, - {0x5ebe, 2676}, - {0x5ec1, 3133}, - {0x5ec2, 3134}, - {0x5ec4, 3135}, - {0x5ec5, 9164}, - {0x5ec6, 9166}, - {0x5ec7, 9168}, - {0x5ec8, 3586}, - {0x5ec9, 3585}, - {0x5eca, 3132}, - {0x5ecb, 9167}, - {0x5ecc, 9165}, - {0x5ece, 9848}, - {0x5ed1, 9846}, - {0x5ed2, 9852}, - {0x5ed3, 4042}, - {0x5ed4, 9853}, - {0x5ed5, 9850}, - {0x5ed6, 4043}, - {0x5ed7, 9847}, - {0x5ed8, 9845}, - {0x5ed9, 9851}, - {0x5eda, 4412}, - {0x5edc, 9849}, - {0x5edd, 4414}, - {0x5edf, 4413}, - {0x5ee0, 4416}, - {0x5ee2, 4411}, - {0x5ee3, 4415}, - {0x5eec, 5501}, - {0x5eef, 0}, - {0x5ef3, 5954}, - {0x5ef4, 553}, - {0x5ef6, 1463}, - {0x5ef7, 1170}, - {0x5efa, 1812}, - {0x5efe, 654}, - {0x5eff, 717}, - {0x5f01, 829}, - {0x5f02, 6118}, - {0x5f04, 1171}, - {0x5f05, 6265}, - {0x5f07, 6869}, - {0x5f08, 1813}, - {0x5f0a, 4044}, - {0x5f0b, 655}, - {0x5f0f, 972}, - {0x5f12, 3587}, - {0x5f13, 656}, - {0x5f14, 718}, - {0x5f15, 719}, - {0x5f17, 831}, - {0x5f18, 830}, - {0x5f1a, 6119}, - {0x5f1b, 973}, - {0x5f1d, 6266}, - {0x5f1f, 1172}, - {0x5f22, 6515}, - {0x5f23, 6516}, - {0x5f24, 6517}, - {0x5f26, 1464}, - {0x5f27, 1465}, - {0x5f28, 6514}, - {0x5f29, 1466}, - {0x5f2d, 1814}, - {0x5f2e, 6870}, - {0x5f30, 7309}, - {0x5f31, 2222}, - {0x5f33, 7308}, - {0x5f35, 2677}, - {0x5f36, 7891}, - {0x5f37, 2678}, - {0x5f38, 7892}, - {0x5f3c, 3136}, - {0x5f40, 9169}, - {0x5f43, 9855}, - {0x5f44, 9854}, - {0x5f46, 4045}, - {0x5f48, 4417}, - {0x5f4a, 4781}, - {0x5f4c, 5070}, - {0x5f4e, 5827}, - {0x5f50, 554}, - {0x5f54, 6518}, - {0x5f56, 6871}, - {0x5f57, 2679}, - {0x5f58, 8495}, - {0x5f59, 3588}, - {0x5f5d, 5327}, - {0x5f61, 555}, - {0x5f62, 1174}, - {0x5f64, 1173}, - {0x5f65, 1815}, - {0x5f67, 7310}, - {0x5f69, 2681}, - {0x5f6a, 2953}, - {0x5f6b, 2682}, - {0x5f6c, 2680}, - {0x5f6d, 3137}, - {0x5f6f, 9856}, - {0x5f70, 4046}, - {0x5f71, 4418}, - {0x5f73, 6007}, - {0x5f74, 6120}, - {0x5f76, 6268}, - {0x5f77, 1175}, - {0x5f78, 6267}, - {0x5f79, 1176}, - {0x5f7c, 1470}, - {0x5f7d, 6521}, - {0x5f7e, 6520}, - {0x5f7f, 1469}, - {0x5f80, 1467}, - {0x5f81, 1468}, - {0x5f82, 6519}, - {0x5f85, 1817}, - {0x5f86, 6872}, - {0x5f87, 1820}, - {0x5f88, 1816}, - {0x5f89, 1822}, - {0x5f8a, 1818}, - {0x5f8b, 1819}, - {0x5f8c, 1821}, - {0x5f90, 2225}, - {0x5f91, 2224}, - {0x5f92, 2223}, - {0x5f96, 7894}, - {0x5f97, 2683}, - {0x5f98, 2686}, - {0x5f99, 2684}, - {0x5f9b, 7893}, - {0x5f9c, 2689}, - {0x5f9e, 2685}, - {0x5f9f, 7895}, - {0x5fa0, 2688}, - {0x5fa1, 2687}, - {0x5fa5, 8497}, - {0x5fa6, 8496}, - {0x5fa8, 3140}, - {0x5fa9, 3138}, - {0x5faa, 3139}, - {0x5fab, 8498}, - {0x5fac, 3589}, - {0x5fad, 9171}, - {0x5fae, 3590}, - {0x5faf, 9170}, - {0x5fb5, 4420}, - {0x5fb6, 9857}, - {0x5fb7, 4419}, - {0x5fb9, 4047}, - {0x5fbd, 5071}, - {0x5fc1, 0}, - {0x5fc3, 720}, - {0x5fc5, 832}, - {0x5fc9, 6055}, - {0x5fcc, 1178}, - {0x5fcd, 1180}, - {0x5fcf, 6123}, - {0x5fd0, 6271}, - {0x5fd1, 6270}, - {0x5fd2, 6269}, - {0x5fd4, 6122}, - {0x5fd5, 6121}, - {0x5fd6, 975}, - {0x5fd7, 1179}, - {0x5fd8, 1177}, - {0x5fd9, 974}, - {0x5fdd, 1471}, - {0x5fde, 6522}, - {0x5fe0, 1472}, - {0x5fe1, 6276}, - {0x5fe3, 6278}, - {0x5fe4, 6277}, - {0x5fe5, 6523}, - {0x5fe8, 6273}, - {0x5fea, 1184}, - {0x5feb, 1182}, - {0x5fed, 6272}, - {0x5fee, 6274}, - {0x5fef, 6280}, - {0x5ff1, 1181}, - {0x5ff3, 6275}, - {0x5ff4, 6284}, - {0x5ff5, 1474}, - {0x5ff7, 6281}, - {0x5ff8, 1183}, - {0x5ffa, 6279}, - {0x5ffb, 6282}, - {0x5ffd, 1473}, - {0x5fff, 1475}, - {0x6000, 6283}, - {0x6009, 6543}, - {0x600a, 6530}, - {0x600b, 6528}, - {0x600c, 6542}, - {0x600d, 6537}, - {0x600e, 1827}, - {0x600f, 1476}, - {0x6010, 6538}, - {0x6011, 6541}, - {0x6012, 1823}, - {0x6013, 6540}, - {0x6014, 1477}, - {0x6015, 1482}, - {0x6016, 1480}, - {0x6017, 6531}, - {0x6019, 6526}, - {0x601a, 6533}, - {0x601b, 1487}, - {0x601c, 6544}, - {0x601d, 1824}, - {0x601e, 6534}, - {0x6020, 1825}, - {0x6021, 1483}, - {0x6022, 6536}, - {0x6024, 6887}, - {0x6025, 1826}, - {0x6026, 6525}, - {0x6027, 1484}, - {0x6028, 1828}, - {0x6029, 1485}, - {0x602a, 1481}, - {0x602b, 1486}, - {0x602c, 6535}, - {0x602d, 6524}, - {0x602e, 6539}, - {0x602f, 1478}, - {0x6032, 6527}, - {0x6033, 6532}, - {0x6034, 6529}, - {0x6035, 1479}, - {0x6037, 6873}, - {0x6039, 6874}, - {0x6040, 6884}, - {0x6041, 7314}, - {0x6042, 6885}, - {0x6043, 1834}, - {0x6044, 6888}, - {0x6045, 6878}, - {0x6046, 1833}, - {0x6047, 6880}, - {0x6049, 6881}, - {0x604c, 6883}, - {0x604d, 1829}, - {0x6050, 2229}, - {0x6053, 6879}, - {0x6054, 6875}, - {0x6055, 2230}, - {0x6058, 6889}, - {0x6059, 2226}, - {0x605a, 7312}, - {0x605b, 6882}, - {0x605d, 7311}, - {0x605e, 6877}, - {0x605f, 6886}, - {0x6062, 1832}, - {0x6063, 2227}, - {0x6064, 1838}, - {0x6065, 2228}, - {0x6066, 6890}, - {0x6067, 7313}, - {0x6068, 1831}, - {0x6069, 2232}, - {0x606a, 1837}, - {0x606b, 1836}, - {0x606c, 1835}, - {0x606d, 2231}, - {0x606e, 6891}, - {0x606f, 2233}, - {0x6070, 1830}, - {0x6072, 6876}, - {0x607f, 2690}, - {0x6080, 7317}, - {0x6081, 7319}, - {0x6083, 7321}, - {0x6084, 2234}, - {0x6085, 2240}, - {0x6086, 7898}, - {0x6087, 7325}, - {0x6088, 7316}, - {0x6089, 2692}, - {0x608a, 7896}, - {0x608c, 2239}, - {0x608d, 2237}, - {0x608e, 7327}, - {0x6090, 7897}, - {0x6092, 7318}, - {0x6094, 2238}, - {0x6095, 7322}, - {0x6096, 2241}, - {0x6097, 7324}, - {0x609a, 2236}, - {0x609b, 7323}, - {0x609c, 7326}, - {0x609d, 7320}, - {0x609f, 2235}, - {0x60a0, 2693}, - {0x60a2, 7315}, - {0x60a3, 2691}, - {0x60a8, 2694}, - {0x60b0, 7900}, - {0x60b1, 7909}, - {0x60b2, 3143}, - {0x60b4, 2696}, - {0x60b5, 2701}, - {0x60b6, 3144}, - {0x60b7, 7911}, - {0x60b8, 2708}, - {0x60b9, 8500}, - {0x60ba, 7901}, - {0x60bb, 2700}, - {0x60bc, 2703}, - {0x60bd, 2698}, - {0x60be, 7899}, - {0x60bf, 7913}, - {0x60c0, 7916}, - {0x60c1, 8515}, - {0x60c3, 7914}, - {0x60c4, 8504}, - {0x60c5, 2699}, - {0x60c6, 2706}, - {0x60c7, 2710}, - {0x60c8, 7908}, - {0x60c9, 8499}, - {0x60ca, 7912}, - {0x60cb, 2695}, - {0x60cc, 8501}, - {0x60cd, 7915}, - {0x60ce, 8503}, - {0x60cf, 7904}, - {0x60d1, 3141}, - {0x60d3, 7902}, - {0x60d4, 7903}, - {0x60d5, 2705}, - {0x60d8, 2704}, - {0x60d9, 7906}, - {0x60da, 2709}, - {0x60db, 7910}, - {0x60dc, 2702}, - {0x60dd, 7907}, - {0x60df, 2707}, - {0x60e0, 3145}, - {0x60e1, 3142}, - {0x60e2, 8502}, - {0x60e4, 7905}, - {0x60e6, 2697}, - {0x60f0, 3150}, - {0x60f1, 3154}, - {0x60f2, 8506}, - {0x60f3, 3595}, - {0x60f4, 3152}, - {0x60f5, 8510}, - {0x60f6, 3156}, - {0x60f7, 9172}, - {0x60f8, 8512}, - {0x60f9, 3597}, - {0x60fa, 3148}, - {0x60fb, 3151}, - {0x60fc, 8513}, - {0x60fe, 8514}, - {0x60ff, 8520}, - {0x6100, 3158}, - {0x6101, 3598}, - {0x6103, 8516}, - {0x6104, 8521}, - {0x6105, 8509}, - {0x6106, 3608}, - {0x6108, 3599}, - {0x6109, 3157}, - {0x610a, 8507}, - {0x610b, 8522}, - {0x610d, 3607}, - {0x610e, 3155}, - {0x610f, 3592}, - {0x6110, 8519}, - {0x6112, 3159}, - {0x6113, 8511}, - {0x6114, 8505}, - {0x6115, 3149}, - {0x6116, 8508}, - {0x6118, 8517}, - {0x611a, 3591}, - {0x611b, 3596}, - {0x611c, 3146}, - {0x611d, 8518}, - {0x611f, 3594}, - {0x6123, 3147}, - {0x6127, 3606}, - {0x6128, 9859}, - {0x6129, 9183}, - {0x612b, 9175}, - {0x612c, 9858}, - {0x612e, 9179}, - {0x612f, 9181}, - {0x6132, 9178}, - {0x6134, 3605}, - {0x6136, 9177}, - {0x6137, 3609}, - {0x613b, 9874}, - {0x613e, 3604}, - {0x613f, 4049}, - {0x6140, 9184}, - {0x6141, 9860}, - {0x6144, 3602}, - {0x6145, 9176}, - {0x6146, 9180}, - {0x6147, 4048}, - {0x6148, 3593}, - {0x6149, 9173}, - {0x614a, 9174}, - {0x614b, 4050}, - {0x614c, 3601}, - {0x614d, 3603}, - {0x614e, 3600}, - {0x614f, 9182}, - {0x6152, 9864}, - {0x6153, 9865}, - {0x6154, 9870}, - {0x6155, 4425}, - {0x6156, 9877}, - {0x6158, 4056}, - {0x615a, 4055}, - {0x615b, 9872}, - {0x615d, 4424}, - {0x615e, 9861}, - {0x615f, 4054}, - {0x6161, 9876}, - {0x6162, 4052}, - {0x6163, 4053}, - {0x6165, 9873}, - {0x6167, 4422}, - {0x6168, 3153}, - {0x616a, 9875}, - {0x616b, 4429}, - {0x616c, 9867}, - {0x616e, 4423}, - {0x6170, 4428}, - {0x6171, 9862}, - {0x6172, 9866}, - {0x6173, 9863}, - {0x6174, 9869}, - {0x6175, 4057}, - {0x6176, 4421}, - {0x6177, 4051}, - {0x617a, 9871}, - {0x617c, 4427}, - {0x617e, 4430}, - {0x6180, 9868}, - {0x6182, 4426}, - {0x618a, 4785}, - {0x618e, 4434}, - {0x6190, 4432}, - {0x6191, 4783}, - {0x6194, 4438}, - {0x619a, 4436}, - {0x61a4, 4437}, - {0x61a7, 4431}, - {0x61a9, 4784}, - {0x61ab, 4433}, - {0x61ac, 4435}, - {0x61ae, 4439}, - {0x61b2, 4782}, - {0x61b6, 4787}, - {0x61be, 4788}, - {0x61c2, 5073}, - {0x61c7, 5074}, - {0x61c8, 4790}, - {0x61c9, 5072}, - {0x61ca, 4789}, - {0x61cb, 5076}, - {0x61cd, 4786}, - {0x61e3, 5328}, - {0x61e6, 5075}, - {0x61ee, 0}, - {0x61f2, 5502}, - {0x61f5, 5505}, - {0x61f6, 5504}, - {0x61f7, 5503}, - {0x61f8, 5652}, - {0x61fa, 5653}, - {0x61fc, 5744}, - {0x61fe, 5745}, - {0x61ff, 5828}, - {0x6200, 5880}, - {0x6204, 0}, - {0x6208, 721}, - {0x6209, 6056}, - {0x620a, 833}, - {0x620c, 977}, - {0x620d, 978}, - {0x620e, 976}, - {0x6210, 979}, - {0x6211, 1186}, - {0x6212, 1185}, - {0x6214, 6545}, - {0x6215, 1489}, - {0x6216, 1488}, - {0x6219, 7328}, - {0x621a, 2711}, - {0x621b, 2712}, - {0x621f, 3160}, - {0x6220, 9185}, - {0x6221, 3610}, - {0x6222, 3611}, - {0x6223, 9187}, - {0x6224, 9189}, - {0x6225, 9188}, - {0x6227, 9879}, - {0x6229, 9878}, - {0x622a, 4058}, - {0x622b, 9880}, - {0x622e, 4440}, - {0x6230, 4791}, - {0x6232, 5077}, - {0x6233, 5329}, - {0x6234, 5078}, - {0x6236, 722}, - {0x623a, 6285}, - {0x623d, 6546}, - {0x623e, 1491}, - {0x623f, 1490}, - {0x6240, 1492}, - {0x6241, 1839}, - {0x6242, 6892}, - {0x6243, 6893}, - {0x6246, 7329}, - {0x6247, 2242}, - {0x6248, 2713}, - {0x6249, 3161}, - {0x624a, 8523}, - {0x624b, 723}, - {0x624d, 657}, - {0x624e, 724}, - {0x6250, 6057}, - {0x6251, 837}, - {0x6252, 836}, - {0x6253, 834}, - {0x6254, 835}, - {0x6258, 982}, - {0x6259, 6130}, - {0x625a, 6132}, - {0x625b, 981}, - {0x625c, 6124}, - {0x625e, 6125}, - {0x6260, 6131}, - {0x6261, 6127}, - {0x6262, 6129}, - {0x6263, 980}, - {0x6264, 6126}, - {0x6265, 6133}, - {0x6266, 6128}, - {0x626d, 1193}, - {0x626e, 1202}, - {0x626f, 1200}, - {0x6270, 6295}, - {0x6271, 6292}, - {0x6272, 6300}, - {0x6273, 1198}, - {0x6274, 6301}, - {0x6276, 1191}, - {0x6277, 6298}, - {0x6279, 1197}, - {0x627a, 6294}, - {0x627b, 6293}, - {0x627c, 1195}, - {0x627d, 6299}, - {0x627e, 1196}, - {0x627f, 1493}, - {0x6280, 1190}, - {0x6281, 6296}, - {0x6283, 6286}, - {0x6284, 1187}, - {0x6286, 1206}, - {0x6287, 6291}, - {0x6288, 6297}, - {0x6289, 1192}, - {0x628a, 1194}, - {0x628c, 6287}, - {0x628e, 6288}, - {0x628f, 6289}, - {0x6291, 1205}, - {0x6292, 1199}, - {0x6293, 1204}, - {0x6294, 6290}, - {0x6295, 1203}, - {0x6296, 1189}, - {0x6297, 1188}, - {0x6298, 1201}, - {0x62a8, 1507}, - {0x62a9, 6558}, - {0x62aa, 6551}, - {0x62ab, 1502}, - {0x62ac, 1521}, - {0x62ad, 6547}, - {0x62ae, 6554}, - {0x62af, 6556}, - {0x62b0, 6559}, - {0x62b1, 1516}, - {0x62b3, 6555}, - {0x62b4, 6548}, - {0x62b5, 1514}, - {0x62b6, 6552}, - {0x62b8, 6560}, - {0x62b9, 1499}, - {0x62bb, 6557}, - {0x62bc, 1509}, - {0x62bd, 1508}, - {0x62be, 6550}, - {0x62bf, 1497}, - {0x62c2, 1498}, - {0x62c4, 1496}, - {0x62c6, 1520}, - {0x62c7, 1512}, - {0x62c8, 1506}, - {0x62c9, 1494}, - {0x62ca, 6553}, - {0x62cb, 1505}, - {0x62cc, 1495}, - {0x62cd, 1513}, - {0x62ce, 1522}, - {0x62cf, 6894}, - {0x62d0, 1510}, - {0x62d1, 6549}, - {0x62d2, 1500}, - {0x62d3, 1503}, - {0x62d4, 1504}, - {0x62d6, 1518}, - {0x62d7, 1519}, - {0x62d8, 1517}, - {0x62d9, 1511}, - {0x62da, 1515}, - {0x62db, 1501}, - {0x62dc, 1840}, - {0x62eb, 6900}, - {0x62ec, 1852}, - {0x62ed, 1844}, - {0x62ee, 1846}, - {0x62ef, 1851}, - {0x62f0, 6912}, - {0x62f1, 1849}, - {0x62f2, 7330}, - {0x62f3, 2243}, - {0x62f4, 1854}, - {0x62f5, 6897}, - {0x62f6, 6905}, - {0x62f7, 1850}, - {0x62f8, 6904}, - {0x62f9, 6901}, - {0x62fa, 6909}, - {0x62fb, 6911}, - {0x62fc, 1843}, - {0x62fd, 1847}, - {0x62fe, 1853}, - {0x62ff, 2245}, - {0x6300, 6906}, - {0x6301, 1845}, - {0x6302, 1856}, - {0x6303, 6899}, - {0x6307, 1848}, - {0x6308, 2244}, - {0x6309, 1842}, - {0x630b, 6896}, - {0x630c, 6903}, - {0x630d, 6895}, - {0x630e, 6898}, - {0x630f, 6902}, - {0x6310, 7331}, - {0x6311, 1855}, - {0x6313, 6907}, - {0x6314, 6908}, - {0x6315, 6910}, - {0x6316, 1841}, - {0x6328, 2259}, - {0x6329, 7343}, - {0x632a, 2257}, - {0x632b, 2258}, - {0x632c, 7333}, - {0x632d, 7349}, - {0x632f, 2248}, - {0x6332, 7917}, - {0x6333, 7351}, - {0x6334, 7345}, - {0x6336, 7336}, - {0x6338, 7354}, - {0x6339, 7339}, - {0x633a, 2254}, - {0x633b, 7940}, - {0x633c, 7342}, - {0x633d, 2256}, - {0x633e, 2247}, - {0x6340, 7356}, - {0x6341, 7344}, - {0x6342, 2250}, - {0x6343, 7337}, - {0x6344, 7334}, - {0x6345, 7335}, - {0x6346, 2251}, - {0x6347, 7350}, - {0x6348, 7357}, - {0x6349, 2253}, - {0x634a, 7341}, - {0x634b, 7340}, - {0x634c, 2261}, - {0x634d, 2260}, - {0x634e, 2246}, - {0x634f, 2252}, - {0x6350, 2255}, - {0x6351, 7353}, - {0x6354, 7347}, - {0x6355, 2249}, - {0x6356, 7332}, - {0x6357, 7355}, - {0x6358, 7346}, - {0x6359, 7348}, - {0x635a, 7352}, - {0x6365, 7918}, - {0x6367, 2721}, - {0x6368, 2741}, - {0x6369, 2740}, - {0x636b, 2729}, - {0x636d, 7936}, - {0x636e, 7932}, - {0x636f, 7929}, - {0x6370, 7947}, - {0x6371, 2724}, - {0x6372, 2716}, - {0x6375, 7934}, - {0x6376, 3177}, - {0x6377, 2720}, - {0x6378, 7942}, - {0x637a, 2742}, - {0x637b, 2739}, - {0x637c, 7938}, - {0x637d, 7921}, - {0x6380, 2738}, - {0x6381, 7944}, - {0x6382, 7920}, - {0x6383, 2727}, - {0x6384, 2731}, - {0x6385, 7943}, - {0x6387, 7930}, - {0x6388, 2732}, - {0x6389, 2726}, - {0x638a, 7919}, - {0x638c, 3163}, - {0x638d, 7946}, - {0x638e, 7928}, - {0x638f, 2737}, - {0x6390, 7931}, - {0x6391, 7945}, - {0x6392, 2736}, - {0x6394, 8524}, - {0x6396, 2717}, - {0x6397, 7926}, - {0x6398, 2722}, - {0x6399, 2733}, - {0x639b, 2728}, - {0x639c, 7935}, - {0x639d, 7925}, - {0x639e, 7923}, - {0x639f, 7941}, - {0x63a0, 2714}, - {0x63a1, 2734}, - {0x63a2, 2718}, - {0x63a3, 3162}, - {0x63a4, 7939}, - {0x63a5, 2719}, - {0x63a7, 2715}, - {0x63a8, 2730}, - {0x63a9, 2725}, - {0x63aa, 2723}, - {0x63ab, 7927}, - {0x63ac, 2735}, - {0x63ad, 7924}, - {0x63ae, 7937}, - {0x63af, 7933}, - {0x63b0, 8526}, - {0x63b1, 8525}, - {0x63bd, 7922}, - {0x63be, 8542}, - {0x63c0, 3165}, - {0x63c2, 8548}, - {0x63c3, 8531}, - {0x63c4, 8545}, - {0x63c5, 9190}, - {0x63c6, 3168}, - {0x63c7, 8549}, - {0x63c8, 8552}, - {0x63c9, 3167}, - {0x63ca, 8534}, - {0x63cb, 8551}, - {0x63cc, 8550}, - {0x63cd, 3169}, - {0x63ce, 8527}, - {0x63cf, 3164}, - {0x63d0, 3172}, - {0x63d2, 3170}, - {0x63d3, 8547}, - {0x63d5, 8537}, - {0x63d6, 3174}, - {0x63d7, 8554}, - {0x63d8, 8546}, - {0x63d9, 8555}, - {0x63da, 3182}, - {0x63db, 3180}, - {0x63dc, 8544}, - {0x63dd, 8543}, - {0x63df, 8541}, - {0x63e0, 8535}, - {0x63e1, 3173}, - {0x63e3, 3171}, - {0x63e4, 7338}, - {0x63e5, 8528}, - {0x63e7, 9220}, - {0x63e8, 8529}, - {0x63e9, 3166}, - {0x63ea, 3179}, - {0x63eb, 9192}, - {0x63ed, 3175}, - {0x63ee, 3176}, - {0x63ef, 8530}, - {0x63f0, 8553}, - {0x63f1, 9191}, - {0x63f2, 8538}, - {0x63f3, 8533}, - {0x63f4, 3178}, - {0x63f5, 8539}, - {0x63f6, 8536}, - {0x63f9, 3183}, - {0x6406, 3626}, - {0x6409, 9195}, - {0x640a, 9214}, - {0x640b, 9219}, - {0x640c, 9207}, - {0x640d, 3622}, - {0x640e, 9224}, - {0x640f, 3619}, - {0x6410, 9193}, - {0x6412, 9194}, - {0x6413, 3612}, - {0x6414, 3621}, - {0x6415, 9201}, - {0x6416, 3624}, - {0x6417, 3625}, - {0x6418, 9202}, - {0x641a, 9215}, - {0x641b, 9221}, - {0x641c, 3620}, - {0x641e, 3614}, - {0x641f, 9200}, - {0x6420, 9196}, - {0x6421, 9223}, - {0x6422, 9205}, - {0x6423, 9206}, - {0x6424, 9197}, - {0x6425, 9217}, - {0x6426, 9208}, - {0x6427, 9218}, - {0x6428, 9210}, - {0x642a, 3615}, - {0x642b, 9881}, - {0x642c, 3618}, - {0x642d, 3616}, - {0x642e, 9222}, - {0x642f, 9213}, - {0x6430, 9209}, - {0x6433, 9198}, - {0x6434, 4068}, - {0x6435, 9212}, - {0x6436, 3623}, - {0x6437, 9204}, - {0x6439, 9203}, - {0x643d, 3617}, - {0x643e, 3613}, - {0x643f, 9902}, - {0x6440, 9216}, - {0x6441, 9211}, - {0x6443, 9199}, - {0x644b, 9897}, - {0x644d, 9882}, - {0x644e, 9893}, - {0x6450, 9900}, - {0x6451, 4066}, - {0x6452, 3181}, - {0x6453, 9898}, - {0x6454, 4061}, - {0x6458, 4060}, - {0x6459, 9905}, - {0x645b, 9883}, - {0x645c, 9896}, - {0x645d, 9884}, - {0x645e, 9895}, - {0x645f, 4064}, - {0x6460, 9899}, - {0x6461, 8540}, - {0x6465, 9906}, - {0x6466, 9891}, - {0x6467, 4067}, - {0x6469, 4441}, - {0x646b, 9904}, - {0x646c, 9903}, - {0x646d, 4069}, - {0x646f, 4442}, - {0x6472, 9887}, - {0x6473, 9888}, - {0x6474, 9885}, - {0x6475, 9890}, - {0x6476, 9886}, - {0x6477, 9907}, - {0x6478, 4063}, - {0x6479, 4443}, - {0x647a, 4065}, - {0x647b, 4070}, - {0x647d, 9889}, - {0x647f, 9901}, - {0x6482, 9894}, - {0x6487, 4059}, - {0x6488, 4446}, - {0x6490, 4447}, - {0x6492, 4453}, - {0x6493, 4450}, - {0x6495, 4451}, - {0x6499, 4459}, - {0x649a, 4457}, - {0x649d, 8532}, - {0x649e, 4444}, - {0x64a2, 4460}, - {0x64a4, 4062}, - {0x64a5, 4449}, - {0x64a6, 9892}, - {0x64a9, 4452}, - {0x64ab, 4456}, - {0x64ac, 4458}, - {0x64ad, 4455}, - {0x64ae, 4454}, - {0x64b0, 4448}, - {0x64b2, 4445}, - {0x64b3, 4461}, - {0x64bb, 4795}, - {0x64bc, 4796}, - {0x64be, 4805}, - {0x64bf, 4802}, - {0x64c1, 4793}, - {0x64c2, 4800}, - {0x64c4, 4798}, - {0x64c5, 4792}, - {0x64c7, 4799}, - {0x64ca, 5080}, - {0x64cb, 4794}, - {0x64cd, 4801}, - {0x64ce, 5079}, - {0x64d2, 4803}, - {0x64d4, 4804}, - {0x64d8, 5081}, - {0x64da, 4797}, - {0x64e0, 5082}, - {0x64e2, 5087}, - {0x64e6, 5084}, - {0x64ec, 5085}, - {0x64ed, 5088}, - {0x64f0, 5083}, - {0x64f1, 5086}, - {0x64f2, 5331}, - {0x64f4, 5330}, - {0x64f7, 5336}, - {0x64fa, 5334}, - {0x64fb, 5335}, - {0x64fe, 5332}, - {0x6500, 5506}, - {0x6506, 5333}, - {0x650f, 5507}, - {0x6514, 5655}, - {0x6518, 5654}, - {0x6519, 5656}, - {0x651c, 5747}, - {0x651d, 5746}, - {0x6523, 5881}, - {0x6524, 5829}, - {0x652a, 5883}, - {0x652b, 5882}, - {0x652c, 5921}, - {0x652f, 725}, - {0x6532, 8556}, - {0x6534, 556}, - {0x6536, 983}, - {0x6537, 6134}, - {0x6538, 1209}, - {0x6539, 1207}, - {0x653b, 1208}, - {0x653d, 6561}, - {0x653e, 1523}, - {0x653f, 1857}, - {0x6541, 6913}, - {0x6543, 6914}, - {0x6545, 1858}, - {0x6546, 7359}, - {0x6548, 2262}, - {0x6549, 2263}, - {0x654a, 7358}, - {0x654f, 2749}, - {0x6551, 2745}, - {0x6553, 7948}, - {0x6554, 2752}, - {0x6555, 2751}, - {0x6556, 2744}, - {0x6557, 2747}, - {0x6558, 2750}, - {0x6559, 2746}, - {0x655c, 8560}, - {0x655d, 2743}, - {0x655e, 3184}, - {0x6562, 3186}, - {0x6563, 3187}, - {0x6564, 8559}, - {0x6565, 8562}, - {0x6566, 3185}, - {0x6567, 8557}, - {0x6568, 8561}, - {0x656a, 8558}, - {0x656c, 3627}, - {0x656f, 9225}, - {0x6572, 4071}, - {0x6573, 9908}, - {0x6574, 4806}, - {0x6575, 4462}, - {0x6577, 4463}, - {0x6578, 4464}, - {0x6582, 5089}, - {0x6583, 5090}, - {0x6587, 726}, - {0x658c, 8563}, - {0x6590, 3189}, - {0x6591, 3188}, - {0x6592, 9226}, - {0x6595, 5748}, - {0x6597, 727}, - {0x6599, 2264}, - {0x659b, 2754}, - {0x659c, 2753}, - {0x659d, 8564}, - {0x659e, 8565}, - {0x659f, 3628}, - {0x65a0, 9909}, - {0x65a1, 4072}, - {0x65a4, 728}, - {0x65a5, 838}, - {0x65a7, 1524}, - {0x65a8, 6562}, - {0x65aa, 6915}, - {0x65ab, 1859}, - {0x65ac, 2755}, - {0x65ae, 8566}, - {0x65af, 3190}, - {0x65b0, 3629}, - {0x65b3, 0}, - {0x65b7, 5337}, - {0x65b9, 729}, - {0x65bb, 6563}, - {0x65bc, 1525}, - {0x65bd, 1860}, - {0x65bf, 6916}, - {0x65c1, 2265}, - {0x65c2, 7363}, - {0x65c3, 7361}, - {0x65c4, 7362}, - {0x65c5, 2266}, - {0x65c6, 7360}, - {0x65cb, 2757}, - {0x65cc, 2758}, - {0x65cd, 7949}, - {0x65ce, 2759}, - {0x65cf, 2756}, - {0x65d0, 8567}, - {0x65d2, 8568}, - {0x65d3, 9227}, - {0x65d6, 4074}, - {0x65d7, 4073}, - {0x65e0, 557}, - {0x65e1, 6025}, - {0x65e2, 1861}, - {0x65e5, 730}, - {0x65e6, 839}, - {0x65e8, 985}, - {0x65e9, 984}, - {0x65ec, 986}, - {0x65ed, 987}, - {0x65ee, 6136}, - {0x65ef, 6135}, - {0x65f0, 6302}, - {0x65f1, 1210}, - {0x65f2, 6305}, - {0x65f3, 6304}, - {0x65f4, 6303}, - {0x65f5, 6306}, - {0x65fa, 1526}, - {0x65fb, 6569}, - {0x65fc, 6565}, - {0x65fd, 6574}, - {0x6600, 1533}, - {0x6602, 1531}, - {0x6603, 6570}, - {0x6604, 6566}, - {0x6605, 6573}, - {0x6606, 1530}, - {0x6607, 1537}, - {0x6608, 6568}, - {0x6609, 6564}, - {0x660a, 1536}, - {0x660b, 6571}, - {0x660c, 1529}, - {0x660d, 6572}, - {0x660e, 1532}, - {0x660f, 1534}, - {0x6610, 6576}, - {0x6611, 6575}, - {0x6612, 6567}, - {0x6613, 1528}, - {0x6614, 1527}, - {0x6615, 1535}, - {0x661c, 6921}, - {0x661d, 6927}, - {0x661f, 1867}, - {0x6620, 1864}, - {0x6621, 6918}, - {0x6622, 6923}, - {0x6624, 1870}, - {0x6625, 1862}, - {0x6626, 6922}, - {0x6627, 1865}, - {0x6628, 1868}, - {0x662b, 6925}, - {0x662d, 1863}, - {0x662e, 6930}, - {0x662f, 1866}, - {0x6631, 1869}, - {0x6632, 6919}, - {0x6633, 6924}, - {0x6634, 6928}, - {0x6635, 6920}, - {0x6636, 6917}, - {0x6639, 6929}, - {0x663a, 6926}, - {0x6641, 2274}, - {0x6642, 2267}, - {0x6643, 2270}, - {0x6645, 2273}, - {0x6647, 7366}, - {0x6649, 2268}, - {0x664a, 7364}, - {0x664c, 2272}, - {0x664f, 2269}, - {0x6651, 7367}, - {0x6652, 2271}, - {0x6659, 7953}, - {0x665a, 2761}, - {0x665b, 7952}, - {0x665c, 7954}, - {0x665d, 2760}, - {0x665e, 2765}, - {0x665f, 7365}, - {0x6661, 7951}, - {0x6662, 7955}, - {0x6664, 2762}, - {0x6665, 7950}, - {0x6666, 2764}, - {0x6668, 2763}, - {0x666a, 8575}, - {0x666c, 8570}, - {0x666e, 3191}, - {0x666f, 3195}, - {0x6670, 3192}, - {0x6671, 8573}, - {0x6672, 8576}, - {0x6674, 3193}, - {0x6676, 3194}, - {0x6677, 3199}, - {0x6678, 9236}, - {0x6679, 8574}, - {0x667a, 3197}, - {0x667b, 8571}, - {0x667c, 8569}, - {0x667e, 3198}, - {0x6680, 8572}, - {0x6684, 3635}, - {0x6686, 9228}, - {0x6687, 3632}, - {0x6688, 3633}, - {0x6689, 3631}, - {0x668a, 9233}, - {0x668b, 9232}, - {0x668c, 9229}, - {0x668d, 3637}, - {0x6690, 9231}, - {0x6691, 3196}, - {0x6694, 9235}, - {0x6695, 9230}, - {0x6696, 3634}, - {0x6697, 3630}, - {0x6698, 3636}, - {0x6699, 9234}, - {0x669d, 4077}, - {0x669f, 9912}, - {0x66a0, 9911}, - {0x66a1, 9910}, - {0x66a2, 4075}, - {0x66a8, 4076}, - {0x66ab, 4466}, - {0x66ae, 4465}, - {0x66b1, 4468}, - {0x66b4, 4467}, - {0x66b8, 4812}, - {0x66b9, 4809}, - {0x66c4, 4810}, - {0x66c6, 4807}, - {0x66c7, 4811}, - {0x66c9, 4808}, - {0x66cb, 0}, - {0x66d6, 5092}, - {0x66d9, 5091}, - {0x66db, 0}, - {0x66dc, 5338}, - {0x66dd, 5509}, - {0x66e0, 5508}, - {0x66e4, 0}, - {0x66e6, 5657}, - {0x66e9, 5749}, - {0x66ec, 5884}, - {0x66ee, 0}, - {0x66f0, 731}, - {0x66f2, 988}, - {0x66f3, 989}, - {0x66f4, 1211}, - {0x66f6, 6577}, - {0x66f7, 1871}, - {0x66f8, 2275}, - {0x66f9, 2766}, - {0x66fc, 2591}, - {0x66fe, 3200}, - {0x66ff, 3201}, - {0x6700, 3056}, - {0x6701, 8577}, - {0x6703, 3638}, - {0x6704, 9914}, - {0x6705, 9913}, - {0x6708, 732}, - {0x6709, 990}, - {0x670a, 6578}, - {0x670b, 1539}, - {0x670d, 1538}, - {0x670f, 6931}, - {0x6710, 6932}, - {0x6712, 7368}, - {0x6713, 7369}, - {0x6714, 2276}, - {0x6715, 2277}, - {0x6717, 2278}, - {0x6718, 7956}, - {0x671b, 2768}, - {0x671d, 3203}, - {0x671f, 3202}, - {0x6720, 9237}, - {0x6721, 9506}, - {0x6722, 9915}, - {0x6726, 5339}, - {0x6727, 5658}, - {0x6728, 733}, - {0x672a, 842}, - {0x672b, 843}, - {0x672c, 841}, - {0x672d, 844}, - {0x672e, 840}, - {0x6731, 993}, - {0x6733, 6144}, - {0x6734, 992}, - {0x6735, 994}, - {0x6738, 6139}, - {0x6739, 6138}, - {0x673a, 6141}, - {0x673b, 6140}, - {0x673c, 6143}, - {0x673d, 991}, - {0x673e, 6137}, - {0x673f, 6142}, - {0x6745, 6307}, - {0x6746, 1221}, - {0x6747, 6308}, - {0x6748, 6312}, - {0x6749, 1220}, - {0x674b, 6316}, - {0x674c, 6311}, - {0x674d, 6314}, - {0x674e, 1213}, - {0x674f, 1214}, - {0x6750, 1215}, - {0x6751, 1216}, - {0x6753, 1223}, - {0x6755, 6310}, - {0x6756, 1218}, - {0x6757, 1224}, - {0x6759, 6309}, - {0x675a, 6315}, - {0x675c, 1217}, - {0x675d, 6313}, - {0x675e, 1219}, - {0x675f, 1212}, - {0x6760, 1222}, - {0x676a, 1560}, - {0x676c, 6580}, - {0x676d, 1540}, - {0x676f, 1550}, - {0x6770, 1551}, - {0x6771, 1543}, - {0x6772, 1561}, - {0x6773, 1545}, - {0x6774, 6588}, - {0x6775, 1556}, - {0x6776, 6583}, - {0x6777, 1546}, - {0x6778, 6598}, - {0x6779, 6599}, - {0x677a, 6591}, - {0x677b, 6584}, - {0x677c, 1559}, - {0x677d, 6596}, - {0x677e, 1554}, - {0x677f, 1552}, - {0x6781, 6597}, - {0x6783, 6595}, - {0x6784, 6587}, - {0x6785, 6579}, - {0x6786, 6586}, - {0x6787, 1547}, - {0x6789, 1553}, - {0x678b, 1541}, - {0x678c, 6590}, - {0x678d, 6589}, - {0x678e, 6581}, - {0x6790, 1555}, - {0x6791, 6593}, - {0x6792, 6582}, - {0x6793, 1558}, - {0x6794, 6600}, - {0x6795, 1542}, - {0x6797, 1549}, - {0x6798, 6585}, - {0x6799, 6594}, - {0x679a, 1557}, - {0x679c, 1544}, - {0x679d, 1548}, - {0x679f, 6592}, - {0x67ae, 6964}, - {0x67af, 1879}, - {0x67b0, 1892}, - {0x67b2, 6959}, - {0x67b3, 6949}, - {0x67b4, 1885}, - {0x67b5, 6947}, - {0x67b6, 1878}, - {0x67b7, 6942}, - {0x67b8, 1888}, - {0x67b9, 6955}, - {0x67ba, 6936}, - {0x67bb, 6938}, - {0x67c0, 6941}, - {0x67c1, 6933}, - {0x67c2, 6954}, - {0x67c3, 6970}, - {0x67c4, 1883}, - {0x67c5, 6943}, - {0x67c6, 6961}, - {0x67c8, 6935}, - {0x67c9, 6968}, - {0x67ca, 6969}, - {0x67cb, 6972}, - {0x67cc, 6963}, - {0x67cd, 6948}, - {0x67ce, 6956}, - {0x67cf, 1889}, - {0x67d0, 1876}, - {0x67d1, 1884}, - {0x67d2, 1896}, - {0x67d3, 1873}, - {0x67d4, 1875}, - {0x67d8, 6940}, - {0x67d9, 1893}, - {0x67da, 1886}, - {0x67db, 6966}, - {0x67dc, 6937}, - {0x67dd, 1895}, - {0x67de, 1890}, - {0x67df, 6946}, - {0x67e2, 1894}, - {0x67e3, 6953}, - {0x67e4, 6945}, - {0x67e5, 1887}, - {0x67e6, 6965}, - {0x67e7, 6957}, - {0x67e9, 1881}, - {0x67ea, 6971}, - {0x67eb, 6944}, - {0x67ec, 1877}, - {0x67ed, 6962}, - {0x67ee, 6952}, - {0x67ef, 1882}, - {0x67f0, 6958}, - {0x67f1, 1874}, - {0x67f2, 6934}, - {0x67f3, 1891}, - {0x67f4, 2293}, - {0x67f5, 1880}, - {0x67f6, 6951}, - {0x67f7, 6950}, - {0x67f8, 6939}, - {0x67fa, 6967}, - {0x67fc, 6960}, - {0x67ff, 1872}, - {0x6812, 7389}, - {0x6813, 2300}, - {0x6814, 7390}, - {0x6816, 7378}, - {0x6817, 2289}, - {0x6818, 2301}, - {0x681a, 7371}, - {0x681c, 7380}, - {0x681d, 7388}, - {0x681f, 7370}, - {0x6820, 7397}, - {0x6821, 2279}, - {0x6825, 7396}, - {0x6826, 7391}, - {0x6828, 7392}, - {0x6829, 2287}, - {0x682a, 2298}, - {0x682b, 7382}, - {0x682d, 7383}, - {0x682e, 7393}, - {0x682f, 7384}, - {0x6831, 7379}, - {0x6832, 7373}, - {0x6833, 7374}, - {0x6834, 7387}, - {0x6835, 7381}, - {0x6838, 2280}, - {0x6839, 2284}, - {0x683a, 7395}, - {0x683b, 7375}, - {0x683c, 2296}, - {0x683d, 2292}, - {0x6840, 2295}, - {0x6841, 2302}, - {0x6842, 2285}, - {0x6843, 2297}, - {0x6844, 7386}, - {0x6845, 2299}, - {0x6846, 2282}, - {0x6848, 2281}, - {0x6849, 7372}, - {0x684b, 7376}, - {0x684c, 2290}, - {0x684d, 7394}, - {0x684e, 7385}, - {0x684f, 7377}, - {0x6850, 2294}, - {0x6851, 2291}, - {0x6853, 2283}, - {0x6854, 2286}, - {0x686b, 7977}, - {0x686d, 7961}, - {0x686e, 7962}, - {0x686f, 7966}, - {0x6871, 7981}, - {0x6872, 7978}, - {0x6874, 7971}, - {0x6875, 7970}, - {0x6876, 2775}, - {0x6877, 7974}, - {0x6878, 7989}, - {0x6879, 7957}, - {0x687b, 7990}, - {0x687c, 7976}, - {0x687d, 7994}, - {0x687e, 7982}, - {0x687f, 2774}, - {0x6880, 7980}, - {0x6881, 2769}, - {0x6882, 2790}, - {0x6883, 2780}, - {0x6885, 2784}, - {0x6886, 2783}, - {0x6887, 7958}, - {0x6889, 7987}, - {0x688a, 7993}, - {0x688b, 7985}, - {0x688c, 7992}, - {0x688f, 7973}, - {0x6890, 7959}, - {0x6891, 7991}, - {0x6892, 7975}, - {0x6893, 2772}, - {0x6894, 2785}, - {0x6896, 7984}, - {0x6897, 2778}, - {0x689b, 7983}, - {0x689c, 7960}, - {0x689d, 2786}, - {0x689f, 2788}, - {0x68a0, 7986}, - {0x68a1, 2789}, - {0x68a2, 2771}, - {0x68a3, 7967}, - {0x68a4, 7988}, - {0x68a7, 2777}, - {0x68a8, 2787}, - {0x68a9, 7969}, - {0x68aa, 7979}, - {0x68ab, 7964}, - {0x68ac, 7968}, - {0x68ad, 2782}, - {0x68ae, 7963}, - {0x68af, 2770}, - {0x68b0, 2779}, - {0x68b1, 2776}, - {0x68b2, 7972}, - {0x68b3, 2288}, - {0x68b4, 8600}, - {0x68b5, 2773}, - {0x68c4, 2781}, - {0x68c6, 8603}, - {0x68c7, 8625}, - {0x68c8, 8614}, - {0x68c9, 3223}, - {0x68cb, 3218}, - {0x68cc, 8597}, - {0x68cd, 3219}, - {0x68ce, 8613}, - {0x68d0, 8606}, - {0x68d1, 8619}, - {0x68d2, 3215}, - {0x68d3, 8579}, - {0x68d4, 8621}, - {0x68d5, 3205}, - {0x68d6, 8587}, - {0x68d7, 3208}, - {0x68d8, 3207}, - {0x68da, 3224}, - {0x68dc, 8581}, - {0x68dd, 8615}, - {0x68de, 8616}, - {0x68df, 3210}, - {0x68e0, 3206}, - {0x68e1, 8595}, - {0x68e3, 3217}, - {0x68e4, 8590}, - {0x68e6, 8617}, - {0x68e7, 3213}, - {0x68e8, 8609}, - {0x68e9, 8622}, - {0x68ea, 8584}, - {0x68eb, 8589}, - {0x68ec, 8583}, - {0x68ee, 3212}, - {0x68ef, 8602}, - {0x68f0, 9259}, - {0x68f1, 8585}, - {0x68f2, 3216}, - {0x68f3, 8594}, - {0x68f4, 8618}, - {0x68f5, 3211}, - {0x68f6, 8591}, - {0x68f7, 8588}, - {0x68f8, 8605}, - {0x68f9, 3214}, - {0x68fa, 3204}, - {0x68fb, 3226}, - {0x68fc, 8608}, - {0x68fd, 8607}, - {0x6904, 8580}, - {0x6905, 3209}, - {0x6906, 8620}, - {0x6907, 8596}, - {0x6908, 8598}, - {0x690a, 8611}, - {0x690b, 8610}, - {0x690c, 8578}, - {0x690d, 3220}, - {0x690e, 3222}, - {0x690f, 8586}, - {0x6910, 8593}, - {0x6911, 8601}, - {0x6912, 3221}, - {0x6913, 8592}, - {0x6914, 8604}, - {0x6915, 8623}, - {0x6917, 8612}, - {0x6925, 8624}, - {0x692a, 8582}, - {0x692f, 9279}, - {0x6930, 3646}, - {0x6932, 9277}, - {0x6933, 9256}, - {0x6934, 9261}, - {0x6935, 9254}, - {0x6937, 9273}, - {0x6938, 9240}, - {0x6939, 9247}, - {0x693b, 9271}, - {0x693c, 9281}, - {0x693d, 9257}, - {0x693f, 9244}, - {0x6940, 9263}, - {0x6941, 9268}, - {0x6942, 9248}, - {0x6944, 9265}, - {0x6945, 9245}, - {0x6948, 9252}, - {0x6949, 9253}, - {0x694a, 3648}, - {0x694b, 9272}, - {0x694c, 9270}, - {0x694e, 9241}, - {0x694f, 9275}, - {0x6951, 9276}, - {0x6952, 9278}, - {0x6953, 3652}, - {0x6954, 3644}, - {0x6956, 7965}, - {0x6957, 9249}, - {0x6958, 9267}, - {0x6959, 9250}, - {0x695a, 3641}, - {0x695b, 3657}, - {0x695c, 9274}, - {0x695d, 3655}, - {0x695e, 3651}, - {0x695f, 9239}, - {0x6960, 3643}, - {0x6962, 9242}, - {0x6963, 3656}, - {0x6965, 9258}, - {0x6966, 9238}, - {0x6968, 3649}, - {0x6969, 9262}, - {0x696a, 9246}, - {0x696b, 3650}, - {0x696c, 9255}, - {0x696d, 3640}, - {0x696e, 3225}, - {0x696f, 9264}, - {0x6970, 8599}, - {0x6971, 9243}, - {0x6974, 9269}, - {0x6975, 3645}, - {0x6976, 9266}, - {0x6977, 3642}, - {0x6978, 9260}, - {0x6979, 3653}, - {0x697a, 9251}, - {0x697b, 9280}, - {0x6982, 3647}, - {0x6983, 9391}, - {0x6986, 3654}, - {0x698d, 9929}, - {0x698e, 9927}, - {0x6990, 9949}, - {0x6991, 9925}, - {0x6993, 9943}, - {0x6994, 3639}, - {0x6995, 4080}, - {0x6996, 9921}, - {0x6997, 9948}, - {0x6999, 9926}, - {0x699a, 9940}, - {0x699b, 4085}, - {0x699c, 4078}, - {0x699e, 9946}, - {0x69a0, 9919}, - {0x69a1, 9945}, - {0x69a3, 4096}, - {0x69a4, 9936}, - {0x69a5, 9952}, - {0x69a6, 4094}, - {0x69a7, 9928}, - {0x69a8, 4079}, - {0x69a9, 9930}, - {0x69aa, 9944}, - {0x69ab, 4088}, - {0x69ac, 9923}, - {0x69ad, 4092}, - {0x69ae, 4082}, - {0x69af, 9932}, - {0x69b0, 9922}, - {0x69b1, 9916}, - {0x69b3, 9942}, - {0x69b4, 4089}, - {0x69b5, 9951}, - {0x69b6, 9917}, - {0x69b7, 4086}, - {0x69b9, 9938}, - {0x69bb, 4087}, - {0x69bc, 9924}, - {0x69bd, 9935}, - {0x69be, 9931}, - {0x69bf, 9933}, - {0x69c1, 4081}, - {0x69c2, 9950}, - {0x69c3, 4095}, - {0x69c4, 9934}, - {0x69c6, 9953}, - {0x69c9, 9918}, - {0x69ca, 9939}, - {0x69cb, 4084}, - {0x69cc, 4093}, - {0x69cd, 4091}, - {0x69ce, 9920}, - {0x69cf, 9941}, - {0x69d0, 4090}, - {0x69d3, 4083}, - {0x69d4, 9937}, - {0x69d9, 9947}, - {0x69e8, 4471}, - {0x69ed, 4482}, - {0x69f3, 4479}, - {0x69fd, 4475}, - {0x6a01, 4472}, - {0x6a02, 4480}, - {0x6a05, 4481}, - {0x6a0a, 4478}, - {0x6a11, 4483}, - {0x6a13, 4477}, - {0x6a19, 4474}, - {0x6a1e, 4473}, - {0x6a1f, 4470}, - {0x6a21, 4476}, - {0x6a23, 4469}, - {0x6a35, 4825}, - {0x6a38, 4814}, - {0x6a39, 4819}, - {0x6a3a, 4815}, - {0x6a3d, 4813}, - {0x6a44, 4820}, - {0x6a47, 4824}, - {0x6a48, 4827}, - {0x6a4b, 4823}, - {0x6a4e, 0}, - {0x6a58, 4818}, - {0x6a59, 4816}, - {0x6a5f, 4826}, - {0x6a61, 4822}, - {0x6a62, 4821}, - {0x6a6b, 4817}, - {0x6a7e, 5100}, - {0x6a80, 5093}, - {0x6a84, 5095}, - {0x6a90, 5102}, - {0x6a94, 5094}, - {0x6a97, 5101}, - {0x6a9c, 5097}, - {0x6aa0, 5103}, - {0x6aa2, 5096}, - {0x6aa3, 5099}, - {0x6aac, 5341}, - {0x6aae, 5346}, - {0x6aaf, 5347}, - {0x6ab3, 5340}, - {0x6ab7, 0}, - {0x6ab8, 5344}, - {0x6abb, 5343}, - {0x6ac2, 5345}, - {0x6ac3, 5342}, - {0x6ad3, 5513}, - {0x6ada, 5512}, - {0x6adb, 5098}, - {0x6add, 5511}, - {0x6ae5, 5510}, - {0x6aec, 5659}, - {0x6aef, 0}, - {0x6afa, 5752}, - {0x6afb, 5750}, - {0x6b04, 5751}, - {0x6b09, 0}, - {0x6b0a, 5830}, - {0x6b10, 5885}, - {0x6b12, 0}, - {0x6b16, 5955}, - {0x6b19, 0}, - {0x6b20, 734}, - {0x6b21, 995}, - {0x6b23, 1562}, - {0x6b25, 6601}, - {0x6b28, 6973}, - {0x6b2c, 7398}, - {0x6b2d, 7400}, - {0x6b2f, 7399}, - {0x6b31, 7401}, - {0x6b32, 2791}, - {0x6b33, 7996}, - {0x6b34, 7402}, - {0x6b36, 7995}, - {0x6b37, 7997}, - {0x6b38, 7998}, - {0x6b39, 8626}, - {0x6b3a, 3228}, - {0x6b3b, 8627}, - {0x6b3c, 8629}, - {0x6b3d, 3229}, - {0x6b3e, 3227}, - {0x6b3f, 8628}, - {0x6b41, 9287}, - {0x6b42, 9285}, - {0x6b43, 9284}, - {0x6b45, 9283}, - {0x6b46, 9282}, - {0x6b47, 3658}, - {0x6b48, 9286}, - {0x6b49, 4097}, - {0x6b4a, 9954}, - {0x6b4b, 9956}, - {0x6b4c, 4098}, - {0x6b4d, 9955}, - {0x6b4e, 4485}, - {0x6b50, 4484}, - {0x6b59, 4828}, - {0x6b5c, 5104}, - {0x6b5f, 5348}, - {0x6b61, 5831}, - {0x6b62, 735}, - {0x6b63, 845}, - {0x6b64, 996}, - {0x6b65, 1225}, - {0x6b66, 1563}, - {0x6b67, 1564}, - {0x6b6a, 1897}, - {0x6b6d, 7403}, - {0x6b72, 3659}, - {0x6b77, 4829}, - {0x6b78, 5349}, - {0x6b79, 736}, - {0x6b7b, 997}, - {0x6b7e, 6603}, - {0x6b7f, 1565}, - {0x6b80, 6602}, - {0x6b82, 6974}, - {0x6b83, 1898}, - {0x6b84, 6975}, - {0x6b86, 1899}, - {0x6b88, 7405}, - {0x6b89, 2304}, - {0x6b8a, 2303}, - {0x6b8c, 8003}, - {0x6b8d, 8001}, - {0x6b8e, 8002}, - {0x6b8f, 8000}, - {0x6b91, 7999}, - {0x6b94, 8630}, - {0x6b95, 8633}, - {0x6b96, 3231}, - {0x6b97, 8631}, - {0x6b98, 3230}, - {0x6b99, 8632}, - {0x6b9b, 9288}, - {0x6b9e, 9957}, - {0x6b9f, 9958}, - {0x6ba0, 9959}, - {0x6ba4, 4486}, - {0x6bab, 0}, - {0x6bae, 5105}, - {0x6baf, 5350}, - {0x6bb2, 5753}, - {0x6bb3, 6026}, - {0x6bb5, 1900}, - {0x6bb6, 6976}, - {0x6bb7, 2305}, - {0x6bba, 2792}, - {0x6bbc, 3232}, - {0x6bbd, 8634}, - {0x6bbf, 3661}, - {0x6bc0, 3660}, - {0x6bc3, 9960}, - {0x6bc4, 9961}, - {0x6bc5, 4487}, - {0x6bc6, 4488}, - {0x6bcb, 737}, - {0x6bcc, 6027}, - {0x6bcd, 846}, - {0x6bcf, 1226}, - {0x6bd0, 6317}, - {0x6bd2, 1901}, - {0x6bd3, 3662}, - {0x6bd4, 738}, - {0x6bd6, 6977}, - {0x6bd7, 1902}, - {0x6bd8, 6978}, - {0x6bda, 5106}, - {0x6bdb, 739}, - {0x6bde, 6604}, - {0x6be0, 6979}, - {0x6be2, 7410}, - {0x6be3, 7409}, - {0x6be4, 7407}, - {0x6be6, 7406}, - {0x6be7, 7411}, - {0x6be8, 7408}, - {0x6beb, 2793}, - {0x6bec, 2794}, - {0x6bef, 3233}, - {0x6bf0, 8635}, - {0x6bf2, 8636}, - {0x6bf3, 8637}, - {0x6bf7, 9292}, - {0x6bf8, 9293}, - {0x6bf9, 9291}, - {0x6bfb, 9289}, - {0x6bfc, 9290}, - {0x6bfd, 3663}, - {0x6bfe, 9962}, - {0x6c05, 4830}, - {0x6c08, 5107}, - {0x6c0f, 740}, - {0x6c10, 848}, - {0x6c11, 847}, - {0x6c13, 1566}, - {0x6c14, 6028}, - {0x6c15, 6058}, - {0x6c16, 998}, - {0x6c18, 6145}, - {0x6c19, 6318}, - {0x6c1a, 6319}, - {0x6c1b, 1567}, - {0x6c1d, 6605}, - {0x6c1f, 1903}, - {0x6c20, 6980}, - {0x6c21, 6981}, - {0x6c23, 2306}, - {0x6c24, 2310}, - {0x6c25, 7412}, - {0x6c26, 2309}, - {0x6c27, 2307}, - {0x6c28, 2308}, - {0x6c2a, 8004}, - {0x6c2b, 2795}, - {0x6c2c, 3236}, - {0x6c2e, 3234}, - {0x6c2f, 3235}, - {0x6c30, 8638}, - {0x6c33, 4099}, - {0x6c34, 741}, - {0x6c36, 6059}, - {0x6c38, 849}, - {0x6c3b, 6062}, - {0x6c3e, 852}, - {0x6c3f, 6061}, - {0x6c40, 851}, - {0x6c41, 850}, - {0x6c42, 1227}, - {0x6c43, 6060}, - {0x6c46, 6146}, - {0x6c4a, 6150}, - {0x6c4b, 6152}, - {0x6c4c, 6153}, - {0x6c4d, 1008}, - {0x6c4e, 1009}, - {0x6c4f, 6149}, - {0x6c50, 1004}, - {0x6c52, 6147}, - {0x6c54, 6151}, - {0x6c55, 1005}, - {0x6c57, 1000}, - {0x6c59, 1001}, - {0x6c5b, 1007}, - {0x6c5c, 6148}, - {0x6c5d, 999}, - {0x6c5e, 1228}, - {0x6c5f, 1002}, - {0x6c60, 1003}, - {0x6c61, 1006}, - {0x6c65, 6336}, - {0x6c66, 6334}, - {0x6c67, 6321}, - {0x6c68, 1240}, - {0x6c69, 6328}, - {0x6c6a, 1235}, - {0x6c6b, 6322}, - {0x6c6d, 6330}, - {0x6c6f, 6327}, - {0x6c70, 1238}, - {0x6c71, 6326}, - {0x6c72, 1245}, - {0x6c73, 6335}, - {0x6c74, 1247}, - {0x6c76, 1249}, - {0x6c78, 6320}, - {0x6c7a, 1236}, - {0x6c7b, 6337}, - {0x6c7d, 1243}, - {0x6c7e, 1246}, - {0x6c80, 6628}, - {0x6c81, 1230}, - {0x6c82, 1253}, - {0x6c83, 1244}, - {0x6c84, 6323}, - {0x6c85, 1233}, - {0x6c86, 1248}, - {0x6c87, 6331}, - {0x6c88, 1231}, - {0x6c89, 1232}, - {0x6c8a, 6626}, - {0x6c8b, 6324}, - {0x6c8c, 1239}, - {0x6c8d, 1250}, - {0x6c8e, 6338}, - {0x6c8f, 6325}, - {0x6c90, 1237}, - {0x6c92, 1242}, - {0x6c93, 6606}, - {0x6c94, 1251}, - {0x6c95, 6332}, - {0x6c96, 1241}, - {0x6c98, 1252}, - {0x6c99, 1229}, - {0x6c9a, 6329}, - {0x6c9b, 1234}, - {0x6c9c, 6333}, - {0x6c9d, 6627}, - {0x6cab, 1579}, - {0x6cac, 1595}, - {0x6cad, 6613}, - {0x6cae, 1586}, - {0x6cb0, 6634}, - {0x6cb1, 1571}, - {0x6cb3, 1574}, - {0x6cb4, 6625}, - {0x6cb6, 6611}, - {0x6cb7, 6615}, - {0x6cb8, 1582}, - {0x6cb9, 1584}, - {0x6cba, 6618}, - {0x6cbb, 1591}, - {0x6cbc, 1577}, - {0x6cbd, 1575}, - {0x6cbe, 1576}, - {0x6cbf, 1590}, - {0x6cc0, 6630}, - {0x6cc1, 1585}, - {0x6cc2, 6617}, - {0x6cc3, 6619}, - {0x6cc4, 1583}, - {0x6cc5, 1588}, - {0x6cc6, 6620}, - {0x6cc7, 6633}, - {0x6cc9, 1904}, - {0x6cca, 1594}, - {0x6ccc, 1572}, - {0x6ccd, 6632}, - {0x6ccf, 6636}, - {0x6cd0, 6616}, - {0x6cd1, 6638}, - {0x6cd2, 6623}, - {0x6cd3, 1581}, - {0x6cd4, 6612}, - {0x6cd5, 1580}, - {0x6cd6, 1598}, - {0x6cd7, 1587}, - {0x6cd9, 6610}, - {0x6cda, 6990}, - {0x6cdb, 1593}, - {0x6cdc, 1597}, - {0x6cdd, 6624}, - {0x6cde, 6629}, - {0x6ce0, 1599}, - {0x6ce1, 1592}, - {0x6ce2, 1578}, - {0x6ce3, 1568}, - {0x6ce5, 1573}, - {0x6ce7, 6614}, - {0x6ce8, 1569}, - {0x6ce9, 6637}, - {0x6ceb, 6608}, - {0x6cec, 6607}, - {0x6ced, 6621}, - {0x6cee, 6609}, - {0x6cef, 1596}, - {0x6cf0, 2311}, - {0x6cf1, 1589}, - {0x6cf2, 6622}, - {0x6cf3, 1570}, - {0x6cf5, 1919}, - {0x6cf9, 6635}, - {0x6d00, 6997}, - {0x6d01, 7000}, - {0x6d03, 7003}, - {0x6d04, 6992}, - {0x6d07, 7006}, - {0x6d08, 7009}, - {0x6d09, 7011}, - {0x6d0a, 6989}, - {0x6d0b, 1905}, - {0x6d0c, 1910}, - {0x6d0d, 7417}, - {0x6d0e, 1926}, - {0x6d0f, 7004}, - {0x6d10, 7012}, - {0x6d11, 6996}, - {0x6d12, 6988}, - {0x6d16, 7444}, - {0x6d17, 1913}, - {0x6d18, 7001}, - {0x6d19, 6993}, - {0x6d1a, 6995}, - {0x6d1b, 1918}, - {0x6d1d, 6998}, - {0x6d1e, 1912}, - {0x6d1f, 6985}, - {0x6d20, 7007}, - {0x6d22, 7010}, - {0x6d25, 1909}, - {0x6d27, 1921}, - {0x6d28, 6982}, - {0x6d29, 1923}, - {0x6d2a, 1907}, - {0x6d2b, 1927}, - {0x6d2c, 7008}, - {0x6d2d, 6984}, - {0x6d2e, 1924}, - {0x6d2f, 7438}, - {0x6d30, 6631}, - {0x6d31, 1911}, - {0x6d32, 1906}, - {0x6d33, 6991}, - {0x6d34, 6983}, - {0x6d35, 1925}, - {0x6d36, 1917}, - {0x6d37, 7002}, - {0x6d38, 1922}, - {0x6d39, 1920}, - {0x6d3a, 6994}, - {0x6d3b, 1914}, - {0x6d3c, 6986}, - {0x6d3d, 1915}, - {0x6d3e, 1916}, - {0x6d3f, 6987}, - {0x6d40, 7005}, - {0x6d41, 1908}, - {0x6d42, 6999}, - {0x6d58, 7420}, - {0x6d59, 2319}, - {0x6d5a, 2324}, - {0x6d5e, 7429}, - {0x6d5f, 7435}, - {0x6d60, 7431}, - {0x6d61, 7418}, - {0x6d62, 7421}, - {0x6d63, 7414}, - {0x6d64, 7415}, - {0x6d65, 2331}, - {0x6d66, 2316}, - {0x6d67, 7430}, - {0x6d68, 7439}, - {0x6d69, 2326}, - {0x6d6a, 2312}, - {0x6d6c, 2321}, - {0x6d6d, 7422}, - {0x6d6e, 2323}, - {0x6d6f, 7423}, - {0x6d70, 7433}, - {0x6d74, 2325}, - {0x6d75, 7448}, - {0x6d76, 7416}, - {0x6d77, 2318}, - {0x6d78, 2317}, - {0x6d79, 2329}, - {0x6d7a, 7413}, - {0x6d7b, 7446}, - {0x6d7c, 7434}, - {0x6d7d, 7447}, - {0x6d7e, 7441}, - {0x6d7f, 7427}, - {0x6d80, 7442}, - {0x6d82, 7436}, - {0x6d83, 7445}, - {0x6d84, 7443}, - {0x6d85, 2330}, - {0x6d86, 7428}, - {0x6d87, 2315}, - {0x6d88, 2314}, - {0x6d89, 2322}, - {0x6d8a, 2328}, - {0x6d8b, 7440}, - {0x6d8c, 2327}, - {0x6d8d, 7425}, - {0x6d8e, 2796}, - {0x6d90, 7449}, - {0x6d91, 7424}, - {0x6d92, 7419}, - {0x6d93, 2320}, - {0x6d94, 2332}, - {0x6d95, 2313}, - {0x6d97, 7432}, - {0x6d98, 7437}, - {0x6daa, 2830}, - {0x6dab, 8006}, - {0x6dac, 8010}, - {0x6dae, 2811}, - {0x6daf, 2809}, - {0x6db2, 2800}, - {0x6db3, 8008}, - {0x6db4, 8007}, - {0x6db5, 2820}, - {0x6db7, 8013}, - {0x6db8, 2814}, - {0x6dba, 8031}, - {0x6dbb, 8043}, - {0x6dbc, 2797}, - {0x6dbd, 8028}, - {0x6dbe, 8021}, - {0x6dbf, 2832}, - {0x6dc0, 8005}, - {0x6dc2, 8033}, - {0x6dc4, 2829}, - {0x6dc5, 2817}, - {0x6dc6, 2828}, - {0x6dc7, 2807}, - {0x6dc8, 8017}, - {0x6dc9, 8035}, - {0x6dca, 8027}, - {0x6dcb, 2808}, - {0x6dcc, 2802}, - {0x6dcd, 8041}, - {0x6dcf, 8034}, - {0x6dd0, 8036}, - {0x6dd1, 2810}, - {0x6dd2, 2818}, - {0x6dd3, 8038}, - {0x6dd4, 8015}, - {0x6dd5, 8032}, - {0x6dd6, 8020}, - {0x6dd7, 8040}, - {0x6dd8, 2823}, - {0x6dd9, 2799}, - {0x6dda, 2821}, - {0x6ddb, 8025}, - {0x6ddc, 8023}, - {0x6ddd, 8024}, - {0x6dde, 2812}, - {0x6ddf, 8019}, - {0x6de0, 8018}, - {0x6de1, 2801}, - {0x6de2, 8012}, - {0x6de3, 8042}, - {0x6de4, 2803}, - {0x6de5, 8022}, - {0x6de6, 2833}, - {0x6de8, 2827}, - {0x6de9, 8011}, - {0x6dea, 2824}, - {0x6deb, 2822}, - {0x6dec, 2831}, - {0x6ded, 8029}, - {0x6dee, 2826}, - {0x6def, 7426}, - {0x6df0, 8030}, - {0x6df1, 2825}, - {0x6df2, 8037}, - {0x6df3, 2798}, - {0x6df4, 8026}, - {0x6df5, 2816}, - {0x6df6, 8014}, - {0x6df7, 2815}, - {0x6df9, 2813}, - {0x6dfa, 2805}, - {0x6dfb, 2804}, - {0x6dfc, 8639}, - {0x6dfd, 8039}, - {0x6e00, 8016}, - {0x6e03, 8660}, - {0x6e05, 2806}, - {0x6e19, 3265}, - {0x6e1a, 2819}, - {0x6e1b, 3247}, - {0x6e1c, 8654}, - {0x6e1d, 3261}, - {0x6e1f, 8642}, - {0x6e20, 3244}, - {0x6e21, 3240}, - {0x6e22, 8672}, - {0x6e23, 3246}, - {0x6e24, 3250}, - {0x6e25, 3245}, - {0x6e26, 3254}, - {0x6e27, 8676}, - {0x6e28, 8667}, - {0x6e2b, 8649}, - {0x6e2c, 3259}, - {0x6e2d, 3253}, - {0x6e2e, 8661}, - {0x6e2f, 3237}, - {0x6e30, 8673}, - {0x6e31, 8666}, - {0x6e32, 3241}, - {0x6e33, 8655}, - {0x6e34, 3256}, - {0x6e35, 8684}, - {0x6e36, 8685}, - {0x6e38, 3238}, - {0x6e39, 8671}, - {0x6e3a, 3258}, - {0x6e3b, 8659}, - {0x6e3c, 8645}, - {0x6e3d, 8646}, - {0x6e3e, 3262}, - {0x6e3f, 8650}, - {0x6e40, 8657}, - {0x6e41, 8651}, - {0x6e43, 3260}, - {0x6e44, 3268}, - {0x6e45, 8647}, - {0x6e46, 8640}, - {0x6e47, 8641}, - {0x6e49, 8643}, - {0x6e4a, 3243}, - {0x6e4b, 8656}, - {0x6e4d, 3257}, - {0x6e4e, 3266}, - {0x6e51, 8658}, - {0x6e52, 8682}, - {0x6e53, 8674}, - {0x6e54, 3239}, - {0x6e55, 8680}, - {0x6e56, 3251}, - {0x6e58, 3249}, - {0x6e5a, 8686}, - {0x6e5b, 3248}, - {0x6e5c, 8664}, - {0x6e5d, 8652}, - {0x6e5e, 8662}, - {0x6e5f, 3271}, - {0x6e60, 8668}, - {0x6e61, 8665}, - {0x6e62, 8648}, - {0x6e63, 3267}, - {0x6e64, 8678}, - {0x6e65, 8675}, - {0x6e66, 8683}, - {0x6e67, 3242}, - {0x6e68, 8663}, - {0x6e69, 3270}, - {0x6e6b, 8670}, - {0x6e6e, 3252}, - {0x6e6f, 3255}, - {0x6e71, 8669}, - {0x6e72, 3269}, - {0x6e73, 8653}, - {0x6e74, 8009}, - {0x6e77, 8679}, - {0x6e78, 8677}, - {0x6e79, 8681}, - {0x6e88, 8644}, - {0x6e89, 3264}, - {0x6e8d, 9324}, - {0x6e8e, 9323}, - {0x6e8f, 9297}, - {0x6e90, 3669}, - {0x6e92, 9322}, - {0x6e93, 9300}, - {0x6e94, 9301}, - {0x6e96, 3679}, - {0x6e97, 9331}, - {0x6e98, 3674}, - {0x6e99, 9321}, - {0x6e9b, 9294}, - {0x6e9c, 3680}, - {0x6e9d, 3670}, - {0x6e9e, 9309}, - {0x6e9f, 9299}, - {0x6ea0, 9302}, - {0x6ea1, 9326}, - {0x6ea2, 3664}, - {0x6ea3, 9333}, - {0x6ea4, 9325}, - {0x6ea5, 3673}, - {0x6ea6, 9314}, - {0x6ea7, 3684}, - {0x6eaa, 3683}, - {0x6eab, 3677}, - {0x6eae, 9332}, - {0x6eaf, 3665}, - {0x6eb0, 9312}, - {0x6eb1, 9303}, - {0x6eb2, 9316}, - {0x6eb3, 9328}, - {0x6eb4, 3685}, - {0x6eb6, 3667}, - {0x6eb7, 9311}, - {0x6eb9, 9304}, - {0x6eba, 3676}, - {0x6ebc, 3675}, - {0x6ebd, 9307}, - {0x6ebe, 9317}, - {0x6ebf, 9327}, - {0x6ec0, 9298}, - {0x6ec1, 9308}, - {0x6ec2, 3668}, - {0x6ec3, 9318}, - {0x6ec4, 3681}, - {0x6ec5, 3672}, - {0x6ec6, 9305}, - {0x6ec7, 3671}, - {0x6ec8, 9296}, - {0x6ec9, 9310}, - {0x6eca, 9330}, - {0x6ecb, 3263}, - {0x6ecc, 4127}, - {0x6ecd, 9313}, - {0x6ece, 9963}, - {0x6ecf, 9315}, - {0x6ed0, 9329}, - {0x6ed1, 3678}, - {0x6ed2, 9306}, - {0x6ed3, 3666}, - {0x6ed4, 3682}, - {0x6ed5, 4506}, - {0x6ed6, 9295}, - {0x6ed8, 9320}, - {0x6edc, 9319}, - {0x6ee9, 0}, - {0x6eeb, 9991}, - {0x6eec, 4124}, - {0x6eed, 9980}, - {0x6eee, 9985}, - {0x6eef, 4113}, - {0x6ef1, 9965}, - {0x6ef2, 4126}, - {0x6ef4, 4104}, - {0x6ef5, 9964}, - {0x6ef6, 9997}, - {0x6ef7, 4128}, - {0x6ef8, 9968}, - {0x6ef9, 9984}, - {0x6efb, 9970}, - {0x6efd, 9996}, - {0x6efe, 4102}, - {0x6eff, 4112}, - {0x6f01, 4125}, - {0x6f02, 4110}, - {0x6f03, 9966}, - {0x6f05, 9995}, - {0x6f06, 4114}, - {0x6f07, 9992}, - {0x6f09, 9972}, - {0x6f0a, 9981}, - {0x6f0e, 9993}, - {0x6f0f, 4109}, - {0x6f12, 9979}, - {0x6f13, 4103}, - {0x6f14, 4101}, - {0x6f15, 4119}, - {0x6f18, 9977}, - {0x6f19, 9974}, - {0x6f1a, 9975}, - {0x6f1c, 9999}, - {0x6f20, 4107}, - {0x6f22, 4111}, - {0x6f23, 4118}, - {0x6f25, 9967}, - {0x6f27, 9976}, - {0x6f29, 4105}, - {0x6f2a, 4123}, - {0x6f2b, 4120}, - {0x6f2c, 4108}, - {0x6f2d, 9986}, - {0x6f2e, 9971}, - {0x6f2f, 4121}, - {0x6f30, 9988}, - {0x6f31, 4115}, - {0x6f32, 4117}, - {0x6f33, 4100}, - {0x6f35, 9990}, - {0x6f36, 9982}, - {0x6f37, 9969}, - {0x6f38, 4116}, - {0x6f39, 9998}, - {0x6f3b, 9978}, - {0x6f3c, 9989}, - {0x6f3e, 4106}, - {0x6f3f, 4489}, - {0x6f40, 9987}, - {0x6f43, 9994}, - {0x6f4e, 9973}, - {0x6f51, 4492}, - {0x6f54, 4494}, - {0x6f58, 4505}, - {0x6f5b, 4497}, - {0x6f5f, 4509}, - {0x6f60, 4508}, - {0x6f64, 4503}, - {0x6f66, 4493}, - {0x6f6d, 4496}, - {0x6f6e, 4499}, - {0x6f6f, 4507}, - {0x6f70, 4502}, - {0x6f73, 9983}, - {0x6f78, 4498}, - {0x6f7a, 4501}, - {0x6f7c, 4490}, - {0x6f80, 5116}, - {0x6f84, 4491}, - {0x6f86, 4495}, - {0x6f88, 4122}, - {0x6f8e, 4500}, - {0x6f97, 4504}, - {0x6fa0, 4843}, - {0x6fa1, 4833}, - {0x6fa4, 4835}, - {0x6fa6, 4842}, - {0x6fa7, 4837}, - {0x6fb1, 4832}, - {0x6fb3, 4838}, - {0x6fb4, 4844}, - {0x6fb6, 4841}, - {0x6fb9, 4840}, - {0x6fc0, 4839}, - {0x6fc1, 4836}, - {0x6fc2, 4831}, - {0x6fc3, 4834}, - {0x6fd5, 5120}, - {0x6fd8, 5108}, - {0x6fdb, 5112}, - {0x6fdf, 5110}, - {0x6fe0, 5111}, - {0x6fe1, 5118}, - {0x6fe4, 5113}, - {0x6fe9, 5119}, - {0x6feb, 5114}, - {0x6fec, 5117}, - {0x6fee, 5121}, - {0x6fef, 5115}, - {0x6ff0, 5122}, - {0x6ff1, 5109}, - {0x6ffa, 5355}, - {0x6ffe, 5353}, - {0x7006, 5354}, - {0x7009, 5351}, - {0x700b, 5352}, - {0x700d, 0}, - {0x700f, 5357}, - {0x7011, 5356}, - {0x7015, 5519}, - {0x7018, 5520}, - {0x701a, 5517}, - {0x701b, 5514}, - {0x701d, 5518}, - {0x701f, 5515}, - {0x7022, 0}, - {0x7023, 1}, - {0x7028, 5516}, - {0x7030, 5661}, - {0x7032, 5662}, - {0x703e, 5660}, - {0x7044, 0}, - {0x7046, 0}, - {0x7049, 0}, - {0x704c, 5754}, - {0x7051, 5832}, - {0x7056, 0}, - {0x7057, 1}, - {0x7058, 5833}, - {0x705e, 5922}, - {0x7063, 5956}, - {0x7064, 5970}, - {0x706a, 0}, - {0x706b, 742}, - {0x7070, 1010}, - {0x7071, 6154}, - {0x7074, 6339}, - {0x7076, 1254}, - {0x7078, 1257}, - {0x707a, 6340}, - {0x707c, 1255}, - {0x707d, 1256}, - {0x7082, 6647}, - {0x7083, 6649}, - {0x7084, 6644}, - {0x7085, 6641}, - {0x7086, 6643}, - {0x708a, 1603}, - {0x708e, 1601}, - {0x7091, 6645}, - {0x7092, 1602}, - {0x7093, 6642}, - {0x7094, 6639}, - {0x7095, 1600}, - {0x7096, 6646}, - {0x7098, 6640}, - {0x7099, 1604}, - {0x709a, 6648}, - {0x709f, 7014}, - {0x70a1, 7018}, - {0x70a4, 1936}, - {0x70a9, 7021}, - {0x70ab, 1928}, - {0x70ac, 1931}, - {0x70ad, 1933}, - {0x70ae, 1935}, - {0x70af, 1932}, - {0x70b0, 7017}, - {0x70b1, 7016}, - {0x70b3, 1930}, - {0x70b4, 7019}, - {0x70b5, 7020}, - {0x70b7, 7013}, - {0x70b8, 1934}, - {0x70ba, 1929}, - {0x70be, 7015}, - {0x70c5, 7463}, - {0x70c6, 7464}, - {0x70c7, 7465}, - {0x70c8, 2337}, - {0x70ca, 2333}, - {0x70cb, 7454}, - {0x70cd, 7462}, - {0x70ce, 7467}, - {0x70cf, 2338}, - {0x70d1, 7452}, - {0x70d2, 7458}, - {0x70d3, 7451}, - {0x70d4, 7461}, - {0x70d6, 0}, - {0x70d7, 7457}, - {0x70d8, 2334}, - {0x70d9, 2336}, - {0x70da, 7466}, - {0x70dc, 7450}, - {0x70dd, 7453}, - {0x70de, 7459}, - {0x70e0, 7460}, - {0x70e1, 7468}, - {0x70e2, 7456}, - {0x70e4, 2335}, - {0x70ef, 2838}, - {0x70f0, 8050}, - {0x70f3, 8052}, - {0x70f4, 8048}, - {0x70f6, 8060}, - {0x70f7, 8046}, - {0x70f8, 8059}, - {0x70f9, 2834}, - {0x70fa, 8044}, - {0x70fb, 8690}, - {0x70fc, 8054}, - {0x70fd, 2837}, - {0x70ff, 8055}, - {0x7100, 8058}, - {0x7102, 8062}, - {0x7104, 8051}, - {0x7106, 8056}, - {0x7109, 2835}, - {0x710a, 2836}, - {0x710b, 8061}, - {0x710c, 8049}, - {0x710d, 8045}, - {0x710e, 8063}, - {0x7110, 8053}, - {0x7113, 8057}, - {0x7117, 8047}, - {0x7119, 3272}, - {0x711a, 3273}, - {0x711b, 8700}, - {0x711c, 3279}, - {0x711e, 8688}, - {0x711f, 8697}, - {0x7120, 8687}, - {0x7121, 3276}, - {0x7122, 8695}, - {0x7123, 8693}, - {0x7125, 8694}, - {0x7126, 3274}, - {0x7128, 8698}, - {0x712e, 8691}, - {0x712f, 8689}, - {0x7130, 3275}, - {0x7131, 8692}, - {0x7132, 8696}, - {0x7136, 3277}, - {0x713a, 8699}, - {0x7141, 9339}, - {0x7142, 9346}, - {0x7143, 9348}, - {0x7144, 9354}, - {0x7146, 3698}, - {0x7147, 9334}, - {0x7149, 3690}, - {0x714b, 9349}, - {0x714c, 3695}, - {0x714d, 9355}, - {0x714e, 3686}, - {0x7150, 9352}, - {0x7152, 9336}, - {0x7153, 9353}, - {0x7154, 9335}, - {0x7156, 3700}, - {0x7158, 9347}, - {0x7159, 3687}, - {0x715a, 9356}, - {0x715c, 3692}, - {0x715d, 9340}, - {0x715e, 3697}, - {0x715f, 9351}, - {0x7160, 9338}, - {0x7161, 9345}, - {0x7162, 9341}, - {0x7163, 9337}, - {0x7164, 3689}, - {0x7165, 3696}, - {0x7166, 3694}, - {0x7167, 3691}, - {0x7168, 3699}, - {0x7169, 3688}, - {0x716a, 9344}, - {0x716c, 3693}, - {0x716e, 3278}, - {0x7170, 9350}, - {0x7172, 9342}, - {0x7178, 9343}, - {0x717d, 4131}, - {0x7184, 4133}, - {0x718a, 4132}, - {0x7192, 4134}, - {0x7194, 4129}, - {0x7199, 4130}, - {0x719f, 4510}, - {0x71a8, 4513}, - {0x71ac, 4511}, - {0x71b1, 4512}, - {0x71b9, 4851}, - {0x71be, 4845}, - {0x71c1, 0}, - {0x71c3, 4855}, - {0x71c4, 4856}, - {0x71c8, 4849}, - {0x71c9, 4846}, - {0x71ce, 4852}, - {0x71d0, 4847}, - {0x71d2, 4848}, - {0x71d5, 4850}, - {0x71d9, 4853}, - {0x71db, 0}, - {0x71dc, 4854}, - {0x71df, 5124}, - {0x71e0, 5131}, - {0x71e5, 5127}, - {0x71e6, 5126}, - {0x71e7, 5123}, - {0x71ec, 5129}, - {0x71ed, 5128}, - {0x71ee, 5125}, - {0x71f4, 5130}, - {0x71f8, 5361}, - {0x71fb, 5358}, - {0x71fc, 5359}, - {0x71fe, 5360}, - {0x7206, 5521}, - {0x720d, 5522}, - {0x7210, 5663}, - {0x7214, 0}, - {0x721b, 5755}, - {0x721f, 0}, - {0x7228, 5990}, - {0x722a, 743}, - {0x722c, 1605}, - {0x722d, 1606}, - {0x7230, 1937}, - {0x7235, 5132}, - {0x7236, 744}, - {0x7238, 1607}, - {0x7239, 2339}, - {0x723a, 3701}, - {0x723b, 745}, - {0x723d, 2839}, - {0x723e, 4135}, - {0x723f, 6029}, - {0x7241, 7022}, - {0x7242, 7469}, - {0x7246, 5133}, - {0x7247, 746}, - {0x7248, 1608}, - {0x7249, 7023}, - {0x724a, 7024}, - {0x724b, 8701}, - {0x724c, 3280}, - {0x724f, 9357}, - {0x7252, 3702}, - {0x7256, 4514}, - {0x7258, 5523}, - {0x7259, 747}, - {0x725a, 8702}, - {0x725b, 748}, - {0x725d, 1012}, - {0x725e, 6155}, - {0x725f, 1011}, - {0x7260, 1260}, - {0x7261, 1259}, - {0x7262, 1258}, - {0x7263, 6341}, - {0x7267, 1609}, - {0x7269, 1610}, - {0x726a, 6650}, - {0x726c, 7025}, - {0x726e, 7028}, - {0x726f, 1939}, - {0x7270, 7026}, - {0x7272, 1938}, - {0x7273, 7027}, - {0x7274, 1940}, - {0x7276, 7472}, - {0x7277, 7471}, - {0x7278, 7470}, - {0x7279, 2340}, - {0x727b, 8065}, - {0x727c, 8066}, - {0x727d, 2840}, - {0x727e, 8064}, - {0x727f, 8067}, - {0x7280, 3282}, - {0x7281, 2841}, - {0x7284, 3281}, - {0x7285, 8706}, - {0x7286, 8705}, - {0x7288, 8703}, - {0x7289, 8704}, - {0x728b, 8707}, - {0x728c, 9359}, - {0x728d, 9358}, - {0x728e, 9362}, - {0x7290, 9361}, - {0x7291, 9360}, - {0x7292, 4136}, - {0x7296, 4137}, - {0x729b, 4515}, - {0x729e, 0}, - {0x72a2, 5524}, - {0x72a6, 0}, - {0x72a7, 5756}, - {0x72ac, 749}, - {0x72ae, 6063}, - {0x72af, 853}, - {0x72b0, 6064}, - {0x72b4, 6156}, - {0x72b5, 6157}, - {0x72ba, 6347}, - {0x72bd, 6343}, - {0x72bf, 6342}, - {0x72c0, 1611}, - {0x72c1, 6346}, - {0x72c2, 1262}, - {0x72c3, 6344}, - {0x72c4, 1261}, - {0x72c5, 6348}, - {0x72c6, 6345}, - {0x72c9, 6654}, - {0x72ca, 7029}, - {0x72cb, 6652}, - {0x72cc, 6659}, - {0x72ce, 1612}, - {0x72d0, 1615}, - {0x72d1, 6660}, - {0x72d2, 6656}, - {0x72d4, 6657}, - {0x72d6, 6651}, - {0x72d7, 1614}, - {0x72d8, 6653}, - {0x72d9, 1613}, - {0x72da, 6658}, - {0x72dc, 6655}, - {0x72df, 7033}, - {0x72e0, 1942}, - {0x72e1, 1943}, - {0x72e3, 7036}, - {0x72e4, 7030}, - {0x72e6, 7035}, - {0x72e8, 7031}, - {0x72e9, 1941}, - {0x72ea, 7034}, - {0x72eb, 7032}, - {0x72f3, 7478}, - {0x72f4, 7475}, - {0x72f6, 7477}, - {0x72f7, 2345}, - {0x72f8, 2344}, - {0x72f9, 2342}, - {0x72fa, 7474}, - {0x72fb, 7479}, - {0x72fc, 2341}, - {0x72fd, 2343}, - {0x72fe, 7476}, - {0x72ff, 8075}, - {0x7300, 7473}, - {0x7301, 7480}, - {0x7307, 8070}, - {0x7308, 8074}, - {0x730a, 8073}, - {0x730b, 8709}, - {0x730c, 8720}, - {0x730f, 8076}, - {0x7311, 8071}, - {0x7312, 8708}, - {0x7313, 2845}, - {0x7316, 2844}, - {0x7317, 8069}, - {0x7318, 8072}, - {0x7319, 2846}, - {0x731b, 2843}, - {0x731c, 2842}, - {0x731d, 8068}, - {0x731e, 8077}, - {0x7322, 8711}, - {0x7323, 8718}, - {0x7325, 3284}, - {0x7326, 8717}, - {0x7327, 8714}, - {0x7329, 3286}, - {0x732d, 8716}, - {0x7330, 8710}, - {0x7331, 8712}, - {0x7332, 8715}, - {0x7333, 8713}, - {0x7334, 3285}, - {0x7335, 8719}, - {0x7336, 3283}, - {0x7337, 3703}, - {0x733a, 9366}, - {0x733b, 9365}, - {0x733c, 9363}, - {0x733e, 3706}, - {0x733f, 3705}, - {0x7340, 9367}, - {0x7342, 9364}, - {0x7344, 4138}, - {0x7345, 3704}, - {0x7349, 9369}, - {0x734a, 9368}, - {0x734e, 4516}, - {0x7350, 4139}, - {0x7357, 4517}, - {0x735f, 0}, - {0x7360, 1}, - {0x7367, 0}, - {0x7368, 4857}, - {0x736f, 0}, - {0x7370, 5134}, - {0x7372, 5135}, - {0x7375, 5363}, - {0x7377, 5362}, - {0x7378, 5525}, - {0x737a, 5526}, - {0x737b, 5664}, - {0x7380, 5834}, - {0x7384, 854}, - {0x7385, 7037}, - {0x7386, 2346}, - {0x7387, 2847}, - {0x7388, 8078}, - {0x7389, 855}, - {0x738a, 6065}, - {0x738b, 750}, - {0x738e, 6158}, - {0x7392, 6353}, - {0x7393, 6351}, - {0x7394, 6352}, - {0x7395, 6349}, - {0x7396, 1263}, - {0x7397, 6350}, - {0x739d, 6668}, - {0x739f, 1618}, - {0x73a0, 6666}, - {0x73a1, 6662}, - {0x73a2, 6665}, - {0x73a4, 6661}, - {0x73a5, 1620}, - {0x73a6, 6664}, - {0x73a8, 1617}, - {0x73a9, 1616}, - {0x73ab, 1619}, - {0x73ac, 6667}, - {0x73ad, 6663}, - {0x73b2, 1947}, - {0x73b3, 1950}, - {0x73b4, 7045}, - {0x73b5, 7044}, - {0x73b6, 7043}, - {0x73b7, 1944}, - {0x73b8, 7052}, - {0x73b9, 7042}, - {0x73bb, 1946}, - {0x73bc, 7485}, - {0x73be, 7049}, - {0x73bf, 7047}, - {0x73c0, 1949}, - {0x73c2, 7039}, - {0x73c3, 7050}, - {0x73c5, 7041}, - {0x73c6, 7051}, - {0x73c7, 7048}, - {0x73c8, 7040}, - {0x73ca, 1945}, - {0x73cb, 7053}, - {0x73cc, 7038}, - {0x73cd, 1948}, - {0x73d2, 7490}, - {0x73d3, 7481}, - {0x73d4, 7492}, - {0x73d6, 7484}, - {0x73d7, 7495}, - {0x73d8, 7496}, - {0x73d9, 7482}, - {0x73da, 7494}, - {0x73db, 7491}, - {0x73dc, 7489}, - {0x73dd, 7493}, - {0x73de, 2352}, - {0x73e0, 2350}, - {0x73e3, 7487}, - {0x73e5, 7483}, - {0x73e7, 7486}, - {0x73e8, 7497}, - {0x73e9, 7488}, - {0x73ea, 2351}, - {0x73eb, 7046}, - {0x73ed, 2347}, - {0x73ee, 2349}, - {0x73f4, 8092}, - {0x73f5, 8081}, - {0x73f6, 8079}, - {0x73f8, 8080}, - {0x73fa, 8087}, - {0x73fc, 8088}, - {0x73fd, 8084}, - {0x73fe, 2852}, - {0x73ff, 8089}, - {0x7400, 8086}, - {0x7401, 8083}, - {0x7403, 2850}, - {0x7404, 8082}, - {0x7405, 2848}, - {0x7406, 2851}, - {0x7407, 8085}, - {0x7408, 8093}, - {0x7409, 2348}, - {0x740a, 2849}, - {0x740b, 8091}, - {0x740c, 8090}, - {0x740d, 2853}, - {0x7416, 8725}, - {0x741a, 8726}, - {0x741b, 3296}, - {0x741d, 8732}, - {0x741f, 0}, - {0x7420, 8734}, - {0x7421, 8727}, - {0x7422, 3290}, - {0x7423, 8731}, - {0x7424, 8730}, - {0x7425, 3291}, - {0x7426, 3297}, - {0x7428, 3298}, - {0x7429, 8733}, - {0x742a, 3288}, - {0x742b, 8724}, - {0x742c, 8722}, - {0x742d, 8728}, - {0x742e, 8721}, - {0x742f, 3295}, - {0x7430, 8723}, - {0x7431, 8729}, - {0x7432, 8735}, - {0x7433, 3289}, - {0x7434, 3294}, - {0x7435, 3292}, - {0x7436, 3293}, - {0x743a, 3287}, - {0x743f, 3713}, - {0x7440, 9376}, - {0x7441, 3712}, - {0x7442, 9380}, - {0x7444, 9370}, - {0x7446, 9381}, - {0x744a, 9371}, - {0x744b, 9372}, - {0x744d, 9382}, - {0x744e, 9379}, - {0x744f, 9377}, - {0x7450, 9378}, - {0x7451, 9374}, - {0x7452, 9373}, - {0x7454, 9383}, - {0x7455, 3709}, - {0x7457, 9375}, - {0x7459, 3714}, - {0x745a, 3708}, - {0x745b, 3715}, - {0x745c, 3716}, - {0x745e, 3711}, - {0x745f, 3710}, - {0x7463, 4141}, - {0x7464, 4140}, - {0x7469, 4518}, - {0x746a, 4142}, - {0x746d, 4144}, - {0x746f, 3707}, - {0x7470, 4143}, - {0x747e, 4521}, - {0x7480, 4522}, - {0x7483, 4520}, - {0x748a, 0}, - {0x748b, 4519}, - {0x7498, 4860}, - {0x749c, 4858}, - {0x749e, 4862}, - {0x749f, 4861}, - {0x74a3, 4859}, - {0x74a6, 5138}, - {0x74a7, 5364}, - {0x74a8, 5139}, - {0x74a9, 5136}, - {0x74b0, 5137}, - {0x74bd, 5527}, - {0x74bf, 5365}, - {0x74ca, 5528}, - {0x74cf, 5665}, - {0x74d4, 5758}, - {0x74d6, 5757}, - {0x74da, 5886}, - {0x74dc, 856}, - {0x74dd, 6669}, - {0x74de, 7498}, - {0x74df, 7499}, - {0x74e0, 2854}, - {0x74e1, 9384}, - {0x74e2, 4863}, - {0x74e3, 5529}, - {0x74e4, 5835}, - {0x74e6, 857}, - {0x74e8, 6670}, - {0x74e9, 288}, - {0x74ec, 7054}, - {0x74ee, 7055}, - {0x74f4, 7500}, - {0x74f5, 7501}, - {0x74f6, 2855}, - {0x74f7, 2856}, - {0x74fb, 8736}, - {0x74fd, 9387}, - {0x74fe, 9386}, - {0x74ff, 9385}, - {0x7503, 0}, - {0x7504, 4145}, - {0x750c, 4864}, - {0x750d, 4865}, - {0x7511, 0}, - {0x7512, 1}, - {0x7515, 5366}, - {0x7518, 858}, - {0x751a, 1951}, - {0x751c, 2857}, - {0x751d, 9388}, - {0x751f, 859}, - {0x7521, 7502}, - {0x7522, 2858}, - {0x7525, 3299}, - {0x7526, 3300}, - {0x7528, 860}, - {0x7529, 861}, - {0x752a, 6159}, - {0x752b, 1265}, - {0x752c, 1264}, - {0x752d, 1952}, - {0x752e, 7056}, - {0x752f, 8737}, - {0x7530, 862}, - {0x7531, 863}, - {0x7532, 864}, - {0x7533, 865}, - {0x7537, 1266}, - {0x7538, 1267}, - {0x7539, 6355}, - {0x753a, 6354}, - {0x753d, 1621}, - {0x753e, 6673}, - {0x753f, 6671}, - {0x7540, 6672}, - {0x7547, 7057}, - {0x7548, 7058}, - {0x754b, 1956}, - {0x754c, 1954}, - {0x754e, 1955}, - {0x754f, 1953}, - {0x7554, 2353}, - {0x7559, 2357}, - {0x755a, 2356}, - {0x755b, 7503}, - {0x755c, 2355}, - {0x755d, 2354}, - {0x755f, 7504}, - {0x7562, 2861}, - {0x7563, 8095}, - {0x7564, 8094}, - {0x7565, 2859}, - {0x7566, 2860}, - {0x756a, 3302}, - {0x756b, 3301}, - {0x756c, 8739}, - {0x756f, 8738}, - {0x7570, 2862}, - {0x7576, 3717}, - {0x7577, 9390}, - {0x7578, 3718}, - {0x7579, 9389}, - {0x757f, 4523}, - {0x7586, 5531}, - {0x7587, 5530}, - {0x758a, 5836}, - {0x758b, 866}, - {0x758c, 6674}, - {0x758f, 2863}, - {0x7591, 4146}, - {0x7592, 558}, - {0x7594, 6356}, - {0x7595, 6357}, - {0x7598, 6675}, - {0x7599, 1623}, - {0x759a, 1624}, - {0x759d, 1622}, - {0x75a2, 1960}, - {0x75a3, 1961}, - {0x75a4, 1958}, - {0x75a5, 1959}, - {0x75a7, 7059}, - {0x75aa, 7060}, - {0x75ab, 1957}, - {0x75b0, 7505}, - {0x75b2, 2361}, - {0x75b3, 2362}, - {0x75b5, 2866}, - {0x75b6, 7511}, - {0x75b8, 2367}, - {0x75b9, 2365}, - {0x75ba, 7512}, - {0x75bb, 7507}, - {0x75bc, 2364}, - {0x75bd, 2363}, - {0x75be, 2358}, - {0x75bf, 7510}, - {0x75c0, 7509}, - {0x75c1, 7506}, - {0x75c2, 2366}, - {0x75c4, 7508}, - {0x75c5, 2359}, - {0x75c7, 2360}, - {0x75ca, 2867}, - {0x75cb, 8099}, - {0x75cc, 8100}, - {0x75cd, 2868}, - {0x75ce, 8096}, - {0x75cf, 8098}, - {0x75d0, 8102}, - {0x75d1, 8101}, - {0x75d2, 8097}, - {0x75d4, 2864}, - {0x75d5, 2865}, - {0x75d7, 8747}, - {0x75d8, 3307}, - {0x75d9, 3306}, - {0x75da, 8741}, - {0x75db, 3304}, - {0x75dd, 8744}, - {0x75de, 3308}, - {0x75df, 8745}, - {0x75e0, 3309}, - {0x75e1, 8742}, - {0x75e2, 3303}, - {0x75e3, 3305}, - {0x75e4, 8746}, - {0x75e6, 8743}, - {0x75e7, 8740}, - {0x75ed, 9403}, - {0x75ef, 9392}, - {0x75f0, 3720}, - {0x75f1, 3723}, - {0x75f2, 3722}, - {0x75f3, 3727}, - {0x75f4, 3726}, - {0x75f5, 9404}, - {0x75f6, 9402}, - {0x75f7, 9395}, - {0x75f8, 9399}, - {0x75f9, 9398}, - {0x75fa, 3724}, - {0x75fb, 9401}, - {0x75fc, 9397}, - {0x75fd, 9405}, - {0x75fe, 9396}, - {0x75ff, 3725}, - {0x7600, 3719}, - {0x7601, 3721}, - {0x7603, 9394}, - {0x7609, 4150}, - {0x760b, 4149}, - {0x760d, 4148}, - {0x760f, 9393}, - {0x7610, 9400}, - {0x7613, 4151}, - {0x761f, 4526}, - {0x7620, 4524}, - {0x7621, 4529}, - {0x7622, 4530}, - {0x7624, 4527}, - {0x7626, 4528}, - {0x7627, 4147}, - {0x7629, 4525}, - {0x7634, 4866}, - {0x7638, 4867}, - {0x763a, 4868}, - {0x7642, 5141}, - {0x7646, 5140}, - {0x7649, 0}, - {0x764c, 5142}, - {0x7652, 5369}, - {0x7656, 5367}, - {0x7658, 5368}, - {0x765f, 5532}, - {0x7661, 5533}, - {0x7662, 5666}, - {0x7665, 5667}, - {0x7669, 5759}, - {0x766c, 5838}, - {0x766e, 5837}, - {0x7671, 5923}, - {0x7672, 5924}, - {0x7676, 559}, - {0x7678, 1962}, - {0x7679, 7061}, - {0x767b, 3310}, - {0x767c, 3311}, - {0x767d, 867}, - {0x767e, 1013}, - {0x767f, 6160}, - {0x7681, 6358}, - {0x7682, 1268}, - {0x7684, 1625}, - {0x7686, 1963}, - {0x7687, 1964}, - {0x7688, 1965}, - {0x7689, 8104}, - {0x768a, 7513}, - {0x768b, 2368}, - {0x768e, 2869}, - {0x768f, 8103}, - {0x7692, 8749}, - {0x7693, 3313}, - {0x7695, 8748}, - {0x7696, 3312}, - {0x7699, 9406}, - {0x769a, 4531}, - {0x769d, 0}, - {0x769e, 1}, - {0x76ae, 868}, - {0x76af, 6676}, - {0x76b0, 2369}, - {0x76b4, 3314}, - {0x76b5, 9407}, - {0x76ba, 4532}, - {0x76bf, 869}, - {0x76c2, 1626}, - {0x76c3, 1968}, - {0x76c4, 7062}, - {0x76c5, 1969}, - {0x76c6, 1967}, - {0x76c8, 1966}, - {0x76c9, 7514}, - {0x76ca, 2370}, - {0x76cd, 2371}, - {0x76ce, 2372}, - {0x76d2, 2871}, - {0x76d3, 8105}, - {0x76d4, 2870}, - {0x76da, 8750}, - {0x76db, 2872}, - {0x76dc, 3315}, - {0x76dd, 9408}, - {0x76de, 3728}, - {0x76df, 3729}, - {0x76e1, 4152}, - {0x76e3, 4153}, - {0x76e4, 4533}, - {0x76e5, 4870}, - {0x76e7, 4869}, - {0x76ea, 5143}, - {0x76ee, 870}, - {0x76ef, 1269}, - {0x76f0, 6679}, - {0x76f1, 6678}, - {0x76f2, 1627}, - {0x76f3, 6677}, - {0x76f4, 1628}, - {0x76f5, 6680}, - {0x76f7, 7068}, - {0x76f8, 1972}, - {0x76f9, 1971}, - {0x76fa, 7070}, - {0x76fb, 7069}, - {0x76fc, 1976}, - {0x76fe, 1975}, - {0x7701, 1970}, - {0x7703, 7064}, - {0x7704, 7065}, - {0x7705, 7066}, - {0x7707, 1977}, - {0x7708, 7063}, - {0x7709, 1973}, - {0x770a, 7067}, - {0x770b, 1974}, - {0x770f, 0}, - {0x7710, 7517}, - {0x7711, 7521}, - {0x7712, 7519}, - {0x7713, 7518}, - {0x7715, 7522}, - {0x7719, 7523}, - {0x771a, 7524}, - {0x771b, 7516}, - {0x771d, 7515}, - {0x771f, 2374}, - {0x7720, 2375}, - {0x7722, 7525}, - {0x7723, 7520}, - {0x7725, 8114}, - {0x7727, 7526}, - {0x7728, 2376}, - {0x7729, 2373}, - {0x772d, 8108}, - {0x772f, 8107}, - {0x7731, 8109}, - {0x7732, 8110}, - {0x7733, 8112}, - {0x7734, 8111}, - {0x7735, 8116}, - {0x7736, 2876}, - {0x7737, 2873}, - {0x7738, 2877}, - {0x7739, 8106}, - {0x773a, 2878}, - {0x773b, 8115}, - {0x773c, 2875}, - {0x773d, 8113}, - {0x773e, 2874}, - {0x7744, 8753}, - {0x7745, 8755}, - {0x7746, 8751}, - {0x7747, 8752}, - {0x774a, 8756}, - {0x774b, 8758}, - {0x774c, 8759}, - {0x774d, 8754}, - {0x774e, 8757}, - {0x774f, 3316}, - {0x7752, 9412}, - {0x7754, 9417}, - {0x7755, 9409}, - {0x7756, 9413}, - {0x7759, 9418}, - {0x775a, 9414}, - {0x775b, 3730}, - {0x775c, 3738}, - {0x775e, 3733}, - {0x775f, 9410}, - {0x7760, 9411}, - {0x7761, 4157}, - {0x7762, 3741}, - {0x7763, 3734}, - {0x7765, 3739}, - {0x7766, 3732}, - {0x7767, 9416}, - {0x7768, 3740}, - {0x7769, 9415}, - {0x776a, 3736}, - {0x776b, 3731}, - {0x776c, 3737}, - {0x776d, 9419}, - {0x7779, 3735}, - {0x777d, 4155}, - {0x777f, 4156}, - {0x7784, 4154}, - {0x7787, 4535}, - {0x778b, 4538}, - {0x778c, 4536}, - {0x778e, 4534}, - {0x7791, 4537}, - {0x779e, 4872}, - {0x779f, 4873}, - {0x77a0, 4871}, - {0x77a3, 0}, - {0x77a5, 4874}, - {0x77a7, 5148}, - {0x77aa, 5145}, - {0x77ac, 5147}, - {0x77ad, 5149}, - {0x77b0, 5146}, - {0x77b3, 5144}, - {0x77bb, 5372}, - {0x77bc, 5373}, - {0x77bd, 5370}, - {0x77bf, 5371}, - {0x77c7, 5534}, - {0x77ca, 0}, - {0x77cf, 0}, - {0x77d3, 5760}, - {0x77d7, 5925}, - {0x77d9, 0}, - {0x77da, 5971}, - {0x77db, 871}, - {0x77dc, 1978}, - {0x77de, 8760}, - {0x77e0, 9420}, - {0x77e2, 872}, - {0x77e3, 1270}, - {0x77e5, 1629}, - {0x77e7, 7071}, - {0x77e8, 7072}, - {0x77e9, 2377}, - {0x77ec, 8761}, - {0x77ed, 3317}, - {0x77ee, 3742}, - {0x77ef, 5150}, - {0x77f3, 873}, - {0x77f7, 6686}, - {0x77f8, 6681}, - {0x77f9, 6683}, - {0x77fa, 6685}, - {0x77fb, 6684}, - {0x77fc, 6682}, - {0x77fd, 1630}, - {0x7802, 1979}, - {0x7803, 7081}, - {0x7805, 7076}, - {0x7806, 7073}, - {0x7809, 7080}, - {0x780c, 1981}, - {0x780d, 1982}, - {0x780e, 7079}, - {0x780f, 7078}, - {0x7810, 7077}, - {0x7811, 7074}, - {0x7812, 7075}, - {0x7813, 7082}, - {0x7814, 1980}, - {0x781d, 2381}, - {0x781f, 2387}, - {0x7820, 2386}, - {0x7821, 7535}, - {0x7822, 7529}, - {0x7823, 7527}, - {0x7825, 2384}, - {0x7826, 8123}, - {0x7827, 2379}, - {0x7828, 7532}, - {0x7829, 7536}, - {0x782a, 7538}, - {0x782b, 7534}, - {0x782c, 7528}, - {0x782d, 2385}, - {0x782e, 7533}, - {0x782f, 7531}, - {0x7830, 2378}, - {0x7831, 7539}, - {0x7832, 2388}, - {0x7833, 7537}, - {0x7834, 2382}, - {0x7835, 7530}, - {0x7837, 2383}, - {0x7838, 2380}, - {0x7843, 2880}, - {0x7845, 8124}, - {0x7848, 8117}, - {0x7849, 8119}, - {0x784a, 8121}, - {0x784c, 8122}, - {0x784d, 8120}, - {0x784e, 2881}, - {0x7850, 8125}, - {0x7852, 8118}, - {0x785c, 8765}, - {0x785d, 3318}, - {0x785e, 8773}, - {0x7860, 8762}, - {0x7862, 8774}, - {0x7864, 8763}, - {0x7865, 8764}, - {0x7868, 8772}, - {0x7869, 8771}, - {0x786a, 8768}, - {0x786b, 2879}, - {0x786c, 3319}, - {0x786d, 8766}, - {0x786e, 8769}, - {0x786f, 3320}, - {0x7870, 8770}, - {0x7871, 8767}, - {0x7879, 9431}, - {0x787b, 9435}, - {0x787c, 3749}, - {0x787f, 3752}, - {0x7880, 9433}, - {0x7883, 9430}, - {0x7884, 9425}, - {0x7885, 9427}, - {0x7886, 9428}, - {0x7887, 9421}, - {0x7889, 3748}, - {0x788c, 3747}, - {0x788e, 3743}, - {0x788f, 9424}, - {0x7891, 3750}, - {0x7893, 3751}, - {0x7894, 9423}, - {0x7895, 9426}, - {0x7896, 9434}, - {0x7897, 3745}, - {0x7898, 3746}, - {0x7899, 9432}, - {0x789a, 9422}, - {0x789f, 4159}, - {0x78a1, 9429}, - {0x78a3, 4163}, - {0x78a7, 4160}, - {0x78a9, 4162}, - {0x78b0, 3744}, - {0x78b3, 4161}, - {0x78ba, 4541}, - {0x78bc, 4545}, - {0x78be, 4543}, - {0x78c1, 4158}, - {0x78c4, 0}, - {0x78c5, 4540}, - {0x78ca, 4542}, - {0x78cb, 4539}, - {0x78d0, 4546}, - {0x78d5, 4544}, - {0x78da, 4876}, - {0x78e0, 0}, - {0x78e2, 0}, - {0x78e7, 4878}, - {0x78e8, 4875}, - {0x78ec, 4877}, - {0x78ef, 5154}, - {0x78f4, 5153}, - {0x78f7, 5151}, - {0x78fa, 5152}, - {0x78fc, 0}, - {0x7901, 5155}, - {0x790e, 5374}, - {0x7914, 0}, - {0x7919, 5535}, - {0x7926, 5668}, - {0x7928, 0}, - {0x792a, 5669}, - {0x792b, 5671}, - {0x792c, 5670}, - {0x793a, 874}, - {0x793d, 6359}, - {0x793e, 1631}, - {0x793f, 6688}, - {0x7940, 1632}, - {0x7941, 1633}, - {0x7942, 6687}, - {0x7944, 7087}, - {0x7945, 7086}, - {0x7946, 1983}, - {0x7947, 1986}, - {0x7948, 1985}, - {0x7949, 1984}, - {0x794a, 7083}, - {0x794b, 7085}, - {0x794c, 7084}, - {0x794f, 7542}, - {0x7950, 2390}, - {0x7951, 7546}, - {0x7952, 7545}, - {0x7953, 7544}, - {0x7954, 7540}, - {0x7955, 2389}, - {0x7956, 2393}, - {0x7957, 2396}, - {0x795a, 2397}, - {0x795b, 7541}, - {0x795c, 7543}, - {0x795d, 2395}, - {0x795e, 2394}, - {0x795f, 2392}, - {0x7960, 2391}, - {0x7961, 8132}, - {0x7963, 8130}, - {0x7964, 8126}, - {0x7965, 2882}, - {0x7967, 8127}, - {0x7968, 2883}, - {0x7969, 8128}, - {0x796a, 8129}, - {0x796b, 8131}, - {0x796d, 2884}, - {0x7970, 8778}, - {0x7972, 8777}, - {0x7973, 8776}, - {0x7974, 8775}, - {0x7979, 9439}, - {0x797a, 3753}, - {0x797c, 9436}, - {0x797d, 9438}, - {0x797f, 3754}, - {0x7981, 3755}, - {0x7982, 9437}, - {0x798b, 0}, - {0x798d, 4166}, - {0x798e, 4164}, - {0x798f, 4165}, - {0x79a6, 4879}, - {0x79a7, 5156}, - {0x79aa, 5157}, - {0x79ae, 5375}, - {0x79b1, 5536}, - {0x79b3, 5839}, - {0x79b8, 6066}, - {0x79b9, 1987}, - {0x79ba, 1988}, - {0x79bb, 8133}, - {0x79bd, 3757}, - {0x79be, 875}, - {0x79bf, 1273}, - {0x79c0, 1272}, - {0x79c1, 1271}, - {0x79c5, 6689}, - {0x79c8, 1635}, - {0x79c9, 1634}, - {0x79cb, 1991}, - {0x79cd, 7089}, - {0x79ce, 7092}, - {0x79cf, 7090}, - {0x79d1, 1989}, - {0x79d2, 1990}, - {0x79d5, 7088}, - {0x79d6, 7091}, - {0x79d8, 2404}, - {0x79dc, 7553}, - {0x79dd, 7555}, - {0x79de, 7554}, - {0x79df, 2401}, - {0x79e0, 7549}, - {0x79e3, 2399}, - {0x79e4, 2398}, - {0x79e6, 2402}, - {0x79e7, 2400}, - {0x79e9, 2403}, - {0x79ea, 7552}, - {0x79eb, 7547}, - {0x79ec, 7548}, - {0x79ed, 7551}, - {0x79ee, 7550}, - {0x79f6, 8136}, - {0x79f7, 8137}, - {0x79f8, 8135}, - {0x79fa, 8134}, - {0x79fb, 2885}, - {0x7a00, 3325}, - {0x7a02, 8779}, - {0x7a03, 8781}, - {0x7a04, 8783}, - {0x7a05, 3324}, - {0x7a08, 3322}, - {0x7a0a, 8780}, - {0x7a0b, 3323}, - {0x7a0c, 8782}, - {0x7a0d, 3321}, - {0x7a10, 9449}, - {0x7a11, 9440}, - {0x7a12, 9443}, - {0x7a13, 9447}, - {0x7a14, 3761}, - {0x7a15, 9445}, - {0x7a17, 9444}, - {0x7a18, 9441}, - {0x7a19, 9442}, - {0x7a1a, 3759}, - {0x7a1b, 9448}, - {0x7a1c, 3758}, - {0x7a1e, 3763}, - {0x7a1f, 3762}, - {0x7a20, 3760}, - {0x7a22, 9446}, - {0x7a2e, 4167}, - {0x7a31, 4168}, - {0x7a37, 4551}, - {0x7a3b, 4552}, - {0x7a3c, 4548}, - {0x7a3d, 4550}, - {0x7a3f, 4547}, - {0x7a40, 4549}, - {0x7a46, 4882}, - {0x7a4b, 4884}, - {0x7a4c, 4883}, - {0x7a4d, 4880}, - {0x7a4e, 4881}, - {0x7a57, 5158}, - {0x7a60, 5378}, - {0x7a61, 5376}, - {0x7a62, 5377}, - {0x7a68, 0}, - {0x7a69, 5538}, - {0x7a6b, 5537}, - {0x7a6d, 0}, - {0x7a71, 0}, - {0x7a74, 876}, - {0x7a75, 6161}, - {0x7a76, 1274}, - {0x7a78, 6690}, - {0x7a79, 1637}, - {0x7a7a, 1636}, - {0x7a7b, 6691}, - {0x7a7e, 7094}, - {0x7a7f, 1992}, - {0x7a80, 7093}, - {0x7a81, 1993}, - {0x7a84, 2405}, - {0x7a85, 7558}, - {0x7a86, 7556}, - {0x7a87, 7562}, - {0x7a88, 2406}, - {0x7a89, 7557}, - {0x7a8a, 7561}, - {0x7a8b, 7559}, - {0x7a8c, 7560}, - {0x7a8f, 8138}, - {0x7a90, 8140}, - {0x7a92, 2886}, - {0x7a94, 8139}, - {0x7a95, 2887}, - {0x7a96, 3328}, - {0x7a97, 3327}, - {0x7a98, 3326}, - {0x7a99, 8784}, - {0x7a9e, 9452}, - {0x7a9f, 3764}, - {0x7aa0, 3765}, - {0x7aa2, 9451}, - {0x7aa3, 9450}, - {0x7aa9, 4170}, - {0x7aaa, 4169}, - {0x7aac, 0}, - {0x7aae, 4554}, - {0x7aaf, 4553}, - {0x7aba, 4885}, - {0x7abf, 5159}, - {0x7ac1, 0}, - {0x7ac3, 0}, - {0x7ac4, 5379}, - {0x7ac5, 5380}, - {0x7ac7, 5672}, - {0x7aca, 5887}, - {0x7acb, 877}, - {0x7ad1, 7095}, - {0x7ad8, 7563}, - {0x7ad9, 2407}, - {0x7adf, 3038}, - {0x7ae0, 3037}, - {0x7ae3, 3330}, - {0x7ae4, 8786}, - {0x7ae5, 3329}, - {0x7ae6, 8785}, - {0x7aeb, 9453}, - {0x7aed, 4171}, - {0x7aef, 4172}, - {0x7af6, 5673}, - {0x7af9, 1014}, - {0x7afa, 1638}, - {0x7afb, 6692}, - {0x7afd, 1995}, - {0x7aff, 1994}, - {0x7b00, 7096}, - {0x7b01, 7097}, - {0x7b04, 7565}, - {0x7b05, 7567}, - {0x7b06, 2408}, - {0x7b08, 7569}, - {0x7b09, 7572}, - {0x7b0a, 7570}, - {0x7b0e, 7571}, - {0x7b0f, 7568}, - {0x7b10, 7564}, - {0x7b11, 2409}, - {0x7b12, 7573}, - {0x7b13, 7566}, - {0x7b18, 8149}, - {0x7b19, 2893}, - {0x7b1a, 8158}, - {0x7b1b, 2890}, - {0x7b1d, 8151}, - {0x7b1e, 2894}, - {0x7b20, 2888}, - {0x7b22, 8146}, - {0x7b23, 8159}, - {0x7b24, 8147}, - {0x7b25, 8144}, - {0x7b26, 2892}, - {0x7b28, 2889}, - {0x7b2a, 8150}, - {0x7b2b, 8153}, - {0x7b2c, 2891}, - {0x7b2d, 8154}, - {0x7b2e, 2895}, - {0x7b2f, 8155}, - {0x7b30, 8145}, - {0x7b31, 8152}, - {0x7b32, 8156}, - {0x7b33, 8148}, - {0x7b34, 8143}, - {0x7b35, 8141}, - {0x7b38, 8157}, - {0x7b3b, 8142}, - {0x7b40, 8793}, - {0x7b44, 8789}, - {0x7b45, 8795}, - {0x7b46, 3333}, - {0x7b47, 8788}, - {0x7b48, 8790}, - {0x7b49, 3331}, - {0x7b4a, 8787}, - {0x7b4b, 3338}, - {0x7b4c, 8791}, - {0x7b4d, 3337}, - {0x7b4e, 8792}, - {0x7b4f, 3339}, - {0x7b50, 3334}, - {0x7b51, 3340}, - {0x7b52, 3335}, - {0x7b54, 3336}, - {0x7b56, 3332}, - {0x7b58, 8794}, - {0x7b60, 3768}, - {0x7b61, 9464}, - {0x7b63, 9467}, - {0x7b64, 9455}, - {0x7b65, 9460}, - {0x7b66, 9454}, - {0x7b67, 3770}, - {0x7b69, 9458}, - {0x7b6d, 9456}, - {0x7b6e, 3769}, - {0x7b70, 9463}, - {0x7b71, 9462}, - {0x7b72, 9459}, - {0x7b73, 9461}, - {0x7b74, 9457}, - {0x7b75, 4176}, - {0x7b76, 9466}, - {0x7b77, 3766}, - {0x7b78, 9465}, - {0x7b84, 4183}, - {0x7b87, 4182}, - {0x7b8b, 4175}, - {0x7b8f, 4180}, - {0x7b94, 4179}, - {0x7b95, 4174}, - {0x7b97, 4177}, - {0x7b9d, 4178}, - {0x7ba0, 4562}, - {0x7ba1, 4173}, - {0x7bad, 4555}, - {0x7bb1, 4556}, - {0x7bb4, 4558}, - {0x7bb8, 4181}, - {0x7bc0, 3767}, - {0x7bc1, 4561}, - {0x7bc4, 4557}, - {0x7bc6, 4559}, - {0x7bc7, 4560}, - {0x7bc9, 4888}, - {0x7bcc, 4563}, - {0x7bd9, 4886}, - {0x7bdb, 4890}, - {0x7be0, 5165}, - {0x7be1, 4891}, - {0x7be4, 4889}, - {0x7be6, 4893}, - {0x7be9, 4892}, - {0x7bf1, 0}, - {0x7bf7, 5163}, - {0x7bfe, 5162}, - {0x7c07, 5160}, - {0x7c0c, 5164}, - {0x7c0d, 5161}, - {0x7c11, 4887}, - {0x7c1e, 5384}, - {0x7c21, 5386}, - {0x7c23, 5385}, - {0x7c27, 5382}, - {0x7c2a, 5383}, - {0x7c2b, 5381}, - {0x7c37, 5543}, - {0x7c38, 5541}, - {0x7c3d, 5542}, - {0x7c3e, 5539}, - {0x7c3f, 5540}, - {0x7c40, 5544}, - {0x7c43, 5675}, - {0x7c4c, 5674}, - {0x7c4d, 5676}, - {0x7c50, 5761}, - {0x7c5f, 5841}, - {0x7c60, 5840}, - {0x7c63, 5889}, - {0x7c64, 5888}, - {0x7c65, 5890}, - {0x7c6c, 5957}, - {0x7c6e, 5958}, - {0x7c72, 5995}, - {0x7c73, 1015}, - {0x7c75, 6693}, - {0x7c78, 7099}, - {0x7c79, 7100}, - {0x7c7a, 7098}, - {0x7c7d, 1996}, - {0x7c7f, 7101}, - {0x7c80, 7102}, - {0x7c81, 7103}, - {0x7c84, 7574}, - {0x7c85, 7580}, - {0x7c88, 7578}, - {0x7c89, 2410}, - {0x7c8a, 7576}, - {0x7c8c, 7577}, - {0x7c8d, 7579}, - {0x7c91, 7575}, - {0x7c92, 2896}, - {0x7c94, 8160}, - {0x7c95, 2898}, - {0x7c96, 8162}, - {0x7c97, 2897}, - {0x7c98, 8161}, - {0x7c9e, 8797}, - {0x7c9f, 3341}, - {0x7ca1, 8799}, - {0x7ca2, 8796}, - {0x7ca3, 8163}, - {0x7ca5, 3342}, - {0x7ca8, 8798}, - {0x7caf, 9470}, - {0x7cb1, 3771}, - {0x7cb2, 9468}, - {0x7cb3, 3772}, - {0x7cb4, 9469}, - {0x7cb5, 3773}, - {0x7cb9, 4184}, - {0x7cbd, 4185}, - {0x7cbe, 4186}, - {0x7cca, 4564}, - {0x7cce, 289}, - {0x7cd1, 0}, - {0x7cd5, 4894}, - {0x7cd6, 4895}, - {0x7cd9, 5171}, - {0x7cdc, 5167}, - {0x7cdd, 5172}, - {0x7cde, 5168}, - {0x7cdf, 5170}, - {0x7ce0, 5166}, - {0x7ce2, 5169}, - {0x7ce7, 5387}, - {0x7cef, 5677}, - {0x7cf0, 5678}, - {0x7cf8, 1016}, - {0x7cfb, 1275}, - {0x7cfd, 6694}, - {0x7cfe, 1639}, - {0x7d00, 1999}, - {0x7d01, 7106}, - {0x7d02, 1997}, - {0x7d03, 7104}, - {0x7d04, 2002}, - {0x7d05, 1998}, - {0x7d06, 2003}, - {0x7d07, 2001}, - {0x7d08, 7105}, - {0x7d09, 2000}, - {0x7d0a, 2414}, - {0x7d0b, 2413}, - {0x7d0c, 7591}, - {0x7d0d, 2422}, - {0x7d0e, 7584}, - {0x7d0f, 7590}, - {0x7d10, 2418}, - {0x7d11, 7583}, - {0x7d12, 7589}, - {0x7d13, 7587}, - {0x7d14, 2417}, - {0x7d15, 2419}, - {0x7d16, 7586}, - {0x7d17, 2412}, - {0x7d18, 7585}, - {0x7d19, 2423}, - {0x7d1a, 2420}, - {0x7d1b, 2424}, - {0x7d1c, 2421}, - {0x7d1d, 7582}, - {0x7d1e, 7581}, - {0x7d1f, 7588}, - {0x7d20, 2415}, - {0x7d21, 2411}, - {0x7d22, 2416}, - {0x7d28, 8178}, - {0x7d29, 8171}, - {0x7d2b, 3347}, - {0x7d2c, 8170}, - {0x7d2e, 2902}, - {0x7d2f, 2909}, - {0x7d30, 2906}, - {0x7d31, 2912}, - {0x7d32, 2911}, - {0x7d33, 2907}, - {0x7d35, 8164}, - {0x7d36, 8167}, - {0x7d38, 8166}, - {0x7d39, 2903}, - {0x7d3a, 8168}, - {0x7d3b, 8177}, - {0x7d3c, 2904}, - {0x7d3d, 8165}, - {0x7d3e, 8174}, - {0x7d3f, 8175}, - {0x7d40, 2905}, - {0x7d41, 8172}, - {0x7d42, 2910}, - {0x7d43, 2900}, - {0x7d44, 2908}, - {0x7d45, 8169}, - {0x7d46, 2899}, - {0x7d47, 8173}, - {0x7d4a, 8176}, - {0x7d4e, 8816}, - {0x7d4f, 8807}, - {0x7d50, 3344}, - {0x7d51, 8814}, - {0x7d52, 8811}, - {0x7d53, 8803}, - {0x7d54, 8812}, - {0x7d55, 3346}, - {0x7d56, 8804}, - {0x7d58, 8800}, - {0x7d5b, 3779}, - {0x7d5c, 8809}, - {0x7d5e, 3343}, - {0x7d5f, 8815}, - {0x7d61, 3350}, - {0x7d62, 3352}, - {0x7d63, 8802}, - {0x7d66, 3351}, - {0x7d67, 8805}, - {0x7d68, 3345}, - {0x7d69, 8813}, - {0x7d6a, 8806}, - {0x7d6b, 8810}, - {0x7d6d, 8808}, - {0x7d6e, 3348}, - {0x7d6f, 8801}, - {0x7d70, 3353}, - {0x7d71, 2901}, - {0x7d72, 3349}, - {0x7d73, 3354}, - {0x7d79, 3775}, - {0x7d7a, 9477}, - {0x7d7b, 9479}, - {0x7d7c, 9481}, - {0x7d7d, 9485}, - {0x7d7f, 9475}, - {0x7d80, 9473}, - {0x7d81, 3777}, - {0x7d83, 9480}, - {0x7d84, 9484}, - {0x7d85, 9476}, - {0x7d86, 9472}, - {0x7d88, 9471}, - {0x7d8c, 9482}, - {0x7d8d, 9474}, - {0x7d8e, 9478}, - {0x7d8f, 3778}, - {0x7d91, 3776}, - {0x7d92, 9486}, - {0x7d93, 3774}, - {0x7d94, 9483}, - {0x7d9c, 4189}, - {0x7d9e, 4577}, - {0x7da0, 4192}, - {0x7da2, 4198}, - {0x7dac, 4205}, - {0x7dad, 4202}, - {0x7db0, 4188}, - {0x7db1, 4196}, - {0x7db2, 4195}, - {0x7db4, 4194}, - {0x7db5, 4200}, - {0x7db8, 4201}, - {0x7dba, 4197}, - {0x7dbb, 4187}, - {0x7dbd, 4190}, - {0x7dbe, 4191}, - {0x7dbf, 4199}, - {0x7dc7, 4204}, - {0x7dca, 4193}, - {0x7dcc, 0}, - {0x7dd2, 4203}, - {0x7dd8, 4569}, - {0x7dd9, 4578}, - {0x7dda, 4574}, - {0x7ddd, 4571}, - {0x7dde, 4575}, - {0x7de0, 4565}, - {0x7de3, 4573}, - {0x7de8, 4572}, - {0x7de9, 4576}, - {0x7dec, 4570}, - {0x7def, 4567}, - {0x7df2, 4579}, - {0x7df4, 4566}, - {0x7df9, 4580}, - {0x7dfb, 4568}, - {0x7e08, 4898}, - {0x7e09, 4903}, - {0x7e0a, 4896}, - {0x7e10, 4904}, - {0x7e11, 4897}, - {0x7e1b, 4899}, - {0x7e1d, 4902}, - {0x7e1e, 4901}, - {0x7e20, 0}, - {0x7e23, 4900}, - {0x7e2b, 5179}, - {0x7e2e, 5173}, - {0x7e2f, 5189}, - {0x7e31, 5181}, - {0x7e32, 5177}, - {0x7e34, 5184}, - {0x7e35, 5187}, - {0x7e37, 5176}, - {0x7e39, 5185}, - {0x7e3d, 5180}, - {0x7e3e, 5174}, - {0x7e3f, 5188}, - {0x7e41, 5183}, - {0x7e43, 5178}, - {0x7e45, 5182}, - {0x7e46, 5175}, - {0x7e48, 5186}, - {0x7e52, 5393}, - {0x7e54, 5388}, - {0x7e55, 5389}, - {0x7e59, 5394}, - {0x7e5a, 5391}, - {0x7e5e, 5390}, - {0x7e61, 5392}, - {0x7e69, 5548}, - {0x7e6a, 5549}, - {0x7e6b, 5545}, - {0x7e6d, 5546}, - {0x7e73, 5550}, - {0x7e79, 5547}, - {0x7e7c, 5681}, - {0x7e7d, 5680}, - {0x7e82, 5682}, - {0x7e88, 0}, - {0x7e8c, 5763}, - {0x7e8f, 5762}, - {0x7e93, 5891}, - {0x7e94, 5893}, - {0x7e96, 5892}, - {0x7e9c, 5977}, - {0x7f36, 1017}, - {0x7f38, 2004}, - {0x7f39, 7455}, - {0x7f3a, 2425}, - {0x7f3d, 2913}, - {0x7f3e, 8817}, - {0x7f3f, 8818}, - {0x7f41, 0}, - {0x7f44, 5190}, - {0x7f48, 5395}, - {0x7f4c, 5683}, - {0x7f50, 5926}, - {0x7f51, 6162}, - {0x7f54, 1640}, - {0x7f55, 1276}, - {0x7f58, 7107}, - {0x7f5b, 7597}, - {0x7f5c, 7592}, - {0x7f5d, 7596}, - {0x7f5e, 7594}, - {0x7f5f, 2426}, - {0x7f60, 7595}, - {0x7f61, 7593}, - {0x7f63, 8179}, - {0x7f65, 8819}, - {0x7f66, 8820}, - {0x7f67, 9489}, - {0x7f68, 9490}, - {0x7f69, 3781}, - {0x7f6a, 3782}, - {0x7f6b, 9488}, - {0x7f6c, 9491}, - {0x7f6d, 9487}, - {0x7f6e, 3780}, - {0x7f70, 4206}, - {0x7f72, 3783}, - {0x7f75, 4581}, - {0x7f77, 4582}, - {0x7f79, 4905}, - {0x7f7c, 0}, - {0x7f85, 5551}, - {0x7f88, 5927}, - {0x7f8a, 1018}, - {0x7f8b, 1642}, - {0x7f8c, 1641}, - {0x7f8d, 7109}, - {0x7f8e, 2005}, - {0x7f91, 7108}, - {0x7f92, 7599}, - {0x7f94, 2427}, - {0x7f95, 8180}, - {0x7f96, 7598}, - {0x7f9a, 2915}, - {0x7f9b, 8183}, - {0x7f9c, 8181}, - {0x7f9d, 8182}, - {0x7f9e, 2914}, - {0x7fa0, 8822}, - {0x7fa1, 8823}, - {0x7fa2, 8821}, - {0x7fa4, 3786}, - {0x7fa5, 9493}, - {0x7fa6, 9492}, - {0x7fa7, 9494}, - {0x7fa8, 3785}, - {0x7fa9, 3784}, - {0x7faf, 4583}, - {0x7fb2, 4906}, - {0x7fb6, 5552}, - {0x7fb8, 5554}, - {0x7fb9, 5553}, - {0x7fbc, 5764}, - {0x7fbd, 1019}, - {0x7fbe, 7110}, - {0x7fbf, 2006}, - {0x7fc0, 7602}, - {0x7fc1, 2429}, - {0x7fc2, 7601}, - {0x7fc3, 7600}, - {0x7fc5, 2428}, - {0x7fc7, 8189}, - {0x7fc9, 8191}, - {0x7fca, 8184}, - {0x7fcb, 8185}, - {0x7fcc, 2916}, - {0x7fcd, 8186}, - {0x7fce, 2917}, - {0x7fcf, 8190}, - {0x7fd0, 8187}, - {0x7fd1, 8188}, - {0x7fd2, 2918}, - {0x7fd4, 3356}, - {0x7fd5, 3357}, - {0x7fd7, 8824}, - {0x7fdb, 9495}, - {0x7fdc, 9496}, - {0x7fdf, 4209}, - {0x7fe0, 4207}, - {0x7fe1, 4208}, - {0x7fe3, 0}, - {0x7fe9, 4584}, - {0x7fee, 4909}, - {0x7ff0, 4907}, - {0x7ff1, 4908}, - {0x7ff3, 5191}, - {0x7ff8, 0}, - {0x7ff9, 5396}, - {0x7ffb, 5397}, - {0x7ffc, 5192}, - {0x7ffe, 0}, - {0x8000, 5684}, - {0x8001, 1020}, - {0x8003, 1021}, - {0x8004, 2431}, - {0x8005, 1643}, - {0x8006, 2430}, - {0x8007, 7111}, - {0x800b, 3358}, - {0x800c, 1022}, - {0x800d, 2008}, - {0x800e, 7112}, - {0x800f, 7113}, - {0x8010, 2007}, - {0x8011, 2009}, - {0x8012, 1023}, - {0x8014, 7114}, - {0x8015, 2433}, - {0x8016, 7603}, - {0x8017, 2435}, - {0x8018, 2432}, - {0x8019, 2434}, - {0x801b, 8194}, - {0x801c, 2919}, - {0x801e, 8193}, - {0x801f, 8192}, - {0x8021, 9497}, - {0x8026, 4585}, - {0x8028, 4910}, - {0x8033, 1024}, - {0x8034, 6360}, - {0x8035, 6695}, - {0x8036, 2010}, - {0x8037, 7115}, - {0x8039, 7605}, - {0x803c, 0}, - {0x803d, 2436}, - {0x803e, 7604}, - {0x803f, 2437}, - {0x8043, 8196}, - {0x8046, 2921}, - {0x8047, 8195}, - {0x8048, 8197}, - {0x804a, 2920}, - {0x804f, 8826}, - {0x8050, 8827}, - {0x8051, 8825}, - {0x8052, 3359}, - {0x8056, 3787}, - {0x8058, 3788}, - {0x805a, 4211}, - {0x805e, 4210}, - {0x806f, 5196}, - {0x8070, 5195}, - {0x8071, 5193}, - {0x8072, 5194}, - {0x8073, 5197}, - {0x8076, 5399}, - {0x8077, 5398}, - {0x807d, 5843}, - {0x807e, 5842}, - {0x807f, 1025}, - {0x8082, 7404}, - {0x8084, 3790}, - {0x8085, 3360}, - {0x8086, 3789}, - {0x8087, 4212}, - {0x8089, 1026}, - {0x808a, 6067}, - {0x808b, 1027}, - {0x808c, 1028}, - {0x808f, 6696}, - {0x8090, 6363}, - {0x8092, 6364}, - {0x8093, 1278}, - {0x8095, 6361}, - {0x8096, 1277}, - {0x8098, 1280}, - {0x8099, 6362}, - {0x809a, 1282}, - {0x809b, 1281}, - {0x809c, 6365}, - {0x809d, 1279}, - {0x80a1, 1648}, - {0x80a2, 1646}, - {0x80a3, 6698}, - {0x80a5, 1645}, - {0x80a9, 1650}, - {0x80aa, 1652}, - {0x80ab, 1649}, - {0x80ad, 6701}, - {0x80ae, 6697}, - {0x80af, 1653}, - {0x80b1, 1647}, - {0x80b2, 1283}, - {0x80b4, 1651}, - {0x80b5, 6700}, - {0x80b8, 6699}, - {0x80ba, 1644}, - {0x80c2, 7121}, - {0x80c3, 2014}, - {0x80c4, 2015}, - {0x80c5, 7123}, - {0x80c7, 7117}, - {0x80c8, 7120}, - {0x80c9, 7129}, - {0x80ca, 7127}, - {0x80cc, 2016}, - {0x80cd, 7133}, - {0x80ce, 2019}, - {0x80cf, 7130}, - {0x80d0, 7122}, - {0x80d1, 7119}, - {0x80d4, 8829}, - {0x80d5, 7128}, - {0x80d6, 2011}, - {0x80d7, 7131}, - {0x80d8, 7116}, - {0x80d9, 7125}, - {0x80da, 2013}, - {0x80db, 2018}, - {0x80dc, 7126}, - {0x80dd, 2022}, - {0x80de, 2020}, - {0x80e0, 7118}, - {0x80e1, 2017}, - {0x80e3, 7124}, - {0x80e4, 2021}, - {0x80e5, 2012}, - {0x80e6, 7132}, - {0x80ed, 2442}, - {0x80ef, 2451}, - {0x80f0, 2440}, - {0x80f1, 2438}, - {0x80f2, 7607}, - {0x80f3, 2446}, - {0x80f4, 2443}, - {0x80f5, 7609}, - {0x80f8, 2445}, - {0x80f9, 7608}, - {0x80fa, 7606}, - {0x80fb, 7611}, - {0x80fc, 2450}, - {0x80fd, 2448}, - {0x80fe, 8828}, - {0x8100, 7612}, - {0x8101, 7610}, - {0x8102, 2439}, - {0x8105, 2441}, - {0x8106, 2444}, - {0x8108, 2447}, - {0x810a, 2449}, - {0x8115, 8207}, - {0x8116, 2923}, - {0x8118, 8198}, - {0x8119, 8200}, - {0x811b, 8201}, - {0x811d, 8209}, - {0x811e, 8205}, - {0x811f, 8203}, - {0x8121, 8206}, - {0x8122, 8210}, - {0x8123, 2924}, - {0x8124, 2928}, - {0x8125, 8199}, - {0x8127, 8208}, - {0x8129, 2926}, - {0x812b, 2925}, - {0x812c, 8204}, - {0x812d, 8202}, - {0x812f, 2922}, - {0x8130, 2927}, - {0x8139, 3366}, - {0x813a, 8837}, - {0x813d, 8835}, - {0x813e, 3368}, - {0x8143, 8830}, - {0x8144, 9511}, - {0x8146, 3367}, - {0x8147, 8834}, - {0x814a, 8831}, - {0x814b, 3363}, - {0x814c, 3369}, - {0x814d, 8836}, - {0x814e, 3365}, - {0x814f, 8833}, - {0x8150, 4213}, - {0x8151, 3364}, - {0x8152, 8832}, - {0x8153, 3370}, - {0x8154, 3362}, - {0x8155, 3361}, - {0x815a, 0}, - {0x815b, 9503}, - {0x815c, 9501}, - {0x815e, 9507}, - {0x8160, 9499}, - {0x8161, 9512}, - {0x8162, 9504}, - {0x8164, 9498}, - {0x8165, 3794}, - {0x8166, 3800}, - {0x8167, 9509}, - {0x8169, 9502}, - {0x816b, 3797}, - {0x816e, 3795}, - {0x816f, 9510}, - {0x8170, 3792}, - {0x8171, 3791}, - {0x8172, 9505}, - {0x8173, 3796}, - {0x8174, 3371}, - {0x8176, 9508}, - {0x8177, 9500}, - {0x8178, 3793}, - {0x8179, 3798}, - {0x817a, 3799}, - {0x817f, 4218}, - {0x8180, 4214}, - {0x8182, 4219}, - {0x8188, 4216}, - {0x818a, 4217}, - {0x818f, 4215}, - {0x8198, 4591}, - {0x819a, 4590}, - {0x819b, 4586}, - {0x819c, 4587}, - {0x819d, 4588}, - {0x81a0, 4589}, - {0x81a8, 4913}, - {0x81a9, 4912}, - {0x81b3, 4911}, - {0x81ba, 5200}, - {0x81bd, 5204}, - {0x81be, 5206}, - {0x81bf, 5203}, - {0x81c0, 5202}, - {0x81c2, 5201}, - {0x81c3, 5199}, - {0x81c6, 5198}, - {0x81c9, 5205}, - {0x81cd, 5400}, - {0x81cf, 5401}, - {0x81d2, 0}, - {0x81d8, 5555}, - {0x81da, 5685}, - {0x81df, 5844}, - {0x81e1, 0}, - {0x81e2, 5894}, - {0x81e3, 1029}, - {0x81e5, 1654}, - {0x81e6, 8838}, - {0x81e7, 4220}, - {0x81e8, 5207}, - {0x81ea, 1030}, - {0x81ec, 2453}, - {0x81ed, 2452}, - {0x81ee, 8839}, - {0x81f3, 1031}, - {0x81f4, 2023}, - {0x81f7, 8840}, - {0x81f8, 8841}, - {0x81f9, 8842}, - {0x81fa, 4221}, - {0x81fb, 4914}, - {0x81fc, 1032}, - {0x81fe, 1655}, - {0x81ff, 7134}, - {0x8200, 2454}, - {0x8201, 7613}, - {0x8202, 2929}, - {0x8204, 8843}, - {0x8205, 3801}, - {0x8207, 4222}, - {0x8208, 4915}, - {0x8209, 5208}, - {0x820a, 5402}, - {0x820c, 1033}, - {0x820d, 1656}, - {0x8210, 2455}, - {0x8211, 8211}, - {0x8212, 3372}, - {0x8214, 4223}, - {0x821b, 1034}, - {0x821c, 3373}, - {0x821d, 9513}, - {0x821e, 4224}, - {0x821f, 1035}, - {0x8220, 6702}, - {0x8221, 7135}, - {0x8222, 2024}, - {0x8225, 7615}, - {0x8228, 2458}, - {0x822a, 2456}, - {0x822b, 2457}, - {0x822c, 2459}, - {0x822f, 7614}, - {0x8232, 8216}, - {0x8233, 8213}, - {0x8234, 8215}, - {0x8235, 2930}, - {0x8236, 2932}, - {0x8237, 2931}, - {0x8238, 8212}, - {0x8239, 2933}, - {0x823a, 8214}, - {0x823c, 8844}, - {0x823d, 8845}, - {0x823f, 8846}, - {0x8240, 9516}, - {0x8242, 9517}, - {0x8244, 9515}, - {0x8245, 9518}, - {0x8247, 3802}, - {0x8249, 9514}, - {0x824b, 4225}, - {0x8256, 0}, - {0x8257, 1}, - {0x8258, 4916}, - {0x8259, 4917}, - {0x8266, 5686}, - {0x8269, 0}, - {0x826e, 1036}, - {0x826f, 1284}, - {0x8271, 5209}, - {0x8272, 1037}, - {0x8274, 8217}, - {0x8275, 8847}, - {0x8277, 5934}, - {0x8278, 6163}, - {0x827c, 6164}, - {0x827d, 6166}, - {0x827e, 1038}, - {0x827f, 6167}, - {0x8280, 6165}, - {0x8283, 6373}, - {0x8284, 6374}, - {0x8285, 6368}, - {0x828a, 6372}, - {0x828b, 1286}, - {0x828d, 1287}, - {0x828e, 6369}, - {0x828f, 6367}, - {0x8290, 6366}, - {0x8291, 6370}, - {0x8292, 1285}, - {0x8293, 6371}, - {0x8294, 7136}, - {0x8298, 6707}, - {0x8299, 1659}, - {0x829a, 6706}, - {0x829b, 6708}, - {0x829d, 1658}, - {0x829e, 6713}, - {0x829f, 1662}, - {0x82a0, 6703}, - {0x82a1, 6717}, - {0x82a2, 6723}, - {0x82a3, 1669}, - {0x82a4, 6720}, - {0x82a5, 1666}, - {0x82a7, 6710}, - {0x82a8, 6716}, - {0x82a9, 6718}, - {0x82ab, 6705}, - {0x82ac, 1665}, - {0x82ad, 1660}, - {0x82ae, 6711}, - {0x82af, 1667}, - {0x82b0, 1670}, - {0x82b1, 1664}, - {0x82b3, 1657}, - {0x82b4, 6715}, - {0x82b5, 6709}, - {0x82b6, 6722}, - {0x82b7, 1672}, - {0x82b8, 1668}, - {0x82b9, 1663}, - {0x82ba, 6714}, - {0x82bb, 2460}, - {0x82bc, 6712}, - {0x82bd, 1661}, - {0x82be, 1671}, - {0x82c0, 6704}, - {0x82c2, 6719}, - {0x82c3, 6721}, - {0x82d1, 2041}, - {0x82d2, 2035}, - {0x82d3, 2043}, - {0x82d4, 2040}, - {0x82d5, 7143}, - {0x82d6, 7146}, - {0x82d7, 2036}, - {0x82d9, 7137}, - {0x82db, 2029}, - {0x82dc, 2039}, - {0x82de, 2042}, - {0x82df, 2044}, - {0x82e0, 7158}, - {0x82e1, 7149}, - {0x82e3, 2028}, - {0x82e4, 7157}, - {0x82e5, 2032}, - {0x82e6, 2030}, - {0x82e7, 2025}, - {0x82e8, 7141}, - {0x82ea, 7156}, - {0x82eb, 7145}, - {0x82ec, 7148}, - {0x82ed, 7161}, - {0x82ef, 2045}, - {0x82f0, 7155}, - {0x82f1, 2037}, - {0x82f2, 7150}, - {0x82f3, 7160}, - {0x82f4, 7147}, - {0x82f5, 7151}, - {0x82f6, 7154}, - {0x82f9, 7139}, - {0x82fa, 7159}, - {0x82fb, 7153}, - {0x82fe, 7138}, - {0x8300, 7142}, - {0x8301, 2038}, - {0x8302, 2033}, - {0x8303, 2026}, - {0x8304, 2031}, - {0x8305, 2027}, - {0x8306, 2046}, - {0x8307, 7140}, - {0x8308, 7632}, - {0x8309, 2034}, - {0x830c, 7152}, - {0x830d, 6781}, - {0x8316, 7635}, - {0x8317, 2474}, - {0x8319, 7619}, - {0x831b, 7630}, - {0x831c, 7626}, - {0x831e, 7645}, - {0x8320, 7637}, - {0x8322, 7627}, - {0x8324, 7636}, - {0x8325, 7621}, - {0x8326, 7625}, - {0x8327, 7648}, - {0x8328, 2477}, - {0x8329, 7640}, - {0x832a, 7631}, - {0x832b, 2461}, - {0x832c, 7646}, - {0x832d, 7617}, - {0x832f, 7639}, - {0x8331, 2476}, - {0x8332, 2471}, - {0x8333, 7616}, - {0x8334, 2469}, - {0x8335, 2468}, - {0x8336, 2473}, - {0x8337, 7638}, - {0x8338, 2465}, - {0x8339, 2472}, - {0x833a, 7144}, - {0x833b, 8848}, - {0x833c, 7633}, - {0x833f, 7623}, - {0x8340, 2475}, - {0x8341, 7624}, - {0x8342, 7628}, - {0x8343, 2478}, - {0x8344, 7618}, - {0x8345, 7642}, - {0x8347, 7641}, - {0x8348, 7649}, - {0x8349, 2467}, - {0x834a, 2464}, - {0x834b, 7647}, - {0x834c, 7643}, - {0x834d, 7634}, - {0x834e, 7629}, - {0x834f, 2470}, - {0x8350, 2466}, - {0x8351, 7620}, - {0x8352, 2462}, - {0x8353, 7644}, - {0x8354, 2463}, - {0x8356, 7622}, - {0x8373, 8223}, - {0x8374, 8225}, - {0x8375, 8230}, - {0x8376, 8250}, - {0x8377, 2947}, - {0x8378, 2937}, - {0x837a, 8222}, - {0x837b, 2948}, - {0x837c, 2949}, - {0x837d, 8233}, - {0x837e, 8240}, - {0x837f, 8246}, - {0x8381, 8227}, - {0x8383, 8234}, - {0x8386, 2950}, - {0x8387, 8248}, - {0x8388, 8243}, - {0x8389, 2945}, - {0x838a, 2943}, - {0x838b, 8239}, - {0x838c, 8235}, - {0x838d, 8221}, - {0x838e, 2934}, - {0x838f, 8226}, - {0x8390, 8218}, - {0x8392, 2942}, - {0x8393, 2944}, - {0x8394, 8231}, - {0x8395, 8228}, - {0x8396, 2939}, - {0x8397, 8244}, - {0x8398, 2936}, - {0x8399, 8229}, - {0x839a, 8889}, - {0x839b, 8237}, - {0x839d, 8236}, - {0x839e, 2935}, - {0x83a0, 2946}, - {0x83a2, 2938}, - {0x83a3, 8219}, - {0x83a4, 8224}, - {0x83a5, 8241}, - {0x83a6, 8247}, - {0x83a7, 2951}, - {0x83a8, 8220}, - {0x83a9, 8232}, - {0x83aa, 8238}, - {0x83ab, 2941}, - {0x83ae, 8249}, - {0x83af, 8242}, - {0x83b0, 8245}, - {0x83bd, 2940}, - {0x83bf, 8864}, - {0x83c0, 8852}, - {0x83c1, 3381}, - {0x83c2, 8881}, - {0x83c3, 8890}, - {0x83c4, 8893}, - {0x83c5, 3379}, - {0x83c6, 8860}, - {0x83c7, 8885}, - {0x83c8, 8861}, - {0x83c9, 8875}, - {0x83ca, 3392}, - {0x83cb, 8871}, - {0x83cc, 3389}, - {0x83ce, 8872}, - {0x83cf, 8849}, - {0x83d1, 8886}, - {0x83d4, 3398}, - {0x83d5, 8883}, - {0x83d6, 8873}, - {0x83d7, 8895}, - {0x83d8, 8868}, - {0x83d9, 9550}, - {0x83db, 8898}, - {0x83dc, 3396}, - {0x83dd, 8866}, - {0x83de, 8878}, - {0x83df, 3399}, - {0x83e0, 3378}, - {0x83e1, 8870}, - {0x83e2, 8896}, - {0x83e3, 8863}, - {0x83e4, 8856}, - {0x83e5, 8867}, - {0x83e7, 8855}, - {0x83e8, 8853}, - {0x83e9, 3374}, - {0x83ea, 8887}, - {0x83eb, 8862}, - {0x83ec, 8891}, - {0x83ee, 8892}, - {0x83ef, 3382}, - {0x83f0, 3387}, - {0x83f1, 3383}, - {0x83f2, 3391}, - {0x83f3, 8882}, - {0x83f4, 3384}, - {0x83f5, 8874}, - {0x83f6, 8858}, - {0x83f8, 3376}, - {0x83f9, 8850}, - {0x83fa, 8884}, - {0x83fb, 8894}, - {0x83fc, 8857}, - {0x83fd, 3390}, - {0x83fe, 8899}, - {0x83ff, 8869}, - {0x8401, 8865}, - {0x8403, 3375}, - {0x8404, 3395}, - {0x8406, 8880}, - {0x8407, 3397}, - {0x8409, 8876}, - {0x840a, 3386}, - {0x840b, 3380}, - {0x840c, 3388}, - {0x840d, 3377}, - {0x840e, 3394}, - {0x840f, 8877}, - {0x8410, 8859}, - {0x8411, 8879}, - {0x8412, 8854}, - {0x8413, 8888}, - {0x841b, 8897}, - {0x8423, 8851}, - {0x8429, 9549}, - {0x842b, 9571}, - {0x842c, 3756}, - {0x842d, 9554}, - {0x842f, 9552}, - {0x8430, 9531}, - {0x8431, 3806}, - {0x8432, 9547}, - {0x8433, 9567}, - {0x8434, 9543}, - {0x8435, 3814}, - {0x8436, 9566}, - {0x8437, 9541}, - {0x8438, 3393}, - {0x8439, 9557}, - {0x843a, 9542}, - {0x843b, 9564}, - {0x843c, 3813}, - {0x843d, 3805}, - {0x843f, 9520}, - {0x8440, 9528}, - {0x8442, 9553}, - {0x8443, 9545}, - {0x8444, 9570}, - {0x8445, 9548}, - {0x8446, 3819}, - {0x8447, 9565}, - {0x8449, 3810}, - {0x844b, 9551}, - {0x844c, 9559}, - {0x844d, 9532}, - {0x844e, 9558}, - {0x8450, 9575}, - {0x8451, 9527}, - {0x8452, 9560}, - {0x8454, 9573}, - {0x8456, 9521}, - {0x8457, 3385}, - {0x8459, 9535}, - {0x845a, 9534}, - {0x845b, 3812}, - {0x845d, 9538}, - {0x845e, 9540}, - {0x845f, 9555}, - {0x8460, 9572}, - {0x8461, 3815}, - {0x8463, 3816}, - {0x8465, 9526}, - {0x8466, 3808}, - {0x8467, 9530}, - {0x8468, 9568}, - {0x8469, 3817}, - {0x846b, 3809}, - {0x846c, 3811}, - {0x846d, 3818}, - {0x846e, 9574}, - {0x846f, 9561}, - {0x8470, 9556}, - {0x8473, 9537}, - {0x8474, 9536}, - {0x8475, 3807}, - {0x8476, 9522}, - {0x8477, 3804}, - {0x8478, 9546}, - {0x8479, 9523}, - {0x847a, 9544}, - {0x847d, 9533}, - {0x847e, 9569}, - {0x8482, 3803}, - {0x8486, 9529}, - {0x848d, 9525}, - {0x848e, 9563}, - {0x848f, 9524}, - {0x8490, 4238}, - {0x8499, 4230}, - {0x849c, 4233}, - {0x849e, 4231}, - {0x84b2, 4232}, - {0x84b8, 4235}, - {0x84bc, 4239}, - {0x84bf, 4227}, - {0x84c0, 4236}, - {0x84c4, 4229}, - {0x84c5, 9562}, - {0x84c6, 4228}, - {0x84c9, 4226}, - {0x84ca, 4241}, - {0x84cb, 4234}, - {0x84d1, 4240}, - {0x84d3, 4237}, - {0x84e8, 0}, - {0x84ec, 4603}, - {0x84ee, 4595}, - {0x84f1, 9519}, - {0x84ff, 4605}, - {0x8506, 4606}, - {0x8507, 9539}, - {0x8511, 4599}, - {0x8513, 4598}, - {0x8514, 4602}, - {0x8517, 4592}, - {0x851a, 4594}, - {0x8521, 4601}, - {0x8523, 4600}, - {0x8525, 4604}, - {0x852c, 4596}, - {0x852d, 4597}, - {0x853d, 4593}, - {0x8543, 4923}, - {0x8548, 4920}, - {0x8549, 4924}, - {0x854a, 4918}, - {0x8559, 4919}, - {0x855e, 4927}, - {0x8568, 4921}, - {0x8569, 4922}, - {0x856a, 4926}, - {0x856d, 4925}, - {0x8570, 0}, - {0x857e, 5212}, - {0x8584, 5211}, - {0x8587, 5218}, - {0x858a, 5220}, - {0x8591, 5214}, - {0x8594, 5215}, - {0x859b, 5217}, - {0x859c, 5213}, - {0x85a6, 5221}, - {0x85a8, 5219}, - {0x85a9, 5404}, - {0x85aa, 5210}, - {0x85af, 5216}, - {0x85b0, 5408}, - {0x85b9, 5410}, - {0x85ba, 5409}, - {0x85c9, 5407}, - {0x85cd, 5405}, - {0x85cf, 5403}, - {0x85d0, 5406}, - {0x85d5, 5559}, - {0x85dd, 5557}, - {0x85e4, 5560}, - {0x85e5, 5561}, - {0x85e9, 5556}, - {0x85ea, 5558}, - {0x85f7, 5562}, - {0x85f9, 5688}, - {0x85fa, 5690}, - {0x85fb, 5687}, - {0x8606, 5691}, - {0x8607, 5693}, - {0x860a, 5694}, - {0x860b, 5692}, - {0x8611, 5689}, - {0x8617, 5765}, - {0x861a, 5767}, - {0x862d, 5766}, - {0x8635, 0}, - {0x8638, 5895}, - {0x863f, 5896}, - {0x8647, 0}, - {0x8648, 1}, - {0x864d, 6168}, - {0x864e, 1673}, - {0x8650, 2047}, - {0x8652, 7651}, - {0x8653, 7650}, - {0x8654, 2479}, - {0x8655, 2952}, - {0x8656, 8252}, - {0x8659, 8251}, - {0x865b, 3400}, - {0x865c, 3821}, - {0x865e, 3820}, - {0x865f, 3822}, - {0x8667, 5222}, - {0x866b, 1039}, - {0x866d, 6726}, - {0x866e, 6727}, - {0x866f, 6725}, - {0x8670, 6724}, - {0x8671, 1674}, - {0x8673, 7165}, - {0x8674, 7163}, - {0x8677, 7162}, - {0x8679, 2048}, - {0x867a, 2050}, - {0x867b, 2049}, - {0x867c, 7164}, - {0x8685, 7663}, - {0x8686, 7660}, - {0x8687, 7658}, - {0x868a, 2480}, - {0x868b, 7661}, - {0x868c, 2485}, - {0x868d, 7655}, - {0x868e, 7670}, - {0x8690, 7672}, - {0x8691, 7656}, - {0x8693, 2482}, - {0x8694, 7673}, - {0x8695, 7668}, - {0x8696, 7654}, - {0x8697, 7659}, - {0x8698, 7669}, - {0x8699, 7665}, - {0x869a, 7662}, - {0x869c, 2487}, - {0x869d, 7671}, - {0x869e, 7657}, - {0x86a1, 7666}, - {0x86a2, 7652}, - {0x86a3, 2486}, - {0x86a4, 2483}, - {0x86a5, 7664}, - {0x86a7, 7667}, - {0x86a8, 7653}, - {0x86a9, 2484}, - {0x86aa, 2481}, - {0x86af, 2962}, - {0x86b0, 8259}, - {0x86b1, 2961}, - {0x86b3, 8262}, - {0x86b4, 8265}, - {0x86b5, 2958}, - {0x86b6, 2956}, - {0x86b7, 8254}, - {0x86b8, 8263}, - {0x86b9, 8261}, - {0x86ba, 8258}, - {0x86bb, 8266}, - {0x86bc, 8267}, - {0x86bd, 8269}, - {0x86be, 8270}, - {0x86bf, 8253}, - {0x86c0, 2955}, - {0x86c1, 8256}, - {0x86c2, 8255}, - {0x86c3, 8268}, - {0x86c4, 2957}, - {0x86c5, 8257}, - {0x86c6, 2959}, - {0x86c7, 2954}, - {0x86c8, 8260}, - {0x86c9, 2963}, - {0x86cb, 2960}, - {0x86cc, 8264}, - {0x86d0, 3407}, - {0x86d1, 8914}, - {0x86d3, 8903}, - {0x86d4, 3404}, - {0x86d6, 9581}, - {0x86d7, 8912}, - {0x86d8, 8900}, - {0x86d9, 3402}, - {0x86da, 8905}, - {0x86db, 3405}, - {0x86dc, 8909}, - {0x86dd, 8907}, - {0x86de, 3408}, - {0x86df, 3401}, - {0x86e2, 8901}, - {0x86e3, 8904}, - {0x86e4, 3406}, - {0x86e6, 8902}, - {0x86e8, 8913}, - {0x86e9, 8911}, - {0x86ea, 8906}, - {0x86eb, 8908}, - {0x86ec, 8910}, - {0x86ed, 3403}, - {0x86f5, 9582}, - {0x86f6, 9588}, - {0x86f7, 9578}, - {0x86f8, 9584}, - {0x86f9, 3823}, - {0x86fa, 9580}, - {0x86fb, 3829}, - {0x86fe, 3828}, - {0x8700, 3827}, - {0x8701, 9587}, - {0x8702, 3830}, - {0x8703, 3831}, - {0x8704, 9577}, - {0x8705, 9590}, - {0x8706, 3832}, - {0x8707, 3826}, - {0x8708, 3825}, - {0x8709, 9586}, - {0x870a, 3833}, - {0x870b, 9576}, - {0x870c, 9579}, - {0x870d, 9589}, - {0x870e, 9585}, - {0x8713, 3824}, - {0x8718, 4248}, - {0x871c, 4243}, - {0x8722, 4245}, - {0x8725, 4246}, - {0x8727, 0}, - {0x8729, 4251}, - {0x8734, 4247}, - {0x8737, 4250}, - {0x873b, 4244}, - {0x873f, 4242}, - {0x874c, 4616}, - {0x874d, 9583}, - {0x8753, 4617}, - {0x8755, 4249}, - {0x8757, 4615}, - {0x8759, 4614}, - {0x8760, 4610}, - {0x8764, 0}, - {0x8766, 4611}, - {0x8768, 4613}, - {0x8774, 4608}, - {0x8776, 4609}, - {0x8778, 4612}, - {0x8782, 4607}, - {0x8783, 4928}, - {0x878d, 4932}, - {0x8791, 0}, - {0x879e, 4930}, - {0x879f, 4929}, - {0x87a2, 4931}, - {0x87ab, 5228}, - {0x87b3, 5225}, - {0x87ba, 5230}, - {0x87bb, 5229}, - {0x87c0, 5223}, - {0x87c6, 5227}, - {0x87c8, 5231}, - {0x87cb, 5232}, - {0x87d1, 5224}, - {0x87d2, 5226}, - {0x87e0, 5414}, - {0x87ec, 5412}, - {0x87ef, 5411}, - {0x87f2, 5413}, - {0x87f7, 0}, - {0x87f9, 5566}, - {0x87fb, 5563}, - {0x87fe, 5567}, - {0x8805, 5564}, - {0x880d, 5565}, - {0x8811, 0}, - {0x8814, 5695}, - {0x8815, 5696}, - {0x881f, 5771}, - {0x8821, 5770}, - {0x8822, 5769}, - {0x8823, 5768}, - {0x8831, 5897}, - {0x8836, 5928}, - {0x8839, 5929}, - {0x883b, 5959}, - {0x8840, 1040}, - {0x8841, 7166}, - {0x8843, 7674}, - {0x8844, 7675}, - {0x8846, 0}, - {0x8848, 8915}, - {0x884c, 1041}, - {0x884d, 2051}, - {0x884e, 7167}, - {0x8852, 8271}, - {0x8853, 2964}, - {0x8855, 8917}, - {0x8856, 8916}, - {0x8857, 3409}, - {0x8859, 3834}, - {0x885b, 4618}, - {0x885d, 4619}, - {0x8861, 4933}, - {0x8862, 5930}, - {0x8863, 1042}, - {0x8867, 7168}, - {0x8868, 1676}, - {0x8869, 7170}, - {0x886a, 7169}, - {0x886b, 2052}, - {0x886d, 7676}, - {0x886f, 7683}, - {0x8870, 2488}, - {0x8871, 7681}, - {0x8872, 7679}, - {0x8874, 7686}, - {0x8875, 7677}, - {0x8876, 7678}, - {0x8877, 2489}, - {0x8879, 2493}, - {0x887c, 7687}, - {0x887d, 2492}, - {0x887e, 7685}, - {0x887f, 7682}, - {0x8880, 7680}, - {0x8881, 2490}, - {0x8882, 2491}, - {0x8883, 7684}, - {0x8888, 2966}, - {0x8889, 8272}, - {0x888b, 2971}, - {0x888c, 8288}, - {0x888d, 2970}, - {0x888e, 8290}, - {0x8891, 8278}, - {0x8892, 2968}, - {0x8893, 8289}, - {0x8895, 8273}, - {0x8896, 2969}, - {0x8897, 8285}, - {0x8898, 8281}, - {0x8899, 8283}, - {0x889a, 8277}, - {0x889b, 8284}, - {0x889e, 2965}, - {0x889f, 8280}, - {0x88a1, 8279}, - {0x88a2, 8275}, - {0x88a4, 8286}, - {0x88a7, 8282}, - {0x88a8, 8274}, - {0x88aa, 8276}, - {0x88ab, 2967}, - {0x88ac, 8287}, - {0x88b1, 3412}, - {0x88b2, 8928}, - {0x88b5, 0}, - {0x88b6, 8924}, - {0x88b7, 8926}, - {0x88b8, 8921}, - {0x88b9, 8920}, - {0x88ba, 8918}, - {0x88bc, 8925}, - {0x88bd, 8927}, - {0x88be, 8923}, - {0x88c0, 8922}, - {0x88c1, 3410}, - {0x88c2, 3411}, - {0x88c9, 8930}, - {0x88ca, 3842}, - {0x88cb, 9592}, - {0x88cc, 9598}, - {0x88cd, 9593}, - {0x88ce, 9594}, - {0x88d0, 9599}, - {0x88d2, 3844}, - {0x88d4, 3836}, - {0x88d5, 3843}, - {0x88d6, 9591}, - {0x88d7, 8919}, - {0x88d8, 3839}, - {0x88d9, 3837}, - {0x88da, 9597}, - {0x88db, 9596}, - {0x88dc, 3838}, - {0x88dd, 3840}, - {0x88de, 9595}, - {0x88df, 3835}, - {0x88e1, 3841}, - {0x88e8, 4258}, - {0x88ef, 4260}, - {0x88f2, 0}, - {0x88f3, 4252}, - {0x88f4, 4254}, - {0x88f8, 4256}, - {0x88f9, 4255}, - {0x88fd, 4257}, - {0x8901, 8929}, - {0x8902, 4253}, - {0x8907, 4621}, - {0x890a, 4625}, - {0x8910, 4620}, - {0x8912, 4622}, - {0x8913, 4623}, - {0x8915, 4624}, - {0x8918, 0}, - {0x8919, 1}, - {0x891a, 4259}, - {0x8921, 4938}, - {0x8925, 4936}, - {0x892a, 4934}, - {0x892b, 4937}, - {0x892e, 0}, - {0x8932, 4935}, - {0x8936, 5234}, - {0x8938, 5236}, - {0x893b, 5233}, - {0x893d, 5237}, - {0x8944, 5235}, - {0x8951, 0}, - {0x8956, 5570}, - {0x895b, 0}, - {0x895e, 5571}, - {0x895f, 5569}, - {0x8960, 5568}, - {0x8964, 5697}, - {0x896a, 5772}, - {0x896c, 5773}, - {0x896f, 5846}, - {0x8972, 5845}, - {0x897a, 0}, - {0x897e, 6169}, - {0x897f, 1043}, - {0x8981, 2053}, - {0x8982, 8291}, - {0x8983, 3413}, - {0x8985, 9600}, - {0x8986, 5415}, - {0x898b, 1288}, - {0x898f, 2973}, - {0x8993, 2972}, - {0x8995, 8931}, - {0x8996, 3414}, - {0x8997, 8933}, - {0x8998, 8932}, - {0x899b, 9601}, - {0x899c, 3845}, - {0x89a6, 4940}, - {0x89aa, 4939}, - {0x89ac, 5238}, - {0x89b2, 5416}, - {0x89ba, 5698}, - {0x89bd, 5774}, - {0x89c0, 5960}, - {0x89d2, 1289}, - {0x89d3, 7171}, - {0x89d4, 2054}, - {0x89d5, 8294}, - {0x89d6, 8292}, - {0x89d9, 8293}, - {0x89da, 8935}, - {0x89db, 8936}, - {0x89dc, 9608}, - {0x89dd, 8934}, - {0x89df, 9602}, - {0x89e0, 9606}, - {0x89e1, 9605}, - {0x89e2, 9607}, - {0x89e3, 3846}, - {0x89e4, 9604}, - {0x89e5, 9603}, - {0x89e6, 9609}, - {0x89f3, 0}, - {0x89f4, 5417}, - {0x89f8, 5699}, - {0x89fc, 5847}, - {0x8a00, 1290}, - {0x8a02, 2056}, - {0x8a03, 2057}, - {0x8a04, 7172}, - {0x8a07, 7173}, - {0x8a08, 2055}, - {0x8a0a, 2499}, - {0x8a0c, 2497}, - {0x8a0e, 2496}, - {0x8a0f, 2503}, - {0x8a10, 2495}, - {0x8a11, 2504}, - {0x8a12, 7688}, - {0x8a13, 2501}, - {0x8a15, 2498}, - {0x8a16, 2502}, - {0x8a17, 2500}, - {0x8a18, 2494}, - {0x8a1b, 2981}, - {0x8a1d, 2975}, - {0x8a1e, 8298}, - {0x8a1f, 2980}, - {0x8a22, 2982}, - {0x8a23, 2976}, - {0x8a25, 2977}, - {0x8a27, 8296}, - {0x8a2a, 2974}, - {0x8a2c, 8297}, - {0x8a2d, 2979}, - {0x8a30, 8295}, - {0x8a31, 2978}, - {0x8a34, 3425}, - {0x8a36, 3427}, - {0x8a39, 8939}, - {0x8a3a, 3426}, - {0x8a3b, 3415}, - {0x8a3c, 3419}, - {0x8a3e, 3865}, - {0x8a3f, 9614}, - {0x8a40, 8941}, - {0x8a41, 3420}, - {0x8a44, 8944}, - {0x8a45, 8945}, - {0x8a46, 3424}, - {0x8a48, 8947}, - {0x8a4a, 8949}, - {0x8a4c, 8950}, - {0x8a4d, 8938}, - {0x8a4e, 8937}, - {0x8a4f, 8951}, - {0x8a50, 3423}, - {0x8a51, 8948}, - {0x8a52, 8946}, - {0x8a54, 3421}, - {0x8a55, 3417}, - {0x8a56, 3428}, - {0x8a57, 8942}, - {0x8a58, 8943}, - {0x8a59, 8940}, - {0x8a5b, 3422}, - {0x8a5e, 3418}, - {0x8a60, 3416}, - {0x8a61, 9613}, - {0x8a62, 3860}, - {0x8a63, 3855}, - {0x8a66, 3850}, - {0x8a68, 3866}, - {0x8a69, 3851}, - {0x8a6b, 3847}, - {0x8a6c, 3862}, - {0x8a6d, 3859}, - {0x8a6e, 3861}, - {0x8a70, 3852}, - {0x8a71, 3857}, - {0x8a72, 3848}, - {0x8a73, 3849}, - {0x8a74, 9621}, - {0x8a75, 9618}, - {0x8a76, 9610}, - {0x8a77, 9615}, - {0x8a79, 3863}, - {0x8a7a, 9622}, - {0x8a7b, 3864}, - {0x8a7c, 3854}, - {0x8a7f, 9612}, - {0x8a81, 9620}, - {0x8a82, 9616}, - {0x8a83, 9619}, - {0x8a84, 9617}, - {0x8a85, 3858}, - {0x8a86, 9611}, - {0x8a87, 3853}, - {0x8a8c, 4262}, - {0x8a8d, 4265}, - {0x8a91, 4273}, - {0x8a93, 4267}, - {0x8a95, 4630}, - {0x8a98, 4272}, - {0x8a9a, 4274}, - {0x8a9e, 4263}, - {0x8aa0, 3856}, - {0x8aa1, 4266}, - {0x8aa3, 4264}, - {0x8aa4, 4268}, - {0x8aa5, 4270}, - {0x8aa6, 4261}, - {0x8aa7, 4275}, - {0x8aa8, 4271}, - {0x8aaa, 4269}, - {0x8ab0, 4637}, - {0x8ab2, 4633}, - {0x8ab6, 4640}, - {0x8ab9, 4641}, - {0x8abc, 4626}, - {0x8abf, 4636}, - {0x8ac2, 4635}, - {0x8ac4, 4629}, - {0x8ac7, 4628}, - {0x8ac9, 4634}, - {0x8acb, 4631}, - {0x8acd, 4639}, - {0x8ad2, 4627}, - {0x8ad5, 0}, - {0x8ad6, 4638}, - {0x8adb, 4642}, - {0x8adc, 4946}, - {0x8ae6, 4941}, - {0x8ae7, 4947}, - {0x8aeb, 4943}, - {0x8aed, 4953}, - {0x8aee, 4948}, - {0x8af1, 4944}, - {0x8af3, 4954}, - {0x8af5, 0}, - {0x8af6, 4955}, - {0x8af7, 4952}, - {0x8af8, 4632}, - {0x8afa, 4942}, - {0x8afc, 4956}, - {0x8afe, 4949}, - {0x8b00, 4945}, - {0x8b01, 4950}, - {0x8b02, 4951}, - {0x8b04, 5246}, - {0x8b0a, 5243}, - {0x8b0e, 5239}, - {0x8b10, 5247}, - {0x8b17, 5240}, - {0x8b19, 5241}, - {0x8b1b, 5242}, - {0x8b1d, 5245}, - {0x8b20, 5244}, - {0x8b28, 5418}, - {0x8b2b, 5421}, - {0x8b2c, 5420}, - {0x8b39, 5419}, - {0x8b41, 5572}, - {0x8b46, 5579}, - {0x8b49, 5575}, - {0x8b4d, 0}, - {0x8b4e, 5577}, - {0x8b4f, 5578}, - {0x8b58, 5574}, - {0x8b59, 5580}, - {0x8b5a, 5576}, - {0x8b5c, 5573}, - {0x8b5f, 5704}, - {0x8b66, 5702}, - {0x8b6b, 5705}, - {0x8b6c, 5701}, - {0x8b6f, 5703}, - {0x8b70, 5700}, - {0x8b74, 5775}, - {0x8b77, 5776}, - {0x8b7b, 0}, - {0x8b7d, 5777}, - {0x8b80, 5848}, - {0x8b8a, 5898}, - {0x8b92, 5932}, - {0x8b93, 5931}, - {0x8b95, 0}, - {0x8b96, 5933}, - {0x8b99, 0}, - {0x8b9a, 5972}, - {0x8b9c, 5978}, - {0x8c37, 1291}, - {0x8c39, 8299}, - {0x8c3b, 8300}, - {0x8c3c, 9623}, - {0x8c3f, 5249}, - {0x8c41, 5248}, - {0x8c46, 1292}, - {0x8c47, 7689}, - {0x8c48, 2505}, - {0x8c49, 2983}, - {0x8c4a, 9625}, - {0x8c4b, 9624}, - {0x8c4c, 4643}, - {0x8c4e, 4644}, - {0x8c50, 5422}, - {0x8c54, 5987}, - {0x8c55, 1293}, - {0x8c56, 6728}, - {0x8c57, 7690}, - {0x8c5a, 2984}, - {0x8c5c, 8301}, - {0x8c5d, 8302}, - {0x8c5f, 8952}, - {0x8c61, 3429}, - {0x8c62, 3867}, - {0x8c64, 9627}, - {0x8c65, 9626}, - {0x8c66, 9628}, - {0x8c69, 0}, - {0x8c6a, 4276}, - {0x8c6b, 4957}, - {0x8c6c, 4645}, - {0x8c6d, 4958}, - {0x8c73, 5250}, - {0x8c78, 6375}, - {0x8c79, 2507}, - {0x8c7a, 2506}, - {0x8c7b, 7691}, - {0x8c7d, 8303}, - {0x8c80, 8954}, - {0x8c81, 8953}, - {0x8c82, 3430}, - {0x8c84, 9630}, - {0x8c85, 9631}, - {0x8c86, 9629}, - {0x8c89, 3869}, - {0x8c8a, 3868}, - {0x8c8c, 4278}, - {0x8c8d, 4277}, - {0x8c92, 0}, - {0x8c93, 4959}, - {0x8c9d, 1294}, - {0x8c9e, 2058}, - {0x8ca0, 2059}, - {0x8ca1, 2508}, - {0x8ca2, 2509}, - {0x8ca3, 7693}, - {0x8ca4, 7692}, - {0x8ca5, 8304}, - {0x8ca7, 2990}, - {0x8ca8, 2988}, - {0x8ca9, 2985}, - {0x8caa, 2989}, - {0x8cab, 2987}, - {0x8cac, 2986}, - {0x8caf, 3431}, - {0x8cb0, 8957}, - {0x8cb2, 3874}, - {0x8cb3, 3433}, - {0x8cb4, 3438}, - {0x8cb5, 8959}, - {0x8cb6, 3440}, - {0x8cb7, 3439}, - {0x8cb8, 3442}, - {0x8cb9, 8958}, - {0x8cba, 8955}, - {0x8cbb, 3436}, - {0x8cbc, 3432}, - {0x8cbd, 3434}, - {0x8cbe, 8956}, - {0x8cbf, 3441}, - {0x8cc0, 3437}, - {0x8cc1, 3435}, - {0x8cc2, 3876}, - {0x8cc3, 3875}, - {0x8cc4, 3873}, - {0x8cc5, 3877}, - {0x8cc7, 3871}, - {0x8cc8, 3872}, - {0x8cca, 3870}, - {0x8ccc, 9632}, - {0x8cd1, 4280}, - {0x8cd2, 4281}, - {0x8cd3, 4279}, - {0x8cdc, 4654}, - {0x8cde, 4647}, - {0x8ce0, 4646}, - {0x8ce1, 4656}, - {0x8ce2, 4652}, - {0x8ce3, 4653}, - {0x8ce4, 4649}, - {0x8ce6, 4648}, - {0x8cea, 4655}, - {0x8cec, 4650}, - {0x8ced, 4651}, - {0x8cf4, 4960}, - {0x8cf8, 5254}, - {0x8cfa, 5251}, - {0x8cfb, 5255}, - {0x8cfc, 5253}, - {0x8cfd, 5252}, - {0x8d05, 5423}, - {0x8d07, 0}, - {0x8d08, 5581}, - {0x8d0a, 5582}, - {0x8d0d, 5707}, - {0x8d0f, 5706}, - {0x8d13, 5778}, - {0x8d16, 5849}, - {0x8d17, 5850}, - {0x8d1b, 5935}, - {0x8d64, 1295}, - {0x8d66, 2992}, - {0x8d67, 2991}, - {0x8d68, 9633}, - {0x8d69, 9634}, - {0x8d6b, 4282}, - {0x8d6d, 4657}, - {0x8d70, 1296}, - {0x8d72, 7174}, - {0x8d73, 2061}, - {0x8d74, 2060}, - {0x8d76, 7694}, - {0x8d77, 2510}, - {0x8d78, 7695}, - {0x8d79, 8307}, - {0x8d7b, 8306}, - {0x8d7d, 8305}, - {0x8d80, 8961}, - {0x8d81, 3445}, - {0x8d84, 8960}, - {0x8d85, 3444}, - {0x8d89, 8962}, - {0x8d8a, 3443}, - {0x8d8c, 9636}, - {0x8d8d, 9639}, - {0x8d8e, 9637}, - {0x8d8f, 9638}, - {0x8d90, 9642}, - {0x8d91, 9635}, - {0x8d92, 9643}, - {0x8d93, 9640}, - {0x8d94, 9641}, - {0x8d95, 4284}, - {0x8d99, 4283}, - {0x8d9f, 4658}, - {0x8da3, 4659}, - {0x8da8, 5256}, - {0x8db3, 1297}, - {0x8db4, 2062}, - {0x8db5, 7696}, - {0x8db6, 7698}, - {0x8db7, 7697}, - {0x8db9, 8310}, - {0x8dba, 2994}, - {0x8dbc, 8308}, - {0x8dbe, 2993}, - {0x8dbf, 8311}, - {0x8dc1, 8312}, - {0x8dc2, 8309}, - {0x8dc5, 8974}, - {0x8dc6, 3453}, - {0x8dc7, 8966}, - {0x8dc8, 8972}, - {0x8dcb, 3448}, - {0x8dcc, 3451}, - {0x8dcd, 8965}, - {0x8dce, 3446}, - {0x8dcf, 8969}, - {0x8dd0, 9649}, - {0x8dd1, 3450}, - {0x8dd3, 8964}, - {0x8dd5, 8970}, - {0x8dd6, 8967}, - {0x8dd7, 8973}, - {0x8dd8, 8963}, - {0x8dd9, 8971}, - {0x8dda, 3449}, - {0x8ddb, 3452}, - {0x8ddc, 8968}, - {0x8ddd, 3447}, - {0x8ddf, 3879}, - {0x8de0, 9645}, - {0x8de1, 3878}, - {0x8de2, 9652}, - {0x8de3, 9651}, - {0x8de4, 3885}, - {0x8de6, 3886}, - {0x8de7, 9653}, - {0x8de8, 3880}, - {0x8de9, 9650}, - {0x8dea, 3884}, - {0x8deb, 9655}, - {0x8dec, 9646}, - {0x8dee, 9648}, - {0x8def, 3881}, - {0x8df0, 9644}, - {0x8df1, 9647}, - {0x8df2, 9654}, - {0x8df3, 3882}, - {0x8df4, 9656}, - {0x8dfa, 3883}, - {0x8dfc, 4285}, - {0x8e0f, 4664}, - {0x8e10, 4661}, - {0x8e1d, 4662}, - {0x8e1e, 4668}, - {0x8e1f, 4666}, - {0x8e21, 4667}, - {0x8e22, 4663}, - {0x8e27, 0}, - {0x8e29, 4665}, - {0x8e2b, 4660}, - {0x8e31, 4962}, - {0x8e34, 4963}, - {0x8e35, 4966}, - {0x8e39, 4965}, - {0x8e3d, 0}, - {0x8e42, 4964}, - {0x8e44, 4961}, - {0x8e48, 5259}, - {0x8e49, 5257}, - {0x8e4a, 5260}, - {0x8e4b, 5258}, - {0x8e55, 5429}, - {0x8e59, 5424}, - {0x8e5f, 5428}, - {0x8e63, 5425}, - {0x8e64, 5427}, - {0x8e66, 5426}, - {0x8e6c, 5587}, - {0x8e72, 5584}, - {0x8e74, 5589}, - {0x8e76, 5586}, - {0x8e7a, 5588}, - {0x8e7c, 5583}, - {0x8e81, 5709}, - {0x8e82, 5711}, - {0x8e85, 5710}, - {0x8e87, 5585}, - {0x8e89, 5708}, - {0x8e8a, 5779}, - {0x8e8b, 5781}, - {0x8e8d, 5780}, - {0x8e91, 5851}, - {0x8e93, 5852}, - {0x8e97, 0}, - {0x8e9f, 0}, - {0x8ea0, 1}, - {0x8ea1, 5961}, - {0x8eaa, 5979}, - {0x8eab, 1298}, - {0x8eac, 2511}, - {0x8eb2, 3887}, - {0x8eba, 4669}, - {0x8ec0, 5430}, - {0x8eca, 1299}, - {0x8ecb, 1677}, - {0x8ecc, 2064}, - {0x8ecd, 2063}, - {0x8ecf, 2514}, - {0x8ed1, 7699}, - {0x8ed2, 2512}, - {0x8ed3, 7700}, - {0x8ed4, 2513}, - {0x8ed7, 8317}, - {0x8ed8, 8313}, - {0x8edb, 2995}, - {0x8edc, 8316}, - {0x8edd, 8315}, - {0x8ede, 8314}, - {0x8edf, 2996}, - {0x8ee0, 8318}, - {0x8ee1, 8319}, - {0x8ee5, 8981}, - {0x8ee6, 8979}, - {0x8ee7, 8983}, - {0x8ee8, 8984}, - {0x8ee9, 8990}, - {0x8eeb, 8986}, - {0x8eec, 8988}, - {0x8eee, 8980}, - {0x8eef, 8975}, - {0x8ef1, 8987}, - {0x8ef4, 8989}, - {0x8ef5, 8982}, - {0x8ef6, 8985}, - {0x8ef7, 8976}, - {0x8ef8, 3455}, - {0x8ef9, 8978}, - {0x8efa, 8977}, - {0x8efb, 3454}, - {0x8efc, 3456}, - {0x8efe, 3890}, - {0x8eff, 9658}, - {0x8f00, 9660}, - {0x8f01, 9659}, - {0x8f02, 9664}, - {0x8f03, 3888}, - {0x8f05, 9661}, - {0x8f06, 9657}, - {0x8f07, 9662}, - {0x8f08, 9663}, - {0x8f09, 3889}, - {0x8f0a, 3891}, - {0x8f0b, 9665}, - {0x8f11, 0}, - {0x8f12, 4287}, - {0x8f13, 4289}, - {0x8f14, 4286}, - {0x8f15, 4288}, - {0x8f17, 0}, - {0x8f1b, 4671}, - {0x8f1c, 4676}, - {0x8f1d, 4670}, - {0x8f1e, 4677}, - {0x8f1f, 4672}, - {0x8f25, 4678}, - {0x8f26, 4674}, - {0x8f29, 4673}, - {0x8f2a, 4675}, - {0x8f2f, 4968}, - {0x8f33, 4970}, - {0x8f38, 4969}, - {0x8f3b, 4967}, - {0x8f3e, 5262}, - {0x8f3f, 5265}, - {0x8f42, 5263}, - {0x8f44, 5261}, - {0x8f45, 5264}, - {0x8f47, 0}, - {0x8f48, 1}, - {0x8f49, 5431}, - {0x8f4d, 5432}, - {0x8f4e, 5591}, - {0x8f50, 0}, - {0x8f54, 5590}, - {0x8f57, 0}, - {0x8f5f, 5782}, - {0x8f61, 5853}, - {0x8f67, 0}, - {0x8f9b, 1300}, - {0x8f9c, 3457}, - {0x8f9f, 3892}, - {0x8fa3, 4290}, - {0x8fa6, 4972}, - {0x8fa8, 4971}, - {0x8fad, 5592}, - {0x8fae, 5679}, - {0x8faf, 5783}, - {0x8fb0, 1301}, - {0x8fb1, 2515}, - {0x8fb2, 3893}, - {0x8fb5, 560}, - {0x8fbc, 0}, - {0x8fbf, 6377}, - {0x8fc2, 1302}, - {0x8fc4, 1305}, - {0x8fc5, 1304}, - {0x8fc6, 1303}, - {0x8fc9, 6376}, - {0x8fcb, 6730}, - {0x8fcd, 6732}, - {0x8fce, 1678}, - {0x8fd1, 1680}, - {0x8fd2, 6729}, - {0x8fd3, 6731}, - {0x8fd4, 1679}, - {0x8fd5, 6734}, - {0x8fd6, 6733}, - {0x8fd7, 6735}, - {0x8fe0, 7178}, - {0x8fe1, 7176}, - {0x8fe2, 2067}, - {0x8fe3, 7175}, - {0x8fe4, 2072}, - {0x8fe5, 2069}, - {0x8fe6, 2066}, - {0x8fe8, 2073}, - {0x8fea, 2068}, - {0x8feb, 2071}, - {0x8fed, 2070}, - {0x8fee, 7177}, - {0x8ff0, 2065}, - {0x8ff4, 2521}, - {0x8ff5, 7702}, - {0x8ff6, 7708}, - {0x8ff7, 2518}, - {0x8ff8, 2525}, - {0x8ffa, 2520}, - {0x8ffb, 7705}, - {0x8ffc, 7707}, - {0x8ffd, 2523}, - {0x8ffe, 7701}, - {0x8fff, 7704}, - {0x9000, 2519}, - {0x9001, 2516}, - {0x9002, 7703}, - {0x9003, 2522}, - {0x9004, 7706}, - {0x9005, 2524}, - {0x9006, 2517}, - {0x900b, 8321}, - {0x900c, 8324}, - {0x900d, 2998}, - {0x900f, 3008}, - {0x9010, 3004}, - {0x9011, 8322}, - {0x9014, 3012}, - {0x9015, 3005}, - {0x9016, 3010}, - {0x9017, 3000}, - {0x9019, 2997}, - {0x901a, 2999}, - {0x901b, 3011}, - {0x901c, 8323}, - {0x901d, 3003}, - {0x901e, 3006}, - {0x901f, 3002}, - {0x9020, 3007}, - {0x9021, 8325}, - {0x9022, 3009}, - {0x9023, 3001}, - {0x9024, 8320}, - {0x902d, 8991}, - {0x902e, 3458}, - {0x902f, 8993}, - {0x9031, 3460}, - {0x9032, 3462}, - {0x9034, 8992}, - {0x9035, 3459}, - {0x9036, 3463}, - {0x9038, 3461}, - {0x903c, 3899}, - {0x903d, 9670}, - {0x903e, 3907}, - {0x903f, 9667}, - {0x9041, 3908}, - {0x9042, 3897}, - {0x9044, 9668}, - {0x9047, 3902}, - {0x9049, 9669}, - {0x904a, 3895}, - {0x904b, 3894}, - {0x904d, 3905}, - {0x904e, 3904}, - {0x904f, 3903}, - {0x9050, 3901}, - {0x9051, 3906}, - {0x9052, 9666}, - {0x9053, 3896}, - {0x9054, 3898}, - {0x9055, 3900}, - {0x9058, 4292}, - {0x9059, 4295}, - {0x905b, 4299}, - {0x905c, 4293}, - {0x905d, 4298}, - {0x905e, 4296}, - {0x9060, 4291}, - {0x9062, 4297}, - {0x9063, 4294}, - {0x9068, 4681}, - {0x9069, 4679}, - {0x906d, 4682}, - {0x906e, 4680}, - {0x9072, 4976}, - {0x9074, 4974}, - {0x9075, 4973}, - {0x9077, 4683}, - {0x9078, 4975}, - {0x907a, 4978}, - {0x907c, 4977}, - {0x907d, 5267}, - {0x907f, 5266}, - {0x9080, 5271}, - {0x9081, 5269}, - {0x9082, 5270}, - {0x9083, 5434}, - {0x9084, 5268}, - {0x9087, 5433}, - {0x9088, 5435}, - {0x908a, 5593}, - {0x908b, 5594}, - {0x908f, 5900}, - {0x9090, 5899}, - {0x9091, 1307}, - {0x9094, 6174}, - {0x9095, 2526}, - {0x9097, 6171}, - {0x9098, 6172}, - {0x9099, 6170}, - {0x909b, 6173}, - {0x909e, 6381}, - {0x909f, 6378}, - {0x90a0, 6383}, - {0x90a1, 6379}, - {0x90a2, 1308}, - {0x90a3, 1311}, - {0x90a5, 6380}, - {0x90a6, 1310}, - {0x90a7, 6382}, - {0x90aa, 1309}, - {0x90af, 6738}, - {0x90b0, 6740}, - {0x90b1, 1683}, - {0x90b2, 6736}, - {0x90b3, 6739}, - {0x90b4, 6737}, - {0x90b5, 1681}, - {0x90b6, 1684}, - {0x90b8, 1682}, - {0x90bd, 7180}, - {0x90be, 7184}, - {0x90bf, 7181}, - {0x90c1, 2076}, - {0x90c3, 2077}, - {0x90c5, 7183}, - {0x90c7, 7185}, - {0x90c8, 7187}, - {0x90ca, 2074}, - {0x90cb, 7186}, - {0x90ce, 2075}, - {0x90d4, 8332}, - {0x90d5, 7182}, - {0x90d6, 7709}, - {0x90d7, 7718}, - {0x90d8, 7716}, - {0x90d9, 7711}, - {0x90da, 7712}, - {0x90db, 7717}, - {0x90dc, 7719}, - {0x90dd, 2528}, - {0x90df, 7714}, - {0x90e0, 7710}, - {0x90e1, 2527}, - {0x90e2, 2529}, - {0x90e3, 7713}, - {0x90e4, 7720}, - {0x90e5, 7715}, - {0x90e8, 3013}, - {0x90e9, 8335}, - {0x90ea, 8327}, - {0x90eb, 8333}, - {0x90ec, 8334}, - {0x90ed, 3014}, - {0x90ef, 8326}, - {0x90f0, 8328}, - {0x90f1, 7179}, - {0x90f2, 8330}, - {0x90f3, 8331}, - {0x90f4, 8329}, - {0x90f5, 3465}, - {0x90f9, 9000}, - {0x90fb, 9001}, - {0x90fc, 8998}, - {0x90fd, 3015}, - {0x90fe, 3467}, - {0x90ff, 8997}, - {0x9100, 9003}, - {0x9101, 9002}, - {0x9102, 3464}, - {0x9103, 9006}, - {0x9104, 8996}, - {0x9105, 9005}, - {0x9106, 8994}, - {0x9107, 9004}, - {0x9108, 8999}, - {0x9109, 3466}, - {0x910b, 9677}, - {0x910d, 9672}, - {0x910e, 9678}, - {0x910f, 9673}, - {0x9110, 9671}, - {0x9111, 9674}, - {0x9112, 3909}, - {0x9114, 9676}, - {0x9116, 9675}, - {0x9117, 3910}, - {0x9118, 4301}, - {0x9119, 4300}, - {0x911e, 4302}, - {0x9127, 4686}, - {0x912a, 0}, - {0x912c, 8995}, - {0x912d, 4685}, - {0x9130, 4684}, - {0x9131, 4687}, - {0x9134, 4979}, - {0x9136, 0}, - {0x9139, 5272}, - {0x913b, 0}, - {0x9145, 0}, - {0x9148, 5854}, - {0x9149, 1312}, - {0x914a, 2079}, - {0x914b, 2078}, - {0x914c, 2532}, - {0x914d, 2531}, - {0x914e, 7722}, - {0x914f, 7723}, - {0x9150, 7721}, - {0x9152, 2530}, - {0x9153, 8339}, - {0x9155, 8340}, - {0x9156, 8336}, - {0x9157, 3016}, - {0x9158, 8337}, - {0x915a, 8338}, - {0x915f, 9009}, - {0x9160, 9011}, - {0x9161, 9007}, - {0x9162, 9010}, - {0x9163, 3468}, - {0x9164, 9008}, - {0x9165, 3469}, - {0x9168, 9186}, - {0x9169, 3913}, - {0x916a, 3912}, - {0x916c, 3911}, - {0x916e, 9679}, - {0x916f, 9680}, - {0x9174, 4306}, - {0x9175, 4303}, - {0x9177, 4305}, - {0x9178, 4304}, - {0x9182, 0}, - {0x9183, 4691}, - {0x9186, 0}, - {0x9187, 4688}, - {0x9189, 4689}, - {0x918b, 4690}, - {0x9191, 0}, - {0x9192, 4980}, - {0x919c, 5275}, - {0x919e, 5274}, - {0x91a3, 5273}, - {0x91ab, 5436}, - {0x91ac, 5437}, - {0x91ae, 5596}, - {0x91b1, 5595}, - {0x91b3, 0}, - {0x91b4, 5712}, - {0x91ba, 5784}, - {0x91c0, 5936}, - {0x91c1, 5962}, - {0x91c5, 5980}, - {0x91c6, 1313}, - {0x91c7, 1685}, - {0x91c9, 3914}, - {0x91cb, 5713}, - {0x91cc, 1314}, - {0x91cd, 2080}, - {0x91ce, 3017}, - {0x91cf, 3470}, - {0x91d0, 5438}, - {0x91d1, 1686}, - {0x91d3, 7189}, - {0x91d4, 7188}, - {0x91d5, 7724}, - {0x91d7, 2535}, - {0x91d8, 2533}, - {0x91d9, 2537}, - {0x91da, 7726}, - {0x91dc, 2536}, - {0x91dd, 2534}, - {0x91e2, 7725}, - {0x91e3, 3020}, - {0x91e4, 8346}, - {0x91e6, 3019}, - {0x91e7, 3021}, - {0x91e8, 8351}, - {0x91e9, 3023}, - {0x91ea, 8348}, - {0x91eb, 8349}, - {0x91ec, 8341}, - {0x91ed, 3022}, - {0x91ee, 8352}, - {0x91f1, 8343}, - {0x91f3, 8344}, - {0x91f4, 8342}, - {0x91f5, 3018}, - {0x91f7, 8350}, - {0x91f8, 8345}, - {0x91f9, 8347}, - {0x91fd, 9023}, - {0x91ff, 9022}, - {0x9200, 9020}, - {0x9201, 9012}, - {0x9202, 9027}, - {0x9203, 9015}, - {0x9204, 9025}, - {0x9205, 9032}, - {0x9206, 9024}, - {0x9207, 3478}, - {0x9209, 3474}, - {0x920a, 9013}, - {0x920c, 9019}, - {0x920d, 3476}, - {0x920f, 9018}, - {0x9210, 3477}, - {0x9211, 3479}, - {0x9212, 9021}, - {0x9214, 3471}, - {0x9215, 3472}, - {0x9216, 9033}, - {0x9217, 9031}, - {0x9219, 9030}, - {0x921a, 9016}, - {0x921c, 9028}, - {0x921e, 3475}, - {0x9223, 3473}, - {0x9224, 9029}, - {0x9225, 9014}, - {0x9226, 9017}, - {0x9227, 9026}, - {0x922e, 9690}, - {0x9230, 9683}, - {0x9231, 9702}, - {0x9232, 9711}, - {0x9233, 9686}, - {0x9234, 3925}, - {0x9236, 9699}, - {0x9237, 3915}, - {0x9238, 3917}, - {0x9239, 3929}, - {0x923a, 9684}, - {0x923d, 3918}, - {0x923e, 3920}, - {0x923f, 3930}, - {0x9240, 3919}, - {0x9245, 3928}, - {0x9246, 9692}, - {0x9248, 9681}, - {0x9249, 3926}, - {0x924a, 9691}, - {0x924b, 3922}, - {0x924c, 9709}, - {0x924d, 3927}, - {0x924e, 9707}, - {0x924f, 9695}, - {0x9250, 9705}, - {0x9251, 3924}, - {0x9252, 9682}, - {0x9253, 9708}, - {0x9254, 9703}, - {0x9256, 9710}, - {0x9257, 3916}, - {0x925a, 3931}, - {0x925b, 3921}, - {0x925e, 9688}, - {0x9260, 9696}, - {0x9261, 9700}, - {0x9263, 9704}, - {0x9264, 3923}, - {0x9265, 9687}, - {0x9266, 9685}, - {0x9267, 9697}, - {0x926c, 9694}, - {0x926d, 9693}, - {0x926f, 9698}, - {0x9270, 9701}, - {0x9272, 9706}, - {0x9278, 4307}, - {0x927b, 4313}, - {0x927c, 4317}, - {0x9280, 4309}, - {0x9283, 9689}, - {0x9285, 4310}, - {0x9291, 4318}, - {0x9293, 4314}, - {0x9296, 4312}, - {0x9298, 4311}, - {0x929c, 4315}, - {0x92a8, 4316}, - {0x92ac, 4308}, - {0x92b2, 4703}, - {0x92b3, 4698}, - {0x92b7, 4694}, - {0x92bb, 4693}, - {0x92bc, 4699}, - {0x92c1, 4697}, - {0x92c4, 0}, - {0x92c5, 4692}, - {0x92c7, 4701}, - {0x92d2, 4700}, - {0x92e4, 4696}, - {0x92ea, 4695}, - {0x92f0, 4702}, - {0x92f4, 0}, - {0x92f8, 4983}, - {0x92fc, 4987}, - {0x9304, 4989}, - {0x9310, 4991}, - {0x9315, 4994}, - {0x9318, 5283}, - {0x9319, 4996}, - {0x931a, 4990}, - {0x9320, 4981}, - {0x9321, 4993}, - {0x9322, 4986}, - {0x9326, 4992}, - {0x9328, 5278}, - {0x932b, 4988}, - {0x932e, 4995}, - {0x932f, 4985}, - {0x9333, 4984}, - {0x9336, 4982}, - {0x934a, 5280}, - {0x934b, 5282}, - {0x934d, 5276}, - {0x9351, 0}, - {0x9354, 5289}, - {0x935a, 5288}, - {0x935b, 5286}, - {0x9365, 5281}, - {0x936c, 5285}, - {0x9370, 5287}, - {0x9375, 5279}, - {0x937e, 5284}, - {0x9382, 5277}, - {0x938a, 5440}, - {0x9394, 5439}, - {0x9396, 5441}, - {0x9397, 5449}, - {0x9398, 5447}, - {0x939a, 5448}, - {0x93a2, 5442}, - {0x93ac, 5445}, - {0x93ae, 5444}, - {0x93b0, 5446}, - {0x93b3, 5443}, - {0x93c3, 5600}, - {0x93c8, 5601}, - {0x93cd, 5606}, - {0x93d1, 5598}, - {0x93d6, 5604}, - {0x93d7, 5609}, - {0x93d8, 5607}, - {0x93dc, 5602}, - {0x93dd, 5603}, - {0x93df, 5599}, - {0x93e1, 5597}, - {0x93e2, 5605}, - {0x93e4, 5608}, - {0x93e8, 5610}, - {0x93fd, 5716}, - {0x9403, 5715}, - {0x9418, 5714}, - {0x942b, 5791}, - {0x942e, 5785}, - {0x9432, 5790}, - {0x9433, 5786}, - {0x9435, 5787}, - {0x9438, 5789}, - {0x943a, 5788}, - {0x9444, 5855}, - {0x9449, 0}, - {0x944b, 0}, - {0x9451, 5856}, - {0x9452, 5857}, - {0x9460, 5902}, - {0x9463, 5901}, - {0x9464, 5903}, - {0x9469, 0}, - {0x946a, 5937}, - {0x9470, 5964}, - {0x9472, 5963}, - {0x9477, 5973}, - {0x947c, 5983}, - {0x947d, 5981}, - {0x947e, 5982}, - {0x947f, 5988}, - {0x9481, 0}, - {0x9577, 1687}, - {0x957a, 8353}, - {0x957b, 9034}, - {0x9580, 1688}, - {0x9582, 2081}, - {0x9583, 2538}, - {0x9586, 8354}, - {0x9588, 8355}, - {0x9589, 3024}, - {0x958b, 3482}, - {0x958c, 9036}, - {0x958d, 9035}, - {0x958e, 3486}, - {0x958f, 3481}, - {0x9590, 9037}, - {0x9591, 3483}, - {0x9592, 3485}, - {0x9593, 3484}, - {0x9594, 3480}, - {0x9598, 3932}, - {0x959b, 9715}, - {0x959c, 9713}, - {0x959e, 9714}, - {0x959f, 9712}, - {0x95a1, 4319}, - {0x95a3, 4322}, - {0x95a4, 4324}, - {0x95a5, 4323}, - {0x95a8, 4320}, - {0x95a9, 4321}, - {0x95ad, 4704}, - {0x95b1, 4705}, - {0x95ba, 0}, - {0x95bb, 4997}, - {0x95c6, 5294}, - {0x95c8, 5293}, - {0x95ca, 5290}, - {0x95cb, 5291}, - {0x95cc, 5292}, - {0x95d0, 5452}, - {0x95d3, 0}, - {0x95d4, 5450}, - {0x95d5, 5453}, - {0x95d6, 5451}, - {0x95db, 0}, - {0x95dc, 5611}, - {0x95e1, 5717}, - {0x95e2, 5792}, - {0x961c, 1689}, - {0x961e, 6068}, - {0x9620, 6177}, - {0x9621, 1044}, - {0x9622, 6175}, - {0x9623, 6178}, - {0x9624, 6176}, - {0x9628, 6385}, - {0x962a, 1318}, - {0x962c, 1319}, - {0x962d, 6387}, - {0x962e, 1316}, - {0x962f, 6386}, - {0x9630, 6384}, - {0x9631, 1317}, - {0x9632, 1315}, - {0x9639, 6741}, - {0x963a, 6744}, - {0x963b, 1692}, - {0x963c, 6743}, - {0x963d, 6742}, - {0x963f, 1691}, - {0x9640, 1690}, - {0x9642, 1694}, - {0x9643, 6745}, - {0x9644, 1693}, - {0x964a, 7194}, - {0x964b, 2083}, - {0x964c, 2084}, - {0x964d, 2085}, - {0x964e, 7195}, - {0x964f, 7191}, - {0x9650, 2082}, - {0x9651, 7192}, - {0x9653, 7193}, - {0x9654, 7190}, - {0x9658, 2545}, - {0x965b, 2542}, - {0x965c, 7727}, - {0x965d, 2543}, - {0x965e, 2546}, - {0x965f, 7728}, - {0x9661, 2541}, - {0x9662, 2539}, - {0x9663, 2540}, - {0x9664, 2544}, - {0x966a, 3025}, - {0x966b, 8358}, - {0x966c, 3033}, - {0x966d, 8357}, - {0x966f, 8360}, - {0x9670, 3029}, - {0x9671, 8359}, - {0x9672, 3494}, - {0x9673, 3027}, - {0x9674, 3030}, - {0x9675, 3026}, - {0x9676, 3031}, - {0x9677, 3032}, - {0x9678, 3028}, - {0x967c, 8356}, - {0x967d, 3490}, - {0x967e, 9039}, - {0x9680, 9043}, - {0x9683, 9042}, - {0x9684, 3495}, - {0x9685, 3491}, - {0x9686, 3492}, - {0x9687, 9038}, - {0x9688, 9040}, - {0x9689, 9041}, - {0x968a, 3487}, - {0x968b, 3489}, - {0x968d, 3493}, - {0x968e, 3488}, - {0x9691, 9718}, - {0x9692, 9716}, - {0x9693, 9717}, - {0x9694, 3934}, - {0x9695, 3935}, - {0x9697, 9719}, - {0x9698, 3933}, - {0x9699, 4325}, - {0x969b, 4327}, - {0x969c, 4326}, - {0x96a7, 4998}, - {0x96a8, 4999}, - {0x96aa, 5000}, - {0x96b1, 5295}, - {0x96b4, 5612}, - {0x96b6, 561}, - {0x96b8, 5296}, - {0x96b9, 1695}, - {0x96bb, 2547}, - {0x96bc, 7729}, - {0x96bf, 8361}, - {0x96c0, 3034}, - {0x96c1, 3496}, - {0x96c2, 9044}, - {0x96c3, 9046}, - {0x96c4, 3498}, - {0x96c5, 3497}, - {0x96c6, 3499}, - {0x96c7, 3500}, - {0x96c8, 9045}, - {0x96c9, 3938}, - {0x96ca, 3939}, - {0x96cb, 3937}, - {0x96cc, 4328}, - {0x96cd, 3936}, - {0x96ce, 9720}, - {0x96d2, 4329}, - {0x96d5, 5001}, - {0x96d6, 5297}, - {0x96d9, 5456}, - {0x96db, 5457}, - {0x96dc, 5455}, - {0x96de, 5458}, - {0x96e2, 5454}, - {0x96e3, 5613}, - {0x96e8, 1696}, - {0x96e9, 3036}, - {0x96ea, 3035}, - {0x96ef, 3501}, - {0x96f0, 9048}, - {0x96f1, 9047}, - {0x96f2, 3502}, - {0x96f5, 9724}, - {0x96f6, 3943}, - {0x96f7, 3940}, - {0x96f8, 9723}, - {0x96f9, 3942}, - {0x96fa, 9721}, - {0x96fb, 3941}, - {0x96fd, 9722}, - {0x9700, 4330}, - {0x9704, 4706}, - {0x9706, 4707}, - {0x9707, 4708}, - {0x9709, 4709}, - {0x970d, 5005}, - {0x970e, 5002}, - {0x970f, 5007}, - {0x9711, 5003}, - {0x9713, 5006}, - {0x9716, 5004}, - {0x971c, 5298}, - {0x971e, 5299}, - {0x9724, 5459}, - {0x9727, 5615}, - {0x972a, 5614}, - {0x972c, 0}, - {0x972f, 0}, - {0x9730, 5718}, - {0x9732, 5795}, - {0x9738, 5793}, - {0x9739, 5794}, - {0x973d, 5858}, - {0x973e, 5859}, - {0x9742, 5938}, - {0x9744, 5940}, - {0x9748, 5939}, - {0x9752, 1697}, - {0x9756, 3944}, - {0x975b, 5008}, - {0x975c, 5009}, - {0x975e, 1698}, - {0x9760, 4710}, - {0x9761, 5616}, - {0x9762, 2086}, - {0x9766, 5010}, - {0x9768, 5904}, - {0x9769, 2087}, - {0x976a, 8362}, - {0x976c, 9049}, - {0x976e, 9051}, - {0x9770, 9050}, - {0x9772, 9728}, - {0x9773, 9725}, - {0x9774, 3945}, - {0x9776, 3946}, - {0x9777, 9726}, - {0x9778, 9727}, - {0x977c, 4331}, - {0x9785, 4332}, - {0x978b, 4712}, - {0x978d, 4711}, - {0x978f, 4713}, - {0x9798, 5011}, - {0x97a0, 5300}, - {0x97a3, 5460}, - {0x97a6, 5461}, - {0x97ad, 5462}, - {0x97c1, 5861}, - {0x97c3, 5860}, - {0x97c5, 0}, - {0x97c6, 5941}, - {0x97c9, 5974}, - {0x97cb, 2088}, - {0x97cc, 3503}, - {0x97d3, 5301}, - {0x97dc, 5617}, - {0x97de, 0}, - {0x97df, 1}, - {0x97ed, 2089}, - {0x97f3, 2090}, - {0x97f6, 4333}, - {0x97f9, 5463}, - {0x97fb, 5618}, - {0x97fe, 0}, - {0x97ff, 5796}, - {0x9801, 2091}, - {0x9802, 3039}, - {0x9803, 3040}, - {0x9804, 8363}, - {0x9805, 3504}, - {0x9806, 3505}, - {0x9807, 9052}, - {0x9808, 3506}, - {0x980a, 3950}, - {0x980c, 3952}, - {0x980d, 9730}, - {0x980e, 9731}, - {0x980f, 9729}, - {0x9810, 3947}, - {0x9811, 3948}, - {0x9812, 3951}, - {0x9813, 3949}, - {0x9817, 4334}, - {0x9818, 4335}, - {0x981c, 4716}, - {0x9821, 4714}, - {0x9824, 5018}, - {0x982b, 4715}, - {0x982d, 5016}, - {0x9830, 5012}, - {0x9837, 5015}, - {0x9838, 5013}, - {0x9839, 5017}, - {0x983b, 5014}, - {0x9846, 5302}, - {0x984c, 5466}, - {0x984d, 5464}, - {0x984e, 5467}, - {0x984f, 5465}, - {0x9851, 0}, - {0x9852, 1}, - {0x9853, 5468}, - {0x9858, 5620}, - {0x985b, 5621}, - {0x985e, 5619}, - {0x9863, 0}, - {0x9865, 5798}, - {0x9867, 5797}, - {0x986b, 5862}, - {0x986f, 5905}, - {0x9870, 5942}, - {0x9871, 5965}, - {0x9874, 0}, - {0x98a8, 2092}, - {0x98a9, 9053}, - {0x98ac, 9732}, - {0x98ae, 0}, - {0x98af, 4336}, - {0x98b1, 4337}, - {0x98b3, 4717}, - {0x98b6, 5303}, - {0x98ba, 5469}, - {0x98bc, 5622}, - {0x98c2, 0}, - {0x98c4, 5719}, - {0x98db, 2093}, - {0x98df, 2094}, - {0x98e2, 2548}, - {0x98e3, 7730}, - {0x98e5, 8364}, - {0x98e7, 3507}, - {0x98e9, 3510}, - {0x98ea, 3508}, - {0x98eb, 9054}, - {0x98ed, 3512}, - {0x98ef, 3509}, - {0x98f2, 3511}, - {0x98f4, 3954}, - {0x98f6, 9733}, - {0x98f9, 9734}, - {0x98fc, 3953}, - {0x98fd, 3955}, - {0x98fe, 3956}, - {0x9903, 4338}, - {0x9905, 4339}, - {0x9909, 4341}, - {0x990a, 4718}, - {0x990c, 4340}, - {0x9910, 5019}, - {0x9912, 4720}, - {0x9913, 4719}, - {0x9917, 0}, - {0x9918, 4721}, - {0x991a, 5024}, - {0x991b, 5022}, - {0x991e, 5021}, - {0x9921, 5023}, - {0x9928, 5020}, - {0x992c, 0}, - {0x992e, 5473}, - {0x9935, 5304}, - {0x993d, 5472}, - {0x993e, 5470}, - {0x993f, 5471}, - {0x9945, 5623}, - {0x9949, 5624}, - {0x9951, 5721}, - {0x9952, 5720}, - {0x9955, 5863}, - {0x9957, 5799}, - {0x995c, 5906}, - {0x995e, 5966}, - {0x9996, 2095}, - {0x9997, 8365}, - {0x9999, 2096}, - {0x99a5, 5474}, - {0x99a7, 0}, - {0x99a8, 5722}, - {0x99ac, 2549}, - {0x99ad, 3514}, - {0x99ae, 3513}, - {0x99af, 9735}, - {0x99b0, 9737}, - {0x99b1, 3958}, - {0x99b2, 9736}, - {0x99b3, 3957}, - {0x99b4, 3959}, - {0x99b5, 9738}, - {0x99c1, 4342}, - {0x99d0, 4723}, - {0x99d1, 4726}, - {0x99d2, 4728}, - {0x99d4, 0}, - {0x99d5, 4727}, - {0x99d9, 4729}, - {0x99db, 4725}, - {0x99dd, 4722}, - {0x99df, 4724}, - {0x99e2, 5026}, - {0x99ed, 5025}, - {0x99f1, 5027}, - {0x99fe, 0}, - {0x99ff, 5306}, - {0x9a01, 5305}, - {0x9a0e, 5475}, - {0x9a16, 5625}, - {0x9a19, 5626}, - {0x9a2b, 5723}, - {0x9a30, 5724}, - {0x9a35, 5726}, - {0x9a37, 5725}, - {0x9a3e, 5803}, - {0x9a40, 5802}, - {0x9a43, 5801}, - {0x9a45, 5800}, - {0x9a4d, 5865}, - {0x9a54, 0}, - {0x9a55, 5864}, - {0x9a57, 5909}, - {0x9a5a, 5907}, - {0x9a5b, 5908}, - {0x9a5f, 5943}, - {0x9a62, 5975}, - {0x9a65, 5976}, - {0x9a67, 0}, - {0x9a6a, 5991}, - {0x9aa8, 2550}, - {0x9aab, 9740}, - {0x9aad, 9739}, - {0x9aaf, 4343}, - {0x9ab0, 4344}, - {0x9ab7, 4730}, - {0x9ab8, 5028}, - {0x9abc, 5029}, - {0x9ac1, 5476}, - {0x9acf, 5804}, - {0x9ad1, 5912}, - {0x9ad2, 5866}, - {0x9ad3, 5910}, - {0x9ad4, 5911}, - {0x9ad6, 5967}, - {0x9ad8, 2551}, - {0x9adf, 7731}, - {0x9ae1, 3960}, - {0x9ae6, 4345}, - {0x9aed, 5031}, - {0x9aee, 4731}, - {0x9aef, 4732}, - {0x9afb, 5030}, - {0x9b03, 5477}, - {0x9b05, 0}, - {0x9b06, 5478}, - {0x9b0d, 5627}, - {0x9b18, 0}, - {0x9b1a, 5867}, - {0x9b1f, 0}, - {0x9b20, 1}, - {0x9b22, 5944}, - {0x9b23, 5968}, - {0x9b25, 2552}, - {0x9b27, 4733}, - {0x9b28, 5032}, - {0x9b2f, 7732}, - {0x9b31, 5992}, - {0x9b32, 2553}, - {0x9b3c, 2554}, - {0x9b3f, 0}, - {0x9b41, 4346}, - {0x9b42, 4347}, - {0x9b44, 4735}, - {0x9b45, 4734}, - {0x9b4d, 5481}, - {0x9b4e, 5480}, - {0x9b4f, 5479}, - {0x9b51, 5806}, - {0x9b54, 5805}, - {0x9b58, 5945}, - {0x9b5a, 3041}, - {0x9b5b, 9741}, - {0x9b61, 0}, - {0x9b6f, 4737}, - {0x9b77, 4736}, - {0x9b91, 5033}, - {0x9baa, 5309}, - {0x9bab, 5308}, - {0x9bad, 5310}, - {0x9bae, 5307}, - {0x9bc0, 5486}, - {0x9bc8, 5485}, - {0x9bc9, 5483}, - {0x9bca, 5482}, - {0x9bd6, 5630}, - {0x9bdb, 5631}, - {0x9be7, 5629}, - {0x9be8, 5628}, - {0x9beb, 0}, - {0x9bfd, 5484}, - {0x9c0d, 5728}, - {0x9c13, 5727}, - {0x9c25, 5808}, - {0x9c29, 0}, - {0x9c2d, 5807}, - {0x9c31, 5869}, - {0x9c3b, 5871}, - {0x9c3e, 5870}, - {0x9c49, 5868}, - {0x9c54, 5913}, - {0x9c56, 5915}, - {0x9c57, 5914}, - {0x9c5f, 5946}, - {0x9c77, 5984}, - {0x9c78, 5985}, - {0x9ce5, 3042}, - {0x9ce6, 9055}, - {0x9ce7, 9744}, - {0x9ce9, 3961}, - {0x9cea, 9742}, - {0x9ced, 9743}, - {0x9cf2, 0}, - {0x9cf3, 4350}, - {0x9cf4, 4348}, - {0x9cf6, 4349}, - {0x9d03, 4740}, - {0x9d06, 4738}, - {0x9d09, 4739}, - {0x9d12, 5038}, - {0x9d15, 5034}, - {0x9d1b, 5039}, - {0x9d23, 5035}, - {0x9d26, 5036}, - {0x9d28, 5037}, - {0x9d2f, 0}, - {0x9d3b, 5311}, - {0x9d3f, 5312}, - {0x9d43, 0}, - {0x9d51, 5487}, - {0x9d5d, 5488}, - {0x9d60, 5489}, - {0x9d61, 5633}, - {0x9d6a, 5635}, - {0x9d6c, 5636}, - {0x9d72, 5634}, - {0x9d75, 0}, - {0x9d89, 5632}, - {0x9d8c, 0}, - {0x9da7, 0}, - {0x9daf, 5809}, - {0x9db4, 5810}, - {0x9db8, 5812}, - {0x9dba, 0}, - {0x9dc2, 5811}, - {0x9dd3, 5872}, - {0x9dd7, 5873}, - {0x9de5, 5916}, - {0x9df9, 5947}, - {0x9dfa, 5948}, - {0x9e01, 0}, - {0x9e1a, 5989}, - {0x9e1b, 5993}, - {0x9e1e, 5994}, - {0x9e75, 3043}, - {0x9e79, 5729}, - {0x9e7c, 5949}, - {0x9e7d, 5950}, - {0x9e7f, 3044}, - {0x9e80, 9745}, - {0x9e82, 3962}, - {0x9e87, 0}, - {0x9e8b, 5313}, - {0x9e92, 5637}, - {0x9e93, 5639}, - {0x9e97, 5638}, - {0x9e9d, 5813}, - {0x9e9f, 5917}, - {0x9ea5, 3045}, - {0x9ea9, 4741}, - {0x9eb4, 5640}, - {0x9eb5, 5730}, - {0x9ebb, 3046}, - {0x9ebc, 4351}, - {0x9ebe, 4742}, - {0x9ec3, 3515}, - {0x9ecc, 5969}, - {0x9ecd, 3516}, - {0x9ece, 4743}, - {0x9ecf, 5314}, - {0x9ed1, 3517}, - {0x9ed4, 5041}, - {0x9ed6, 0}, - {0x9ed8, 5040}, - {0x9edb, 5318}, - {0x9edc, 5316}, - {0x9edd, 5317}, - {0x9ede, 5315}, - {0x9ee0, 5490}, - {0x9ee8, 5731}, - {0x9eef, 5814}, - {0x9ef3, 0}, - {0x9ef4, 5918}, - {0x9ef7, 5986}, - {0x9ef9, 9056}, - {0x9efd, 9746}, - {0x9f07, 5951}, - {0x9f0e, 3963}, - {0x9f10, 0}, - {0x9f13, 3964}, - {0x9f15, 5491}, - {0x9f19, 5815}, - {0x9f20, 3965}, - {0x9f2c, 5492}, - {0x9f2f, 5732}, - {0x9f34, 5874}, - {0x9f3b, 4352}, - {0x9f3e, 5319}, - {0x9f41, 0}, - {0x9f4a, 4353}, - {0x9f4b, 5320}, - {0x9f52, 4745}, - {0x9f57, 0}, - {0x9f58, 1}, - {0x9f5c, 5816}, - {0x9f5f, 5733}, - {0x9f61, 5735}, - {0x9f63, 5734}, - {0x9f66, 5817}, - {0x9f67, 5818}, - {0x9f6a, 5876}, - {0x9f6c, 5875}, - {0x9f6f, 0}, - {0x9f72, 5953}, - {0x9f75, 0}, - {0x9f76, 1}, - {0x9f77, 5952}, - {0x9f8d, 5042}, - {0x9f90, 5500}, - {0x9f94, 5877}, - {0x9f9c, 5043}, - {0xe003, 0}, - {0xe00a, 0}, - {0xe013, 0}, - {0xe014, 1}, - {0xe015, 2}, - {0xe016, 3}, - {0xe01b, 0}, - {0xe01c, 1}, - {0xe01d, 2}, - {0xe01e, 3}, - {0xe023, 0}, - {0xe02e, 0}, - {0xe033, 0}, - {0xe034, 1}, - {0xe035, 2}, - {0xe036, 3}, - {0xe037, 4}, - {0xe038, 5}, - {0xe03c, 0}, - {0xe060, 0}, - {0xe061, 1}, - {0xe075, 0}, - {0xe08a, 0}, - {0xe094, 0}, - {0xe09a, 0}, - {0xe09d, 0}, - {0xe09e, 1}, - {0xe0a7, 0}, - {0xe0c8, 0}, - {0xe0d5, 0}, - {0xe0e3, 0}, - {0xe0e4, 1}, - {0xe0e5, 2}, - {0xe0e8, 0}, - {0xe0e9, 1}, - {0xe0ec, 0}, - {0xe0f9, 0}, - {0xe10a, 0}, - {0xe10b, 1}, - {0xe115, 0}, - {0xe11d, 0}, - {0xe127, 0}, - {0xe128, 1}, - {0xe131, 0}, - {0xe142, 0}, - {0xe148, 0}, - {0xe155, 0}, - {0xe156, 1}, - {0xe157, 2}, - {0xe15a, 0}, - {0xe169, 0}, - {0xe16a, 1}, - {0xe172, 0}, - {0xe179, 0}, - {0xe17c, 0}, - {0xe180, 0}, - {0xe190, 0}, - {0xe1a0, 0}, - {0xe1b1, 0}, - {0xe1b4, 0}, - {0xe1bd, 0}, - {0xe1be, 1}, - {0xe1bf, 2}, - {0xe1c5, 0}, - {0xe1cd, 0}, - {0xe1d5, 0}, - {0xe1f0, 0}, - {0xe20b, 0}, - {0xe20c, 1}, - {0xe213, 0}, - {0xe214, 1}, - {0xe215, 2}, - {0xe216, 3}, - {0xe21c, 0}, - {0xe220, 0}, - {0xe221, 1}, - {0xe227, 0}, - {0xe228, 1}, - {0xe23e, 0}, - {0xe24b, 0}, - {0xe24c, 1}, - {0xe24d, 2}, - {0xe24e, 3}, - {0xe24f, 4}, - {0xe252, 0}, - {0xe253, 1}, - {0xe254, 2}, - {0xe26e, 0}, - {0xe26f, 1}, - {0xe289, 0}, - {0xe291, 0}, - {0xe295, 0}, - {0xe296, 1}, - {0xe29a, 0}, - {0xe29b, 1}, - {0xe2b3, 0}, - {0xe2b4, 1}, - {0xe2b5, 2}, - {0xe2b8, 0}, - {0xe2bf, 0}, - {0xe2d9, 0}, - {0xe2e1, 0}, - {0xe2e2, 1}, - {0xe2ec, 0}, - {0xe2ed, 1}, - {0xe2f1, 0}, - {0xe31c, 0}, - {0xe331, 0}, - {0xe336, 0}, - {0xe35c, 0}, - {0xe365, 0}, - {0xe375, 0}, - {0xe382, 0}, - {0xe389, 0}, - {0xe38a, 1}, - {0xe39b, 0}, - {0xe3a0, 0}, - {0xe3a7, 0}, - {0xe3a8, 1}, - {0xe3a9, 2}, - {0xe3b2, 0}, - {0xe3b5, 0}, - {0xe3ba, 0}, - {0xe3bb, 1}, - {0xe3bc, 2}, - {0xe3bd, 3}, - {0xe3d9, 0}, - {0xe3da, 1}, - {0xe3ee, 0}, - {0xe3f3, 0}, - {0xe3f4, 1}, - {0xe40a, 0}, - {0xe40b, 1}, - {0xe41e, 0}, - {0xe42d, 0}, - {0xe43b, 0}, - {0xe43c, 1}, - {0xe441, 0}, - {0xe44d, 0}, - {0xe44e, 1}, - {0xe451, 0}, - {0xe45a, 0}, - {0xe45e, 0}, - {0xe462, 0}, - {0xe463, 1}, - {0xe468, 0}, - {0xe469, 1}, - {0xe46f, 0}, - {0xe472, 0}, - {0xe47f, 0}, - {0xe487, 0}, - {0xe488, 1}, - {0xe489, 2}, - {0xe48a, 3}, - {0xe48e, 0}, - {0xe492, 0}, - {0xe496, 0}, - {0xe497, 1}, - {0xe4a3, 0}, - {0xe4a4, 1}, - {0xe4b4, 0}, - {0xe4b5, 1}, - {0xe4b6, 2}, - {0xe4b7, 3}, - {0xe4b8, 4}, - {0xe4b9, 5}, - {0xe4ba, 6}, - {0xe4ce, 0}, - {0xe4dd, 0}, - {0xe4e7, 0}, - {0xe4e8, 1}, - {0xe4ef, 0}, - {0xe4f9, 0}, - {0xe502, 0}, - {0xe51d, 0}, - {0xe51e, 1}, - {0xe51f, 2}, - {0xe520, 3}, - {0xe521, 4}, - {0xe52a, 0}, - {0xe52b, 1}, - {0xe52c, 2}, - {0xe52f, 0}, - {0xe555, 0}, - {0xe558, 0}, - {0xe559, 1}, - {0xe55c, 0}, - {0xe55f, 0}, - {0xe567, 0}, - {0xe56e, 0}, - {0xe573, 0}, - {0xe576, 0}, - {0xe577, 1}, - {0xe57a, 0}, - {0xe57d, 0}, - {0xe57e, 1}, - {0xe583, 0}, - {0xe584, 1}, - {0xe585, 2}, - {0xe586, 3}, - {0xe58c, 0}, - {0xe58d, 1}, - {0xe58e, 2}, - {0xe58f, 3}, - {0xe590, 4}, - {0xe593, 0}, - {0xe594, 1}, - {0xe59e, 0}, - {0xe59f, 1}, - {0xe5a0, 2}, - {0xe5a1, 3}, - {0xe5a7, 0}, - {0xe5a8, 1}, - {0xe5b8, 0}, - {0xe5bb, 0}, - {0xe5bf, 0}, - {0xe5c0, 1}, - {0xe5c9, 0}, - {0xe5d8, 0}, - {0xe5d9, 1}, - {0xe5dc, 0}, - {0xe5e2, 0}, - {0xe5e3, 1}, - {0xe5e6, 0}, - {0xe5ef, 0}, - {0xe5f0, 1}, - {0xe5f1, 2}, - {0xe5fc, 0}, - {0xe610, 0}, - {0xe611, 1}, - {0xe612, 2}, - {0xe61a, 0}, - {0xe61b, 1}, - {0xe61c, 2}, - {0xe624, 0}, - {0xe633, 0}, - {0xe634, 1}, - {0xe638, 0}, - {0xe640, 0}, - {0xe641, 1}, - {0xe642, 2}, - {0xe646, 0}, - {0xe64f, 0}, - {0xe653, 0}, - {0xe654, 1}, - {0xe655, 2}, - {0xe658, 0}, - {0xe659, 1}, - {0xe65e, 0}, - {0xe65f, 1}, - {0xe660, 2}, - {0xe663, 0}, - {0xe666, 0}, - {0xe667, 1}, - {0xe668, 2}, - {0xe66f, 0}, - {0xe677, 0}, - {0xe678, 1}, - {0xe679, 2}, - {0xe67c, 0}, - {0xe67d, 1}, - {0xe680, 0}, - {0xe684, 0}, - {0xe685, 1}, - {0xe686, 2}, - {0xe687, 3}, - {0xe688, 4}, - {0xe68b, 0}, - {0xe68c, 1}, - {0xe68f, 0}, - {0xe690, 1}, - {0xe697, 0}, - {0xe69a, 0}, - {0xe69f, 0}, - {0xe6a2, 0}, - {0xe6ad, 0}, - {0xe6ba, 0}, - {0xe6be, 0}, - {0xe6c1, 0}, - {0xe6d2, 0}, - {0xe6d8, 0}, - {0xe6db, 0}, - {0xe6de, 0}, - {0xe6df, 1}, - {0xe6e0, 2}, - {0xe6e1, 3}, - {0xe6e5, 0}, - {0xe6e6, 1}, - {0xe6f3, 0}, - {0xe6fb, 0}, - {0xe6fc, 1}, - {0xe702, 0}, - {0xe707, 0}, - {0xe70a, 0}, - {0xe711, 0}, - {0xe718, 0}, - {0xe71b, 0}, - {0xe725, 0}, - {0xe734, 0}, - {0xe735, 1}, - {0xe736, 2}, - {0xe737, 3}, - {0xe73d, 0}, - {0xe741, 0}, - {0xe742, 1}, - {0xe74e, 0}, - {0xe74f, 1}, - {0xe752, 0}, - {0xe75c, 0}, - {0xe75d, 1}, - {0xe762, 0}, - {0xe765, 0}, - {0xe768, 0}, - {0xe76d, 0}, - {0xe76e, 1}, - {0xe778, 0}, - {0xe77d, 0}, - {0xe797, 0}, - {0xe7a5, 0}, - {0xe7a6, 1}, - {0xe7a7, 2}, - {0xe7a8, 3}, - {0xe7a9, 4}, - {0xe7dd, 0}, - {0xe7e8, 0}, - {0xe7e9, 1}, - {0xe7ee, 0}, - {0xe7ef, 1}, - {0xe7f2, 0}, - {0xe7f3, 1}, - {0xe7fc, 0}, - {0xe801, 0}, - {0xe802, 1}, - {0xe80f, 0}, - {0xe817, 0}, - {0xe818, 1}, - {0xe828, 0}, - {0xe838, 0}, - {0xe83b, 0}, - {0xe842, 0}, - {0xe84e, 0}, - {0xe856, 0}, - {0xe857, 1}, - {0xe858, 2}, - {0xe85c, 0}, - {0xe85d, 1}, - {0xe861, 0}, - {0xe862, 1}, - {0xe866, 0}, - {0xe867, 1}, - {0xe86a, 0}, - {0xe87e, 0}, - {0xe87f, 1}, - {0xe892, 0}, - {0xe895, 0}, - {0xe8a1, 0}, - {0xe8a4, 0}, - {0xe8a5, 1}, - {0xe8a6, 2}, - {0xe8a7, 3}, - {0xe8aa, 0}, - {0xe8ad, 0}, - {0xe8ae, 1}, - {0xe8af, 2}, - {0xe8b0, 3}, - {0xe8b6, 0}, - {0xe8be, 0}, - {0xe8bf, 1}, - {0xe8c0, 2}, - {0xe8c1, 3}, - {0xe8c2, 4}, - {0xe8c3, 5}, - {0xe8ce, 0}, - {0xe8d1, 0}, - {0xe8d6, 0}, - {0xe8d9, 0}, - {0xe8da, 1}, - {0xe8e0, 0}, - {0xe8e1, 1}, - {0xe8e6, 0}, - {0xe8e9, 0}, - {0xe8ea, 1}, - {0xe8f2, 0}, - {0xe908, 0}, - {0xe918, 0}, - {0xe91f, 0}, - {0xe920, 1}, - {0xe921, 2}, - {0xe922, 3}, - {0xe926, 0}, - {0xe927, 1}, - {0xe928, 2}, - {0xe929, 3}, - {0xe92a, 4}, - {0xe92b, 5}, - {0xe92c, 6}, - {0xe92f, 0}, - {0xe934, 0}, - {0xe935, 1}, - {0xe936, 2}, - {0xe93d, 0}, - {0xe93e, 1}, - {0xe945, 0}, - {0xe953, 0}, - {0xe954, 1}, - {0xe955, 2}, - {0xe958, 0}, - {0xe95d, 0}, - {0xe95e, 1}, - {0xe961, 0}, - {0xe96f, 0}, - {0xe978, 0}, - {0xe97b, 0}, - {0xe982, 0}, - {0xeac0, 0}, - {0xeac1, 1}, - {0xeaca, 0}, - {0xeacb, 1}, - {0xeacc, 2}, - {0xead0, 0}, - {0xead1, 1}, - {0xead4, 0}, - {0xead7, 0}, - {0xead8, 1}, - {0xead9, 2}, - {0xeada, 3}, - {0xeadf, 0}, - {0xeae0, 1}, - {0xeae1, 2}, - {0xeae2, 3}, - {0xeae3, 4}, - {0xeae8, 0}, - {0xeae9, 1}, - {0xeaea, 2}, - {0xeaeb, 3}, - {0xeaec, 4}, - {0xeaf1, 0}, - {0xeaf2, 1}, - {0xeaf6, 0}, - {0xeafb, 0}, - {0xeaff, 0}, - {0xeb03, 0}, - {0xeb04, 1}, - {0xeb05, 2}, - {0xeb09, 0}, - {0xeb0a, 1}, - {0xeb0b, 2}, - {0xeb0c, 3}, - {0xeb0d, 4}, - {0xeb0e, 5}, - {0xeb0f, 6}, - {0xeb12, 0}, - {0xeb19, 0}, - {0xeb1a, 1}, - {0xeb1b, 2}, - {0xeb1c, 3}, - {0xeb1d, 4}, - {0xeb20, 0}, - {0xeb21, 1}, - {0xeb2d, 0}, - {0xeb2e, 1}, - {0xeb2f, 2}, - {0xeb30, 3}, - {0xeb31, 4}, - {0xeb32, 5}, - {0xeb33, 6}, - {0xeb34, 7}, - {0xeb35, 8}, - {0xeb36, 9}, - {0xeb37, 10}, - {0xeb38, 11}, - {0xeb39, 12}, - {0xeb3f, 0}, - {0xeb44, 0}, - {0xeb4c, 0}, - {0xeb4e, 0}, - {0xeb50, 0}, - {0xeb56, 0}, - {0xeb59, 0}, - {0xeb5b, 0}, - {0xeb63, 0}, - {0xeb69, 0}, - {0xeb70, 0}, - {0xeb71, 1}, - {0xeb7f, 0}, - {0xeb81, 0}, - {0xeb84, 0}, - {0xeb8d, 0}, - {0xeb8e, 1}, - {0xeb99, 0}, - {0xeb9a, 1}, - {0xeba6, 0}, - {0xebb3, 0}, - {0xebc6, 0}, - {0xebcd, 0}, - {0xebd8, 0}, - {0xebdb, 0}, - {0xebe9, 0}, - {0xebec, 0}, - {0xebfa, 0}, - {0xebfb, 1}, - {0xebfe, 0}, - {0xec06, 0}, - {0xec09, 0}, - {0xec0f, 0}, - {0xec10, 1}, - {0xec18, 0}, - {0xec1a, 0}, - {0xec1b, 1}, - {0xec1c, 2}, - {0xec2d, 0}, - {0xec2e, 1}, - {0xec3c, 0}, - {0xec40, 0}, - {0xec41, 1}, - {0xec46, 0}, - {0xec47, 1}, - {0xec48, 2}, - {0xec49, 3}, - {0xec4c, 0}, - {0xec57, 0}, - {0xec58, 1}, - {0xec5d, 0}, - {0xec60, 0}, - {0xec63, 0}, - {0xec6a, 0}, - {0xec6b, 1}, - {0xec6c, 2}, - {0xec6d, 3}, - {0xec6e, 4}, - {0xec6f, 5}, - {0xec70, 6}, - {0xec71, 7}, - {0xec72, 8}, - {0xec73, 9}, - {0xec76, 0}, - {0xec94, 0}, - {0xec9b, 0}, - {0xeca4, 0}, - {0xeca8, 0}, - {0xecba, 0}, - {0xecbb, 1}, - {0xecdc, 0}, - {0xece0, 0}, - {0xece1, 1}, - {0xed0d, 0}, - {0xed0e, 1}, - {0xed0f, 2}, - {0xed10, 3}, - {0xed11, 4}, - {0xed16, 0}, - {0xed17, 1}, - {0xed25, 0}, - {0xed27, 0}, - {0xed42, 0}, - {0xed4b, 0}, - {0xed4e, 0}, - {0xed54, 0}, - {0xed58, 0}, - {0xed85, 0}, - {0xed8a, 0}, - {0xeea2, 0}, - {0xeea3, 1}, - {0xeea4, 2}, - {0xeea5, 3}, - {0xeea6, 4}, - {0xeea9, 0}, - {0xeeaa, 1}, - {0xeead, 0}, - {0xeeae, 1}, - {0xeeaf, 2}, - {0xeeb0, 3}, - {0xeeb1, 4}, - {0xf304, 0}, - {0xf305, 1}, - {0xf306, 2}, - {0xf307, 3}, - {0xf308, 4}, - {0xf309, 5}, - {0xf30a, 6}, - {0xf30b, 7}, - {0xf30c, 8}, - {0xf30d, 9}, - {0xf30e, 10}, - {0xf30f, 11}, - {0xf310, 12}, - {0xf311, 13}, - {0xf312, 14}, - {0xf313, 15}, - {0xf314, 16}, - {0xf315, 17}, - {0xf316, 18}, - {0xf317, 19}, - {0xf318, 20}, - {0xf34b, 0}, - {0xf3a1, 0}, - {0xf3fa, 0}, - {0xf409, 0}, - {0xf40a, 1}, - {0xf40b, 2}, - {0xf441, 0}, - {0xf442, 1}, - {0xf449, 0}, - {0xf451, 0}, - {0xf452, 1}, - {0xf455, 0}, - {0xf456, 1}, - {0xf45d, 0}, - {0xf45e, 1}, - {0xf45f, 2}, - {0xf462, 0}, - {0xf463, 1}, - {0xf466, 0}, - {0xf46d, 0}, - {0xf47d, 0}, - {0xf47e, 1}, - {0xf481, 0}, - {0xf485, 0}, - {0xf48e, 0}, - {0xf48f, 1}, - {0xf490, 2}, - {0xf498, 0}, - {0xf4a5, 0}, - {0xf4a6, 1}, - {0xf4aa, 0}, - {0xf4b0, 0}, - {0xf4b4, 0}, - {0xf4bb, 0}, - {0xf4bc, 1}, - {0xf4bd, 2}, - {0xf4be, 3}, - {0xf4bf, 4}, - {0xf4c0, 5}, - {0xf4c4, 0}, - {0xf4c5, 1}, - {0xf4c8, 0}, - {0xf4c9, 1}, - {0xf4ca, 2}, - {0xf4cd, 0}, - {0xf4ce, 1}, - {0xf4cf, 2}, - {0xf4d2, 0}, - {0xf4d3, 1}, - {0xf4d4, 2}, - {0xf4d5, 3}, - {0xf4da, 0}, - {0xf4dc, 0}, - {0xf4de, 0}, - {0xf4e8, 0}, - {0xf4e9, 1}, - {0xf4ff, 0}, - {0xf501, 0}, - {0xf508, 0}, - {0xf509, 1}, - {0xf50a, 2}, - {0xf50b, 3}, - {0xf50c, 4}, - {0xf50d, 5}, - {0xf50e, 6}, - {0xf50f, 7}, - {0xf510, 8}, - {0xf511, 9}, - {0xf514, 0}, - {0xf515, 1}, - {0xf516, 2}, - {0xf519, 0}, - {0xf51a, 1}, - {0xf51b, 2}, - {0xf51c, 3}, - {0xf51d, 4}, - {0xf520, 0}, - {0xf521, 1}, - {0xf522, 2}, - {0xf523, 3}, - {0xf524, 4}, - {0xf525, 5}, - {0xf526, 6}, - {0xf534, 0}, - {0xf53b, 0}, - {0xf55a, 0}, - {0xf7e6, 0}, - {0xf7eb, 0}, - {0xf7ee, 0}, - {0xfa0c, 628}, - {0xfa0d, 9089}, - {0xfe30, 109}, - {0xfe31, 122}, - {0xfe35, 130}, - {0xfe36, 131}, - {0xfe37, 134}, - {0xfe38, 135}, - {0xfe39, 138}, - {0xfe3a, 139}, - {0xfe3b, 142}, - {0xfe3c, 143}, - {0xfe3d, 146}, - {0xfe3e, 147}, - {0xfe3f, 150}, - {0xfe40, 151}, - {0xfe41, 154}, - {0xfe42, 155}, - {0xfe43, 158}, - {0xfe44, 159}, - {0xfe49, 199}, - {0xfe4a, 200}, - {0xfe4b, 203}, - {0xfe4c, 204}, - {0xfe4d, 201}, - {0xfe4e, 202}, - {0xfe50, 112}, - {0xfe52, 114}, - {0xfe54, 116}, - {0xfe55, 117}, - {0xfe56, 118}, - {0xfe57, 119}, - {0xfe59, 160}, - {0xfe5a, 161}, - {0xfe5b, 162}, - {0xfe5c, 163}, - {0xfe5d, 164}, - {0xfe5e, 165}, - {0xfe5f, 205}, - {0xfe60, 206}, - {0xfe61, 207}, - {0xfe62, 223}, - {0xfe63, 224}, - {0xfe64, 225}, - {0xfe65, 226}, - {0xfe66, 227}, - {0xfe69, 268}, - {0xfe6a, 269}, - {0xfe6b, 270}, - {0xff01, 108}, - {0xff03, 174}, - {0xff04, 259}, - {0xff05, 264}, - {0xff06, 175}, - {0xff08, 128}, - {0xff09, 129}, - {0xff0a, 176}, - {0xff0b, 208}, - {0xff0c, 100}, - {0xff0d, 209}, - {0xff0e, 103}, - {0xff0f, 257}, - {0xff10, 333}, - {0xff11, 334}, - {0xff12, 335}, - {0xff13, 336}, - {0xff14, 337}, - {0xff15, 338}, - {0xff16, 339}, - {0xff17, 340}, - {0xff18, 341}, - {0xff19, 342}, - {0xff1a, 106}, - {0xff1b, 105}, - {0xff1c, 214}, - {0xff1d, 216}, - {0xff1e, 215}, - {0xff1f, 107}, - {0xff20, 265}, - {0xff21, 365}, - {0xff22, 366}, - {0xff23, 367}, - {0xff24, 368}, - {0xff25, 369}, - {0xff26, 370}, - {0xff27, 371}, - {0xff28, 372}, - {0xff29, 373}, - {0xff2a, 374}, - {0xff2b, 375}, - {0xff2c, 376}, - {0xff2d, 377}, - {0xff2e, 378}, - {0xff2f, 379}, - {0xff30, 380}, - {0xff31, 381}, - {0xff32, 382}, - {0xff33, 383}, - {0xff34, 384}, - {0xff35, 385}, - {0xff36, 386}, - {0xff37, 387}, - {0xff38, 388}, - {0xff39, 389}, - {0xff3a, 390}, - {0xff3c, 258}, - {0xff3f, 197}, - {0xff41, 391}, - {0xff42, 392}, - {0xff43, 393}, - {0xff44, 394}, - {0xff45, 395}, - {0xff46, 396}, - {0xff47, 397}, - {0xff48, 398}, - {0xff49, 399}, - {0xff4a, 400}, - {0xff4b, 401}, - {0xff4c, 402}, - {0xff4d, 403}, - {0xff4e, 404}, - {0xff4f, 405}, - {0xff50, 406}, - {0xff51, 407}, - {0xff52, 408}, - {0xff53, 409}, - {0xff54, 410}, - {0xff55, 411}, - {0xff56, 412}, - {0xff57, 413}, - {0xff58, 414}, - {0xff59, 415}, - {0xff5a, 416}, - {0xff5b, 132}, - {0xff5c, 120}, - {0xff5d, 133}, - {0xff64, 113}}; - diff --git a/src/add-ons/print/drivers/pdf/source/enc_range.h b/src/add-ons/print/drivers/pdf/source/enc_range.h deleted file mode 100644 index 71684bc5c4..0000000000 --- a/src/add-ons/print/drivers/pdf/source/enc_range.h +++ /dev/null @@ -1,11 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -#define UNICODE0_FROM 32 -#define UNICODE0_TO 320 -#define UNICODE1_FROM 321 -#define UNICODE1_TO 1110 -#define UNICODE2_FROM 1111 -#define UNICODE2_TO 8736 -#define UNICODE3_FROM 8743 -#define UNICODE3_TO 63725 -#define UNICODE4_FROM 63726 -#define UNICODE4_TO 64331 diff --git a/src/add-ons/print/drivers/pdf/source/gb1.h b/src/add-ons/print/drivers/pdf/source/gb1.h deleted file mode 100644 index b44d96e531..0000000000 --- a/src/add-ons/print/drivers/pdf/source/gb1.h +++ /dev/null @@ -1,23963 +0,0 @@ -// WARNING: MACHINE GENERATED, DON'T CHANGE! -static unicode_to_cid GB1[] = { - {0x20, 1}, - {0x21, 2}, - {0x22, 3}, - {0x23, 4}, - {0x24, 5}, - {0x25, 6}, - {0x26, 7}, - {0x27, 8}, - {0x28, 9}, - {0x29, 10}, - {0x2a, 11}, - {0x2b, 12}, - {0x2c, 13}, - {0x2d, 14}, - {0x2e, 15}, - {0x2f, 16}, - {0x30, 17}, - {0x31, 18}, - {0x32, 19}, - {0x33, 20}, - {0x34, 21}, - {0x35, 22}, - {0x36, 23}, - {0x37, 24}, - {0x38, 25}, - {0x39, 26}, - {0x3a, 27}, - {0x3b, 28}, - {0x3c, 29}, - {0x3d, 30}, - {0x3e, 31}, - {0x3f, 32}, - {0x40, 33}, - {0x41, 34}, - {0x42, 35}, - {0x43, 36}, - {0x44, 37}, - {0x45, 38}, - {0x46, 39}, - {0x47, 40}, - {0x48, 41}, - {0x49, 42}, - {0x4a, 43}, - {0x4b, 44}, - {0x4c, 45}, - {0x4d, 46}, - {0x4e, 47}, - {0x4f, 48}, - {0x50, 49}, - {0x51, 50}, - {0x52, 51}, - {0x53, 52}, - {0x54, 53}, - {0x55, 54}, - {0x56, 55}, - {0x57, 56}, - {0x58, 57}, - {0x59, 58}, - {0x5a, 59}, - {0x5b, 60}, - {0x5c, 61}, - {0x5d, 62}, - {0x5e, 63}, - {0x5f, 64}, - {0x60, 65}, - {0x61, 66}, - {0x62, 67}, - {0x63, 68}, - {0x64, 69}, - {0x65, 70}, - {0x66, 71}, - {0x67, 72}, - {0x68, 73}, - {0x69, 74}, - {0x6a, 75}, - {0x6b, 76}, - {0x6c, 77}, - {0x6d, 78}, - {0x6e, 79}, - {0x6f, 80}, - {0x70, 81}, - {0x71, 82}, - {0x72, 83}, - {0x73, 84}, - {0x74, 85}, - {0x75, 86}, - {0x76, 87}, - {0x77, 88}, - {0x78, 89}, - {0x79, 90}, - {0x7a, 91}, - {0x7b, 92}, - {0x7c, 93}, - {0x7d, 94}, - {0x7e, 95}, - {0xa4, 167}, - {0xa7, 171}, - {0xa8, 102}, - {0xb0, 162}, - {0xb1, 127}, - {0xd7, 128}, - {0xe0, 671}, - {0xe1, 669}, - {0xe8, 675}, - {0xe9, 673}, - {0xea, 693}, - {0xec, 679}, - {0xed, 677}, - {0xf2, 683}, - {0xf3, 681}, - {0xf7, 129}, - {0xf9, 687}, - {0xfa, 685}, - {0xfc, 692}, - {0x101, 668}, - {0x113, 672}, - {0x11b, 674}, - {0x12b, 676}, - {0x14d, 680}, - {0x16b, 684}, - {0x1ce, 670}, - {0x1d0, 678}, - {0x1d2, 682}, - {0x1d4, 686}, - {0x1d6, 688}, - {0x1d8, 689}, - {0x1da, 690}, - {0x1dc, 691}, - {0x1f9, 698}, - {0x2c7, 101}, - {0x2c9, 100}, - {0x2ca, 9907}, - {0x2cb, 9908}, - {0x2d9, 9909}, - {0x391, 525}, - {0x392, 526}, - {0x393, 527}, - {0x394, 528}, - {0x395, 529}, - {0x396, 530}, - {0x397, 531}, - {0x398, 532}, - {0x399, 533}, - {0x39a, 534}, - {0x39b, 535}, - {0x39c, 536}, - {0x39d, 537}, - {0x39e, 538}, - {0x39f, 539}, - {0x3a0, 540}, - {0x3a1, 541}, - {0x3a3, 542}, - {0x3a4, 543}, - {0x3a5, 544}, - {0x3a6, 545}, - {0x3a7, 546}, - {0x3a8, 547}, - {0x3a9, 548}, - {0x3b1, 549}, - {0x3b2, 550}, - {0x3b3, 551}, - {0x3b4, 552}, - {0x3b5, 553}, - {0x3b6, 554}, - {0x3b7, 555}, - {0x3b8, 556}, - {0x3b9, 557}, - {0x3ba, 558}, - {0x3bb, 559}, - {0x3bc, 560}, - {0x3bd, 561}, - {0x3be, 562}, - {0x3bf, 563}, - {0x3c0, 564}, - {0x3c1, 565}, - {0x3c3, 566}, - {0x3c4, 567}, - {0x3c5, 568}, - {0x3c6, 569}, - {0x3c7, 570}, - {0x3c8, 571}, - {0x3c9, 572}, - {0x401, 608}, - {0x410, 602}, - {0x411, 603}, - {0x412, 604}, - {0x413, 605}, - {0x414, 606}, - {0x415, 607}, - {0x416, 609}, - {0x417, 610}, - {0x418, 611}, - {0x419, 612}, - {0x41a, 613}, - {0x41b, 614}, - {0x41c, 615}, - {0x41d, 616}, - {0x41e, 617}, - {0x41f, 618}, - {0x420, 619}, - {0x421, 620}, - {0x422, 621}, - {0x423, 622}, - {0x424, 623}, - {0x425, 624}, - {0x426, 625}, - {0x427, 626}, - {0x428, 627}, - {0x429, 628}, - {0x42a, 629}, - {0x42b, 630}, - {0x42c, 631}, - {0x42d, 632}, - {0x42e, 633}, - {0x42f, 634}, - {0x430, 635}, - {0x431, 636}, - {0x432, 637}, - {0x433, 638}, - {0x434, 639}, - {0x435, 640}, - {0x436, 642}, - {0x437, 643}, - {0x438, 644}, - {0x439, 645}, - {0x43a, 646}, - {0x43b, 647}, - {0x43c, 648}, - {0x43d, 649}, - {0x43e, 650}, - {0x43f, 651}, - {0x440, 652}, - {0x441, 653}, - {0x442, 654}, - {0x443, 655}, - {0x444, 656}, - {0x445, 657}, - {0x446, 658}, - {0x447, 659}, - {0x448, 660}, - {0x449, 661}, - {0x44a, 662}, - {0x44b, 663}, - {0x44c, 664}, - {0x44d, 665}, - {0x44e, 666}, - {0x44f, 667}, - {0x451, 641}, - {0x1e3f, 695}, - {0x2013, 9910}, - {0x2014, 105}, - {0x2015, 9911}, - {0x2016, 107}, - {0x2018, 109}, - {0x2019, 110}, - {0x201c, 111}, - {0x201d, 112}, - {0x2025, 9912}, - {0x2026, 108}, - {0x2030, 170}, - {0x2032, 163}, - {0x2033, 164}, - {0x2035, 9913}, - {0x203b, 184}, - {0x2103, 165}, - {0x2105, 9914}, - {0x2109, 9915}, - {0x2116, 172}, - {0x2160, 250}, - {0x2161, 251}, - {0x2162, 252}, - {0x2163, 253}, - {0x2164, 254}, - {0x2165, 255}, - {0x2166, 256}, - {0x2167, 257}, - {0x2168, 258}, - {0x2169, 259}, - {0x216a, 260}, - {0x216b, 261}, - {0x2170, 9897}, - {0x2171, 9898}, - {0x2172, 9899}, - {0x2173, 9900}, - {0x2174, 9901}, - {0x2175, 9902}, - {0x2176, 9903}, - {0x2177, 9904}, - {0x2178, 9905}, - {0x2179, 9906}, - {0x2190, 186}, - {0x2191, 187}, - {0x2192, 185}, - {0x2193, 188}, - {0x2196, 9916}, - {0x2197, 9917}, - {0x2198, 9918}, - {0x2199, 9919}, - {0x2208, 137}, - {0x220f, 134}, - {0x2211, 133}, - {0x2215, 9920}, - {0x221a, 139}, - {0x221d, 151}, - {0x221e, 157}, - {0x221f, 9921}, - {0x2220, 142}, - {0x2223, 9922}, - {0x2225, 141}, - {0x2227, 131}, - {0x2228, 132}, - {0x2229, 136}, - {0x222a, 135}, - {0x222b, 145}, - {0x222e, 146}, - {0x2234, 159}, - {0x2235, 158}, - {0x2236, 130}, - {0x2237, 138}, - {0x223d, 150}, - {0x2248, 149}, - {0x224c, 148}, - {0x2252, 9923}, - {0x2260, 152}, - {0x2261, 147}, - {0x2264, 155}, - {0x2265, 156}, - {0x2266, 9924}, - {0x2267, 9925}, - {0x226e, 153}, - {0x226f, 154}, - {0x2295, 9988}, - {0x2299, 144}, - {0x22a5, 140}, - {0x22bf, 9926}, - {0x22ef, 108}, - {0x2312, 143}, - {0x2460, 230}, - {0x2461, 231}, - {0x2462, 232}, - {0x2463, 233}, - {0x2464, 234}, - {0x2465, 235}, - {0x2466, 236}, - {0x2467, 237}, - {0x2468, 238}, - {0x2469, 239}, - {0x2474, 210}, - {0x2475, 211}, - {0x2476, 212}, - {0x2477, 213}, - {0x2478, 214}, - {0x2479, 215}, - {0x247a, 216}, - {0x247b, 217}, - {0x247c, 218}, - {0x247d, 219}, - {0x247e, 220}, - {0x247f, 221}, - {0x2480, 222}, - {0x2481, 223}, - {0x2482, 224}, - {0x2483, 225}, - {0x2484, 226}, - {0x2485, 227}, - {0x2486, 228}, - {0x2487, 229}, - {0x2488, 190}, - {0x2489, 191}, - {0x248a, 192}, - {0x248b, 193}, - {0x248c, 194}, - {0x248d, 195}, - {0x248e, 196}, - {0x248f, 197}, - {0x2490, 198}, - {0x2491, 199}, - {0x2492, 200}, - {0x2493, 201}, - {0x2494, 202}, - {0x2495, 203}, - {0x2496, 204}, - {0x2497, 205}, - {0x2498, 206}, - {0x2499, 207}, - {0x249a, 208}, - {0x249b, 209}, - {0x2500, 738}, - {0x2501, 739}, - {0x2502, 740}, - {0x2503, 741}, - {0x2504, 742}, - {0x2505, 743}, - {0x2506, 744}, - {0x2507, 745}, - {0x2508, 746}, - {0x2509, 747}, - {0x250a, 748}, - {0x250b, 749}, - {0x250c, 750}, - {0x250d, 751}, - {0x250e, 752}, - {0x250f, 753}, - {0x2510, 754}, - {0x2511, 755}, - {0x2512, 756}, - {0x2513, 757}, - {0x2514, 758}, - {0x2515, 759}, - {0x2516, 760}, - {0x2517, 761}, - {0x2518, 762}, - {0x2519, 763}, - {0x251a, 764}, - {0x251b, 765}, - {0x251c, 766}, - {0x251d, 767}, - {0x251e, 768}, - {0x251f, 769}, - {0x2520, 770}, - {0x2521, 771}, - {0x2522, 772}, - {0x2523, 773}, - {0x2524, 774}, - {0x2525, 775}, - {0x2526, 776}, - {0x2527, 777}, - {0x2528, 778}, - {0x2529, 779}, - {0x252a, 780}, - {0x252b, 781}, - {0x252c, 782}, - {0x252d, 783}, - {0x252e, 784}, - {0x252f, 785}, - {0x2530, 786}, - {0x2531, 787}, - {0x2532, 788}, - {0x2533, 789}, - {0x2534, 790}, - {0x2535, 791}, - {0x2536, 792}, - {0x2537, 793}, - {0x2538, 794}, - {0x2539, 795}, - {0x253a, 796}, - {0x253b, 797}, - {0x253c, 798}, - {0x253d, 799}, - {0x253e, 800}, - {0x253f, 801}, - {0x2540, 802}, - {0x2541, 803}, - {0x2542, 804}, - {0x2543, 805}, - {0x2544, 806}, - {0x2545, 807}, - {0x2546, 808}, - {0x2547, 809}, - {0x2548, 810}, - {0x2549, 811}, - {0x254a, 812}, - {0x254b, 813}, - {0x2550, 9927}, - {0x2551, 9928}, - {0x2552, 9929}, - {0x2553, 9930}, - {0x2554, 9931}, - {0x2555, 9932}, - {0x2556, 9933}, - {0x2557, 9934}, - {0x2558, 9935}, - {0x2559, 9936}, - {0x255a, 9937}, - {0x255b, 9938}, - {0x255c, 9939}, - {0x255d, 9940}, - {0x255e, 9941}, - {0x255f, 9942}, - {0x2560, 9943}, - {0x2561, 9944}, - {0x2562, 9945}, - {0x2563, 9946}, - {0x2564, 9947}, - {0x2565, 9948}, - {0x2566, 9949}, - {0x2567, 9950}, - {0x2568, 9951}, - {0x2569, 9952}, - {0x256a, 9953}, - {0x256b, 9954}, - {0x256c, 9955}, - {0x256d, 9956}, - {0x256e, 9957}, - {0x256f, 9958}, - {0x2570, 9959}, - {0x2571, 9960}, - {0x2572, 9961}, - {0x2573, 9962}, - {0x2581, 9963}, - {0x2582, 9964}, - {0x2583, 9965}, - {0x2584, 9966}, - {0x2585, 9967}, - {0x2586, 9968}, - {0x2587, 9969}, - {0x2588, 9970}, - {0x2589, 9971}, - {0x258a, 9972}, - {0x258b, 9973}, - {0x258c, 9974}, - {0x258d, 9975}, - {0x258e, 9976}, - {0x258f, 9977}, - {0x2593, 9978}, - {0x2594, 9979}, - {0x2595, 9980}, - {0x25a0, 181}, - {0x25a1, 180}, - {0x25b2, 183}, - {0x25b3, 182}, - {0x25bc, 9981}, - {0x25bd, 9982}, - {0x25c6, 179}, - {0x25c7, 178}, - {0x25cb, 175}, - {0x25ce, 177}, - {0x25cf, 176}, - {0x25e2, 9983}, - {0x25e3, 9984}, - {0x25e4, 9985}, - {0x25e5, 9986}, - {0x2605, 174}, - {0x2606, 173}, - {0x2609, 9987}, - {0x2640, 161}, - {0x2642, 160}, - {0x2e83, 0}, - {0x2e86, 0}, - {0x2e87, 1}, - {0x2e8a, 0}, - {0x2e8e, 0}, - {0x2e8f, 1}, - {0x2e90, 2}, - {0x2e91, 3}, - {0x2e92, 4}, - {0x2e93, 5}, - {0x2e94, 6}, - {0x2e95, 7}, - {0x2e96, 8}, - {0x2e99, 0}, - {0x2e9c, 0}, - {0x2e9d, 1}, - {0x2e9e, 2}, - {0x2e9f, 3}, - {0x2ea0, 4}, - {0x2ea1, 5}, - {0x2ea2, 6}, - {0x2ea3, 7}, - {0x2ea4, 8}, - {0x2ea5, 9}, - {0x2ea6, 10}, - {0x2ea9, 0}, - {0x2eac, 0}, - {0x2ead, 1}, - {0x2eb0, 0}, - {0x2eb1, 1}, - {0x2eb2, 2}, - {0x2eb5, 0}, - {0x2eb7, 0}, - {0x2eb9, 0}, - {0x2eba, 1}, - {0x2ebd, 0}, - {0x2ebe, 1}, - {0x2ebf, 2}, - {0x2ec0, 3}, - {0x2ec1, 4}, - {0x2ec2, 5}, - {0x2ec3, 6}, - {0x2ec4, 7}, - {0x2ec5, 8}, - {0x2ec6, 9}, - {0x2ec7, 10}, - {0x2ec8, 11}, - {0x2ec9, 12}, - {0x2ecc, 0}, - {0x2ecd, 1}, - {0x2ece, 2}, - {0x2ecf, 3}, - {0x2ed0, 4}, - {0x2ed1, 5}, - {0x2ed2, 6}, - {0x2ed3, 7}, - {0x2ed4, 8}, - {0x2ed5, 9}, - {0x2ed6, 10}, - {0x2ed7, 11}, - {0x2ed8, 12}, - {0x2ed9, 13}, - {0x2eda, 14}, - {0x2edb, 15}, - {0x2edc, 16}, - {0x2edd, 17}, - {0x2ede, 18}, - {0x2edf, 19}, - {0x2ee0, 20}, - {0x2ee1, 21}, - {0x2ee2, 22}, - {0x2ee3, 23}, - {0x2ee4, 24}, - {0x2ee5, 25}, - {0x2ee6, 26}, - {0x2ee7, 27}, - {0x2ee8, 28}, - {0x2ee9, 29}, - {0x2eea, 30}, - {0x2eeb, 31}, - {0x2eec, 32}, - {0x2eed, 33}, - {0x2eee, 34}, - {0x2eef, 35}, - {0x2ef0, 36}, - {0x2ef1, 37}, - {0x2ef2, 38}, - {0x2ef3, 39}, - {0x2f00, 4162}, - {0x2f01, 4707}, - {0x2f02, 4722}, - {0x2f03, 4709}, - {0x2f04, 4185}, - {0x2f06, 1597}, - {0x2f07, 4867}, - {0x2f08, 3238}, - {0x2f09, 1592}, - {0x2f0a, 3270}, - {0x2f0b, 982}, - {0x2f0c, 4765}, - {0x2f0d, 4884}, - {0x2f0e, 4879}, - {0x2f0f, 2091}, - {0x2f10, 5017}, - {0x2f11, 1431}, - {0x2f12, 2543}, - {0x2f13, 4860}, - {0x2f14, 4710}, - {0x2f15, 4740}, - {0x2f17, 3397}, - {0x2f18, 1150}, - {0x2f19, 4946}, - {0x2f1a, 1228}, - {0x2f1b, 5020}, - {0x2f1c, 4283}, - {0x2f1d, 2407}, - {0x2f1e, 5523}, - {0x2f1f, 3698}, - {0x2f20, 3414}, - {0x2f21, 5660}, - {0x2f23, 3859}, - {0x2f24, 1398}, - {0x2f25, 2927}, - {0x2f26, 4656}, - {0x2f27, 5934}, - {0x2f28, 1386}, - {0x2f29, 3948}, - {0x2f2a, 5302}, - {0x2f2b, 3395}, - {0x2f2c, 6004}, - {0x2f2d, 3318}, - {0x2f2e, 6165}, - {0x2f2f, 1789}, - {0x2f30, 2093}, - {0x2f31, 2238}, - {0x2f32, 1732}, - {0x2f33, 6163}, - {0x2f34, 1852}, - {0x2f35, 5016}, - {0x2f36, 5293}, - {0x2f37, 5366}, - {0x2f38, 1798}, - {0x2f39, 5986}, - {0x2f3a, 5614}, - {0x2f3b, 5600}, - {0x2f3c, 3983}, - {0x2f3d, 1765}, - {0x2f3f, 3437}, - {0x2f40, 4518}, - {0x2f41, 6409}, - {0x2f42, 3795}, - {0x2f43, 1526}, - {0x2f44, 2240}, - {0x2f45, 1626}, - {0x2f46, 3821}, - {0x2f47, 3248}, - {0x2f48, 4350}, - {0x2f49, 4357}, - {0x2f4a, 2849}, - {0x2f4b, 3124}, - {0x2f4c, 4536}, - {0x2f4d, 1400}, - {0x2f4e, 6589}, - {0x2f4f, 3826}, - {0x2f50, 1073}, - {0x2f51, 2736}, - {0x2f52, 3430}, - {0x2f53, 3095}, - {0x2f54, 3491}, - {0x2f55, 2053}, - {0x2f56, 4611}, - {0x2f57, 1715}, - {0x2f58, 4713}, - {0x2f59, 5789}, - {0x2f5a, 3019}, - {0x2f5b, 4073}, - {0x2f5c, 2916}, - {0x2f5d, 3209}, - {0x2f5e, 4041}, - {0x2f5f, 4310}, - {0x2f60, 1832}, - {0x2f61, 3728}, - {0x2f62, 1733}, - {0x2f63, 3379}, - {0x2f64, 4264}, - {0x2f65, 3650}, - {0x2f66, 7110}, - {0x2f67, 7008}, - {0x2f69, 994}, - {0x2f6a, 3011}, - {0x2f6b, 2808}, - {0x2f6c, 2850}, - {0x2f6d, 2737}, - {0x2f6e, 3407}, - {0x2f6f, 3398}, - {0x2f70, 3413}, - {0x2f72, 1923}, - {0x2f73, 4049}, - {0x2f74, 2539}, - {0x2f75, 4592}, - {0x2f76, 2780}, - {0x2f77, 7399}, - {0x2f78, 7262}, - {0x2f79, 3753}, - {0x2f7a, 4123}, - {0x2f7b, 4309}, - {0x2f7c, 2490}, - {0x2f7d, 1591}, - {0x2f7e, 7115}, - {0x2f7f, 1593}, - {0x2f80, 6686}, - {0x2f81, 3261}, - {0x2f82, 1249}, - {0x2f83, 4657}, - {0x2f84, 4544}, - {0x2f85, 2297}, - {0x2f86, 3353}, - {0x2f87, 5656}, - {0x2f88, 4570}, - {0x2f89, 7388}, - {0x2f8a, 3300}, - {0x2f8c, 7152}, - {0x2f8d, 1291}, - {0x2f8e, 4051}, - {0x2f8f, 3995}, - {0x2f90, 4169}, - {0x2f92, 8086}, - {0x2f93, 2200}, - {0x2f94, 4093}, - {0x2f95, 1825}, - {0x2f96, 1528}, - {0x2f97, 7445}, - {0x2f98, 7504}, - {0x2f99, 7739}, - {0x2f9a, 1285}, - {0x2f9b, 4668}, - {0x2f9c, 4672}, - {0x2f9d, 3366}, - {0x2f9e, 7803}, - {0x2f9f, 3980}, - {0x2fa0, 1250}, - {0x2fa2, 4191}, - {0x2fa3, 4276}, - {0x2fa5, 2522}, - {0x2fa6, 2241}, - {0x2fa7, 7797}, - {0x2fa8, 8317}, - {0x2fa9, 1714}, - {0x2faa, 2542}, - {0x2fab, 7545}, - {0x2fac, 4303}, - {0x2fae, 1636}, - {0x2faf, 2795}, - {0x2fb0, 1770}, - {0x2fb1, 8589}, - {0x2fb2, 2289}, - {0x2fb3, 4219}, - {0x2fb4, 8713}, - {0x2fb5, 7936}, - {0x2fb6, 7924}, - {0x2fb7, 3402}, - {0x2fb8, 3438}, - {0x2fb9, 3920}, - {0x2fba, 8301}, - {0x2fbb, 1824}, - {0x2fbc, 1754}, - {0x2fbd, 7660}, - {0x2fbe, 7888}, - {0x2fbf, 5019}, - {0x2fc0, 4704}, - {0x2fc1, 1862}, - {0x2fc2, 8761}, - {0x2fc3, 8348}, - {0x2fc4, 9864}, - {0x2fc5, 2656}, - {0x2fc6, 8305}, - {0x2fc7, 2704}, - {0x2fc9, 3465}, - {0x2fca, 1937}, - {0x2fcb, 6741}, - {0x2fcc, 9752}, - {0x2fcd, 1509}, - {0x2fce, 1821}, - {0x2fcf, 3466}, - {0x2fd0, 1072}, - {0x2fd1, 8390}, - {0x2fd2, 7814}, - {0x2fd3, 8247}, - {0x2fd4, 7988}, - {0x2fd5, 4851}, - {0x2ff1, 0}, - {0x2ff2, 1}, - {0x2ff3, 2}, - {0x2ff4, 3}, - {0x2ff5, 4}, - {0x2ff6, 5}, - {0x2ff7, 6}, - {0x2ff8, 7}, - {0x2ff9, 8}, - {0x2ffa, 9}, - {0x2ffb, 10}, - {0x3000, 96}, - {0x3001, 97}, - {0x3002, 98}, - {0x3003, 103}, - {0x3005, 104}, - {0x3007, 7703}, - {0x3008, 115}, - {0x3009, 116}, - {0x300a, 117}, - {0x300b, 118}, - {0x300c, 119}, - {0x300d, 120}, - {0x300e, 121}, - {0x300f, 122}, - {0x3010, 125}, - {0x3011, 126}, - {0x3012, 9989}, - {0x3013, 189}, - {0x3014, 113}, - {0x3015, 114}, - {0x3016, 123}, - {0x3017, 124}, - {0x301d, 9990}, - {0x301e, 9991}, - {0x3021, 9992}, - {0x3022, 9993}, - {0x3023, 9994}, - {0x3024, 9995}, - {0x3025, 9996}, - {0x3026, 9997}, - {0x3027, 9998}, - {0x3028, 9999}, - {0x3029, 10000}, - {0x3034, 0}, - {0x3035, 1}, - {0x3039, 0}, - {0x303a, 1}, - {0x3041, 356}, - {0x3042, 357}, - {0x3043, 358}, - {0x3044, 359}, - {0x3045, 360}, - {0x3046, 361}, - {0x3047, 362}, - {0x3048, 363}, - {0x3049, 364}, - {0x304a, 365}, - {0x304b, 366}, - {0x304c, 367}, - {0x304d, 368}, - {0x304e, 369}, - {0x304f, 370}, - {0x3050, 371}, - {0x3051, 372}, - {0x3052, 373}, - {0x3053, 374}, - {0x3054, 375}, - {0x3055, 376}, - {0x3056, 377}, - {0x3057, 378}, - {0x3058, 379}, - {0x3059, 380}, - {0x305a, 381}, - {0x305b, 382}, - {0x305c, 383}, - {0x305d, 384}, - {0x305e, 385}, - {0x305f, 386}, - {0x3060, 387}, - {0x3061, 388}, - {0x3062, 389}, - {0x3063, 390}, - {0x3064, 391}, - {0x3065, 392}, - {0x3066, 393}, - {0x3067, 394}, - {0x3068, 395}, - {0x3069, 396}, - {0x306a, 397}, - {0x306b, 398}, - {0x306c, 399}, - {0x306d, 400}, - {0x306e, 401}, - {0x306f, 402}, - {0x3070, 403}, - {0x3071, 404}, - {0x3072, 405}, - {0x3073, 406}, - {0x3074, 407}, - {0x3075, 408}, - {0x3076, 409}, - {0x3077, 410}, - {0x3078, 411}, - {0x3079, 412}, - {0x307a, 413}, - {0x307b, 414}, - {0x307c, 415}, - {0x307d, 416}, - {0x307e, 417}, - {0x307f, 418}, - {0x3080, 419}, - {0x3081, 420}, - {0x3082, 421}, - {0x3083, 422}, - {0x3084, 423}, - {0x3085, 424}, - {0x3086, 425}, - {0x3087, 426}, - {0x3088, 427}, - {0x3089, 428}, - {0x308a, 429}, - {0x308b, 430}, - {0x308c, 431}, - {0x308d, 432}, - {0x308e, 433}, - {0x308f, 434}, - {0x3090, 435}, - {0x3091, 436}, - {0x3092, 437}, - {0x3093, 438}, - {0x309c, 0}, - {0x309e, 0}, - {0x30a1, 439}, - {0x30a2, 440}, - {0x30a3, 441}, - {0x30a4, 442}, - {0x30a5, 443}, - {0x30a6, 444}, - {0x30a7, 445}, - {0x30a8, 446}, - {0x30a9, 447}, - {0x30aa, 448}, - {0x30ab, 449}, - {0x30ac, 450}, - {0x30ad, 451}, - {0x30ae, 452}, - {0x30af, 453}, - {0x30b0, 454}, - {0x30b1, 455}, - {0x30b2, 456}, - {0x30b3, 457}, - {0x30b4, 458}, - {0x30b5, 459}, - {0x30b6, 460}, - {0x30b7, 461}, - {0x30b8, 462}, - {0x30b9, 463}, - {0x30ba, 464}, - {0x30bb, 465}, - {0x30bc, 466}, - {0x30bd, 467}, - {0x30be, 468}, - {0x30bf, 469}, - {0x30c0, 470}, - {0x30c1, 471}, - {0x30c2, 472}, - {0x30c3, 473}, - {0x30c4, 474}, - {0x30c5, 475}, - {0x30c6, 476}, - {0x30c7, 477}, - {0x30c8, 478}, - {0x30c9, 479}, - {0x30ca, 480}, - {0x30cb, 481}, - {0x30cc, 482}, - {0x30cd, 483}, - {0x30ce, 484}, - {0x30cf, 485}, - {0x30d0, 486}, - {0x30d1, 487}, - {0x30d2, 488}, - {0x30d3, 489}, - {0x30d4, 490}, - {0x30d5, 491}, - {0x30d6, 492}, - {0x30d7, 493}, - {0x30d8, 494}, - {0x30d9, 495}, - {0x30da, 496}, - {0x30db, 497}, - {0x30dc, 498}, - {0x30dd, 499}, - {0x30de, 500}, - {0x30df, 501}, - {0x30e0, 502}, - {0x30e1, 503}, - {0x30e2, 504}, - {0x30e3, 505}, - {0x30e4, 506}, - {0x30e5, 507}, - {0x30e6, 508}, - {0x30e7, 509}, - {0x30e8, 510}, - {0x30e9, 511}, - {0x30ea, 512}, - {0x30eb, 513}, - {0x30ec, 514}, - {0x30ed, 515}, - {0x30ee, 516}, - {0x30ef, 517}, - {0x30f0, 518}, - {0x30f1, 519}, - {0x30f2, 520}, - {0x30f3, 521}, - {0x30f4, 522}, - {0x30f5, 523}, - {0x30f6, 524}, - {0x30f8, 0}, - {0x30f9, 1}, - {0x30fa, 2}, - {0x30fb, 99}, - {0x30fe, 0}, - {0x3105, 700}, - {0x3106, 701}, - {0x3107, 702}, - {0x3108, 703}, - {0x3109, 704}, - {0x310a, 705}, - {0x310b, 706}, - {0x310c, 707}, - {0x310d, 708}, - {0x310e, 709}, - {0x310f, 710}, - {0x3110, 711}, - {0x3111, 712}, - {0x3112, 713}, - {0x3113, 714}, - {0x3114, 715}, - {0x3115, 716}, - {0x3116, 717}, - {0x3117, 718}, - {0x3118, 719}, - {0x3119, 720}, - {0x311a, 721}, - {0x311b, 722}, - {0x311c, 723}, - {0x311d, 724}, - {0x311e, 725}, - {0x311f, 726}, - {0x3120, 727}, - {0x3121, 728}, - {0x3122, 729}, - {0x3123, 730}, - {0x3124, 731}, - {0x3125, 732}, - {0x3126, 733}, - {0x3127, 734}, - {0x3128, 735}, - {0x3129, 736}, - {0x312b, 0}, - {0x312c, 1}, - {0x31a1, 0}, - {0x31a2, 1}, - {0x31a3, 2}, - {0x31a4, 3}, - {0x31a5, 4}, - {0x31a6, 5}, - {0x31a7, 6}, - {0x31a8, 7}, - {0x31a9, 8}, - {0x31aa, 9}, - {0x31ab, 10}, - {0x31ac, 11}, - {0x31ad, 12}, - {0x31ae, 13}, - {0x31af, 14}, - {0x31b0, 15}, - {0x31b1, 16}, - {0x31b2, 17}, - {0x31b3, 18}, - {0x31b4, 19}, - {0x31b5, 20}, - {0x31b6, 21}, - {0x31b7, 22}, - {0x3220, 240}, - {0x3221, 241}, - {0x3222, 242}, - {0x3223, 243}, - {0x3224, 244}, - {0x3225, 245}, - {0x3226, 246}, - {0x3227, 247}, - {0x3228, 248}, - {0x3229, 249}, - {0x338f, 0}, - {0x339d, 0}, - {0x339e, 1}, - {0x33d2, 0}, - {0x3401, 0}, - {0x3402, 1}, - {0x3403, 2}, - {0x3404, 3}, - {0x3405, 4}, - {0x3406, 5}, - {0x3407, 6}, - {0x3408, 7}, - {0x3409, 8}, - {0x340a, 9}, - {0x340b, 10}, - {0x340c, 11}, - {0x340d, 12}, - {0x340e, 13}, - {0x340f, 14}, - {0x3410, 15}, - {0x3411, 16}, - {0x3412, 17}, - {0x3413, 18}, - {0x3414, 19}, - {0x3415, 20}, - {0x3416, 21}, - {0x3417, 22}, - {0x3418, 23}, - {0x3419, 24}, - {0x341a, 25}, - {0x341b, 26}, - {0x341c, 27}, - {0x341d, 28}, - {0x341e, 29}, - {0x341f, 30}, - {0x3420, 31}, - {0x3421, 32}, - {0x3422, 33}, - {0x3423, 34}, - {0x3424, 35}, - {0x3425, 36}, - {0x3426, 37}, - {0x3427, 38}, - {0x3428, 39}, - {0x3429, 40}, - {0x342a, 41}, - {0x342b, 42}, - {0x342c, 43}, - {0x342d, 44}, - {0x342e, 45}, - {0x342f, 46}, - {0x3430, 47}, - {0x3431, 48}, - {0x3432, 49}, - {0x3433, 50}, - {0x3434, 51}, - {0x3435, 52}, - {0x3436, 53}, - {0x3437, 54}, - {0x3438, 55}, - {0x3439, 56}, - {0x343a, 57}, - {0x343b, 58}, - {0x343c, 59}, - {0x343d, 60}, - {0x343e, 61}, - {0x343f, 62}, - {0x3440, 63}, - {0x3441, 64}, - {0x3442, 65}, - {0x3443, 66}, - {0x3444, 67}, - {0x3445, 68}, - {0x3446, 69}, - {0x3449, 0}, - {0x344a, 1}, - {0x344b, 2}, - {0x344c, 3}, - {0x344d, 4}, - {0x344e, 5}, - {0x344f, 6}, - {0x3450, 7}, - {0x3451, 8}, - {0x3452, 9}, - {0x3453, 10}, - {0x3454, 11}, - {0x3455, 12}, - {0x3456, 13}, - {0x3457, 14}, - {0x3458, 15}, - {0x3459, 16}, - {0x345a, 17}, - {0x345b, 18}, - {0x345c, 19}, - {0x345d, 20}, - {0x345e, 21}, - {0x345f, 22}, - {0x3460, 23}, - {0x3461, 24}, - {0x3462, 25}, - {0x3463, 26}, - {0x3464, 27}, - {0x3465, 28}, - {0x3466, 29}, - {0x3467, 30}, - {0x3468, 31}, - {0x3469, 32}, - {0x346a, 33}, - {0x346b, 34}, - {0x346c, 35}, - {0x346d, 36}, - {0x346e, 37}, - {0x346f, 38}, - {0x3470, 39}, - {0x3471, 40}, - {0x3472, 41}, - {0x3475, 0}, - {0x3476, 1}, - {0x3477, 2}, - {0x3478, 3}, - {0x3479, 4}, - {0x347a, 5}, - {0x347b, 6}, - {0x347c, 7}, - {0x347d, 8}, - {0x347e, 9}, - {0x347f, 10}, - {0x3480, 11}, - {0x3481, 12}, - {0x3482, 13}, - {0x3483, 14}, - {0x3484, 15}, - {0x3485, 16}, - {0x3486, 17}, - {0x3487, 18}, - {0x3488, 19}, - {0x3489, 20}, - {0x348a, 21}, - {0x348b, 22}, - {0x348c, 23}, - {0x348d, 24}, - {0x348e, 25}, - {0x348f, 26}, - {0x3490, 27}, - {0x3491, 28}, - {0x3492, 29}, - {0x3493, 30}, - {0x3494, 31}, - {0x3495, 32}, - {0x3496, 33}, - {0x3497, 34}, - {0x3498, 35}, - {0x3499, 36}, - {0x349a, 37}, - {0x349b, 38}, - {0x349c, 39}, - {0x349d, 40}, - {0x349e, 41}, - {0x349f, 42}, - {0x34a0, 43}, - {0x34a1, 44}, - {0x34a2, 45}, - {0x34a3, 46}, - {0x34a4, 47}, - {0x34a5, 48}, - {0x34a6, 49}, - {0x34a7, 50}, - {0x34a8, 51}, - {0x34a9, 52}, - {0x34aa, 53}, - {0x34ab, 54}, - {0x34ac, 55}, - {0x34ad, 56}, - {0x34ae, 57}, - {0x34af, 58}, - {0x34b0, 59}, - {0x34b1, 60}, - {0x34b2, 61}, - {0x34b3, 62}, - {0x34b4, 63}, - {0x34b5, 64}, - {0x34b6, 65}, - {0x34b7, 66}, - {0x34b8, 67}, - {0x34b9, 68}, - {0x34ba, 69}, - {0x34bb, 70}, - {0x34bc, 71}, - {0x34bd, 72}, - {0x34be, 73}, - {0x34bf, 74}, - {0x34c0, 75}, - {0x34c1, 76}, - {0x34c2, 77}, - {0x34c3, 78}, - {0x34c4, 79}, - {0x34c5, 80}, - {0x34c6, 81}, - {0x34c7, 82}, - {0x34c8, 83}, - {0x34c9, 84}, - {0x34ca, 85}, - {0x34cb, 86}, - {0x34cc, 87}, - {0x34cd, 88}, - {0x34ce, 89}, - {0x34cf, 90}, - {0x34d0, 91}, - {0x34d1, 92}, - {0x34d2, 93}, - {0x34d3, 94}, - {0x34d4, 95}, - {0x34d5, 96}, - {0x34d6, 97}, - {0x34d7, 98}, - {0x34d8, 99}, - {0x34d9, 100}, - {0x34da, 101}, - {0x34db, 102}, - {0x34dc, 103}, - {0x34dd, 104}, - {0x34de, 105}, - {0x34df, 106}, - {0x34e0, 107}, - {0x34e1, 108}, - {0x34e2, 109}, - {0x34e3, 110}, - {0x34e4, 111}, - {0x34e5, 112}, - {0x34e6, 113}, - {0x34e7, 114}, - {0x34e8, 115}, - {0x34e9, 116}, - {0x34ea, 117}, - {0x34eb, 118}, - {0x34ec, 119}, - {0x34ed, 120}, - {0x34ee, 121}, - {0x34ef, 122}, - {0x34f0, 123}, - {0x34f1, 124}, - {0x34f2, 125}, - {0x34f3, 126}, - {0x34f4, 127}, - {0x34f5, 128}, - {0x34f6, 129}, - {0x34f7, 130}, - {0x34f8, 131}, - {0x34f9, 132}, - {0x34fa, 133}, - {0x34fb, 134}, - {0x34fc, 135}, - {0x34fd, 136}, - {0x34fe, 137}, - {0x34ff, 138}, - {0x3501, 0}, - {0x3502, 1}, - {0x3503, 2}, - {0x3504, 3}, - {0x3505, 4}, - {0x3506, 5}, - {0x3507, 6}, - {0x3508, 7}, - {0x3509, 8}, - {0x350a, 9}, - {0x350b, 10}, - {0x350c, 11}, - {0x350d, 12}, - {0x350e, 13}, - {0x350f, 14}, - {0x3510, 15}, - {0x3511, 16}, - {0x3512, 17}, - {0x3513, 18}, - {0x3514, 19}, - {0x3515, 20}, - {0x3516, 21}, - {0x3517, 22}, - {0x3518, 23}, - {0x3519, 24}, - {0x351a, 25}, - {0x351b, 26}, - {0x351c, 27}, - {0x351d, 28}, - {0x351e, 29}, - {0x351f, 30}, - {0x3520, 31}, - {0x3521, 32}, - {0x3522, 33}, - {0x3523, 34}, - {0x3524, 35}, - {0x3525, 36}, - {0x3526, 37}, - {0x3527, 38}, - {0x3528, 39}, - {0x3529, 40}, - {0x352a, 41}, - {0x352b, 42}, - {0x352c, 43}, - {0x352d, 44}, - {0x352e, 45}, - {0x352f, 46}, - {0x3530, 47}, - {0x3531, 48}, - {0x3532, 49}, - {0x3533, 50}, - {0x3534, 51}, - {0x3535, 52}, - {0x3536, 53}, - {0x3537, 54}, - {0x3538, 55}, - {0x3539, 56}, - {0x353a, 57}, - {0x353b, 58}, - {0x353c, 59}, - {0x353d, 60}, - {0x353e, 61}, - {0x353f, 62}, - {0x3540, 63}, - {0x3541, 64}, - {0x3542, 65}, - {0x3543, 66}, - {0x3544, 67}, - {0x3545, 68}, - {0x3546, 69}, - {0x3547, 70}, - {0x3548, 71}, - {0x3549, 72}, - {0x354a, 73}, - {0x354b, 74}, - {0x354c, 75}, - {0x354d, 76}, - {0x354e, 77}, - {0x354f, 78}, - {0x3550, 79}, - {0x3551, 80}, - {0x3552, 81}, - {0x3553, 82}, - {0x3554, 83}, - {0x3555, 84}, - {0x3556, 85}, - {0x3557, 86}, - {0x3558, 87}, - {0x3559, 88}, - {0x355a, 89}, - {0x355b, 90}, - {0x355c, 91}, - {0x355d, 92}, - {0x355e, 93}, - {0x355f, 94}, - {0x3560, 95}, - {0x3561, 96}, - {0x3562, 97}, - {0x3563, 98}, - {0x3564, 99}, - {0x3565, 100}, - {0x3566, 101}, - {0x3567, 102}, - {0x3568, 103}, - {0x3569, 104}, - {0x356a, 105}, - {0x356b, 106}, - {0x356c, 107}, - {0x356d, 108}, - {0x356e, 109}, - {0x356f, 110}, - {0x3570, 111}, - {0x3571, 112}, - {0x3572, 113}, - {0x3573, 114}, - {0x3574, 115}, - {0x3575, 116}, - {0x3576, 117}, - {0x3577, 118}, - {0x3578, 119}, - {0x3579, 120}, - {0x357a, 121}, - {0x357b, 122}, - {0x357c, 123}, - {0x357d, 124}, - {0x357e, 125}, - {0x357f, 126}, - {0x3580, 127}, - {0x3581, 128}, - {0x3582, 129}, - {0x3583, 130}, - {0x3584, 131}, - {0x3585, 132}, - {0x3586, 133}, - {0x3587, 134}, - {0x3588, 135}, - {0x3589, 136}, - {0x358a, 137}, - {0x358b, 138}, - {0x358c, 139}, - {0x358d, 140}, - {0x358e, 141}, - {0x358f, 142}, - {0x3590, 143}, - {0x3591, 144}, - {0x3592, 145}, - {0x3593, 146}, - {0x3594, 147}, - {0x3595, 148}, - {0x3596, 149}, - {0x3597, 150}, - {0x3598, 151}, - {0x3599, 152}, - {0x359a, 153}, - {0x359b, 154}, - {0x359c, 155}, - {0x359d, 156}, - {0x35a0, 0}, - {0x35a1, 1}, - {0x35a2, 2}, - {0x35a3, 3}, - {0x35a4, 4}, - {0x35a5, 5}, - {0x35a6, 6}, - {0x35a7, 7}, - {0x35a8, 8}, - {0x35a9, 9}, - {0x35aa, 10}, - {0x35ab, 11}, - {0x35ac, 12}, - {0x35ad, 13}, - {0x35ae, 14}, - {0x35af, 15}, - {0x35b0, 16}, - {0x35b1, 17}, - {0x35b2, 18}, - {0x35b3, 19}, - {0x35b4, 20}, - {0x35b5, 21}, - {0x35b6, 22}, - {0x35b7, 23}, - {0x35b8, 24}, - {0x35b9, 25}, - {0x35ba, 26}, - {0x35bb, 27}, - {0x35bc, 28}, - {0x35bd, 29}, - {0x35be, 30}, - {0x35bf, 31}, - {0x35c0, 32}, - {0x35c1, 33}, - {0x35c2, 34}, - {0x35c3, 35}, - {0x35c4, 36}, - {0x35c5, 37}, - {0x35c6, 38}, - {0x35c7, 39}, - {0x35c8, 40}, - {0x35c9, 41}, - {0x35ca, 42}, - {0x35cb, 43}, - {0x35cc, 44}, - {0x35cd, 45}, - {0x35ce, 46}, - {0x35cf, 47}, - {0x35d0, 48}, - {0x35d1, 49}, - {0x35d2, 50}, - {0x35d3, 51}, - {0x35d4, 52}, - {0x35d5, 53}, - {0x35d6, 54}, - {0x35d7, 55}, - {0x35d8, 56}, - {0x35d9, 57}, - {0x35da, 58}, - {0x35db, 59}, - {0x35dc, 60}, - {0x35dd, 61}, - {0x35de, 62}, - {0x35df, 63}, - {0x35e0, 64}, - {0x35e1, 65}, - {0x35e2, 66}, - {0x35e3, 67}, - {0x35e4, 68}, - {0x35e5, 69}, - {0x35e6, 70}, - {0x35e7, 71}, - {0x35e8, 72}, - {0x35e9, 73}, - {0x35ea, 74}, - {0x35eb, 75}, - {0x35ec, 76}, - {0x35ed, 77}, - {0x35ee, 78}, - {0x35ef, 79}, - {0x35f0, 80}, - {0x35f1, 81}, - {0x35f2, 82}, - {0x35f3, 83}, - {0x35f4, 84}, - {0x35f5, 85}, - {0x35f6, 86}, - {0x35f7, 87}, - {0x35f8, 88}, - {0x35f9, 89}, - {0x35fa, 90}, - {0x35fb, 91}, - {0x35fc, 92}, - {0x35fd, 93}, - {0x35fe, 94}, - {0x35ff, 95}, - {0x3601, 0}, - {0x3602, 1}, - {0x3603, 2}, - {0x3604, 3}, - {0x3605, 4}, - {0x3606, 5}, - {0x3607, 6}, - {0x3608, 7}, - {0x3609, 8}, - {0x360a, 9}, - {0x360b, 10}, - {0x360c, 11}, - {0x360d, 12}, - {0x3610, 0}, - {0x3611, 1}, - {0x3612, 2}, - {0x3613, 3}, - {0x3614, 4}, - {0x3615, 5}, - {0x3616, 6}, - {0x3617, 7}, - {0x3618, 8}, - {0x3619, 9}, - {0x361c, 0}, - {0x361d, 1}, - {0x361e, 2}, - {0x361f, 3}, - {0x3620, 4}, - {0x3621, 5}, - {0x3622, 6}, - {0x3623, 7}, - {0x3624, 8}, - {0x3625, 9}, - {0x3626, 10}, - {0x3627, 11}, - {0x3628, 12}, - {0x3629, 13}, - {0x362a, 14}, - {0x362b, 15}, - {0x362c, 16}, - {0x362d, 17}, - {0x362e, 18}, - {0x362f, 19}, - {0x3630, 20}, - {0x3631, 21}, - {0x3632, 22}, - {0x3633, 23}, - {0x3634, 24}, - {0x3635, 25}, - {0x3636, 26}, - {0x3637, 27}, - {0x3638, 28}, - {0x3639, 29}, - {0x363a, 30}, - {0x363b, 31}, - {0x363c, 32}, - {0x363d, 33}, - {0x363e, 34}, - {0x363f, 35}, - {0x3640, 36}, - {0x3641, 37}, - {0x3642, 38}, - {0x3643, 39}, - {0x3644, 40}, - {0x3645, 41}, - {0x3646, 42}, - {0x3647, 43}, - {0x3648, 44}, - {0x3649, 45}, - {0x364a, 46}, - {0x364b, 47}, - {0x364c, 48}, - {0x364d, 49}, - {0x364e, 50}, - {0x364f, 51}, - {0x3650, 52}, - {0x3651, 53}, - {0x3652, 54}, - {0x3653, 55}, - {0x3654, 56}, - {0x3655, 57}, - {0x3656, 58}, - {0x3657, 59}, - {0x3658, 60}, - {0x3659, 61}, - {0x365a, 62}, - {0x365b, 63}, - {0x365c, 64}, - {0x365d, 65}, - {0x365e, 66}, - {0x365f, 67}, - {0x3660, 68}, - {0x3661, 69}, - {0x3662, 70}, - {0x3663, 71}, - {0x3664, 72}, - {0x3665, 73}, - {0x3666, 74}, - {0x3667, 75}, - {0x3668, 76}, - {0x3669, 77}, - {0x366a, 78}, - {0x366b, 79}, - {0x366c, 80}, - {0x366d, 81}, - {0x366e, 82}, - {0x366f, 83}, - {0x3670, 84}, - {0x3671, 85}, - {0x3672, 86}, - {0x3673, 87}, - {0x3674, 88}, - {0x3675, 89}, - {0x3676, 90}, - {0x3677, 91}, - {0x3678, 92}, - {0x3679, 93}, - {0x367a, 94}, - {0x367b, 95}, - {0x367c, 96}, - {0x367d, 97}, - {0x367e, 98}, - {0x367f, 99}, - {0x3680, 100}, - {0x3681, 101}, - {0x3682, 102}, - {0x3683, 103}, - {0x3684, 104}, - {0x3685, 105}, - {0x3686, 106}, - {0x3687, 107}, - {0x3688, 108}, - {0x3689, 109}, - {0x368a, 110}, - {0x368b, 111}, - {0x368c, 112}, - {0x368d, 113}, - {0x368e, 114}, - {0x368f, 115}, - {0x3690, 116}, - {0x3691, 117}, - {0x3692, 118}, - {0x3693, 119}, - {0x3694, 120}, - {0x3695, 121}, - {0x3696, 122}, - {0x3697, 123}, - {0x3698, 124}, - {0x3699, 125}, - {0x369a, 126}, - {0x369b, 127}, - {0x369c, 128}, - {0x369d, 129}, - {0x369e, 130}, - {0x369f, 131}, - {0x36a0, 132}, - {0x36a1, 133}, - {0x36a2, 134}, - {0x36a3, 135}, - {0x36a4, 136}, - {0x36a5, 137}, - {0x36a6, 138}, - {0x36a7, 139}, - {0x36a8, 140}, - {0x36a9, 141}, - {0x36aa, 142}, - {0x36ab, 143}, - {0x36ac, 144}, - {0x36ad, 145}, - {0x36ae, 146}, - {0x36af, 147}, - {0x36b0, 148}, - {0x36b1, 149}, - {0x36b2, 150}, - {0x36b3, 151}, - {0x36b4, 152}, - {0x36b5, 153}, - {0x36b6, 154}, - {0x36b7, 155}, - {0x36b8, 156}, - {0x36b9, 157}, - {0x36ba, 158}, - {0x36bb, 159}, - {0x36bc, 160}, - {0x36bd, 161}, - {0x36be, 162}, - {0x36bf, 163}, - {0x36c0, 164}, - {0x36c1, 165}, - {0x36c2, 166}, - {0x36c3, 167}, - {0x36c4, 168}, - {0x36c5, 169}, - {0x36c6, 170}, - {0x36c7, 171}, - {0x36c8, 172}, - {0x36c9, 173}, - {0x36ca, 174}, - {0x36cb, 175}, - {0x36cc, 176}, - {0x36cd, 177}, - {0x36ce, 178}, - {0x36cf, 179}, - {0x36d0, 180}, - {0x36d1, 181}, - {0x36d2, 182}, - {0x36d3, 183}, - {0x36d4, 184}, - {0x36d5, 185}, - {0x36d6, 186}, - {0x36d7, 187}, - {0x36d8, 188}, - {0x36d9, 189}, - {0x36da, 190}, - {0x36db, 191}, - {0x36dc, 192}, - {0x36dd, 193}, - {0x36de, 194}, - {0x36df, 195}, - {0x36e0, 196}, - {0x36e1, 197}, - {0x36e2, 198}, - {0x36e3, 199}, - {0x36e4, 200}, - {0x36e5, 201}, - {0x36e6, 202}, - {0x36e7, 203}, - {0x36e8, 204}, - {0x36e9, 205}, - {0x36ea, 206}, - {0x36eb, 207}, - {0x36ec, 208}, - {0x36ed, 209}, - {0x36ee, 210}, - {0x36ef, 211}, - {0x36f0, 212}, - {0x36f1, 213}, - {0x36f2, 214}, - {0x36f3, 215}, - {0x36f4, 216}, - {0x36f5, 217}, - {0x36f6, 218}, - {0x36f7, 219}, - {0x36f8, 220}, - {0x36f9, 221}, - {0x36fa, 222}, - {0x36fb, 223}, - {0x36fc, 224}, - {0x36fd, 225}, - {0x36fe, 226}, - {0x36ff, 227}, - {0x3701, 0}, - {0x3702, 1}, - {0x3703, 2}, - {0x3704, 3}, - {0x3705, 4}, - {0x3706, 5}, - {0x3707, 6}, - {0x3708, 7}, - {0x3709, 8}, - {0x370a, 9}, - {0x370b, 10}, - {0x370c, 11}, - {0x370d, 12}, - {0x370e, 13}, - {0x370f, 14}, - {0x3710, 15}, - {0x3711, 16}, - {0x3712, 17}, - {0x3713, 18}, - {0x3714, 19}, - {0x3715, 20}, - {0x3716, 21}, - {0x3717, 22}, - {0x3718, 23}, - {0x3719, 24}, - {0x371a, 25}, - {0x371b, 26}, - {0x371c, 27}, - {0x371d, 28}, - {0x371e, 29}, - {0x371f, 30}, - {0x3720, 31}, - {0x3721, 32}, - {0x3722, 33}, - {0x3723, 34}, - {0x3724, 35}, - {0x3725, 36}, - {0x3726, 37}, - {0x3727, 38}, - {0x3728, 39}, - {0x3729, 40}, - {0x372a, 41}, - {0x372b, 42}, - {0x372c, 43}, - {0x372d, 44}, - {0x372e, 45}, - {0x372f, 46}, - {0x3730, 47}, - {0x3731, 48}, - {0x3732, 49}, - {0x3733, 50}, - {0x3734, 51}, - {0x3735, 52}, - {0x3736, 53}, - {0x3737, 54}, - {0x3738, 55}, - {0x3739, 56}, - {0x373a, 57}, - {0x373b, 58}, - {0x373c, 59}, - {0x373d, 60}, - {0x373e, 61}, - {0x373f, 62}, - {0x3740, 63}, - {0x3741, 64}, - {0x3742, 65}, - {0x3743, 66}, - {0x3744, 67}, - {0x3745, 68}, - {0x3746, 69}, - {0x3747, 70}, - {0x3748, 71}, - {0x3749, 72}, - {0x374a, 73}, - {0x374b, 74}, - {0x374c, 75}, - {0x374d, 76}, - {0x374e, 77}, - {0x374f, 78}, - {0x3750, 79}, - {0x3751, 80}, - {0x3752, 81}, - {0x3753, 82}, - {0x3754, 83}, - {0x3755, 84}, - {0x3756, 85}, - {0x3757, 86}, - {0x3758, 87}, - {0x3759, 88}, - {0x375a, 89}, - {0x375b, 90}, - {0x375c, 91}, - {0x375d, 92}, - {0x375e, 93}, - {0x375f, 94}, - {0x3760, 95}, - {0x3761, 96}, - {0x3762, 97}, - {0x3763, 98}, - {0x3764, 99}, - {0x3765, 100}, - {0x3766, 101}, - {0x3767, 102}, - {0x3768, 103}, - {0x3769, 104}, - {0x376a, 105}, - {0x376b, 106}, - {0x376c, 107}, - {0x376d, 108}, - {0x376e, 109}, - {0x376f, 110}, - {0x3770, 111}, - {0x3771, 112}, - {0x3772, 113}, - {0x3773, 114}, - {0x3774, 115}, - {0x3775, 116}, - {0x3776, 117}, - {0x3777, 118}, - {0x3778, 119}, - {0x3779, 120}, - {0x377a, 121}, - {0x377b, 122}, - {0x377c, 123}, - {0x377d, 124}, - {0x377e, 125}, - {0x377f, 126}, - {0x3780, 127}, - {0x3781, 128}, - {0x3782, 129}, - {0x3783, 130}, - {0x3784, 131}, - {0x3785, 132}, - {0x3786, 133}, - {0x3787, 134}, - {0x3788, 135}, - {0x3789, 136}, - {0x378a, 137}, - {0x378b, 138}, - {0x378c, 139}, - {0x378d, 140}, - {0x378e, 141}, - {0x378f, 142}, - {0x3790, 143}, - {0x3791, 144}, - {0x3792, 145}, - {0x3793, 146}, - {0x3794, 147}, - {0x3795, 148}, - {0x3796, 149}, - {0x3797, 150}, - {0x3798, 151}, - {0x3799, 152}, - {0x379a, 153}, - {0x379b, 154}, - {0x379c, 155}, - {0x379d, 156}, - {0x379e, 157}, - {0x379f, 158}, - {0x37a0, 159}, - {0x37a1, 160}, - {0x37a2, 161}, - {0x37a3, 162}, - {0x37a4, 163}, - {0x37a5, 164}, - {0x37a6, 165}, - {0x37a7, 166}, - {0x37a8, 167}, - {0x37a9, 168}, - {0x37aa, 169}, - {0x37ab, 170}, - {0x37ac, 171}, - {0x37ad, 172}, - {0x37ae, 173}, - {0x37af, 174}, - {0x37b0, 175}, - {0x37b1, 176}, - {0x37b2, 177}, - {0x37b3, 178}, - {0x37b4, 179}, - {0x37b5, 180}, - {0x37b6, 181}, - {0x37b7, 182}, - {0x37b8, 183}, - {0x37b9, 184}, - {0x37ba, 185}, - {0x37bb, 186}, - {0x37bc, 187}, - {0x37bd, 188}, - {0x37be, 189}, - {0x37bf, 190}, - {0x37c0, 191}, - {0x37c1, 192}, - {0x37c2, 193}, - {0x37c3, 194}, - {0x37c4, 195}, - {0x37c5, 196}, - {0x37c6, 197}, - {0x37c7, 198}, - {0x37c8, 199}, - {0x37c9, 200}, - {0x37ca, 201}, - {0x37cb, 202}, - {0x37cc, 203}, - {0x37cd, 204}, - {0x37ce, 205}, - {0x37cf, 206}, - {0x37d0, 207}, - {0x37d1, 208}, - {0x37d2, 209}, - {0x37d3, 210}, - {0x37d4, 211}, - {0x37d5, 212}, - {0x37d6, 213}, - {0x37d7, 214}, - {0x37d8, 215}, - {0x37d9, 216}, - {0x37da, 217}, - {0x37db, 218}, - {0x37dc, 219}, - {0x37dd, 220}, - {0x37de, 221}, - {0x37df, 222}, - {0x37e0, 223}, - {0x37e1, 224}, - {0x37e2, 225}, - {0x37e3, 226}, - {0x37e4, 227}, - {0x37e5, 228}, - {0x37e6, 229}, - {0x37e7, 230}, - {0x37e8, 231}, - {0x37e9, 232}, - {0x37ea, 233}, - {0x37eb, 234}, - {0x37ec, 235}, - {0x37ed, 236}, - {0x37ee, 237}, - {0x37ef, 238}, - {0x37f0, 239}, - {0x37f1, 240}, - {0x37f2, 241}, - {0x37f3, 242}, - {0x37f4, 243}, - {0x37f5, 244}, - {0x37f6, 245}, - {0x37f7, 246}, - {0x37f8, 247}, - {0x37f9, 248}, - {0x37fa, 249}, - {0x37fb, 250}, - {0x37fc, 251}, - {0x37fd, 252}, - {0x37fe, 253}, - {0x37ff, 254}, - {0x3801, 0}, - {0x3802, 1}, - {0x3803, 2}, - {0x3804, 3}, - {0x3805, 4}, - {0x3806, 5}, - {0x3807, 6}, - {0x3808, 7}, - {0x3809, 8}, - {0x380a, 9}, - {0x380b, 10}, - {0x380c, 11}, - {0x380d, 12}, - {0x380e, 13}, - {0x380f, 14}, - {0x3810, 15}, - {0x3811, 16}, - {0x3812, 17}, - {0x3813, 18}, - {0x3814, 19}, - {0x3815, 20}, - {0x3816, 21}, - {0x3817, 22}, - {0x3818, 23}, - {0x3819, 24}, - {0x381a, 25}, - {0x381b, 26}, - {0x381c, 27}, - {0x381d, 28}, - {0x381e, 29}, - {0x381f, 30}, - {0x3820, 31}, - {0x3821, 32}, - {0x3822, 33}, - {0x3823, 34}, - {0x3824, 35}, - {0x3825, 36}, - {0x3826, 37}, - {0x3827, 38}, - {0x3828, 39}, - {0x3829, 40}, - {0x382a, 41}, - {0x382b, 42}, - {0x382c, 43}, - {0x382d, 44}, - {0x382e, 45}, - {0x382f, 46}, - {0x3830, 47}, - {0x3831, 48}, - {0x3832, 49}, - {0x3833, 50}, - {0x3834, 51}, - {0x3835, 52}, - {0x3836, 53}, - {0x3837, 54}, - {0x3838, 55}, - {0x3839, 56}, - {0x383a, 57}, - {0x383b, 58}, - {0x383c, 59}, - {0x383d, 60}, - {0x383e, 61}, - {0x383f, 62}, - {0x3840, 63}, - {0x3841, 64}, - {0x3842, 65}, - {0x3843, 66}, - {0x3844, 67}, - {0x3845, 68}, - {0x3846, 69}, - {0x3847, 70}, - {0x3848, 71}, - {0x3849, 72}, - {0x384a, 73}, - {0x384b, 74}, - {0x384c, 75}, - {0x384d, 76}, - {0x384e, 77}, - {0x384f, 78}, - {0x3850, 79}, - {0x3851, 80}, - {0x3852, 81}, - {0x3853, 82}, - {0x3854, 83}, - {0x3855, 84}, - {0x3856, 85}, - {0x3857, 86}, - {0x3858, 87}, - {0x3859, 88}, - {0x385a, 89}, - {0x385b, 90}, - {0x385c, 91}, - {0x385d, 92}, - {0x385e, 93}, - {0x385f, 94}, - {0x3860, 95}, - {0x3861, 96}, - {0x3862, 97}, - {0x3863, 98}, - {0x3864, 99}, - {0x3865, 100}, - {0x3866, 101}, - {0x3867, 102}, - {0x3868, 103}, - {0x3869, 104}, - {0x386a, 105}, - {0x386b, 106}, - {0x386c, 107}, - {0x386d, 108}, - {0x386e, 109}, - {0x386f, 110}, - {0x3870, 111}, - {0x3871, 112}, - {0x3872, 113}, - {0x3873, 114}, - {0x3874, 115}, - {0x3875, 116}, - {0x3876, 117}, - {0x3877, 118}, - {0x3878, 119}, - {0x3879, 120}, - {0x387a, 121}, - {0x387b, 122}, - {0x387c, 123}, - {0x387d, 124}, - {0x387e, 125}, - {0x387f, 126}, - {0x3880, 127}, - {0x3881, 128}, - {0x3882, 129}, - {0x3883, 130}, - {0x3884, 131}, - {0x3885, 132}, - {0x3886, 133}, - {0x3887, 134}, - {0x3888, 135}, - {0x3889, 136}, - {0x388a, 137}, - {0x388b, 138}, - {0x388c, 139}, - {0x388d, 140}, - {0x388e, 141}, - {0x388f, 142}, - {0x3890, 143}, - {0x3891, 144}, - {0x3892, 145}, - {0x3893, 146}, - {0x3894, 147}, - {0x3895, 148}, - {0x3896, 149}, - {0x3897, 150}, - {0x3898, 151}, - {0x3899, 152}, - {0x389a, 153}, - {0x389b, 154}, - {0x389c, 155}, - {0x389d, 156}, - {0x389e, 157}, - {0x389f, 158}, - {0x38a0, 159}, - {0x38a1, 160}, - {0x38a2, 161}, - {0x38a3, 162}, - {0x38a4, 163}, - {0x38a5, 164}, - {0x38a6, 165}, - {0x38a7, 166}, - {0x38a8, 167}, - {0x38a9, 168}, - {0x38aa, 169}, - {0x38ab, 170}, - {0x38ac, 171}, - {0x38ad, 172}, - {0x38ae, 173}, - {0x38af, 174}, - {0x38b0, 175}, - {0x38b1, 176}, - {0x38b2, 177}, - {0x38b3, 178}, - {0x38b4, 179}, - {0x38b5, 180}, - {0x38b6, 181}, - {0x38b7, 182}, - {0x38b8, 183}, - {0x38b9, 184}, - {0x38ba, 185}, - {0x38bb, 186}, - {0x38bc, 187}, - {0x38bd, 188}, - {0x38be, 189}, - {0x38bf, 190}, - {0x38c0, 191}, - {0x38c1, 192}, - {0x38c2, 193}, - {0x38c3, 194}, - {0x38c4, 195}, - {0x38c5, 196}, - {0x38c6, 197}, - {0x38c7, 198}, - {0x38c8, 199}, - {0x38c9, 200}, - {0x38ca, 201}, - {0x38cb, 202}, - {0x38cc, 203}, - {0x38cd, 204}, - {0x38ce, 205}, - {0x38cf, 206}, - {0x38d0, 207}, - {0x38d1, 208}, - {0x38d2, 209}, - {0x38d3, 210}, - {0x38d4, 211}, - {0x38d5, 212}, - {0x38d6, 213}, - {0x38d7, 214}, - {0x38d8, 215}, - {0x38d9, 216}, - {0x38da, 217}, - {0x38db, 218}, - {0x38dc, 219}, - {0x38dd, 220}, - {0x38de, 221}, - {0x38df, 222}, - {0x38e0, 223}, - {0x38e1, 224}, - {0x38e2, 225}, - {0x38e3, 226}, - {0x38e4, 227}, - {0x38e5, 228}, - {0x38e6, 229}, - {0x38e7, 230}, - {0x38e8, 231}, - {0x38e9, 232}, - {0x38ea, 233}, - {0x38eb, 234}, - {0x38ec, 235}, - {0x38ed, 236}, - {0x38ee, 237}, - {0x38ef, 238}, - {0x38f0, 239}, - {0x38f1, 240}, - {0x38f2, 241}, - {0x38f3, 242}, - {0x38f4, 243}, - {0x38f5, 244}, - {0x38f6, 245}, - {0x38f7, 246}, - {0x38f8, 247}, - {0x38f9, 248}, - {0x38fa, 249}, - {0x38fb, 250}, - {0x38fc, 251}, - {0x38fd, 252}, - {0x38fe, 253}, - {0x38ff, 254}, - {0x3901, 0}, - {0x3902, 1}, - {0x3903, 2}, - {0x3904, 3}, - {0x3905, 4}, - {0x3906, 5}, - {0x3907, 6}, - {0x3908, 7}, - {0x3909, 8}, - {0x390a, 9}, - {0x390b, 10}, - {0x390c, 11}, - {0x390d, 12}, - {0x390e, 13}, - {0x390f, 14}, - {0x3910, 15}, - {0x3911, 16}, - {0x3912, 17}, - {0x3913, 18}, - {0x3914, 19}, - {0x3915, 20}, - {0x3916, 21}, - {0x3917, 22}, - {0x391a, 0}, - {0x391b, 1}, - {0x391c, 2}, - {0x391d, 3}, - {0x391e, 4}, - {0x391f, 5}, - {0x3920, 6}, - {0x3921, 7}, - {0x3922, 8}, - {0x3923, 9}, - {0x3924, 10}, - {0x3925, 11}, - {0x3926, 12}, - {0x3927, 13}, - {0x3928, 14}, - {0x3929, 15}, - {0x392a, 16}, - {0x392b, 17}, - {0x392c, 18}, - {0x392d, 19}, - {0x392e, 20}, - {0x392f, 21}, - {0x3930, 22}, - {0x3931, 23}, - {0x3932, 24}, - {0x3933, 25}, - {0x3934, 26}, - {0x3935, 27}, - {0x3936, 28}, - {0x3937, 29}, - {0x3938, 30}, - {0x3939, 31}, - {0x393a, 32}, - {0x393b, 33}, - {0x393c, 34}, - {0x393d, 35}, - {0x393e, 36}, - {0x393f, 37}, - {0x3940, 38}, - {0x3941, 39}, - {0x3942, 40}, - {0x3943, 41}, - {0x3944, 42}, - {0x3945, 43}, - {0x3946, 44}, - {0x3947, 45}, - {0x3948, 46}, - {0x3949, 47}, - {0x394a, 48}, - {0x394b, 49}, - {0x394c, 50}, - {0x394d, 51}, - {0x394e, 52}, - {0x394f, 53}, - {0x3950, 54}, - {0x3951, 55}, - {0x3952, 56}, - {0x3953, 57}, - {0x3954, 58}, - {0x3955, 59}, - {0x3956, 60}, - {0x3957, 61}, - {0x3958, 62}, - {0x3959, 63}, - {0x395a, 64}, - {0x395b, 65}, - {0x395c, 66}, - {0x395d, 67}, - {0x395e, 68}, - {0x395f, 69}, - {0x3960, 70}, - {0x3961, 71}, - {0x3962, 72}, - {0x3963, 73}, - {0x3964, 74}, - {0x3965, 75}, - {0x3966, 76}, - {0x3967, 77}, - {0x3968, 78}, - {0x3969, 79}, - {0x396a, 80}, - {0x396b, 81}, - {0x396c, 82}, - {0x396d, 83}, - {0x3970, 0}, - {0x3971, 1}, - {0x3972, 2}, - {0x3973, 3}, - {0x3974, 4}, - {0x3975, 5}, - {0x3976, 6}, - {0x3977, 7}, - {0x3978, 8}, - {0x3979, 9}, - {0x397a, 10}, - {0x397b, 11}, - {0x397c, 12}, - {0x397d, 13}, - {0x397e, 14}, - {0x397f, 15}, - {0x3980, 16}, - {0x3981, 17}, - {0x3982, 18}, - {0x3983, 19}, - {0x3984, 20}, - {0x3985, 21}, - {0x3986, 22}, - {0x3987, 23}, - {0x3988, 24}, - {0x3989, 25}, - {0x398a, 26}, - {0x398b, 27}, - {0x398c, 28}, - {0x398d, 29}, - {0x398e, 30}, - {0x398f, 31}, - {0x3990, 32}, - {0x3991, 33}, - {0x3992, 34}, - {0x3993, 35}, - {0x3994, 36}, - {0x3995, 37}, - {0x3996, 38}, - {0x3997, 39}, - {0x3998, 40}, - {0x3999, 41}, - {0x399a, 42}, - {0x399b, 43}, - {0x399c, 44}, - {0x399d, 45}, - {0x399e, 46}, - {0x399f, 47}, - {0x39a0, 48}, - {0x39a1, 49}, - {0x39a2, 50}, - {0x39a3, 51}, - {0x39a4, 52}, - {0x39a5, 53}, - {0x39a6, 54}, - {0x39a7, 55}, - {0x39a8, 56}, - {0x39a9, 57}, - {0x39aa, 58}, - {0x39ab, 59}, - {0x39ac, 60}, - {0x39ad, 61}, - {0x39ae, 62}, - {0x39af, 63}, - {0x39b0, 64}, - {0x39b1, 65}, - {0x39b2, 66}, - {0x39b3, 67}, - {0x39b4, 68}, - {0x39b5, 69}, - {0x39b6, 70}, - {0x39b7, 71}, - {0x39b8, 72}, - {0x39b9, 73}, - {0x39ba, 74}, - {0x39bb, 75}, - {0x39bc, 76}, - {0x39bd, 77}, - {0x39be, 78}, - {0x39bf, 79}, - {0x39c0, 80}, - {0x39c1, 81}, - {0x39c2, 82}, - {0x39c3, 83}, - {0x39c4, 84}, - {0x39c5, 85}, - {0x39c6, 86}, - {0x39c7, 87}, - {0x39c8, 88}, - {0x39c9, 89}, - {0x39ca, 90}, - {0x39cb, 91}, - {0x39cc, 92}, - {0x39cd, 93}, - {0x39ce, 94}, - {0x39d2, 0}, - {0x39d3, 1}, - {0x39d4, 2}, - {0x39d5, 3}, - {0x39d6, 4}, - {0x39d7, 5}, - {0x39d8, 6}, - {0x39d9, 7}, - {0x39da, 8}, - {0x39db, 9}, - {0x39dc, 10}, - {0x39dd, 11}, - {0x39de, 12}, - {0x39e1, 0}, - {0x39e2, 1}, - {0x39e3, 2}, - {0x39e4, 3}, - {0x39e5, 4}, - {0x39e6, 5}, - {0x39e7, 6}, - {0x39e8, 7}, - {0x39e9, 8}, - {0x39ea, 9}, - {0x39eb, 10}, - {0x39ec, 11}, - {0x39ed, 12}, - {0x39ee, 13}, - {0x39ef, 14}, - {0x39f0, 15}, - {0x39f1, 16}, - {0x39f2, 17}, - {0x39f3, 18}, - {0x39f4, 19}, - {0x39f5, 20}, - {0x39f6, 21}, - {0x39f7, 22}, - {0x39f8, 23}, - {0x39f9, 24}, - {0x39fa, 25}, - {0x39fb, 26}, - {0x39fc, 27}, - {0x39fd, 28}, - {0x39fe, 29}, - {0x39ff, 30}, - {0x3a01, 0}, - {0x3a02, 1}, - {0x3a03, 2}, - {0x3a04, 3}, - {0x3a05, 4}, - {0x3a06, 5}, - {0x3a07, 6}, - {0x3a08, 7}, - {0x3a09, 8}, - {0x3a0a, 9}, - {0x3a0b, 10}, - {0x3a0c, 11}, - {0x3a0d, 12}, - {0x3a0e, 13}, - {0x3a0f, 14}, - {0x3a10, 15}, - {0x3a11, 16}, - {0x3a12, 17}, - {0x3a13, 18}, - {0x3a14, 19}, - {0x3a15, 20}, - {0x3a16, 21}, - {0x3a17, 22}, - {0x3a18, 23}, - {0x3a19, 24}, - {0x3a1a, 25}, - {0x3a1b, 26}, - {0x3a1c, 27}, - {0x3a1d, 28}, - {0x3a1e, 29}, - {0x3a1f, 30}, - {0x3a20, 31}, - {0x3a21, 32}, - {0x3a22, 33}, - {0x3a23, 34}, - {0x3a24, 35}, - {0x3a25, 36}, - {0x3a26, 37}, - {0x3a27, 38}, - {0x3a28, 39}, - {0x3a29, 40}, - {0x3a2a, 41}, - {0x3a2b, 42}, - {0x3a2c, 43}, - {0x3a2d, 44}, - {0x3a2e, 45}, - {0x3a2f, 46}, - {0x3a30, 47}, - {0x3a31, 48}, - {0x3a32, 49}, - {0x3a33, 50}, - {0x3a34, 51}, - {0x3a35, 52}, - {0x3a36, 53}, - {0x3a37, 54}, - {0x3a38, 55}, - {0x3a39, 56}, - {0x3a3a, 57}, - {0x3a3b, 58}, - {0x3a3c, 59}, - {0x3a3d, 60}, - {0x3a3e, 61}, - {0x3a3f, 62}, - {0x3a40, 63}, - {0x3a41, 64}, - {0x3a42, 65}, - {0x3a43, 66}, - {0x3a44, 67}, - {0x3a45, 68}, - {0x3a46, 69}, - {0x3a47, 70}, - {0x3a48, 71}, - {0x3a49, 72}, - {0x3a4a, 73}, - {0x3a4b, 74}, - {0x3a4c, 75}, - {0x3a4d, 76}, - {0x3a4e, 77}, - {0x3a4f, 78}, - {0x3a50, 79}, - {0x3a51, 80}, - {0x3a52, 81}, - {0x3a53, 82}, - {0x3a54, 83}, - {0x3a55, 84}, - {0x3a56, 85}, - {0x3a57, 86}, - {0x3a58, 87}, - {0x3a59, 88}, - {0x3a5a, 89}, - {0x3a5b, 90}, - {0x3a5c, 91}, - {0x3a5d, 92}, - {0x3a5e, 93}, - {0x3a5f, 94}, - {0x3a60, 95}, - {0x3a61, 96}, - {0x3a62, 97}, - {0x3a63, 98}, - {0x3a64, 99}, - {0x3a65, 100}, - {0x3a66, 101}, - {0x3a67, 102}, - {0x3a68, 103}, - {0x3a69, 104}, - {0x3a6a, 105}, - {0x3a6b, 106}, - {0x3a6c, 107}, - {0x3a6d, 108}, - {0x3a6e, 109}, - {0x3a6f, 110}, - {0x3a70, 111}, - {0x3a71, 112}, - {0x3a72, 113}, - {0x3a75, 0}, - {0x3a76, 1}, - {0x3a77, 2}, - {0x3a78, 3}, - {0x3a79, 4}, - {0x3a7a, 5}, - {0x3a7b, 6}, - {0x3a7c, 7}, - {0x3a7d, 8}, - {0x3a7e, 9}, - {0x3a7f, 10}, - {0x3a80, 11}, - {0x3a81, 12}, - {0x3a82, 13}, - {0x3a83, 14}, - {0x3a84, 15}, - {0x3a85, 16}, - {0x3a86, 17}, - {0x3a87, 18}, - {0x3a88, 19}, - {0x3a89, 20}, - {0x3a8a, 21}, - {0x3a8b, 22}, - {0x3a8c, 23}, - {0x3a8d, 24}, - {0x3a8e, 25}, - {0x3a8f, 26}, - {0x3a90, 27}, - {0x3a91, 28}, - {0x3a92, 29}, - {0x3a93, 30}, - {0x3a94, 31}, - {0x3a95, 32}, - {0x3a96, 33}, - {0x3a97, 34}, - {0x3a98, 35}, - {0x3a99, 36}, - {0x3a9a, 37}, - {0x3a9b, 38}, - {0x3a9c, 39}, - {0x3a9d, 40}, - {0x3a9e, 41}, - {0x3a9f, 42}, - {0x3aa0, 43}, - {0x3aa1, 44}, - {0x3aa2, 45}, - {0x3aa3, 46}, - {0x3aa4, 47}, - {0x3aa5, 48}, - {0x3aa6, 49}, - {0x3aa7, 50}, - {0x3aa8, 51}, - {0x3aa9, 52}, - {0x3aaa, 53}, - {0x3aab, 54}, - {0x3aac, 55}, - {0x3aad, 56}, - {0x3aae, 57}, - {0x3aaf, 58}, - {0x3ab0, 59}, - {0x3ab1, 60}, - {0x3ab2, 61}, - {0x3ab3, 62}, - {0x3ab4, 63}, - {0x3ab5, 64}, - {0x3ab6, 65}, - {0x3ab7, 66}, - {0x3ab8, 67}, - {0x3ab9, 68}, - {0x3aba, 69}, - {0x3abb, 70}, - {0x3abc, 71}, - {0x3abd, 72}, - {0x3abe, 73}, - {0x3abf, 74}, - {0x3ac0, 75}, - {0x3ac1, 76}, - {0x3ac2, 77}, - {0x3ac3, 78}, - {0x3ac4, 79}, - {0x3ac5, 80}, - {0x3ac6, 81}, - {0x3ac7, 82}, - {0x3ac8, 83}, - {0x3ac9, 84}, - {0x3aca, 85}, - {0x3acb, 86}, - {0x3acc, 87}, - {0x3acd, 88}, - {0x3ace, 89}, - {0x3acf, 90}, - {0x3ad0, 91}, - {0x3ad1, 92}, - {0x3ad2, 93}, - {0x3ad3, 94}, - {0x3ad4, 95}, - {0x3ad5, 96}, - {0x3ad6, 97}, - {0x3ad7, 98}, - {0x3ad8, 99}, - {0x3ad9, 100}, - {0x3ada, 101}, - {0x3adb, 102}, - {0x3adc, 103}, - {0x3add, 104}, - {0x3ade, 105}, - {0x3adf, 106}, - {0x3ae0, 107}, - {0x3ae1, 108}, - {0x3ae2, 109}, - {0x3ae3, 110}, - {0x3ae4, 111}, - {0x3ae5, 112}, - {0x3ae6, 113}, - {0x3ae7, 114}, - {0x3ae8, 115}, - {0x3ae9, 116}, - {0x3aea, 117}, - {0x3aeb, 118}, - {0x3aec, 119}, - {0x3aed, 120}, - {0x3aee, 121}, - {0x3aef, 122}, - {0x3af0, 123}, - {0x3af1, 124}, - {0x3af2, 125}, - {0x3af3, 126}, - {0x3af4, 127}, - {0x3af5, 128}, - {0x3af6, 129}, - {0x3af7, 130}, - {0x3af8, 131}, - {0x3af9, 132}, - {0x3afa, 133}, - {0x3afb, 134}, - {0x3afc, 135}, - {0x3afd, 136}, - {0x3afe, 137}, - {0x3aff, 138}, - {0x3b01, 0}, - {0x3b02, 1}, - {0x3b03, 2}, - {0x3b04, 3}, - {0x3b05, 4}, - {0x3b06, 5}, - {0x3b07, 6}, - {0x3b08, 7}, - {0x3b09, 8}, - {0x3b0a, 9}, - {0x3b0b, 10}, - {0x3b0c, 11}, - {0x3b0d, 12}, - {0x3b0e, 13}, - {0x3b0f, 14}, - {0x3b10, 15}, - {0x3b11, 16}, - {0x3b12, 17}, - {0x3b13, 18}, - {0x3b14, 19}, - {0x3b15, 20}, - {0x3b16, 21}, - {0x3b17, 22}, - {0x3b18, 23}, - {0x3b19, 24}, - {0x3b1a, 25}, - {0x3b1b, 26}, - {0x3b1c, 27}, - {0x3b1d, 28}, - {0x3b1e, 29}, - {0x3b1f, 30}, - {0x3b20, 31}, - {0x3b21, 32}, - {0x3b22, 33}, - {0x3b23, 34}, - {0x3b24, 35}, - {0x3b25, 36}, - {0x3b26, 37}, - {0x3b27, 38}, - {0x3b28, 39}, - {0x3b29, 40}, - {0x3b2a, 41}, - {0x3b2b, 42}, - {0x3b2c, 43}, - {0x3b2d, 44}, - {0x3b2e, 45}, - {0x3b2f, 46}, - {0x3b30, 47}, - {0x3b31, 48}, - {0x3b32, 49}, - {0x3b33, 50}, - {0x3b34, 51}, - {0x3b35, 52}, - {0x3b36, 53}, - {0x3b37, 54}, - {0x3b38, 55}, - {0x3b39, 56}, - {0x3b3a, 57}, - {0x3b3b, 58}, - {0x3b3c, 59}, - {0x3b3d, 60}, - {0x3b3e, 61}, - {0x3b3f, 62}, - {0x3b40, 63}, - {0x3b41, 64}, - {0x3b42, 65}, - {0x3b43, 66}, - {0x3b44, 67}, - {0x3b45, 68}, - {0x3b46, 69}, - {0x3b47, 70}, - {0x3b48, 71}, - {0x3b49, 72}, - {0x3b4a, 73}, - {0x3b4b, 74}, - {0x3b4c, 75}, - {0x3b4d, 76}, - {0x3b50, 0}, - {0x3b51, 1}, - {0x3b52, 2}, - {0x3b53, 3}, - {0x3b54, 4}, - {0x3b55, 5}, - {0x3b56, 6}, - {0x3b57, 7}, - {0x3b58, 8}, - {0x3b59, 9}, - {0x3b5a, 10}, - {0x3b5b, 11}, - {0x3b5c, 12}, - {0x3b5d, 13}, - {0x3b5e, 14}, - {0x3b5f, 15}, - {0x3b60, 16}, - {0x3b61, 17}, - {0x3b62, 18}, - {0x3b63, 19}, - {0x3b64, 20}, - {0x3b65, 21}, - {0x3b66, 22}, - {0x3b67, 23}, - {0x3b68, 24}, - {0x3b69, 25}, - {0x3b6a, 26}, - {0x3b6b, 27}, - {0x3b6c, 28}, - {0x3b6d, 29}, - {0x3b6e, 30}, - {0x3b6f, 31}, - {0x3b70, 32}, - {0x3b71, 33}, - {0x3b72, 34}, - {0x3b73, 35}, - {0x3b74, 36}, - {0x3b75, 37}, - {0x3b76, 38}, - {0x3b77, 39}, - {0x3b78, 40}, - {0x3b79, 41}, - {0x3b7a, 42}, - {0x3b7b, 43}, - {0x3b7c, 44}, - {0x3b7d, 45}, - {0x3b7e, 46}, - {0x3b7f, 47}, - {0x3b80, 48}, - {0x3b81, 49}, - {0x3b82, 50}, - {0x3b83, 51}, - {0x3b84, 52}, - {0x3b85, 53}, - {0x3b86, 54}, - {0x3b87, 55}, - {0x3b88, 56}, - {0x3b89, 57}, - {0x3b8a, 58}, - {0x3b8b, 59}, - {0x3b8c, 60}, - {0x3b8d, 61}, - {0x3b8e, 62}, - {0x3b8f, 63}, - {0x3b90, 64}, - {0x3b91, 65}, - {0x3b92, 66}, - {0x3b93, 67}, - {0x3b94, 68}, - {0x3b95, 69}, - {0x3b96, 70}, - {0x3b97, 71}, - {0x3b98, 72}, - {0x3b99, 73}, - {0x3b9a, 74}, - {0x3b9b, 75}, - {0x3b9c, 76}, - {0x3b9d, 77}, - {0x3b9e, 78}, - {0x3b9f, 79}, - {0x3ba0, 80}, - {0x3ba1, 81}, - {0x3ba2, 82}, - {0x3ba3, 83}, - {0x3ba4, 84}, - {0x3ba5, 85}, - {0x3ba6, 86}, - {0x3ba7, 87}, - {0x3ba8, 88}, - {0x3ba9, 89}, - {0x3baa, 90}, - {0x3bab, 91}, - {0x3bac, 92}, - {0x3bad, 93}, - {0x3bae, 94}, - {0x3baf, 95}, - {0x3bb0, 96}, - {0x3bb1, 97}, - {0x3bb2, 98}, - {0x3bb3, 99}, - {0x3bb4, 100}, - {0x3bb5, 101}, - {0x3bb6, 102}, - {0x3bb7, 103}, - {0x3bb8, 104}, - {0x3bb9, 105}, - {0x3bba, 106}, - {0x3bbb, 107}, - {0x3bbc, 108}, - {0x3bbd, 109}, - {0x3bbe, 110}, - {0x3bbf, 111}, - {0x3bc0, 112}, - {0x3bc1, 113}, - {0x3bc2, 114}, - {0x3bc3, 115}, - {0x3bc4, 116}, - {0x3bc5, 117}, - {0x3bc6, 118}, - {0x3bc7, 119}, - {0x3bc8, 120}, - {0x3bc9, 121}, - {0x3bca, 122}, - {0x3bcb, 123}, - {0x3bcc, 124}, - {0x3bcd, 125}, - {0x3bce, 126}, - {0x3bcf, 127}, - {0x3bd0, 128}, - {0x3bd1, 129}, - {0x3bd2, 130}, - {0x3bd3, 131}, - {0x3bd4, 132}, - {0x3bd5, 133}, - {0x3bd6, 134}, - {0x3bd7, 135}, - {0x3bd8, 136}, - {0x3bd9, 137}, - {0x3bda, 138}, - {0x3bdb, 139}, - {0x3bdc, 140}, - {0x3bdd, 141}, - {0x3bde, 142}, - {0x3bdf, 143}, - {0x3be0, 144}, - {0x3be1, 145}, - {0x3be2, 146}, - {0x3be3, 147}, - {0x3be4, 148}, - {0x3be5, 149}, - {0x3be6, 150}, - {0x3be7, 151}, - {0x3be8, 152}, - {0x3be9, 153}, - {0x3bea, 154}, - {0x3beb, 155}, - {0x3bec, 156}, - {0x3bed, 157}, - {0x3bee, 158}, - {0x3bef, 159}, - {0x3bf0, 160}, - {0x3bf1, 161}, - {0x3bf2, 162}, - {0x3bf3, 163}, - {0x3bf4, 164}, - {0x3bf5, 165}, - {0x3bf6, 166}, - {0x3bf7, 167}, - {0x3bf8, 168}, - {0x3bf9, 169}, - {0x3bfa, 170}, - {0x3bfb, 171}, - {0x3bfc, 172}, - {0x3bfd, 173}, - {0x3bfe, 174}, - {0x3bff, 175}, - {0x3c01, 0}, - {0x3c02, 1}, - {0x3c03, 2}, - {0x3c04, 3}, - {0x3c05, 4}, - {0x3c06, 5}, - {0x3c07, 6}, - {0x3c08, 7}, - {0x3c09, 8}, - {0x3c0a, 9}, - {0x3c0b, 10}, - {0x3c0c, 11}, - {0x3c0d, 12}, - {0x3c0e, 13}, - {0x3c0f, 14}, - {0x3c10, 15}, - {0x3c11, 16}, - {0x3c12, 17}, - {0x3c13, 18}, - {0x3c14, 19}, - {0x3c15, 20}, - {0x3c16, 21}, - {0x3c17, 22}, - {0x3c18, 23}, - {0x3c19, 24}, - {0x3c1a, 25}, - {0x3c1b, 26}, - {0x3c1c, 27}, - {0x3c1d, 28}, - {0x3c1e, 29}, - {0x3c1f, 30}, - {0x3c20, 31}, - {0x3c21, 32}, - {0x3c22, 33}, - {0x3c23, 34}, - {0x3c24, 35}, - {0x3c25, 36}, - {0x3c26, 37}, - {0x3c27, 38}, - {0x3c28, 39}, - {0x3c29, 40}, - {0x3c2a, 41}, - {0x3c2b, 42}, - {0x3c2c, 43}, - {0x3c2d, 44}, - {0x3c2e, 45}, - {0x3c2f, 46}, - {0x3c30, 47}, - {0x3c31, 48}, - {0x3c32, 49}, - {0x3c33, 50}, - {0x3c34, 51}, - {0x3c35, 52}, - {0x3c36, 53}, - {0x3c37, 54}, - {0x3c38, 55}, - {0x3c39, 56}, - {0x3c3a, 57}, - {0x3c3b, 58}, - {0x3c3c, 59}, - {0x3c3d, 60}, - {0x3c3e, 61}, - {0x3c3f, 62}, - {0x3c40, 63}, - {0x3c41, 64}, - {0x3c42, 65}, - {0x3c43, 66}, - {0x3c44, 67}, - {0x3c45, 68}, - {0x3c46, 69}, - {0x3c47, 70}, - {0x3c48, 71}, - {0x3c49, 72}, - {0x3c4a, 73}, - {0x3c4b, 74}, - {0x3c4c, 75}, - {0x3c4d, 76}, - {0x3c4e, 77}, - {0x3c4f, 78}, - {0x3c50, 79}, - {0x3c51, 80}, - {0x3c52, 81}, - {0x3c53, 82}, - {0x3c54, 83}, - {0x3c55, 84}, - {0x3c56, 85}, - {0x3c57, 86}, - {0x3c58, 87}, - {0x3c59, 88}, - {0x3c5a, 89}, - {0x3c5b, 90}, - {0x3c5c, 91}, - {0x3c5d, 92}, - {0x3c5e, 93}, - {0x3c5f, 94}, - {0x3c60, 95}, - {0x3c61, 96}, - {0x3c62, 97}, - {0x3c63, 98}, - {0x3c64, 99}, - {0x3c65, 100}, - {0x3c66, 101}, - {0x3c67, 102}, - {0x3c68, 103}, - {0x3c69, 104}, - {0x3c6a, 105}, - {0x3c6b, 106}, - {0x3c6c, 107}, - {0x3c6d, 108}, - {0x3c70, 0}, - {0x3c71, 1}, - {0x3c72, 2}, - {0x3c73, 3}, - {0x3c74, 4}, - {0x3c75, 5}, - {0x3c76, 6}, - {0x3c77, 7}, - {0x3c78, 8}, - {0x3c79, 9}, - {0x3c7a, 10}, - {0x3c7b, 11}, - {0x3c7c, 12}, - {0x3c7d, 13}, - {0x3c7e, 14}, - {0x3c7f, 15}, - {0x3c80, 16}, - {0x3c81, 17}, - {0x3c82, 18}, - {0x3c83, 19}, - {0x3c84, 20}, - {0x3c85, 21}, - {0x3c86, 22}, - {0x3c87, 23}, - {0x3c88, 24}, - {0x3c89, 25}, - {0x3c8a, 26}, - {0x3c8b, 27}, - {0x3c8c, 28}, - {0x3c8d, 29}, - {0x3c8e, 30}, - {0x3c8f, 31}, - {0x3c90, 32}, - {0x3c91, 33}, - {0x3c92, 34}, - {0x3c93, 35}, - {0x3c94, 36}, - {0x3c95, 37}, - {0x3c96, 38}, - {0x3c97, 39}, - {0x3c98, 40}, - {0x3c99, 41}, - {0x3c9a, 42}, - {0x3c9b, 43}, - {0x3c9c, 44}, - {0x3c9d, 45}, - {0x3c9e, 46}, - {0x3c9f, 47}, - {0x3ca0, 48}, - {0x3ca1, 49}, - {0x3ca2, 50}, - {0x3ca3, 51}, - {0x3ca4, 52}, - {0x3ca5, 53}, - {0x3ca6, 54}, - {0x3ca7, 55}, - {0x3ca8, 56}, - {0x3ca9, 57}, - {0x3caa, 58}, - {0x3cab, 59}, - {0x3cac, 60}, - {0x3cad, 61}, - {0x3cae, 62}, - {0x3caf, 63}, - {0x3cb0, 64}, - {0x3cb1, 65}, - {0x3cb2, 66}, - {0x3cb3, 67}, - {0x3cb4, 68}, - {0x3cb5, 69}, - {0x3cb6, 70}, - {0x3cb7, 71}, - {0x3cb8, 72}, - {0x3cb9, 73}, - {0x3cba, 74}, - {0x3cbb, 75}, - {0x3cbc, 76}, - {0x3cbd, 77}, - {0x3cbe, 78}, - {0x3cbf, 79}, - {0x3cc0, 80}, - {0x3cc1, 81}, - {0x3cc2, 82}, - {0x3cc3, 83}, - {0x3cc4, 84}, - {0x3cc5, 85}, - {0x3cc6, 86}, - {0x3cc7, 87}, - {0x3cc8, 88}, - {0x3cc9, 89}, - {0x3cca, 90}, - {0x3ccb, 91}, - {0x3ccc, 92}, - {0x3ccd, 93}, - {0x3cce, 94}, - {0x3ccf, 95}, - {0x3cd0, 96}, - {0x3cd1, 97}, - {0x3cd2, 98}, - {0x3cd3, 99}, - {0x3cd4, 100}, - {0x3cd5, 101}, - {0x3cd6, 102}, - {0x3cd7, 103}, - {0x3cd8, 104}, - {0x3cd9, 105}, - {0x3cda, 106}, - {0x3cdb, 107}, - {0x3cdc, 108}, - {0x3cdd, 109}, - {0x3cde, 110}, - {0x3cdf, 111}, - {0x3ce2, 0}, - {0x3ce3, 1}, - {0x3ce4, 2}, - {0x3ce5, 3}, - {0x3ce6, 4}, - {0x3ce7, 5}, - {0x3ce8, 6}, - {0x3ce9, 7}, - {0x3cea, 8}, - {0x3ceb, 9}, - {0x3cec, 10}, - {0x3ced, 11}, - {0x3cee, 12}, - {0x3cef, 13}, - {0x3cf0, 14}, - {0x3cf1, 15}, - {0x3cf2, 16}, - {0x3cf3, 17}, - {0x3cf4, 18}, - {0x3cf5, 19}, - {0x3cf6, 20}, - {0x3cf7, 21}, - {0x3cf8, 22}, - {0x3cf9, 23}, - {0x3cfa, 24}, - {0x3cfb, 25}, - {0x3cfc, 26}, - {0x3cfd, 27}, - {0x3cfe, 28}, - {0x3cff, 29}, - {0x3d01, 0}, - {0x3d02, 1}, - {0x3d03, 2}, - {0x3d04, 3}, - {0x3d05, 4}, - {0x3d06, 5}, - {0x3d07, 6}, - {0x3d08, 7}, - {0x3d09, 8}, - {0x3d0a, 9}, - {0x3d0b, 10}, - {0x3d0c, 11}, - {0x3d0d, 12}, - {0x3d0e, 13}, - {0x3d0f, 14}, - {0x3d10, 15}, - {0x3d11, 16}, - {0x3d12, 17}, - {0x3d13, 18}, - {0x3d14, 19}, - {0x3d15, 20}, - {0x3d16, 21}, - {0x3d17, 22}, - {0x3d18, 23}, - {0x3d19, 24}, - {0x3d1a, 25}, - {0x3d1b, 26}, - {0x3d1c, 27}, - {0x3d1d, 28}, - {0x3d1e, 29}, - {0x3d1f, 30}, - {0x3d20, 31}, - {0x3d21, 32}, - {0x3d22, 33}, - {0x3d23, 34}, - {0x3d24, 35}, - {0x3d25, 36}, - {0x3d26, 37}, - {0x3d27, 38}, - {0x3d28, 39}, - {0x3d29, 40}, - {0x3d2a, 41}, - {0x3d2b, 42}, - {0x3d2c, 43}, - {0x3d2d, 44}, - {0x3d2e, 45}, - {0x3d2f, 46}, - {0x3d30, 47}, - {0x3d31, 48}, - {0x3d32, 49}, - {0x3d33, 50}, - {0x3d34, 51}, - {0x3d35, 52}, - {0x3d36, 53}, - {0x3d37, 54}, - {0x3d38, 55}, - {0x3d39, 56}, - {0x3d3a, 57}, - {0x3d3b, 58}, - {0x3d3c, 59}, - {0x3d3d, 60}, - {0x3d3e, 61}, - {0x3d3f, 62}, - {0x3d40, 63}, - {0x3d41, 64}, - {0x3d42, 65}, - {0x3d43, 66}, - {0x3d44, 67}, - {0x3d45, 68}, - {0x3d46, 69}, - {0x3d47, 70}, - {0x3d48, 71}, - {0x3d49, 72}, - {0x3d4a, 73}, - {0x3d4b, 74}, - {0x3d4c, 75}, - {0x3d4d, 76}, - {0x3d4e, 77}, - {0x3d4f, 78}, - {0x3d50, 79}, - {0x3d51, 80}, - {0x3d52, 81}, - {0x3d53, 82}, - {0x3d54, 83}, - {0x3d55, 84}, - {0x3d56, 85}, - {0x3d57, 86}, - {0x3d58, 87}, - {0x3d59, 88}, - {0x3d5a, 89}, - {0x3d5b, 90}, - {0x3d5c, 91}, - {0x3d5d, 92}, - {0x3d5e, 93}, - {0x3d5f, 94}, - {0x3d60, 95}, - {0x3d61, 96}, - {0x3d62, 97}, - {0x3d63, 98}, - {0x3d64, 99}, - {0x3d65, 100}, - {0x3d66, 101}, - {0x3d67, 102}, - {0x3d68, 103}, - {0x3d69, 104}, - {0x3d6a, 105}, - {0x3d6b, 106}, - {0x3d6c, 107}, - {0x3d6d, 108}, - {0x3d6e, 109}, - {0x3d6f, 110}, - {0x3d70, 111}, - {0x3d71, 112}, - {0x3d72, 113}, - {0x3d73, 114}, - {0x3d74, 115}, - {0x3d75, 116}, - {0x3d76, 117}, - {0x3d77, 118}, - {0x3d78, 119}, - {0x3d79, 120}, - {0x3d7a, 121}, - {0x3d7b, 122}, - {0x3d7c, 123}, - {0x3d7d, 124}, - {0x3d7e, 125}, - {0x3d7f, 126}, - {0x3d80, 127}, - {0x3d81, 128}, - {0x3d82, 129}, - {0x3d83, 130}, - {0x3d84, 131}, - {0x3d85, 132}, - {0x3d86, 133}, - {0x3d87, 134}, - {0x3d88, 135}, - {0x3d89, 136}, - {0x3d8a, 137}, - {0x3d8b, 138}, - {0x3d8c, 139}, - {0x3d8d, 140}, - {0x3d8e, 141}, - {0x3d8f, 142}, - {0x3d90, 143}, - {0x3d91, 144}, - {0x3d92, 145}, - {0x3d93, 146}, - {0x3d94, 147}, - {0x3d95, 148}, - {0x3d96, 149}, - {0x3d97, 150}, - {0x3d98, 151}, - {0x3d99, 152}, - {0x3d9a, 153}, - {0x3d9b, 154}, - {0x3d9c, 155}, - {0x3d9d, 156}, - {0x3d9e, 157}, - {0x3d9f, 158}, - {0x3da0, 159}, - {0x3da1, 160}, - {0x3da2, 161}, - {0x3da3, 162}, - {0x3da4, 163}, - {0x3da5, 164}, - {0x3da6, 165}, - {0x3da7, 166}, - {0x3da8, 167}, - {0x3da9, 168}, - {0x3daa, 169}, - {0x3dab, 170}, - {0x3dac, 171}, - {0x3dad, 172}, - {0x3dae, 173}, - {0x3daf, 174}, - {0x3db0, 175}, - {0x3db1, 176}, - {0x3db2, 177}, - {0x3db3, 178}, - {0x3db4, 179}, - {0x3db5, 180}, - {0x3db6, 181}, - {0x3db7, 182}, - {0x3db8, 183}, - {0x3db9, 184}, - {0x3dba, 185}, - {0x3dbb, 186}, - {0x3dbc, 187}, - {0x3dbd, 188}, - {0x3dbe, 189}, - {0x3dbf, 190}, - {0x3dc0, 191}, - {0x3dc1, 192}, - {0x3dc2, 193}, - {0x3dc3, 194}, - {0x3dc4, 195}, - {0x3dc5, 196}, - {0x3dc6, 197}, - {0x3dc7, 198}, - {0x3dc8, 199}, - {0x3dc9, 200}, - {0x3dca, 201}, - {0x3dcb, 202}, - {0x3dcc, 203}, - {0x3dcd, 204}, - {0x3dce, 205}, - {0x3dcf, 206}, - {0x3dd0, 207}, - {0x3dd1, 208}, - {0x3dd2, 209}, - {0x3dd3, 210}, - {0x3dd4, 211}, - {0x3dd5, 212}, - {0x3dd6, 213}, - {0x3dd7, 214}, - {0x3dd8, 215}, - {0x3dd9, 216}, - {0x3dda, 217}, - {0x3ddb, 218}, - {0x3ddc, 219}, - {0x3ddd, 220}, - {0x3dde, 221}, - {0x3ddf, 222}, - {0x3de0, 223}, - {0x3de1, 224}, - {0x3de2, 225}, - {0x3de3, 226}, - {0x3de4, 227}, - {0x3de5, 228}, - {0x3de6, 229}, - {0x3de7, 230}, - {0x3de8, 231}, - {0x3de9, 232}, - {0x3dea, 233}, - {0x3deb, 234}, - {0x3dec, 235}, - {0x3ded, 236}, - {0x3dee, 237}, - {0x3def, 238}, - {0x3df0, 239}, - {0x3df1, 240}, - {0x3df2, 241}, - {0x3df3, 242}, - {0x3df4, 243}, - {0x3df5, 244}, - {0x3df6, 245}, - {0x3df7, 246}, - {0x3df8, 247}, - {0x3df9, 248}, - {0x3dfa, 249}, - {0x3dfb, 250}, - {0x3dfc, 251}, - {0x3dfd, 252}, - {0x3dfe, 253}, - {0x3dff, 254}, - {0x3e01, 0}, - {0x3e02, 1}, - {0x3e03, 2}, - {0x3e04, 3}, - {0x3e05, 4}, - {0x3e06, 5}, - {0x3e07, 6}, - {0x3e08, 7}, - {0x3e09, 8}, - {0x3e0a, 9}, - {0x3e0b, 10}, - {0x3e0c, 11}, - {0x3e0d, 12}, - {0x3e0e, 13}, - {0x3e0f, 14}, - {0x3e10, 15}, - {0x3e11, 16}, - {0x3e12, 17}, - {0x3e13, 18}, - {0x3e14, 19}, - {0x3e15, 20}, - {0x3e16, 21}, - {0x3e17, 22}, - {0x3e18, 23}, - {0x3e19, 24}, - {0x3e1a, 25}, - {0x3e1b, 26}, - {0x3e1c, 27}, - {0x3e1d, 28}, - {0x3e1e, 29}, - {0x3e1f, 30}, - {0x3e20, 31}, - {0x3e21, 32}, - {0x3e22, 33}, - {0x3e23, 34}, - {0x3e24, 35}, - {0x3e25, 36}, - {0x3e26, 37}, - {0x3e27, 38}, - {0x3e28, 39}, - {0x3e29, 40}, - {0x3e2a, 41}, - {0x3e2b, 42}, - {0x3e2c, 43}, - {0x3e2d, 44}, - {0x3e2e, 45}, - {0x3e2f, 46}, - {0x3e30, 47}, - {0x3e31, 48}, - {0x3e32, 49}, - {0x3e33, 50}, - {0x3e34, 51}, - {0x3e35, 52}, - {0x3e36, 53}, - {0x3e37, 54}, - {0x3e38, 55}, - {0x3e39, 56}, - {0x3e3a, 57}, - {0x3e3b, 58}, - {0x3e3c, 59}, - {0x3e3d, 60}, - {0x3e3e, 61}, - {0x3e3f, 62}, - {0x3e40, 63}, - {0x3e41, 64}, - {0x3e42, 65}, - {0x3e43, 66}, - {0x3e44, 67}, - {0x3e45, 68}, - {0x3e46, 69}, - {0x3e47, 70}, - {0x3e48, 71}, - {0x3e49, 72}, - {0x3e4a, 73}, - {0x3e4b, 74}, - {0x3e4c, 75}, - {0x3e4d, 76}, - {0x3e4e, 77}, - {0x3e4f, 78}, - {0x3e50, 79}, - {0x3e51, 80}, - {0x3e52, 81}, - {0x3e53, 82}, - {0x3e54, 83}, - {0x3e55, 84}, - {0x3e56, 85}, - {0x3e57, 86}, - {0x3e58, 87}, - {0x3e59, 88}, - {0x3e5a, 89}, - {0x3e5b, 90}, - {0x3e5c, 91}, - {0x3e5d, 92}, - {0x3e5e, 93}, - {0x3e5f, 94}, - {0x3e60, 95}, - {0x3e61, 96}, - {0x3e62, 97}, - {0x3e63, 98}, - {0x3e64, 99}, - {0x3e65, 100}, - {0x3e66, 101}, - {0x3e67, 102}, - {0x3e68, 103}, - {0x3e69, 104}, - {0x3e6a, 105}, - {0x3e6b, 106}, - {0x3e6c, 107}, - {0x3e6d, 108}, - {0x3e6e, 109}, - {0x3e6f, 110}, - {0x3e70, 111}, - {0x3e71, 112}, - {0x3e72, 113}, - {0x3e73, 114}, - {0x3e74, 115}, - {0x3e75, 116}, - {0x3e76, 117}, - {0x3e77, 118}, - {0x3e78, 119}, - {0x3e79, 120}, - {0x3e7a, 121}, - {0x3e7b, 122}, - {0x3e7c, 123}, - {0x3e7d, 124}, - {0x3e7e, 125}, - {0x3e7f, 126}, - {0x3e80, 127}, - {0x3e81, 128}, - {0x3e82, 129}, - {0x3e83, 130}, - {0x3e84, 131}, - {0x3e85, 132}, - {0x3e86, 133}, - {0x3e87, 134}, - {0x3e88, 135}, - {0x3e89, 136}, - {0x3e8a, 137}, - {0x3e8b, 138}, - {0x3e8c, 139}, - {0x3e8d, 140}, - {0x3e8e, 141}, - {0x3e8f, 142}, - {0x3e90, 143}, - {0x3e91, 144}, - {0x3e92, 145}, - {0x3e93, 146}, - {0x3e94, 147}, - {0x3e95, 148}, - {0x3e96, 149}, - {0x3e97, 150}, - {0x3e98, 151}, - {0x3e99, 152}, - {0x3e9a, 153}, - {0x3e9b, 154}, - {0x3e9c, 155}, - {0x3e9d, 156}, - {0x3e9e, 157}, - {0x3e9f, 158}, - {0x3ea0, 159}, - {0x3ea1, 160}, - {0x3ea2, 161}, - {0x3ea3, 162}, - {0x3ea4, 163}, - {0x3ea5, 164}, - {0x3ea6, 165}, - {0x3ea7, 166}, - {0x3ea8, 167}, - {0x3ea9, 168}, - {0x3eaa, 169}, - {0x3eab, 170}, - {0x3eac, 171}, - {0x3ead, 172}, - {0x3eae, 173}, - {0x3eaf, 174}, - {0x3eb0, 175}, - {0x3eb1, 176}, - {0x3eb2, 177}, - {0x3eb3, 178}, - {0x3eb4, 179}, - {0x3eb5, 180}, - {0x3eb6, 181}, - {0x3eb7, 182}, - {0x3eb8, 183}, - {0x3eb9, 184}, - {0x3eba, 185}, - {0x3ebb, 186}, - {0x3ebc, 187}, - {0x3ebd, 188}, - {0x3ebe, 189}, - {0x3ebf, 190}, - {0x3ec0, 191}, - {0x3ec1, 192}, - {0x3ec2, 193}, - {0x3ec3, 194}, - {0x3ec4, 195}, - {0x3ec5, 196}, - {0x3ec6, 197}, - {0x3ec7, 198}, - {0x3ec8, 199}, - {0x3ec9, 200}, - {0x3eca, 201}, - {0x3ecb, 202}, - {0x3ecc, 203}, - {0x3ecd, 204}, - {0x3ece, 205}, - {0x3ecf, 206}, - {0x3ed0, 207}, - {0x3ed1, 208}, - {0x3ed2, 209}, - {0x3ed3, 210}, - {0x3ed4, 211}, - {0x3ed5, 212}, - {0x3ed6, 213}, - {0x3ed7, 214}, - {0x3ed8, 215}, - {0x3ed9, 216}, - {0x3eda, 217}, - {0x3edb, 218}, - {0x3edc, 219}, - {0x3edd, 220}, - {0x3ede, 221}, - {0x3edf, 222}, - {0x3ee0, 223}, - {0x3ee1, 224}, - {0x3ee2, 225}, - {0x3ee3, 226}, - {0x3ee4, 227}, - {0x3ee5, 228}, - {0x3ee6, 229}, - {0x3ee7, 230}, - {0x3ee8, 231}, - {0x3ee9, 232}, - {0x3eea, 233}, - {0x3eeb, 234}, - {0x3eec, 235}, - {0x3eed, 236}, - {0x3eee, 237}, - {0x3eef, 238}, - {0x3ef0, 239}, - {0x3ef1, 240}, - {0x3ef2, 241}, - {0x3ef3, 242}, - {0x3ef4, 243}, - {0x3ef5, 244}, - {0x3ef6, 245}, - {0x3ef7, 246}, - {0x3ef8, 247}, - {0x3ef9, 248}, - {0x3efa, 249}, - {0x3efb, 250}, - {0x3efc, 251}, - {0x3efd, 252}, - {0x3efe, 253}, - {0x3eff, 254}, - {0x3f01, 0}, - {0x3f02, 1}, - {0x3f03, 2}, - {0x3f04, 3}, - {0x3f05, 4}, - {0x3f06, 5}, - {0x3f07, 6}, - {0x3f08, 7}, - {0x3f09, 8}, - {0x3f0a, 9}, - {0x3f0b, 10}, - {0x3f0c, 11}, - {0x3f0d, 12}, - {0x3f0e, 13}, - {0x3f0f, 14}, - {0x3f10, 15}, - {0x3f11, 16}, - {0x3f12, 17}, - {0x3f13, 18}, - {0x3f14, 19}, - {0x3f15, 20}, - {0x3f16, 21}, - {0x3f17, 22}, - {0x3f18, 23}, - {0x3f19, 24}, - {0x3f1a, 25}, - {0x3f1b, 26}, - {0x3f1c, 27}, - {0x3f1d, 28}, - {0x3f1e, 29}, - {0x3f1f, 30}, - {0x3f20, 31}, - {0x3f21, 32}, - {0x3f22, 33}, - {0x3f23, 34}, - {0x3f24, 35}, - {0x3f25, 36}, - {0x3f26, 37}, - {0x3f27, 38}, - {0x3f28, 39}, - {0x3f29, 40}, - {0x3f2a, 41}, - {0x3f2b, 42}, - {0x3f2c, 43}, - {0x3f2d, 44}, - {0x3f2e, 45}, - {0x3f2f, 46}, - {0x3f30, 47}, - {0x3f31, 48}, - {0x3f32, 49}, - {0x3f33, 50}, - {0x3f34, 51}, - {0x3f35, 52}, - {0x3f36, 53}, - {0x3f37, 54}, - {0x3f38, 55}, - {0x3f39, 56}, - {0x3f3a, 57}, - {0x3f3b, 58}, - {0x3f3c, 59}, - {0x3f3d, 60}, - {0x3f3e, 61}, - {0x3f3f, 62}, - {0x3f40, 63}, - {0x3f41, 64}, - {0x3f42, 65}, - {0x3f43, 66}, - {0x3f44, 67}, - {0x3f45, 68}, - {0x3f46, 69}, - {0x3f47, 70}, - {0x3f48, 71}, - {0x3f49, 72}, - {0x3f4a, 73}, - {0x3f4b, 74}, - {0x3f4c, 75}, - {0x3f4d, 76}, - {0x3f4e, 77}, - {0x3f4f, 78}, - {0x3f50, 79}, - {0x3f51, 80}, - {0x3f52, 81}, - {0x3f53, 82}, - {0x3f54, 83}, - {0x3f55, 84}, - {0x3f56, 85}, - {0x3f57, 86}, - {0x3f58, 87}, - {0x3f59, 88}, - {0x3f5a, 89}, - {0x3f5b, 90}, - {0x3f5c, 91}, - {0x3f5d, 92}, - {0x3f5e, 93}, - {0x3f5f, 94}, - {0x3f60, 95}, - {0x3f61, 96}, - {0x3f62, 97}, - {0x3f63, 98}, - {0x3f64, 99}, - {0x3f65, 100}, - {0x3f66, 101}, - {0x3f67, 102}, - {0x3f68, 103}, - {0x3f69, 104}, - {0x3f6a, 105}, - {0x3f6b, 106}, - {0x3f6c, 107}, - {0x3f6d, 108}, - {0x3f6e, 109}, - {0x3f6f, 110}, - {0x3f70, 111}, - {0x3f71, 112}, - {0x3f72, 113}, - {0x3f73, 114}, - {0x3f74, 115}, - {0x3f75, 116}, - {0x3f76, 117}, - {0x3f77, 118}, - {0x3f78, 119}, - {0x3f79, 120}, - {0x3f7a, 121}, - {0x3f7b, 122}, - {0x3f7c, 123}, - {0x3f7d, 124}, - {0x3f7e, 125}, - {0x3f7f, 126}, - {0x3f80, 127}, - {0x3f81, 128}, - {0x3f82, 129}, - {0x3f83, 130}, - {0x3f84, 131}, - {0x3f85, 132}, - {0x3f86, 133}, - {0x3f87, 134}, - {0x3f88, 135}, - {0x3f89, 136}, - {0x3f8a, 137}, - {0x3f8b, 138}, - {0x3f8c, 139}, - {0x3f8d, 140}, - {0x3f8e, 141}, - {0x3f8f, 142}, - {0x3f90, 143}, - {0x3f91, 144}, - {0x3f92, 145}, - {0x3f93, 146}, - {0x3f94, 147}, - {0x3f95, 148}, - {0x3f96, 149}, - {0x3f97, 150}, - {0x3f98, 151}, - {0x3f99, 152}, - {0x3f9a, 153}, - {0x3f9b, 154}, - {0x3f9c, 155}, - {0x3f9d, 156}, - {0x3f9e, 157}, - {0x3f9f, 158}, - {0x3fa0, 159}, - {0x3fa1, 160}, - {0x3fa2, 161}, - {0x3fa3, 162}, - {0x3fa4, 163}, - {0x3fa5, 164}, - {0x3fa6, 165}, - {0x3fa7, 166}, - {0x3fa8, 167}, - {0x3fa9, 168}, - {0x3faa, 169}, - {0x3fab, 170}, - {0x3fac, 171}, - {0x3fad, 172}, - {0x3fae, 173}, - {0x3faf, 174}, - {0x3fb0, 175}, - {0x3fb1, 176}, - {0x3fb2, 177}, - {0x3fb3, 178}, - {0x3fb4, 179}, - {0x3fb5, 180}, - {0x3fb6, 181}, - {0x3fb7, 182}, - {0x3fb8, 183}, - {0x3fb9, 184}, - {0x3fba, 185}, - {0x3fbb, 186}, - {0x3fbc, 187}, - {0x3fbd, 188}, - {0x3fbe, 189}, - {0x3fbf, 190}, - {0x3fc0, 191}, - {0x3fc1, 192}, - {0x3fc2, 193}, - {0x3fc3, 194}, - {0x3fc4, 195}, - {0x3fc5, 196}, - {0x3fc6, 197}, - {0x3fc7, 198}, - {0x3fc8, 199}, - {0x3fc9, 200}, - {0x3fca, 201}, - {0x3fcb, 202}, - {0x3fcc, 203}, - {0x3fcd, 204}, - {0x3fce, 205}, - {0x3fcf, 206}, - {0x3fd0, 207}, - {0x3fd1, 208}, - {0x3fd2, 209}, - {0x3fd3, 210}, - {0x3fd4, 211}, - {0x3fd5, 212}, - {0x3fd6, 213}, - {0x3fd7, 214}, - {0x3fd8, 215}, - {0x3fd9, 216}, - {0x3fda, 217}, - {0x3fdb, 218}, - {0x3fdc, 219}, - {0x3fdd, 220}, - {0x3fde, 221}, - {0x3fdf, 222}, - {0x3fe0, 223}, - {0x3fe1, 224}, - {0x3fe2, 225}, - {0x3fe3, 226}, - {0x3fe4, 227}, - {0x3fe5, 228}, - {0x3fe6, 229}, - {0x3fe7, 230}, - {0x3fe8, 231}, - {0x3fe9, 232}, - {0x3fea, 233}, - {0x3feb, 234}, - {0x3fec, 235}, - {0x3fed, 236}, - {0x3fee, 237}, - {0x3fef, 238}, - {0x3ff0, 239}, - {0x3ff1, 240}, - {0x3ff2, 241}, - {0x3ff3, 242}, - {0x3ff4, 243}, - {0x3ff5, 244}, - {0x3ff6, 245}, - {0x3ff7, 246}, - {0x3ff8, 247}, - {0x3ff9, 248}, - {0x3ffa, 249}, - {0x3ffb, 250}, - {0x3ffc, 251}, - {0x3ffd, 252}, - {0x3ffe, 253}, - {0x3fff, 254}, - {0x4001, 0}, - {0x4002, 1}, - {0x4003, 2}, - {0x4004, 3}, - {0x4005, 4}, - {0x4006, 5}, - {0x4007, 6}, - {0x4008, 7}, - {0x4009, 8}, - {0x400a, 9}, - {0x400b, 10}, - {0x400c, 11}, - {0x400d, 12}, - {0x400e, 13}, - {0x400f, 14}, - {0x4010, 15}, - {0x4011, 16}, - {0x4012, 17}, - {0x4013, 18}, - {0x4014, 19}, - {0x4015, 20}, - {0x4016, 21}, - {0x4017, 22}, - {0x4018, 23}, - {0x4019, 24}, - {0x401a, 25}, - {0x401b, 26}, - {0x401c, 27}, - {0x401d, 28}, - {0x401e, 29}, - {0x401f, 30}, - {0x4020, 31}, - {0x4021, 32}, - {0x4022, 33}, - {0x4023, 34}, - {0x4024, 35}, - {0x4025, 36}, - {0x4026, 37}, - {0x4027, 38}, - {0x4028, 39}, - {0x4029, 40}, - {0x402a, 41}, - {0x402b, 42}, - {0x402c, 43}, - {0x402d, 44}, - {0x402e, 45}, - {0x402f, 46}, - {0x4030, 47}, - {0x4031, 48}, - {0x4032, 49}, - {0x4033, 50}, - {0x4034, 51}, - {0x4035, 52}, - {0x4036, 53}, - {0x4037, 54}, - {0x4038, 55}, - {0x4039, 56}, - {0x403a, 57}, - {0x403b, 58}, - {0x403c, 59}, - {0x403d, 60}, - {0x403e, 61}, - {0x403f, 62}, - {0x4040, 63}, - {0x4041, 64}, - {0x4042, 65}, - {0x4043, 66}, - {0x4044, 67}, - {0x4045, 68}, - {0x4046, 69}, - {0x4047, 70}, - {0x4048, 71}, - {0x4049, 72}, - {0x404a, 73}, - {0x404b, 74}, - {0x404c, 75}, - {0x404d, 76}, - {0x404e, 77}, - {0x404f, 78}, - {0x4050, 79}, - {0x4051, 80}, - {0x4052, 81}, - {0x4053, 82}, - {0x4054, 83}, - {0x4055, 84}, - {0x4058, 0}, - {0x4059, 1}, - {0x405a, 2}, - {0x405b, 3}, - {0x405c, 4}, - {0x405d, 5}, - {0x405e, 6}, - {0x405f, 7}, - {0x4060, 8}, - {0x4061, 9}, - {0x4062, 10}, - {0x4063, 11}, - {0x4064, 12}, - {0x4065, 13}, - {0x4066, 14}, - {0x4067, 15}, - {0x4068, 16}, - {0x4069, 17}, - {0x406a, 18}, - {0x406b, 19}, - {0x406c, 20}, - {0x406d, 21}, - {0x406e, 22}, - {0x406f, 23}, - {0x4070, 24}, - {0x4071, 25}, - {0x4072, 26}, - {0x4073, 27}, - {0x4074, 28}, - {0x4075, 29}, - {0x4076, 30}, - {0x4077, 31}, - {0x4078, 32}, - {0x4079, 33}, - {0x407a, 34}, - {0x407b, 35}, - {0x407c, 36}, - {0x407d, 37}, - {0x407e, 38}, - {0x407f, 39}, - {0x4080, 40}, - {0x4081, 41}, - {0x4082, 42}, - {0x4083, 43}, - {0x4084, 44}, - {0x4085, 45}, - {0x4086, 46}, - {0x4087, 47}, - {0x4088, 48}, - {0x4089, 49}, - {0x408a, 50}, - {0x408b, 51}, - {0x408c, 52}, - {0x408d, 53}, - {0x408e, 54}, - {0x408f, 55}, - {0x4090, 56}, - {0x4091, 57}, - {0x4092, 58}, - {0x4093, 59}, - {0x4094, 60}, - {0x4095, 61}, - {0x4096, 62}, - {0x4097, 63}, - {0x4098, 64}, - {0x4099, 65}, - {0x409a, 66}, - {0x409b, 67}, - {0x409c, 68}, - {0x409d, 69}, - {0x409e, 70}, - {0x409f, 71}, - {0x40a0, 72}, - {0x40a1, 73}, - {0x40a2, 74}, - {0x40a3, 75}, - {0x40a4, 76}, - {0x40a5, 77}, - {0x40a6, 78}, - {0x40a7, 79}, - {0x40a8, 80}, - {0x40a9, 81}, - {0x40aa, 82}, - {0x40ab, 83}, - {0x40ac, 84}, - {0x40ad, 85}, - {0x40ae, 86}, - {0x40af, 87}, - {0x40b0, 88}, - {0x40b1, 89}, - {0x40b2, 90}, - {0x40b3, 91}, - {0x40b4, 92}, - {0x40b5, 93}, - {0x40b6, 94}, - {0x40b7, 95}, - {0x40b8, 96}, - {0x40b9, 97}, - {0x40ba, 98}, - {0x40bb, 99}, - {0x40bc, 100}, - {0x40bd, 101}, - {0x40be, 102}, - {0x40bf, 103}, - {0x40c0, 104}, - {0x40c1, 105}, - {0x40c2, 106}, - {0x40c3, 107}, - {0x40c4, 108}, - {0x40c5, 109}, - {0x40c6, 110}, - {0x40c7, 111}, - {0x40c8, 112}, - {0x40c9, 113}, - {0x40ca, 114}, - {0x40cb, 115}, - {0x40cc, 116}, - {0x40cd, 117}, - {0x40ce, 118}, - {0x40cf, 119}, - {0x40d0, 120}, - {0x40d1, 121}, - {0x40d2, 122}, - {0x40d3, 123}, - {0x40d4, 124}, - {0x40d5, 125}, - {0x40d6, 126}, - {0x40d7, 127}, - {0x40d8, 128}, - {0x40d9, 129}, - {0x40da, 130}, - {0x40db, 131}, - {0x40dc, 132}, - {0x40dd, 133}, - {0x40de, 134}, - {0x40df, 135}, - {0x40e0, 136}, - {0x40e1, 137}, - {0x40e2, 138}, - {0x40e3, 139}, - {0x40e4, 140}, - {0x40e5, 141}, - {0x40e6, 142}, - {0x40e7, 143}, - {0x40e8, 144}, - {0x40e9, 145}, - {0x40ea, 146}, - {0x40eb, 147}, - {0x40ec, 148}, - {0x40ed, 149}, - {0x40ee, 150}, - {0x40ef, 151}, - {0x40f0, 152}, - {0x40f1, 153}, - {0x40f2, 154}, - {0x40f3, 155}, - {0x40f4, 156}, - {0x40f5, 157}, - {0x40f6, 158}, - {0x40f7, 159}, - {0x40f8, 160}, - {0x40f9, 161}, - {0x40fa, 162}, - {0x40fb, 163}, - {0x40fc, 164}, - {0x40fd, 165}, - {0x40fe, 166}, - {0x40ff, 167}, - {0x4101, 0}, - {0x4102, 1}, - {0x4103, 2}, - {0x4104, 3}, - {0x4105, 4}, - {0x4106, 5}, - {0x4107, 6}, - {0x4108, 7}, - {0x4109, 8}, - {0x410a, 9}, - {0x410b, 10}, - {0x410c, 11}, - {0x410d, 12}, - {0x410e, 13}, - {0x410f, 14}, - {0x4110, 15}, - {0x4111, 16}, - {0x4112, 17}, - {0x4113, 18}, - {0x4114, 19}, - {0x4115, 20}, - {0x4116, 21}, - {0x4117, 22}, - {0x4118, 23}, - {0x4119, 24}, - {0x411a, 25}, - {0x411b, 26}, - {0x411c, 27}, - {0x411d, 28}, - {0x411e, 29}, - {0x411f, 30}, - {0x4120, 31}, - {0x4121, 32}, - {0x4122, 33}, - {0x4123, 34}, - {0x4124, 35}, - {0x4125, 36}, - {0x4126, 37}, - {0x4127, 38}, - {0x4128, 39}, - {0x4129, 40}, - {0x412a, 41}, - {0x412b, 42}, - {0x412c, 43}, - {0x412d, 44}, - {0x412e, 45}, - {0x412f, 46}, - {0x4130, 47}, - {0x4131, 48}, - {0x4132, 49}, - {0x4133, 50}, - {0x4134, 51}, - {0x4135, 52}, - {0x4136, 53}, - {0x4137, 54}, - {0x4138, 55}, - {0x4139, 56}, - {0x413a, 57}, - {0x413b, 58}, - {0x413c, 59}, - {0x413d, 60}, - {0x413e, 61}, - {0x413f, 62}, - {0x4140, 63}, - {0x4141, 64}, - {0x4142, 65}, - {0x4143, 66}, - {0x4144, 67}, - {0x4145, 68}, - {0x4146, 69}, - {0x4147, 70}, - {0x4148, 71}, - {0x4149, 72}, - {0x414a, 73}, - {0x414b, 74}, - {0x414c, 75}, - {0x414d, 76}, - {0x414e, 77}, - {0x414f, 78}, - {0x4150, 79}, - {0x4151, 80}, - {0x4152, 81}, - {0x4153, 82}, - {0x4154, 83}, - {0x4155, 84}, - {0x4156, 85}, - {0x4157, 86}, - {0x4158, 87}, - {0x4159, 88}, - {0x415a, 89}, - {0x415b, 90}, - {0x415c, 91}, - {0x415d, 92}, - {0x415e, 93}, - {0x4161, 0}, - {0x4162, 1}, - {0x4163, 2}, - {0x4164, 3}, - {0x4165, 4}, - {0x4166, 5}, - {0x4167, 6}, - {0x4168, 7}, - {0x4169, 8}, - {0x416a, 9}, - {0x416b, 10}, - {0x416c, 11}, - {0x416d, 12}, - {0x416e, 13}, - {0x416f, 14}, - {0x4170, 15}, - {0x4171, 16}, - {0x4172, 17}, - {0x4173, 18}, - {0x4174, 19}, - {0x4175, 20}, - {0x4176, 21}, - {0x4177, 22}, - {0x4178, 23}, - {0x4179, 24}, - {0x417a, 25}, - {0x417b, 26}, - {0x417c, 27}, - {0x417d, 28}, - {0x417e, 29}, - {0x417f, 30}, - {0x4180, 31}, - {0x4181, 32}, - {0x4182, 33}, - {0x4183, 34}, - {0x4184, 35}, - {0x4185, 36}, - {0x4186, 37}, - {0x4187, 38}, - {0x4188, 39}, - {0x4189, 40}, - {0x418a, 41}, - {0x418b, 42}, - {0x418c, 43}, - {0x418d, 44}, - {0x418e, 45}, - {0x418f, 46}, - {0x4190, 47}, - {0x4191, 48}, - {0x4192, 49}, - {0x4193, 50}, - {0x4194, 51}, - {0x4195, 52}, - {0x4196, 53}, - {0x4197, 54}, - {0x4198, 55}, - {0x4199, 56}, - {0x419a, 57}, - {0x419b, 58}, - {0x419c, 59}, - {0x419d, 60}, - {0x419e, 61}, - {0x419f, 62}, - {0x41a0, 63}, - {0x41a1, 64}, - {0x41a2, 65}, - {0x41a3, 66}, - {0x41a4, 67}, - {0x41a5, 68}, - {0x41a6, 69}, - {0x41a7, 70}, - {0x41a8, 71}, - {0x41a9, 72}, - {0x41aa, 73}, - {0x41ab, 74}, - {0x41ac, 75}, - {0x41ad, 76}, - {0x41ae, 77}, - {0x41af, 78}, - {0x41b0, 79}, - {0x41b1, 80}, - {0x41b2, 81}, - {0x41b3, 82}, - {0x41b4, 83}, - {0x41b5, 84}, - {0x41b6, 85}, - {0x41b7, 86}, - {0x41b8, 87}, - {0x41b9, 88}, - {0x41ba, 89}, - {0x41bb, 90}, - {0x41bc, 91}, - {0x41bd, 92}, - {0x41be, 93}, - {0x41bf, 94}, - {0x41c0, 95}, - {0x41c1, 96}, - {0x41c2, 97}, - {0x41c3, 98}, - {0x41c4, 99}, - {0x41c5, 100}, - {0x41c6, 101}, - {0x41c7, 102}, - {0x41c8, 103}, - {0x41c9, 104}, - {0x41ca, 105}, - {0x41cb, 106}, - {0x41cc, 107}, - {0x41cd, 108}, - {0x41ce, 109}, - {0x41cf, 110}, - {0x41d0, 111}, - {0x41d1, 112}, - {0x41d2, 113}, - {0x41d3, 114}, - {0x41d4, 115}, - {0x41d5, 116}, - {0x41d6, 117}, - {0x41d7, 118}, - {0x41d8, 119}, - {0x41d9, 120}, - {0x41da, 121}, - {0x41db, 122}, - {0x41dc, 123}, - {0x41dd, 124}, - {0x41de, 125}, - {0x41df, 126}, - {0x41e0, 127}, - {0x41e1, 128}, - {0x41e2, 129}, - {0x41e3, 130}, - {0x41e4, 131}, - {0x41e5, 132}, - {0x41e6, 133}, - {0x41e7, 134}, - {0x41e8, 135}, - {0x41e9, 136}, - {0x41ea, 137}, - {0x41eb, 138}, - {0x41ec, 139}, - {0x41ed, 140}, - {0x41ee, 141}, - {0x41ef, 142}, - {0x41f0, 143}, - {0x41f1, 144}, - {0x41f2, 145}, - {0x41f3, 146}, - {0x41f4, 147}, - {0x41f5, 148}, - {0x41f6, 149}, - {0x41f7, 150}, - {0x41f8, 151}, - {0x41f9, 152}, - {0x41fa, 153}, - {0x41fb, 154}, - {0x41fc, 155}, - {0x41fd, 156}, - {0x41fe, 157}, - {0x41ff, 158}, - {0x4201, 0}, - {0x4202, 1}, - {0x4203, 2}, - {0x4204, 3}, - {0x4205, 4}, - {0x4206, 5}, - {0x4207, 6}, - {0x4208, 7}, - {0x4209, 8}, - {0x420a, 9}, - {0x420b, 10}, - {0x420c, 11}, - {0x420d, 12}, - {0x420e, 13}, - {0x420f, 14}, - {0x4210, 15}, - {0x4211, 16}, - {0x4212, 17}, - {0x4213, 18}, - {0x4214, 19}, - {0x4215, 20}, - {0x4216, 21}, - {0x4217, 22}, - {0x4218, 23}, - {0x4219, 24}, - {0x421a, 25}, - {0x421b, 26}, - {0x421c, 27}, - {0x421d, 28}, - {0x421e, 29}, - {0x421f, 30}, - {0x4220, 31}, - {0x4221, 32}, - {0x4222, 33}, - {0x4223, 34}, - {0x4224, 35}, - {0x4225, 36}, - {0x4226, 37}, - {0x4227, 38}, - {0x4228, 39}, - {0x4229, 40}, - {0x422a, 41}, - {0x422b, 42}, - {0x422c, 43}, - {0x422d, 44}, - {0x422e, 45}, - {0x422f, 46}, - {0x4230, 47}, - {0x4231, 48}, - {0x4232, 49}, - {0x4233, 50}, - {0x4234, 51}, - {0x4235, 52}, - {0x4236, 53}, - {0x4237, 54}, - {0x4238, 55}, - {0x4239, 56}, - {0x423a, 57}, - {0x423b, 58}, - {0x423c, 59}, - {0x423d, 60}, - {0x423e, 61}, - {0x423f, 62}, - {0x4240, 63}, - {0x4241, 64}, - {0x4242, 65}, - {0x4243, 66}, - {0x4244, 67}, - {0x4245, 68}, - {0x4246, 69}, - {0x4247, 70}, - {0x4248, 71}, - {0x4249, 72}, - {0x424a, 73}, - {0x424b, 74}, - {0x424c, 75}, - {0x424d, 76}, - {0x424e, 77}, - {0x424f, 78}, - {0x4250, 79}, - {0x4251, 80}, - {0x4252, 81}, - {0x4253, 82}, - {0x4254, 83}, - {0x4255, 84}, - {0x4256, 85}, - {0x4257, 86}, - {0x4258, 87}, - {0x4259, 88}, - {0x425a, 89}, - {0x425b, 90}, - {0x425c, 91}, - {0x425d, 92}, - {0x425e, 93}, - {0x425f, 94}, - {0x4260, 95}, - {0x4261, 96}, - {0x4262, 97}, - {0x4263, 98}, - {0x4264, 99}, - {0x4265, 100}, - {0x4266, 101}, - {0x4267, 102}, - {0x4268, 103}, - {0x4269, 104}, - {0x426a, 105}, - {0x426b, 106}, - {0x426c, 107}, - {0x426d, 108}, - {0x426e, 109}, - {0x426f, 110}, - {0x4270, 111}, - {0x4271, 112}, - {0x4272, 113}, - {0x4273, 114}, - {0x4274, 115}, - {0x4275, 116}, - {0x4276, 117}, - {0x4277, 118}, - {0x4278, 119}, - {0x4279, 120}, - {0x427a, 121}, - {0x427b, 122}, - {0x427c, 123}, - {0x427d, 124}, - {0x427e, 125}, - {0x427f, 126}, - {0x4280, 127}, - {0x4281, 128}, - {0x4282, 129}, - {0x4283, 130}, - {0x4284, 131}, - {0x4285, 132}, - {0x4286, 133}, - {0x4287, 134}, - {0x4288, 135}, - {0x4289, 136}, - {0x428a, 137}, - {0x428b, 138}, - {0x428c, 139}, - {0x428d, 140}, - {0x428e, 141}, - {0x428f, 142}, - {0x4290, 143}, - {0x4291, 144}, - {0x4292, 145}, - {0x4293, 146}, - {0x4294, 147}, - {0x4295, 148}, - {0x4296, 149}, - {0x4297, 150}, - {0x4298, 151}, - {0x4299, 152}, - {0x429a, 153}, - {0x429b, 154}, - {0x429c, 155}, - {0x429d, 156}, - {0x429e, 157}, - {0x429f, 158}, - {0x42a0, 159}, - {0x42a1, 160}, - {0x42a2, 161}, - {0x42a3, 162}, - {0x42a4, 163}, - {0x42a5, 164}, - {0x42a6, 165}, - {0x42a7, 166}, - {0x42a8, 167}, - {0x42a9, 168}, - {0x42aa, 169}, - {0x42ab, 170}, - {0x42ac, 171}, - {0x42ad, 172}, - {0x42ae, 173}, - {0x42af, 174}, - {0x42b0, 175}, - {0x42b1, 176}, - {0x42b2, 177}, - {0x42b3, 178}, - {0x42b4, 179}, - {0x42b5, 180}, - {0x42b6, 181}, - {0x42b7, 182}, - {0x42b8, 183}, - {0x42b9, 184}, - {0x42ba, 185}, - {0x42bb, 186}, - {0x42bc, 187}, - {0x42bd, 188}, - {0x42be, 189}, - {0x42bf, 190}, - {0x42c0, 191}, - {0x42c1, 192}, - {0x42c2, 193}, - {0x42c3, 194}, - {0x42c4, 195}, - {0x42c5, 196}, - {0x42c6, 197}, - {0x42c7, 198}, - {0x42c8, 199}, - {0x42c9, 200}, - {0x42ca, 201}, - {0x42cb, 202}, - {0x42cc, 203}, - {0x42cd, 204}, - {0x42ce, 205}, - {0x42cf, 206}, - {0x42d0, 207}, - {0x42d1, 208}, - {0x42d2, 209}, - {0x42d3, 210}, - {0x42d4, 211}, - {0x42d5, 212}, - {0x42d6, 213}, - {0x42d7, 214}, - {0x42d8, 215}, - {0x42d9, 216}, - {0x42da, 217}, - {0x42db, 218}, - {0x42dc, 219}, - {0x42dd, 220}, - {0x42de, 221}, - {0x42df, 222}, - {0x42e0, 223}, - {0x42e1, 224}, - {0x42e2, 225}, - {0x42e3, 226}, - {0x42e4, 227}, - {0x42e5, 228}, - {0x42e6, 229}, - {0x42e7, 230}, - {0x42e8, 231}, - {0x42e9, 232}, - {0x42ea, 233}, - {0x42eb, 234}, - {0x42ec, 235}, - {0x42ed, 236}, - {0x42ee, 237}, - {0x42ef, 238}, - {0x42f0, 239}, - {0x42f1, 240}, - {0x42f2, 241}, - {0x42f3, 242}, - {0x42f4, 243}, - {0x42f5, 244}, - {0x42f6, 245}, - {0x42f7, 246}, - {0x42f8, 247}, - {0x42f9, 248}, - {0x42fa, 249}, - {0x42fb, 250}, - {0x42fc, 251}, - {0x42fd, 252}, - {0x42fe, 253}, - {0x42ff, 254}, - {0x4301, 0}, - {0x4302, 1}, - {0x4303, 2}, - {0x4304, 3}, - {0x4305, 4}, - {0x4306, 5}, - {0x4307, 6}, - {0x4308, 7}, - {0x4309, 8}, - {0x430a, 9}, - {0x430b, 10}, - {0x430c, 11}, - {0x430d, 12}, - {0x430e, 13}, - {0x430f, 14}, - {0x4310, 15}, - {0x4311, 16}, - {0x4312, 17}, - {0x4313, 18}, - {0x4314, 19}, - {0x4315, 20}, - {0x4316, 21}, - {0x4317, 22}, - {0x4318, 23}, - {0x4319, 24}, - {0x431a, 25}, - {0x431b, 26}, - {0x431c, 27}, - {0x431d, 28}, - {0x431e, 29}, - {0x431f, 30}, - {0x4320, 31}, - {0x4321, 32}, - {0x4322, 33}, - {0x4323, 34}, - {0x4324, 35}, - {0x4325, 36}, - {0x4326, 37}, - {0x4327, 38}, - {0x4328, 39}, - {0x4329, 40}, - {0x432a, 41}, - {0x432b, 42}, - {0x432c, 43}, - {0x432d, 44}, - {0x432e, 45}, - {0x432f, 46}, - {0x4330, 47}, - {0x4331, 48}, - {0x4332, 49}, - {0x4333, 50}, - {0x4334, 51}, - {0x4335, 52}, - {0x4336, 53}, - {0x4339, 0}, - {0x433a, 1}, - {0x433b, 2}, - {0x433c, 3}, - {0x433d, 4}, - {0x433e, 5}, - {0x433f, 6}, - {0x4340, 7}, - {0x4341, 8}, - {0x4342, 9}, - {0x4343, 10}, - {0x4344, 11}, - {0x4345, 12}, - {0x4346, 13}, - {0x4347, 14}, - {0x4348, 15}, - {0x4349, 16}, - {0x434a, 17}, - {0x434b, 18}, - {0x434c, 19}, - {0x434d, 20}, - {0x434e, 21}, - {0x434f, 22}, - {0x4350, 23}, - {0x4351, 24}, - {0x4352, 25}, - {0x4353, 26}, - {0x4354, 27}, - {0x4355, 28}, - {0x4356, 29}, - {0x4357, 30}, - {0x4358, 31}, - {0x4359, 32}, - {0x435a, 33}, - {0x435b, 34}, - {0x435c, 35}, - {0x435d, 36}, - {0x435e, 37}, - {0x435f, 38}, - {0x4360, 39}, - {0x4361, 40}, - {0x4362, 41}, - {0x4363, 42}, - {0x4364, 43}, - {0x4365, 44}, - {0x4366, 45}, - {0x4367, 46}, - {0x4368, 47}, - {0x4369, 48}, - {0x436a, 49}, - {0x436b, 50}, - {0x436c, 51}, - {0x436d, 52}, - {0x436e, 53}, - {0x436f, 54}, - {0x4370, 55}, - {0x4371, 56}, - {0x4372, 57}, - {0x4373, 58}, - {0x4374, 59}, - {0x4375, 60}, - {0x4376, 61}, - {0x4377, 62}, - {0x4378, 63}, - {0x4379, 64}, - {0x437a, 65}, - {0x437b, 66}, - {0x437c, 67}, - {0x437d, 68}, - {0x437e, 69}, - {0x437f, 70}, - {0x4380, 71}, - {0x4381, 72}, - {0x4382, 73}, - {0x4383, 74}, - {0x4384, 75}, - {0x4385, 76}, - {0x4386, 77}, - {0x4387, 78}, - {0x4388, 79}, - {0x4389, 80}, - {0x438a, 81}, - {0x438b, 82}, - {0x438c, 83}, - {0x438d, 84}, - {0x438e, 85}, - {0x438f, 86}, - {0x4390, 87}, - {0x4391, 88}, - {0x4392, 89}, - {0x4393, 90}, - {0x4394, 91}, - {0x4395, 92}, - {0x4396, 93}, - {0x4397, 94}, - {0x4398, 95}, - {0x4399, 96}, - {0x439a, 97}, - {0x439b, 98}, - {0x439c, 99}, - {0x439d, 100}, - {0x439e, 101}, - {0x439f, 102}, - {0x43a0, 103}, - {0x43a1, 104}, - {0x43a2, 105}, - {0x43a3, 106}, - {0x43a4, 107}, - {0x43a5, 108}, - {0x43a6, 109}, - {0x43a7, 110}, - {0x43a8, 111}, - {0x43a9, 112}, - {0x43aa, 113}, - {0x43ab, 114}, - {0x43ae, 0}, - {0x43af, 1}, - {0x43b0, 2}, - {0x43b3, 0}, - {0x43b4, 1}, - {0x43b5, 2}, - {0x43b6, 3}, - {0x43b7, 4}, - {0x43b8, 5}, - {0x43b9, 6}, - {0x43ba, 7}, - {0x43bb, 8}, - {0x43bc, 9}, - {0x43bd, 10}, - {0x43be, 11}, - {0x43bf, 12}, - {0x43c0, 13}, - {0x43c1, 14}, - {0x43c2, 15}, - {0x43c3, 16}, - {0x43c4, 17}, - {0x43c5, 18}, - {0x43c6, 19}, - {0x43c7, 20}, - {0x43c8, 21}, - {0x43c9, 22}, - {0x43ca, 23}, - {0x43cb, 24}, - {0x43cc, 25}, - {0x43cd, 26}, - {0x43ce, 27}, - {0x43cf, 28}, - {0x43d0, 29}, - {0x43d1, 30}, - {0x43d2, 31}, - {0x43d3, 32}, - {0x43d4, 33}, - {0x43d5, 34}, - {0x43d6, 35}, - {0x43d7, 36}, - {0x43d8, 37}, - {0x43d9, 38}, - {0x43da, 39}, - {0x43db, 40}, - {0x43dc, 41}, - {0x43df, 0}, - {0x43e0, 1}, - {0x43e1, 2}, - {0x43e2, 3}, - {0x43e3, 4}, - {0x43e4, 5}, - {0x43e5, 6}, - {0x43e6, 7}, - {0x43e7, 8}, - {0x43e8, 9}, - {0x43e9, 10}, - {0x43ea, 11}, - {0x43eb, 12}, - {0x43ec, 13}, - {0x43ed, 14}, - {0x43ee, 15}, - {0x43ef, 16}, - {0x43f0, 17}, - {0x43f1, 18}, - {0x43f2, 19}, - {0x43f3, 20}, - {0x43f4, 21}, - {0x43f5, 22}, - {0x43f6, 23}, - {0x43f7, 24}, - {0x43f8, 25}, - {0x43f9, 26}, - {0x43fa, 27}, - {0x43fb, 28}, - {0x43fc, 29}, - {0x43fd, 30}, - {0x43fe, 31}, - {0x43ff, 32}, - {0x4401, 0}, - {0x4402, 1}, - {0x4403, 2}, - {0x4404, 3}, - {0x4405, 4}, - {0x4406, 5}, - {0x4407, 6}, - {0x4408, 7}, - {0x4409, 8}, - {0x440a, 9}, - {0x440b, 10}, - {0x440c, 11}, - {0x440d, 12}, - {0x440e, 13}, - {0x440f, 14}, - {0x4410, 15}, - {0x4411, 16}, - {0x4412, 17}, - {0x4413, 18}, - {0x4414, 19}, - {0x4415, 20}, - {0x4416, 21}, - {0x4417, 22}, - {0x4418, 23}, - {0x4419, 24}, - {0x441a, 25}, - {0x441b, 26}, - {0x441c, 27}, - {0x441d, 28}, - {0x441e, 29}, - {0x441f, 30}, - {0x4420, 31}, - {0x4421, 32}, - {0x4422, 33}, - {0x4423, 34}, - {0x4424, 35}, - {0x4425, 36}, - {0x4426, 37}, - {0x4427, 38}, - {0x4428, 39}, - {0x4429, 40}, - {0x442a, 41}, - {0x442b, 42}, - {0x442c, 43}, - {0x442d, 44}, - {0x442e, 45}, - {0x442f, 46}, - {0x4430, 47}, - {0x4431, 48}, - {0x4432, 49}, - {0x4433, 50}, - {0x4434, 51}, - {0x4435, 52}, - {0x4436, 53}, - {0x4437, 54}, - {0x4438, 55}, - {0x4439, 56}, - {0x443a, 57}, - {0x443b, 58}, - {0x443c, 59}, - {0x443d, 60}, - {0x443e, 61}, - {0x443f, 62}, - {0x4440, 63}, - {0x4441, 64}, - {0x4442, 65}, - {0x4443, 66}, - {0x4444, 67}, - {0x4445, 68}, - {0x4446, 69}, - {0x4447, 70}, - {0x4448, 71}, - {0x4449, 72}, - {0x444a, 73}, - {0x444b, 74}, - {0x444c, 75}, - {0x444d, 76}, - {0x444e, 77}, - {0x444f, 78}, - {0x4450, 79}, - {0x4451, 80}, - {0x4452, 81}, - {0x4453, 82}, - {0x4454, 83}, - {0x4455, 84}, - {0x4456, 85}, - {0x4457, 86}, - {0x4458, 87}, - {0x4459, 88}, - {0x445a, 89}, - {0x445b, 90}, - {0x445c, 91}, - {0x445d, 92}, - {0x445e, 93}, - {0x445f, 94}, - {0x4460, 95}, - {0x4461, 96}, - {0x4462, 97}, - {0x4463, 98}, - {0x4464, 99}, - {0x4465, 100}, - {0x4466, 101}, - {0x4467, 102}, - {0x4468, 103}, - {0x4469, 104}, - {0x446a, 105}, - {0x446b, 106}, - {0x446c, 107}, - {0x446d, 108}, - {0x446e, 109}, - {0x446f, 110}, - {0x4470, 111}, - {0x4471, 112}, - {0x4472, 113}, - {0x4473, 114}, - {0x4474, 115}, - {0x4475, 116}, - {0x4476, 117}, - {0x4477, 118}, - {0x4478, 119}, - {0x4479, 120}, - {0x447a, 121}, - {0x447b, 122}, - {0x447c, 123}, - {0x447d, 124}, - {0x447e, 125}, - {0x447f, 126}, - {0x4480, 127}, - {0x4481, 128}, - {0x4482, 129}, - {0x4483, 130}, - {0x4484, 131}, - {0x4485, 132}, - {0x4486, 133}, - {0x4487, 134}, - {0x4488, 135}, - {0x4489, 136}, - {0x448a, 137}, - {0x448b, 138}, - {0x448c, 139}, - {0x448d, 140}, - {0x448e, 141}, - {0x448f, 142}, - {0x4490, 143}, - {0x4491, 144}, - {0x4492, 145}, - {0x4493, 146}, - {0x4494, 147}, - {0x4495, 148}, - {0x4496, 149}, - {0x4497, 150}, - {0x4498, 151}, - {0x4499, 152}, - {0x449a, 153}, - {0x449b, 154}, - {0x449c, 155}, - {0x449d, 156}, - {0x449e, 157}, - {0x449f, 158}, - {0x44a0, 159}, - {0x44a1, 160}, - {0x44a2, 161}, - {0x44a3, 162}, - {0x44a4, 163}, - {0x44a5, 164}, - {0x44a6, 165}, - {0x44a7, 166}, - {0x44a8, 167}, - {0x44a9, 168}, - {0x44aa, 169}, - {0x44ab, 170}, - {0x44ac, 171}, - {0x44ad, 172}, - {0x44ae, 173}, - {0x44af, 174}, - {0x44b0, 175}, - {0x44b1, 176}, - {0x44b2, 177}, - {0x44b3, 178}, - {0x44b4, 179}, - {0x44b5, 180}, - {0x44b6, 181}, - {0x44b7, 182}, - {0x44b8, 183}, - {0x44b9, 184}, - {0x44ba, 185}, - {0x44bb, 186}, - {0x44bc, 187}, - {0x44bd, 188}, - {0x44be, 189}, - {0x44bf, 190}, - {0x44c0, 191}, - {0x44c1, 192}, - {0x44c2, 193}, - {0x44c3, 194}, - {0x44c4, 195}, - {0x44c5, 196}, - {0x44c6, 197}, - {0x44c7, 198}, - {0x44c8, 199}, - {0x44c9, 200}, - {0x44ca, 201}, - {0x44cb, 202}, - {0x44cc, 203}, - {0x44cd, 204}, - {0x44ce, 205}, - {0x44cf, 206}, - {0x44d0, 207}, - {0x44d1, 208}, - {0x44d2, 209}, - {0x44d3, 210}, - {0x44d4, 211}, - {0x44d5, 212}, - {0x44d8, 0}, - {0x44d9, 1}, - {0x44da, 2}, - {0x44db, 3}, - {0x44dc, 4}, - {0x44dd, 5}, - {0x44de, 6}, - {0x44df, 7}, - {0x44e0, 8}, - {0x44e1, 9}, - {0x44e2, 10}, - {0x44e3, 11}, - {0x44e4, 12}, - {0x44e5, 13}, - {0x44e6, 14}, - {0x44e7, 15}, - {0x44e8, 16}, - {0x44e9, 17}, - {0x44ea, 18}, - {0x44eb, 19}, - {0x44ec, 20}, - {0x44ed, 21}, - {0x44ee, 22}, - {0x44ef, 23}, - {0x44f0, 24}, - {0x44f1, 25}, - {0x44f2, 26}, - {0x44f3, 27}, - {0x44f4, 28}, - {0x44f5, 29}, - {0x44f6, 30}, - {0x44f7, 31}, - {0x44f8, 32}, - {0x44f9, 33}, - {0x44fa, 34}, - {0x44fb, 35}, - {0x44fc, 36}, - {0x44fd, 37}, - {0x44fe, 38}, - {0x44ff, 39}, - {0x4501, 0}, - {0x4502, 1}, - {0x4503, 2}, - {0x4504, 3}, - {0x4505, 4}, - {0x4506, 5}, - {0x4507, 6}, - {0x4508, 7}, - {0x4509, 8}, - {0x450a, 9}, - {0x450b, 10}, - {0x450c, 11}, - {0x450d, 12}, - {0x450e, 13}, - {0x450f, 14}, - {0x4510, 15}, - {0x4511, 16}, - {0x4512, 17}, - {0x4513, 18}, - {0x4514, 19}, - {0x4515, 20}, - {0x4516, 21}, - {0x4517, 22}, - {0x4518, 23}, - {0x4519, 24}, - {0x451a, 25}, - {0x451b, 26}, - {0x451c, 27}, - {0x451d, 28}, - {0x451e, 29}, - {0x451f, 30}, - {0x4520, 31}, - {0x4521, 32}, - {0x4522, 33}, - {0x4523, 34}, - {0x4524, 35}, - {0x4525, 36}, - {0x4526, 37}, - {0x4527, 38}, - {0x4528, 39}, - {0x4529, 40}, - {0x452a, 41}, - {0x452b, 42}, - {0x452c, 43}, - {0x452d, 44}, - {0x452e, 45}, - {0x452f, 46}, - {0x4530, 47}, - {0x4531, 48}, - {0x4532, 49}, - {0x4533, 50}, - {0x4534, 51}, - {0x4535, 52}, - {0x4536, 53}, - {0x4537, 54}, - {0x4538, 55}, - {0x4539, 56}, - {0x453a, 57}, - {0x453b, 58}, - {0x453c, 59}, - {0x453d, 60}, - {0x453e, 61}, - {0x453f, 62}, - {0x4540, 63}, - {0x4541, 64}, - {0x4542, 65}, - {0x4543, 66}, - {0x4544, 67}, - {0x4545, 68}, - {0x4546, 69}, - {0x4547, 70}, - {0x4548, 71}, - {0x4549, 72}, - {0x454a, 73}, - {0x454b, 74}, - {0x454c, 75}, - {0x454d, 76}, - {0x454e, 77}, - {0x454f, 78}, - {0x4550, 79}, - {0x4551, 80}, - {0x4552, 81}, - {0x4553, 82}, - {0x4554, 83}, - {0x4555, 84}, - {0x4556, 85}, - {0x4557, 86}, - {0x4558, 87}, - {0x4559, 88}, - {0x455a, 89}, - {0x455b, 90}, - {0x455c, 91}, - {0x455d, 92}, - {0x455e, 93}, - {0x455f, 94}, - {0x4560, 95}, - {0x4561, 96}, - {0x4562, 97}, - {0x4563, 98}, - {0x4564, 99}, - {0x4565, 100}, - {0x4566, 101}, - {0x4567, 102}, - {0x4568, 103}, - {0x4569, 104}, - {0x456a, 105}, - {0x456b, 106}, - {0x456c, 107}, - {0x456d, 108}, - {0x456e, 109}, - {0x456f, 110}, - {0x4570, 111}, - {0x4571, 112}, - {0x4572, 113}, - {0x4573, 114}, - {0x4574, 115}, - {0x4575, 116}, - {0x4576, 117}, - {0x4577, 118}, - {0x4578, 119}, - {0x4579, 120}, - {0x457a, 121}, - {0x457b, 122}, - {0x457c, 123}, - {0x457d, 124}, - {0x457e, 125}, - {0x457f, 126}, - {0x4580, 127}, - {0x4581, 128}, - {0x4582, 129}, - {0x4583, 130}, - {0x4584, 131}, - {0x4585, 132}, - {0x4586, 133}, - {0x4587, 134}, - {0x4588, 135}, - {0x4589, 136}, - {0x458a, 137}, - {0x458b, 138}, - {0x458c, 139}, - {0x458d, 140}, - {0x458e, 141}, - {0x458f, 142}, - {0x4590, 143}, - {0x4591, 144}, - {0x4592, 145}, - {0x4593, 146}, - {0x4594, 147}, - {0x4595, 148}, - {0x4596, 149}, - {0x4597, 150}, - {0x4598, 151}, - {0x4599, 152}, - {0x459a, 153}, - {0x459b, 154}, - {0x459c, 155}, - {0x459d, 156}, - {0x459e, 157}, - {0x459f, 158}, - {0x45a0, 159}, - {0x45a1, 160}, - {0x45a2, 161}, - {0x45a3, 162}, - {0x45a4, 163}, - {0x45a5, 164}, - {0x45a6, 165}, - {0x45a7, 166}, - {0x45a8, 167}, - {0x45a9, 168}, - {0x45aa, 169}, - {0x45ab, 170}, - {0x45ac, 171}, - {0x45ad, 172}, - {0x45ae, 173}, - {0x45af, 174}, - {0x45b0, 175}, - {0x45b1, 176}, - {0x45b2, 177}, - {0x45b3, 178}, - {0x45b4, 179}, - {0x45b5, 180}, - {0x45b6, 181}, - {0x45b7, 182}, - {0x45b8, 183}, - {0x45b9, 184}, - {0x45ba, 185}, - {0x45bb, 186}, - {0x45bc, 187}, - {0x45bd, 188}, - {0x45be, 189}, - {0x45bf, 190}, - {0x45c0, 191}, - {0x45c1, 192}, - {0x45c2, 193}, - {0x45c3, 194}, - {0x45c4, 195}, - {0x45c5, 196}, - {0x45c6, 197}, - {0x45c7, 198}, - {0x45c8, 199}, - {0x45c9, 200}, - {0x45ca, 201}, - {0x45cb, 202}, - {0x45cc, 203}, - {0x45cd, 204}, - {0x45ce, 205}, - {0x45cf, 206}, - {0x45d0, 207}, - {0x45d1, 208}, - {0x45d2, 209}, - {0x45d3, 210}, - {0x45d4, 211}, - {0x45d5, 212}, - {0x45d6, 213}, - {0x45d7, 214}, - {0x45d8, 215}, - {0x45d9, 216}, - {0x45da, 217}, - {0x45db, 218}, - {0x45dc, 219}, - {0x45dd, 220}, - {0x45de, 221}, - {0x45df, 222}, - {0x45e0, 223}, - {0x45e1, 224}, - {0x45e2, 225}, - {0x45e3, 226}, - {0x45e4, 227}, - {0x45e5, 228}, - {0x45e6, 229}, - {0x45e7, 230}, - {0x45e8, 231}, - {0x45e9, 232}, - {0x45ea, 233}, - {0x45eb, 234}, - {0x45ec, 235}, - {0x45ed, 236}, - {0x45ee, 237}, - {0x45ef, 238}, - {0x45f0, 239}, - {0x45f1, 240}, - {0x45f2, 241}, - {0x45f3, 242}, - {0x45f4, 243}, - {0x45f5, 244}, - {0x45f6, 245}, - {0x45f7, 246}, - {0x45f8, 247}, - {0x45f9, 248}, - {0x45fa, 249}, - {0x45fb, 250}, - {0x45fc, 251}, - {0x45fd, 252}, - {0x45fe, 253}, - {0x45ff, 254}, - {0x4601, 0}, - {0x4602, 1}, - {0x4603, 2}, - {0x4604, 3}, - {0x4605, 4}, - {0x4606, 5}, - {0x4607, 6}, - {0x4608, 7}, - {0x4609, 8}, - {0x460a, 9}, - {0x460b, 10}, - {0x460c, 11}, - {0x460d, 12}, - {0x460e, 13}, - {0x460f, 14}, - {0x4610, 15}, - {0x4611, 16}, - {0x4612, 17}, - {0x4613, 18}, - {0x4614, 19}, - {0x4615, 20}, - {0x4616, 21}, - {0x4617, 22}, - {0x4618, 23}, - {0x4619, 24}, - {0x461a, 25}, - {0x461b, 26}, - {0x461c, 27}, - {0x461d, 28}, - {0x461e, 29}, - {0x461f, 30}, - {0x4620, 31}, - {0x4621, 32}, - {0x4622, 33}, - {0x4623, 34}, - {0x4624, 35}, - {0x4625, 36}, - {0x4626, 37}, - {0x4627, 38}, - {0x4628, 39}, - {0x4629, 40}, - {0x462a, 41}, - {0x462b, 42}, - {0x462c, 43}, - {0x462d, 44}, - {0x462e, 45}, - {0x462f, 46}, - {0x4630, 47}, - {0x4631, 48}, - {0x4632, 49}, - {0x4633, 50}, - {0x4634, 51}, - {0x4635, 52}, - {0x4636, 53}, - {0x4637, 54}, - {0x4638, 55}, - {0x4639, 56}, - {0x463a, 57}, - {0x463b, 58}, - {0x463c, 59}, - {0x463d, 60}, - {0x463e, 61}, - {0x463f, 62}, - {0x4640, 63}, - {0x4641, 64}, - {0x4642, 65}, - {0x4643, 66}, - {0x4644, 67}, - {0x4645, 68}, - {0x4646, 69}, - {0x4647, 70}, - {0x4648, 71}, - {0x4649, 72}, - {0x464a, 73}, - {0x464b, 74}, - {0x464e, 0}, - {0x464f, 1}, - {0x4650, 2}, - {0x4651, 3}, - {0x4652, 4}, - {0x4653, 5}, - {0x4654, 6}, - {0x4655, 7}, - {0x4656, 8}, - {0x4657, 9}, - {0x4658, 10}, - {0x4659, 11}, - {0x465a, 12}, - {0x465b, 13}, - {0x465c, 14}, - {0x465d, 15}, - {0x465e, 16}, - {0x465f, 17}, - {0x4660, 18}, - {0x4663, 0}, - {0x4664, 1}, - {0x4665, 2}, - {0x4666, 3}, - {0x4667, 4}, - {0x4668, 5}, - {0x4669, 6}, - {0x466a, 7}, - {0x466b, 8}, - {0x466c, 9}, - {0x466d, 10}, - {0x466e, 11}, - {0x466f, 12}, - {0x4670, 13}, - {0x4671, 14}, - {0x4672, 15}, - {0x4673, 16}, - {0x4674, 17}, - {0x4675, 18}, - {0x4676, 19}, - {0x4677, 20}, - {0x4678, 21}, - {0x4679, 22}, - {0x467a, 23}, - {0x467b, 24}, - {0x467c, 25}, - {0x467d, 26}, - {0x467e, 27}, - {0x467f, 28}, - {0x4680, 29}, - {0x4681, 30}, - {0x4682, 31}, - {0x4683, 32}, - {0x4684, 33}, - {0x4685, 34}, - {0x4686, 35}, - {0x4687, 36}, - {0x4688, 37}, - {0x4689, 38}, - {0x468a, 39}, - {0x468b, 40}, - {0x468c, 41}, - {0x468d, 42}, - {0x468e, 43}, - {0x468f, 44}, - {0x4690, 45}, - {0x4691, 46}, - {0x4692, 47}, - {0x4693, 48}, - {0x4694, 49}, - {0x4695, 50}, - {0x4696, 51}, - {0x4697, 52}, - {0x4698, 53}, - {0x4699, 54}, - {0x469a, 55}, - {0x469b, 56}, - {0x469c, 57}, - {0x469d, 58}, - {0x469e, 59}, - {0x469f, 60}, - {0x46a0, 61}, - {0x46a1, 62}, - {0x46a2, 63}, - {0x46a3, 64}, - {0x46a4, 65}, - {0x46a5, 66}, - {0x46a6, 67}, - {0x46a7, 68}, - {0x46a8, 69}, - {0x46a9, 70}, - {0x46aa, 71}, - {0x46ab, 72}, - {0x46ac, 73}, - {0x46ad, 74}, - {0x46ae, 75}, - {0x46af, 76}, - {0x46b0, 77}, - {0x46b1, 78}, - {0x46b2, 79}, - {0x46b3, 80}, - {0x46b4, 81}, - {0x46b5, 82}, - {0x46b6, 83}, - {0x46b7, 84}, - {0x46b8, 85}, - {0x46b9, 86}, - {0x46ba, 87}, - {0x46bb, 88}, - {0x46bc, 89}, - {0x46bd, 90}, - {0x46be, 91}, - {0x46bf, 92}, - {0x46c0, 93}, - {0x46c1, 94}, - {0x46c2, 95}, - {0x46c3, 96}, - {0x46c4, 97}, - {0x46c5, 98}, - {0x46c6, 99}, - {0x46c7, 100}, - {0x46c8, 101}, - {0x46c9, 102}, - {0x46ca, 103}, - {0x46cb, 104}, - {0x46cc, 105}, - {0x46cd, 106}, - {0x46ce, 107}, - {0x46cf, 108}, - {0x46d0, 109}, - {0x46d1, 110}, - {0x46d2, 111}, - {0x46d3, 112}, - {0x46d4, 113}, - {0x46d5, 114}, - {0x46d6, 115}, - {0x46d7, 116}, - {0x46d8, 117}, - {0x46d9, 118}, - {0x46da, 119}, - {0x46db, 120}, - {0x46dc, 121}, - {0x46dd, 122}, - {0x46de, 123}, - {0x46df, 124}, - {0x46e0, 125}, - {0x46e1, 126}, - {0x46e2, 127}, - {0x46e3, 128}, - {0x46e4, 129}, - {0x46e5, 130}, - {0x46e6, 131}, - {0x46e7, 132}, - {0x46e8, 133}, - {0x46e9, 134}, - {0x46ea, 135}, - {0x46eb, 136}, - {0x46ec, 137}, - {0x46ed, 138}, - {0x46ee, 139}, - {0x46ef, 140}, - {0x46f0, 141}, - {0x46f1, 142}, - {0x46f2, 143}, - {0x46f3, 144}, - {0x46f4, 145}, - {0x46f5, 146}, - {0x46f6, 147}, - {0x46f7, 148}, - {0x46f8, 149}, - {0x46f9, 150}, - {0x46fa, 151}, - {0x46fb, 152}, - {0x46fc, 153}, - {0x46fd, 154}, - {0x46fe, 155}, - {0x46ff, 156}, - {0x4701, 0}, - {0x4702, 1}, - {0x4703, 2}, - {0x4704, 3}, - {0x4705, 4}, - {0x4706, 5}, - {0x4707, 6}, - {0x4708, 7}, - {0x4709, 8}, - {0x470a, 9}, - {0x470b, 10}, - {0x470c, 11}, - {0x470d, 12}, - {0x470e, 13}, - {0x470f, 14}, - {0x4710, 15}, - {0x4711, 16}, - {0x4712, 17}, - {0x4713, 18}, - {0x4714, 19}, - {0x4715, 20}, - {0x4716, 21}, - {0x4717, 22}, - {0x4718, 23}, - {0x4719, 24}, - {0x471a, 25}, - {0x471b, 26}, - {0x471c, 27}, - {0x471d, 28}, - {0x471e, 29}, - {0x471f, 30}, - {0x4720, 31}, - {0x4721, 32}, - {0x4722, 33}, - {0x4725, 0}, - {0x4726, 1}, - {0x4727, 2}, - {0x4728, 3}, - {0x472b, 0}, - {0x472c, 1}, - {0x472d, 2}, - {0x472e, 3}, - {0x472f, 4}, - {0x4730, 5}, - {0x4731, 6}, - {0x4732, 7}, - {0x4733, 8}, - {0x4734, 9}, - {0x4735, 10}, - {0x4736, 11}, - {0x4737, 12}, - {0x4738, 13}, - {0x4739, 14}, - {0x473a, 15}, - {0x473b, 16}, - {0x473c, 17}, - {0x473d, 18}, - {0x473e, 19}, - {0x473f, 20}, - {0x4740, 21}, - {0x4741, 22}, - {0x4742, 23}, - {0x4743, 24}, - {0x4744, 25}, - {0x4745, 26}, - {0x4746, 27}, - {0x4747, 28}, - {0x4748, 29}, - {0x4749, 30}, - {0x474a, 31}, - {0x474b, 32}, - {0x474c, 33}, - {0x474d, 34}, - {0x474e, 35}, - {0x474f, 36}, - {0x4750, 37}, - {0x4751, 38}, - {0x4752, 39}, - {0x4753, 40}, - {0x4754, 41}, - {0x4755, 42}, - {0x4756, 43}, - {0x4757, 44}, - {0x4758, 45}, - {0x4759, 46}, - {0x475a, 47}, - {0x475b, 48}, - {0x475c, 49}, - {0x475d, 50}, - {0x475e, 51}, - {0x475f, 52}, - {0x4760, 53}, - {0x4761, 54}, - {0x4762, 55}, - {0x4763, 56}, - {0x4764, 57}, - {0x4765, 58}, - {0x4766, 59}, - {0x4767, 60}, - {0x4768, 61}, - {0x4769, 62}, - {0x476a, 63}, - {0x476b, 64}, - {0x476c, 65}, - {0x476d, 66}, - {0x476e, 67}, - {0x476f, 68}, - {0x4770, 69}, - {0x4771, 70}, - {0x4772, 71}, - {0x4773, 72}, - {0x4774, 73}, - {0x4775, 74}, - {0x4776, 75}, - {0x4777, 76}, - {0x4778, 77}, - {0x4779, 78}, - {0x477a, 79}, - {0x477b, 80}, - {0x477e, 0}, - {0x477f, 1}, - {0x4780, 2}, - {0x4781, 3}, - {0x4782, 4}, - {0x4783, 5}, - {0x4784, 6}, - {0x4785, 7}, - {0x4786, 8}, - {0x4787, 9}, - {0x4788, 10}, - {0x4789, 11}, - {0x478a, 12}, - {0x478b, 13}, - {0x478c, 14}, - {0x478f, 0}, - {0x4790, 1}, - {0x4791, 2}, - {0x4792, 3}, - {0x4793, 4}, - {0x4794, 5}, - {0x4795, 6}, - {0x4796, 7}, - {0x4797, 8}, - {0x4798, 9}, - {0x4799, 10}, - {0x479a, 11}, - {0x479b, 12}, - {0x479c, 13}, - {0x479d, 14}, - {0x479e, 15}, - {0x479f, 16}, - {0x47a0, 17}, - {0x47a1, 18}, - {0x47a2, 19}, - {0x47a3, 20}, - {0x47a4, 21}, - {0x47a5, 22}, - {0x47a6, 23}, - {0x47a7, 24}, - {0x47a8, 25}, - {0x47a9, 26}, - {0x47aa, 27}, - {0x47ab, 28}, - {0x47ac, 29}, - {0x47ad, 30}, - {0x47ae, 31}, - {0x47af, 32}, - {0x47b0, 33}, - {0x47b1, 34}, - {0x47b2, 35}, - {0x47b3, 36}, - {0x47b4, 37}, - {0x47b5, 38}, - {0x47b6, 39}, - {0x47b7, 40}, - {0x47b8, 41}, - {0x47b9, 42}, - {0x47ba, 43}, - {0x47bb, 44}, - {0x47bc, 45}, - {0x47bd, 46}, - {0x47be, 47}, - {0x47bf, 48}, - {0x47c0, 49}, - {0x47c1, 50}, - {0x47c2, 51}, - {0x47c3, 52}, - {0x47c4, 53}, - {0x47c5, 54}, - {0x47c6, 55}, - {0x47c7, 56}, - {0x47c8, 57}, - {0x47c9, 58}, - {0x47ca, 59}, - {0x47cb, 60}, - {0x47cc, 61}, - {0x47cd, 62}, - {0x47ce, 63}, - {0x47cf, 64}, - {0x47d0, 65}, - {0x47d1, 66}, - {0x47d2, 67}, - {0x47d3, 68}, - {0x47d4, 69}, - {0x47d5, 70}, - {0x47d6, 71}, - {0x47d7, 72}, - {0x47d8, 73}, - {0x47d9, 74}, - {0x47da, 75}, - {0x47db, 76}, - {0x47dc, 77}, - {0x47dd, 78}, - {0x47de, 79}, - {0x47df, 80}, - {0x47e0, 81}, - {0x47e1, 82}, - {0x47e2, 83}, - {0x47e3, 84}, - {0x47e4, 85}, - {0x47e5, 86}, - {0x47e6, 87}, - {0x47e7, 88}, - {0x47e8, 89}, - {0x47e9, 90}, - {0x47ea, 91}, - {0x47eb, 92}, - {0x47ec, 93}, - {0x47ed, 94}, - {0x47ee, 95}, - {0x47ef, 96}, - {0x47f0, 97}, - {0x47f1, 98}, - {0x47f2, 99}, - {0x47f3, 100}, - {0x47f4, 101}, - {0x47f5, 102}, - {0x47f6, 103}, - {0x47f7, 104}, - {0x47f8, 105}, - {0x47f9, 106}, - {0x47fa, 107}, - {0x47fb, 108}, - {0x47fc, 109}, - {0x47fd, 110}, - {0x47fe, 111}, - {0x47ff, 112}, - {0x4801, 0}, - {0x4802, 1}, - {0x4803, 2}, - {0x4804, 3}, - {0x4805, 4}, - {0x4806, 5}, - {0x4807, 6}, - {0x4808, 7}, - {0x4809, 8}, - {0x480a, 9}, - {0x480b, 10}, - {0x480c, 11}, - {0x480d, 12}, - {0x480e, 13}, - {0x480f, 14}, - {0x4810, 15}, - {0x4811, 16}, - {0x4812, 17}, - {0x4813, 18}, - {0x4814, 19}, - {0x4815, 20}, - {0x4816, 21}, - {0x4817, 22}, - {0x4818, 23}, - {0x4819, 24}, - {0x481a, 25}, - {0x481b, 26}, - {0x481c, 27}, - {0x481d, 28}, - {0x481e, 29}, - {0x481f, 30}, - {0x4820, 31}, - {0x4821, 32}, - {0x4822, 33}, - {0x4823, 34}, - {0x4824, 35}, - {0x4825, 36}, - {0x4826, 37}, - {0x4827, 38}, - {0x4828, 39}, - {0x4829, 40}, - {0x482a, 41}, - {0x482b, 42}, - {0x482c, 43}, - {0x482d, 44}, - {0x482e, 45}, - {0x482f, 46}, - {0x4830, 47}, - {0x4831, 48}, - {0x4832, 49}, - {0x4833, 50}, - {0x4834, 51}, - {0x4835, 52}, - {0x4836, 53}, - {0x4837, 54}, - {0x4838, 55}, - {0x4839, 56}, - {0x483a, 57}, - {0x483b, 58}, - {0x483c, 59}, - {0x483d, 60}, - {0x483e, 61}, - {0x483f, 62}, - {0x4840, 63}, - {0x4841, 64}, - {0x4842, 65}, - {0x4843, 66}, - {0x4844, 67}, - {0x4845, 68}, - {0x4846, 69}, - {0x4847, 70}, - {0x4848, 71}, - {0x4849, 72}, - {0x484a, 73}, - {0x484b, 74}, - {0x484c, 75}, - {0x484d, 76}, - {0x484e, 77}, - {0x484f, 78}, - {0x4850, 79}, - {0x4851, 80}, - {0x4852, 81}, - {0x4853, 82}, - {0x4854, 83}, - {0x4855, 84}, - {0x4856, 85}, - {0x4857, 86}, - {0x4858, 87}, - {0x4859, 88}, - {0x485a, 89}, - {0x485b, 90}, - {0x485c, 91}, - {0x485d, 92}, - {0x485e, 93}, - {0x485f, 94}, - {0x4860, 95}, - {0x4861, 96}, - {0x4862, 97}, - {0x4863, 98}, - {0x4864, 99}, - {0x4865, 100}, - {0x4866, 101}, - {0x4867, 102}, - {0x4868, 103}, - {0x4869, 104}, - {0x486a, 105}, - {0x486b, 106}, - {0x486c, 107}, - {0x486d, 108}, - {0x486e, 109}, - {0x486f, 110}, - {0x4870, 111}, - {0x4871, 112}, - {0x4872, 113}, - {0x4873, 114}, - {0x4874, 115}, - {0x4875, 116}, - {0x4876, 117}, - {0x4877, 118}, - {0x4878, 119}, - {0x4879, 120}, - {0x487a, 121}, - {0x487b, 122}, - {0x487c, 123}, - {0x487d, 124}, - {0x487e, 125}, - {0x487f, 126}, - {0x4880, 127}, - {0x4881, 128}, - {0x4882, 129}, - {0x4883, 130}, - {0x4884, 131}, - {0x4885, 132}, - {0x4886, 133}, - {0x4887, 134}, - {0x4888, 135}, - {0x4889, 136}, - {0x488a, 137}, - {0x488b, 138}, - {0x488c, 139}, - {0x488d, 140}, - {0x488e, 141}, - {0x488f, 142}, - {0x4890, 143}, - {0x4891, 144}, - {0x4892, 145}, - {0x4893, 146}, - {0x4894, 147}, - {0x4895, 148}, - {0x4896, 149}, - {0x4897, 150}, - {0x4898, 151}, - {0x4899, 152}, - {0x489a, 153}, - {0x489b, 154}, - {0x489c, 155}, - {0x489d, 156}, - {0x489e, 157}, - {0x489f, 158}, - {0x48a0, 159}, - {0x48a1, 160}, - {0x48a2, 161}, - {0x48a3, 162}, - {0x48a4, 163}, - {0x48a5, 164}, - {0x48a6, 165}, - {0x48a7, 166}, - {0x48a8, 167}, - {0x48a9, 168}, - {0x48aa, 169}, - {0x48ab, 170}, - {0x48ac, 171}, - {0x48ad, 172}, - {0x48ae, 173}, - {0x48af, 174}, - {0x48b0, 175}, - {0x48b1, 176}, - {0x48b2, 177}, - {0x48b3, 178}, - {0x48b4, 179}, - {0x48b5, 180}, - {0x48b6, 181}, - {0x48b7, 182}, - {0x48b8, 183}, - {0x48b9, 184}, - {0x48ba, 185}, - {0x48bb, 186}, - {0x48bc, 187}, - {0x48bd, 188}, - {0x48be, 189}, - {0x48bf, 190}, - {0x48c0, 191}, - {0x48c1, 192}, - {0x48c2, 193}, - {0x48c3, 194}, - {0x48c4, 195}, - {0x48c5, 196}, - {0x48c6, 197}, - {0x48c7, 198}, - {0x48c8, 199}, - {0x48c9, 200}, - {0x48ca, 201}, - {0x48cb, 202}, - {0x48cc, 203}, - {0x48cd, 204}, - {0x48ce, 205}, - {0x48cf, 206}, - {0x48d0, 207}, - {0x48d1, 208}, - {0x48d2, 209}, - {0x48d3, 210}, - {0x48d4, 211}, - {0x48d5, 212}, - {0x48d6, 213}, - {0x48d7, 214}, - {0x48d8, 215}, - {0x48d9, 216}, - {0x48da, 217}, - {0x48db, 218}, - {0x48dc, 219}, - {0x48dd, 220}, - {0x48de, 221}, - {0x48df, 222}, - {0x48e0, 223}, - {0x48e1, 224}, - {0x48e2, 225}, - {0x48e3, 226}, - {0x48e4, 227}, - {0x48e5, 228}, - {0x48e6, 229}, - {0x48e7, 230}, - {0x48e8, 231}, - {0x48e9, 232}, - {0x48ea, 233}, - {0x48eb, 234}, - {0x48ec, 235}, - {0x48ed, 236}, - {0x48ee, 237}, - {0x48ef, 238}, - {0x48f0, 239}, - {0x48f1, 240}, - {0x48f2, 241}, - {0x48f3, 242}, - {0x48f4, 243}, - {0x48f5, 244}, - {0x48f6, 245}, - {0x48f7, 246}, - {0x48f8, 247}, - {0x48f9, 248}, - {0x48fa, 249}, - {0x48fb, 250}, - {0x48fc, 251}, - {0x48fd, 252}, - {0x48fe, 253}, - {0x48ff, 254}, - {0x4901, 0}, - {0x4902, 1}, - {0x4903, 2}, - {0x4904, 3}, - {0x4905, 4}, - {0x4906, 5}, - {0x4907, 6}, - {0x4908, 7}, - {0x4909, 8}, - {0x490a, 9}, - {0x490b, 10}, - {0x490c, 11}, - {0x490d, 12}, - {0x490e, 13}, - {0x490f, 14}, - {0x4910, 15}, - {0x4911, 16}, - {0x4912, 17}, - {0x4913, 18}, - {0x4914, 19}, - {0x4915, 20}, - {0x4916, 21}, - {0x4917, 22}, - {0x4918, 23}, - {0x4919, 24}, - {0x491a, 25}, - {0x491b, 26}, - {0x491c, 27}, - {0x491d, 28}, - {0x491e, 29}, - {0x491f, 30}, - {0x4920, 31}, - {0x4921, 32}, - {0x4922, 33}, - {0x4923, 34}, - {0x4924, 35}, - {0x4925, 36}, - {0x4926, 37}, - {0x4927, 38}, - {0x4928, 39}, - {0x4929, 40}, - {0x492a, 41}, - {0x492b, 42}, - {0x492c, 43}, - {0x492d, 44}, - {0x492e, 45}, - {0x492f, 46}, - {0x4930, 47}, - {0x4931, 48}, - {0x4932, 49}, - {0x4933, 50}, - {0x4934, 51}, - {0x4935, 52}, - {0x4936, 53}, - {0x4937, 54}, - {0x4938, 55}, - {0x4939, 56}, - {0x493a, 57}, - {0x493b, 58}, - {0x493c, 59}, - {0x493d, 60}, - {0x493e, 61}, - {0x493f, 62}, - {0x4940, 63}, - {0x4941, 64}, - {0x4942, 65}, - {0x4943, 66}, - {0x4944, 67}, - {0x4945, 68}, - {0x4946, 69}, - {0x4949, 0}, - {0x494a, 1}, - {0x494b, 2}, - {0x494c, 3}, - {0x494d, 4}, - {0x494e, 5}, - {0x494f, 6}, - {0x4950, 7}, - {0x4951, 8}, - {0x4952, 9}, - {0x4953, 10}, - {0x4954, 11}, - {0x4955, 12}, - {0x4956, 13}, - {0x4957, 14}, - {0x4958, 15}, - {0x4959, 16}, - {0x495a, 17}, - {0x495b, 18}, - {0x495c, 19}, - {0x495d, 20}, - {0x495e, 21}, - {0x495f, 22}, - {0x4960, 23}, - {0x4961, 24}, - {0x4962, 25}, - {0x4963, 26}, - {0x4964, 27}, - {0x4965, 28}, - {0x4966, 29}, - {0x4967, 30}, - {0x4968, 31}, - {0x4969, 32}, - {0x496a, 33}, - {0x496b, 34}, - {0x496c, 35}, - {0x496d, 36}, - {0x496e, 37}, - {0x496f, 38}, - {0x4970, 39}, - {0x4971, 40}, - {0x4972, 41}, - {0x4973, 42}, - {0x4974, 43}, - {0x4975, 44}, - {0x4976, 45}, - {0x4977, 46}, - {0x4978, 47}, - {0x4979, 48}, - {0x497c, 0}, - {0x497f, 0}, - {0x4980, 1}, - {0x4981, 2}, - {0x4983, 0}, - {0x4986, 0}, - {0x4988, 0}, - {0x4989, 1}, - {0x498a, 2}, - {0x498b, 3}, - {0x498c, 4}, - {0x498d, 5}, - {0x498e, 6}, - {0x498f, 7}, - {0x4990, 8}, - {0x4991, 9}, - {0x4992, 10}, - {0x4993, 11}, - {0x4994, 12}, - {0x4995, 13}, - {0x4996, 14}, - {0x4997, 15}, - {0x4998, 16}, - {0x4999, 17}, - {0x499a, 18}, - {0x499d, 0}, - {0x499e, 1}, - {0x49a1, 0}, - {0x49a2, 1}, - {0x49a3, 2}, - {0x49a4, 3}, - {0x49a5, 4}, - {0x49a6, 5}, - {0x49a7, 6}, - {0x49a8, 7}, - {0x49a9, 8}, - {0x49aa, 9}, - {0x49ab, 10}, - {0x49ac, 11}, - {0x49ad, 12}, - {0x49ae, 13}, - {0x49af, 14}, - {0x49b0, 15}, - {0x49b1, 16}, - {0x49b2, 17}, - {0x49b3, 18}, - {0x49b4, 19}, - {0x49b5, 20}, - {0x49b9, 0}, - {0x49ba, 1}, - {0x49bb, 2}, - {0x49bc, 3}, - {0x49bd, 4}, - {0x49be, 5}, - {0x49bf, 6}, - {0x49c0, 7}, - {0x49c1, 8}, - {0x49c2, 9}, - {0x49c3, 10}, - {0x49c4, 11}, - {0x49c5, 12}, - {0x49c6, 13}, - {0x49c7, 14}, - {0x49c8, 15}, - {0x49c9, 16}, - {0x49ca, 17}, - {0x49cb, 18}, - {0x49cc, 19}, - {0x49cd, 20}, - {0x49ce, 21}, - {0x49cf, 22}, - {0x49d0, 23}, - {0x49d1, 24}, - {0x49d2, 25}, - {0x49d3, 26}, - {0x49d4, 27}, - {0x49d5, 28}, - {0x49d6, 29}, - {0x49d7, 30}, - {0x49d8, 31}, - {0x49d9, 32}, - {0x49da, 33}, - {0x49db, 34}, - {0x49dc, 35}, - {0x49dd, 36}, - {0x49de, 37}, - {0x49df, 38}, - {0x49e0, 39}, - {0x49e1, 40}, - {0x49e2, 41}, - {0x49e3, 42}, - {0x49e4, 43}, - {0x49e5, 44}, - {0x49e6, 45}, - {0x49e7, 46}, - {0x49e8, 47}, - {0x49e9, 48}, - {0x49ea, 49}, - {0x49eb, 50}, - {0x49ec, 51}, - {0x49ed, 52}, - {0x49ee, 53}, - {0x49ef, 54}, - {0x49f0, 55}, - {0x49f1, 56}, - {0x49f2, 57}, - {0x49f3, 58}, - {0x49f4, 59}, - {0x49f5, 60}, - {0x49f6, 61}, - {0x49f7, 62}, - {0x49f8, 63}, - {0x49f9, 64}, - {0x49fa, 65}, - {0x49fb, 66}, - {0x49fc, 67}, - {0x49fd, 68}, - {0x49fe, 69}, - {0x49ff, 70}, - {0x4a01, 0}, - {0x4a02, 1}, - {0x4a03, 2}, - {0x4a04, 3}, - {0x4a05, 4}, - {0x4a06, 5}, - {0x4a07, 6}, - {0x4a08, 7}, - {0x4a09, 8}, - {0x4a0a, 9}, - {0x4a0b, 10}, - {0x4a0c, 11}, - {0x4a0d, 12}, - {0x4a0e, 13}, - {0x4a0f, 14}, - {0x4a10, 15}, - {0x4a11, 16}, - {0x4a12, 17}, - {0x4a13, 18}, - {0x4a14, 19}, - {0x4a15, 20}, - {0x4a16, 21}, - {0x4a17, 22}, - {0x4a18, 23}, - {0x4a19, 24}, - {0x4a1a, 25}, - {0x4a1b, 26}, - {0x4a1c, 27}, - {0x4a1d, 28}, - {0x4a1e, 29}, - {0x4a1f, 30}, - {0x4a20, 31}, - {0x4a21, 32}, - {0x4a22, 33}, - {0x4a23, 34}, - {0x4a24, 35}, - {0x4a25, 36}, - {0x4a26, 37}, - {0x4a27, 38}, - {0x4a28, 39}, - {0x4a29, 40}, - {0x4a2a, 41}, - {0x4a2b, 42}, - {0x4a2c, 43}, - {0x4a2d, 44}, - {0x4a2e, 45}, - {0x4a2f, 46}, - {0x4a30, 47}, - {0x4a31, 48}, - {0x4a32, 49}, - {0x4a33, 50}, - {0x4a34, 51}, - {0x4a35, 52}, - {0x4a36, 53}, - {0x4a37, 54}, - {0x4a38, 55}, - {0x4a39, 56}, - {0x4a3a, 57}, - {0x4a3b, 58}, - {0x4a3c, 59}, - {0x4a3d, 60}, - {0x4a3e, 61}, - {0x4a3f, 62}, - {0x4a40, 63}, - {0x4a41, 64}, - {0x4a42, 65}, - {0x4a43, 66}, - {0x4a44, 67}, - {0x4a45, 68}, - {0x4a46, 69}, - {0x4a47, 70}, - {0x4a48, 71}, - {0x4a49, 72}, - {0x4a4a, 73}, - {0x4a4b, 74}, - {0x4a4c, 75}, - {0x4a4d, 76}, - {0x4a4e, 77}, - {0x4a4f, 78}, - {0x4a50, 79}, - {0x4a51, 80}, - {0x4a52, 81}, - {0x4a53, 82}, - {0x4a54, 83}, - {0x4a55, 84}, - {0x4a56, 85}, - {0x4a57, 86}, - {0x4a58, 87}, - {0x4a59, 88}, - {0x4a5a, 89}, - {0x4a5b, 90}, - {0x4a5c, 91}, - {0x4a5d, 92}, - {0x4a5e, 93}, - {0x4a5f, 94}, - {0x4a60, 95}, - {0x4a61, 96}, - {0x4a62, 97}, - {0x4a63, 98}, - {0x4a64, 99}, - {0x4a65, 100}, - {0x4a66, 101}, - {0x4a67, 102}, - {0x4a68, 103}, - {0x4a69, 104}, - {0x4a6a, 105}, - {0x4a6b, 106}, - {0x4a6c, 107}, - {0x4a6d, 108}, - {0x4a6e, 109}, - {0x4a6f, 110}, - {0x4a70, 111}, - {0x4a71, 112}, - {0x4a72, 113}, - {0x4a73, 114}, - {0x4a74, 115}, - {0x4a75, 116}, - {0x4a76, 117}, - {0x4a77, 118}, - {0x4a78, 119}, - {0x4a79, 120}, - {0x4a7a, 121}, - {0x4a7b, 122}, - {0x4a7c, 123}, - {0x4a7d, 124}, - {0x4a7e, 125}, - {0x4a7f, 126}, - {0x4a80, 127}, - {0x4a81, 128}, - {0x4a82, 129}, - {0x4a83, 130}, - {0x4a84, 131}, - {0x4a85, 132}, - {0x4a86, 133}, - {0x4a87, 134}, - {0x4a88, 135}, - {0x4a89, 136}, - {0x4a8a, 137}, - {0x4a8b, 138}, - {0x4a8c, 139}, - {0x4a8d, 140}, - {0x4a8e, 141}, - {0x4a8f, 142}, - {0x4a90, 143}, - {0x4a91, 144}, - {0x4a92, 145}, - {0x4a93, 146}, - {0x4a94, 147}, - {0x4a95, 148}, - {0x4a96, 149}, - {0x4a97, 150}, - {0x4a98, 151}, - {0x4a99, 152}, - {0x4a9a, 153}, - {0x4a9b, 154}, - {0x4a9c, 155}, - {0x4a9d, 156}, - {0x4a9e, 157}, - {0x4a9f, 158}, - {0x4aa0, 159}, - {0x4aa1, 160}, - {0x4aa2, 161}, - {0x4aa3, 162}, - {0x4aa4, 163}, - {0x4aa5, 164}, - {0x4aa6, 165}, - {0x4aa7, 166}, - {0x4aa8, 167}, - {0x4aa9, 168}, - {0x4aaa, 169}, - {0x4aab, 170}, - {0x4aac, 171}, - {0x4aad, 172}, - {0x4aae, 173}, - {0x4aaf, 174}, - {0x4ab0, 175}, - {0x4ab1, 176}, - {0x4ab2, 177}, - {0x4ab3, 178}, - {0x4ab4, 179}, - {0x4ab5, 180}, - {0x4ab6, 181}, - {0x4ab7, 182}, - {0x4ab8, 183}, - {0x4ab9, 184}, - {0x4aba, 185}, - {0x4abb, 186}, - {0x4abc, 187}, - {0x4abd, 188}, - {0x4abe, 189}, - {0x4abf, 190}, - {0x4ac0, 191}, - {0x4ac1, 192}, - {0x4ac2, 193}, - {0x4ac3, 194}, - {0x4ac4, 195}, - {0x4ac5, 196}, - {0x4ac6, 197}, - {0x4ac7, 198}, - {0x4ac8, 199}, - {0x4ac9, 200}, - {0x4aca, 201}, - {0x4acb, 202}, - {0x4acc, 203}, - {0x4acd, 204}, - {0x4ace, 205}, - {0x4acf, 206}, - {0x4ad0, 207}, - {0x4ad1, 208}, - {0x4ad2, 209}, - {0x4ad3, 210}, - {0x4ad4, 211}, - {0x4ad5, 212}, - {0x4ad6, 213}, - {0x4ad7, 214}, - {0x4ad8, 215}, - {0x4ad9, 216}, - {0x4ada, 217}, - {0x4adb, 218}, - {0x4adc, 219}, - {0x4add, 220}, - {0x4ade, 221}, - {0x4adf, 222}, - {0x4ae0, 223}, - {0x4ae1, 224}, - {0x4ae2, 225}, - {0x4ae3, 226}, - {0x4ae4, 227}, - {0x4ae5, 228}, - {0x4ae6, 229}, - {0x4ae7, 230}, - {0x4ae8, 231}, - {0x4ae9, 232}, - {0x4aea, 233}, - {0x4aeb, 234}, - {0x4aec, 235}, - {0x4aed, 236}, - {0x4aee, 237}, - {0x4aef, 238}, - {0x4af0, 239}, - {0x4af1, 240}, - {0x4af2, 241}, - {0x4af3, 242}, - {0x4af4, 243}, - {0x4af5, 244}, - {0x4af6, 245}, - {0x4af7, 246}, - {0x4af8, 247}, - {0x4af9, 248}, - {0x4afa, 249}, - {0x4afb, 250}, - {0x4afc, 251}, - {0x4afd, 252}, - {0x4afe, 253}, - {0x4aff, 254}, - {0x4b01, 0}, - {0x4b02, 1}, - {0x4b03, 2}, - {0x4b04, 3}, - {0x4b05, 4}, - {0x4b06, 5}, - {0x4b07, 6}, - {0x4b08, 7}, - {0x4b09, 8}, - {0x4b0a, 9}, - {0x4b0b, 10}, - {0x4b0c, 11}, - {0x4b0d, 12}, - {0x4b0e, 13}, - {0x4b0f, 14}, - {0x4b10, 15}, - {0x4b11, 16}, - {0x4b12, 17}, - {0x4b13, 18}, - {0x4b14, 19}, - {0x4b15, 20}, - {0x4b16, 21}, - {0x4b17, 22}, - {0x4b18, 23}, - {0x4b19, 24}, - {0x4b1a, 25}, - {0x4b1b, 26}, - {0x4b1c, 27}, - {0x4b1d, 28}, - {0x4b1e, 29}, - {0x4b1f, 30}, - {0x4b20, 31}, - {0x4b21, 32}, - {0x4b22, 33}, - {0x4b23, 34}, - {0x4b24, 35}, - {0x4b25, 36}, - {0x4b26, 37}, - {0x4b27, 38}, - {0x4b28, 39}, - {0x4b29, 40}, - {0x4b2a, 41}, - {0x4b2b, 42}, - {0x4b2c, 43}, - {0x4b2d, 44}, - {0x4b2e, 45}, - {0x4b2f, 46}, - {0x4b30, 47}, - {0x4b31, 48}, - {0x4b32, 49}, - {0x4b33, 50}, - {0x4b34, 51}, - {0x4b35, 52}, - {0x4b36, 53}, - {0x4b37, 54}, - {0x4b38, 55}, - {0x4b39, 56}, - {0x4b3a, 57}, - {0x4b3b, 58}, - {0x4b3c, 59}, - {0x4b3d, 60}, - {0x4b3e, 61}, - {0x4b3f, 62}, - {0x4b40, 63}, - {0x4b41, 64}, - {0x4b42, 65}, - {0x4b43, 66}, - {0x4b44, 67}, - {0x4b45, 68}, - {0x4b46, 69}, - {0x4b47, 70}, - {0x4b48, 71}, - {0x4b49, 72}, - {0x4b4a, 73}, - {0x4b4b, 74}, - {0x4b4c, 75}, - {0x4b4d, 76}, - {0x4b4e, 77}, - {0x4b4f, 78}, - {0x4b50, 79}, - {0x4b51, 80}, - {0x4b52, 81}, - {0x4b53, 82}, - {0x4b54, 83}, - {0x4b55, 84}, - {0x4b56, 85}, - {0x4b57, 86}, - {0x4b58, 87}, - {0x4b59, 88}, - {0x4b5a, 89}, - {0x4b5b, 90}, - {0x4b5c, 91}, - {0x4b5d, 92}, - {0x4b5e, 93}, - {0x4b5f, 94}, - {0x4b60, 95}, - {0x4b61, 96}, - {0x4b62, 97}, - {0x4b63, 98}, - {0x4b64, 99}, - {0x4b65, 100}, - {0x4b66, 101}, - {0x4b67, 102}, - {0x4b68, 103}, - {0x4b69, 104}, - {0x4b6a, 105}, - {0x4b6b, 106}, - {0x4b6c, 107}, - {0x4b6d, 108}, - {0x4b6e, 109}, - {0x4b6f, 110}, - {0x4b70, 111}, - {0x4b71, 112}, - {0x4b72, 113}, - {0x4b73, 114}, - {0x4b74, 115}, - {0x4b75, 116}, - {0x4b76, 117}, - {0x4b77, 118}, - {0x4b78, 119}, - {0x4b79, 120}, - {0x4b7a, 121}, - {0x4b7b, 122}, - {0x4b7c, 123}, - {0x4b7d, 124}, - {0x4b7e, 125}, - {0x4b7f, 126}, - {0x4b80, 127}, - {0x4b81, 128}, - {0x4b82, 129}, - {0x4b83, 130}, - {0x4b84, 131}, - {0x4b85, 132}, - {0x4b86, 133}, - {0x4b87, 134}, - {0x4b88, 135}, - {0x4b89, 136}, - {0x4b8a, 137}, - {0x4b8b, 138}, - {0x4b8c, 139}, - {0x4b8d, 140}, - {0x4b8e, 141}, - {0x4b8f, 142}, - {0x4b90, 143}, - {0x4b91, 144}, - {0x4b92, 145}, - {0x4b93, 146}, - {0x4b94, 147}, - {0x4b95, 148}, - {0x4b96, 149}, - {0x4b97, 150}, - {0x4b98, 151}, - {0x4b99, 152}, - {0x4b9a, 153}, - {0x4b9b, 154}, - {0x4b9c, 155}, - {0x4b9d, 156}, - {0x4b9e, 157}, - {0x4b9f, 158}, - {0x4ba0, 159}, - {0x4ba1, 160}, - {0x4ba2, 161}, - {0x4ba3, 162}, - {0x4ba4, 163}, - {0x4ba5, 164}, - {0x4ba6, 165}, - {0x4ba7, 166}, - {0x4ba8, 167}, - {0x4ba9, 168}, - {0x4baa, 169}, - {0x4bab, 170}, - {0x4bac, 171}, - {0x4bad, 172}, - {0x4bae, 173}, - {0x4baf, 174}, - {0x4bb0, 175}, - {0x4bb1, 176}, - {0x4bb2, 177}, - {0x4bb3, 178}, - {0x4bb4, 179}, - {0x4bb5, 180}, - {0x4bb6, 181}, - {0x4bb7, 182}, - {0x4bb8, 183}, - {0x4bb9, 184}, - {0x4bba, 185}, - {0x4bbb, 186}, - {0x4bbc, 187}, - {0x4bbd, 188}, - {0x4bbe, 189}, - {0x4bbf, 190}, - {0x4bc0, 191}, - {0x4bc1, 192}, - {0x4bc2, 193}, - {0x4bc3, 194}, - {0x4bc4, 195}, - {0x4bc5, 196}, - {0x4bc6, 197}, - {0x4bc7, 198}, - {0x4bc8, 199}, - {0x4bc9, 200}, - {0x4bca, 201}, - {0x4bcb, 202}, - {0x4bcc, 203}, - {0x4bcd, 204}, - {0x4bce, 205}, - {0x4bcf, 206}, - {0x4bd0, 207}, - {0x4bd1, 208}, - {0x4bd2, 209}, - {0x4bd3, 210}, - {0x4bd4, 211}, - {0x4bd5, 212}, - {0x4bd6, 213}, - {0x4bd7, 214}, - {0x4bd8, 215}, - {0x4bd9, 216}, - {0x4bda, 217}, - {0x4bdb, 218}, - {0x4bdc, 219}, - {0x4bdd, 220}, - {0x4bde, 221}, - {0x4bdf, 222}, - {0x4be0, 223}, - {0x4be1, 224}, - {0x4be2, 225}, - {0x4be3, 226}, - {0x4be4, 227}, - {0x4be5, 228}, - {0x4be6, 229}, - {0x4be7, 230}, - {0x4be8, 231}, - {0x4be9, 232}, - {0x4bea, 233}, - {0x4beb, 234}, - {0x4bec, 235}, - {0x4bed, 236}, - {0x4bee, 237}, - {0x4bef, 238}, - {0x4bf0, 239}, - {0x4bf1, 240}, - {0x4bf2, 241}, - {0x4bf3, 242}, - {0x4bf4, 243}, - {0x4bf5, 244}, - {0x4bf6, 245}, - {0x4bf7, 246}, - {0x4bf8, 247}, - {0x4bf9, 248}, - {0x4bfa, 249}, - {0x4bfb, 250}, - {0x4bfc, 251}, - {0x4bfd, 252}, - {0x4bfe, 253}, - {0x4bff, 254}, - {0x4c01, 0}, - {0x4c02, 1}, - {0x4c03, 2}, - {0x4c04, 3}, - {0x4c05, 4}, - {0x4c06, 5}, - {0x4c07, 6}, - {0x4c08, 7}, - {0x4c09, 8}, - {0x4c0a, 9}, - {0x4c0b, 10}, - {0x4c0c, 11}, - {0x4c0d, 12}, - {0x4c0e, 13}, - {0x4c0f, 14}, - {0x4c10, 15}, - {0x4c11, 16}, - {0x4c12, 17}, - {0x4c13, 18}, - {0x4c14, 19}, - {0x4c15, 20}, - {0x4c16, 21}, - {0x4c17, 22}, - {0x4c18, 23}, - {0x4c19, 24}, - {0x4c1a, 25}, - {0x4c1b, 26}, - {0x4c1c, 27}, - {0x4c1d, 28}, - {0x4c1e, 29}, - {0x4c1f, 30}, - {0x4c20, 31}, - {0x4c21, 32}, - {0x4c22, 33}, - {0x4c23, 34}, - {0x4c24, 35}, - {0x4c25, 36}, - {0x4c26, 37}, - {0x4c27, 38}, - {0x4c28, 39}, - {0x4c29, 40}, - {0x4c2a, 41}, - {0x4c2b, 42}, - {0x4c2c, 43}, - {0x4c2d, 44}, - {0x4c2e, 45}, - {0x4c2f, 46}, - {0x4c30, 47}, - {0x4c31, 48}, - {0x4c32, 49}, - {0x4c33, 50}, - {0x4c34, 51}, - {0x4c35, 52}, - {0x4c36, 53}, - {0x4c37, 54}, - {0x4c38, 55}, - {0x4c39, 56}, - {0x4c3a, 57}, - {0x4c3b, 58}, - {0x4c3c, 59}, - {0x4c3d, 60}, - {0x4c3e, 61}, - {0x4c3f, 62}, - {0x4c40, 63}, - {0x4c41, 64}, - {0x4c42, 65}, - {0x4c43, 66}, - {0x4c44, 67}, - {0x4c45, 68}, - {0x4c46, 69}, - {0x4c47, 70}, - {0x4c48, 71}, - {0x4c49, 72}, - {0x4c4a, 73}, - {0x4c4b, 74}, - {0x4c4c, 75}, - {0x4c4d, 76}, - {0x4c4e, 77}, - {0x4c4f, 78}, - {0x4c50, 79}, - {0x4c51, 80}, - {0x4c52, 81}, - {0x4c53, 82}, - {0x4c54, 83}, - {0x4c55, 84}, - {0x4c56, 85}, - {0x4c57, 86}, - {0x4c58, 87}, - {0x4c59, 88}, - {0x4c5a, 89}, - {0x4c5b, 90}, - {0x4c5c, 91}, - {0x4c5d, 92}, - {0x4c5e, 93}, - {0x4c5f, 94}, - {0x4c60, 95}, - {0x4c61, 96}, - {0x4c62, 97}, - {0x4c63, 98}, - {0x4c64, 99}, - {0x4c65, 100}, - {0x4c66, 101}, - {0x4c67, 102}, - {0x4c68, 103}, - {0x4c69, 104}, - {0x4c6a, 105}, - {0x4c6b, 106}, - {0x4c6c, 107}, - {0x4c6d, 108}, - {0x4c6e, 109}, - {0x4c6f, 110}, - {0x4c70, 111}, - {0x4c71, 112}, - {0x4c72, 113}, - {0x4c73, 114}, - {0x4c74, 115}, - {0x4c75, 116}, - {0x4c76, 117}, - {0x4c79, 0}, - {0x4c7a, 1}, - {0x4c7b, 2}, - {0x4c7c, 3}, - {0x4c7d, 4}, - {0x4c7e, 5}, - {0x4c7f, 6}, - {0x4c80, 7}, - {0x4c81, 8}, - {0x4c82, 9}, - {0x4c83, 10}, - {0x4c84, 11}, - {0x4c85, 12}, - {0x4c86, 13}, - {0x4c87, 14}, - {0x4c88, 15}, - {0x4c89, 16}, - {0x4c8a, 17}, - {0x4c8b, 18}, - {0x4c8c, 19}, - {0x4c8d, 20}, - {0x4c8e, 21}, - {0x4c8f, 22}, - {0x4c90, 23}, - {0x4c91, 24}, - {0x4c92, 25}, - {0x4c93, 26}, - {0x4c94, 27}, - {0x4c95, 28}, - {0x4c96, 29}, - {0x4c97, 30}, - {0x4c98, 31}, - {0x4c99, 32}, - {0x4c9a, 33}, - {0x4c9b, 34}, - {0x4c9c, 35}, - {0x4c9d, 36}, - {0x4c9e, 37}, - {0x4ca0, 0}, - {0x4ca1, 1}, - {0x4ca5, 0}, - {0x4ca6, 1}, - {0x4ca7, 2}, - {0x4ca8, 3}, - {0x4ca9, 4}, - {0x4caa, 5}, - {0x4cab, 6}, - {0x4cac, 7}, - {0x4cad, 8}, - {0x4cae, 9}, - {0x4caf, 10}, - {0x4cb0, 11}, - {0x4cb1, 12}, - {0x4cb2, 13}, - {0x4cb3, 14}, - {0x4cb4, 15}, - {0x4cb5, 16}, - {0x4cb6, 17}, - {0x4cb7, 18}, - {0x4cb8, 19}, - {0x4cb9, 20}, - {0x4cba, 21}, - {0x4cbb, 22}, - {0x4cbc, 23}, - {0x4cbd, 24}, - {0x4cbe, 25}, - {0x4cbf, 26}, - {0x4cc0, 27}, - {0x4cc1, 28}, - {0x4cc2, 29}, - {0x4cc3, 30}, - {0x4cc4, 31}, - {0x4cc5, 32}, - {0x4cc6, 33}, - {0x4cc7, 34}, - {0x4cc8, 35}, - {0x4cc9, 36}, - {0x4cca, 37}, - {0x4ccb, 38}, - {0x4ccc, 39}, - {0x4ccd, 40}, - {0x4cce, 41}, - {0x4ccf, 42}, - {0x4cd0, 43}, - {0x4cd1, 44}, - {0x4cd2, 45}, - {0x4cd3, 46}, - {0x4cd4, 47}, - {0x4cd5, 48}, - {0x4cd6, 49}, - {0x4cd7, 50}, - {0x4cd8, 51}, - {0x4cd9, 52}, - {0x4cda, 53}, - {0x4cdb, 54}, - {0x4cdc, 55}, - {0x4cdd, 56}, - {0x4cde, 57}, - {0x4cdf, 58}, - {0x4ce0, 59}, - {0x4ce1, 60}, - {0x4ce2, 61}, - {0x4ce3, 62}, - {0x4ce4, 63}, - {0x4ce5, 64}, - {0x4ce6, 65}, - {0x4ce7, 66}, - {0x4ce8, 67}, - {0x4ce9, 68}, - {0x4cea, 69}, - {0x4ceb, 70}, - {0x4cec, 71}, - {0x4ced, 72}, - {0x4cee, 73}, - {0x4cef, 74}, - {0x4cf0, 75}, - {0x4cf1, 76}, - {0x4cf2, 77}, - {0x4cf3, 78}, - {0x4cf4, 79}, - {0x4cf5, 80}, - {0x4cf6, 81}, - {0x4cf7, 82}, - {0x4cf8, 83}, - {0x4cf9, 84}, - {0x4cfa, 85}, - {0x4cfb, 86}, - {0x4cfc, 87}, - {0x4cfd, 88}, - {0x4cfe, 89}, - {0x4cff, 90}, - {0x4d01, 0}, - {0x4d02, 1}, - {0x4d03, 2}, - {0x4d04, 3}, - {0x4d05, 4}, - {0x4d06, 5}, - {0x4d07, 6}, - {0x4d08, 7}, - {0x4d09, 8}, - {0x4d0a, 9}, - {0x4d0b, 10}, - {0x4d0c, 11}, - {0x4d0d, 12}, - {0x4d0e, 13}, - {0x4d0f, 14}, - {0x4d10, 15}, - {0x4d11, 16}, - {0x4d12, 17}, - {0x4d14, 0}, - {0x4d15, 1}, - {0x4d16, 2}, - {0x4d17, 3}, - {0x4d18, 4}, - {0x4d19, 5}, - {0x4d1b, 0}, - {0x4d1c, 1}, - {0x4d1d, 2}, - {0x4d1e, 3}, - {0x4d1f, 4}, - {0x4d20, 5}, - {0x4d21, 6}, - {0x4d22, 7}, - {0x4d23, 8}, - {0x4d24, 9}, - {0x4d25, 10}, - {0x4d26, 11}, - {0x4d27, 12}, - {0x4d28, 13}, - {0x4d29, 14}, - {0x4d2a, 15}, - {0x4d2b, 16}, - {0x4d2c, 17}, - {0x4d2d, 18}, - {0x4d2e, 19}, - {0x4d2f, 20}, - {0x4d30, 21}, - {0x4d31, 22}, - {0x4d32, 23}, - {0x4d33, 24}, - {0x4d34, 25}, - {0x4d35, 26}, - {0x4d36, 27}, - {0x4d37, 28}, - {0x4d38, 29}, - {0x4d39, 30}, - {0x4d3a, 31}, - {0x4d3b, 32}, - {0x4d3c, 33}, - {0x4d3d, 34}, - {0x4d3e, 35}, - {0x4d3f, 36}, - {0x4d40, 37}, - {0x4d41, 38}, - {0x4d42, 39}, - {0x4d43, 40}, - {0x4d44, 41}, - {0x4d45, 42}, - {0x4d46, 43}, - {0x4d47, 44}, - {0x4d48, 45}, - {0x4d49, 46}, - {0x4d4a, 47}, - {0x4d4b, 48}, - {0x4d4c, 49}, - {0x4d4d, 50}, - {0x4d4e, 51}, - {0x4d4f, 52}, - {0x4d50, 53}, - {0x4d51, 54}, - {0x4d52, 55}, - {0x4d53, 56}, - {0x4d54, 57}, - {0x4d55, 58}, - {0x4d56, 59}, - {0x4d57, 60}, - {0x4d58, 61}, - {0x4d59, 62}, - {0x4d5a, 63}, - {0x4d5b, 64}, - {0x4d5c, 65}, - {0x4d5d, 66}, - {0x4d5e, 67}, - {0x4d5f, 68}, - {0x4d60, 69}, - {0x4d61, 70}, - {0x4d62, 71}, - {0x4d63, 72}, - {0x4d64, 73}, - {0x4d65, 74}, - {0x4d66, 75}, - {0x4d67, 76}, - {0x4d68, 77}, - {0x4d69, 78}, - {0x4d6a, 79}, - {0x4d6b, 80}, - {0x4d6c, 81}, - {0x4d6d, 82}, - {0x4d6e, 83}, - {0x4d6f, 84}, - {0x4d70, 85}, - {0x4d71, 86}, - {0x4d72, 87}, - {0x4d73, 88}, - {0x4d74, 89}, - {0x4d75, 90}, - {0x4d76, 91}, - {0x4d77, 92}, - {0x4d78, 93}, - {0x4d79, 94}, - {0x4d7a, 95}, - {0x4d7b, 96}, - {0x4d7c, 97}, - {0x4d7d, 98}, - {0x4d7e, 99}, - {0x4d7f, 100}, - {0x4d80, 101}, - {0x4d81, 102}, - {0x4d82, 103}, - {0x4d83, 104}, - {0x4d84, 105}, - {0x4d85, 106}, - {0x4d86, 107}, - {0x4d87, 108}, - {0x4d88, 109}, - {0x4d89, 110}, - {0x4d8a, 111}, - {0x4d8b, 112}, - {0x4d8c, 113}, - {0x4d8d, 114}, - {0x4d8e, 115}, - {0x4d8f, 116}, - {0x4d90, 117}, - {0x4d91, 118}, - {0x4d92, 119}, - {0x4d93, 120}, - {0x4d94, 121}, - {0x4d95, 122}, - {0x4d96, 123}, - {0x4d97, 124}, - {0x4d98, 125}, - {0x4d99, 126}, - {0x4d9a, 127}, - {0x4d9b, 128}, - {0x4d9c, 129}, - {0x4d9d, 130}, - {0x4d9e, 131}, - {0x4d9f, 132}, - {0x4da0, 133}, - {0x4da1, 134}, - {0x4da2, 135}, - {0x4da3, 136}, - {0x4da4, 137}, - {0x4da5, 138}, - {0x4da6, 139}, - {0x4da7, 140}, - {0x4da8, 141}, - {0x4da9, 142}, - {0x4daa, 143}, - {0x4dab, 144}, - {0x4dac, 145}, - {0x4dad, 146}, - {0x4db0, 0}, - {0x4db1, 1}, - {0x4db2, 2}, - {0x4db3, 3}, - {0x4db4, 4}, - {0x4db5, 5}, - {0x4e00, 4162}, - {0x4e01, 1504}, - {0x4e03, 3070}, - {0x4e05, 0}, - {0x4e06, 1}, - {0x4e07, 3747}, - {0x4e08, 4458}, - {0x4e09, 3288}, - {0x4e0a, 3336}, - {0x4e0b, 3887}, - {0x4e0c, 4696}, - {0x4e0d, 1154}, - {0x4e0e, 4304}, - {0x4e10, 4698}, - {0x4e11, 1304}, - {0x4e13, 4613}, - {0x4e14, 3151}, - {0x4e15, 4701}, - {0x4e16, 3415}, - {0x4e18, 3181}, - {0x4e19, 1124}, - {0x4e1a, 4156}, - {0x4e1b, 1367}, - {0x4e1c, 1514}, - {0x4e1d, 3508}, - {0x4e1e, 4703}, - {0x4e20, 0}, - {0x4e21, 1}, - {0x4e22, 1513}, - {0x4e24, 2566}, - {0x4e25, 4088}, - {0x4e27, 3294}, - {0x4e28, 4707}, - {0x4e2a, 1777}, - {0x4e2b, 4071}, - {0x4e2c, 5788}, - {0x4e2d, 4559}, - {0x4e2f, 0}, - {0x4e30, 1662}, - {0x4e32, 1329}, - {0x4e34, 2594}, - {0x4e36, 4722}, - {0x4e38, 3737}, - {0x4e39, 1413}, - {0x4e3a, 3769}, - {0x4e3b, 4598}, - {0x4e3d, 2529}, - {0x4e3e, 2312}, - {0x4e3f, 4709}, - {0x4e41, 0}, - {0x4e42, 1}, - {0x4e43, 2862}, - {0x4e45, 2290}, - {0x4e47, 4711}, - {0x4e48, 2745}, - {0x4e49, 4204}, - {0x4e4b, 4525}, - {0x4e4c, 3817}, - {0x4e4d, 4424}, - {0x4e4e, 1964}, - {0x4e4f, 1603}, - {0x4e50, 2497}, - {0x4e52, 3032}, - {0x4e53, 2963}, - {0x4e54, 3140}, - {0x4e56, 1837}, - {0x4e58, 1264}, - {0x4e59, 4185}, - {0x4e5b, 0}, - {0x4e5c, 4725}, - {0x4e5d, 2292}, - {0x4e5e, 3089}, - {0x4e5f, 4153}, - {0x4e60, 3869}, - {0x4e61, 3924}, - {0x4e63, 0}, - {0x4e64, 1}, - {0x4e65, 2}, - {0x4e66, 3456}, - {0x4e68, 0}, - {0x4e69, 4726}, - {0x4e6b, 0}, - {0x4e6c, 1}, - {0x4e6d, 2}, - {0x4e6e, 3}, - {0x4e6f, 4}, - {0x4e70, 2713}, - {0x4e71, 2681}, - {0x4e73, 3268}, - {0x4e75, 0}, - {0x4e76, 1}, - {0x4e77, 2}, - {0x4e78, 3}, - {0x4e79, 4}, - {0x4e7a, 5}, - {0x4e7b, 6}, - {0x4e7c, 7}, - {0x4e7d, 8}, - {0x4e7e, 3113}, - {0x4e80, 0}, - {0x4e81, 1}, - {0x4e82, 8281}, - {0x4e84, 0}, - {0x4e85, 1}, - {0x4e86, 2580}, - {0x4e88, 4301}, - {0x4e89, 4506}, - {0x4e8b, 3417}, - {0x4e8c, 1597}, - {0x4e8d, 4695}, - {0x4e8e, 4287}, - {0x4e8f, 2436}, - {0x4e91, 4361}, - {0x4e92, 1978}, - {0x4e93, 4727}, - {0x4e94, 3828}, - {0x4e95, 2269}, - {0x4e97, 0}, - {0x4e98, 4702}, - {0x4e9a, 4080}, - {0x4e9b, 3956}, - {0x4e9d, 0}, - {0x4e9e, 8689}, - {0x4e9f, 4723}, - {0x4ea0, 4867}, - {0x4ea1, 3751}, - {0x4ea2, 2375}, - {0x4ea4, 2188}, - {0x4ea5, 1884}, - {0x4ea6, 4199}, - {0x4ea7, 1217}, - {0x4ea8, 1943}, - {0x4ea9, 2841}, - {0x4eab, 3930}, - {0x4eac, 2264}, - {0x4ead, 3669}, - {0x4eae, 2570}, - {0x4eb0, 0}, - {0x4eb1, 1}, - {0x4eb2, 3156}, - {0x4eb3, 4869}, - {0x4eb5, 4872}, - {0x4eb7, 0}, - {0x4eb8, 1}, - {0x4eb9, 2}, - {0x4eba, 3238}, - {0x4ebb, 4767}, - {0x4ebd, 0}, - {0x4ebe, 1}, - {0x4ebf, 4193}, - {0x4ec0, 3401}, - {0x4ec1, 3237}, - {0x4ec2, 4770}, - {0x4ec3, 4768}, - {0x4ec4, 4732}, - {0x4ec5, 2247}, - {0x4ec6, 3052}, - {0x4ec7, 1301}, - {0x4ec9, 4769}, - {0x4eca, 2242}, - {0x4ecb, 2234}, - {0x4ecd, 3247}, - {0x4ece, 1366}, - {0x4ed0, 0}, - {0x4ed1, 2687}, - {0x4ed3, 1181}, - {0x4ed4, 4653}, - {0x4ed5, 3426}, - {0x4ed6, 3568}, - {0x4ed7, 4461}, - {0x4ed8, 1713}, - {0x4ed9, 3894}, - {0x4edb, 0}, - {0x4edc, 1}, - {0x4edd, 4846}, - {0x4ede, 4774}, - {0x4edf, 3111}, - {0x4ee1, 4772}, - {0x4ee3, 1405}, - {0x4ee4, 2615}, - {0x4ee5, 4187}, - {0x4ee7, 0}, - {0x4ee8, 4771}, - {0x4eea, 4174}, - {0x4eeb, 4773}, - {0x4eec, 2764}, - {0x4eee, 0}, - {0x4eef, 1}, - {0x4ef0, 4127}, - {0x4ef2, 4568}, - {0x4ef3, 4776}, - {0x4ef5, 4779}, - {0x4ef6, 2161}, - {0x4ef7, 2126}, - {0x4ef9, 0}, - {0x4efa, 1}, - {0x4efb, 3241}, - {0x4efd, 1658}, - {0x4eff, 1631}, - {0x4f01, 3090}, - {0x4f03, 0}, - {0x4f04, 1}, - {0x4f05, 2}, - {0x4f06, 3}, - {0x4f07, 4}, - {0x4f08, 5}, - {0x4f09, 4782}, - {0x4f0a, 4168}, - {0x4f0c, 0}, - {0x4f0d, 3832}, - {0x4f0e, 2098}, - {0x4f0f, 1689}, - {0x4f10, 1602}, - {0x4f11, 4008}, - {0x4f13, 0}, - {0x4f14, 1}, - {0x4f15, 2}, - {0x4f16, 3}, - {0x4f17, 4569}, - {0x4f18, 4266}, - {0x4f19, 2052}, - {0x4f1a, 2038}, - {0x4f1b, 4775}, - {0x4f1d, 0}, - {0x4f1e, 3290}, - {0x4f1f, 3775}, - {0x4f20, 1326}, - {0x4f22, 4777}, - {0x4f24, 3332}, - {0x4f25, 4780}, - {0x4f26, 2686}, - {0x4f27, 4781}, - {0x4f29, 0}, - {0x4f2a, 3776}, - {0x4f2b, 4783}, - {0x4f2d, 0}, - {0x4f2e, 1}, - {0x4f2f, 1141}, - {0x4f30, 1817}, - {0x4f32, 4791}, - {0x4f34, 1012}, - {0x4f36, 2607}, - {0x4f38, 3365}, - {0x4f3a, 3514}, - {0x4f3c, 3515}, - {0x4f3d, 4792}, - {0x4f3f, 0}, - {0x4f40, 1}, - {0x4f41, 2}, - {0x4f42, 3}, - {0x4f43, 1481}, - {0x4f45, 0}, - {0x4f46, 1420}, - {0x4f48, 0}, - {0x4f49, 1}, - {0x4f4a, 2}, - {0x4f4b, 3}, - {0x4f4c, 4}, - {0x4f4d, 3786}, - {0x4f4e, 1454}, - {0x4f4f, 4606}, - {0x4f50, 4689}, - {0x4f51, 4280}, - {0x4f53, 3640}, - {0x4f55, 1925}, - {0x4f57, 4790}, - {0x4f58, 4848}, - {0x4f59, 4293}, - {0x4f5a, 4787}, - {0x4f5b, 1677}, - {0x4f5c, 4692}, - {0x4f5d, 4788}, - {0x4f5e, 4784}, - {0x4f5f, 4789}, - {0x4f60, 2886}, - {0x4f62, 0}, - {0x4f63, 4251}, - {0x4f64, 4778}, - {0x4f65, 4849}, - {0x4f67, 4785}, - {0x4f69, 2982}, - {0x4f6b, 0}, - {0x4f6c, 2491}, - {0x4f6e, 0}, - {0x4f6f, 4121}, - {0x4f70, 998}, - {0x4f72, 0}, - {0x4f73, 2116}, - {0x4f74, 4794}, - {0x4f76, 4793}, - {0x4f78, 0}, - {0x4f79, 1}, - {0x4f7a, 2}, - {0x4f7b, 4800}, - {0x4f7c, 4802}, - {0x4f7e, 4799}, - {0x4f7f, 3408}, - {0x4f81, 0}, - {0x4f82, 1}, - {0x4f83, 4797}, - {0x4f84, 4533}, - {0x4f86, 8178}, - {0x4f88, 1283}, - {0x4f89, 4796}, - {0x4f8b, 2536}, - {0x4f8d, 3427}, - {0x4f8f, 4798}, - {0x4f91, 4795}, - {0x4f93, 0}, - {0x4f94, 4804}, - {0x4f96, 8285}, - {0x4f97, 1520}, - {0x4f99, 0}, - {0x4f9a, 1}, - {0x4f9b, 1794}, - {0x4f9d, 4167}, - {0x4f9f, 0}, - {0x4fa0, 3885}, - {0x4fa2, 0}, - {0x4fa3, 2665}, - {0x4fa5, 2197}, - {0x4fa6, 4493}, - {0x4fa7, 1191}, - {0x4fa8, 3141}, - {0x4fa9, 2424}, - {0x4faa, 4801}, - {0x4fac, 4803}, - {0x4fae, 3833}, - {0x4faf, 1957}, - {0x4fb1, 0}, - {0x4fb2, 1}, - {0x4fb3, 2}, - {0x4fb4, 3}, - {0x4fb5, 3155}, - {0x4fb7, 0}, - {0x4fb8, 1}, - {0x4fb9, 2}, - {0x4fba, 3}, - {0x4fbb, 4}, - {0x4fbc, 5}, - {0x4fbd, 6}, - {0x4fbe, 7}, - {0x4fbf, 1100}, - {0x4fc1, 0}, - {0x4fc2, 9884}, - {0x4fc3, 1372}, - {0x4fc4, 1580}, - {0x4fc5, 4808}, - {0x4fc7, 0}, - {0x4fc8, 1}, - {0x4fc9, 2}, - {0x4fca, 2350}, - {0x4fcc, 0}, - {0x4fcd, 1}, - {0x4fce, 4850}, - {0x4fcf, 3147}, - {0x4fd0, 2537}, - {0x4fd1, 4812}, - {0x4fd3, 0}, - {0x4fd4, 1}, - {0x4fd5, 2}, - {0x4fd6, 3}, - {0x4fd7, 3532}, - {0x4fd8, 1690}, - {0x4fda, 4809}, - {0x4fdc, 4811}, - {0x4fdd, 1036}, - {0x4fde, 4294}, - {0x4fdf, 4813}, - {0x4fe0, 8629}, - {0x4fe1, 3984}, - {0x4fe3, 4810}, - {0x4fe5, 0}, - {0x4fe6, 4805}, - {0x4fe8, 4806}, - {0x4fe9, 2546}, - {0x4fea, 4807}, - {0x4fec, 0}, - {0x4fed, 2150}, - {0x4fee, 4009}, - {0x4fef, 1700}, - {0x4ff1, 2322}, - {0x4ff3, 4817}, - {0x4ff5, 0}, - {0x4ff6, 1}, - {0x4ff7, 2}, - {0x4ff8, 4814}, - {0x4ffa, 958}, - {0x4ffc, 0}, - {0x4ffd, 1}, - {0x4ffe, 4822}, - {0x5000, 8908}, - {0x5002, 0}, - {0x5003, 1}, - {0x5004, 2}, - {0x5005, 3}, - {0x5006, 8214}, - {0x5008, 0}, - {0x5009, 7778}, - {0x500b, 7968}, - {0x500c, 4824}, - {0x500d, 1055}, - {0x500f, 4819}, - {0x5011, 8319}, - {0x5012, 1434}, - {0x5014, 2338}, - {0x5016, 0}, - {0x5017, 1}, - {0x5018, 3611}, - {0x5019, 1961}, - {0x501a, 4183}, - {0x501c, 4823}, - {0x501e, 0}, - {0x501f, 2233}, - {0x5021, 1232}, - {0x5023, 0}, - {0x5024, 1}, - {0x5025, 4825}, - {0x5026, 2330}, - {0x5028, 4826}, - {0x5029, 4815}, - {0x502a, 2882}, - {0x502b, 8284}, - {0x502c, 4818}, - {0x502d, 4821}, - {0x502e, 4820}, - {0x5030, 0}, - {0x5031, 1}, - {0x5032, 2}, - {0x5033, 3}, - {0x5034, 4}, - {0x5035, 5}, - {0x5036, 6}, - {0x5037, 7}, - {0x5038, 8}, - {0x5039, 9}, - {0x503a, 4431}, - {0x503c, 4532}, - {0x503e, 3168}, - {0x5040, 0}, - {0x5041, 1}, - {0x5042, 2}, - {0x5043, 4828}, - {0x5045, 0}, - {0x5046, 1}, - {0x5047, 2124}, - {0x5048, 4830}, - {0x5049, 8596}, - {0x504b, 0}, - {0x504c, 4816}, - {0x504e, 4831}, - {0x504f, 3018}, - {0x5051, 0}, - {0x5052, 1}, - {0x5053, 2}, - {0x5054, 3}, - {0x5055, 4829}, - {0x5057, 0}, - {0x5058, 1}, - {0x5059, 2}, - {0x505a, 4691}, - {0x505c, 3668}, - {0x505e, 0}, - {0x505f, 1}, - {0x5060, 2}, - {0x5061, 3}, - {0x5062, 4}, - {0x5063, 5}, - {0x5064, 6}, - {0x5065, 2162}, - {0x5067, 0}, - {0x5068, 1}, - {0x5069, 2}, - {0x506a, 3}, - {0x506b, 4}, - {0x506c, 4832}, - {0x506e, 0}, - {0x506f, 1}, - {0x5070, 2}, - {0x5071, 3}, - {0x5072, 4}, - {0x5073, 5}, - {0x5074, 7781}, - {0x5075, 8833}, - {0x5076, 2941}, - {0x5077, 3686}, - {0x5079, 0}, - {0x507a, 1}, - {0x507b, 4833}, - {0x507d, 0}, - {0x507e, 4827}, - {0x507f, 1226}, - {0x5080, 2443}, - {0x5082, 0}, - {0x5083, 1}, - {0x5084, 2}, - {0x5085, 1712}, - {0x5087, 0}, - {0x5088, 2535}, - {0x508a, 0}, - {0x508b, 1}, - {0x508c, 2}, - {0x508d, 1027}, - {0x508f, 0}, - {0x5090, 1}, - {0x5091, 2}, - {0x5092, 3}, - {0x5093, 4}, - {0x5094, 5}, - {0x5095, 6}, - {0x5096, 8909}, - {0x5098, 8458}, - {0x5099, 7742}, - {0x509b, 0}, - {0x509c, 1}, - {0x509d, 2}, - {0x509e, 3}, - {0x509f, 4}, - {0x50a0, 5}, - {0x50a1, 6}, - {0x50a2, 9855}, - {0x50a3, 1401}, - {0x50a5, 4834}, - {0x50a7, 4835}, - {0x50a8, 1317}, - {0x50a9, 4836}, - {0x50ab, 0}, - {0x50ac, 1378}, - {0x50ad, 8750}, - {0x50af, 0}, - {0x50b0, 1}, - {0x50b1, 2}, - {0x50b2, 972}, - {0x50b3, 7830}, - {0x50b4, 8907}, - {0x50b5, 8812}, - {0x50b7, 8471}, - {0x50b9, 0}, - {0x50ba, 4837}, - {0x50bb, 3310}, - {0x50bd, 0}, - {0x50be, 8424}, - {0x50c0, 0}, - {0x50c1, 1}, - {0x50c2, 8916}, - {0x50c4, 0}, - {0x50c5, 8121}, - {0x50c7, 0}, - {0x50c8, 1}, - {0x50c9, 8920}, - {0x50cb, 0}, - {0x50cc, 1}, - {0x50cd, 2}, - {0x50ce, 3}, - {0x50cf, 3934}, - {0x50d1, 8415}, - {0x50d3, 0}, - {0x50d4, 1}, - {0x50d5, 8386}, - {0x50d6, 4838}, - {0x50d8, 0}, - {0x50d9, 1}, - {0x50da, 2574}, - {0x50dc, 0}, - {0x50dd, 1}, - {0x50de, 8597}, - {0x50e0, 0}, - {0x50e1, 1}, - {0x50e2, 2}, - {0x50e3, 3}, - {0x50e4, 4}, - {0x50e5, 8108}, - {0x50e6, 4842}, - {0x50e7, 3303}, - {0x50e8, 8915}, - {0x50ea, 0}, - {0x50eb, 1}, - {0x50ec, 4841}, - {0x50ed, 4840}, - {0x50ee, 4843}, - {0x50f0, 0}, - {0x50f1, 1}, - {0x50f2, 2}, - {0x50f3, 3536}, - {0x50f5, 2170}, - {0x50f7, 0}, - {0x50f8, 1}, - {0x50f9, 8065}, - {0x50fb, 3014}, - {0x50fd, 0}, - {0x50fe, 1}, - {0x50ff, 2}, - {0x5100, 8720}, - {0x5102, 8911}, - {0x5104, 8723}, - {0x5106, 4839}, - {0x5107, 4844}, - {0x5108, 8164}, - {0x5109, 8080}, - {0x510b, 4845}, - {0x510d, 0}, - {0x510e, 1}, - {0x510f, 2}, - {0x5110, 8918}, - {0x5112, 3264}, - {0x5114, 8912}, - {0x5115, 8910}, - {0x5117, 0}, - {0x5118, 9857}, - {0x511a, 0}, - {0x511b, 1}, - {0x511c, 2}, - {0x511d, 3}, - {0x511e, 4}, - {0x511f, 7798}, - {0x5121, 2503}, - {0x5123, 0}, - {0x5124, 1}, - {0x5125, 2}, - {0x5126, 3}, - {0x5127, 4}, - {0x5128, 5}, - {0x5129, 6}, - {0x512a, 8753}, - {0x512c, 0}, - {0x512d, 1}, - {0x512e, 2}, - {0x512f, 3}, - {0x5130, 4}, - {0x5131, 5}, - {0x5132, 7827}, - {0x5134, 0}, - {0x5135, 1}, - {0x5136, 2}, - {0x5137, 8914}, - {0x5139, 0}, - {0x513a, 8919}, - {0x513b, 8917}, - {0x513c, 8913}, - {0x513e, 0}, - {0x513f, 1592}, - {0x5140, 4697}, - {0x5141, 4365}, - {0x5143, 4333}, - {0x5144, 4001}, - {0x5145, 1289}, - {0x5146, 4472}, - {0x5148, 3893}, - {0x5149, 1851}, - {0x514b, 2392}, - {0x514d, 2791}, - {0x514f, 0}, - {0x5150, 1}, - {0x5151, 1553}, - {0x5152, 7909}, - {0x5154, 3700}, - {0x5155, 4866}, - {0x5156, 4868}, - {0x5158, 0}, - {0x5159, 1}, - {0x515a, 1428}, - {0x515c, 1524}, - {0x515e, 0}, - {0x515f, 1}, - {0x5160, 2}, - {0x5161, 3}, - {0x5162, 2259}, - {0x5164, 0}, - {0x5165, 3270}, - {0x5167, 0}, - {0x5168, 3206}, - {0x5169, 8229}, - {0x516b, 982}, - {0x516c, 1796}, - {0x516d, 2626}, - {0x516e, 4854}, - {0x5170, 2471}, - {0x5171, 1803}, - {0x5173, 1841}, - {0x5174, 3990}, - {0x5175, 1121}, - {0x5176, 3075}, - {0x5177, 2318}, - {0x5178, 1477}, - {0x5179, 4645}, - {0x517b, 4129}, - {0x517c, 2137}, - {0x517d, 3445}, - {0x517f, 0}, - {0x5180, 2096}, - {0x5181, 4858}, - {0x5182, 4765}, - {0x5184, 0}, - {0x5185, 2877}, - {0x5187, 0}, - {0x5188, 1743}, - {0x5189, 3224}, - {0x518b, 0}, - {0x518c, 1192}, - {0x518d, 4380}, - {0x518f, 0}, - {0x5190, 1}, - {0x5191, 2}, - {0x5192, 2741}, - {0x5194, 0}, - {0x5195, 2790}, - {0x5196, 4884}, - {0x5197, 3258}, - {0x5199, 3967}, - {0x519b, 2347}, - {0x519c, 2922}, - {0x519e, 0}, - {0x519f, 1}, - {0x51a0, 1843}, - {0x51a2, 4885}, - {0x51a4, 4332}, - {0x51a5, 4886}, - {0x51a7, 0}, - {0x51a8, 1}, - {0x51a9, 2}, - {0x51aa, 3}, - {0x51ab, 4879}, - {0x51ac, 1515}, - {0x51ae, 0}, - {0x51af, 1672}, - {0x51b0, 1122}, - {0x51b1, 4880}, - {0x51b2, 1290}, - {0x51b3, 2341}, - {0x51b5, 2435}, - {0x51b6, 4152}, - {0x51b7, 2511}, - {0x51b9, 0}, - {0x51ba, 1}, - {0x51bb, 1522}, - {0x51bc, 4882}, - {0x51bd, 4881}, - {0x51bf, 0}, - {0x51c0, 2282}, - {0x51c2, 0}, - {0x51c3, 1}, - {0x51c4, 3071}, - {0x51c6, 4633}, - {0x51c7, 4883}, - {0x51c9, 2562}, - {0x51cb, 1491}, - {0x51cc, 2609}, - {0x51cd, 7887}, - {0x51cf, 2152}, - {0x51d1, 1368}, - {0x51d3, 0}, - {0x51d4, 1}, - {0x51d5, 2}, - {0x51d6, 3}, - {0x51d7, 4}, - {0x51d8, 5}, - {0x51d9, 6}, - {0x51da, 7}, - {0x51db, 2598}, - {0x51dd, 2912}, - {0x51df, 0}, - {0x51e0, 2091}, - {0x51e1, 1615}, - {0x51e3, 0}, - {0x51e4, 1676}, - {0x51e6, 0}, - {0x51e7, 1}, - {0x51e8, 2}, - {0x51e9, 3}, - {0x51ea, 4}, - {0x51eb, 4864}, - {0x51ed, 3037}, - {0x51ef, 2362}, - {0x51f0, 2016}, - {0x51f1, 8153}, - {0x51f3, 1451}, - {0x51f5, 5017}, - {0x51f6, 4002}, - {0x51f8, 3690}, - {0x51f9, 967}, - {0x51fa, 1307}, - {0x51fb, 2060}, - {0x51fc, 5018}, - {0x51fd, 1894}, - {0x51ff, 4391}, - {0x5200, 1431}, - {0x5201, 1492}, - {0x5202, 4748}, - {0x5203, 3243}, - {0x5205, 0}, - {0x5206, 1651}, - {0x5207, 3149}, - {0x5208, 4749}, - {0x520a, 2364}, - {0x520c, 0}, - {0x520d, 5003}, - {0x520e, 4750}, - {0x5210, 0}, - {0x5211, 3991}, - {0x5212, 1987}, - {0x5214, 0}, - {0x5215, 1}, - {0x5216, 6510}, - {0x5217, 2585}, - {0x5218, 2622}, - {0x5219, 4405}, - {0x521a, 1744}, - {0x521b, 1335}, - {0x521d, 1306}, - {0x521f, 0}, - {0x5220, 3319}, - {0x5222, 0}, - {0x5223, 1}, - {0x5224, 2961}, - {0x5226, 0}, - {0x5227, 1}, - {0x5228, 2970}, - {0x5229, 2534}, - {0x522b, 1113}, - {0x522d, 4751}, - {0x522e, 1831}, - {0x5230, 1438}, - {0x5232, 0}, - {0x5233, 4752}, - {0x5235, 0}, - {0x5236, 4549}, - {0x5237, 3479}, - {0x5238, 3210}, - {0x5239, 3307}, - {0x523a, 1359}, - {0x523b, 2393}, - {0x523d, 1869}, - {0x523f, 4753}, - {0x5240, 4754}, - {0x5241, 1574}, - {0x5242, 2100}, - {0x5243, 3645}, - {0x5244, 8904}, - {0x5246, 0}, - {0x5247, 8803}, - {0x5249, 0}, - {0x524a, 3940}, - {0x524b, 9859}, - {0x524c, 4755}, - {0x524d, 3117}, - {0x524f, 0}, - {0x5250, 1833}, - {0x5251, 2164}, - {0x5253, 0}, - {0x5254, 3633}, - {0x5256, 3049}, - {0x5258, 0}, - {0x5259, 1}, - {0x525a, 2}, - {0x525b, 7959}, - {0x525c, 4758}, - {0x525e, 4756}, - {0x5260, 0}, - {0x5261, 4757}, - {0x5263, 0}, - {0x5264, 1}, - {0x5265, 1033}, - {0x5267, 2326}, - {0x5269, 3386}, - {0x526a, 2151}, - {0x526c, 0}, - {0x526d, 1}, - {0x526e, 7979}, - {0x526f, 1708}, - {0x5271, 0}, - {0x5272, 1769}, - {0x5274, 8906}, - {0x5275, 7833}, - {0x5277, 0}, - {0x5278, 1}, - {0x5279, 2}, - {0x527a, 3}, - {0x527b, 4}, - {0x527c, 5}, - {0x527d, 4760}, - {0x527f, 2204}, - {0x5281, 4762}, - {0x5282, 4761}, - {0x5283, 8015}, - {0x5285, 0}, - {0x5286, 1}, - {0x5287, 8143}, - {0x5288, 3005}, - {0x5289, 8246}, - {0x528a, 7994}, - {0x528c, 8905}, - {0x528d, 8089}, - {0x528f, 0}, - {0x5290, 4763}, - {0x5291, 8053}, - {0x5293, 4764}, - {0x5295, 0}, - {0x5296, 1}, - {0x5297, 2}, - {0x5298, 3}, - {0x5299, 4}, - {0x529a, 5}, - {0x529b, 2543}, - {0x529d, 3211}, - {0x529e, 1015}, - {0x529f, 1791}, - {0x52a0, 2118}, - {0x52a1, 3840}, - {0x52a2, 5005}, - {0x52a3, 2588}, - {0x52a5, 0}, - {0x52a6, 1}, - {0x52a7, 2}, - {0x52a8, 1518}, - {0x52a9, 4601}, - {0x52aa, 2925}, - {0x52ab, 2218}, - {0x52ac, 5006}, - {0x52ad, 5007}, - {0x52af, 0}, - {0x52b0, 1}, - {0x52b1, 2531}, - {0x52b2, 2257}, - {0x52b3, 2488}, - {0x52b5, 0}, - {0x52b6, 1}, - {0x52b7, 2}, - {0x52b8, 3}, - {0x52b9, 4}, - {0x52ba, 5}, - {0x52bb, 6}, - {0x52bc, 7}, - {0x52bd, 8}, - {0x52be, 5008}, - {0x52bf, 3421}, - {0x52c1, 8126}, - {0x52c3, 1137}, - {0x52c5, 0}, - {0x52c6, 1}, - {0x52c7, 4263}, - {0x52c9, 2792}, - {0x52cb, 4052}, - {0x52cd, 0}, - {0x52ce, 1}, - {0x52cf, 2}, - {0x52d0, 5010}, - {0x52d2, 2496}, - {0x52d4, 0}, - {0x52d5, 7885}, - {0x52d6, 5011}, - {0x52d8, 2366}, - {0x52d9, 8617}, - {0x52db, 8678}, - {0x52dd, 8487}, - {0x52de, 8195}, - {0x52df, 2847}, - {0x52e1, 0}, - {0x52e2, 8498}, - {0x52e4, 3159}, - {0x52e6, 0}, - {0x52e7, 1}, - {0x52e8, 2}, - {0x52e9, 3}, - {0x52ea, 4}, - {0x52eb, 5}, - {0x52ec, 6}, - {0x52ed, 7}, - {0x52ee, 8}, - {0x52ef, 9}, - {0x52f0, 5012}, - {0x52f1, 8995}, - {0x52f3, 0}, - {0x52f4, 1}, - {0x52f5, 8209}, - {0x52f7, 0}, - {0x52f8, 8437}, - {0x52f9, 4860}, - {0x52fa, 3344}, - {0x52fc, 0}, - {0x52fd, 1}, - {0x52fe, 1805}, - {0x52ff, 3839}, - {0x5300, 4363}, - {0x5302, 0}, - {0x5303, 1}, - {0x5304, 2}, - {0x5305, 1031}, - {0x5306, 1365}, - {0x5308, 4004}, - {0x530a, 0}, - {0x530b, 1}, - {0x530c, 2}, - {0x530d, 4861}, - {0x530f, 5301}, - {0x5310, 4863}, - {0x5312, 0}, - {0x5313, 1}, - {0x5314, 2}, - {0x5315, 4710}, - {0x5316, 1988}, - {0x5317, 1050}, - {0x5319, 1276}, - {0x531a, 4740}, - {0x531c, 0}, - {0x531d, 4372}, - {0x531f, 0}, - {0x5320, 2180}, - {0x5321, 2428}, - {0x5323, 3880}, - {0x5325, 0}, - {0x5326, 4742}, - {0x5328, 0}, - {0x5329, 1}, - {0x532a, 1640}, - {0x532c, 0}, - {0x532d, 8901}, - {0x532e, 4743}, - {0x532f, 8030}, - {0x5331, 8902}, - {0x5333, 0}, - {0x5334, 1}, - {0x5335, 2}, - {0x5336, 3}, - {0x5337, 4}, - {0x5338, 5}, - {0x5339, 3012}, - {0x533a, 3189}, - {0x533b, 4164}, - {0x533d, 0}, - {0x533e, 4744}, - {0x533f, 2887}, - {0x5340, 8431}, - {0x5341, 3397}, - {0x5343, 3108}, - {0x5345, 4700}, - {0x5347, 3382}, - {0x5348, 3830}, - {0x5349, 2033}, - {0x534a, 1014}, - {0x534c, 0}, - {0x534d, 1}, - {0x534e, 1983}, - {0x534f, 3960}, - {0x5351, 1049}, - {0x5352, 4673}, - {0x5353, 4636}, - {0x5354, 8656}, - {0x5355, 1414}, - {0x5356, 2715}, - {0x5357, 2866}, - {0x5359, 0}, - {0x535a, 1136}, - {0x535c, 1150}, - {0x535e, 1102}, - {0x535f, 5370}, - {0x5360, 4445}, - {0x5361, 2357}, - {0x5362, 2643}, - {0x5363, 4747}, - {0x5364, 2648}, - {0x5366, 4746}, - {0x5367, 3811}, - {0x5369, 4946}, - {0x536b, 3791}, - {0x536d, 0}, - {0x536e, 4714}, - {0x536f, 2739}, - {0x5370, 4230}, - {0x5371, 3762}, - {0x5373, 2087}, - {0x5374, 3215}, - {0x5375, 2680}, - {0x5377, 2332}, - {0x5378, 3969}, - {0x537a, 4947}, - {0x537c, 0}, - {0x537d, 1}, - {0x537e, 2}, - {0x537f, 3169}, - {0x5381, 0}, - {0x5382, 1228}, - {0x5384, 1585}, - {0x5385, 3663}, - {0x5386, 2533}, - {0x5388, 0}, - {0x5389, 2530}, - {0x538b, 4066}, - {0x538c, 4106}, - {0x538d, 4733}, - {0x538f, 0}, - {0x5390, 1}, - {0x5391, 2}, - {0x5392, 3}, - {0x5393, 4}, - {0x5394, 5}, - {0x5395, 1189}, - {0x5397, 0}, - {0x5398, 2512}, - {0x5399, 8897}, - {0x539a, 1960}, - {0x539c, 0}, - {0x539d, 4734}, - {0x539f, 4336}, - {0x53a0, 7780}, - {0x53a2, 3918}, - {0x53a3, 4735}, - {0x53a5, 4736}, - {0x53a6, 3888}, - {0x53a8, 1309}, - {0x53a9, 2294}, - {0x53ab, 0}, - {0x53ac, 1}, - {0x53ad, 8697}, - {0x53ae, 4737}, - {0x53b0, 0}, - {0x53b1, 1}, - {0x53b2, 8208}, - {0x53b4, 8898}, - {0x53b6, 5020}, - {0x53b8, 0}, - {0x53b9, 1}, - {0x53ba, 2}, - {0x53bb, 3200}, - {0x53bd, 0}, - {0x53be, 1}, - {0x53bf, 3909}, - {0x53c1, 3289}, - {0x53c2, 1173}, - {0x53c3, 7770}, - {0x53c5, 0}, - {0x53c6, 1}, - {0x53c7, 2}, - {0x53c8, 4283}, - {0x53c9, 1197}, - {0x53ca, 2083}, - {0x53cb, 4278}, - {0x53cc, 3488}, - {0x53cd, 1617}, - {0x53cf, 0}, - {0x53d0, 1}, - {0x53d1, 1599}, - {0x53d3, 0}, - {0x53d4, 3452}, - {0x53d6, 3196}, - {0x53d7, 3443}, - {0x53d8, 1101}, - {0x53d9, 4027}, - {0x53db, 2962}, - {0x53dd, 0}, - {0x53de, 1}, - {0x53df, 5013}, - {0x53e0, 1503}, - {0x53e2, 7842}, - {0x53e3, 2407}, - {0x53e4, 1822}, - {0x53e5, 2323}, - {0x53e6, 2614}, - {0x53e8, 5374}, - {0x53e9, 5373}, - {0x53ea, 4538}, - {0x53eb, 2209}, - {0x53ec, 4474}, - {0x53ed, 979}, - {0x53ee, 1506}, - {0x53ef, 2390}, - {0x53f0, 3579}, - {0x53f1, 5371}, - {0x53f2, 3406}, - {0x53f3, 4279}, - {0x53f5, 4741}, - {0x53f6, 4157}, - {0x53f7, 1916}, - {0x53f8, 3507}, - {0x53f9, 3601}, - {0x53fb, 5375}, - {0x53fc, 1489}, - {0x53fd, 5372}, - {0x53ff, 0}, - {0x5401, 4314}, - {0x5403, 1273}, - {0x5404, 1778}, - {0x5406, 5378}, - {0x5408, 1926}, - {0x5409, 2077}, - {0x540a, 1494}, - {0x540c, 3677}, - {0x540d, 2816}, - {0x540e, 1962}, - {0x540f, 2527}, - {0x5410, 3699}, - {0x5411, 3935}, - {0x5412, 5376}, - {0x5413, 3890}, - {0x5415, 2663}, - {0x5416, 5377}, - {0x5417, 2711}, - {0x5419, 0}, - {0x541a, 1}, - {0x541b, 2348}, - {0x541d, 2600}, - {0x541e, 3709}, - {0x541f, 4222}, - {0x5420, 1642}, - {0x5421, 5385}, - {0x5423, 5388}, - {0x5425, 0}, - {0x5426, 1678}, - {0x5427, 980}, - {0x5428, 1557}, - {0x5429, 1649}, - {0x542b, 1891}, - {0x542c, 3664}, - {0x542d, 2401}, - {0x542e, 3494}, - {0x542f, 3091}, - {0x5431, 4519}, - {0x5432, 5389}, - {0x5434, 3825}, - {0x5435, 1240}, - {0x5437, 0}, - {0x5438, 3851}, - {0x5439, 1336}, - {0x543b, 3798}, - {0x543c, 1959}, - {0x543e, 3824}, - {0x5440, 4070}, - {0x5442, 0}, - {0x5443, 5384}, - {0x5445, 0}, - {0x5446, 1399}, - {0x5448, 1263}, - {0x544a, 1761}, - {0x544b, 5379}, - {0x544d, 0}, - {0x544e, 1}, - {0x544f, 2}, - {0x5450, 2856}, - {0x5452, 5380}, - {0x5453, 5381}, - {0x5454, 5382}, - {0x5455, 2940}, - {0x5456, 5383}, - {0x5457, 5386}, - {0x5458, 4340}, - {0x5459, 5387}, - {0x545b, 3127}, - {0x545c, 3815}, - {0x545e, 0}, - {0x545f, 1}, - {0x5460, 2}, - {0x5461, 3}, - {0x5462, 2875}, - {0x5464, 5394}, - {0x5466, 5399}, - {0x5468, 4571}, - {0x546a, 0}, - {0x546b, 1}, - {0x546c, 2}, - {0x546d, 3}, - {0x546e, 4}, - {0x546f, 5}, - {0x5470, 6}, - {0x5471, 5393}, - {0x5472, 5410}, - {0x5473, 3781}, - {0x5475, 1918}, - {0x5476, 5398}, - {0x5477, 5392}, - {0x5478, 2975}, - {0x547a, 0}, - {0x547b, 3364}, - {0x547c, 1963}, - {0x547d, 2817}, - {0x547f, 0}, - {0x5480, 2310}, - {0x5482, 5390}, - {0x5484, 5397}, - {0x5486, 2969}, - {0x5488, 0}, - {0x5489, 1}, - {0x548a, 2}, - {0x548b, 4423}, - {0x548c, 1924}, - {0x548e, 2299}, - {0x548f, 4258}, - {0x5490, 1723}, - {0x5492, 4579}, - {0x5494, 5391}, - {0x5495, 1815}, - {0x5496, 2356}, - {0x5498, 0}, - {0x5499, 2629}, - {0x549a, 5395}, - {0x549b, 5396}, - {0x549d, 5400}, - {0x549f, 0}, - {0x54a0, 1}, - {0x54a1, 2}, - {0x54a2, 3}, - {0x54a3, 5411}, - {0x54a4, 5421}, - {0x54a6, 5407}, - {0x54a7, 5406}, - {0x54a8, 4646}, - {0x54a9, 5419}, - {0x54aa, 5420}, - {0x54ab, 5991}, - {0x54ac, 4142}, - {0x54ad, 5402}, - {0x54af, 2358}, - {0x54b1, 4382}, - {0x54b3, 2389}, - {0x54b4, 5404}, - {0x54b6, 0}, - {0x54b7, 1}, - {0x54b8, 3897}, - {0x54ba, 0}, - {0x54bb, 5413}, - {0x54bc, 9069}, - {0x54bd, 4083}, - {0x54bf, 5414}, - {0x54c0, 946}, - {0x54c1, 3030}, - {0x54c2, 5403}, - {0x54c4, 1948}, - {0x54c6, 1566}, - {0x54c7, 3724}, - {0x54c8, 1879}, - {0x54c9, 4376}, - {0x54cb, 0}, - {0x54cc, 5415}, - {0x54cd, 3929}, - {0x54ce, 944}, - {0x54cf, 5423}, - {0x54d0, 5401}, - {0x54d1, 4079}, - {0x54d2, 5405}, - {0x54d3, 5408}, - {0x54d4, 5409}, - {0x54d5, 5412}, - {0x54d7, 1982}, - {0x54d9, 5416}, - {0x54da, 5417}, - {0x54dc, 5418}, - {0x54dd, 5422}, - {0x54de, 5424}, - {0x54df, 4249}, - {0x54e1, 8775}, - {0x54e3, 0}, - {0x54e4, 1}, - {0x54e5, 1762}, - {0x54e6, 2935}, - {0x54e7, 5426}, - {0x54e8, 3347}, - {0x54e9, 2545}, - {0x54ea, 2855}, - {0x54ec, 0}, - {0x54ed, 2411}, - {0x54ee, 3941}, - {0x54f0, 0}, - {0x54f1, 1}, - {0x54f2, 4477}, - {0x54f3, 5430}, - {0x54f5, 0}, - {0x54f6, 1}, - {0x54f7, 2}, - {0x54f8, 3}, - {0x54f9, 4}, - {0x54fa, 1151}, - {0x54fc, 1942}, - {0x54fd, 5428}, - {0x54ff, 5009}, - {0x5501, 4109}, - {0x5503, 0}, - {0x5504, 9068}, - {0x5506, 3561}, - {0x5507, 1344}, - {0x5509, 945}, - {0x550b, 0}, - {0x550c, 1}, - {0x550d, 2}, - {0x550e, 3}, - {0x550f, 5433}, - {0x5510, 3609}, - {0x5511, 5434}, - {0x5513, 0}, - {0x5514, 5429}, - {0x5516, 0}, - {0x5517, 1}, - {0x5518, 2}, - {0x5519, 3}, - {0x551a, 4}, - {0x551b, 5425}, - {0x551d, 0}, - {0x551e, 1}, - {0x551f, 2}, - {0x5520, 5427}, - {0x5522, 5431}, - {0x5523, 5432}, - {0x5524, 2002}, - {0x5526, 0}, - {0x5527, 5435}, - {0x5529, 0}, - {0x552a, 5436}, - {0x552c, 1976}, - {0x552e, 3442}, - {0x552f, 3767}, - {0x5530, 5453}, - {0x5531, 1231}, - {0x5533, 5452}, - {0x5535, 0}, - {0x5536, 1}, - {0x5537, 5447}, - {0x5539, 0}, - {0x553a, 1}, - {0x553b, 2}, - {0x553c, 5446}, - {0x553e, 3722}, - {0x553f, 5444}, - {0x5541, 5442}, - {0x5543, 2397}, - {0x5544, 4641}, - {0x5546, 3333}, - {0x5548, 0}, - {0x5549, 5440}, - {0x554a, 940}, - {0x554c, 0}, - {0x554d, 1}, - {0x554e, 2}, - {0x554f, 8604}, - {0x5550, 5445}, - {0x5552, 0}, - {0x5553, 8393}, - {0x5555, 5443}, - {0x5556, 5448}, - {0x5558, 0}, - {0x5559, 1}, - {0x555a, 2}, - {0x555b, 3}, - {0x555c, 5454}, - {0x555e, 8688}, - {0x5560, 0}, - {0x5561, 1637}, - {0x5563, 0}, - {0x5564, 3008}, - {0x5565, 3311}, - {0x5566, 2461}, - {0x5567, 5437}, - {0x5569, 0}, - {0x556a, 2943}, - {0x556c, 4730}, - {0x556d, 5441}, - {0x556e, 2905}, - {0x5570, 0}, - {0x5571, 1}, - {0x5572, 2}, - {0x5573, 3}, - {0x5574, 4}, - {0x5575, 5449}, - {0x5576, 5450}, - {0x5577, 5451}, - {0x5578, 3952}, - {0x557a, 0}, - {0x557b, 5466}, - {0x557c, 3639}, - {0x557e, 5463}, - {0x5580, 2355}, - {0x5581, 5461}, - {0x5582, 3784}, - {0x5583, 5457}, - {0x5584, 3327}, - {0x5586, 0}, - {0x5587, 2457}, - {0x5588, 5460}, - {0x5589, 1956}, - {0x558a, 1895}, - {0x558b, 5455}, - {0x558d, 0}, - {0x558e, 1}, - {0x558f, 5438}, - {0x5591, 5465}, - {0x5593, 0}, - {0x5594, 5470}, - {0x5596, 0}, - {0x5597, 1}, - {0x5598, 1328}, - {0x5599, 5471}, - {0x559b, 0}, - {0x559c, 3871}, - {0x559d, 1919}, - {0x559f, 5462}, - {0x55a1, 0}, - {0x55a2, 1}, - {0x55a3, 2}, - {0x55a4, 3}, - {0x55a5, 4}, - {0x55a6, 5}, - {0x55a7, 4037}, - {0x55a9, 0}, - {0x55aa, 8459}, - {0x55ac, 8414}, - {0x55ae, 7850}, - {0x55b0, 0}, - {0x55b1, 5458}, - {0x55b2, 8748}, - {0x55b3, 4414}, - {0x55b5, 5439}, - {0x55b7, 2984}, - {0x55b9, 5459}, - {0x55bb, 4316}, - {0x55bd, 5468}, - {0x55be, 5469}, - {0x55c0, 0}, - {0x55c1, 1}, - {0x55c2, 2}, - {0x55c3, 3}, - {0x55c4, 5482}, - {0x55c5, 4012}, - {0x55c6, 8408}, - {0x55c7, 8896}, - {0x55c9, 5474}, - {0x55cb, 0}, - {0x55cc, 5487}, - {0x55cd, 5488}, - {0x55ce, 8303}, - {0x55d0, 0}, - {0x55d1, 5476}, - {0x55d2, 5456}, - {0x55d3, 3293}, - {0x55d4, 5479}, - {0x55d6, 5464}, - {0x55d8, 0}, - {0x55d9, 1}, - {0x55da, 8609}, - {0x55dc, 3423}, - {0x55dd, 5481}, - {0x55df, 5467}, - {0x55e1, 3802}, - {0x55e3, 3512}, - {0x55e4, 5491}, - {0x55e5, 5484}, - {0x55e6, 5480}, - {0x55e8, 5489}, - {0x55e9, 9081}, - {0x55ea, 5472}, - {0x55eb, 5477}, - {0x55ec, 5478}, - {0x55ee, 0}, - {0x55ef, 5483}, - {0x55f1, 0}, - {0x55f2, 5485}, - {0x55f3, 5486}, - {0x55f5, 5490}, - {0x55f6, 9074}, - {0x55f7, 5473}, - {0x55f9, 0}, - {0x55fa, 1}, - {0x55fb, 2}, - {0x55fc, 3}, - {0x55fd, 3529}, - {0x55fe, 5499}, - {0x5600, 5500}, - {0x5601, 5496}, - {0x5603, 0}, - {0x5604, 1}, - {0x5605, 2}, - {0x5606, 8554}, - {0x5608, 5494}, - {0x5609, 2113}, - {0x560b, 0}, - {0x560c, 5495}, - {0x560d, 9084}, - {0x560e, 1725}, - {0x560f, 4731}, - {0x5611, 0}, - {0x5612, 1}, - {0x5613, 2}, - {0x5614, 8368}, - {0x5616, 9082}, - {0x5617, 7796}, - {0x5618, 4021}, - {0x561a, 0}, - {0x561b, 2710}, - {0x561c, 9079}, - {0x561e, 5493}, - {0x561f, 5475}, - {0x5621, 0}, - {0x5622, 1}, - {0x5623, 5498}, - {0x5624, 5497}, - {0x5626, 0}, - {0x5627, 5501}, - {0x5629, 8012}, - {0x562b, 0}, - {0x562c, 5506}, - {0x562d, 5502}, - {0x562e, 9080}, - {0x562f, 8655}, - {0x5630, 9064}, - {0x5631, 4597}, - {0x5632, 1237}, - {0x5634, 4681}, - {0x5635, 9073}, - {0x5636, 3504}, - {0x5638, 9065}, - {0x5639, 5504}, - {0x563b, 3850}, - {0x563d, 0}, - {0x563e, 1}, - {0x563f, 1936}, - {0x5641, 9844}, - {0x5643, 0}, - {0x5644, 1}, - {0x5645, 2}, - {0x5646, 3}, - {0x5647, 4}, - {0x5648, 5}, - {0x5649, 6}, - {0x564a, 7}, - {0x564b, 8}, - {0x564c, 5511}, - {0x564d, 5507}, - {0x564e, 4148}, - {0x5650, 0}, - {0x5651, 1}, - {0x5652, 2}, - {0x5653, 3}, - {0x5654, 5512}, - {0x5656, 0}, - {0x5657, 5505}, - {0x5658, 5503}, - {0x5659, 5509}, - {0x565b, 0}, - {0x565c, 5510}, - {0x565d, 9071}, - {0x565f, 0}, - {0x5660, 9072}, - {0x5662, 5508}, - {0x5664, 5514}, - {0x5665, 9078}, - {0x5666, 9075}, - {0x5668, 3094}, - {0x5669, 4706}, - {0x566a, 4398}, - {0x566b, 5516}, - {0x566c, 3424}, - {0x566e, 0}, - {0x566f, 9087}, - {0x5671, 5515}, - {0x5672, 9076}, - {0x5674, 8373}, - {0x5676, 1724}, - {0x5678, 7899}, - {0x5679, 9842}, - {0x567b, 5517}, - {0x567c, 5518}, - {0x567e, 0}, - {0x567f, 1}, - {0x5680, 9070}, - {0x5682, 0}, - {0x5683, 1}, - {0x5684, 2}, - {0x5685, 5519}, - {0x5686, 5513}, - {0x5687, 8631}, - {0x5689, 0}, - {0x568a, 1}, - {0x568b, 2}, - {0x568c, 9077}, - {0x568e, 1910}, - {0x568f, 3642}, - {0x5691, 0}, - {0x5692, 1}, - {0x5693, 5520}, - {0x5695, 9090}, - {0x5697, 0}, - {0x5698, 1}, - {0x5699, 8350}, - {0x569b, 0}, - {0x569c, 1}, - {0x569d, 2}, - {0x569e, 3}, - {0x569f, 4}, - {0x56a0, 5}, - {0x56a1, 6}, - {0x56a2, 7}, - {0x56a3, 3942}, - {0x56a5, 0}, - {0x56a6, 9067}, - {0x56a8, 8249}, - {0x56aa, 0}, - {0x56ab, 1}, - {0x56ac, 2}, - {0x56ad, 3}, - {0x56ae, 9887}, - {0x56af, 5521}, - {0x56b1, 0}, - {0x56b2, 1}, - {0x56b3, 9085}, - {0x56b4, 8693}, - {0x56b6, 9089}, - {0x56b7, 3229}, - {0x56b9, 0}, - {0x56ba, 1}, - {0x56bb, 2}, - {0x56bc, 2193}, - {0x56be, 0}, - {0x56bf, 1}, - {0x56c0, 9083}, - {0x56c1, 9086}, - {0x56c2, 8652}, - {0x56c4, 0}, - {0x56c5, 8923}, - {0x56c7, 0}, - {0x56c8, 9066}, - {0x56c9, 9865}, - {0x56ca, 2869}, - {0x56cc, 9879}, - {0x56ce, 0}, - {0x56cf, 1}, - {0x56d0, 2}, - {0x56d1, 8865}, - {0x56d3, 0}, - {0x56d4, 5522}, - {0x56d6, 0}, - {0x56d7, 5523}, - {0x56d9, 0}, - {0x56da, 3185}, - {0x56db, 3513}, - {0x56dd, 5524}, - {0x56de, 2029}, - {0x56df, 4716}, - {0x56e0, 4217}, - {0x56e1, 5525}, - {0x56e2, 3702}, - {0x56e4, 1561}, - {0x56e6, 0}, - {0x56e7, 1}, - {0x56e8, 2}, - {0x56e9, 3}, - {0x56ea, 4}, - {0x56eb, 5527}, - {0x56ed, 4339}, - {0x56ef, 0}, - {0x56f0, 2450}, - {0x56f1, 1364}, - {0x56f3, 0}, - {0x56f4, 3766}, - {0x56f5, 5526}, - {0x56f7, 0}, - {0x56f8, 1}, - {0x56f9, 5528}, - {0x56fa, 1829}, - {0x56fc, 0}, - {0x56fd, 1875}, - {0x56fe, 3693}, - {0x56ff, 5529}, - {0x5701, 0}, - {0x5702, 1}, - {0x5703, 3059}, - {0x5704, 5530}, - {0x5706, 4341}, - {0x5707, 9091}, - {0x5708, 3201}, - {0x5709, 5532}, - {0x570a, 5531}, - {0x570b, 7997}, - {0x570d, 8591}, - {0x570f, 0}, - {0x5710, 1}, - {0x5711, 2}, - {0x5712, 8774}, - {0x5713, 8776}, - {0x5715, 0}, - {0x5716, 8574}, - {0x5718, 8576}, - {0x571a, 0}, - {0x571b, 1}, - {0x571c, 5533}, - {0x571e, 0}, - {0x571f, 3698}, - {0x5721, 0}, - {0x5722, 1}, - {0x5723, 3388}, - {0x5725, 0}, - {0x5726, 1}, - {0x5727, 2}, - {0x5728, 4381}, - {0x5729, 5031}, - {0x572a, 5033}, - {0x572c, 5032}, - {0x572d, 1856}, - {0x572e, 5036}, - {0x572f, 5037}, - {0x5730, 1465}, - {0x5732, 0}, - {0x5733, 5034}, - {0x5735, 0}, - {0x5736, 1}, - {0x5737, 2}, - {0x5738, 3}, - {0x5739, 5035}, - {0x573a, 1222}, - {0x573b, 5039}, - {0x573d, 0}, - {0x573e, 2061}, - {0x5740, 4534}, - {0x5742, 5040}, - {0x5744, 0}, - {0x5745, 1}, - {0x5746, 2}, - {0x5747, 2344}, - {0x5749, 0}, - {0x574a, 1624}, - {0x574c, 5024}, - {0x574d, 3585}, - {0x574e, 2367}, - {0x574f, 1994}, - {0x5750, 4693}, - {0x5751, 2400}, - {0x5753, 0}, - {0x5754, 1}, - {0x5755, 2}, - {0x5756, 3}, - {0x5757, 2422}, - {0x5759, 0}, - {0x575a, 2132}, - {0x575b, 3590}, - {0x575c, 5038}, - {0x575d, 990}, - {0x575e, 3834}, - {0x575f, 1653}, - {0x5760, 4630}, - {0x5761, 3041}, - {0x5763, 0}, - {0x5764, 2447}, - {0x5766, 3596}, - {0x5768, 5047}, - {0x5769, 5041}, - {0x576a, 3033}, - {0x576b, 5043}, - {0x576d, 5048}, - {0x576f, 3000}, - {0x5771, 0}, - {0x5772, 1}, - {0x5773, 5050}, - {0x5775, 0}, - {0x5776, 5049}, - {0x5777, 2381}, - {0x5779, 0}, - {0x577a, 1}, - {0x577b, 5046}, - {0x577c, 5045}, - {0x577e, 0}, - {0x577f, 1}, - {0x5780, 2}, - {0x5781, 3}, - {0x5782, 1340}, - {0x5783, 2455}, - {0x5784, 2633}, - {0x5785, 5042}, - {0x5786, 5044}, - {0x5788, 0}, - {0x5789, 1}, - {0x578a, 2}, - {0x578b, 3992}, - {0x578c, 5053}, - {0x578e, 0}, - {0x578f, 1}, - {0x5790, 2}, - {0x5791, 3}, - {0x5792, 2504}, - {0x5793, 5058}, - {0x5795, 0}, - {0x5796, 1}, - {0x5797, 2}, - {0x5798, 3}, - {0x5799, 4}, - {0x579a, 5}, - {0x579b, 1569}, - {0x579d, 0}, - {0x579e, 1}, - {0x579f, 2}, - {0x57a0, 5059}, - {0x57a1, 5026}, - {0x57a2, 1809}, - {0x57a3, 4334}, - {0x57a4, 5052}, - {0x57a6, 2398}, - {0x57a7, 5056}, - {0x57a9, 5025}, - {0x57ab, 1479}, - {0x57ad, 5051}, - {0x57ae, 2418}, - {0x57b0, 0}, - {0x57b1, 1}, - {0x57b2, 5054}, - {0x57b4, 5057}, - {0x57b6, 0}, - {0x57b7, 1}, - {0x57b8, 5065}, - {0x57ba, 0}, - {0x57bb, 1}, - {0x57bc, 2}, - {0x57bd, 3}, - {0x57be, 4}, - {0x57bf, 5}, - {0x57c0, 6}, - {0x57c1, 7}, - {0x57c2, 1786}, - {0x57c3, 942}, - {0x57c5, 0}, - {0x57c6, 1}, - {0x57c7, 2}, - {0x57c8, 3}, - {0x57c9, 4}, - {0x57ca, 5}, - {0x57cb, 2712}, - {0x57cd, 0}, - {0x57ce, 1260}, - {0x57cf, 5055}, - {0x57d1, 0}, - {0x57d2, 5064}, - {0x57d4, 3057}, - {0x57d5, 5060}, - {0x57d7, 0}, - {0x57d8, 5061}, - {0x57d9, 5063}, - {0x57da, 5062}, - {0x57dc, 0}, - {0x57dd, 5070}, - {0x57df, 4311}, - {0x57e0, 1153}, - {0x57e1, 9002}, - {0x57e3, 0}, - {0x57e4, 5069}, - {0x57e6, 0}, - {0x57e7, 1}, - {0x57e8, 2}, - {0x57e9, 3}, - {0x57ea, 4}, - {0x57eb, 5}, - {0x57ec, 6}, - {0x57ed, 5074}, - {0x57ef, 5067}, - {0x57f1, 0}, - {0x57f2, 1}, - {0x57f3, 2}, - {0x57f4, 5066}, - {0x57f6, 0}, - {0x57f7, 8843}, - {0x57f8, 5068}, - {0x57f9, 2977}, - {0x57fa, 2062}, - {0x57fc, 0}, - {0x57fd, 5073}, - {0x57ff, 0}, - {0x5800, 5075}, - {0x5802, 3606}, - {0x5804, 0}, - {0x5805, 8069}, - {0x5806, 1552}, - {0x5807, 5196}, - {0x5809, 0}, - {0x580a, 8997}, - {0x580b, 5071}, - {0x580d, 5072}, - {0x580f, 0}, - {0x5810, 1}, - {0x5811, 3122}, - {0x5813, 0}, - {0x5814, 1}, - {0x5815, 1576}, - {0x5816, 9004}, - {0x5818, 0}, - {0x5819, 5077}, - {0x581b, 0}, - {0x581c, 1}, - {0x581d, 9006}, - {0x581e, 5076}, - {0x5820, 5079}, - {0x5821, 1037}, - {0x5823, 0}, - {0x5824, 1453}, - {0x5826, 0}, - {0x5827, 1}, - {0x5828, 2}, - {0x5829, 3}, - {0x582a, 2365}, - {0x582c, 0}, - {0x582d, 1}, - {0x582e, 2}, - {0x582f, 8709}, - {0x5830, 4104}, - {0x5831, 7736}, - {0x5833, 0}, - {0x5834, 7795}, - {0x5835, 1537}, - {0x5837, 0}, - {0x5838, 1}, - {0x5839, 2}, - {0x583a, 3}, - {0x583b, 4}, - {0x583c, 5}, - {0x583d, 6}, - {0x583e, 7}, - {0x583f, 8}, - {0x5840, 9}, - {0x5841, 10}, - {0x5842, 11}, - {0x5843, 12}, - {0x5844, 5078}, - {0x5846, 0}, - {0x5847, 1}, - {0x5848, 2}, - {0x5849, 3}, - {0x584a, 8163}, - {0x584b, 9017}, - {0x584c, 3567}, - {0x584d, 6563}, - {0x584f, 9003}, - {0x5851, 3537}, - {0x5852, 9005}, - {0x5854, 3571}, - {0x5856, 0}, - {0x5857, 8575}, - {0x5858, 3604}, - {0x585a, 0}, - {0x585b, 1}, - {0x585c, 2}, - {0x585d, 3}, - {0x585e, 3286}, - {0x5860, 0}, - {0x5861, 1}, - {0x5862, 8615}, - {0x5864, 9007}, - {0x5865, 5080}, - {0x5867, 0}, - {0x5868, 1}, - {0x5869, 2}, - {0x586a, 3}, - {0x586b, 3649}, - {0x586c, 5081}, - {0x586e, 0}, - {0x586f, 1}, - {0x5870, 2}, - {0x5871, 3}, - {0x5872, 4}, - {0x5873, 5}, - {0x5874, 6}, - {0x5875, 7805}, - {0x5877, 0}, - {0x5878, 1}, - {0x5879, 8406}, - {0x587b, 0}, - {0x587c, 1}, - {0x587d, 2}, - {0x587e, 5027}, - {0x5880, 5085}, - {0x5881, 5082}, - {0x5883, 2274}, - {0x5885, 3474}, - {0x5887, 0}, - {0x5888, 1}, - {0x5889, 5083}, - {0x588a, 7874}, - {0x588c, 0}, - {0x588d, 1}, - {0x588e, 2}, - {0x588f, 3}, - {0x5890, 4}, - {0x5891, 5}, - {0x5892, 3331}, - {0x5893, 2844}, - {0x5895, 0}, - {0x5896, 1}, - {0x5897, 2}, - {0x5898, 3}, - {0x5899, 3130}, - {0x589a, 5084}, - {0x589c, 8882}, - {0x589e, 4409}, - {0x589f, 4017}, - {0x58a1, 0}, - {0x58a2, 1}, - {0x58a3, 2}, - {0x58a4, 3}, - {0x58a5, 4}, - {0x58a6, 5}, - {0x58a7, 6}, - {0x58a8, 2830}, - {0x58a9, 1556}, - {0x58ab, 0}, - {0x58ac, 1}, - {0x58ad, 2}, - {0x58ae, 7903}, - {0x58b0, 0}, - {0x58b1, 1}, - {0x58b2, 2}, - {0x58b3, 7929}, - {0x58b5, 0}, - {0x58b6, 1}, - {0x58b7, 2}, - {0x58b8, 3}, - {0x58b9, 4}, - {0x58ba, 5}, - {0x58bb, 8409}, - {0x58bc, 5028}, - {0x58be, 8157}, - {0x58c0, 0}, - {0x58c1, 1091}, - {0x58c3, 0}, - {0x58c4, 1}, - {0x58c5, 5029}, - {0x58c7, 8551}, - {0x58c9, 0}, - {0x58ca, 1}, - {0x58cb, 2}, - {0x58cc, 3}, - {0x58cd, 4}, - {0x58ce, 5}, - {0x58cf, 6}, - {0x58d0, 7}, - {0x58d1, 5030}, - {0x58d3, 8685}, - {0x58d5, 1909}, - {0x58d7, 0}, - {0x58d8, 8199}, - {0x58d9, 8998}, - {0x58da, 9001}, - {0x58dc, 0}, - {0x58dd, 1}, - {0x58de, 8018}, - {0x58df, 8251}, - {0x58e0, 9000}, - {0x58e2, 8999}, - {0x58e4, 3227}, - {0x58e6, 0}, - {0x58e7, 1}, - {0x58e8, 2}, - {0x58e9, 7723}, - {0x58eb, 3414}, - {0x58ec, 3236}, - {0x58ee, 4624}, - {0x58ef, 8878}, - {0x58f0, 3378}, - {0x58f2, 0}, - {0x58f3, 2388}, - {0x58f5, 0}, - {0x58f6, 1967}, - {0x58f8, 0}, - {0x58f9, 4163}, - {0x58fa, 8009}, - {0x58fc, 0}, - {0x58fd, 8504}, - {0x58ff, 0}, - {0x5901, 0}, - {0x5902, 5660}, - {0x5904, 1321}, - {0x5906, 0}, - {0x5907, 1057}, - {0x5909, 0}, - {0x590a, 1}, - {0x590b, 2}, - {0x590c, 3}, - {0x590d, 1711}, - {0x590f, 3889}, - {0x5911, 0}, - {0x5912, 1}, - {0x5913, 2}, - {0x5914, 4859}, - {0x5915, 3859}, - {0x5916, 3731}, - {0x5918, 0}, - {0x5919, 4865}, - {0x591a, 1567}, - {0x591c, 4160}, - {0x591e, 0}, - {0x591f, 1812}, - {0x5921, 0}, - {0x5922, 8321}, - {0x5924, 5659}, - {0x5925, 5657}, - {0x5927, 1398}, - {0x5929, 3647}, - {0x592a, 3582}, - {0x592b, 1679}, - {0x592d, 4712}, - {0x592e, 4116}, - {0x592f, 1906}, - {0x5931, 3390}, - {0x5933, 0}, - {0x5934, 3688}, - {0x5936, 0}, - {0x5937, 4171}, - {0x5938, 2417}, - {0x5939, 2115}, - {0x593a, 1568}, - {0x593c, 5295}, - {0x593e, 8060}, - {0x5940, 0}, - {0x5941, 5296}, - {0x5942, 5004}, - {0x5944, 4098}, - {0x5946, 0}, - {0x5947, 3077}, - {0x5948, 2865}, - {0x5949, 1675}, - {0x594b, 1657}, - {0x594d, 0}, - {0x594e, 2441}, - {0x594f, 4669}, - {0x5951, 3092}, - {0x5953, 0}, - {0x5954, 1061}, - {0x5955, 5298}, - {0x5956, 2178}, - {0x5957, 3626}, - {0x5958, 5300}, - {0x595a, 5299}, - {0x595c, 0}, - {0x595d, 1}, - {0x595e, 2}, - {0x595f, 3}, - {0x5960, 1485}, - {0x5962, 3350}, - {0x5964, 0}, - {0x5965, 973}, - {0x5967, 0}, - {0x5968, 1}, - {0x5969, 9051}, - {0x596a, 7902}, - {0x596c, 8098}, - {0x596e, 7930}, - {0x5970, 0}, - {0x5971, 1}, - {0x5972, 2}, - {0x5973, 2927}, - {0x5974, 2924}, - {0x5976, 2863}, - {0x5978, 2140}, - {0x5979, 3570}, - {0x597b, 0}, - {0x597c, 1}, - {0x597d, 1914}, - {0x597f, 0}, - {0x5980, 1}, - {0x5981, 6005}, - {0x5982, 3266}, - {0x5983, 6006}, - {0x5984, 3758}, - {0x5986, 4622}, - {0x5987, 1721}, - {0x5988, 2703}, - {0x598a, 3244}, - {0x598c, 0}, - {0x598d, 6007}, - {0x598f, 0}, - {0x5990, 1}, - {0x5991, 2}, - {0x5992, 1545}, - {0x5993, 2110}, - {0x5995, 0}, - {0x5996, 4134}, - {0x5997, 6011}, - {0x5999, 2803}, - {0x599b, 0}, - {0x599c, 1}, - {0x599d, 8877}, - {0x599e, 6014}, - {0x59a0, 0}, - {0x59a1, 1}, - {0x59a2, 2}, - {0x59a3, 6010}, - {0x59a4, 6015}, - {0x59a5, 3720}, - {0x59a7, 0}, - {0x59a8, 1630}, - {0x59a9, 6008}, - {0x59aa, 6009}, - {0x59ab, 6013}, - {0x59ad, 0}, - {0x59ae, 2880}, - {0x59af, 6018}, - {0x59b1, 0}, - {0x59b2, 6017}, - {0x59b4, 0}, - {0x59b5, 1}, - {0x59b6, 2}, - {0x59b7, 3}, - {0x59b8, 4}, - {0x59b9, 2760}, - {0x59bb, 3069}, - {0x59bd, 0}, - {0x59be, 6020}, - {0x59c0, 0}, - {0x59c1, 1}, - {0x59c2, 2}, - {0x59c3, 3}, - {0x59c4, 4}, - {0x59c5, 5}, - {0x59c6, 2842}, - {0x59c8, 0}, - {0x59c9, 1}, - {0x59ca, 6012}, - {0x59cb, 3411}, - {0x59cd, 0}, - {0x59ce, 1}, - {0x59cf, 2}, - {0x59d0, 2228}, - {0x59d1, 1820}, - {0x59d2, 6016}, - {0x59d3, 4000}, - {0x59d4, 3774}, - {0x59d6, 0}, - {0x59d7, 6019}, - {0x59d8, 6026}, - {0x59da, 4141}, - {0x59dc, 2171}, - {0x59dd, 6023}, - {0x59df, 0}, - {0x59e0, 1}, - {0x59e1, 2}, - {0x59e2, 3}, - {0x59e3, 6025}, - {0x59e5, 2492}, - {0x59e7, 0}, - {0x59e8, 4179}, - {0x59ea, 0}, - {0x59eb, 1}, - {0x59ec, 2074}, - {0x59ee, 0}, - {0x59ef, 1}, - {0x59f0, 2}, - {0x59f1, 3}, - {0x59f2, 4}, - {0x59f3, 5}, - {0x59f4, 6}, - {0x59f5, 7}, - {0x59f6, 8}, - {0x59f7, 9}, - {0x59f8, 10}, - {0x59f9, 6027}, - {0x59fb, 4221}, - {0x59fd, 0}, - {0x59fe, 1}, - {0x59ff, 4648}, - {0x5a01, 3759}, - {0x5a03, 3727}, - {0x5a04, 2637}, - {0x5a05, 6021}, - {0x5a06, 6022}, - {0x5a07, 2192}, - {0x5a08, 6024}, - {0x5a09, 6029}, - {0x5a0b, 0}, - {0x5a0c, 6028}, - {0x5a0e, 0}, - {0x5a0f, 1}, - {0x5a10, 2}, - {0x5a11, 6032}, - {0x5a13, 6034}, - {0x5a15, 0}, - {0x5a16, 1}, - {0x5a17, 2}, - {0x5a18, 2898}, - {0x5a1a, 0}, - {0x5a1b, 1}, - {0x5a1c, 2859}, - {0x5a1e, 0}, - {0x5a1f, 2329}, - {0x5a20, 3368}, - {0x5a22, 0}, - {0x5a23, 6033}, - {0x5a25, 1583}, - {0x5a27, 0}, - {0x5a28, 1}, - {0x5a29, 2793}, - {0x5a2b, 0}, - {0x5a2c, 1}, - {0x5a2d, 2}, - {0x5a2e, 3}, - {0x5a2f, 4}, - {0x5a30, 5}, - {0x5a31, 4302}, - {0x5a32, 6030}, - {0x5a34, 6031}, - {0x5a36, 3197}, - {0x5a38, 0}, - {0x5a39, 1}, - {0x5a3a, 2}, - {0x5a3b, 3}, - {0x5a3c, 6039}, - {0x5a3e, 0}, - {0x5a3f, 1}, - {0x5a40, 6035}, - {0x5a41, 8255}, - {0x5a43, 0}, - {0x5a44, 1}, - {0x5a45, 2}, - {0x5a46, 3044}, - {0x5a48, 0}, - {0x5a49, 3746}, - {0x5a4a, 6037}, - {0x5a4c, 0}, - {0x5a4d, 1}, - {0x5a4e, 2}, - {0x5a4f, 3}, - {0x5a50, 4}, - {0x5a51, 5}, - {0x5a52, 6}, - {0x5a53, 7}, - {0x5a54, 8}, - {0x5a55, 6038}, - {0x5a57, 0}, - {0x5a58, 1}, - {0x5a59, 2}, - {0x5a5a, 2046}, - {0x5a5c, 0}, - {0x5a5d, 1}, - {0x5a5e, 2}, - {0x5a5f, 3}, - {0x5a60, 4}, - {0x5a61, 5}, - {0x5a62, 6040}, - {0x5a64, 0}, - {0x5a65, 1}, - {0x5a66, 7950}, - {0x5a67, 6036}, - {0x5a69, 0}, - {0x5a6a, 2466}, - {0x5a6c, 0}, - {0x5a6d, 9209}, - {0x5a6f, 0}, - {0x5a70, 1}, - {0x5a71, 2}, - {0x5a72, 3}, - {0x5a73, 4}, - {0x5a74, 4233}, - {0x5a75, 6041}, - {0x5a76, 3373}, - {0x5a77, 6045}, - {0x5a79, 0}, - {0x5a7a, 6046}, - {0x5a7c, 0}, - {0x5a7d, 1}, - {0x5a7e, 2}, - {0x5a7f, 4033}, - {0x5a81, 0}, - {0x5a82, 1}, - {0x5a83, 2}, - {0x5a84, 3}, - {0x5a85, 4}, - {0x5a86, 5}, - {0x5a87, 6}, - {0x5a88, 7}, - {0x5a89, 8}, - {0x5a8a, 9}, - {0x5a8b, 10}, - {0x5a8c, 11}, - {0x5a8d, 12}, - {0x5a8e, 13}, - {0x5a8f, 14}, - {0x5a90, 15}, - {0x5a91, 16}, - {0x5a92, 2754}, - {0x5a94, 0}, - {0x5a95, 1}, - {0x5a96, 2}, - {0x5a97, 3}, - {0x5a98, 4}, - {0x5a99, 5}, - {0x5a9a, 2761}, - {0x5a9b, 6044}, - {0x5a9d, 0}, - {0x5a9e, 1}, - {0x5a9f, 2}, - {0x5aa0, 3}, - {0x5aa1, 4}, - {0x5aa2, 5}, - {0x5aa3, 6}, - {0x5aa4, 7}, - {0x5aa5, 8}, - {0x5aa6, 9}, - {0x5aa7, 9212}, - {0x5aa9, 0}, - {0x5aaa, 6043}, - {0x5aac, 0}, - {0x5aad, 1}, - {0x5aae, 2}, - {0x5aaf, 3}, - {0x5ab0, 4}, - {0x5ab1, 5}, - {0x5ab2, 6049}, - {0x5ab3, 3870}, - {0x5ab5, 6564}, - {0x5ab7, 0}, - {0x5ab8, 6052}, - {0x5aba, 0}, - {0x5abb, 1}, - {0x5abc, 2}, - {0x5abd, 8297}, - {0x5abe, 6047}, - {0x5ac0, 0}, - {0x5ac1, 2129}, - {0x5ac2, 3298}, - {0x5ac4, 0}, - {0x5ac5, 1}, - {0x5ac6, 2}, - {0x5ac7, 3}, - {0x5ac8, 4}, - {0x5ac9, 2088}, - {0x5acb, 0}, - {0x5acc, 3904}, - {0x5ace, 0}, - {0x5acf, 1}, - {0x5ad0, 2}, - {0x5ad1, 3}, - {0x5ad2, 6050}, - {0x5ad4, 6051}, - {0x5ad6, 6056}, - {0x5ad7, 9207}, - {0x5ad8, 6058}, - {0x5ada, 0}, - {0x5adb, 1}, - {0x5adc, 6059}, - {0x5ade, 0}, - {0x5adf, 1}, - {0x5ae0, 6053}, - {0x5ae1, 1462}, - {0x5ae3, 6054}, - {0x5ae5, 0}, - {0x5ae6, 6057}, - {0x5ae8, 0}, - {0x5ae9, 2878}, - {0x5aeb, 6048}, - {0x5aed, 0}, - {0x5aee, 1}, - {0x5aef, 2}, - {0x5af0, 3}, - {0x5af1, 6055}, - {0x5af3, 0}, - {0x5af4, 1}, - {0x5af5, 9206}, - {0x5af7, 0}, - {0x5af8, 1}, - {0x5af9, 2}, - {0x5afa, 3}, - {0x5afb, 9213}, - {0x5afd, 0}, - {0x5afe, 1}, - {0x5aff, 2}, - {0x5b00, 9208}, - {0x5b02, 0}, - {0x5b03, 1}, - {0x5b04, 2}, - {0x5b05, 3}, - {0x5b06, 4}, - {0x5b07, 5}, - {0x5b08, 9210}, - {0x5b09, 6060}, - {0x5b0b, 9214}, - {0x5b0c, 8104}, - {0x5b0e, 0}, - {0x5b0f, 1}, - {0x5b10, 2}, - {0x5b11, 3}, - {0x5b12, 4}, - {0x5b13, 5}, - {0x5b14, 6}, - {0x5b15, 7}, - {0x5b16, 6062}, - {0x5b17, 6061}, - {0x5b19, 9217}, - {0x5b1b, 0}, - {0x5b1c, 1}, - {0x5b1d, 2}, - {0x5b1e, 3}, - {0x5b1f, 4}, - {0x5b20, 5}, - {0x5b21, 9215}, - {0x5b23, 0}, - {0x5b24, 1}, - {0x5b25, 2}, - {0x5b26, 3}, - {0x5b27, 4}, - {0x5b28, 5}, - {0x5b29, 6}, - {0x5b2a, 9216}, - {0x5b2c, 0}, - {0x5b2d, 1}, - {0x5b2e, 2}, - {0x5b2f, 3}, - {0x5b30, 8737}, - {0x5b32, 6063}, - {0x5b34, 4876}, - {0x5b36, 0}, - {0x5b37, 6064}, - {0x5b38, 8482}, - {0x5b3a, 0}, - {0x5b3b, 1}, - {0x5b3c, 2}, - {0x5b3d, 3}, - {0x5b3e, 4}, - {0x5b3f, 5}, - {0x5b40, 6065}, - {0x5b42, 0}, - {0x5b43, 1}, - {0x5b44, 2}, - {0x5b45, 3}, - {0x5b46, 4}, - {0x5b47, 5}, - {0x5b48, 6}, - {0x5b49, 7}, - {0x5b4a, 8}, - {0x5b4b, 9}, - {0x5b4c, 9211}, - {0x5b4e, 0}, - {0x5b4f, 1}, - {0x5b50, 4656}, - {0x5b51, 6071}, - {0x5b53, 6072}, - {0x5b54, 2404}, - {0x5b55, 4371}, - {0x5b57, 4659}, - {0x5b58, 1385}, - {0x5b59, 3556}, - {0x5b5a, 6068}, - {0x5b5b, 4729}, - {0x5b5c, 4651}, - {0x5b5d, 3949}, - {0x5b5f, 2772}, - {0x5b61, 0}, - {0x5b62, 6073}, - {0x5b63, 2097}, - {0x5b64, 1819}, - {0x5b65, 6069}, - {0x5b66, 4048}, - {0x5b68, 0}, - {0x5b69, 1881}, - {0x5b6a, 2678}, - {0x5b6b, 8538}, - {0x5b6c, 4705}, - {0x5b6e, 0}, - {0x5b6f, 1}, - {0x5b70, 3458}, - {0x5b71, 5994}, - {0x5b73, 6070}, - {0x5b75, 1682}, - {0x5b77, 0}, - {0x5b78, 8677}, - {0x5b7a, 3265}, - {0x5b7c, 0}, - {0x5b7d, 2904}, - {0x5b7f, 8279}, - {0x5b80, 5934}, - {0x5b81, 2913}, - {0x5b83, 3569}, - {0x5b84, 5935}, - {0x5b85, 4429}, - {0x5b87, 4307}, - {0x5b88, 3439}, - {0x5b89, 957}, - {0x5b8b, 3523}, - {0x5b8c, 3739}, - {0x5b8e, 0}, - {0x5b8f, 1953}, - {0x5b91, 0}, - {0x5b92, 1}, - {0x5b93, 5937}, - {0x5b95, 5936}, - {0x5b97, 4663}, - {0x5b98, 1842}, - {0x5b99, 4581}, - {0x5b9a, 1511}, - {0x5b9b, 3745}, - {0x5b9c, 4178}, - {0x5b9d, 1039}, - {0x5b9e, 3404}, - {0x5ba0, 1293}, - {0x5ba1, 3372}, - {0x5ba2, 2394}, - {0x5ba3, 4038}, - {0x5ba4, 3433}, - {0x5ba5, 5938}, - {0x5ba6, 2007}, - {0x5ba8, 0}, - {0x5ba9, 1}, - {0x5baa, 3913}, - {0x5bab, 1797}, - {0x5bad, 0}, - {0x5bae, 1}, - {0x5baf, 2}, - {0x5bb0, 4378}, - {0x5bb2, 0}, - {0x5bb3, 1885}, - {0x5bb4, 4112}, - {0x5bb5, 3945}, - {0x5bb6, 2117}, - {0x5bb8, 5939}, - {0x5bb9, 3256}, - {0x5bbb, 0}, - {0x5bbc, 1}, - {0x5bbd, 2426}, - {0x5bbe, 1119}, - {0x5bbf, 3539}, - {0x5bc1, 0}, - {0x5bc2, 2104}, - {0x5bc4, 2103}, - {0x5bc5, 4225}, - {0x5bc6, 2785}, - {0x5bc7, 2409}, - {0x5bc9, 0}, - {0x5bca, 1}, - {0x5bcb, 2}, - {0x5bcc, 1718}, - {0x5bce, 0}, - {0x5bcf, 1}, - {0x5bd0, 2759}, - {0x5bd2, 1893}, - {0x5bd3, 4325}, - {0x5bd5, 0}, - {0x5bd6, 1}, - {0x5bd7, 2}, - {0x5bd8, 3}, - {0x5bd9, 4}, - {0x5bda, 5}, - {0x5bdb, 6}, - {0x5bdc, 7}, - {0x5bdd, 3163}, - {0x5bde, 2834}, - {0x5bdf, 1203}, - {0x5be1, 1834}, - {0x5be2, 8421}, - {0x5be4, 5943}, - {0x5be5, 2577}, - {0x5be6, 8495}, - {0x5be7, 8355}, - {0x5be8, 4432}, - {0x5be9, 8481}, - {0x5beb, 8660}, - {0x5bec, 8165}, - {0x5bee, 5944}, - {0x5bf0, 5946}, - {0x5bf2, 0}, - {0x5bf3, 1}, - {0x5bf4, 2}, - {0x5bf5, 7818}, - {0x5bf6, 7735}, - {0x5bf8, 1386}, - {0x5bf9, 1555}, - {0x5bfa, 3511}, - {0x5bfb, 4057}, - {0x5bfc, 1437}, - {0x5bfe, 0}, - {0x5bff, 3440}, - {0x5c01, 1663}, - {0x5c03, 0}, - {0x5c04, 3357}, - {0x5c06, 2172}, - {0x5c07, 8094}, - {0x5c08, 8870}, - {0x5c09, 3789}, - {0x5c0a, 4685}, - {0x5c0b, 8680}, - {0x5c0d, 7898}, - {0x5c0e, 7865}, - {0x5c0f, 3948}, - {0x5c11, 3346}, - {0x5c13, 0}, - {0x5c14, 1594}, - {0x5c15, 6066}, - {0x5c16, 2133}, - {0x5c18, 1251}, - {0x5c1a, 3337}, - {0x5c1c, 6067}, - {0x5c1d, 1223}, - {0x5c1f, 0}, - {0x5c20, 1}, - {0x5c21, 2}, - {0x5c22, 5302}, - {0x5c24, 4269}, - {0x5c25, 5303}, - {0x5c27, 4137}, - {0x5c29, 0}, - {0x5c2a, 1}, - {0x5c2b, 2}, - {0x5c2c, 5304}, - {0x5c2e, 0}, - {0x5c2f, 1}, - {0x5c30, 2}, - {0x5c31, 2300}, - {0x5c33, 0}, - {0x5c34, 5305}, - {0x5c36, 0}, - {0x5c37, 9052}, - {0x5c38, 3395}, - {0x5c39, 4227}, - {0x5c3a, 1284}, - {0x5c3b, 5990}, - {0x5c3c, 2884}, - {0x5c3d, 2256}, - {0x5c3e, 3777}, - {0x5c3f, 2901}, - {0x5c40, 2309}, - {0x5c41, 3015}, - {0x5c42, 1194}, - {0x5c44, 0}, - {0x5c45, 2306}, - {0x5c47, 0}, - {0x5c48, 3193}, - {0x5c49, 3646}, - {0x5c4a, 2237}, - {0x5c4b, 3820}, - {0x5c4d, 0}, - {0x5c4e, 3409}, - {0x5c4f, 3040}, - {0x5c50, 5992}, - {0x5c51, 3975}, - {0x5c53, 0}, - {0x5c54, 1}, - {0x5c55, 4442}, - {0x5c57, 0}, - {0x5c58, 1}, - {0x5c59, 5993}, - {0x5c5b, 0}, - {0x5c5c, 1}, - {0x5c5d, 2}, - {0x5c5e, 3467}, - {0x5c60, 3697}, - {0x5c61, 2668}, - {0x5c62, 8272}, - {0x5c63, 5995}, - {0x5c64, 7783}, - {0x5c65, 2667}, - {0x5c66, 5996}, - {0x5c68, 9204}, - {0x5c6a, 0}, - {0x5c6b, 1}, - {0x5c6c, 8510}, - {0x5c6e, 6004}, - {0x5c6f, 3710}, - {0x5c71, 3318}, - {0x5c73, 0}, - {0x5c74, 1}, - {0x5c75, 2}, - {0x5c76, 3}, - {0x5c77, 4}, - {0x5c78, 5}, - {0x5c79, 4192}, - {0x5c7a, 5548}, - {0x5c7c, 0}, - {0x5c7d, 1}, - {0x5c7e, 2}, - {0x5c7f, 4305}, - {0x5c81, 3551}, - {0x5c82, 3088}, - {0x5c84, 0}, - {0x5c85, 1}, - {0x5c86, 2}, - {0x5c87, 3}, - {0x5c88, 5552}, - {0x5c8a, 0}, - {0x5c8b, 1}, - {0x5c8c, 5547}, - {0x5c8d, 5549}, - {0x5c8f, 0}, - {0x5c90, 5550}, - {0x5c91, 5555}, - {0x5c93, 0}, - {0x5c94, 1204}, - {0x5c96, 5551}, - {0x5c97, 1749}, - {0x5c98, 5553}, - {0x5c99, 5554}, - {0x5c9a, 5556}, - {0x5c9b, 1435}, - {0x5c9c, 5557}, - {0x5c9e, 0}, - {0x5c9f, 1}, - {0x5ca0, 2}, - {0x5ca1, 7958}, - {0x5ca2, 5559}, - {0x5ca3, 5564}, - {0x5ca5, 0}, - {0x5ca6, 1}, - {0x5ca7, 2}, - {0x5ca8, 3}, - {0x5ca9, 4091}, - {0x5cab, 5562}, - {0x5cac, 5561}, - {0x5cad, 2612}, - {0x5caf, 0}, - {0x5cb0, 1}, - {0x5cb1, 5563}, - {0x5cb3, 4355}, - {0x5cb5, 5558}, - {0x5cb7, 5566}, - {0x5cb8, 961}, - {0x5cba, 0}, - {0x5cbb, 1}, - {0x5cbc, 2}, - {0x5cbd, 5560}, - {0x5cbf, 2438}, - {0x5cc1, 5565}, - {0x5cc3, 0}, - {0x5cc4, 5567}, - {0x5cc6, 0}, - {0x5cc7, 1}, - {0x5cc8, 2}, - {0x5cc9, 3}, - {0x5cca, 4}, - {0x5ccb, 5570}, - {0x5ccd, 0}, - {0x5cce, 1}, - {0x5ccf, 2}, - {0x5cd0, 3}, - {0x5cd1, 4}, - {0x5cd2, 5568}, - {0x5cd4, 0}, - {0x5cd5, 1}, - {0x5cd6, 2}, - {0x5cd7, 3}, - {0x5cd8, 4}, - {0x5cd9, 4548}, - {0x5cdb, 0}, - {0x5cdc, 1}, - {0x5cdd, 2}, - {0x5cde, 3}, - {0x5cdf, 4}, - {0x5ce0, 5}, - {0x5ce1, 3884}, - {0x5ce3, 0}, - {0x5ce4, 5569}, - {0x5ce5, 5571}, - {0x5ce6, 2676}, - {0x5ce8, 1578}, - {0x5cea, 4317}, - {0x5cec, 0}, - {0x5ced, 3146}, - {0x5cef, 0}, - {0x5cf0, 1666}, - {0x5cf2, 0}, - {0x5cf3, 1}, - {0x5cf4, 9097}, - {0x5cf6, 7863}, - {0x5cf8, 0}, - {0x5cf9, 1}, - {0x5cfa, 2}, - {0x5cfb, 2349}, - {0x5cfd, 8628}, - {0x5cff, 0}, - {0x5d01, 0}, - {0x5d02, 5572}, - {0x5d03, 5573}, - {0x5d05, 0}, - {0x5d06, 5579}, - {0x5d07, 1292}, - {0x5d09, 0}, - {0x5d0a, 1}, - {0x5d0b, 2}, - {0x5d0c, 3}, - {0x5d0d, 9103}, - {0x5d0e, 3080}, - {0x5d10, 0}, - {0x5d11, 1}, - {0x5d12, 2}, - {0x5d13, 3}, - {0x5d14, 1377}, - {0x5d16, 4075}, - {0x5d17, 7962}, - {0x5d19, 0}, - {0x5d1a, 1}, - {0x5d1b, 5580}, - {0x5d1d, 0}, - {0x5d1e, 5578}, - {0x5d20, 0}, - {0x5d21, 1}, - {0x5d22, 2}, - {0x5d23, 3}, - {0x5d24, 5577}, - {0x5d26, 5575}, - {0x5d27, 5574}, - {0x5d29, 1065}, - {0x5d2b, 0}, - {0x5d2c, 9099}, - {0x5d2d, 4441}, - {0x5d2e, 5576}, - {0x5d30, 0}, - {0x5d31, 1}, - {0x5d32, 2}, - {0x5d33, 3}, - {0x5d34, 5583}, - {0x5d36, 0}, - {0x5d37, 1}, - {0x5d38, 2}, - {0x5d39, 3}, - {0x5d3a, 4}, - {0x5d3b, 5}, - {0x5d3c, 6}, - {0x5d3d, 5584}, - {0x5d3e, 5582}, - {0x5d40, 0}, - {0x5d41, 1}, - {0x5d42, 2}, - {0x5d43, 3}, - {0x5d44, 4}, - {0x5d45, 5}, - {0x5d46, 6}, - {0x5d47, 6946}, - {0x5d49, 0}, - {0x5d4a, 5591}, - {0x5d4b, 5590}, - {0x5d4c, 3123}, - {0x5d4e, 0}, - {0x5d4f, 1}, - {0x5d50, 9098}, - {0x5d52, 0}, - {0x5d53, 1}, - {0x5d54, 2}, - {0x5d55, 3}, - {0x5d56, 4}, - {0x5d57, 5}, - {0x5d58, 5581}, - {0x5d5a, 0}, - {0x5d5b, 5586}, - {0x5d5d, 5588}, - {0x5d5f, 0}, - {0x5d60, 1}, - {0x5d61, 2}, - {0x5d62, 3}, - {0x5d63, 4}, - {0x5d64, 5}, - {0x5d65, 6}, - {0x5d66, 7}, - {0x5d67, 8}, - {0x5d68, 9}, - {0x5d69, 5592}, - {0x5d6b, 5589}, - {0x5d6c, 5585}, - {0x5d6e, 0}, - {0x5d6f, 5587}, - {0x5d71, 0}, - {0x5d72, 1}, - {0x5d73, 2}, - {0x5d74, 5593}, - {0x5d76, 0}, - {0x5d77, 1}, - {0x5d78, 2}, - {0x5d79, 3}, - {0x5d7a, 4}, - {0x5d7b, 5}, - {0x5d7c, 6}, - {0x5d7d, 7}, - {0x5d7e, 8}, - {0x5d7f, 9}, - {0x5d80, 10}, - {0x5d81, 9105}, - {0x5d82, 5594}, - {0x5d84, 8817}, - {0x5d86, 0}, - {0x5d87, 9096}, - {0x5d89, 0}, - {0x5d8a, 1}, - {0x5d8b, 2}, - {0x5d8c, 3}, - {0x5d8d, 4}, - {0x5d8e, 5}, - {0x5d8f, 6}, - {0x5d90, 7}, - {0x5d91, 8}, - {0x5d92, 9}, - {0x5d93, 10}, - {0x5d94, 11}, - {0x5d95, 12}, - {0x5d96, 13}, - {0x5d97, 9102}, - {0x5d99, 5595}, - {0x5d9b, 0}, - {0x5d9c, 1}, - {0x5d9d, 5596}, - {0x5d9f, 0}, - {0x5da0, 9101}, - {0x5da2, 0}, - {0x5da3, 1}, - {0x5da4, 2}, - {0x5da5, 3}, - {0x5da6, 4}, - {0x5da7, 9100}, - {0x5da9, 0}, - {0x5daa, 1}, - {0x5dab, 2}, - {0x5dac, 3}, - {0x5dad, 4}, - {0x5dae, 5}, - {0x5daf, 6}, - {0x5db0, 7}, - {0x5db1, 8}, - {0x5db2, 9}, - {0x5db3, 10}, - {0x5db4, 11}, - {0x5db5, 12}, - {0x5db6, 13}, - {0x5db7, 5598}, - {0x5db8, 9104}, - {0x5dba, 8243}, - {0x5dbc, 8764}, - {0x5dbe, 0}, - {0x5dbf, 1}, - {0x5dc0, 2}, - {0x5dc1, 3}, - {0x5dc2, 4}, - {0x5dc3, 5}, - {0x5dc4, 6}, - {0x5dc5, 5599}, - {0x5dc7, 0}, - {0x5dc8, 1}, - {0x5dc9, 2}, - {0x5dca, 3}, - {0x5dcb, 8169}, - {0x5dcd, 3760}, - {0x5dcf, 0}, - {0x5dd0, 1}, - {0x5dd1, 2}, - {0x5dd2, 8277}, - {0x5dd4, 9106}, - {0x5dd6, 0}, - {0x5dd7, 1}, - {0x5dd8, 2}, - {0x5dd9, 3}, - {0x5dda, 4}, - {0x5ddb, 6165}, - {0x5ddd, 1323}, - {0x5dde, 4572}, - {0x5de0, 0}, - {0x5de1, 4059}, - {0x5de2, 1239}, - {0x5de4, 0}, - {0x5de5, 1789}, - {0x5de6, 4688}, - {0x5de7, 3142}, - {0x5de8, 2317}, - {0x5de9, 1799}, - {0x5deb, 3814}, - {0x5ded, 0}, - {0x5dee, 1205}, - {0x5def, 5023}, - {0x5df0, 8996}, - {0x5df1, 2093}, - {0x5df2, 4184}, - {0x5df3, 3517}, - {0x5df4, 984}, - {0x5df6, 0}, - {0x5df7, 3932}, - {0x5df9, 0}, - {0x5dfa, 1}, - {0x5dfb, 2}, - {0x5dfc, 3}, - {0x5dfd, 4855}, - {0x5dfe, 2238}, - {0x5e01, 1083}, - {0x5e02, 3431}, - {0x5e03, 1155}, - {0x5e05, 3484}, - {0x5e06, 1608}, - {0x5e08, 3389}, - {0x5e0a, 0}, - {0x5e0b, 1}, - {0x5e0c, 3856}, - {0x5e0e, 0}, - {0x5e0f, 5534}, - {0x5e10, 4459}, - {0x5e11, 5537}, - {0x5e13, 0}, - {0x5e14, 5536}, - {0x5e15, 2946}, - {0x5e16, 3662}, - {0x5e18, 2554}, - {0x5e19, 5535}, - {0x5e1a, 4578}, - {0x5e1b, 1142}, - {0x5e1c, 4547}, - {0x5e1d, 1468}, - {0x5e1f, 0}, - {0x5e20, 1}, - {0x5e21, 2}, - {0x5e22, 3}, - {0x5e23, 4}, - {0x5e24, 5}, - {0x5e25, 8515}, - {0x5e26, 1403}, - {0x5e27, 4512}, - {0x5e29, 0}, - {0x5e2a, 1}, - {0x5e2b, 8489}, - {0x5e2d, 3868}, - {0x5e2e, 1018}, - {0x5e30, 0}, - {0x5e31, 5538}, - {0x5e33, 8823}, - {0x5e35, 0}, - {0x5e36, 7847}, - {0x5e37, 5541}, - {0x5e38, 1224}, - {0x5e3a, 0}, - {0x5e3b, 5539}, - {0x5e3c, 5540}, - {0x5e3d, 2742}, - {0x5e3f, 0}, - {0x5e40, 8837}, - {0x5e42, 2786}, - {0x5e43, 9092}, - {0x5e44, 5542}, - {0x5e45, 1686}, - {0x5e47, 0}, - {0x5e48, 1}, - {0x5e49, 2}, - {0x5e4a, 3}, - {0x5e4b, 4}, - {0x5e4c, 2020}, - {0x5e4e, 0}, - {0x5e4f, 1}, - {0x5e50, 2}, - {0x5e51, 3}, - {0x5e52, 4}, - {0x5e53, 5}, - {0x5e54, 5543}, - {0x5e55, 2846}, - {0x5e57, 9095}, - {0x5e58, 9094}, - {0x5e5a, 0}, - {0x5e5b, 5544}, - {0x5e5d, 0}, - {0x5e5e, 5545}, - {0x5e5f, 8848}, - {0x5e61, 5546}, - {0x5e62, 1332}, - {0x5e63, 7748}, - {0x5e65, 0}, - {0x5e66, 1}, - {0x5e67, 2}, - {0x5e68, 3}, - {0x5e69, 4}, - {0x5e6a, 5}, - {0x5e6b, 7730}, - {0x5e6c, 9093}, - {0x5e6e, 0}, - {0x5e6f, 1}, - {0x5e70, 2}, - {0x5e71, 3}, - {0x5e72, 1732}, - {0x5e73, 3036}, - {0x5e74, 2893}, - {0x5e76, 1129}, - {0x5e78, 3997}, - {0x5e79, 7955}, - {0x5e7a, 6163}, - {0x5e7b, 2008}, - {0x5e7c, 4284}, - {0x5e7d, 4265}, - {0x5e7e, 8051}, - {0x5e7f, 1852}, - {0x5e80, 5681}, - {0x5e82, 0}, - {0x5e83, 1}, - {0x5e84, 4620}, - {0x5e86, 3177}, - {0x5e87, 1084}, - {0x5e89, 0}, - {0x5e8a, 1333}, - {0x5e8b, 5683}, - {0x5e8d, 0}, - {0x5e8e, 1}, - {0x5e8f, 4029}, - {0x5e90, 2645}, - {0x5e91, 5682}, - {0x5e93, 2415}, - {0x5e94, 4235}, - {0x5e95, 1464}, - {0x5e96, 5684}, - {0x5e97, 1483}, - {0x5e99, 2802}, - {0x5e9a, 1784}, - {0x5e9c, 1705}, - {0x5e9e, 2964}, - {0x5e9f, 1644}, - {0x5ea0, 5686}, - {0x5ea2, 0}, - {0x5ea3, 1}, - {0x5ea4, 2}, - {0x5ea5, 5685}, - {0x5ea6, 1543}, - {0x5ea7, 4694}, - {0x5ea9, 0}, - {0x5eaa, 1}, - {0x5eab, 8160}, - {0x5ead, 3670}, - {0x5eaf, 0}, - {0x5eb0, 1}, - {0x5eb1, 2}, - {0x5eb2, 3}, - {0x5eb3, 5690}, - {0x5eb5, 5688}, - {0x5eb6, 3475}, - {0x5eb7, 2370}, - {0x5eb8, 4254}, - {0x5eb9, 5687}, - {0x5ebb, 0}, - {0x5ebc, 1}, - {0x5ebd, 2}, - {0x5ebe, 5689}, - {0x5ec0, 0}, - {0x5ec1, 1}, - {0x5ec2, 2}, - {0x5ec3, 3}, - {0x5ec4, 4}, - {0x5ec5, 5}, - {0x5ec6, 6}, - {0x5ec7, 7}, - {0x5ec8, 8}, - {0x5ec9, 2551}, - {0x5eca, 2483}, - {0x5ecc, 0}, - {0x5ecd, 1}, - {0x5ece, 2}, - {0x5ecf, 3}, - {0x5ed0, 4}, - {0x5ed1, 5693}, - {0x5ed2, 5692}, - {0x5ed3, 2453}, - {0x5ed5, 0}, - {0x5ed6, 2583}, - {0x5ed8, 0}, - {0x5ed9, 1}, - {0x5eda, 2}, - {0x5edb, 5694}, - {0x5edd, 0}, - {0x5ede, 1}, - {0x5edf, 8327}, - {0x5ee0, 7800}, - {0x5ee1, 9134}, - {0x5ee2, 7926}, - {0x5ee3, 7985}, - {0x5ee5, 0}, - {0x5ee6, 1}, - {0x5ee7, 2}, - {0x5ee8, 5695}, - {0x5eea, 5696}, - {0x5eec, 8261}, - {0x5eee, 0}, - {0x5eef, 1}, - {0x5ef0, 2}, - {0x5ef1, 3}, - {0x5ef2, 4}, - {0x5ef3, 8568}, - {0x5ef4, 5016}, - {0x5ef6, 4092}, - {0x5ef7, 3667}, - {0x5ef9, 0}, - {0x5efa, 2169}, - {0x5efc, 0}, - {0x5efd, 1}, - {0x5efe, 5293}, - {0x5eff, 4699}, - {0x5f00, 2359}, - {0x5f01, 5021}, - {0x5f02, 4211}, - {0x5f03, 3097}, - {0x5f04, 2923}, - {0x5f06, 0}, - {0x5f07, 1}, - {0x5f08, 5294}, - {0x5f0a, 1088}, - {0x5f0b, 5366}, - {0x5f0d, 0}, - {0x5f0e, 1}, - {0x5f0f, 3412}, - {0x5f11, 5369}, - {0x5f13, 1798}, - {0x5f15, 4228}, - {0x5f17, 1696}, - {0x5f18, 1954}, - {0x5f1a, 0}, - {0x5f1b, 1279}, - {0x5f1d, 0}, - {0x5f1e, 1}, - {0x5f1f, 1469}, - {0x5f20, 4454}, - {0x5f22, 0}, - {0x5f23, 1}, - {0x5f24, 2}, - {0x5f25, 2779}, - {0x5f26, 3903}, - {0x5f27, 1974}, - {0x5f29, 5999}, - {0x5f2a, 5998}, - {0x5f2c, 0}, - {0x5f2d, 6000}, - {0x5f2f, 3733}, - {0x5f31, 3280}, - {0x5f33, 9205}, - {0x5f35, 8821}, - {0x5f37, 0}, - {0x5f38, 1}, - {0x5f39, 1424}, - {0x5f3a, 3132}, - {0x5f3c, 6002}, - {0x5f3e, 0}, - {0x5f3f, 1}, - {0x5f40, 6590}, - {0x5f42, 0}, - {0x5f43, 1}, - {0x5f44, 2}, - {0x5f45, 3}, - {0x5f46, 9838}, - {0x5f48, 7856}, - {0x5f4a, 0}, - {0x5f4b, 1}, - {0x5f4c, 8323}, - {0x5f4e, 8584}, - {0x5f50, 5986}, - {0x5f52, 1858}, - {0x5f53, 1426}, - {0x5f55, 2659}, - {0x5f56, 5988}, - {0x5f57, 5987}, - {0x5f58, 5989}, - {0x5f59, 9852}, - {0x5f5b, 0}, - {0x5f5c, 1}, - {0x5f5d, 4180}, - {0x5f5f, 0}, - {0x5f60, 1}, - {0x5f61, 5614}, - {0x5f62, 3993}, - {0x5f64, 3679}, - {0x5f66, 4110}, - {0x5f68, 0}, - {0x5f69, 1169}, - {0x5f6a, 1108}, - {0x5f6c, 1115}, - {0x5f6d, 2990}, - {0x5f6f, 0}, - {0x5f70, 4452}, - {0x5f71, 4245}, - {0x5f73, 5600}, - {0x5f75, 0}, - {0x5f76, 1}, - {0x5f77, 5601}, - {0x5f79, 4194}, - {0x5f7b, 1246}, - {0x5f7c, 1076}, - {0x5f7e, 0}, - {0x5f7f, 1}, - {0x5f80, 3754}, - {0x5f81, 4504}, - {0x5f82, 5602}, - {0x5f84, 2277}, - {0x5f85, 1408}, - {0x5f87, 5603}, - {0x5f88, 1939}, - {0x5f89, 5604}, - {0x5f8a, 1991}, - {0x5f8b, 2672}, - {0x5f8c, 5605}, - {0x5f8e, 0}, - {0x5f8f, 1}, - {0x5f90, 4023}, - {0x5f91, 8133}, - {0x5f92, 3694}, - {0x5f94, 0}, - {0x5f95, 5606}, - {0x5f97, 1444}, - {0x5f98, 2952}, - {0x5f99, 5607}, - {0x5f9b, 0}, - {0x5f9c, 5608}, - {0x5f9e, 7841}, - {0x5fa0, 9107}, - {0x5fa1, 4318}, - {0x5fa3, 0}, - {0x5fa4, 1}, - {0x5fa5, 2}, - {0x5fa6, 3}, - {0x5fa7, 4}, - {0x5fa8, 5609}, - {0x5fa9, 7947}, - {0x5faa, 4054}, - {0x5fac, 0}, - {0x5fad, 5610}, - {0x5fae, 3761}, - {0x5fb0, 0}, - {0x5fb1, 1}, - {0x5fb2, 2}, - {0x5fb3, 3}, - {0x5fb4, 4}, - {0x5fb5, 5611}, - {0x5fb7, 1443}, - {0x5fb9, 7804}, - {0x5fbb, 0}, - {0x5fbc, 5612}, - {0x5fbd, 2026}, - {0x5fbf, 0}, - {0x5fc0, 1}, - {0x5fc1, 2}, - {0x5fc2, 3}, - {0x5fc3, 3983}, - {0x5fc4, 5698}, - {0x5fc5, 1089}, - {0x5fc6, 4203}, - {0x5fc8, 0}, - {0x5fc9, 5699}, - {0x5fcb, 0}, - {0x5fcc, 2108}, - {0x5fcd, 3239}, - {0x5fcf, 5701}, - {0x5fd0, 6668}, - {0x5fd1, 6667}, - {0x5fd2, 5367}, - {0x5fd4, 0}, - {0x5fd5, 1}, - {0x5fd6, 5700}, - {0x5fd7, 4541}, - {0x5fd8, 3757}, - {0x5fd9, 2731}, - {0x5fdb, 0}, - {0x5fdc, 1}, - {0x5fdd, 5763}, - {0x5fdf, 0}, - {0x5fe0, 4561}, - {0x5fe1, 5705}, - {0x5fe3, 0}, - {0x5fe4, 5706}, - {0x5fe6, 0}, - {0x5fe7, 4268}, - {0x5fe9, 0}, - {0x5fea, 5710}, - {0x5feb, 2425}, - {0x5fed, 5711}, - {0x5fee, 5703}, - {0x5ff0, 0}, - {0x5ff1, 1253}, - {0x5ff3, 0}, - {0x5ff4, 1}, - {0x5ff5, 2897}, - {0x5ff7, 0}, - {0x5ff8, 5712}, - {0x5ffa, 0}, - {0x5ffb, 3982}, - {0x5ffd, 1965}, - {0x5ffe, 5707}, - {0x5fff, 1659}, - {0x6000, 1992}, - {0x6001, 3583}, - {0x6002, 3520}, - {0x6003, 5702}, - {0x6004, 5704}, - {0x6005, 5708}, - {0x6006, 5709}, - {0x6008, 0}, - {0x6009, 1}, - {0x600a, 5721}, - {0x600c, 0}, - {0x600d, 5718}, - {0x600e, 4408}, - {0x600f, 5717}, - {0x6011, 0}, - {0x6012, 2926}, - {0x6014, 4507}, - {0x6015, 2947}, - {0x6016, 1159}, - {0x6018, 0}, - {0x6019, 5713}, - {0x601b, 5716}, - {0x601c, 2552}, - {0x601d, 3505}, - {0x601f, 0}, - {0x6020, 1410}, - {0x6021, 5723}, - {0x6023, 0}, - {0x6024, 1}, - {0x6025, 2084}, - {0x6026, 5715}, - {0x6027, 3999}, - {0x6028, 4348}, - {0x6029, 5719}, - {0x602a, 1839}, - {0x602b, 5720}, - {0x602d, 0}, - {0x602e, 1}, - {0x602f, 3152}, - {0x6031, 0}, - {0x6032, 1}, - {0x6033, 2}, - {0x6034, 3}, - {0x6035, 5714}, - {0x6037, 0}, - {0x6038, 1}, - {0x6039, 2}, - {0x603a, 3}, - {0x603b, 4665}, - {0x603c, 6669}, - {0x603e, 0}, - {0x603f, 5722}, - {0x6041, 6673}, - {0x6042, 5728}, - {0x6043, 3432}, - {0x6045, 0}, - {0x6046, 1}, - {0x6047, 2}, - {0x6048, 3}, - {0x6049, 4}, - {0x604a, 5}, - {0x604b, 2558}, - {0x604d, 2021}, - {0x604f, 0}, - {0x6050, 2403}, - {0x6052, 1946}, - {0x6054, 0}, - {0x6055, 3478}, - {0x6057, 0}, - {0x6058, 1}, - {0x6059, 6674}, - {0x605a, 6671}, - {0x605c, 0}, - {0x605d, 6670}, - {0x605f, 0}, - {0x6060, 1}, - {0x6061, 2}, - {0x6062, 2027}, - {0x6063, 6675}, - {0x6064, 4031}, - {0x6066, 0}, - {0x6067, 6672}, - {0x6068, 1941}, - {0x6069, 1590}, - {0x606a, 5729}, - {0x606b, 1521}, - {0x606c, 3652}, - {0x606d, 1792}, - {0x606f, 3855}, - {0x6070, 3102}, - {0x6072, 0}, - {0x6073, 2399}, - {0x6075, 0}, - {0x6076, 1584}, - {0x6078, 5724}, - {0x6079, 5725}, - {0x607a, 5727}, - {0x607b, 5726}, - {0x607c, 2872}, - {0x607d, 5730}, - {0x607f, 4262}, - {0x6081, 0}, - {0x6082, 1}, - {0x6083, 5735}, - {0x6084, 3137}, - {0x6086, 0}, - {0x6087, 1}, - {0x6088, 2}, - {0x6089, 3857}, - {0x608b, 0}, - {0x608c, 5737}, - {0x608d, 1902}, - {0x608f, 0}, - {0x6090, 1}, - {0x6091, 2}, - {0x6092, 5736}, - {0x6094, 2031}, - {0x6096, 5731}, - {0x6098, 0}, - {0x6099, 1}, - {0x609a, 5732}, - {0x609b, 5738}, - {0x609d, 5734}, - {0x609f, 3841}, - {0x60a0, 4267}, - {0x60a2, 0}, - {0x60a3, 2001}, - {0x60a5, 0}, - {0x60a6, 4358}, - {0x60a8, 2909}, - {0x60aa, 0}, - {0x60ab, 6676}, - {0x60ac, 4039}, - {0x60ad, 5733}, - {0x60af, 2810}, - {0x60b1, 5741}, - {0x60b2, 1048}, - {0x60b4, 5746}, - {0x60b5, 9140}, - {0x60b6, 8318}, - {0x60b8, 2101}, - {0x60ba, 0}, - {0x60bb, 5740}, - {0x60bc, 1440}, - {0x60be, 0}, - {0x60bf, 1}, - {0x60c0, 2}, - {0x60c1, 3}, - {0x60c2, 4}, - {0x60c3, 5}, - {0x60c4, 6}, - {0x60c5, 3174}, - {0x60c6, 5744}, - {0x60c8, 0}, - {0x60c9, 1}, - {0x60ca, 2265}, - {0x60cb, 3744}, - {0x60cd, 0}, - {0x60ce, 1}, - {0x60cf, 2}, - {0x60d0, 3}, - {0x60d1, 2056}, - {0x60d3, 0}, - {0x60d4, 1}, - {0x60d5, 3643}, - {0x60d7, 0}, - {0x60d8, 5743}, - {0x60da, 5745}, - {0x60dc, 3860}, - {0x60dd, 5742}, - {0x60df, 3768}, - {0x60e0, 2034}, - {0x60e1, 7907}, - {0x60e3, 0}, - {0x60e4, 1}, - {0x60e5, 2}, - {0x60e6, 1484}, - {0x60e7, 2324}, - {0x60e8, 1177}, - {0x60e9, 1266}, - {0x60eb, 1058}, - {0x60ec, 5739}, - {0x60ed, 1176}, - {0x60ee, 1421}, - {0x60ef, 1848}, - {0x60f0, 1575}, - {0x60f1, 8341}, - {0x60f2, 9147}, - {0x60f3, 3928}, - {0x60f4, 5751}, - {0x60f6, 2017}, - {0x60f8, 0}, - {0x60f9, 3234}, - {0x60fa, 3989}, - {0x60fb, 9145}, - {0x60fd, 0}, - {0x60fe, 1}, - {0x60ff, 2}, - {0x6100, 5752}, - {0x6101, 1299}, - {0x6103, 0}, - {0x6104, 1}, - {0x6105, 2}, - {0x6106, 6677}, - {0x6108, 4319}, - {0x6109, 4297}, - {0x610b, 0}, - {0x610c, 1}, - {0x610d, 6678}, - {0x610e, 5753}, - {0x610f, 4201}, - {0x6111, 0}, - {0x6112, 1}, - {0x6113, 2}, - {0x6114, 3}, - {0x6115, 5749}, - {0x6117, 0}, - {0x6118, 1}, - {0x6119, 2}, - {0x611a, 4291}, - {0x611b, 7720}, - {0x611c, 9149}, - {0x611e, 0}, - {0x611f, 1739}, - {0x6120, 5747}, - {0x6122, 0}, - {0x6123, 5750}, - {0x6124, 1660}, - {0x6126, 5748}, - {0x6127, 2445}, - {0x6129, 0}, - {0x612a, 1}, - {0x612b, 5754}, - {0x612d, 0}, - {0x612e, 1}, - {0x612f, 2}, - {0x6130, 3}, - {0x6131, 4}, - {0x6132, 5}, - {0x6133, 6}, - {0x6134, 9141}, - {0x6136, 0}, - {0x6137, 9146}, - {0x6139, 0}, - {0x613a, 1}, - {0x613b, 2}, - {0x613c, 3}, - {0x613d, 4}, - {0x613e, 9139}, - {0x613f, 4347}, - {0x6141, 0}, - {0x6142, 1}, - {0x6143, 2}, - {0x6144, 3}, - {0x6145, 4}, - {0x6146, 5}, - {0x6147, 6}, - {0x6148, 1355}, - {0x614a, 5755}, - {0x614b, 8546}, - {0x614c, 2010}, - {0x614e, 3376}, - {0x6150, 0}, - {0x6151, 3358}, - {0x6153, 0}, - {0x6154, 1}, - {0x6155, 2848}, - {0x6157, 0}, - {0x6158, 7774}, - {0x615a, 7773}, - {0x615c, 0}, - {0x615d, 6679}, - {0x615f, 9143}, - {0x6161, 0}, - {0x6162, 2724}, - {0x6163, 7983}, - {0x6164, 9439}, - {0x6166, 0}, - {0x6167, 2032}, - {0x6168, 2363}, - {0x616a, 9138}, - {0x616b, 8526}, - {0x616d, 0}, - {0x616e, 8274}, - {0x6170, 3790}, - {0x6172, 0}, - {0x6173, 9148}, - {0x6175, 5756}, - {0x6176, 8427}, - {0x6177, 2371}, - {0x6179, 0}, - {0x617a, 1}, - {0x617b, 2}, - {0x617c, 3}, - {0x617d, 4}, - {0x617e, 5}, - {0x617f, 6}, - {0x6180, 7}, - {0x6181, 8}, - {0x6182, 8754}, - {0x6184, 0}, - {0x6185, 1}, - {0x6186, 2}, - {0x6187, 3}, - {0x6188, 4}, - {0x6189, 5}, - {0x618a, 7743}, - {0x618b, 1112}, - {0x618d, 0}, - {0x618e, 4410}, - {0x6190, 8219}, - {0x6191, 8380}, - {0x6192, 9150}, - {0x6194, 5758}, - {0x6196, 0}, - {0x6197, 1}, - {0x6198, 2}, - {0x6199, 3}, - {0x619a, 7854}, - {0x619c, 0}, - {0x619d, 6681}, - {0x619f, 0}, - {0x61a0, 1}, - {0x61a1, 2}, - {0x61a2, 3}, - {0x61a3, 4}, - {0x61a4, 7931}, - {0x61a6, 0}, - {0x61a7, 5759}, - {0x61a8, 1888}, - {0x61a9, 6680}, - {0x61ab, 8329}, - {0x61ac, 5757}, - {0x61ae, 9137}, - {0x61b0, 0}, - {0x61b1, 1}, - {0x61b2, 8644}, - {0x61b4, 0}, - {0x61b5, 1}, - {0x61b6, 8724}, - {0x61b7, 5760}, - {0x61b9, 0}, - {0x61ba, 1}, - {0x61bb, 2}, - {0x61bc, 3}, - {0x61bd, 4}, - {0x61be, 1901}, - {0x61c0, 0}, - {0x61c1, 1}, - {0x61c2, 1517}, - {0x61c4, 0}, - {0x61c5, 1}, - {0x61c6, 2}, - {0x61c7, 8158}, - {0x61c8, 3971}, - {0x61c9, 8739}, - {0x61ca, 974}, - {0x61cb, 6682}, - {0x61cc, 9142}, - {0x61ce, 0}, - {0x61cf, 1}, - {0x61d0, 2}, - {0x61d1, 6683}, - {0x61d2, 2476}, - {0x61d4, 5761}, - {0x61d6, 0}, - {0x61d7, 1}, - {0x61d8, 2}, - {0x61d9, 3}, - {0x61da, 4}, - {0x61db, 5}, - {0x61dc, 6}, - {0x61dd, 7}, - {0x61de, 9868}, - {0x61df, 9438}, - {0x61e1, 0}, - {0x61e2, 1}, - {0x61e3, 9440}, - {0x61e5, 0}, - {0x61e6, 2932}, - {0x61e8, 9144}, - {0x61ea, 0}, - {0x61eb, 1}, - {0x61ec, 2}, - {0x61ed, 3}, - {0x61ee, 4}, - {0x61ef, 5}, - {0x61f0, 6}, - {0x61f1, 7}, - {0x61f2, 7809}, - {0x61f4, 0}, - {0x61f5, 5762}, - {0x61f6, 8190}, - {0x61f7, 8017}, - {0x61f8, 8673}, - {0x61fa, 9136}, - {0x61fc, 8142}, - {0x61fe, 8478}, - {0x61ff, 5088}, - {0x6200, 8225}, - {0x6202, 0}, - {0x6203, 1}, - {0x6204, 2}, - {0x6205, 3}, - {0x6206, 6684}, - {0x6207, 9441}, - {0x6208, 1765}, - {0x620a, 3835}, - {0x620b, 6393}, - {0x620c, 4018}, - {0x620d, 3472}, - {0x620e, 3249}, - {0x620f, 3876}, - {0x6210, 1262}, - {0x6211, 3809}, - {0x6212, 2229}, - {0x6214, 9379}, - {0x6215, 5790}, - {0x6216, 2055}, - {0x6217, 6394}, - {0x6218, 4446}, - {0x621a, 3068}, - {0x621b, 6395}, - {0x621d, 0}, - {0x621e, 1}, - {0x621f, 6396}, - {0x6221, 6398}, - {0x6222, 6397}, - {0x6224, 6400}, - {0x6225, 6399}, - {0x6227, 9380}, - {0x6229, 0}, - {0x622a, 2217}, - {0x622c, 6401}, - {0x622e, 2661}, - {0x6230, 8819}, - {0x6232, 8624}, - {0x6233, 1348}, - {0x6234, 1402}, - {0x6236, 0}, - {0x6237, 1980}, - {0x6239, 0}, - {0x623a, 1}, - {0x623b, 2}, - {0x623c, 3}, - {0x623d, 6644}, - {0x623e, 6643}, - {0x623f, 1628}, - {0x6240, 3566}, - {0x6241, 1099}, - {0x6243, 6645}, - {0x6245, 0}, - {0x6246, 1}, - {0x6247, 3329}, - {0x6248, 6646}, - {0x6249, 6647}, - {0x624b, 3437}, - {0x624c, 5306}, - {0x624d, 1164}, - {0x624e, 4413}, - {0x6250, 0}, - {0x6251, 3050}, - {0x6252, 978}, - {0x6253, 1397}, - {0x6254, 3246}, - {0x6256, 0}, - {0x6257, 1}, - {0x6258, 3713}, - {0x625a, 0}, - {0x625b, 2373}, - {0x625d, 0}, - {0x625e, 1}, - {0x625f, 2}, - {0x6260, 3}, - {0x6261, 4}, - {0x6262, 5}, - {0x6263, 2408}, - {0x6265, 0}, - {0x6266, 3105}, - {0x6267, 4531}, - {0x6269, 2452}, - {0x626a, 5307}, - {0x626b, 3297}, - {0x626c, 4120}, - {0x626d, 2917}, - {0x626e, 1010}, - {0x626f, 1243}, - {0x6270, 3232}, - {0x6272, 0}, - {0x6273, 1005}, - {0x6275, 0}, - {0x6276, 1683}, - {0x6278, 0}, - {0x6279, 3003}, - {0x627b, 0}, - {0x627c, 1586}, - {0x627e, 4467}, - {0x627f, 1269}, - {0x6280, 2095}, - {0x6282, 0}, - {0x6283, 1}, - {0x6284, 1234}, - {0x6286, 0}, - {0x6287, 1}, - {0x6288, 2}, - {0x6289, 2336}, - {0x628a, 988}, - {0x628c, 0}, - {0x628d, 1}, - {0x628e, 2}, - {0x628f, 3}, - {0x6290, 4}, - {0x6291, 4189}, - {0x6292, 3450}, - {0x6293, 4610}, - {0x6295, 3687}, - {0x6296, 1525}, - {0x6297, 2374}, - {0x6298, 4476}, - {0x629a, 1698}, - {0x629b, 2968}, - {0x629d, 0}, - {0x629e, 1}, - {0x629f, 5308}, - {0x62a0, 2406}, - {0x62a1, 2684}, - {0x62a2, 3133}, - {0x62a4, 1977}, - {0x62a5, 1041}, - {0x62a7, 0}, - {0x62a8, 2987}, - {0x62aa, 0}, - {0x62ab, 3004}, - {0x62ac, 3578}, - {0x62ae, 0}, - {0x62af, 1}, - {0x62b0, 2}, - {0x62b1, 1040}, - {0x62b3, 0}, - {0x62b4, 1}, - {0x62b5, 1463}, - {0x62b7, 0}, - {0x62b8, 1}, - {0x62b9, 2827}, - {0x62bb, 5309}, - {0x62bc, 4067}, - {0x62bd, 1294}, - {0x62bf, 2807}, - {0x62c1, 0}, - {0x62c2, 1684}, - {0x62c4, 4595}, - {0x62c5, 1412}, - {0x62c6, 1207}, - {0x62c7, 2839}, - {0x62c8, 2892}, - {0x62c9, 2456}, - {0x62ca, 5310}, - {0x62cc, 1011}, - {0x62cd, 2949}, - {0x62ce, 2601}, - {0x62d0, 1838}, - {0x62d2, 2315}, - {0x62d3, 3721}, - {0x62d4, 985}, - {0x62d6, 3712}, - {0x62d7, 5312}, - {0x62d8, 2303}, - {0x62d9, 4635}, - {0x62da, 5311}, - {0x62db, 4465}, - {0x62dc, 1000}, - {0x62de, 0}, - {0x62df, 2885}, - {0x62e1, 0}, - {0x62e2, 2634}, - {0x62e3, 2147}, - {0x62e5, 4250}, - {0x62e6, 2468}, - {0x62e7, 2914}, - {0x62e8, 1133}, - {0x62e9, 4404}, - {0x62eb, 0}, - {0x62ec, 2451}, - {0x62ed, 3418}, - {0x62ee, 5313}, - {0x62ef, 4509}, - {0x62f1, 1801}, - {0x62f3, 3208}, - {0x62f4, 3486}, - {0x62f6, 5315}, - {0x62f7, 2378}, - {0x62f9, 0}, - {0x62fa, 1}, - {0x62fb, 2}, - {0x62fc, 3027}, - {0x62fd, 4612}, - {0x62fe, 3399}, - {0x62ff, 2854}, - {0x6301, 1275}, - {0x6302, 1835}, - {0x6304, 0}, - {0x6305, 1}, - {0x6306, 2}, - {0x6307, 4535}, - {0x6308, 6478}, - {0x6309, 959}, - {0x630b, 0}, - {0x630c, 1}, - {0x630d, 2}, - {0x630e, 2419}, - {0x6310, 0}, - {0x6311, 3655}, - {0x6313, 0}, - {0x6314, 1}, - {0x6315, 2}, - {0x6316, 3723}, - {0x6318, 0}, - {0x6319, 1}, - {0x631a, 4542}, - {0x631b, 2677}, - {0x631d, 3805}, - {0x631e, 3573}, - {0x631f, 3961}, - {0x6320, 2870}, - {0x6321, 1427}, - {0x6322, 5314}, - {0x6323, 4502}, - {0x6324, 2090}, - {0x6325, 2024}, - {0x6327, 0}, - {0x6328, 943}, - {0x632a, 2931}, - {0x632b, 1391}, - {0x632d, 0}, - {0x632e, 1}, - {0x632f, 4498}, - {0x6331, 0}, - {0x6332, 6479}, - {0x6334, 0}, - {0x6335, 1}, - {0x6336, 2}, - {0x6337, 3}, - {0x6338, 4}, - {0x6339, 5316}, - {0x633a, 3671}, - {0x633c, 0}, - {0x633d, 3741}, - {0x633e, 8657}, - {0x6340, 0}, - {0x6341, 1}, - {0x6342, 3829}, - {0x6343, 5318}, - {0x6345, 3682}, - {0x6346, 2449}, - {0x6348, 0}, - {0x6349, 4634}, - {0x634b, 5317}, - {0x634c, 977}, - {0x634d, 1899}, - {0x634e, 3340}, - {0x634f, 2902}, - {0x6350, 2327}, - {0x6352, 0}, - {0x6353, 1}, - {0x6354, 2}, - {0x6355, 1149}, - {0x6357, 0}, - {0x6358, 1}, - {0x6359, 2}, - {0x635a, 3}, - {0x635b, 4}, - {0x635c, 5}, - {0x635d, 6}, - {0x635e, 2487}, - {0x635f, 3557}, - {0x6361, 2148}, - {0x6362, 2000}, - {0x6363, 1432}, - {0x6365, 0}, - {0x6366, 1}, - {0x6367, 2998}, - {0x6368, 8476}, - {0x6369, 5328}, - {0x636b, 9053}, - {0x636d, 5325}, - {0x636e, 2316}, - {0x6370, 0}, - {0x6371, 5321}, - {0x6372, 9858}, - {0x6374, 0}, - {0x6375, 1}, - {0x6376, 1338}, - {0x6377, 2222}, - {0x6379, 0}, - {0x637a, 5322}, - {0x637b, 2896}, - {0x637d, 0}, - {0x637e, 1}, - {0x637f, 2}, - {0x6380, 3891}, - {0x6382, 1473}, - {0x6383, 8461}, - {0x6384, 8282}, - {0x6386, 0}, - {0x6387, 1565}, - {0x6388, 3441}, - {0x6389, 1493}, - {0x638a, 5327}, - {0x638c, 4455}, - {0x638e, 5323}, - {0x638f, 3616}, - {0x6390, 3101}, - {0x6392, 2950}, - {0x6394, 0}, - {0x6395, 1}, - {0x6396, 4155}, - {0x6398, 2337}, - {0x639a, 0}, - {0x639b, 1}, - {0x639c, 2}, - {0x639d, 3}, - {0x639e, 4}, - {0x639f, 5}, - {0x63a0, 2682}, - {0x63a2, 3600}, - {0x63a3, 1245}, - {0x63a5, 2212}, - {0x63a7, 2405}, - {0x63a8, 3703}, - {0x63a9, 4099}, - {0x63aa, 1390}, - {0x63ac, 5326}, - {0x63ad, 5319}, - {0x63ae, 5329}, - {0x63b0, 6480}, - {0x63b2, 0}, - {0x63b3, 2647}, - {0x63b4, 5324}, - {0x63b6, 0}, - {0x63b7, 4543}, - {0x63b8, 1416}, - {0x63ba, 1211}, - {0x63bc, 5330}, - {0x63be, 5340}, - {0x63c0, 8077}, - {0x63c2, 0}, - {0x63c3, 1}, - {0x63c4, 5335}, - {0x63c6, 5339}, - {0x63c8, 0}, - {0x63c9, 3259}, - {0x63cb, 0}, - {0x63cc, 1}, - {0x63cd, 4670}, - {0x63ce, 5337}, - {0x63cf, 2797}, - {0x63d0, 3636}, - {0x63d2, 1196}, - {0x63d4, 0}, - {0x63d5, 1}, - {0x63d6, 4165}, - {0x63d8, 0}, - {0x63d9, 1}, - {0x63da, 8703}, - {0x63dc, 0}, - {0x63dd, 1}, - {0x63de, 5336}, - {0x63e0, 5333}, - {0x63e1, 3812}, - {0x63e3, 1322}, - {0x63e5, 0}, - {0x63e6, 1}, - {0x63e7, 2}, - {0x63e8, 3}, - {0x63e9, 2360}, - {0x63ea, 2285}, - {0x63ec, 0}, - {0x63ed, 2211}, - {0x63ee, 8024}, - {0x63f0, 0}, - {0x63f1, 1}, - {0x63f2, 5331}, - {0x63f4, 4337}, - {0x63f6, 5320}, - {0x63f8, 5332}, - {0x63fa, 0}, - {0x63fb, 1}, - {0x63fc, 2}, - {0x63fd, 2474}, - {0x63ff, 5334}, - {0x6400, 1210}, - {0x6401, 1764}, - {0x6402, 2638}, - {0x6404, 0}, - {0x6405, 2194}, - {0x6407, 0}, - {0x6408, 1}, - {0x6409, 2}, - {0x640a, 3}, - {0x640b, 5343}, - {0x640c, 5346}, - {0x640d, 8539}, - {0x640f, 1138}, - {0x6410, 1319}, - {0x6412, 0}, - {0x6413, 1389}, - {0x6414, 3295}, - {0x6416, 0}, - {0x6417, 7862}, - {0x6419, 0}, - {0x641a, 1}, - {0x641b, 5344}, - {0x641c, 3526}, - {0x641e, 1758}, - {0x6420, 5345}, - {0x6421, 5348}, - {0x6423, 0}, - {0x6424, 1}, - {0x6425, 2}, - {0x6426, 5347}, - {0x6428, 0}, - {0x6429, 1}, - {0x642a, 3605}, - {0x642c, 1004}, - {0x642d, 1393}, - {0x642f, 0}, - {0x6430, 1}, - {0x6431, 2}, - {0x6432, 3}, - {0x6433, 4}, - {0x6434, 5942}, - {0x6436, 8411}, - {0x6438, 0}, - {0x6439, 1}, - {0x643a, 3962}, - {0x643c, 0}, - {0x643d, 1202}, - {0x643f, 6481}, - {0x6441, 5342}, - {0x6443, 0}, - {0x6444, 3356}, - {0x6445, 5341}, - {0x6446, 997}, - {0x6447, 4136}, - {0x6448, 1120}, - {0x644a, 3586}, - {0x644c, 0}, - {0x644d, 1}, - {0x644e, 2}, - {0x644f, 3}, - {0x6450, 4}, - {0x6451, 9056}, - {0x6452, 5338}, - {0x6454, 3481}, - {0x6456, 0}, - {0x6457, 1}, - {0x6458, 4427}, - {0x645a, 0}, - {0x645b, 1}, - {0x645c, 9057}, - {0x645e, 5349}, - {0x645f, 8256}, - {0x6461, 0}, - {0x6462, 1}, - {0x6463, 2}, - {0x6464, 3}, - {0x6465, 4}, - {0x6466, 5}, - {0x6467, 1376}, - {0x6469, 2825}, - {0x646b, 0}, - {0x646c, 1}, - {0x646d, 5351}, - {0x646f, 8846}, - {0x6471, 0}, - {0x6472, 1}, - {0x6473, 8159}, - {0x6475, 0}, - {0x6476, 9054}, - {0x6478, 2819}, - {0x6479, 2820}, - {0x647a, 5353}, - {0x647b, 7786}, - {0x647d, 0}, - {0x647e, 1}, - {0x647f, 2}, - {0x6480, 3}, - {0x6481, 4}, - {0x6482, 2581}, - {0x6484, 5350}, - {0x6485, 2334}, - {0x6487, 3025}, - {0x6488, 8194}, - {0x648a, 0}, - {0x648b, 1}, - {0x648c, 2}, - {0x648d, 3}, - {0x648e, 4}, - {0x648f, 5}, - {0x6490, 6}, - {0x6491, 1258}, - {0x6492, 3281}, - {0x6493, 8339}, - {0x6495, 3503}, - {0x6496, 5352}, - {0x6498, 0}, - {0x6499, 5356}, - {0x649b, 0}, - {0x649c, 1}, - {0x649d, 2}, - {0x649e, 4623}, - {0x649f, 9055}, - {0x64a1, 0}, - {0x64a2, 1}, - {0x64a3, 7852}, - {0x64a4, 1244}, - {0x64a5, 7764}, - {0x64a7, 0}, - {0x64a8, 1}, - {0x64a9, 2572}, - {0x64ab, 7944}, - {0x64ac, 3144}, - {0x64ad, 1132}, - {0x64ae, 1388}, - {0x64b0, 4616}, - {0x64b2, 8384}, - {0x64b3, 9058}, - {0x64b5, 2895}, - {0x64b7, 5354}, - {0x64b8, 5355}, - {0x64ba, 5357}, - {0x64bb, 8544}, - {0x64bc, 1898}, - {0x64be, 8605}, - {0x64bf, 8078}, - {0x64c0, 5358}, - {0x64c1, 8749}, - {0x64c2, 2505}, - {0x64c4, 8263}, - {0x64c5, 3324}, - {0x64c7, 8802}, - {0x64c9, 0}, - {0x64ca, 8039}, - {0x64cb, 7858}, - {0x64cd, 1184}, - {0x64ce, 3171}, - {0x64d0, 5359}, - {0x64d2, 3161}, - {0x64d4, 7849}, - {0x64d6, 0}, - {0x64d7, 5360}, - {0x64d8, 6482}, - {0x64da, 8140}, - {0x64dc, 0}, - {0x64dd, 1}, - {0x64de, 3528}, - {0x64e0, 8050}, - {0x64e2, 5362}, - {0x64e4, 5361}, - {0x64e6, 1160}, - {0x64e8, 0}, - {0x64e9, 1}, - {0x64ea, 2}, - {0x64eb, 3}, - {0x64ec, 8344}, - {0x64ee, 0}, - {0x64ef, 7762}, - {0x64f0, 8356}, - {0x64f1, 7964}, - {0x64f2, 8847}, - {0x64f4, 8173}, - {0x64f6, 0}, - {0x64f7, 9061}, - {0x64f9, 0}, - {0x64fa, 7725}, - {0x64fb, 8530}, - {0x64fc, 9062}, - {0x64fe, 8442}, - {0x6500, 2955}, - {0x6502, 0}, - {0x6503, 1}, - {0x6504, 9059}, - {0x6506, 8346}, - {0x6508, 0}, - {0x6509, 5363}, - {0x650b, 0}, - {0x650c, 1}, - {0x650d, 2}, - {0x650e, 3}, - {0x650f, 8252}, - {0x6511, 0}, - {0x6512, 4383}, - {0x6514, 8182}, - {0x6516, 9060}, - {0x6518, 3228}, - {0x6519, 7785}, - {0x651b, 9063}, - {0x651d, 8477}, - {0x651f, 0}, - {0x6520, 1}, - {0x6521, 2}, - {0x6522, 8793}, - {0x6523, 8278}, - {0x6524, 8547}, - {0x6525, 5364}, - {0x6527, 0}, - {0x6528, 1}, - {0x6529, 2}, - {0x652a, 8105}, - {0x652b, 2335}, - {0x652c, 8188}, - {0x652e, 5365}, - {0x652f, 4518}, - {0x6531, 0}, - {0x6532, 1}, - {0x6533, 2}, - {0x6534, 6409}, - {0x6535, 6502}, - {0x6536, 3436}, - {0x6538, 4786}, - {0x6539, 1727}, - {0x653b, 1790}, - {0x653d, 0}, - {0x653e, 1634}, - {0x653f, 4511}, - {0x6541, 0}, - {0x6542, 1}, - {0x6543, 2}, - {0x6544, 3}, - {0x6545, 1827}, - {0x6547, 0}, - {0x6548, 3954}, - {0x6549, 7371}, - {0x654b, 0}, - {0x654c, 1457}, - {0x654e, 0}, - {0x654f, 2809}, - {0x6551, 2295}, - {0x6553, 0}, - {0x6554, 1}, - {0x6555, 6503}, - {0x6556, 968}, - {0x6557, 7726}, - {0x6559, 2205}, - {0x655b, 2555}, - {0x655d, 1087}, - {0x655e, 1229}, - {0x6560, 0}, - {0x6561, 1}, - {0x6562, 1741}, - {0x6563, 3291}, - {0x6565, 0}, - {0x6566, 1559}, - {0x6568, 0}, - {0x6569, 1}, - {0x656a, 2}, - {0x656b, 6504}, - {0x656c, 2275}, - {0x656e, 0}, - {0x656f, 1}, - {0x6570, 3476}, - {0x6572, 3136}, - {0x6574, 4508}, - {0x6575, 7868}, - {0x6577, 1680}, - {0x6578, 8514}, - {0x657a, 0}, - {0x657b, 1}, - {0x657c, 2}, - {0x657d, 3}, - {0x657e, 4}, - {0x657f, 5}, - {0x6580, 6}, - {0x6581, 7}, - {0x6582, 8222}, - {0x6583, 7747}, - {0x6585, 0}, - {0x6586, 1}, - {0x6587, 3795}, - {0x6589, 0}, - {0x658a, 1}, - {0x658b, 4428}, - {0x658c, 1116}, - {0x658e, 0}, - {0x658f, 1}, - {0x6590, 6593}, - {0x6591, 1002}, - {0x6593, 6595}, - {0x6595, 9428}, - {0x6597, 1526}, - {0x6599, 2584}, - {0x659b, 7510}, - {0x659c, 3964}, - {0x659e, 0}, - {0x659f, 4486}, - {0x65a1, 3810}, - {0x65a3, 0}, - {0x65a4, 2240}, - {0x65a5, 1287}, - {0x65a7, 1702}, - {0x65a9, 4439}, - {0x65ab, 6697}, - {0x65ac, 8815}, - {0x65ad, 1550}, - {0x65af, 3502}, - {0x65b0, 3981}, - {0x65b2, 0}, - {0x65b3, 1}, - {0x65b4, 2}, - {0x65b5, 3}, - {0x65b6, 4}, - {0x65b7, 7895}, - {0x65b9, 1626}, - {0x65bb, 0}, - {0x65bc, 6596}, - {0x65bd, 3392}, - {0x65bf, 0}, - {0x65c0, 1}, - {0x65c1, 2965}, - {0x65c3, 6599}, - {0x65c4, 6598}, - {0x65c5, 2666}, - {0x65c6, 6597}, - {0x65c8, 0}, - {0x65c9, 1}, - {0x65ca, 2}, - {0x65cb, 4040}, - {0x65cc, 6600}, - {0x65ce, 6601}, - {0x65cf, 4674}, - {0x65d1, 0}, - {0x65d2, 6602}, - {0x65d4, 0}, - {0x65d5, 1}, - {0x65d6, 6603}, - {0x65d7, 3083}, - {0x65d9, 0}, - {0x65da, 1}, - {0x65db, 2}, - {0x65dc, 3}, - {0x65dd, 4}, - {0x65de, 5}, - {0x65df, 6}, - {0x65e0, 3821}, - {0x65e2, 2107}, - {0x65e4, 0}, - {0x65e5, 3248}, - {0x65e6, 1418}, - {0x65e7, 2296}, - {0x65e8, 4539}, - {0x65e9, 4394}, - {0x65eb, 0}, - {0x65ec, 4055}, - {0x65ed, 4028}, - {0x65ee, 6410}, - {0x65ef, 6411}, - {0x65f0, 6412}, - {0x65f1, 1900}, - {0x65f3, 0}, - {0x65f4, 1}, - {0x65f5, 2}, - {0x65f6, 3400}, - {0x65f7, 2434}, - {0x65f9, 0}, - {0x65fa, 3755}, - {0x65fc, 0}, - {0x65fd, 1}, - {0x65fe, 2}, - {0x65ff, 3}, - {0x6600, 6418}, - {0x6602, 965}, - {0x6603, 6416}, - {0x6605, 0}, - {0x6606, 2448}, - {0x6608, 0}, - {0x6609, 1}, - {0x660a, 6413}, - {0x660c, 1220}, - {0x660e, 2812}, - {0x660f, 2045}, - {0x6611, 0}, - {0x6612, 1}, - {0x6613, 4190}, - {0x6614, 3843}, - {0x6615, 6417}, - {0x6617, 0}, - {0x6618, 1}, - {0x6619, 6414}, - {0x661b, 0}, - {0x661c, 1}, - {0x661d, 6421}, - {0x661f, 3986}, - {0x6620, 4248}, - {0x6622, 0}, - {0x6623, 1}, - {0x6624, 2}, - {0x6625, 1341}, - {0x6627, 2758}, - {0x6628, 4687}, - {0x662a, 0}, - {0x662b, 1}, - {0x662c, 2}, - {0x662d, 4466}, - {0x662f, 3422}, - {0x6631, 6423}, - {0x6633, 0}, - {0x6634, 6422}, - {0x6635, 6425}, - {0x6636, 6424}, - {0x6638, 0}, - {0x6639, 1}, - {0x663a, 2}, - {0x663b, 3}, - {0x663c, 4582}, - {0x663e, 3905}, - {0x6640, 0}, - {0x6641, 6429}, - {0x6642, 8493}, - {0x6643, 2019}, - {0x6645, 0}, - {0x6646, 1}, - {0x6647, 2}, - {0x6648, 3}, - {0x6649, 4}, - {0x664a, 5}, - {0x664b, 2251}, - {0x664c, 3335}, - {0x664e, 0}, - {0x664f, 6430}, - {0x6651, 0}, - {0x6652, 3314}, - {0x6653, 3947}, - {0x6654, 6428}, - {0x6655, 4369}, - {0x6656, 6431}, - {0x6657, 6433}, - {0x6659, 0}, - {0x665a, 3742}, - {0x665c, 0}, - {0x665d, 8859}, - {0x665f, 6427}, - {0x6661, 6432}, - {0x6663, 0}, - {0x6664, 3837}, - {0x6666, 2035}, - {0x6668, 1252}, - {0x666a, 0}, - {0x666b, 1}, - {0x666c, 2}, - {0x666d, 3}, - {0x666e, 3060}, - {0x666f, 2271}, - {0x6670, 3849}, - {0x6672, 0}, - {0x6673, 1}, - {0x6674, 3172}, - {0x6676, 2262}, - {0x6677, 6434}, - {0x6679, 0}, - {0x667a, 4550}, - {0x667c, 0}, - {0x667d, 1}, - {0x667e, 2569}, - {0x6680, 0}, - {0x6681, 1}, - {0x6682, 4384}, - {0x6684, 6435}, - {0x6686, 0}, - {0x6687, 3883}, - {0x6688, 8790}, - {0x6689, 9384}, - {0x668b, 0}, - {0x668c, 6436}, - {0x668e, 0}, - {0x668f, 1}, - {0x6690, 2}, - {0x6691, 3461}, - {0x6693, 0}, - {0x6694, 1}, - {0x6695, 2}, - {0x6696, 2928}, - {0x6697, 960}, - {0x6699, 0}, - {0x669a, 1}, - {0x669b, 2}, - {0x669c, 3}, - {0x669d, 6438}, - {0x669f, 0}, - {0x66a0, 1}, - {0x66a1, 2}, - {0x66a2, 7801}, - {0x66a4, 0}, - {0x66a5, 1}, - {0x66a6, 2}, - {0x66a7, 6437}, - {0x66a8, 7389}, - {0x66aa, 0}, - {0x66ab, 8794}, - {0x66ad, 0}, - {0x66ae, 2845}, - {0x66b0, 0}, - {0x66b1, 1}, - {0x66b2, 2}, - {0x66b3, 3}, - {0x66b4, 1042}, - {0x66b6, 0}, - {0x66b7, 1}, - {0x66b8, 2}, - {0x66b9, 5979}, - {0x66bb, 0}, - {0x66bc, 1}, - {0x66bd, 2}, - {0x66be, 6439}, - {0x66c0, 0}, - {0x66c1, 1}, - {0x66c2, 2}, - {0x66c3, 3}, - {0x66c4, 9383}, - {0x66c6, 9862}, - {0x66c7, 9382}, - {0x66c9, 8654}, - {0x66cb, 0}, - {0x66cc, 1}, - {0x66cd, 2}, - {0x66ce, 3}, - {0x66cf, 4}, - {0x66d0, 5}, - {0x66d1, 6}, - {0x66d2, 7}, - {0x66d3, 8}, - {0x66d4, 9}, - {0x66d5, 10}, - {0x66d6, 9385}, - {0x66d8, 0}, - {0x66d9, 3462}, - {0x66db, 6440}, - {0x66dc, 6441}, - {0x66dd, 3063}, - {0x66df, 0}, - {0x66e0, 8167}, - {0x66e2, 0}, - {0x66e3, 1}, - {0x66e4, 2}, - {0x66e5, 3}, - {0x66e6, 6442}, - {0x66e8, 0}, - {0x66e9, 6443}, - {0x66eb, 0}, - {0x66ec, 8466}, - {0x66ee, 0}, - {0x66ef, 1}, - {0x66f0, 4350}, - {0x66f2, 3191}, - {0x66f3, 4158}, - {0x66f4, 1783}, - {0x66f6, 0}, - {0x66f7, 6420}, - {0x66f8, 8508}, - {0x66f9, 1187}, - {0x66fb, 0}, - {0x66fc, 2723}, - {0x66fe, 4411}, - {0x66ff, 3641}, - {0x6700, 4683}, - {0x6702, 0}, - {0x6703, 8028}, - {0x6705, 0}, - {0x6706, 1}, - {0x6707, 2}, - {0x6708, 4357}, - {0x6709, 4277}, - {0x670a, 6515}, - {0x670b, 2996}, - {0x670d, 1691}, - {0x670f, 0}, - {0x6710, 6532}, - {0x6712, 0}, - {0x6713, 1}, - {0x6714, 3500}, - {0x6715, 6542}, - {0x6717, 2485}, - {0x6719, 0}, - {0x671a, 1}, - {0x671b, 3756}, - {0x671d, 1236}, - {0x671f, 3065}, - {0x6721, 0}, - {0x6722, 1}, - {0x6723, 2}, - {0x6724, 3}, - {0x6725, 4}, - {0x6726, 6572}, - {0x6727, 9412}, - {0x6728, 2849}, - {0x672a, 3779}, - {0x672b, 2828}, - {0x672c, 1063}, - {0x672d, 4416}, - {0x672f, 3468}, - {0x6731, 4587}, - {0x6733, 0}, - {0x6734, 3058}, - {0x6735, 1571}, - {0x6737, 0}, - {0x6738, 1}, - {0x6739, 2}, - {0x673a, 2063}, - {0x673c, 0}, - {0x673d, 4011}, - {0x673f, 0}, - {0x6740, 3306}, - {0x6742, 4374}, - {0x6743, 3203}, - {0x6745, 0}, - {0x6746, 1734}, - {0x6748, 6228}, - {0x6749, 3317}, - {0x674b, 0}, - {0x674c, 6225}, - {0x674e, 2521}, - {0x674f, 3998}, - {0x6750, 1163}, - {0x6751, 1384}, - {0x6753, 6226}, - {0x6755, 0}, - {0x6756, 4457}, - {0x6758, 0}, - {0x6759, 1}, - {0x675a, 2}, - {0x675b, 3}, - {0x675c, 1540}, - {0x675e, 6227}, - {0x675f, 3471}, - {0x6760, 1751}, - {0x6761, 3656}, - {0x6763, 0}, - {0x6764, 1}, - {0x6765, 2463}, - {0x6767, 0}, - {0x6768, 4119}, - {0x6769, 6229}, - {0x676a, 6232}, - {0x676c, 0}, - {0x676d, 1907}, - {0x676f, 1046}, - {0x6770, 2221}, - {0x6771, 7884}, - {0x6772, 6415}, - {0x6773, 6233}, - {0x6775, 6236}, - {0x6777, 6241}, - {0x6779, 0}, - {0x677a, 1}, - {0x677b, 2}, - {0x677c, 6242}, - {0x677e, 3518}, - {0x677f, 1008}, - {0x6781, 2078}, - {0x6783, 0}, - {0x6784, 1810}, - {0x6786, 0}, - {0x6787, 6231}, - {0x6789, 3752}, - {0x678b, 6240}, - {0x678d, 0}, - {0x678e, 1}, - {0x678f, 2}, - {0x6790, 3845}, - {0x6792, 0}, - {0x6793, 1}, - {0x6794, 2}, - {0x6795, 4494}, - {0x6797, 2591}, - {0x6798, 6234}, - {0x679a, 2747}, - {0x679c, 1876}, - {0x679d, 4517}, - {0x679e, 6238}, - {0x67a0, 0}, - {0x67a1, 1}, - {0x67a2, 3447}, - {0x67a3, 4393}, - {0x67a5, 6230}, - {0x67a7, 6235}, - {0x67a8, 6237}, - {0x67aa, 3126}, - {0x67ab, 1664}, - {0x67ad, 6239}, - {0x67af, 2410}, - {0x67b0, 6248}, - {0x67b2, 0}, - {0x67b3, 6253}, - {0x67b5, 6251}, - {0x67b6, 2127}, - {0x67b7, 2114}, - {0x67b8, 6257}, - {0x67ba, 0}, - {0x67bb, 1}, - {0x67bc, 2}, - {0x67bd, 3}, - {0x67be, 4}, - {0x67bf, 5}, - {0x67c0, 6}, - {0x67c1, 6260}, - {0x67c3, 6256}, - {0x67c4, 1123}, - {0x67c6, 0}, - {0x67c7, 1}, - {0x67c8, 2}, - {0x67c9, 3}, - {0x67ca, 4}, - {0x67cb, 5}, - {0x67cc, 6}, - {0x67cd, 7}, - {0x67ce, 8}, - {0x67cf, 995}, - {0x67d0, 2838}, - {0x67d1, 1735}, - {0x67d2, 3073}, - {0x67d3, 3225}, - {0x67d4, 3260}, - {0x67d6, 0}, - {0x67d7, 1}, - {0x67d8, 6245}, - {0x67d9, 6250}, - {0x67da, 6252}, - {0x67dc, 1866}, - {0x67dd, 6254}, - {0x67de, 4690}, - {0x67e0, 2910}, - {0x67e2, 6258}, - {0x67e4, 0}, - {0x67e5, 1200}, - {0x67e7, 0}, - {0x67e8, 1}, - {0x67e9, 6247}, - {0x67eb, 0}, - {0x67ec, 2144}, - {0x67ee, 0}, - {0x67ef, 2383}, - {0x67f0, 6243}, - {0x67f1, 4600}, - {0x67f3, 2625}, - {0x67f4, 1208}, - {0x67f6, 0}, - {0x67f7, 1}, - {0x67f8, 2}, - {0x67f9, 3}, - {0x67fa, 4}, - {0x67fb, 5}, - {0x67fc, 6}, - {0x67fd, 6261}, - {0x67ff, 3416}, - {0x6800, 6255}, - {0x6802, 0}, - {0x6803, 1}, - {0x6804, 2}, - {0x6805, 4421}, - {0x6807, 1107}, - {0x6808, 4444}, - {0x6809, 6244}, - {0x680a, 6246}, - {0x680b, 1519}, - {0x680c, 6249}, - {0x680e, 6259}, - {0x680f, 2467}, - {0x6811, 3470}, - {0x6813, 3485}, - {0x6815, 0}, - {0x6816, 3067}, - {0x6817, 2528}, - {0x6819, 0}, - {0x681a, 1}, - {0x681b, 2}, - {0x681c, 3}, - {0x681d, 6271}, - {0x681f, 0}, - {0x6820, 1}, - {0x6821, 3950}, - {0x6823, 0}, - {0x6824, 1}, - {0x6825, 2}, - {0x6826, 3}, - {0x6827, 4}, - {0x6828, 5}, - {0x6829, 6280}, - {0x682a, 4585}, - {0x682c, 0}, - {0x682d, 1}, - {0x682e, 2}, - {0x682f, 3}, - {0x6830, 4}, - {0x6831, 5}, - {0x6832, 6262}, - {0x6833, 6263}, - {0x6835, 0}, - {0x6836, 1}, - {0x6837, 4130}, - {0x6838, 1922}, - {0x6839, 1780}, - {0x683b, 0}, - {0x683c, 1772}, - {0x683d, 4375}, - {0x683e, 6277}, - {0x6840, 6276}, - {0x6841, 6274}, - {0x6842, 1865}, - {0x6843, 3621}, - {0x6844, 6268}, - {0x6845, 3765}, - {0x6846, 2431}, - {0x6848, 963}, - {0x6849, 6279}, - {0x684a, 6278}, - {0x684c, 4637}, - {0x684e, 6266}, - {0x6850, 3674}, - {0x6851, 3292}, - {0x6853, 1997}, - {0x6854, 2220}, - {0x6855, 6272}, - {0x6857, 0}, - {0x6858, 1}, - {0x6859, 2}, - {0x685a, 3}, - {0x685b, 4}, - {0x685c, 5}, - {0x685d, 6}, - {0x685e, 7}, - {0x685f, 8}, - {0x6860, 6264}, - {0x6861, 6265}, - {0x6862, 6267}, - {0x6863, 1430}, - {0x6864, 6269}, - {0x6865, 3138}, - {0x6866, 6273}, - {0x6867, 6275}, - {0x6868, 2177}, - {0x6869, 4619}, - {0x686b, 6286}, - {0x686d, 0}, - {0x686e, 1}, - {0x686f, 2}, - {0x6870, 3}, - {0x6871, 4}, - {0x6872, 5}, - {0x6873, 6}, - {0x6874, 6283}, - {0x6876, 3681}, - {0x6877, 6284}, - {0x6879, 0}, - {0x687a, 1}, - {0x687b, 2}, - {0x687c, 3}, - {0x687d, 4}, - {0x687e, 5}, - {0x687f, 6}, - {0x6880, 7}, - {0x6881, 2563}, - {0x6883, 6270}, - {0x6885, 2748}, - {0x6886, 1019}, - {0x6888, 0}, - {0x6889, 1}, - {0x688a, 2}, - {0x688b, 3}, - {0x688c, 4}, - {0x688d, 5}, - {0x688e, 6}, - {0x688f, 6282}, - {0x6891, 0}, - {0x6892, 1}, - {0x6893, 6285}, - {0x6895, 0}, - {0x6896, 1}, - {0x6897, 1788}, - {0x6898, 9322}, - {0x689a, 0}, - {0x689b, 1}, - {0x689c, 2}, - {0x689d, 8565}, - {0x689f, 9325}, - {0x68a1, 0}, - {0x68a2, 3339}, - {0x68a4, 0}, - {0x68a5, 1}, - {0x68a6, 2771}, - {0x68a7, 3823}, - {0x68a8, 2513}, - {0x68aa, 0}, - {0x68ab, 1}, - {0x68ac, 2}, - {0x68ad, 3560}, - {0x68af, 3632}, - {0x68b0, 3968}, - {0x68b2, 0}, - {0x68b3, 3448}, - {0x68b5, 6281}, - {0x68b7, 0}, - {0x68b8, 1}, - {0x68b9, 2}, - {0x68ba, 3}, - {0x68bb, 4}, - {0x68bc, 5}, - {0x68bd, 6}, - {0x68be, 7}, - {0x68bf, 8}, - {0x68c0, 2143}, - {0x68c2, 6287}, - {0x68c4, 0}, - {0x68c5, 1}, - {0x68c6, 2}, - {0x68c7, 3}, - {0x68c8, 4}, - {0x68c9, 2787}, - {0x68cb, 3076}, - {0x68cd, 1872}, - {0x68cf, 0}, - {0x68d0, 1}, - {0x68d1, 2}, - {0x68d2, 1023}, - {0x68d4, 0}, - {0x68d5, 4661}, - {0x68d6, 9323}, - {0x68d7, 8799}, - {0x68d8, 2079}, - {0x68da, 2992}, - {0x68dc, 0}, - {0x68dd, 1}, - {0x68de, 2}, - {0x68df, 7886}, - {0x68e0, 3607}, - {0x68e2, 0}, - {0x68e3, 6298}, - {0x68e5, 0}, - {0x68e6, 1}, - {0x68e7, 8818}, - {0x68e9, 0}, - {0x68ea, 1}, - {0x68eb, 2}, - {0x68ec, 3}, - {0x68ed, 4}, - {0x68ee, 3302}, - {0x68f0, 6294}, - {0x68f1, 2509}, - {0x68f3, 0}, - {0x68f4, 1}, - {0x68f5, 2384}, - {0x68f7, 0}, - {0x68f8, 1}, - {0x68f9, 6292}, - {0x68fa, 1840}, - {0x68fc, 6289}, - {0x68fe, 0}, - {0x68ff, 1}, - {0x6901, 6296}, - {0x6903, 0}, - {0x6904, 1}, - {0x6905, 4181}, - {0x6907, 0}, - {0x6908, 1}, - {0x6909, 2}, - {0x690a, 3}, - {0x690b, 6295}, - {0x690d, 4529}, - {0x690e, 4626}, - {0x690f, 9331}, - {0x6910, 6299}, - {0x6912, 2184}, - {0x6914, 0}, - {0x6915, 1}, - {0x6916, 2}, - {0x6917, 3}, - {0x6918, 4}, - {0x6919, 5}, - {0x691a, 6}, - {0x691b, 7}, - {0x691c, 8}, - {0x691d, 9}, - {0x691e, 10}, - {0x691f, 6290}, - {0x6920, 6291}, - {0x6922, 0}, - {0x6923, 1}, - {0x6924, 6293}, - {0x6926, 0}, - {0x6927, 1}, - {0x6928, 2}, - {0x6929, 3}, - {0x692a, 4}, - {0x692b, 5}, - {0x692c, 6}, - {0x692d, 3719}, - {0x692f, 0}, - {0x6930, 4147}, - {0x6932, 0}, - {0x6933, 1}, - {0x6934, 6310}, - {0x6936, 0}, - {0x6937, 1}, - {0x6938, 2}, - {0x6939, 6301}, - {0x693b, 0}, - {0x693c, 1}, - {0x693d, 1325}, - {0x693f, 1342}, - {0x6941, 0}, - {0x6942, 6303}, - {0x6944, 0}, - {0x6945, 1}, - {0x6946, 2}, - {0x6947, 3}, - {0x6948, 4}, - {0x6949, 5}, - {0x694a, 8702}, - {0x694c, 0}, - {0x694d, 1}, - {0x694e, 2}, - {0x694f, 3}, - {0x6950, 4}, - {0x6951, 5}, - {0x6952, 6}, - {0x6953, 7934}, - {0x6954, 3955}, - {0x6956, 0}, - {0x6957, 6297}, - {0x6959, 0}, - {0x695a, 1315}, - {0x695c, 0}, - {0x695d, 6304}, - {0x695e, 2510}, - {0x6960, 6302}, - {0x6962, 0}, - {0x6963, 6317}, - {0x6965, 0}, - {0x6966, 6316}, - {0x6968, 9333}, - {0x696a, 0}, - {0x696b, 6306}, - {0x696d, 8714}, - {0x696e, 6288}, - {0x6970, 0}, - {0x6971, 6300}, - {0x6973, 0}, - {0x6974, 1}, - {0x6975, 8047}, - {0x6977, 2361}, - {0x6978, 6309}, - {0x6979, 6318}, - {0x697b, 0}, - {0x697c, 2636}, - {0x697e, 0}, - {0x697f, 1}, - {0x6980, 6307}, - {0x6982, 1728}, - {0x6984, 6305}, - {0x6986, 4289}, - {0x6987, 6312}, - {0x6988, 6313}, - {0x6989, 6315}, - {0x698b, 0}, - {0x698c, 1}, - {0x698d, 6331}, - {0x698f, 0}, - {0x6990, 1}, - {0x6991, 2}, - {0x6992, 3}, - {0x6993, 4}, - {0x6994, 2481}, - {0x6995, 6329}, - {0x6997, 0}, - {0x6998, 6308}, - {0x699a, 0}, - {0x699b, 6319}, - {0x699c, 1020}, - {0x699e, 0}, - {0x699f, 1}, - {0x69a0, 2}, - {0x69a1, 3}, - {0x69a2, 4}, - {0x69a3, 5}, - {0x69a4, 6}, - {0x69a5, 7}, - {0x69a6, 8}, - {0x69a7, 6320}, - {0x69a8, 4422}, - {0x69aa, 9320}, - {0x69ab, 6322}, - {0x69ad, 6323}, - {0x69ae, 8448}, - {0x69b0, 0}, - {0x69b1, 6325}, - {0x69b3, 0}, - {0x69b4, 2618}, - {0x69b6, 0}, - {0x69b7, 3217}, - {0x69b9, 0}, - {0x69ba, 1}, - {0x69bb, 6321}, - {0x69bd, 0}, - {0x69be, 1}, - {0x69bf, 9334}, - {0x69c1, 6326}, - {0x69c3, 0}, - {0x69c4, 1}, - {0x69c5, 2}, - {0x69c6, 3}, - {0x69c7, 4}, - {0x69c8, 5}, - {0x69c9, 6}, - {0x69ca, 6327}, - {0x69cb, 7975}, - {0x69cc, 6311}, - {0x69cd, 8407}, - {0x69ce, 6314}, - {0x69d0, 1990}, - {0x69d2, 0}, - {0x69d3, 1}, - {0x69d4, 6324}, - {0x69d6, 0}, - {0x69d7, 1}, - {0x69d8, 2}, - {0x69d9, 3}, - {0x69da, 4}, - {0x69db, 2154}, - {0x69dd, 0}, - {0x69de, 1}, - {0x69df, 6328}, - {0x69e0, 6330}, - {0x69e2, 0}, - {0x69e3, 1}, - {0x69e4, 2}, - {0x69e5, 3}, - {0x69e6, 4}, - {0x69e7, 9340}, - {0x69e9, 0}, - {0x69ea, 1}, - {0x69eb, 2}, - {0x69ec, 3}, - {0x69ed, 6334}, - {0x69ef, 0}, - {0x69f0, 1}, - {0x69f1, 2}, - {0x69f2, 6338}, - {0x69f3, 8097}, - {0x69f5, 0}, - {0x69f6, 1}, - {0x69f7, 2}, - {0x69f8, 3}, - {0x69f9, 4}, - {0x69fa, 5}, - {0x69fb, 6}, - {0x69fc, 7}, - {0x69fd, 1186}, - {0x69ff, 6332}, - {0x6a01, 8874}, - {0x6a02, 8197}, - {0x6a04, 0}, - {0x6a05, 9324}, - {0x6a07, 0}, - {0x6a08, 1}, - {0x6a09, 2}, - {0x6a0a, 1611}, - {0x6a0c, 0}, - {0x6a0d, 1}, - {0x6a0e, 2}, - {0x6a0f, 3}, - {0x6a10, 4}, - {0x6a11, 5}, - {0x6a12, 6}, - {0x6a13, 8254}, - {0x6a15, 0}, - {0x6a16, 1}, - {0x6a17, 6335}, - {0x6a18, 6336}, - {0x6a19, 7756}, - {0x6a1b, 0}, - {0x6a1c, 1}, - {0x6a1d, 2}, - {0x6a1e, 8506}, - {0x6a1f, 4450}, - {0x6a21, 2822}, - {0x6a23, 8708}, - {0x6a25, 0}, - {0x6a26, 1}, - {0x6a27, 2}, - {0x6a28, 6348}, - {0x6a2a, 1944}, - {0x6a2c, 0}, - {0x6a2d, 1}, - {0x6a2e, 2}, - {0x6a2f, 6333}, - {0x6a31, 4232}, - {0x6a33, 0}, - {0x6a34, 1}, - {0x6a35, 6344}, - {0x6a37, 0}, - {0x6a38, 8387}, - {0x6a39, 8512}, - {0x6a3a, 9335}, - {0x6a3c, 0}, - {0x6a3d, 6347}, - {0x6a3e, 6340}, - {0x6a40, 0}, - {0x6a41, 1}, - {0x6a42, 2}, - {0x6a43, 3}, - {0x6a44, 6339}, - {0x6a46, 0}, - {0x6a47, 3134}, - {0x6a48, 9332}, - {0x6a4a, 0}, - {0x6a4b, 8413}, - {0x6a4d, 0}, - {0x6a4e, 1}, - {0x6a4f, 2}, - {0x6a50, 6342}, - {0x6a52, 0}, - {0x6a53, 1}, - {0x6a54, 2}, - {0x6a55, 3}, - {0x6a56, 4}, - {0x6a57, 5}, - {0x6a58, 6349}, - {0x6a59, 1261}, - {0x6a5b, 6343}, - {0x6a5d, 0}, - {0x6a5e, 1}, - {0x6a5f, 8040}, - {0x6a61, 3933}, - {0x6a62, 8581}, - {0x6a64, 0}, - {0x6a65, 6337}, - {0x6a67, 0}, - {0x6a68, 1}, - {0x6a69, 2}, - {0x6a6a, 3}, - {0x6a6b, 4}, - {0x6a6c, 5}, - {0x6a6d, 6}, - {0x6a6e, 7}, - {0x6a6f, 8}, - {0x6a70, 9}, - {0x6a71, 1308}, - {0x6a73, 0}, - {0x6a74, 1}, - {0x6a75, 2}, - {0x6a76, 3}, - {0x6a77, 4}, - {0x6a78, 5}, - {0x6a79, 6346}, - {0x6a7b, 0}, - {0x6a7c, 6350}, - {0x6a7e, 0}, - {0x6a7f, 1}, - {0x6a80, 3591}, - {0x6a82, 0}, - {0x6a83, 1}, - {0x6a84, 3866}, - {0x6a86, 0}, - {0x6a87, 1}, - {0x6a88, 2}, - {0x6a89, 9330}, - {0x6a8b, 0}, - {0x6a8c, 1}, - {0x6a8d, 2}, - {0x6a8e, 6345}, - {0x6a90, 6352}, - {0x6a91, 6351}, - {0x6a93, 0}, - {0x6a94, 7861}, - {0x6a96, 0}, - {0x6a97, 6354}, - {0x6a99, 0}, - {0x6a9a, 1}, - {0x6a9b, 2}, - {0x6a9c, 9336}, - {0x6a9e, 0}, - {0x6a9f, 1}, - {0x6aa0, 6341}, - {0x6aa2, 8075}, - {0x6aa3, 9348}, - {0x6aa5, 0}, - {0x6aa6, 1}, - {0x6aa7, 2}, - {0x6aa8, 3}, - {0x6aa9, 6353}, - {0x6aab, 6355}, - {0x6aac, 2767}, - {0x6aae, 0}, - {0x6aaf, 9881}, - {0x6ab1, 0}, - {0x6ab2, 1}, - {0x6ab3, 9346}, - {0x6ab5, 0}, - {0x6ab6, 1}, - {0x6ab7, 2}, - {0x6ab8, 8353}, - {0x6aba, 0}, - {0x6abb, 8082}, - {0x6abd, 0}, - {0x6abe, 1}, - {0x6abf, 2}, - {0x6ac0, 3}, - {0x6ac1, 4}, - {0x6ac2, 5}, - {0x6ac3, 7992}, - {0x6ac5, 0}, - {0x6ac6, 1}, - {0x6ac7, 2}, - {0x6ac8, 3}, - {0x6ac9, 4}, - {0x6aca, 5}, - {0x6acb, 6}, - {0x6acc, 7}, - {0x6acd, 8}, - {0x6ace, 9}, - {0x6acf, 10}, - {0x6ad0, 11}, - {0x6ad1, 12}, - {0x6ad2, 13}, - {0x6ad3, 9349}, - {0x6ad5, 0}, - {0x6ad6, 1}, - {0x6ad7, 2}, - {0x6ad8, 3}, - {0x6ad9, 4}, - {0x6ada, 9344}, - {0x6adb, 9326}, - {0x6add, 9339}, - {0x6ade, 9350}, - {0x6adf, 9329}, - {0x6ae1, 0}, - {0x6ae2, 1}, - {0x6ae3, 2}, - {0x6ae4, 3}, - {0x6ae5, 4}, - {0x6ae6, 5}, - {0x6ae7, 9347}, - {0x6ae8, 9328}, - {0x6aea, 9321}, - {0x6aec, 9343}, - {0x6aee, 0}, - {0x6aef, 1}, - {0x6af0, 2}, - {0x6af1, 3}, - {0x6af2, 4}, - {0x6af3, 9327}, - {0x6af5, 0}, - {0x6af6, 1}, - {0x6af7, 2}, - {0x6af8, 9345}, - {0x6afa, 0}, - {0x6afb, 8736}, - {0x6afd, 0}, - {0x6afe, 1}, - {0x6aff, 2}, - {0x6b01, 0}, - {0x6b02, 1}, - {0x6b03, 2}, - {0x6b04, 8181}, - {0x6b06, 0}, - {0x6b07, 1}, - {0x6b08, 2}, - {0x6b09, 3}, - {0x6b0a, 8436}, - {0x6b0c, 0}, - {0x6b0d, 1}, - {0x6b0e, 2}, - {0x6b0f, 9341}, - {0x6b11, 0}, - {0x6b12, 9337}, - {0x6b14, 0}, - {0x6b15, 1}, - {0x6b16, 9342}, - {0x6b18, 0}, - {0x6b19, 1}, - {0x6b1a, 2}, - {0x6b1b, 3}, - {0x6b1c, 4}, - {0x6b1d, 5}, - {0x6b1e, 9338}, - {0x6b20, 3124}, - {0x6b21, 1361}, - {0x6b22, 1995}, - {0x6b23, 3979}, - {0x6b24, 6577}, - {0x6b26, 0}, - {0x6b27, 2936}, - {0x6b29, 0}, - {0x6b2a, 1}, - {0x6b2b, 2}, - {0x6b2c, 3}, - {0x6b2d, 4}, - {0x6b2e, 5}, - {0x6b2f, 6}, - {0x6b30, 7}, - {0x6b31, 8}, - {0x6b32, 4320}, - {0x6b34, 0}, - {0x6b35, 1}, - {0x6b36, 2}, - {0x6b37, 6578}, - {0x6b39, 6579}, - {0x6b3a, 3066}, - {0x6b3c, 0}, - {0x6b3d, 8419}, - {0x6b3e, 2427}, - {0x6b40, 0}, - {0x6b41, 1}, - {0x6b42, 2}, - {0x6b43, 6580}, - {0x6b45, 0}, - {0x6b46, 6581}, - {0x6b47, 3957}, - {0x6b49, 3125}, - {0x6b4b, 0}, - {0x6b4c, 1763}, - {0x6b4e, 0}, - {0x6b4f, 1}, - {0x6b50, 8365}, - {0x6b52, 0}, - {0x6b53, 1}, - {0x6b54, 2}, - {0x6b55, 3}, - {0x6b56, 4}, - {0x6b57, 5}, - {0x6b58, 6}, - {0x6b59, 6582}, - {0x6b5b, 0}, - {0x6b5c, 1}, - {0x6b5d, 2}, - {0x6b5e, 3}, - {0x6b5f, 9419}, - {0x6b61, 8019}, - {0x6b62, 4536}, - {0x6b63, 4510}, - {0x6b64, 1358}, - {0x6b65, 1156}, - {0x6b66, 3827}, - {0x6b67, 3078}, - {0x6b69, 0}, - {0x6b6a, 3730}, - {0x6b6c, 0}, - {0x6b6d, 1}, - {0x6b6e, 2}, - {0x6b6f, 3}, - {0x6b70, 4}, - {0x6b71, 5}, - {0x6b72, 8537}, - {0x6b74, 0}, - {0x6b75, 1}, - {0x6b76, 2}, - {0x6b77, 8211}, - {0x6b78, 7987}, - {0x6b79, 1400}, - {0x6b7b, 3509}, - {0x6b7c, 2130}, - {0x6b7e, 0}, - {0x6b7f, 1}, - {0x6b80, 2}, - {0x6b81, 6358}, - {0x6b82, 6359}, - {0x6b83, 4115}, - {0x6b84, 6361}, - {0x6b86, 1404}, - {0x6b87, 6360}, - {0x6b89, 4060}, - {0x6b8a, 3449}, - {0x6b8b, 1175}, - {0x6b8d, 6364}, - {0x6b8f, 0}, - {0x6b90, 1}, - {0x6b91, 2}, - {0x6b92, 6362}, - {0x6b93, 6363}, - {0x6b95, 0}, - {0x6b96, 4530}, - {0x6b98, 7772}, - {0x6b9a, 6365}, - {0x6b9b, 6366}, - {0x6b9d, 0}, - {0x6b9e, 9352}, - {0x6ba0, 0}, - {0x6ba1, 6367}, - {0x6ba3, 0}, - {0x6ba4, 9351}, - {0x6ba6, 0}, - {0x6ba7, 1}, - {0x6ba8, 2}, - {0x6ba9, 3}, - {0x6baa, 6368}, - {0x6bab, 9354}, - {0x6bad, 0}, - {0x6bae, 9353}, - {0x6baf, 9355}, - {0x6bb1, 0}, - {0x6bb2, 8067}, - {0x6bb3, 6589}, - {0x6bb4, 2938}, - {0x6bb5, 1549}, - {0x6bb7, 4218}, - {0x6bb9, 0}, - {0x6bba, 8463}, - {0x6bbb, 8155}, - {0x6bbd, 0}, - {0x6bbe, 1}, - {0x6bbf, 1487}, - {0x6bc1, 2030}, - {0x6bc2, 6591}, - {0x6bc4, 0}, - {0x6bc5, 4202}, - {0x6bc6, 8367}, - {0x6bc8, 0}, - {0x6bc9, 1}, - {0x6bca, 2}, - {0x6bcb, 3826}, - {0x6bcd, 2843}, - {0x6bcf, 2756}, - {0x6bd1, 0}, - {0x6bd2, 1533}, - {0x6bd3, 4719}, - {0x6bd4, 1073}, - {0x6bd5, 1080}, - {0x6bd6, 1082}, - {0x6bd7, 3007}, - {0x6bd9, 1081}, - {0x6bdb, 2736}, - {0x6bdd, 0}, - {0x6bde, 1}, - {0x6bdf, 2}, - {0x6be0, 3}, - {0x6be1, 4434}, - {0x6be3, 0}, - {0x6be4, 1}, - {0x6be5, 2}, - {0x6be6, 3}, - {0x6be7, 4}, - {0x6be8, 5}, - {0x6be9, 6}, - {0x6bea, 6484}, - {0x6beb, 1912}, - {0x6bed, 0}, - {0x6bee, 1}, - {0x6bef, 3597}, - {0x6bf1, 0}, - {0x6bf2, 1}, - {0x6bf3, 6485}, - {0x6bf5, 6487}, - {0x6bf7, 0}, - {0x6bf8, 1}, - {0x6bf9, 6488}, - {0x6bfb, 0}, - {0x6bfc, 1}, - {0x6bfd, 6486}, - {0x6bff, 9408}, - {0x6c01, 0}, - {0x6c02, 1}, - {0x6c03, 2}, - {0x6c04, 3}, - {0x6c05, 6489}, - {0x6c06, 6491}, - {0x6c07, 6490}, - {0x6c08, 8813}, - {0x6c0a, 0}, - {0x6c0b, 1}, - {0x6c0c, 9409}, - {0x6c0d, 6492}, - {0x6c0f, 3430}, - {0x6c10, 4715}, - {0x6c11, 2806}, - {0x6c13, 2730}, - {0x6c14, 3095}, - {0x6c15, 6493}, - {0x6c16, 2861}, - {0x6c18, 6494}, - {0x6c19, 6495}, - {0x6c1a, 6496}, - {0x6c1b, 1650}, - {0x6c1d, 0}, - {0x6c1e, 1}, - {0x6c1f, 1687}, - {0x6c21, 6497}, - {0x6c22, 3167}, - {0x6c23, 8394}, - {0x6c24, 6499}, - {0x6c26, 1883}, - {0x6c27, 4126}, - {0x6c28, 956}, - {0x6c29, 6498}, - {0x6c2a, 6500}, - {0x6c2b, 8423}, - {0x6c2c, 9410}, - {0x6c2e, 1419}, - {0x6c2f, 2671}, - {0x6c30, 3173}, - {0x6c32, 6501}, - {0x6c34, 3491}, - {0x6c35, 5791}, - {0x6c37, 0}, - {0x6c38, 4261}, - {0x6c3a, 0}, - {0x6c3b, 1}, - {0x6c3c, 2}, - {0x6c3d, 4847}, - {0x6c3f, 0}, - {0x6c40, 3666}, - {0x6c41, 4524}, - {0x6c42, 3184}, - {0x6c44, 0}, - {0x6c45, 1}, - {0x6c46, 4852}, - {0x6c47, 2040}, - {0x6c49, 1905}, - {0x6c4a, 5794}, - {0x6c4c, 0}, - {0x6c4d, 1}, - {0x6c4e, 2}, - {0x6c4f, 3}, - {0x6c50, 3864}, - {0x6c52, 0}, - {0x6c53, 1}, - {0x6c54, 5792}, - {0x6c55, 3328}, - {0x6c57, 1904}, - {0x6c59, 0}, - {0x6c5a, 1}, - {0x6c5b, 4061}, - {0x6c5c, 5793}, - {0x6c5d, 3269}, - {0x6c5e, 1800}, - {0x6c5f, 2174}, - {0x6c60, 1277}, - {0x6c61, 3818}, - {0x6c63, 0}, - {0x6c64, 3603}, - {0x6c66, 0}, - {0x6c67, 1}, - {0x6c68, 5800}, - {0x6c69, 5801}, - {0x6c6a, 3749}, - {0x6c6c, 0}, - {0x6c6d, 1}, - {0x6c6e, 2}, - {0x6c6f, 3}, - {0x6c70, 3584}, - {0x6c72, 2086}, - {0x6c74, 5802}, - {0x6c76, 5803}, - {0x6c78, 0}, - {0x6c79, 4005}, - {0x6c7b, 0}, - {0x6c7c, 1}, - {0x6c7d, 3098}, - {0x6c7e, 1655}, - {0x6c80, 0}, - {0x6c81, 3164}, - {0x6c82, 4177}, - {0x6c83, 3813}, - {0x6c85, 5796}, - {0x6c86, 5804}, - {0x6c88, 3371}, - {0x6c89, 1254}, - {0x6c8b, 0}, - {0x6c8c, 5799}, - {0x6c8e, 0}, - {0x6c8f, 3074}, - {0x6c90, 5797}, - {0x6c92, 0}, - {0x6c93, 6687}, - {0x6c94, 5798}, - {0x6c96, 0}, - {0x6c97, 1}, - {0x6c98, 2}, - {0x6c99, 3308}, - {0x6c9b, 2983}, - {0x6c9d, 0}, - {0x6c9e, 1}, - {0x6c9f, 1806}, - {0x6ca1, 2752}, - {0x6ca3, 5795}, - {0x6ca4, 2942}, - {0x6ca5, 2541}, - {0x6ca6, 2688}, - {0x6ca7, 1182}, - {0x6ca9, 5805}, - {0x6caa, 1979}, - {0x6cab, 2832}, - {0x6cad, 5808}, - {0x6cae, 2313}, - {0x6cb0, 0}, - {0x6cb1, 5819}, - {0x6cb2, 5813}, - {0x6cb3, 1930}, - {0x6cb5, 0}, - {0x6cb6, 1}, - {0x6cb7, 2}, - {0x6cb8, 1645}, - {0x6cb9, 4274}, - {0x6cbb, 4557}, - {0x6cbc, 4468}, - {0x6cbd, 1818}, - {0x6cbe, 4437}, - {0x6cbf, 4097}, - {0x6cc1, 0}, - {0x6cc2, 1}, - {0x6cc3, 2}, - {0x6cc4, 3972}, - {0x6cc5, 3187}, - {0x6cc7, 0}, - {0x6cc8, 1}, - {0x6cc9, 3205}, - {0x6cca, 1147}, - {0x6ccc, 2783}, - {0x6cce, 0}, - {0x6ccf, 1}, - {0x6cd0, 5806}, - {0x6cd2, 0}, - {0x6cd3, 5820}, - {0x6cd4, 5807}, - {0x6cd5, 1605}, - {0x6cd6, 5815}, - {0x6cd7, 5812}, - {0x6cd9, 0}, - {0x6cda, 1}, - {0x6cdb, 1623}, - {0x6cdd, 0}, - {0x6cde, 2915}, - {0x6ce0, 5814}, - {0x6ce1, 2974}, - {0x6ce2, 1135}, - {0x6ce3, 3099}, - {0x6ce5, 2883}, - {0x6ce7, 0}, - {0x6ce8, 4607}, - {0x6cea, 2508}, - {0x6ceb, 5817}, - {0x6ced, 0}, - {0x6cee, 5818}, - {0x6cef, 5821}, - {0x6cf0, 3580}, - {0x6cf1, 5811}, - {0x6cf3, 4259}, - {0x6cf5, 1068}, - {0x6cf6, 6688}, - {0x6cf7, 5809}, - {0x6cf8, 5810}, - {0x6cfa, 5816}, - {0x6cfb, 3973}, - {0x6cfc, 3042}, - {0x6cfd, 4406}, - {0x6cfe, 5822}, - {0x6d01, 2225}, - {0x6d03, 0}, - {0x6d04, 5829}, - {0x6d06, 0}, - {0x6d07, 5828}, - {0x6d09, 0}, - {0x6d0a, 1}, - {0x6d0b, 4124}, - {0x6d0c, 5825}, - {0x6d0e, 5831}, - {0x6d10, 0}, - {0x6d11, 1}, - {0x6d12, 3282}, - {0x6d14, 0}, - {0x6d15, 1}, - {0x6d16, 2}, - {0x6d17, 3873}, - {0x6d19, 5830}, - {0x6d1a, 5836}, - {0x6d1b, 2700}, - {0x6d1d, 0}, - {0x6d1e, 1523}, - {0x6d20, 0}, - {0x6d21, 1}, - {0x6d22, 2}, - {0x6d23, 3}, - {0x6d24, 4}, - {0x6d25, 2243}, - {0x6d27, 5824}, - {0x6d29, 0}, - {0x6d2a, 1952}, - {0x6d2b, 5832}, - {0x6d2d, 0}, - {0x6d2e, 5834}, - {0x6d30, 0}, - {0x6d31, 1596}, - {0x6d32, 4573}, - {0x6d33, 5840}, - {0x6d35, 5835}, - {0x6d37, 0}, - {0x6d38, 1}, - {0x6d39, 5823}, - {0x6d3b, 2051}, - {0x6d3c, 3726}, - {0x6d3d, 3103}, - {0x6d3e, 2954}, - {0x6d40, 0}, - {0x6d41, 2624}, - {0x6d43, 5826}, - {0x6d45, 3120}, - {0x6d46, 2173}, - {0x6d47, 2190}, - {0x6d48, 5827}, - {0x6d4a, 4644}, - {0x6d4b, 1193}, - {0x6d4d, 5833}, - {0x6d4e, 2102}, - {0x6d4f, 5837}, - {0x6d51, 2048}, - {0x6d52, 5838}, - {0x6d53, 2921}, - {0x6d54, 5839}, - {0x6d56, 0}, - {0x6d57, 1}, - {0x6d58, 2}, - {0x6d59, 4484}, - {0x6d5a, 2352}, - {0x6d5c, 5848}, - {0x6d5e, 5845}, - {0x6d60, 5849}, - {0x6d62, 0}, - {0x6d63, 5851}, - {0x6d65, 0}, - {0x6d66, 3061}, - {0x6d68, 0}, - {0x6d69, 1917}, - {0x6d6a, 2486}, - {0x6d6c, 0}, - {0x6d6d, 1}, - {0x6d6e, 1692}, - {0x6d6f, 5842}, - {0x6d71, 0}, - {0x6d72, 1}, - {0x6d73, 2}, - {0x6d74, 4324}, - {0x6d76, 0}, - {0x6d77, 1882}, - {0x6d78, 2255}, - {0x6d79, 9180}, - {0x6d7b, 0}, - {0x6d7c, 5850}, - {0x6d7e, 0}, - {0x6d7f, 1}, - {0x6d80, 2}, - {0x6d81, 3}, - {0x6d82, 3696}, - {0x6d84, 0}, - {0x6d85, 2908}, - {0x6d87, 9179}, - {0x6d88, 3944}, - {0x6d89, 3359}, - {0x6d8b, 0}, - {0x6d8c, 4260}, - {0x6d8e, 3902}, - {0x6d90, 0}, - {0x6d91, 5841}, - {0x6d93, 5846}, - {0x6d94, 5847}, - {0x6d95, 3644}, - {0x6d97, 0}, - {0x6d98, 1}, - {0x6d99, 2}, - {0x6d9a, 3}, - {0x6d9b, 3617}, - {0x6d9d, 2495}, - {0x6d9e, 5843}, - {0x6d9f, 2553}, - {0x6da0, 5844}, - {0x6da1, 3807}, - {0x6da3, 2006}, - {0x6da4, 1460}, - {0x6da6, 3278}, - {0x6da7, 2168}, - {0x6da8, 4456}, - {0x6da9, 3301}, - {0x6daa, 1693}, - {0x6dab, 5864}, - {0x6dad, 0}, - {0x6dae, 5866}, - {0x6daf, 4077}, - {0x6db1, 0}, - {0x6db2, 4161}, - {0x6db4, 0}, - {0x6db5, 1892}, - {0x6db7, 0}, - {0x6db8, 1931}, - {0x6dba, 0}, - {0x6dbb, 1}, - {0x6dbc, 2}, - {0x6dbd, 3}, - {0x6dbe, 4}, - {0x6dbf, 5857}, - {0x6dc0, 1486}, - {0x6dc2, 0}, - {0x6dc3, 1}, - {0x6dc4, 4650}, - {0x6dc5, 5854}, - {0x6dc6, 3946}, - {0x6dc7, 5853}, - {0x6dc9, 0}, - {0x6dca, 1}, - {0x6dcb, 2597}, - {0x6dcc, 3613}, - {0x6dce, 0}, - {0x6dcf, 1}, - {0x6dd0, 2}, - {0x6dd1, 3454}, - {0x6dd3, 0}, - {0x6dd4, 1}, - {0x6dd5, 2}, - {0x6dd6, 2874}, - {0x6dd8, 3623}, - {0x6dd9, 5862}, - {0x6ddb, 0}, - {0x6ddc, 1}, - {0x6ddd, 5861}, - {0x6dde, 5855}, - {0x6de0, 5858}, - {0x6de1, 1422}, - {0x6de3, 0}, - {0x6de4, 4286}, - {0x6de6, 5860}, - {0x6de8, 0}, - {0x6de9, 1}, - {0x6dea, 8286}, - {0x6deb, 4224}, - {0x6dec, 1382}, - {0x6dee, 1993}, - {0x6df0, 0}, - {0x6df1, 3367}, - {0x6df3, 1345}, - {0x6df5, 8772}, - {0x6df6, 9186}, - {0x6df7, 2049}, - {0x6df9, 4086}, - {0x6dfa, 8404}, - {0x6dfb, 3648}, - {0x6dfc, 6689}, - {0x6dfe, 0}, - {0x6dff, 1}, - {0x6e01, 0}, - {0x6e02, 1}, - {0x6e03, 2}, - {0x6e04, 3}, - {0x6e05, 3170}, - {0x6e07, 0}, - {0x6e08, 1}, - {0x6e09, 2}, - {0x6e0a, 4331}, - {0x6e0c, 5865}, - {0x6e0d, 4658}, - {0x6e0e, 5856}, - {0x6e10, 2166}, - {0x6e11, 5859}, - {0x6e13, 0}, - {0x6e14, 4299}, - {0x6e16, 5863}, - {0x6e17, 3377}, - {0x6e19, 0}, - {0x6e1a, 5852}, - {0x6e1c, 0}, - {0x6e1d, 4298}, - {0x6e1f, 0}, - {0x6e20, 3195}, - {0x6e21, 1544}, - {0x6e23, 4415}, - {0x6e24, 1146}, - {0x6e25, 5877}, - {0x6e26, 8607}, - {0x6e28, 0}, - {0x6e29, 3793}, - {0x6e2b, 5867}, - {0x6e2c, 7782}, - {0x6e2d, 3787}, - {0x6e2f, 1750}, - {0x6e31, 0}, - {0x6e32, 5876}, - {0x6e34, 2391}, - {0x6e36, 0}, - {0x6e37, 1}, - {0x6e38, 4275}, - {0x6e3a, 2801}, - {0x6e3c, 0}, - {0x6e3d, 1}, - {0x6e3e, 8035}, - {0x6e40, 0}, - {0x6e41, 1}, - {0x6e42, 2}, - {0x6e43, 2953}, - {0x6e44, 5878}, - {0x6e46, 0}, - {0x6e47, 1}, - {0x6e48, 2}, - {0x6e49, 3}, - {0x6e4a, 4}, - {0x6e4b, 5}, - {0x6e4c, 6}, - {0x6e4d, 3701}, - {0x6e4e, 5869}, - {0x6e50, 0}, - {0x6e51, 1}, - {0x6e52, 2}, - {0x6e53, 5874}, - {0x6e54, 5875}, - {0x6e56, 1973}, - {0x6e58, 3923}, - {0x6e5a, 0}, - {0x6e5b, 4448}, - {0x6e5d, 0}, - {0x6e5e, 9181}, - {0x6e5f, 5872}, - {0x6e61, 0}, - {0x6e62, 1}, - {0x6e63, 2}, - {0x6e64, 3}, - {0x6e65, 4}, - {0x6e66, 5}, - {0x6e67, 6}, - {0x6e68, 7}, - {0x6e69, 8}, - {0x6e6a, 9}, - {0x6e6b, 5870}, - {0x6e6d, 0}, - {0x6e6e, 5868}, - {0x6e6f, 8555}, - {0x6e71, 0}, - {0x6e72, 1}, - {0x6e73, 2}, - {0x6e74, 3}, - {0x6e75, 4}, - {0x6e76, 5}, - {0x6e77, 6}, - {0x6e78, 7}, - {0x6e79, 8}, - {0x6e7a, 9}, - {0x6e7b, 10}, - {0x6e7c, 11}, - {0x6e7d, 12}, - {0x6e7e, 3734}, - {0x6e7f, 3393}, - {0x6e81, 0}, - {0x6e82, 1}, - {0x6e83, 2446}, - {0x6e85, 2167}, - {0x6e86, 5873}, - {0x6e88, 0}, - {0x6e89, 1731}, - {0x6e8b, 0}, - {0x6e8c, 1}, - {0x6e8d, 2}, - {0x6e8e, 3}, - {0x6e8f, 5893}, - {0x6e90, 4343}, - {0x6e92, 0}, - {0x6e93, 1}, - {0x6e94, 2}, - {0x6e95, 3}, - {0x6e96, 8885}, - {0x6e98, 5881}, - {0x6e9a, 0}, - {0x6e9b, 1}, - {0x6e9c, 2616}, - {0x6e9d, 7974}, - {0x6e9f, 5895}, - {0x6ea1, 0}, - {0x6ea2, 4206}, - {0x6ea4, 0}, - {0x6ea5, 5885}, - {0x6ea7, 5886}, - {0x6ea9, 0}, - {0x6eaa, 3863}, - {0x6eac, 0}, - {0x6ead, 1}, - {0x6eae, 2}, - {0x6eaf, 3538}, - {0x6eb1, 5880}, - {0x6eb2, 5871}, - {0x6eb4, 5891}, - {0x6eb6, 3255}, - {0x6eb7, 5889}, - {0x6eb9, 0}, - {0x6eba, 2890}, - {0x6ebb, 5888}, - {0x6ebd, 5887}, - {0x6ebf, 0}, - {0x6ec0, 1}, - {0x6ec1, 1313}, - {0x6ec2, 5894}, - {0x6ec4, 7779}, - {0x6ec5, 8328}, - {0x6ec7, 1474}, - {0x6ec9, 0}, - {0x6eca, 1}, - {0x6ecb, 4649}, - {0x6ecc, 7869}, - {0x6ece, 9025}, - {0x6ecf, 5892}, - {0x6ed1, 1985}, - {0x6ed3, 4655}, - {0x6ed4, 3618}, - {0x6ed5, 6568}, - {0x6ed7, 5890}, - {0x6ed9, 0}, - {0x6eda, 1871}, - {0x6edc, 0}, - {0x6edd, 1}, - {0x6ede, 4556}, - {0x6edf, 5879}, - {0x6ee0, 5882}, - {0x6ee1, 2721}, - {0x6ee2, 5884}, - {0x6ee4, 2674}, - {0x6ee5, 2479}, - {0x6ee6, 2679}, - {0x6ee8, 1118}, - {0x6ee9, 3589}, - {0x6eeb, 0}, - {0x6eec, 8011}, - {0x6eee, 0}, - {0x6eef, 8850}, - {0x6ef1, 0}, - {0x6ef2, 8484}, - {0x6ef4, 1455}, - {0x6ef6, 0}, - {0x6ef7, 8264}, - {0x6ef8, 9184}, - {0x6ef9, 5901}, - {0x6efb, 0}, - {0x6efc, 1}, - {0x6efd, 2}, - {0x6efe, 3}, - {0x6eff, 8311}, - {0x6f01, 8762}, - {0x6f02, 3022}, - {0x6f04, 0}, - {0x6f05, 1}, - {0x6f06, 3072}, - {0x6f08, 0}, - {0x6f09, 5907}, - {0x6f0b, 0}, - {0x6f0c, 1}, - {0x6f0d, 2}, - {0x6f0e, 3}, - {0x6f0f, 2640}, - {0x6f11, 0}, - {0x6f12, 1}, - {0x6f13, 2519}, - {0x6f14, 4102}, - {0x6f15, 5900}, - {0x6f17, 0}, - {0x6f18, 1}, - {0x6f19, 2}, - {0x6f1a, 8369}, - {0x6f1c, 0}, - {0x6f1d, 1}, - {0x6f1e, 2}, - {0x6f1f, 3}, - {0x6f20, 2833}, - {0x6f22, 8001}, - {0x6f23, 8220}, - {0x6f24, 5899}, - {0x6f26, 0}, - {0x6f27, 1}, - {0x6f28, 2}, - {0x6f29, 5908}, - {0x6f2a, 5906}, - {0x6f2b, 2725}, - {0x6f2c, 8888}, - {0x6f2d, 5883}, - {0x6f2f, 5902}, - {0x6f31, 3477}, - {0x6f32, 8822}, - {0x6f33, 4453}, - {0x6f35, 0}, - {0x6f36, 5903}, - {0x6f38, 8091}, - {0x6f3a, 0}, - {0x6f3b, 1}, - {0x6f3c, 2}, - {0x6f3d, 3}, - {0x6f3e, 4131}, - {0x6f3f, 8095}, - {0x6f41, 9674}, - {0x6f43, 0}, - {0x6f44, 1}, - {0x6f45, 2}, - {0x6f46, 5897}, - {0x6f47, 5898}, - {0x6f49, 0}, - {0x6f4a, 1}, - {0x6f4b, 5904}, - {0x6f4d, 3770}, - {0x6f4f, 0}, - {0x6f50, 1}, - {0x6f51, 8382}, - {0x6f53, 0}, - {0x6f54, 8116}, - {0x6f56, 0}, - {0x6f57, 1}, - {0x6f58, 2956}, - {0x6f59, 9175}, - {0x6f5b, 0}, - {0x6f5c, 3118}, - {0x6f5e, 2657}, - {0x6f60, 0}, - {0x6f61, 1}, - {0x6f62, 5896}, - {0x6f64, 8453}, - {0x6f66, 2579}, - {0x6f68, 0}, - {0x6f69, 1}, - {0x6f6a, 2}, - {0x6f6b, 3}, - {0x6f6c, 4}, - {0x6f6d, 3593}, - {0x6f6e, 1238}, - {0x6f6f, 9185}, - {0x6f70, 8172}, - {0x6f72, 5913}, - {0x6f74, 5905}, - {0x6f76, 0}, - {0x6f77, 9194}, - {0x6f78, 5912}, - {0x6f7a, 5915}, - {0x6f7c, 5914}, - {0x6f7e, 0}, - {0x6f7f, 9187}, - {0x6f80, 8462}, - {0x6f82, 0}, - {0x6f83, 1}, - {0x6f84, 1267}, - {0x6f86, 8102}, - {0x6f87, 8196}, - {0x6f88, 1247}, - {0x6f89, 5909}, - {0x6f8b, 0}, - {0x6f8c, 5911}, - {0x6f8d, 5910}, - {0x6f8e, 2989}, - {0x6f90, 0}, - {0x6f91, 1}, - {0x6f92, 2}, - {0x6f93, 3}, - {0x6f94, 4}, - {0x6f95, 5}, - {0x6f96, 6}, - {0x6f97, 8093}, - {0x6f99, 0}, - {0x6f9a, 1}, - {0x6f9b, 2}, - {0x6f9c, 2472}, - {0x6f9e, 0}, - {0x6f9f, 1}, - {0x6fa0, 9189}, - {0x6fa1, 4395}, - {0x6fa3, 0}, - {0x6fa4, 8804}, - {0x6fa6, 0}, - {0x6fa7, 5918}, - {0x6fa9, 9442}, - {0x6fab, 0}, - {0x6fac, 1}, - {0x6fad, 2}, - {0x6fae, 9182}, - {0x6fb0, 0}, - {0x6fb1, 7876}, - {0x6fb3, 975}, - {0x6fb5, 0}, - {0x6fb6, 5920}, - {0x6fb8, 0}, - {0x6fb9, 5919}, - {0x6fbb, 0}, - {0x6fbc, 1}, - {0x6fbd, 2}, - {0x6fbe, 3}, - {0x6fbf, 4}, - {0x6fc0, 2071}, - {0x6fc1, 8886}, - {0x6fc2, 5921}, - {0x6fc3, 8361}, - {0x6fc5, 0}, - {0x6fc6, 1}, - {0x6fc7, 2}, - {0x6fc8, 3}, - {0x6fc9, 5917}, - {0x6fcb, 0}, - {0x6fcc, 1}, - {0x6fcd, 2}, - {0x6fce, 3}, - {0x6fcf, 4}, - {0x6fd0, 5}, - {0x6fd1, 5916}, - {0x6fd2, 1117}, - {0x6fd4, 0}, - {0x6fd5, 8491}, - {0x6fd7, 0}, - {0x6fd8, 8357}, - {0x6fda, 0}, - {0x6fdb, 9867}, - {0x6fdd, 0}, - {0x6fde, 5924}, - {0x6fdf, 8054}, - {0x6fe0, 5925}, - {0x6fe1, 5922}, - {0x6fe3, 0}, - {0x6fe4, 8557}, - {0x6fe6, 0}, - {0x6fe7, 1}, - {0x6fe8, 2}, - {0x6fe9, 3}, - {0x6fea, 4}, - {0x6feb, 8193}, - {0x6fed, 0}, - {0x6fee, 5923}, - {0x6fef, 5926}, - {0x6ff0, 8593}, - {0x6ff1, 7760}, - {0x6ff3, 0}, - {0x6ff4, 1}, - {0x6ff5, 2}, - {0x6ff6, 3}, - {0x6ff7, 4}, - {0x6ff8, 5}, - {0x6ff9, 6}, - {0x6ffa, 8092}, - {0x6ffc, 9178}, - {0x6ffe, 8275}, - {0x7001, 0}, - {0x7002, 1}, - {0x7003, 2}, - {0x7004, 3}, - {0x7005, 9193}, - {0x7006, 9188}, - {0x7008, 0}, - {0x7009, 8661}, - {0x700b, 9190}, - {0x700d, 0}, - {0x700e, 1}, - {0x700f, 9183}, - {0x7011, 3064}, - {0x7013, 0}, - {0x7014, 1}, - {0x7015, 7759}, - {0x7017, 0}, - {0x7018, 9177}, - {0x701a, 5927}, - {0x701b, 5929}, - {0x701d, 8212}, - {0x701f, 9196}, - {0x7020, 9195}, - {0x7022, 0}, - {0x7023, 5928}, - {0x7025, 0}, - {0x7026, 1}, - {0x7027, 9176}, - {0x7028, 9198}, - {0x702a, 0}, - {0x702b, 1}, - {0x702c, 2}, - {0x702d, 3}, - {0x702e, 4}, - {0x702f, 5}, - {0x7030, 9870}, - {0x7032, 9197}, - {0x7034, 0}, - {0x7035, 5931}, - {0x7037, 0}, - {0x7038, 1}, - {0x7039, 5930}, - {0x703b, 0}, - {0x703c, 1}, - {0x703d, 2}, - {0x703e, 8186}, - {0x7040, 0}, - {0x7041, 1}, - {0x7042, 2}, - {0x7043, 9174}, - {0x7044, 9192}, - {0x7046, 0}, - {0x7047, 1}, - {0x7048, 2}, - {0x7049, 3}, - {0x704a, 4}, - {0x704b, 5}, - {0x704c, 1849}, - {0x704e, 0}, - {0x704f, 5932}, - {0x7051, 8454}, - {0x7053, 0}, - {0x7054, 1}, - {0x7055, 8203}, - {0x7057, 0}, - {0x7058, 8550}, - {0x705a, 0}, - {0x705b, 1}, - {0x705c, 2}, - {0x705d, 9199}, - {0x705e, 5933}, - {0x7060, 0}, - {0x7061, 1}, - {0x7062, 2}, - {0x7063, 8585}, - {0x7064, 8280}, - {0x7066, 0}, - {0x7067, 9191}, - {0x7069, 0}, - {0x706a, 1}, - {0x706b, 2053}, - {0x706c, 6639}, - {0x706d, 2805}, - {0x706f, 1447}, - {0x7070, 2023}, - {0x7072, 0}, - {0x7073, 1}, - {0x7074, 2}, - {0x7075, 2610}, - {0x7076, 4401}, - {0x7078, 2291}, - {0x707a, 0}, - {0x707b, 1}, - {0x707c, 4643}, - {0x707e, 4377}, - {0x707f, 1178}, - {0x7080, 6604}, - {0x7082, 0}, - {0x7083, 1}, - {0x7084, 2}, - {0x7085, 6419}, - {0x7087, 0}, - {0x7088, 1}, - {0x7089, 2646}, - {0x708a, 1337}, - {0x708c, 0}, - {0x708d, 1}, - {0x708e, 4096}, - {0x7090, 0}, - {0x7091, 1}, - {0x7092, 1241}, - {0x7094, 3213}, - {0x7095, 2376}, - {0x7096, 6606}, - {0x7098, 0}, - {0x7099, 4554}, - {0x709b, 0}, - {0x709c, 6605}, - {0x709d, 6607}, - {0x709f, 0}, - {0x70a0, 1}, - {0x70a1, 2}, - {0x70a2, 3}, - {0x70a3, 4}, - {0x70a4, 5}, - {0x70a5, 6}, - {0x70a6, 7}, - {0x70a7, 8}, - {0x70a8, 9}, - {0x70a9, 10}, - {0x70aa, 11}, - {0x70ab, 6611}, - {0x70ac, 2325}, - {0x70ad, 3602}, - {0x70ae, 2971}, - {0x70af, 2283}, - {0x70b1, 6612}, - {0x70b3, 1127}, - {0x70b5, 0}, - {0x70b6, 1}, - {0x70b7, 6610}, - {0x70b8, 4425}, - {0x70b9, 1476}, - {0x70bb, 6608}, - {0x70bc, 2559}, - {0x70bd, 1288}, - {0x70bf, 0}, - {0x70c0, 6609}, - {0x70c1, 3501}, - {0x70c2, 2478}, - {0x70c3, 3665}, - {0x70c5, 0}, - {0x70c6, 1}, - {0x70c7, 2}, - {0x70c8, 2587}, - {0x70ca, 6614}, - {0x70cc, 0}, - {0x70cd, 1}, - {0x70ce, 2}, - {0x70cf, 8611}, - {0x70d1, 0}, - {0x70d2, 1}, - {0x70d3, 2}, - {0x70d4, 3}, - {0x70d5, 4}, - {0x70d6, 5}, - {0x70d7, 6}, - {0x70d8, 1949}, - {0x70d9, 2494}, - {0x70db, 4593}, - {0x70dd, 0}, - {0x70de, 1}, - {0x70df, 4085}, - {0x70e1, 0}, - {0x70e2, 1}, - {0x70e3, 2}, - {0x70e4, 2379}, - {0x70e6, 1616}, - {0x70e7, 3342}, - {0x70e8, 6613}, - {0x70e9, 2039}, - {0x70eb, 3615}, - {0x70ec, 2254}, - {0x70ed, 3235}, - {0x70ef, 3862}, - {0x70f1, 0}, - {0x70f2, 1}, - {0x70f3, 2}, - {0x70f4, 8570}, - {0x70f6, 0}, - {0x70f7, 3738}, - {0x70f9, 2988}, - {0x70fb, 0}, - {0x70fc, 1}, - {0x70fd, 1670}, - {0x70ff, 0}, - {0x7101, 0}, - {0x7102, 1}, - {0x7103, 2}, - {0x7104, 3}, - {0x7105, 4}, - {0x7106, 5}, - {0x7107, 6}, - {0x7108, 7}, - {0x7109, 4082}, - {0x710a, 1903}, - {0x710c, 0}, - {0x710d, 1}, - {0x710e, 2}, - {0x710f, 3}, - {0x7110, 6615}, - {0x7112, 0}, - {0x7113, 6616}, - {0x7115, 2005}, - {0x7116, 6617}, - {0x7118, 6640}, - {0x7119, 1059}, - {0x711a, 1654}, - {0x711c, 0}, - {0x711d, 1}, - {0x711e, 2}, - {0x711f, 3}, - {0x7120, 4}, - {0x7121, 8613}, - {0x7123, 0}, - {0x7124, 1}, - {0x7125, 2}, - {0x7126, 2186}, - {0x7128, 0}, - {0x7129, 1}, - {0x712a, 2}, - {0x712b, 3}, - {0x712c, 4}, - {0x712d, 5}, - {0x712e, 6}, - {0x712f, 6618}, - {0x7130, 4111}, - {0x7131, 6619}, - {0x7133, 0}, - {0x7134, 1}, - {0x7135, 2}, - {0x7136, 3222}, - {0x7138, 0}, - {0x7139, 1}, - {0x713a, 2}, - {0x713b, 3}, - {0x713c, 4}, - {0x713d, 5}, - {0x713e, 6}, - {0x713f, 7}, - {0x7140, 8}, - {0x7141, 9}, - {0x7142, 10}, - {0x7143, 11}, - {0x7144, 12}, - {0x7145, 6623}, - {0x7147, 0}, - {0x7148, 1}, - {0x7149, 8226}, - {0x714a, 6625}, - {0x714c, 2018}, - {0x714e, 2136}, - {0x7150, 0}, - {0x7151, 1}, - {0x7152, 9430}, - {0x7154, 0}, - {0x7155, 1}, - {0x7156, 2}, - {0x7157, 3}, - {0x7158, 4}, - {0x7159, 5}, - {0x715a, 6}, - {0x715b, 7}, - {0x715c, 6621}, - {0x715e, 3312}, - {0x7160, 0}, - {0x7161, 1}, - {0x7162, 9018}, - {0x7164, 2751}, - {0x7166, 6641}, - {0x7167, 4470}, - {0x7168, 6622}, - {0x7169, 7918}, - {0x716b, 0}, - {0x716c, 9429}, - {0x716e, 4594}, - {0x7170, 0}, - {0x7171, 1}, - {0x7172, 6624}, - {0x7173, 6620}, - {0x7175, 0}, - {0x7176, 1}, - {0x7177, 2}, - {0x7178, 6626}, - {0x717a, 6627}, - {0x717c, 0}, - {0x717d, 3320}, - {0x717f, 0}, - {0x7180, 1}, - {0x7181, 2}, - {0x7182, 3}, - {0x7183, 4}, - {0x7184, 3861}, - {0x7186, 0}, - {0x7187, 1}, - {0x7188, 2}, - {0x7189, 3}, - {0x718a, 4007}, - {0x718c, 0}, - {0x718d, 1}, - {0x718e, 2}, - {0x718f, 4053}, - {0x7191, 0}, - {0x7192, 8744}, - {0x7194, 3254}, - {0x7196, 0}, - {0x7197, 9431}, - {0x7198, 6628}, - {0x7199, 3844}, - {0x719b, 0}, - {0x719c, 1}, - {0x719d, 2}, - {0x719e, 3}, - {0x719f, 3459}, - {0x71a0, 6632}, - {0x71a2, 0}, - {0x71a3, 1}, - {0x71a4, 2}, - {0x71a5, 3}, - {0x71a6, 4}, - {0x71a7, 5}, - {0x71a8, 6631}, - {0x71aa, 0}, - {0x71ab, 1}, - {0x71ac, 969}, - {0x71ae, 0}, - {0x71af, 1}, - {0x71b0, 2}, - {0x71b1, 8444}, - {0x71b3, 6629}, - {0x71b5, 6630}, - {0x71b7, 0}, - {0x71b8, 1}, - {0x71b9, 6642}, - {0x71bb, 0}, - {0x71bc, 1}, - {0x71bd, 2}, - {0x71be, 7815}, - {0x71c0, 0}, - {0x71c1, 9432}, - {0x71c3, 3223}, - {0x71c5, 0}, - {0x71c6, 1}, - {0x71c7, 2}, - {0x71c8, 7866}, - {0x71ca, 0}, - {0x71cb, 1}, - {0x71cc, 2}, - {0x71cd, 3}, - {0x71ce, 2576}, - {0x71d0, 0}, - {0x71d1, 1}, - {0x71d2, 8473}, - {0x71d4, 6634}, - {0x71d5, 4105}, - {0x71d7, 0}, - {0x71d8, 1}, - {0x71d9, 8556}, - {0x71db, 0}, - {0x71dc, 9433}, - {0x71de, 0}, - {0x71df, 8743}, - {0x71e0, 6633}, - {0x71e2, 0}, - {0x71e3, 1}, - {0x71e4, 2}, - {0x71e5, 4402}, - {0x71e6, 7775}, - {0x71e7, 6635}, - {0x71e9, 0}, - {0x71ea, 1}, - {0x71eb, 2}, - {0x71ec, 3}, - {0x71ed, 8863}, - {0x71ee, 5014}, - {0x71f0, 0}, - {0x71f1, 1}, - {0x71f2, 2}, - {0x71f3, 3}, - {0x71f4, 8029}, - {0x71f6, 0}, - {0x71f7, 1}, - {0x71f8, 2}, - {0x71f9, 6636}, - {0x71fb, 0}, - {0x71fc, 8124}, - {0x71fe, 9434}, - {0x7201, 0}, - {0x7202, 1}, - {0x7203, 2}, - {0x7204, 3}, - {0x7205, 4}, - {0x7206, 1045}, - {0x7208, 0}, - {0x7209, 1}, - {0x720a, 2}, - {0x720b, 3}, - {0x720c, 4}, - {0x720d, 8521}, - {0x720f, 0}, - {0x7210, 8262}, - {0x7212, 0}, - {0x7213, 1}, - {0x7214, 2}, - {0x7215, 3}, - {0x7216, 4}, - {0x7217, 5}, - {0x7218, 6}, - {0x7219, 7}, - {0x721a, 8}, - {0x721b, 8192}, - {0x721d, 6637}, - {0x721f, 0}, - {0x7220, 1}, - {0x7221, 2}, - {0x7222, 3}, - {0x7223, 4}, - {0x7224, 5}, - {0x7225, 6}, - {0x7226, 7}, - {0x7227, 8}, - {0x7228, 6638}, - {0x722a, 4611}, - {0x722c, 2945}, - {0x722e, 0}, - {0x722f, 1}, - {0x7230, 6508}, - {0x7231, 953}, - {0x7232, 8592}, - {0x7234, 0}, - {0x7235, 2339}, - {0x7236, 1715}, - {0x7237, 4150}, - {0x7238, 993}, - {0x7239, 1498}, - {0x723a, 8712}, - {0x723b, 4713}, - {0x723d, 3489}, - {0x723e, 7910}, - {0x723f, 5789}, - {0x7241, 0}, - {0x7242, 1}, - {0x7243, 2}, - {0x7244, 3}, - {0x7245, 4}, - {0x7246, 5}, - {0x7247, 3019}, - {0x7248, 1009}, - {0x724a, 0}, - {0x724b, 1}, - {0x724c, 2951}, - {0x724d, 6505}, - {0x724f, 0}, - {0x7250, 1}, - {0x7251, 2}, - {0x7252, 6506}, - {0x7254, 0}, - {0x7255, 1}, - {0x7256, 6507}, - {0x7258, 9411}, - {0x7259, 4073}, - {0x725b, 2916}, - {0x725d, 6468}, - {0x725f, 2837}, - {0x7261, 2840}, - {0x7262, 2489}, - {0x7264, 0}, - {0x7265, 1}, - {0x7266, 6469}, - {0x7267, 2852}, - {0x7269, 3838}, - {0x726b, 0}, - {0x726c, 1}, - {0x726d, 2}, - {0x726e, 6466}, - {0x726f, 6470}, - {0x7271, 0}, - {0x7272, 3381}, - {0x7274, 0}, - {0x7275, 3104}, - {0x7277, 0}, - {0x7278, 1}, - {0x7279, 3627}, - {0x727a, 3853}, - {0x727c, 0}, - {0x727d, 8396}, - {0x727e, 6471}, - {0x727f, 6472}, - {0x7280, 3865}, - {0x7281, 2514}, - {0x7283, 0}, - {0x7284, 6473}, - {0x7286, 0}, - {0x7287, 1}, - {0x7288, 2}, - {0x7289, 3}, - {0x728a, 1534}, - {0x728b, 6474}, - {0x728d, 6475}, - {0x728f, 6476}, - {0x7291, 0}, - {0x7292, 6477}, - {0x7294, 0}, - {0x7295, 1}, - {0x7296, 9024}, - {0x7298, 0}, - {0x7299, 1}, - {0x729a, 2}, - {0x729b, 3}, - {0x729c, 4}, - {0x729d, 5}, - {0x729e, 6}, - {0x729f, 6467}, - {0x72a1, 0}, - {0x72a2, 7889}, - {0x72a4, 0}, - {0x72a5, 1}, - {0x72a6, 2}, - {0x72a7, 8620}, - {0x72a9, 0}, - {0x72aa, 1}, - {0x72ab, 2}, - {0x72ac, 3209}, - {0x72ad, 5615}, - {0x72af, 1621}, - {0x72b0, 5616}, - {0x72b2, 0}, - {0x72b3, 1}, - {0x72b4, 5617}, - {0x72b6, 4625}, - {0x72b7, 5618}, - {0x72b8, 5619}, - {0x72b9, 4273}, - {0x72bb, 0}, - {0x72bc, 1}, - {0x72bd, 2}, - {0x72be, 3}, - {0x72bf, 4}, - {0x72c0, 8879}, - {0x72c1, 5621}, - {0x72c2, 2430}, - {0x72c3, 5620}, - {0x72c4, 1459}, - {0x72c6, 0}, - {0x72c7, 1}, - {0x72c8, 1056}, - {0x72ca, 0}, - {0x72cb, 1}, - {0x72cc, 2}, - {0x72cd, 5623}, - {0x72ce, 5622}, - {0x72d0, 1971}, - {0x72d2, 5624}, - {0x72d4, 0}, - {0x72d5, 1}, - {0x72d6, 2}, - {0x72d7, 1808}, - {0x72d9, 2304}, - {0x72db, 0}, - {0x72dc, 1}, - {0x72dd, 2}, - {0x72de, 2911}, - {0x72e0, 1940}, - {0x72e1, 2199}, - {0x72e3, 0}, - {0x72e4, 1}, - {0x72e5, 2}, - {0x72e6, 3}, - {0x72e7, 4}, - {0x72e8, 5625}, - {0x72e9, 5627}, - {0x72eb, 0}, - {0x72ec, 1535}, - {0x72ed, 3886}, - {0x72ee, 3391}, - {0x72ef, 5626}, - {0x72f0, 4505}, - {0x72f1, 4321}, - {0x72f2, 5628}, - {0x72f3, 5632}, - {0x72f4, 5629}, - {0x72f6, 0}, - {0x72f7, 5630}, - {0x72f8, 2517}, - {0x72f9, 8630}, - {0x72fa, 5634}, - {0x72fb, 5635}, - {0x72fc, 2482}, - {0x72fd, 7741}, - {0x72ff, 0}, - {0x7301, 5631}, - {0x7303, 5633}, - {0x7305, 0}, - {0x7306, 1}, - {0x7307, 2}, - {0x7308, 3}, - {0x7309, 4}, - {0x730a, 5639}, - {0x730c, 0}, - {0x730d, 1}, - {0x730e, 2589}, - {0x7310, 0}, - {0x7311, 1}, - {0x7312, 2}, - {0x7313, 5637}, - {0x7315, 5642}, - {0x7316, 1221}, - {0x7317, 5636}, - {0x7319, 0}, - {0x731a, 1}, - {0x731b, 2770}, - {0x731c, 1161}, - {0x731d, 5641}, - {0x731e, 5640}, - {0x7320, 0}, - {0x7321, 5638}, - {0x7322, 5643}, - {0x7324, 0}, - {0x7325, 5645}, - {0x7327, 0}, - {0x7328, 1}, - {0x7329, 3988}, - {0x732a, 4588}, - {0x732b, 2733}, - {0x732c, 5646}, - {0x732e, 3908}, - {0x7330, 0}, - {0x7331, 5648}, - {0x7333, 0}, - {0x7334, 1958}, - {0x7336, 8757}, - {0x7337, 6356}, - {0x7338, 5647}, - {0x7339, 5644}, - {0x733b, 9111}, - {0x733d, 0}, - {0x733e, 1984}, - {0x733f, 4342}, - {0x7341, 9109}, - {0x7343, 0}, - {0x7344, 8767}, - {0x7345, 8490}, - {0x7347, 0}, - {0x7348, 1}, - {0x7349, 2}, - {0x734a, 3}, - {0x734b, 4}, - {0x734c, 5}, - {0x734d, 5650}, - {0x734f, 0}, - {0x7350, 5649}, - {0x7352, 6357}, - {0x7354, 0}, - {0x7355, 1}, - {0x7356, 2}, - {0x7357, 5651}, - {0x7359, 0}, - {0x735a, 1}, - {0x735b, 2}, - {0x735c, 3}, - {0x735d, 4}, - {0x735e, 5}, - {0x735f, 6}, - {0x7360, 5652}, - {0x7362, 0}, - {0x7363, 1}, - {0x7364, 2}, - {0x7365, 3}, - {0x7366, 4}, - {0x7367, 5}, - {0x7368, 7890}, - {0x736a, 9110}, - {0x736b, 9112}, - {0x736c, 5653}, - {0x736d, 3572}, - {0x736f, 5654}, - {0x7370, 8354}, - {0x7372, 8036}, - {0x7374, 0}, - {0x7375, 8235}, - {0x7377, 9108}, - {0x7378, 8505}, - {0x737a, 8543}, - {0x737b, 8641}, - {0x737c, 9114}, - {0x737e, 5655}, - {0x7380, 9113}, - {0x7382, 0}, - {0x7383, 1}, - {0x7384, 4041}, - {0x7386, 0}, - {0x7387, 2673}, - {0x7389, 4310}, - {0x738b, 3750}, - {0x738d, 0}, - {0x738e, 6168}, - {0x7390, 0}, - {0x7391, 6169}, - {0x7393, 0}, - {0x7394, 1}, - {0x7395, 2}, - {0x7396, 2288}, - {0x7398, 0}, - {0x7399, 1}, - {0x739a, 2}, - {0x739b, 2705}, - {0x739d, 0}, - {0x739e, 1}, - {0x739f, 6172}, - {0x73a1, 0}, - {0x73a2, 6171}, - {0x73a4, 0}, - {0x73a5, 1}, - {0x73a6, 2}, - {0x73a7, 3}, - {0x73a8, 4}, - {0x73a9, 3735}, - {0x73ab, 2746}, - {0x73ad, 0}, - {0x73ae, 6170}, - {0x73af, 1996}, - {0x73b0, 3907}, - {0x73b2, 2602}, - {0x73b3, 6177}, - {0x73b5, 0}, - {0x73b6, 1}, - {0x73b7, 6176}, - {0x73b9, 0}, - {0x73ba, 6188}, - {0x73bb, 1130}, - {0x73bd, 0}, - {0x73be, 1}, - {0x73bf, 2}, - {0x73c0, 6178}, - {0x73c2, 6174}, - {0x73c4, 0}, - {0x73c5, 1}, - {0x73c6, 2}, - {0x73c7, 3}, - {0x73c8, 6180}, - {0x73c9, 6179}, - {0x73ca, 3315}, - {0x73cc, 0}, - {0x73cd, 4485}, - {0x73cf, 6173}, - {0x73d0, 1606}, - {0x73d1, 6175}, - {0x73d3, 0}, - {0x73d4, 1}, - {0x73d5, 2}, - {0x73d6, 3}, - {0x73d7, 4}, - {0x73d8, 5}, - {0x73d9, 6182}, - {0x73db, 0}, - {0x73dc, 1}, - {0x73dd, 2}, - {0x73de, 6187}, - {0x73e0, 4584}, - {0x73e2, 0}, - {0x73e3, 1}, - {0x73e4, 2}, - {0x73e5, 6181}, - {0x73e7, 6186}, - {0x73e9, 6185}, - {0x73eb, 0}, - {0x73ec, 1}, - {0x73ed, 1003}, - {0x73ef, 0}, - {0x73f0, 1}, - {0x73f1, 2}, - {0x73f2, 6189}, - {0x73f4, 0}, - {0x73f5, 1}, - {0x73f6, 2}, - {0x73f7, 3}, - {0x73f8, 4}, - {0x73f9, 5}, - {0x73fa, 6}, - {0x73fb, 7}, - {0x73fc, 8}, - {0x73fd, 9}, - {0x73fe, 8640}, - {0x7401, 0}, - {0x7402, 1}, - {0x7403, 3183}, - {0x7405, 2480}, - {0x7406, 2520}, - {0x7408, 0}, - {0x7409, 2617}, - {0x740a, 6184}, - {0x740c, 0}, - {0x740d, 1}, - {0x740e, 2}, - {0x740f, 6190}, - {0x7410, 3563}, - {0x7412, 0}, - {0x7413, 1}, - {0x7414, 2}, - {0x7415, 3}, - {0x7416, 4}, - {0x7417, 5}, - {0x7418, 6}, - {0x7419, 7}, - {0x741a, 6200}, - {0x741b, 6199}, - {0x741d, 0}, - {0x741e, 1}, - {0x741f, 2}, - {0x7420, 3}, - {0x7421, 4}, - {0x7422, 4638}, - {0x7424, 0}, - {0x7425, 6194}, - {0x7426, 6193}, - {0x7428, 6195}, - {0x742a, 6191}, - {0x742c, 6198}, - {0x742e, 6197}, - {0x7430, 6196}, - {0x7432, 0}, - {0x7433, 2590}, - {0x7434, 3158}, - {0x7435, 3006}, - {0x7436, 2948}, - {0x7438, 0}, - {0x7439, 1}, - {0x743a, 2}, - {0x743b, 3}, - {0x743c, 3178}, - {0x743e, 0}, - {0x743f, 9312}, - {0x7441, 6201}, - {0x7443, 0}, - {0x7444, 1}, - {0x7445, 2}, - {0x7446, 3}, - {0x7447, 4}, - {0x7448, 5}, - {0x7449, 6}, - {0x744a, 7}, - {0x744b, 9308}, - {0x744d, 0}, - {0x744e, 1}, - {0x744f, 2}, - {0x7450, 3}, - {0x7451, 4}, - {0x7452, 5}, - {0x7453, 6}, - {0x7454, 7}, - {0x7455, 6204}, - {0x7457, 6203}, - {0x7459, 6205}, - {0x745a, 1966}, - {0x745b, 6192}, - {0x745c, 6202}, - {0x745e, 3275}, - {0x745f, 3299}, - {0x7461, 0}, - {0x7462, 1}, - {0x7463, 8541}, - {0x7465, 0}, - {0x7466, 1}, - {0x7467, 2}, - {0x7468, 3}, - {0x7469, 8741}, - {0x746a, 8298}, - {0x746c, 0}, - {0x746d, 6207}, - {0x746f, 0}, - {0x7470, 1854}, - {0x7472, 0}, - {0x7473, 1}, - {0x7474, 2}, - {0x7475, 3}, - {0x7476, 4135}, - {0x7477, 6206}, - {0x7479, 0}, - {0x747a, 1}, - {0x747b, 2}, - {0x747c, 3}, - {0x747d, 4}, - {0x747e, 6208}, - {0x7480, 6211}, - {0x7481, 6212}, - {0x7483, 2544}, - {0x7485, 0}, - {0x7486, 1}, - {0x7487, 6213}, - {0x7489, 9313}, - {0x748b, 6214}, - {0x748d, 0}, - {0x748e, 6210}, - {0x7490, 6218}, - {0x7492, 0}, - {0x7493, 1}, - {0x7494, 2}, - {0x7495, 3}, - {0x7496, 4}, - {0x7497, 5}, - {0x7498, 6}, - {0x7499, 7}, - {0x749a, 8}, - {0x749b, 9}, - {0x749c, 6209}, - {0x749e, 6215}, - {0x74a0, 0}, - {0x74a1, 1}, - {0x74a2, 2}, - {0x74a3, 9307}, - {0x74a5, 0}, - {0x74a6, 9314}, - {0x74a7, 6219}, - {0x74a8, 6216}, - {0x74a9, 6217}, - {0x74ab, 0}, - {0x74ac, 1}, - {0x74ad, 2}, - {0x74ae, 3}, - {0x74af, 4}, - {0x74b0, 8020}, - {0x74b2, 0}, - {0x74b3, 1}, - {0x74b4, 2}, - {0x74b5, 3}, - {0x74b6, 4}, - {0x74b7, 5}, - {0x74b8, 6}, - {0x74b9, 7}, - {0x74ba, 6221}, - {0x74bc, 0}, - {0x74bd, 9311}, - {0x74bf, 0}, - {0x74c0, 1}, - {0x74c1, 2}, - {0x74c2, 3}, - {0x74c3, 4}, - {0x74c4, 5}, - {0x74c5, 6}, - {0x74c6, 7}, - {0x74c7, 8}, - {0x74c8, 9}, - {0x74c9, 10}, - {0x74ca, 8428}, - {0x74cc, 0}, - {0x74cd, 1}, - {0x74ce, 2}, - {0x74cf, 9309}, - {0x74d1, 0}, - {0x74d2, 6220}, - {0x74d4, 9315}, - {0x74d6, 0}, - {0x74d7, 1}, - {0x74d8, 2}, - {0x74d9, 3}, - {0x74da, 9316}, - {0x74dc, 1832}, - {0x74de, 6962}, - {0x74e0, 6963}, - {0x74e2, 3023}, - {0x74e3, 1013}, - {0x74e4, 3226}, - {0x74e6, 3728}, - {0x74e8, 0}, - {0x74e9, 1}, - {0x74ea, 2}, - {0x74eb, 3}, - {0x74ec, 4}, - {0x74ed, 5}, - {0x74ee, 3804}, - {0x74ef, 6403}, - {0x74f1, 0}, - {0x74f2, 1}, - {0x74f3, 2}, - {0x74f4, 6404}, - {0x74f6, 3038}, - {0x74f7, 1356}, - {0x74f9, 0}, - {0x74fa, 1}, - {0x74fb, 2}, - {0x74fc, 3}, - {0x74fd, 4}, - {0x74fe, 5}, - {0x74ff, 6405}, - {0x7501, 0}, - {0x7502, 1}, - {0x7503, 2}, - {0x7504, 4488}, - {0x7506, 0}, - {0x7507, 1}, - {0x7508, 2}, - {0x7509, 3}, - {0x750a, 4}, - {0x750b, 5}, - {0x750c, 9381}, - {0x750d, 5253}, - {0x750f, 6406}, - {0x7511, 6407}, - {0x7513, 6408}, - {0x7515, 0}, - {0x7516, 1}, - {0x7517, 2}, - {0x7518, 1733}, - {0x7519, 5368}, - {0x751a, 3374}, - {0x751c, 3651}, - {0x751e, 0}, - {0x751f, 3379}, - {0x7521, 0}, - {0x7522, 1}, - {0x7523, 7792}, - {0x7525, 3380}, - {0x7527, 0}, - {0x7528, 4264}, - {0x7529, 3483}, - {0x752b, 1697}, - {0x752c, 6964}, - {0x752d, 1067}, - {0x752f, 5940}, - {0x7530, 3650}, - {0x7531, 4270}, - {0x7532, 2122}, - {0x7533, 3363}, - {0x7535, 1480}, - {0x7537, 2867}, - {0x7538, 1482}, - {0x753a, 6776}, - {0x753b, 1986}, - {0x753d, 0}, - {0x753e, 6166}, - {0x7540, 6777}, - {0x7542, 0}, - {0x7543, 1}, - {0x7544, 2}, - {0x7545, 1230}, - {0x7547, 0}, - {0x7548, 6780}, - {0x754a, 0}, - {0x754b, 6779}, - {0x754c, 2232}, - {0x754e, 6778}, - {0x754f, 3782}, - {0x7551, 0}, - {0x7552, 1}, - {0x7553, 2}, - {0x7554, 2960}, - {0x7556, 0}, - {0x7557, 1}, - {0x7558, 2}, - {0x7559, 2621}, - {0x755a, 5022}, - {0x755b, 6781}, - {0x755c, 4030}, - {0x755d, 8335}, - {0x755f, 0}, - {0x7560, 1}, - {0x7561, 2}, - {0x7562, 7746}, - {0x7564, 0}, - {0x7565, 2683}, - {0x7566, 3079}, - {0x7568, 0}, - {0x7569, 1}, - {0x756a, 1609}, - {0x756b, 8014}, - {0x756d, 0}, - {0x756e, 1}, - {0x756f, 2}, - {0x7570, 3}, - {0x7571, 4}, - {0x7572, 6782}, - {0x7574, 1296}, - {0x7576, 7857}, - {0x7578, 2064}, - {0x7579, 6783}, - {0x757b, 0}, - {0x757c, 1}, - {0x757d, 2}, - {0x757e, 3}, - {0x757f, 6164}, - {0x7581, 0}, - {0x7582, 1}, - {0x7583, 6784}, - {0x7585, 0}, - {0x7586, 2175}, - {0x7587, 7819}, - {0x7589, 0}, - {0x758a, 1}, - {0x758b, 7110}, - {0x758d, 0}, - {0x758e, 1}, - {0x758f, 3455}, - {0x7591, 4176}, - {0x7592, 7008}, - {0x7594, 7009}, - {0x7596, 7010}, - {0x7597, 2575}, - {0x7599, 1768}, - {0x759a, 2301}, - {0x759c, 0}, - {0x759d, 7012}, - {0x759f, 2930}, - {0x75a0, 7011}, - {0x75a1, 4122}, - {0x75a3, 7014}, - {0x75a4, 983}, - {0x75a5, 2235}, - {0x75a7, 0}, - {0x75a8, 1}, - {0x75a9, 2}, - {0x75aa, 3}, - {0x75ab, 4198}, - {0x75ac, 7013}, - {0x75ae, 1330}, - {0x75af, 1669}, - {0x75b0, 7020}, - {0x75b1, 7019}, - {0x75b2, 3010}, - {0x75b3, 7015}, - {0x75b4, 7016}, - {0x75b5, 1350}, - {0x75b7, 0}, - {0x75b8, 7017}, - {0x75b9, 4495}, - {0x75bb, 0}, - {0x75bc, 3630}, - {0x75bd, 2305}, - {0x75be, 2085}, - {0x75c0, 0}, - {0x75c1, 1}, - {0x75c2, 7022}, - {0x75c3, 7021}, - {0x75c4, 7018}, - {0x75c5, 1128}, - {0x75c7, 4513}, - {0x75c8, 4253}, - {0x75c9, 2278}, - {0x75ca, 3207}, - {0x75cc, 0}, - {0x75cd, 7024}, - {0x75cf, 0}, - {0x75d0, 1}, - {0x75d1, 2}, - {0x75d2, 4128}, - {0x75d4, 4555}, - {0x75d5, 1938}, - {0x75d6, 7023}, - {0x75d8, 1530}, - {0x75d9, 8134}, - {0x75db, 3685}, - {0x75dd, 0}, - {0x75de, 3013}, - {0x75e0, 0}, - {0x75e1, 1}, - {0x75e2, 2538}, - {0x75e3, 7025}, - {0x75e4, 7028}, - {0x75e6, 7027}, - {0x75e7, 7030}, - {0x75e8, 7026}, - {0x75ea, 2003}, - {0x75eb, 7029}, - {0x75ed, 0}, - {0x75ee, 1}, - {0x75ef, 2}, - {0x75f0, 3592}, - {0x75f1, 7032}, - {0x75f3, 0}, - {0x75f4, 1274}, - {0x75f6, 0}, - {0x75f7, 1}, - {0x75f8, 2}, - {0x75f9, 1085}, - {0x75fb, 0}, - {0x75fc, 7033}, - {0x75fe, 0}, - {0x75ff, 7034}, - {0x7600, 7036}, - {0x7601, 1380}, - {0x7602, 9646}, - {0x7603, 7031}, - {0x7605, 7037}, - {0x7607, 0}, - {0x7608, 1}, - {0x7609, 2}, - {0x760a, 7040}, - {0x760b, 7937}, - {0x760c, 7038}, - {0x760d, 8704}, - {0x760f, 0}, - {0x7610, 7035}, - {0x7612, 0}, - {0x7613, 1}, - {0x7614, 2}, - {0x7615, 7043}, - {0x7617, 7039}, - {0x7618, 7042}, - {0x7619, 7044}, - {0x761b, 7045}, - {0x761d, 0}, - {0x761e, 9650}, - {0x761f, 3792}, - {0x7620, 7048}, - {0x7621, 7831}, - {0x7622, 7047}, - {0x7624, 2623}, - {0x7625, 7041}, - {0x7626, 3444}, - {0x7627, 8363}, - {0x7629, 1396}, - {0x762a, 1114}, - {0x762b, 3588}, - {0x762d, 7050}, - {0x762f, 0}, - {0x7630, 7051}, - {0x7632, 0}, - {0x7633, 7056}, - {0x7634, 4463}, - {0x7635, 7053}, - {0x7637, 0}, - {0x7638, 3214}, - {0x763a, 0}, - {0x763b, 9651}, - {0x763c, 7046}, - {0x763e, 7055}, - {0x763f, 7052}, - {0x7640, 7049}, - {0x7642, 8232}, - {0x7643, 7054}, - {0x7645, 0}, - {0x7646, 9647}, - {0x7647, 9648}, - {0x7649, 9649}, - {0x764b, 0}, - {0x764c, 948}, - {0x764d, 7057}, - {0x764f, 0}, - {0x7650, 1}, - {0x7651, 2}, - {0x7652, 3}, - {0x7653, 4}, - {0x7654, 7059}, - {0x7656, 7061}, - {0x7658, 9644}, - {0x765a, 0}, - {0x765b, 1}, - {0x765c, 7060}, - {0x765e, 7058}, - {0x765f, 7758}, - {0x7661, 0}, - {0x7662, 8706}, - {0x7663, 4043}, - {0x7664, 9643}, - {0x7665, 8838}, - {0x7667, 9645}, - {0x7669, 9654}, - {0x766b, 7062}, - {0x766c, 8675}, - {0x766d, 9652}, - {0x766e, 9653}, - {0x766f, 7063}, - {0x7670, 8751}, - {0x7671, 8549}, - {0x7672, 9655}, - {0x7674, 0}, - {0x7675, 1}, - {0x7676, 2}, - {0x7677, 3}, - {0x7678, 1864}, - {0x767a, 0}, - {0x767b, 1448}, - {0x767c, 7913}, - {0x767d, 994}, - {0x767e, 996}, - {0x7680, 0}, - {0x7681, 1}, - {0x7682, 4400}, - {0x7684, 1445}, - {0x7686, 2213}, - {0x7687, 2015}, - {0x7688, 6957}, - {0x768a, 0}, - {0x768b, 1753}, - {0x768d, 0}, - {0x768e, 6958}, - {0x7690, 0}, - {0x7691, 947}, - {0x7693, 6959}, - {0x7695, 0}, - {0x7696, 3743}, - {0x7698, 0}, - {0x7699, 6960}, - {0x769a, 7717}, - {0x769c, 0}, - {0x769d, 1}, - {0x769e, 2}, - {0x769f, 3}, - {0x76a0, 4}, - {0x76a1, 5}, - {0x76a2, 6}, - {0x76a3, 7}, - {0x76a4, 6961}, - {0x76a6, 0}, - {0x76a7, 1}, - {0x76a8, 2}, - {0x76a9, 3}, - {0x76aa, 4}, - {0x76ab, 5}, - {0x76ac, 6}, - {0x76ad, 7}, - {0x76ae, 3011}, - {0x76b0, 0}, - {0x76b1, 4580}, - {0x76b2, 7112}, - {0x76b4, 7113}, - {0x76b6, 0}, - {0x76b7, 1}, - {0x76b8, 9664}, - {0x76ba, 8858}, - {0x76bc, 0}, - {0x76bd, 1}, - {0x76be, 2}, - {0x76bf, 2808}, - {0x76c1, 0}, - {0x76c2, 4288}, - {0x76c4, 0}, - {0x76c5, 4560}, - {0x76c6, 2985}, - {0x76c8, 4244}, - {0x76ca, 4205}, - {0x76cc, 0}, - {0x76cd, 6795}, - {0x76ce, 966}, - {0x76cf, 4438}, - {0x76d0, 4087}, - {0x76d1, 2131}, - {0x76d2, 1927}, - {0x76d4, 2437}, - {0x76d6, 1730}, - {0x76d7, 1442}, - {0x76d8, 2957}, - {0x76da, 0}, - {0x76db, 3385}, - {0x76dd, 0}, - {0x76de, 8814}, - {0x76df, 2768}, - {0x76e1, 8125}, - {0x76e3, 8068}, - {0x76e4, 8370}, - {0x76e5, 6796}, - {0x76e7, 8259}, - {0x76e9, 0}, - {0x76ea, 1}, - {0x76eb, 2}, - {0x76ec, 3}, - {0x76ed, 4}, - {0x76ee, 2850}, - {0x76ef, 1505}, - {0x76f1, 6744}, - {0x76f2, 2729}, - {0x76f4, 4528}, - {0x76f6, 0}, - {0x76f7, 1}, - {0x76f8, 3917}, - {0x76f9, 6747}, - {0x76fb, 0}, - {0x76fc, 2959}, - {0x76fe, 1563}, - {0x7701, 3384}, - {0x7703, 0}, - {0x7704, 6745}, - {0x7706, 0}, - {0x7707, 6748}, - {0x7708, 6749}, - {0x7709, 2753}, - {0x770b, 2369}, - {0x770d, 6746}, - {0x770f, 0}, - {0x7710, 1}, - {0x7711, 2}, - {0x7712, 3}, - {0x7713, 4}, - {0x7714, 5}, - {0x7715, 6}, - {0x7716, 7}, - {0x7717, 8}, - {0x7718, 9}, - {0x7719, 6752}, - {0x771a, 6750}, - {0x771c, 0}, - {0x771d, 1}, - {0x771e, 2}, - {0x771f, 4487}, - {0x7720, 2788}, - {0x7722, 6751}, - {0x7724, 0}, - {0x7725, 1}, - {0x7726, 6754}, - {0x7728, 4420}, - {0x7729, 4044}, - {0x772b, 0}, - {0x772c, 1}, - {0x772d, 6753}, - {0x772f, 2773}, - {0x7731, 0}, - {0x7732, 1}, - {0x7733, 2}, - {0x7734, 3}, - {0x7735, 6755}, - {0x7736, 2433}, - {0x7737, 2331}, - {0x7738, 6756}, - {0x773a, 3658}, - {0x773c, 4100}, - {0x773e, 0}, - {0x773f, 1}, - {0x7740, 4642}, - {0x7741, 4503}, - {0x7743, 6760}, - {0x7745, 0}, - {0x7746, 1}, - {0x7747, 6759}, - {0x7749, 0}, - {0x774a, 1}, - {0x774b, 2}, - {0x774c, 3}, - {0x774d, 4}, - {0x774e, 5}, - {0x774f, 9860}, - {0x7750, 6757}, - {0x7751, 6758}, - {0x7753, 0}, - {0x7754, 1}, - {0x7755, 2}, - {0x7756, 3}, - {0x7757, 4}, - {0x7758, 5}, - {0x7759, 6}, - {0x775a, 6761}, - {0x775b, 2261}, - {0x775d, 0}, - {0x775e, 9455}, - {0x7760, 0}, - {0x7761, 3492}, - {0x7762, 6763}, - {0x7763, 1532}, - {0x7765, 6764}, - {0x7766, 2851}, - {0x7768, 6762}, - {0x776a, 0}, - {0x776b, 2223}, - {0x776c, 1166}, - {0x776e, 0}, - {0x776f, 1}, - {0x7770, 2}, - {0x7771, 3}, - {0x7772, 4}, - {0x7773, 5}, - {0x7774, 6}, - {0x7775, 7}, - {0x7776, 8}, - {0x7777, 9}, - {0x7778, 10}, - {0x7779, 1538}, - {0x777b, 0}, - {0x777c, 1}, - {0x777d, 6767}, - {0x777e, 4720}, - {0x777f, 6765}, - {0x7780, 6768}, - {0x7782, 0}, - {0x7783, 1}, - {0x7784, 2798}, - {0x7785, 1303}, - {0x7787, 0}, - {0x7788, 1}, - {0x7789, 2}, - {0x778a, 3}, - {0x778b, 4}, - {0x778c, 6769}, - {0x778d, 6766}, - {0x778e, 3878}, - {0x7790, 0}, - {0x7791, 6770}, - {0x7792, 2718}, - {0x7794, 0}, - {0x7795, 1}, - {0x7796, 2}, - {0x7797, 3}, - {0x7798, 9454}, - {0x779a, 0}, - {0x779b, 1}, - {0x779c, 2}, - {0x779d, 3}, - {0x779e, 8308}, - {0x779f, 6771}, - {0x77a0, 6772}, - {0x77a2, 5269}, - {0x77a4, 0}, - {0x77a5, 3026}, - {0x77a7, 3139}, - {0x77a9, 4596}, - {0x77aa, 1450}, - {0x77ac, 3495}, - {0x77ad, 9863}, - {0x77af, 0}, - {0x77b0, 6773}, - {0x77b2, 0}, - {0x77b3, 3676}, - {0x77b5, 6774}, - {0x77b7, 0}, - {0x77b8, 1}, - {0x77b9, 2}, - {0x77ba, 3}, - {0x77bb, 4433}, - {0x77bc, 9456}, - {0x77bd, 6775}, - {0x77bf, 7550}, - {0x77c1, 0}, - {0x77c2, 1}, - {0x77c3, 2}, - {0x77c4, 3}, - {0x77c5, 4}, - {0x77c6, 5}, - {0x77c7, 9869}, - {0x77c9, 0}, - {0x77ca, 1}, - {0x77cb, 2}, - {0x77cc, 3}, - {0x77cd, 5015}, - {0x77cf, 0}, - {0x77d0, 1}, - {0x77d1, 2}, - {0x77d2, 3}, - {0x77d3, 4}, - {0x77d4, 5}, - {0x77d5, 6}, - {0x77d6, 7}, - {0x77d7, 1318}, - {0x77d9, 0}, - {0x77da, 8864}, - {0x77db, 2737}, - {0x77dc, 7114}, - {0x77de, 0}, - {0x77df, 1}, - {0x77e0, 2}, - {0x77e1, 3}, - {0x77e2, 3407}, - {0x77e3, 4186}, - {0x77e5, 4521}, - {0x77e7, 6938}, - {0x77e9, 2311}, - {0x77eb, 2196}, - {0x77ec, 6939}, - {0x77ed, 1547}, - {0x77ee, 950}, - {0x77ef, 8107}, - {0x77f1, 0}, - {0x77f2, 1}, - {0x77f3, 3398}, - {0x77f5, 0}, - {0x77f6, 6690}, - {0x77f8, 6691}, - {0x77fa, 0}, - {0x77fb, 1}, - {0x77fc, 2}, - {0x77fd, 3848}, - {0x77fe, 1612}, - {0x77ff, 2432}, - {0x7800, 6692}, - {0x7801, 2706}, - {0x7802, 3305}, - {0x7804, 0}, - {0x7805, 1}, - {0x7806, 2}, - {0x7807, 3}, - {0x7808, 4}, - {0x7809, 6693}, - {0x780b, 0}, - {0x780c, 3093}, - {0x780d, 2368}, - {0x780f, 0}, - {0x7810, 1}, - {0x7811, 6696}, - {0x7812, 3001}, - {0x7814, 4089}, - {0x7816, 4614}, - {0x7817, 6694}, - {0x7818, 6695}, - {0x781a, 4107}, - {0x781c, 6699}, - {0x781d, 6700}, - {0x781f, 6704}, - {0x7821, 0}, - {0x7822, 1}, - {0x7823, 6708}, - {0x7825, 6706}, - {0x7826, 6714}, - {0x7827, 4489}, - {0x7829, 6709}, - {0x782b, 0}, - {0x782c, 6707}, - {0x782d, 6698}, - {0x782f, 0}, - {0x7830, 2986}, - {0x7832, 0}, - {0x7833, 1}, - {0x7834, 3045}, - {0x7836, 0}, - {0x7837, 3362}, - {0x7838, 4373}, - {0x7839, 6701}, - {0x783a, 6702}, - {0x783b, 6703}, - {0x783c, 6705}, - {0x783e, 2532}, - {0x7840, 1316}, - {0x7842, 0}, - {0x7843, 9896}, - {0x7845, 1857}, - {0x7847, 6716}, - {0x7849, 0}, - {0x784a, 1}, - {0x784b, 2}, - {0x784c, 6717}, - {0x784e, 6710}, - {0x7850, 6715}, - {0x7852, 3847}, - {0x7854, 0}, - {0x7855, 3499}, - {0x7856, 6712}, - {0x7857, 6713}, - {0x7859, 0}, - {0x785a, 1}, - {0x785b, 2}, - {0x785c, 3}, - {0x785d, 3938}, - {0x785f, 0}, - {0x7860, 1}, - {0x7861, 2}, - {0x7862, 3}, - {0x7863, 4}, - {0x7864, 9449}, - {0x7866, 0}, - {0x7867, 1}, - {0x7868, 9445}, - {0x786a, 6718}, - {0x786b, 2619}, - {0x786c, 4247}, - {0x786d, 6711}, - {0x786e, 3218}, - {0x786f, 8698}, - {0x7871, 0}, - {0x7872, 1}, - {0x7873, 2}, - {0x7874, 3}, - {0x7875, 4}, - {0x7876, 5}, - {0x7877, 2146}, - {0x7879, 0}, - {0x787a, 1}, - {0x787b, 2}, - {0x787c, 2993}, - {0x787e, 0}, - {0x787f, 1}, - {0x7880, 2}, - {0x7881, 3}, - {0x7882, 4}, - {0x7883, 5}, - {0x7884, 6}, - {0x7885, 7}, - {0x7886, 8}, - {0x7887, 6722}, - {0x7889, 1488}, - {0x788b, 0}, - {0x788c, 2652}, - {0x788d, 952}, - {0x788e, 3550}, - {0x7890, 0}, - {0x7891, 1047}, - {0x7893, 6720}, - {0x7895, 0}, - {0x7896, 1}, - {0x7897, 3740}, - {0x7898, 1475}, - {0x789a, 6721}, - {0x789b, 6719}, - {0x789c, 6723}, - {0x789e, 0}, - {0x789f, 1499}, - {0x78a1, 6724}, - {0x78a3, 6725}, - {0x78a5, 6728}, - {0x78a7, 1077}, - {0x78a9, 8520}, - {0x78ab, 0}, - {0x78ac, 1}, - {0x78ad, 9444}, - {0x78af, 0}, - {0x78b0, 2999}, - {0x78b1, 2145}, - {0x78b2, 6726}, - {0x78b3, 3599}, - {0x78b4, 1201}, - {0x78b6, 0}, - {0x78b7, 1}, - {0x78b8, 9446}, - {0x78b9, 6727}, - {0x78ba, 8439}, - {0x78bc, 8299}, - {0x78be, 2894}, - {0x78c0, 0}, - {0x78c1, 1352}, - {0x78c3, 0}, - {0x78c4, 1}, - {0x78c5, 1024}, - {0x78c7, 0}, - {0x78c8, 1}, - {0x78c9, 6731}, - {0x78ca, 2501}, - {0x78cb, 1387}, - {0x78cd, 0}, - {0x78ce, 1}, - {0x78cf, 2}, - {0x78d0, 2958}, - {0x78d2, 0}, - {0x78d3, 1}, - {0x78d4, 6729}, - {0x78d5, 2385}, - {0x78d7, 0}, - {0x78d8, 1}, - {0x78d9, 6730}, - {0x78da, 8871}, - {0x78dc, 0}, - {0x78dd, 1}, - {0x78de, 2}, - {0x78df, 3}, - {0x78e0, 4}, - {0x78e1, 5}, - {0x78e2, 6}, - {0x78e3, 9452}, - {0x78e5, 0}, - {0x78e6, 1}, - {0x78e7, 9451}, - {0x78e8, 2824}, - {0x78ea, 0}, - {0x78eb, 1}, - {0x78ec, 6732}, - {0x78ee, 0}, - {0x78ef, 9443}, - {0x78f1, 0}, - {0x78f2, 6733}, - {0x78f4, 6735}, - {0x78f6, 0}, - {0x78f7, 2592}, - {0x78f9, 0}, - {0x78fa, 2012}, - {0x78fc, 0}, - {0x78fd, 9450}, - {0x78ff, 0}, - {0x7901, 2185}, - {0x7903, 0}, - {0x7904, 1}, - {0x7905, 6734}, - {0x7907, 0}, - {0x7908, 1}, - {0x7909, 2}, - {0x790a, 3}, - {0x790b, 4}, - {0x790c, 5}, - {0x790d, 6}, - {0x790e, 7826}, - {0x7910, 0}, - {0x7911, 1}, - {0x7912, 2}, - {0x7913, 6736}, - {0x7915, 0}, - {0x7916, 1}, - {0x7917, 2}, - {0x7918, 3}, - {0x7919, 7719}, - {0x791b, 0}, - {0x791c, 1}, - {0x791d, 2}, - {0x791e, 6738}, - {0x7920, 0}, - {0x7921, 1}, - {0x7922, 2}, - {0x7923, 3}, - {0x7924, 6737}, - {0x7926, 8166}, - {0x7928, 0}, - {0x7929, 1}, - {0x792a, 9447}, - {0x792b, 8210}, - {0x792c, 7916}, - {0x792e, 0}, - {0x792f, 1}, - {0x7930, 2}, - {0x7931, 9448}, - {0x7933, 0}, - {0x7934, 6739}, - {0x7936, 0}, - {0x7937, 1}, - {0x7938, 2}, - {0x7939, 3}, - {0x793a, 3413}, - {0x793b, 6648}, - {0x793c, 2524}, - {0x793e, 3360}, - {0x7940, 6649}, - {0x7941, 3085}, - {0x7943, 0}, - {0x7944, 1}, - {0x7945, 2}, - {0x7946, 6650}, - {0x7948, 3084}, - {0x7949, 6651}, - {0x794b, 0}, - {0x794c, 1}, - {0x794d, 2}, - {0x794e, 3}, - {0x794f, 4}, - {0x7950, 5}, - {0x7951, 6}, - {0x7952, 7}, - {0x7953, 6654}, - {0x7955, 0}, - {0x7956, 4675}, - {0x7957, 6657}, - {0x7959, 0}, - {0x795a, 6655}, - {0x795b, 6652}, - {0x795c, 6653}, - {0x795d, 4608}, - {0x795e, 3370}, - {0x795f, 3555}, - {0x7960, 6658}, - {0x7962, 6656}, - {0x7964, 0}, - {0x7965, 3926}, - {0x7967, 6660}, - {0x7968, 3024}, - {0x796a, 0}, - {0x796b, 1}, - {0x796c, 2}, - {0x796d, 2099}, - {0x796f, 6659}, - {0x7971, 0}, - {0x7972, 1}, - {0x7973, 2}, - {0x7974, 3}, - {0x7975, 4}, - {0x7976, 5}, - {0x7977, 1436}, - {0x7978, 2059}, - {0x797a, 6661}, - {0x797c, 0}, - {0x797d, 1}, - {0x797e, 2}, - {0x797f, 3}, - {0x7980, 4875}, - {0x7981, 2252}, - {0x7983, 0}, - {0x7984, 2658}, - {0x7985, 6662}, - {0x7987, 0}, - {0x7988, 1}, - {0x7989, 2}, - {0x798a, 6663}, - {0x798c, 0}, - {0x798d, 8038}, - {0x798e, 9436}, - {0x798f, 1694}, - {0x7991, 0}, - {0x7992, 1}, - {0x7993, 2}, - {0x7994, 3}, - {0x7995, 4}, - {0x7996, 5}, - {0x7997, 6}, - {0x7998, 7}, - {0x7999, 8}, - {0x799a, 6664}, - {0x799c, 0}, - {0x799d, 1}, - {0x799e, 2}, - {0x799f, 3}, - {0x79a0, 4}, - {0x79a1, 5}, - {0x79a2, 6}, - {0x79a3, 7}, - {0x79a4, 8}, - {0x79a5, 9}, - {0x79a6, 9890}, - {0x79a7, 6665}, - {0x79a9, 0}, - {0x79aa, 9437}, - {0x79ac, 0}, - {0x79ad, 1}, - {0x79ae, 8206}, - {0x79b0, 9435}, - {0x79b1, 7864}, - {0x79b3, 6666}, - {0x79b5, 0}, - {0x79b6, 1}, - {0x79b7, 2}, - {0x79b8, 3}, - {0x79b9, 4306}, - {0x79ba, 4708}, - {0x79bb, 2518}, - {0x79bd, 3162}, - {0x79be, 1923}, - {0x79c0, 4014}, - {0x79c1, 3506}, - {0x79c3, 3691}, - {0x79c5, 0}, - {0x79c6, 1740}, - {0x79c8, 0}, - {0x79c9, 1125}, - {0x79cb, 3180}, - {0x79cd, 4565}, - {0x79cf, 0}, - {0x79d0, 1}, - {0x79d1, 2387}, - {0x79d2, 2800}, - {0x79d4, 0}, - {0x79d5, 6941}, - {0x79d7, 0}, - {0x79d8, 2781}, - {0x79da, 0}, - {0x79db, 1}, - {0x79dc, 2}, - {0x79dd, 3}, - {0x79de, 4}, - {0x79df, 4671}, - {0x79e1, 0}, - {0x79e2, 1}, - {0x79e3, 6943}, - {0x79e4, 1272}, - {0x79e6, 3157}, - {0x79e7, 4118}, - {0x79e9, 4551}, - {0x79eb, 6944}, - {0x79ed, 6942}, - {0x79ef, 2066}, - {0x79f0, 1259}, - {0x79f2, 0}, - {0x79f3, 1}, - {0x79f4, 2}, - {0x79f5, 3}, - {0x79f6, 4}, - {0x79f7, 5}, - {0x79f8, 2214}, - {0x79fa, 0}, - {0x79fb, 4173}, - {0x79fd, 2037}, - {0x79ff, 0}, - {0x7a00, 3854}, - {0x7a02, 6948}, - {0x7a03, 6947}, - {0x7a05, 0}, - {0x7a06, 6945}, - {0x7a08, 0}, - {0x7a09, 1}, - {0x7a0a, 2}, - {0x7a0b, 1265}, - {0x7a0d, 3341}, - {0x7a0e, 3493}, - {0x7a10, 0}, - {0x7a11, 1}, - {0x7a12, 2}, - {0x7a13, 3}, - {0x7a14, 6950}, - {0x7a16, 0}, - {0x7a17, 1001}, - {0x7a19, 0}, - {0x7a1a, 4552}, - {0x7a1c, 0}, - {0x7a1d, 1}, - {0x7a1e, 6949}, - {0x7a20, 1298}, - {0x7a22, 0}, - {0x7a23, 7567}, - {0x7a25, 0}, - {0x7a26, 1}, - {0x7a27, 2}, - {0x7a28, 3}, - {0x7a29, 4}, - {0x7a2a, 5}, - {0x7a2b, 6}, - {0x7a2c, 7}, - {0x7a2d, 8}, - {0x7a2e, 8853}, - {0x7a30, 0}, - {0x7a31, 7808}, - {0x7a33, 3799}, - {0x7a35, 0}, - {0x7a36, 1}, - {0x7a37, 6952}, - {0x7a39, 6951}, - {0x7a3b, 1439}, - {0x7a3c, 2125}, - {0x7a3d, 2065}, - {0x7a3f, 1760}, - {0x7a40, 9847}, - {0x7a42, 0}, - {0x7a43, 1}, - {0x7a44, 2}, - {0x7a45, 3}, - {0x7a46, 2853}, - {0x7a48, 0}, - {0x7a49, 1}, - {0x7a4a, 2}, - {0x7a4b, 3}, - {0x7a4c, 9764}, - {0x7a4d, 8041}, - {0x7a4e, 8747}, - {0x7a50, 0}, - {0x7a51, 6953}, - {0x7a53, 0}, - {0x7a54, 1}, - {0x7a55, 2}, - {0x7a56, 3}, - {0x7a57, 3552}, - {0x7a59, 0}, - {0x7a5a, 1}, - {0x7a5b, 2}, - {0x7a5c, 3}, - {0x7a5d, 4}, - {0x7a5e, 5}, - {0x7a5f, 6}, - {0x7a60, 7}, - {0x7a61, 9599}, - {0x7a62, 8027}, - {0x7a64, 0}, - {0x7a65, 1}, - {0x7a66, 2}, - {0x7a67, 3}, - {0x7a68, 4}, - {0x7a69, 8603}, - {0x7a6b, 9853}, - {0x7a6d, 0}, - {0x7a6e, 1}, - {0x7a6f, 2}, - {0x7a70, 6956}, - {0x7a72, 0}, - {0x7a73, 1}, - {0x7a74, 4049}, - {0x7a76, 2286}, - {0x7a77, 3179}, - {0x7a78, 7066}, - {0x7a79, 7067}, - {0x7a7a, 2402}, - {0x7a7c, 0}, - {0x7a7d, 1}, - {0x7a7e, 2}, - {0x7a7f, 1324}, - {0x7a80, 7068}, - {0x7a81, 3692}, - {0x7a83, 3153}, - {0x7a84, 4430}, - {0x7a86, 7069}, - {0x7a88, 7070}, - {0x7a8a, 0}, - {0x7a8b, 1}, - {0x7a8c, 2}, - {0x7a8d, 3148}, - {0x7a8f, 0}, - {0x7a90, 1}, - {0x7a91, 4139}, - {0x7a92, 4558}, - {0x7a94, 0}, - {0x7a95, 7071}, - {0x7a96, 2210}, - {0x7a97, 1331}, - {0x7a98, 2284}, - {0x7a9a, 0}, - {0x7a9b, 1}, - {0x7a9c, 1375}, - {0x7a9d, 3808}, - {0x7a9f, 2412}, - {0x7aa0, 7073}, - {0x7aa2, 0}, - {0x7aa3, 1}, - {0x7aa4, 2}, - {0x7aa5, 2439}, - {0x7aa6, 7072}, - {0x7aa8, 7075}, - {0x7aa9, 8608}, - {0x7aaa, 8582}, - {0x7aac, 7074}, - {0x7aad, 7076}, - {0x7aae, 8429}, - {0x7ab0, 0}, - {0x7ab1, 1}, - {0x7ab2, 2}, - {0x7ab3, 7077}, - {0x7ab5, 0}, - {0x7ab6, 9657}, - {0x7ab8, 0}, - {0x7ab9, 1}, - {0x7aba, 8170}, - {0x7abc, 0}, - {0x7abd, 1}, - {0x7abe, 2}, - {0x7abf, 2631}, - {0x7ac1, 0}, - {0x7ac2, 1}, - {0x7ac3, 2}, - {0x7ac4, 7844}, - {0x7ac5, 8417}, - {0x7ac7, 9656}, - {0x7ac8, 8800}, - {0x7aca, 8418}, - {0x7acb, 2539}, - {0x7acd, 0}, - {0x7ace, 1}, - {0x7acf, 2}, - {0x7ad0, 3}, - {0x7ad1, 4}, - {0x7ad2, 5}, - {0x7ad3, 6}, - {0x7ad4, 7}, - {0x7ad5, 8}, - {0x7ad6, 3473}, - {0x7ad8, 0}, - {0x7ad9, 4447}, - {0x7adb, 0}, - {0x7adc, 1}, - {0x7add, 2}, - {0x7ade, 2281}, - {0x7adf, 2280}, - {0x7ae0, 4451}, - {0x7ae2, 0}, - {0x7ae3, 2351}, - {0x7ae5, 3680}, - {0x7ae6, 7065}, - {0x7ae8, 0}, - {0x7ae9, 1}, - {0x7aea, 8513}, - {0x7aec, 0}, - {0x7aed, 2224}, - {0x7aef, 1546}, - {0x7af1, 0}, - {0x7af2, 1}, - {0x7af3, 2}, - {0x7af4, 3}, - {0x7af5, 4}, - {0x7af6, 8135}, - {0x7af8, 0}, - {0x7af9, 4592}, - {0x7afa, 7267}, - {0x7afc, 0}, - {0x7afd, 7268}, - {0x7aff, 1736}, - {0x7b01, 0}, - {0x7b02, 1}, - {0x7b03, 7270}, - {0x7b04, 7271}, - {0x7b06, 981}, - {0x7b08, 7269}, - {0x7b0a, 7273}, - {0x7b0b, 3558}, - {0x7b0d, 0}, - {0x7b0e, 1}, - {0x7b0f, 7275}, - {0x7b11, 3953}, - {0x7b13, 0}, - {0x7b14, 1075}, - {0x7b15, 7272}, - {0x7b17, 0}, - {0x7b18, 1}, - {0x7b19, 7279}, - {0x7b1b, 1458}, - {0x7b1d, 0}, - {0x7b1e, 7287}, - {0x7b20, 7282}, - {0x7b22, 0}, - {0x7b23, 1}, - {0x7b24, 7284}, - {0x7b25, 7283}, - {0x7b26, 1688}, - {0x7b28, 1064}, - {0x7b2a, 7278}, - {0x7b2b, 7274}, - {0x7b2c, 1467}, - {0x7b2e, 7280}, - {0x7b30, 0}, - {0x7b31, 7281}, - {0x7b33, 7285}, - {0x7b35, 0}, - {0x7b36, 1}, - {0x7b37, 2}, - {0x7b38, 7277}, - {0x7b3a, 2134}, - {0x7b3c, 2630}, - {0x7b3e, 7286}, - {0x7b40, 0}, - {0x7b41, 1}, - {0x7b42, 2}, - {0x7b43, 3}, - {0x7b44, 4}, - {0x7b45, 7290}, - {0x7b46, 7745}, - {0x7b47, 7276}, - {0x7b49, 1449}, - {0x7b4b, 2239}, - {0x7b4c, 7292}, - {0x7b4e, 0}, - {0x7b4f, 1601}, - {0x7b50, 2429}, - {0x7b51, 4605}, - {0x7b52, 3683}, - {0x7b54, 1395}, - {0x7b56, 1190}, - {0x7b58, 7288}, - {0x7b5a, 7289}, - {0x7b5b, 3313}, - {0x7b5d, 7293}, - {0x7b5f, 0}, - {0x7b60, 7294}, - {0x7b62, 7297}, - {0x7b64, 0}, - {0x7b65, 1}, - {0x7b66, 2}, - {0x7b67, 9700}, - {0x7b69, 0}, - {0x7b6a, 1}, - {0x7b6b, 2}, - {0x7b6c, 3}, - {0x7b6d, 4}, - {0x7b6e, 7295}, - {0x7b70, 0}, - {0x7b71, 7299}, - {0x7b72, 7298}, - {0x7b74, 0}, - {0x7b75, 7291}, - {0x7b77, 2423}, - {0x7b79, 1300}, - {0x7b7b, 7296}, - {0x7b7d, 0}, - {0x7b7e, 3110}, - {0x7b80, 2149}, - {0x7b82, 0}, - {0x7b83, 1}, - {0x7b84, 2}, - {0x7b85, 7307}, - {0x7b87, 0}, - {0x7b88, 1}, - {0x7b89, 2}, - {0x7b8a, 3}, - {0x7b8b, 8070}, - {0x7b8d, 1816}, - {0x7b8f, 0}, - {0x7b90, 7300}, - {0x7b92, 0}, - {0x7b93, 1}, - {0x7b94, 1140}, - {0x7b95, 2067}, - {0x7b97, 3544}, - {0x7b99, 0}, - {0x7b9a, 1}, - {0x7b9b, 2}, - {0x7b9c, 7309}, - {0x7b9d, 7305}, - {0x7b9f, 0}, - {0x7ba0, 1}, - {0x7ba1, 1845}, - {0x7ba2, 7310}, - {0x7ba4, 0}, - {0x7ba5, 1}, - {0x7ba6, 7301}, - {0x7ba7, 7302}, - {0x7ba8, 7306}, - {0x7ba9, 2696}, - {0x7baa, 7308}, - {0x7bab, 7311}, - {0x7bac, 7304}, - {0x7bad, 2160}, - {0x7baf, 0}, - {0x7bb0, 1}, - {0x7bb1, 3921}, - {0x7bb3, 0}, - {0x7bb4, 7312}, - {0x7bb6, 0}, - {0x7bb7, 1}, - {0x7bb8, 7303}, - {0x7bba, 0}, - {0x7bbb, 1}, - {0x7bbc, 2}, - {0x7bbd, 3}, - {0x7bbe, 4}, - {0x7bbf, 5}, - {0x7bc0, 8115}, - {0x7bc1, 7314}, - {0x7bc3, 0}, - {0x7bc4, 7919}, - {0x7bc6, 4618}, - {0x7bc7, 3017}, - {0x7bc9, 8868}, - {0x7bcb, 9704}, - {0x7bcc, 7315}, - {0x7bce, 0}, - {0x7bcf, 1}, - {0x7bd0, 2}, - {0x7bd1, 7313}, - {0x7bd3, 2639}, - {0x7bd5, 0}, - {0x7bd6, 1}, - {0x7bd7, 2}, - {0x7bd8, 3}, - {0x7bd9, 1752}, - {0x7bda, 7317}, - {0x7bdc, 0}, - {0x7bdd, 7316}, - {0x7bdf, 0}, - {0x7be0, 1}, - {0x7be1, 1374}, - {0x7be3, 0}, - {0x7be4, 9699}, - {0x7be5, 7318}, - {0x7be6, 7319}, - {0x7be8, 0}, - {0x7be9, 8465}, - {0x7bea, 7320}, - {0x7bec, 0}, - {0x7bed, 1}, - {0x7bee, 2469}, - {0x7bf0, 0}, - {0x7bf1, 2516}, - {0x7bf3, 9702}, - {0x7bf5, 0}, - {0x7bf6, 1}, - {0x7bf7, 2994}, - {0x7bf9, 0}, - {0x7bfa, 1}, - {0x7bfb, 2}, - {0x7bfc, 7323}, - {0x7bfe, 7322}, - {0x7c00, 9703}, - {0x7c02, 0}, - {0x7c03, 1}, - {0x7c04, 2}, - {0x7c05, 3}, - {0x7c06, 4}, - {0x7c07, 1371}, - {0x7c09, 0}, - {0x7c0a, 1}, - {0x7c0b, 7326}, - {0x7c0c, 7321}, - {0x7c0d, 8257}, - {0x7c0f, 7324}, - {0x7c11, 0}, - {0x7c12, 1}, - {0x7c13, 2}, - {0x7c14, 3}, - {0x7c15, 4}, - {0x7c16, 7325}, - {0x7c18, 0}, - {0x7c19, 1}, - {0x7c1a, 2}, - {0x7c1b, 3}, - {0x7c1c, 4}, - {0x7c1d, 5}, - {0x7c1e, 9706}, - {0x7c1f, 7327}, - {0x7c21, 8079}, - {0x7c23, 9708}, - {0x7c25, 0}, - {0x7c26, 7329}, - {0x7c27, 2014}, - {0x7c29, 0}, - {0x7c2a, 7328}, - {0x7c2b, 9707}, - {0x7c2d, 0}, - {0x7c2e, 1}, - {0x7c2f, 2}, - {0x7c30, 3}, - {0x7c31, 4}, - {0x7c32, 5}, - {0x7c33, 6}, - {0x7c34, 7}, - {0x7c35, 8}, - {0x7c36, 9}, - {0x7c37, 10}, - {0x7c38, 7330}, - {0x7c3a, 0}, - {0x7c3b, 1}, - {0x7c3c, 2}, - {0x7c3d, 8400}, - {0x7c3e, 8221}, - {0x7c3f, 1157}, - {0x7c40, 7332}, - {0x7c41, 7331}, - {0x7c43, 8183}, - {0x7c45, 0}, - {0x7c46, 1}, - {0x7c47, 2}, - {0x7c48, 3}, - {0x7c49, 4}, - {0x7c4a, 5}, - {0x7c4b, 6}, - {0x7c4c, 7821}, - {0x7c4d, 2081}, - {0x7c4f, 0}, - {0x7c50, 1}, - {0x7c51, 2}, - {0x7c52, 3}, - {0x7c53, 4}, - {0x7c54, 5}, - {0x7c55, 6}, - {0x7c56, 7}, - {0x7c57, 8}, - {0x7c58, 9}, - {0x7c59, 10}, - {0x7c5a, 11}, - {0x7c5b, 12}, - {0x7c5c, 9705}, - {0x7c5e, 0}, - {0x7c5f, 9710}, - {0x7c60, 8250}, - {0x7c62, 0}, - {0x7c63, 1}, - {0x7c64, 9875}, - {0x7c66, 0}, - {0x7c67, 1}, - {0x7c68, 2}, - {0x7c69, 9701}, - {0x7c6a, 9709}, - {0x7c6c, 8201}, - {0x7c6e, 8293}, - {0x7c70, 0}, - {0x7c71, 1}, - {0x7c72, 9891}, - {0x7c73, 2780}, - {0x7c74, 4853}, - {0x7c76, 0}, - {0x7c77, 1}, - {0x7c78, 2}, - {0x7c79, 3}, - {0x7c7a, 4}, - {0x7c7b, 2507}, - {0x7c7c, 7370}, - {0x7c7d, 4654}, - {0x7c7f, 0}, - {0x7c80, 1}, - {0x7c81, 2}, - {0x7c82, 3}, - {0x7c83, 4}, - {0x7c84, 5}, - {0x7c85, 6}, - {0x7c86, 7}, - {0x7c87, 8}, - {0x7c88, 9}, - {0x7c89, 1656}, - {0x7c8b, 0}, - {0x7c8c, 1}, - {0x7c8d, 2}, - {0x7c8e, 3}, - {0x7c8f, 4}, - {0x7c90, 5}, - {0x7c91, 7372}, - {0x7c92, 2540}, - {0x7c94, 0}, - {0x7c95, 3048}, - {0x7c97, 1369}, - {0x7c98, 4436}, - {0x7c9a, 0}, - {0x7c9b, 1}, - {0x7c9c, 7374}, - {0x7c9d, 7373}, - {0x7c9e, 7375}, - {0x7c9f, 3535}, - {0x7ca1, 0}, - {0x7ca2, 7376}, - {0x7ca4, 4356}, - {0x7ca5, 4575}, - {0x7ca7, 0}, - {0x7ca8, 1}, - {0x7ca9, 2}, - {0x7caa, 1661}, - {0x7cac, 0}, - {0x7cad, 1}, - {0x7cae, 2561}, - {0x7cb0, 0}, - {0x7cb1, 2564}, - {0x7cb2, 7377}, - {0x7cb3, 2267}, - {0x7cb5, 0}, - {0x7cb6, 1}, - {0x7cb7, 2}, - {0x7cb8, 3}, - {0x7cb9, 1381}, - {0x7cbb, 0}, - {0x7cbc, 7378}, - {0x7cbd, 7379}, - {0x7cbe, 2266}, - {0x7cc0, 0}, - {0x7cc1, 7380}, - {0x7cc3, 0}, - {0x7cc4, 1}, - {0x7cc5, 7385}, - {0x7cc7, 7381}, - {0x7cc8, 7384}, - {0x7cca, 1972}, - {0x7ccc, 7382}, - {0x7ccd, 7383}, - {0x7ccf, 0}, - {0x7cd0, 1}, - {0x7cd1, 2}, - {0x7cd2, 3}, - {0x7cd3, 4}, - {0x7cd4, 5}, - {0x7cd5, 1757}, - {0x7cd6, 3610}, - {0x7cd7, 7386}, - {0x7cd9, 1185}, - {0x7cdb, 0}, - {0x7cdc, 2776}, - {0x7cdd, 9717}, - {0x7cde, 7932}, - {0x7cdf, 4390}, - {0x7ce0, 2372}, - {0x7ce2, 0}, - {0x7ce3, 1}, - {0x7ce4, 2}, - {0x7ce5, 3}, - {0x7ce6, 4}, - {0x7ce7, 8228}, - {0x7ce8, 7387}, - {0x7cea, 0}, - {0x7ceb, 1}, - {0x7cec, 2}, - {0x7ced, 3}, - {0x7cee, 4}, - {0x7cef, 2933}, - {0x7cf0, 9883}, - {0x7cf2, 9715}, - {0x7cf4, 8921}, - {0x7cf6, 9716}, - {0x7cf8, 7399}, - {0x7cf9, 9243}, - {0x7cfb, 3874}, - {0x7cfd, 0}, - {0x7cfe, 8136}, - {0x7d00, 8059}, - {0x7d02, 9245}, - {0x7d04, 8780}, - {0x7d05, 8008}, - {0x7d06, 9244}, - {0x7d07, 9246}, - {0x7d08, 9247}, - {0x7d09, 8447}, - {0x7d0a, 3800}, - {0x7d0b, 8602}, - {0x7d0d, 8337}, - {0x7d0f, 0}, - {0x7d10, 8359}, - {0x7d12, 0}, - {0x7d13, 9251}, - {0x7d14, 7835}, - {0x7d15, 9250}, - {0x7d17, 8464}, - {0x7d19, 8845}, - {0x7d1a, 8049}, - {0x7d1b, 7928}, - {0x7d1c, 9249}, - {0x7d1e, 0}, - {0x7d1f, 1}, - {0x7d20, 3533}, - {0x7d21, 7923}, - {0x7d22, 3564}, - {0x7d24, 0}, - {0x7d25, 1}, - {0x7d26, 2}, - {0x7d27, 2245}, - {0x7d29, 0}, - {0x7d2a, 1}, - {0x7d2b, 4652}, - {0x7d2d, 0}, - {0x7d2e, 1}, - {0x7d2f, 2502}, - {0x7d30, 8625}, - {0x7d31, 9254}, - {0x7d32, 9253}, - {0x7d33, 8480}, - {0x7d35, 0}, - {0x7d36, 1}, - {0x7d37, 2}, - {0x7d38, 3}, - {0x7d39, 8474}, - {0x7d3a, 9252}, - {0x7d3c, 9256}, - {0x7d3e, 0}, - {0x7d3f, 9258}, - {0x7d40, 9257}, - {0x7d42, 8852}, - {0x7d44, 8894}, - {0x7d46, 7729}, - {0x7d48, 0}, - {0x7d49, 1}, - {0x7d4a, 2}, - {0x7d4b, 3}, - {0x7d4c, 4}, - {0x7d4d, 5}, - {0x7d4e, 9260}, - {0x7d50, 8117}, - {0x7d52, 0}, - {0x7d53, 1}, - {0x7d54, 2}, - {0x7d55, 3}, - {0x7d56, 4}, - {0x7d57, 5}, - {0x7d58, 6}, - {0x7d59, 7}, - {0x7d5a, 8}, - {0x7d5b, 9}, - {0x7d5c, 10}, - {0x7d5d, 9259}, - {0x7d5e, 8111}, - {0x7d60, 0}, - {0x7d61, 8296}, - {0x7d62, 8676}, - {0x7d64, 0}, - {0x7d65, 1}, - {0x7d66, 7969}, - {0x7d68, 8449}, - {0x7d6a, 0}, - {0x7d6b, 1}, - {0x7d6c, 2}, - {0x7d6d, 3}, - {0x7d6e, 4032}, - {0x7d70, 0}, - {0x7d71, 8572}, - {0x7d72, 8522}, - {0x7d73, 9261}, - {0x7d75, 0}, - {0x7d76, 8148}, - {0x7d77, 7400}, - {0x7d79, 8145}, - {0x7d7b, 0}, - {0x7d7c, 1}, - {0x7d7d, 2}, - {0x7d7e, 3}, - {0x7d7f, 4}, - {0x7d80, 5}, - {0x7d81, 7731}, - {0x7d83, 9263}, - {0x7d85, 0}, - {0x7d86, 9262}, - {0x7d88, 9264}, - {0x7d89, 8667}, - {0x7d8b, 0}, - {0x7d8c, 1}, - {0x7d8d, 2}, - {0x7d8e, 3}, - {0x7d8f, 8536}, - {0x7d91, 0}, - {0x7d92, 1}, - {0x7d93, 8130}, - {0x7d95, 0}, - {0x7d96, 1}, - {0x7d97, 2}, - {0x7d98, 3}, - {0x7d99, 4}, - {0x7d9a, 5}, - {0x7d9b, 6}, - {0x7d9c, 8889}, - {0x7d9e, 9270}, - {0x7da0, 0}, - {0x7da1, 1}, - {0x7da2, 7822}, - {0x7da3, 9273}, - {0x7da5, 0}, - {0x7da6, 7401}, - {0x7da8, 0}, - {0x7da9, 1}, - {0x7daa, 2}, - {0x7dab, 8645}, - {0x7dac, 9271}, - {0x7dad, 8594}, - {0x7dae, 7402}, - {0x7db0, 9274}, - {0x7db1, 7961}, - {0x7db2, 8588}, - {0x7db3, 7744}, - {0x7db4, 8883}, - {0x7db6, 0}, - {0x7db7, 1}, - {0x7db8, 8287}, - {0x7db9, 9272}, - {0x7dba, 9266}, - {0x7dbb, 8820}, - {0x7dbd, 7836}, - {0x7dbe, 9265}, - {0x7dbf, 8325}, - {0x7dc1, 0}, - {0x7dc2, 1}, - {0x7dc3, 2}, - {0x7dc4, 9269}, - {0x7dc6, 0}, - {0x7dc7, 9275}, - {0x7dc9, 0}, - {0x7dca, 8119}, - {0x7dcb, 9267}, - {0x7dcd, 0}, - {0x7dce, 1}, - {0x7dcf, 2}, - {0x7dd0, 3}, - {0x7dd1, 8276}, - {0x7dd2, 8670}, - {0x7dd4, 9268}, - {0x7dd6, 0}, - {0x7dd7, 9277}, - {0x7dd8, 8073}, - {0x7dd9, 9276}, - {0x7ddb, 0}, - {0x7ddc, 1}, - {0x7ddd, 8046}, - {0x7dde, 7896}, - {0x7de0, 7871}, - {0x7de1, 9285}, - {0x7de3, 8777}, - {0x7de5, 0}, - {0x7de6, 9281}, - {0x7de8, 7751}, - {0x7de9, 8022}, - {0x7deb, 0}, - {0x7dec, 8326}, - {0x7dee, 0}, - {0x7def, 8598}, - {0x7df1, 9283}, - {0x7df2, 9279}, - {0x7df4, 8227}, - {0x7df6, 9282}, - {0x7df8, 0}, - {0x7df9, 9278}, - {0x7dfb, 9894}, - {0x7dfd, 0}, - {0x7dfe, 1}, - {0x7dff, 2}, - {0x7e01, 0}, - {0x7e02, 1}, - {0x7e03, 2}, - {0x7e04, 3}, - {0x7e05, 4}, - {0x7e06, 5}, - {0x7e07, 6}, - {0x7e08, 9038}, - {0x7e09, 9286}, - {0x7e0a, 9291}, - {0x7e0b, 9284}, - {0x7e0d, 0}, - {0x7e0e, 1}, - {0x7e0f, 2}, - {0x7e10, 9255}, - {0x7e11, 9292}, - {0x7e13, 0}, - {0x7e14, 1}, - {0x7e15, 2}, - {0x7e16, 3}, - {0x7e17, 4}, - {0x7e18, 5}, - {0x7e19, 6}, - {0x7e1a, 7}, - {0x7e1b, 7951}, - {0x7e1d, 9287}, - {0x7e1e, 9289}, - {0x7e1f, 9288}, - {0x7e21, 0}, - {0x7e22, 1}, - {0x7e23, 8642}, - {0x7e25, 0}, - {0x7e26, 1}, - {0x7e27, 8558}, - {0x7e29, 0}, - {0x7e2a, 1}, - {0x7e2b, 7939}, - {0x7e2d, 9290}, - {0x7e2e, 8540}, - {0x7e30, 0}, - {0x7e31, 8891}, - {0x7e32, 9296}, - {0x7e34, 9876}, - {0x7e35, 9295}, - {0x7e36, 9718}, - {0x7e37, 8273}, - {0x7e39, 9294}, - {0x7e3b, 7675}, - {0x7e3d, 8890}, - {0x7e3e, 8045}, - {0x7e40, 0}, - {0x7e41, 1614}, - {0x7e43, 0}, - {0x7e44, 1}, - {0x7e45, 9298}, - {0x7e46, 9297}, - {0x7e47, 7403}, - {0x7e49, 0}, - {0x7e4a, 1}, - {0x7e4b, 2}, - {0x7e4c, 3}, - {0x7e4d, 4}, - {0x7e4e, 5}, - {0x7e4f, 6}, - {0x7e50, 7}, - {0x7e51, 8}, - {0x7e52, 9301}, - {0x7e54, 8841}, - {0x7e55, 8470}, - {0x7e57, 0}, - {0x7e58, 1}, - {0x7e59, 2}, - {0x7e5a, 9300}, - {0x7e5c, 0}, - {0x7e5d, 1}, - {0x7e5e, 8443}, - {0x7e60, 0}, - {0x7e61, 1}, - {0x7e62, 9280}, - {0x7e64, 0}, - {0x7e65, 1}, - {0x7e66, 2}, - {0x7e67, 3}, - {0x7e68, 4}, - {0x7e69, 8486}, - {0x7e6a, 8033}, - {0x7e6b, 9885}, - {0x7e6d, 8074}, - {0x7e6e, 9302}, - {0x7e6f, 9305}, - {0x7e70, 9304}, - {0x7e72, 0}, - {0x7e73, 8110}, - {0x7e75, 0}, - {0x7e76, 1}, - {0x7e77, 2}, - {0x7e78, 3}, - {0x7e79, 8730}, - {0x7e7b, 0}, - {0x7e7c, 8058}, - {0x7e7d, 9293}, - {0x7e7e, 9303}, - {0x7e80, 0}, - {0x7e81, 1}, - {0x7e82, 4680}, - {0x7e84, 0}, - {0x7e85, 1}, - {0x7e86, 2}, - {0x7e87, 3}, - {0x7e88, 9299}, - {0x7e8a, 9248}, - {0x7e8c, 8671}, - {0x7e8d, 9861}, - {0x7e8f, 7790}, - {0x7e91, 0}, - {0x7e92, 1}, - {0x7e93, 8740}, - {0x7e94, 9840}, - {0x7e96, 8634}, - {0x7e98, 9306}, - {0x7e9a, 0}, - {0x7e9b, 7404}, - {0x7e9c, 8191}, - {0x7e9e, 0}, - {0x7e9f, 6099}, - {0x7ea0, 2287}, - {0x7ea1, 6100}, - {0x7ea2, 1955}, - {0x7ea3, 6101}, - {0x7ea4, 3896}, - {0x7ea5, 6102}, - {0x7ea6, 4351}, - {0x7ea7, 2089}, - {0x7ea8, 6103}, - {0x7ea9, 6104}, - {0x7eaa, 2112}, - {0x7eab, 3245}, - {0x7eac, 3778}, - {0x7ead, 6105}, - {0x7eaf, 1346}, - {0x7eb0, 6106}, - {0x7eb1, 3309}, - {0x7eb2, 1748}, - {0x7eb3, 2860}, - {0x7eb5, 4666}, - {0x7eb6, 2689}, - {0x7eb7, 1652}, - {0x7eb8, 4540}, - {0x7eb9, 3797}, - {0x7eba, 1633}, - {0x7ebc, 0}, - {0x7ebd, 2919}, - {0x7ebe, 6107}, - {0x7ebf, 3916}, - {0x7ec0, 6108}, - {0x7ec1, 6109}, - {0x7ec2, 6110}, - {0x7ec3, 2560}, - {0x7ec4, 4678}, - {0x7ec5, 3369}, - {0x7ec6, 3877}, - {0x7ec7, 4526}, - {0x7ec8, 4564}, - {0x7ec9, 6111}, - {0x7eca, 1016}, - {0x7ecb, 6112}, - {0x7ecc, 6113}, - {0x7ecd, 3349}, - {0x7ece, 4214}, - {0x7ecf, 2268}, - {0x7ed0, 6114}, - {0x7ed1, 1022}, - {0x7ed2, 3257}, - {0x7ed3, 2226}, - {0x7ed4, 6115}, - {0x7ed5, 3233}, - {0x7ed7, 6116}, - {0x7ed8, 2043}, - {0x7ed9, 1779}, - {0x7eda, 4045}, - {0x7edb, 6117}, - {0x7edc, 2702}, - {0x7edd, 2343}, - {0x7ede, 2203}, - {0x7edf, 3684}, - {0x7ee0, 6118}, - {0x7ee1, 6119}, - {0x7ee2, 2333}, - {0x7ee3, 4016}, - {0x7ee5, 3548}, - {0x7ee6, 3619}, - {0x7ee7, 2111}, - {0x7ee8, 6120}, - {0x7ee9, 2075}, - {0x7eea, 4034}, - {0x7eeb, 6121}, - {0x7eed, 4035}, - {0x7eee, 6122}, - {0x7eef, 6123}, - {0x7ef0, 1349}, - {0x7ef1, 6124}, - {0x7ef2, 6125}, - {0x7ef3, 3383}, - {0x7ef4, 3771}, - {0x7ef5, 2789}, - {0x7ef6, 6127}, - {0x7ef7, 1066}, - {0x7ef8, 1302}, - {0x7efa, 6128}, - {0x7efb, 6129}, - {0x7efc, 4664}, - {0x7efd, 4449}, - {0x7efe, 6130}, - {0x7eff, 2675}, - {0x7f00, 4631}, - {0x7f01, 6131}, - {0x7f02, 6132}, - {0x7f03, 6133}, - {0x7f04, 2141}, - {0x7f05, 2794}, - {0x7f06, 2477}, - {0x7f07, 6134}, - {0x7f08, 6135}, - {0x7f09, 2076}, - {0x7f0b, 6136}, - {0x7f0c, 6137}, - {0x7f0d, 6126}, - {0x7f0e, 1551}, - {0x7f0f, 6138}, - {0x7f11, 6139}, - {0x7f12, 6140}, - {0x7f13, 1999}, - {0x7f14, 1471}, - {0x7f15, 2669}, - {0x7f16, 1097}, - {0x7f17, 6141}, - {0x7f18, 4344}, - {0x7f19, 6142}, - {0x7f1a, 1722}, - {0x7f1b, 6144}, - {0x7f1c, 6143}, - {0x7f1d, 1673}, - {0x7f1f, 6145}, - {0x7f20, 1215}, - {0x7f21, 6146}, - {0x7f22, 6147}, - {0x7f23, 6148}, - {0x7f24, 6149}, - {0x7f25, 6150}, - {0x7f26, 6151}, - {0x7f27, 6152}, - {0x7f28, 4236}, - {0x7f29, 3562}, - {0x7f2a, 6153}, - {0x7f2b, 6154}, - {0x7f2c, 6155}, - {0x7f2d, 6156}, - {0x7f2e, 3330}, - {0x7f2f, 6157}, - {0x7f30, 6158}, - {0x7f31, 6159}, - {0x7f32, 6160}, - {0x7f33, 6161}, - {0x7f34, 2202}, - {0x7f35, 6162}, - {0x7f36, 7262}, - {0x7f38, 1746}, - {0x7f3a, 3212}, - {0x7f3c, 0}, - {0x7f3d, 1}, - {0x7f3e, 2}, - {0x7f3f, 3}, - {0x7f40, 4}, - {0x7f41, 5}, - {0x7f42, 7263}, - {0x7f44, 7264}, - {0x7f45, 7265}, - {0x7f47, 0}, - {0x7f48, 1}, - {0x7f49, 2}, - {0x7f4a, 3}, - {0x7f4b, 4}, - {0x7f4c, 9698}, - {0x7f4e, 9882}, - {0x7f50, 1847}, - {0x7f51, 3753}, - {0x7f53, 0}, - {0x7f54, 4766}, - {0x7f55, 1896}, - {0x7f57, 2693}, - {0x7f58, 6785}, - {0x7f5a, 1600}, - {0x7f5c, 0}, - {0x7f5d, 1}, - {0x7f5e, 2}, - {0x7f5f, 6787}, - {0x7f61, 6786}, - {0x7f62, 992}, - {0x7f64, 0}, - {0x7f65, 1}, - {0x7f66, 2}, - {0x7f67, 3}, - {0x7f68, 6789}, - {0x7f69, 4471}, - {0x7f6a, 4684}, - {0x7f6c, 0}, - {0x7f6d, 1}, - {0x7f6e, 4546}, - {0x7f70, 7914}, - {0x7f71, 6791}, - {0x7f72, 3463}, - {0x7f74, 6790}, - {0x7f76, 0}, - {0x7f77, 7724}, - {0x7f79, 6792}, - {0x7f7b, 0}, - {0x7f7c, 1}, - {0x7f7d, 2}, - {0x7f7e, 6794}, - {0x7f80, 0}, - {0x7f81, 6793}, - {0x7f83, 0}, - {0x7f84, 1}, - {0x7f85, 8290}, - {0x7f86, 9457}, - {0x7f88, 9458}, - {0x7f8a, 4123}, - {0x7f8c, 3129}, - {0x7f8e, 2757}, - {0x7f90, 0}, - {0x7f91, 1}, - {0x7f92, 2}, - {0x7f93, 3}, - {0x7f94, 1756}, - {0x7f96, 0}, - {0x7f97, 1}, - {0x7f98, 2}, - {0x7f99, 3}, - {0x7f9a, 2608}, - {0x7f9c, 0}, - {0x7f9d, 7364}, - {0x7f9e, 4010}, - {0x7f9f, 7365}, - {0x7fa1, 3912}, - {0x7fa3, 0}, - {0x7fa4, 3221}, - {0x7fa5, 9714}, - {0x7fa7, 7366}, - {0x7fa9, 8725}, - {0x7fab, 0}, - {0x7fac, 1}, - {0x7fad, 2}, - {0x7fae, 3}, - {0x7faf, 7367}, - {0x7fb0, 7368}, - {0x7fb2, 7369}, - {0x7fb4, 0}, - {0x7fb5, 1}, - {0x7fb6, 2}, - {0x7fb7, 3}, - {0x7fb8, 4878}, - {0x7fb9, 1785}, - {0x7fbb, 0}, - {0x7fbc, 5997}, - {0x7fbd, 4309}, - {0x7fbf, 7390}, - {0x7fc1, 3803}, - {0x7fc3, 0}, - {0x7fc4, 1}, - {0x7fc5, 1286}, - {0x7fc7, 0}, - {0x7fc8, 1}, - {0x7fc9, 2}, - {0x7fca, 7064}, - {0x7fcc, 4213}, - {0x7fce, 7391}, - {0x7fd0, 0}, - {0x7fd1, 1}, - {0x7fd2, 8622}, - {0x7fd4, 3925}, - {0x7fd5, 7392}, - {0x7fd7, 0}, - {0x7fd8, 3145}, - {0x7fda, 0}, - {0x7fdb, 1}, - {0x7fdc, 2}, - {0x7fdd, 3}, - {0x7fde, 4}, - {0x7fdf, 1461}, - {0x7fe0, 1383}, - {0x7fe1, 7394}, - {0x7fe3, 0}, - {0x7fe4, 1}, - {0x7fe5, 7393}, - {0x7fe6, 7395}, - {0x7fe8, 0}, - {0x7fe9, 7396}, - {0x7feb, 0}, - {0x7fec, 1}, - {0x7fed, 2}, - {0x7fee, 7397}, - {0x7ff0, 1897}, - {0x7ff1, 970}, - {0x7ff3, 7398}, - {0x7ff5, 0}, - {0x7ff6, 1}, - {0x7ff7, 2}, - {0x7ff8, 3}, - {0x7ff9, 8416}, - {0x7ffb, 1610}, - {0x7ffc, 4212}, - {0x7ffe, 0}, - {0x7fff, 1}, - {0x8000, 4146}, - {0x8001, 2490}, - {0x8003, 2377}, - {0x8004, 6483}, - {0x8005, 4480}, - {0x8006, 6426}, - {0x8008, 0}, - {0x8009, 1}, - {0x800a, 2}, - {0x800b, 7127}, - {0x800c, 1591}, - {0x800d, 3480}, - {0x800f, 0}, - {0x8010, 2864}, - {0x8012, 7115}, - {0x8014, 7116}, - {0x8015, 1782}, - {0x8016, 7117}, - {0x8017, 1915}, - {0x8018, 4360}, - {0x8019, 989}, - {0x801b, 0}, - {0x801c, 7118}, - {0x801e, 0}, - {0x801f, 1}, - {0x8020, 7119}, - {0x8022, 7120}, - {0x8024, 0}, - {0x8025, 7121}, - {0x8026, 7122}, - {0x8027, 7123}, - {0x8028, 7125}, - {0x8029, 7124}, - {0x802a, 2966}, - {0x802c, 9666}, - {0x802e, 9665}, - {0x8030, 0}, - {0x8031, 7126}, - {0x8033, 1593}, - {0x8035, 7128}, - {0x8036, 4149}, - {0x8037, 5297}, - {0x8038, 3519}, - {0x803a, 0}, - {0x803b, 1281}, - {0x803d, 1411}, - {0x803f, 1787}, - {0x8041, 0}, - {0x8042, 2903}, - {0x8043, 7129}, - {0x8045, 0}, - {0x8046, 7130}, - {0x8048, 0}, - {0x8049, 1}, - {0x804a, 2573}, - {0x804b, 2628}, - {0x804c, 4527}, - {0x804d, 7131}, - {0x804f, 0}, - {0x8050, 1}, - {0x8051, 2}, - {0x8052, 7132}, - {0x8054, 2547}, - {0x8056, 8488}, - {0x8058, 3031}, - {0x805a, 2314}, - {0x805c, 0}, - {0x805d, 1}, - {0x805e, 8601}, - {0x8060, 0}, - {0x8061, 1}, - {0x8062, 2}, - {0x8063, 3}, - {0x8064, 4}, - {0x8065, 5}, - {0x8066, 6}, - {0x8067, 7}, - {0x8068, 8}, - {0x8069, 7133}, - {0x806a, 1362}, - {0x806c, 0}, - {0x806d, 1}, - {0x806e, 2}, - {0x806f, 8215}, - {0x8070, 7840}, - {0x8071, 7134}, - {0x8072, 8485}, - {0x8073, 8525}, - {0x8075, 9668}, - {0x8076, 8349}, - {0x8077, 8842}, - {0x8079, 9667}, - {0x807b, 0}, - {0x807c, 1}, - {0x807d, 8569}, - {0x807e, 8248}, - {0x807f, 6686}, - {0x8080, 6685}, - {0x8082, 0}, - {0x8083, 3541}, - {0x8084, 4197}, - {0x8085, 8533}, - {0x8086, 3510}, - {0x8087, 4473}, - {0x8089, 3261}, - {0x808b, 2506}, - {0x808c, 2068}, - {0x808e, 0}, - {0x808f, 1}, - {0x8090, 2}, - {0x8091, 3}, - {0x8092, 4}, - {0x8093, 6513}, - {0x8095, 0}, - {0x8096, 3951}, - {0x8098, 4577}, - {0x809a, 1542}, - {0x809b, 1747}, - {0x809c, 6512}, - {0x809d, 1737}, - {0x809f, 6511}, - {0x80a0, 1227}, - {0x80a1, 1826}, - {0x80a2, 4522}, - {0x80a4, 1681}, - {0x80a5, 1639}, - {0x80a7, 0}, - {0x80a8, 1}, - {0x80a9, 2138}, - {0x80aa, 1627}, - {0x80ab, 6518}, - {0x80ad, 6519}, - {0x80ae, 964}, - {0x80af, 2396}, - {0x80b1, 6517}, - {0x80b2, 4322}, - {0x80b4, 6520}, - {0x80b6, 0}, - {0x80b7, 6521}, - {0x80b9, 0}, - {0x80ba, 1643}, - {0x80bc, 6514}, - {0x80bd, 6516}, - {0x80be, 3375}, - {0x80bf, 4566}, - {0x80c0, 4462}, - {0x80c1, 3965}, - {0x80c2, 6527}, - {0x80c3, 3783}, - {0x80c4, 6528}, - {0x80c6, 1417}, - {0x80c8, 0}, - {0x80c9, 1}, - {0x80ca, 2}, - {0x80cb, 3}, - {0x80cc, 1052}, - {0x80cd, 6530}, - {0x80ce, 3576}, - {0x80d0, 0}, - {0x80d1, 1}, - {0x80d2, 2}, - {0x80d3, 3}, - {0x80d4, 4}, - {0x80d5, 5}, - {0x80d6, 2967}, - {0x80d7, 6531}, - {0x80d9, 6529}, - {0x80da, 2976}, - {0x80db, 6526}, - {0x80dc, 3387}, - {0x80dd, 6533}, - {0x80de, 1030}, - {0x80e0, 0}, - {0x80e1, 1969}, - {0x80e3, 0}, - {0x80e4, 4717}, - {0x80e5, 7111}, - {0x80e7, 6522}, - {0x80e8, 6523}, - {0x80e9, 6524}, - {0x80ea, 6525}, - {0x80eb, 6534}, - {0x80ec, 6042}, - {0x80ed, 6537}, - {0x80ef, 2421}, - {0x80f0, 4175}, - {0x80f1, 6535}, - {0x80f2, 6540}, - {0x80f3, 1767}, - {0x80f4, 6536}, - {0x80f6, 2187}, - {0x80f8, 4003}, - {0x80fa, 962}, - {0x80fc, 6541}, - {0x80fd, 2879}, - {0x80ff, 0}, - {0x8101, 0}, - {0x8102, 4523}, - {0x8104, 0}, - {0x8105, 8658}, - {0x8106, 1379}, - {0x8108, 0}, - {0x8109, 2717}, - {0x810a, 2092}, - {0x810c, 0}, - {0x810d, 6538}, - {0x810e, 6539}, - {0x810f, 4387}, - {0x8110, 3081}, - {0x8111, 2871}, - {0x8112, 6543}, - {0x8113, 2920}, - {0x8114, 4873}, - {0x8116, 1144}, - {0x8118, 6548}, - {0x811a, 2198}, - {0x811b, 9415}, - {0x811d, 0}, - {0x811e, 6546}, - {0x8120, 0}, - {0x8121, 1}, - {0x8122, 2}, - {0x8123, 3}, - {0x8124, 4}, - {0x8125, 5}, - {0x8126, 6}, - {0x8127, 7}, - {0x8128, 8}, - {0x8129, 9}, - {0x812a, 10}, - {0x812b, 11}, - {0x812c, 6547}, - {0x812e, 0}, - {0x812f, 1703}, - {0x8131, 3714}, - {0x8132, 6549}, - {0x8134, 0}, - {0x8135, 1}, - {0x8136, 6545}, - {0x8138, 2556}, - {0x8139, 8825}, - {0x813b, 0}, - {0x813c, 1}, - {0x813d, 2}, - {0x813e, 3009}, - {0x8140, 0}, - {0x8141, 1}, - {0x8142, 2}, - {0x8143, 3}, - {0x8144, 4}, - {0x8145, 5}, - {0x8146, 3654}, - {0x8148, 6550}, - {0x814a, 2459}, - {0x814b, 4159}, - {0x814c, 6551}, - {0x814e, 8483}, - {0x8150, 1706}, - {0x8151, 1704}, - {0x8153, 6552}, - {0x8154, 3128}, - {0x8155, 3748}, - {0x8156, 9413}, - {0x8158, 0}, - {0x8159, 6554}, - {0x815a, 6555}, - {0x815c, 0}, - {0x815d, 1}, - {0x815e, 2}, - {0x815f, 3}, - {0x8160, 6557}, - {0x8161, 9417}, - {0x8163, 0}, - {0x8164, 1}, - {0x8165, 3987}, - {0x8166, 8340}, - {0x8167, 6562}, - {0x8169, 6558}, - {0x816b, 8854}, - {0x816d, 6561}, - {0x816e, 3284}, - {0x8170, 4133}, - {0x8171, 6556}, - {0x8173, 0}, - {0x8174, 6553}, - {0x8176, 0}, - {0x8177, 1}, - {0x8178, 7799}, - {0x8179, 1716}, - {0x817a, 3910}, - {0x817b, 2888}, - {0x817c, 6559}, - {0x817d, 6560}, - {0x817e, 3629}, - {0x817f, 3705}, - {0x8180, 1021}, - {0x8182, 6566}, - {0x8184, 0}, - {0x8185, 1}, - {0x8186, 2}, - {0x8187, 3}, - {0x8188, 6565}, - {0x818a, 1145}, - {0x818c, 0}, - {0x818d, 1}, - {0x818e, 2}, - {0x818f, 1755}, - {0x8191, 6567}, - {0x8193, 0}, - {0x8194, 1}, - {0x8195, 2}, - {0x8196, 3}, - {0x8197, 4}, - {0x8198, 1109}, - {0x819a, 7942}, - {0x819b, 3608}, - {0x819c, 2823}, - {0x819d, 3858}, - {0x819f, 0}, - {0x81a0, 8101}, - {0x81a2, 0}, - {0x81a3, 6569}, - {0x81a5, 0}, - {0x81a6, 6576}, - {0x81a8, 2995}, - {0x81a9, 8345}, - {0x81aa, 6570}, - {0x81ac, 0}, - {0x81ad, 1}, - {0x81ae, 2}, - {0x81af, 3}, - {0x81b0, 4}, - {0x81b1, 5}, - {0x81b2, 6}, - {0x81b3, 3326}, - {0x81b5, 0}, - {0x81b6, 1}, - {0x81b7, 2}, - {0x81b8, 3}, - {0x81b9, 4}, - {0x81ba, 5697}, - {0x81bb, 6574}, - {0x81bd, 7853}, - {0x81be, 9416}, - {0x81bf, 8360}, - {0x81c0, 3711}, - {0x81c1, 6575}, - {0x81c2, 1092}, - {0x81c3, 4252}, - {0x81c5, 0}, - {0x81c6, 4195}, - {0x81c8, 0}, - {0x81c9, 8223}, - {0x81ca, 6573}, - {0x81cc, 6571}, - {0x81cd, 8389}, - {0x81cf, 9418}, - {0x81d1, 0}, - {0x81d2, 1}, - {0x81d3, 2}, - {0x81d4, 3}, - {0x81d5, 4}, - {0x81d6, 5}, - {0x81d7, 6}, - {0x81d8, 8176}, - {0x81da, 9414}, - {0x81dc, 0}, - {0x81dd, 1}, - {0x81de, 2}, - {0x81df, 8797}, - {0x81e0, 8926}, - {0x81e2, 0}, - {0x81e3, 1249}, - {0x81e5, 0}, - {0x81e6, 1}, - {0x81e7, 6402}, - {0x81e8, 8236}, - {0x81ea, 4657}, - {0x81ec, 7337}, - {0x81ed, 1305}, - {0x81ef, 0}, - {0x81f0, 1}, - {0x81f1, 2}, - {0x81f2, 3}, - {0x81f3, 4544}, - {0x81f4, 4545}, - {0x81f6, 0}, - {0x81f7, 1}, - {0x81f8, 2}, - {0x81f9, 3}, - {0x81fa, 8545}, - {0x81fb, 4490}, - {0x81fc, 2297}, - {0x81fe, 7333}, - {0x8200, 4143}, - {0x8201, 7334}, - {0x8202, 7335}, - {0x8204, 7336}, - {0x8205, 2298}, - {0x8206, 4292}, - {0x8207, 8763}, - {0x8208, 8665}, - {0x8209, 8139}, - {0x820a, 8137}, - {0x820c, 3353}, - {0x820d, 3354}, - {0x820f, 0}, - {0x8210, 7266}, - {0x8212, 3453}, - {0x8214, 3653}, - {0x8216, 0}, - {0x8217, 1}, - {0x8218, 2}, - {0x8219, 3}, - {0x821a, 4}, - {0x821b, 5656}, - {0x821c, 3497}, - {0x821e, 3831}, - {0x821f, 4570}, - {0x8221, 7339}, - {0x8222, 7340}, - {0x8223, 7341}, - {0x8225, 0}, - {0x8226, 1}, - {0x8227, 2}, - {0x8228, 7344}, - {0x822a, 1908}, - {0x822b, 7345}, - {0x822c, 1006}, - {0x822d, 7342}, - {0x822f, 7343}, - {0x8230, 2163}, - {0x8231, 1180}, - {0x8233, 7348}, - {0x8234, 7349}, - {0x8235, 1573}, - {0x8236, 1143}, - {0x8237, 3900}, - {0x8238, 7346}, - {0x8239, 1327}, - {0x823b, 7347}, - {0x823d, 0}, - {0x823e, 7350}, - {0x8240, 0}, - {0x8241, 1}, - {0x8242, 2}, - {0x8243, 3}, - {0x8244, 7351}, - {0x8246, 0}, - {0x8247, 3672}, - {0x8249, 7352}, - {0x824b, 7353}, - {0x824d, 0}, - {0x824e, 1}, - {0x824f, 7354}, - {0x8251, 0}, - {0x8252, 1}, - {0x8253, 2}, - {0x8254, 3}, - {0x8255, 4}, - {0x8256, 5}, - {0x8257, 6}, - {0x8258, 3527}, - {0x8259, 7777}, - {0x825a, 7355}, - {0x825c, 0}, - {0x825d, 1}, - {0x825e, 2}, - {0x825f, 7356}, - {0x8261, 0}, - {0x8262, 1}, - {0x8263, 2}, - {0x8264, 9711}, - {0x8266, 8088}, - {0x8268, 7357}, - {0x826a, 0}, - {0x826b, 9712}, - {0x826d, 0}, - {0x826e, 7388}, - {0x826f, 2565}, - {0x8270, 2139}, - {0x8271, 8072}, - {0x8272, 3300}, - {0x8273, 4103}, - {0x8274, 6001}, - {0x8276, 0}, - {0x8277, 8696}, - {0x8279, 5089}, - {0x827a, 4188}, - {0x827c, 0}, - {0x827d, 5090}, - {0x827e, 951}, - {0x827f, 5091}, - {0x8281, 0}, - {0x8282, 2219}, - {0x8284, 5095}, - {0x8286, 0}, - {0x8287, 1}, - {0x8288, 4728}, - {0x828a, 5093}, - {0x828b, 4312}, - {0x828d, 3343}, - {0x828e, 5096}, - {0x828f, 5092}, - {0x8291, 5097}, - {0x8292, 2727}, - {0x8294, 0}, - {0x8295, 1}, - {0x8296, 2}, - {0x8297, 5098}, - {0x8298, 5107}, - {0x8299, 5099}, - {0x829b, 0}, - {0x829c, 3822}, - {0x829d, 4516}, - {0x829f, 5117}, - {0x82a1, 5115}, - {0x82a3, 0}, - {0x82a4, 5120}, - {0x82a5, 2231}, - {0x82a6, 2642}, - {0x82a8, 5094}, - {0x82a9, 5113}, - {0x82aa, 5116}, - {0x82ab, 5100}, - {0x82ac, 1647}, - {0x82ad, 976}, - {0x82ae, 5109}, - {0x82af, 3977}, - {0x82b0, 5103}, - {0x82b1, 1981}, - {0x82b3, 1625}, - {0x82b4, 5114}, - {0x82b6, 0}, - {0x82b7, 5108}, - {0x82b8, 5101}, - {0x82b9, 3160}, - {0x82bb, 8994}, - {0x82bd, 4072}, - {0x82be, 5102}, - {0x82c0, 0}, - {0x82c1, 5112}, - {0x82c3, 0}, - {0x82c4, 5118}, - {0x82c6, 0}, - {0x82c7, 3772}, - {0x82c8, 5104}, - {0x82ca, 5105}, - {0x82cb, 5110}, - {0x82cc, 5111}, - {0x82cd, 1179}, - {0x82ce, 5119}, - {0x82cf, 3530}, - {0x82d1, 4346}, - {0x82d2, 5129}, - {0x82d3, 5133}, - {0x82d4, 3577}, - {0x82d5, 5140}, - {0x82d7, 2796}, - {0x82d8, 5130}, - {0x82da, 0}, - {0x82db, 2382}, - {0x82dc, 5127}, - {0x82de, 1029}, - {0x82df, 1807}, - {0x82e0, 5139}, - {0x82e1, 5121}, - {0x82e3, 5106}, - {0x82e4, 5124}, - {0x82e5, 3279}, - {0x82e6, 2413}, - {0x82e7, 9014}, - {0x82e9, 0}, - {0x82ea, 1}, - {0x82eb, 3316}, - {0x82ed, 0}, - {0x82ee, 1}, - {0x82ef, 1062}, - {0x82f1, 4231}, - {0x82f3, 0}, - {0x82f4, 5128}, - {0x82f6, 0}, - {0x82f7, 5123}, - {0x82f9, 3034}, - {0x82fb, 5132}, - {0x82fd, 0}, - {0x82fe, 1}, - {0x82ff, 2}, - {0x8301, 4639}, - {0x8302, 2740}, - {0x8303, 1619}, - {0x8304, 3150}, - {0x8305, 2734}, - {0x8306, 5136}, - {0x8307, 5126}, - {0x8308, 5145}, - {0x8309, 5122}, - {0x830b, 0}, - {0x830c, 5131}, - {0x830e, 2260}, - {0x830f, 5125}, - {0x8311, 5134}, - {0x8313, 0}, - {0x8314, 5137}, - {0x8315, 5138}, - {0x8317, 5158}, - {0x8319, 0}, - {0x831a, 5135}, - {0x831b, 5166}, - {0x831c, 5141}, - {0x831e, 0}, - {0x831f, 1}, - {0x8320, 2}, - {0x8321, 3}, - {0x8322, 4}, - {0x8323, 5}, - {0x8324, 6}, - {0x8325, 7}, - {0x8326, 8}, - {0x8327, 2142}, - {0x8328, 1351}, - {0x832a, 0}, - {0x832b, 2728}, - {0x832c, 1198}, - {0x832d, 5160}, - {0x832f, 5152}, - {0x8331, 5149}, - {0x8333, 5162}, - {0x8334, 5148}, - {0x8335, 4215}, - {0x8336, 1199}, - {0x8338, 3250}, - {0x8339, 3262}, - {0x833a, 5161}, - {0x833c, 5147}, - {0x833e, 0}, - {0x833f, 1}, - {0x8340, 5157}, - {0x8342, 0}, - {0x8343, 5155}, - {0x8345, 0}, - {0x8346, 2258}, - {0x8347, 5154}, - {0x8349, 1188}, - {0x834b, 0}, - {0x834c, 1}, - {0x834d, 2}, - {0x834e, 3}, - {0x834f, 5153}, - {0x8350, 2153}, - {0x8351, 5142}, - {0x8352, 2009}, - {0x8354, 2526}, - {0x8356, 0}, - {0x8357, 1}, - {0x8358, 2}, - {0x8359, 3}, - {0x835a, 2119}, - {0x835b, 5143}, - {0x835c, 5144}, - {0x835e, 5151}, - {0x835f, 5156}, - {0x8360, 5159}, - {0x8361, 1429}, - {0x8363, 3252}, - {0x8364, 2044}, - {0x8365, 5164}, - {0x8366, 5163}, - {0x8367, 4240}, - {0x8368, 5165}, - {0x8369, 5167}, - {0x836a, 5169}, - {0x836b, 4216}, - {0x836c, 5168}, - {0x836d, 5170}, - {0x836e, 5171}, - {0x836f, 4144}, - {0x8371, 0}, - {0x8372, 1}, - {0x8373, 2}, - {0x8374, 3}, - {0x8375, 4}, - {0x8376, 5}, - {0x8377, 1920}, - {0x8378, 5173}, - {0x837a, 0}, - {0x837b, 5186}, - {0x837c, 5181}, - {0x837d, 5184}, - {0x837f, 0}, - {0x8380, 1}, - {0x8381, 2}, - {0x8382, 3}, - {0x8383, 4}, - {0x8384, 5}, - {0x8385, 5180}, - {0x8386, 3053}, - {0x8388, 0}, - {0x8389, 2525}, - {0x838a, 8875}, - {0x838c, 0}, - {0x838d, 1}, - {0x838e, 3304}, - {0x8390, 0}, - {0x8391, 1}, - {0x8392, 5146}, - {0x8393, 5178}, - {0x8395, 0}, - {0x8396, 8127}, - {0x8398, 5187}, - {0x839a, 0}, - {0x839b, 5150}, - {0x839c, 5179}, - {0x839e, 5188}, - {0x83a0, 5176}, - {0x83a2, 8061}, - {0x83a4, 0}, - {0x83a5, 1}, - {0x83a6, 2}, - {0x83a7, 9011}, - {0x83a8, 5189}, - {0x83a9, 5183}, - {0x83aa, 5177}, - {0x83ab, 2829}, - {0x83ad, 0}, - {0x83ae, 1}, - {0x83af, 2}, - {0x83b0, 5172}, - {0x83b1, 2462}, - {0x83b2, 2548}, - {0x83b3, 5174}, - {0x83b4, 5175}, - {0x83b6, 5182}, - {0x83b7, 2054}, - {0x83b8, 5185}, - {0x83b9, 4237}, - {0x83ba, 5190}, - {0x83bc, 5191}, - {0x83bd, 2732}, - {0x83bf, 0}, - {0x83c0, 5214}, - {0x83c1, 5192}, - {0x83c3, 0}, - {0x83c4, 1}, - {0x83c5, 5213}, - {0x83c7, 1814}, - {0x83c9, 0}, - {0x83ca, 2308}, - {0x83cc, 2345}, - {0x83ce, 0}, - {0x83cf, 1921}, - {0x83d1, 0}, - {0x83d2, 1}, - {0x83d3, 2}, - {0x83d4, 5206}, - {0x83d6, 5201}, - {0x83d8, 5195}, - {0x83da, 0}, - {0x83db, 1}, - {0x83dc, 1170}, - {0x83dd, 5199}, - {0x83df, 5207}, - {0x83e0, 1131}, - {0x83e1, 5217}, - {0x83e3, 0}, - {0x83e4, 1}, - {0x83e5, 5194}, - {0x83e7, 0}, - {0x83e8, 1}, - {0x83e9, 3055}, - {0x83ea, 5212}, - {0x83ec, 0}, - {0x83ed, 1}, - {0x83ee, 2}, - {0x83ef, 8013}, - {0x83f0, 5216}, - {0x83f1, 2603}, - {0x83f2, 1635}, - {0x83f4, 0}, - {0x83f5, 1}, - {0x83f6, 2}, - {0x83f7, 3}, - {0x83f8, 5210}, - {0x83f9, 5211}, - {0x83fb, 0}, - {0x83fc, 1}, - {0x83fd, 5200}, - {0x83ff, 0}, - {0x8401, 5193}, - {0x8403, 5209}, - {0x8404, 3620}, - {0x8406, 5205}, - {0x8407, 9012}, - {0x8409, 0}, - {0x840a, 8177}, - {0x840b, 5198}, - {0x840c, 2765}, - {0x840d, 3035}, - {0x840e, 3773}, - {0x840f, 5208}, - {0x8411, 5204}, - {0x8413, 0}, - {0x8414, 1}, - {0x8415, 2}, - {0x8416, 3}, - {0x8417, 4}, - {0x8418, 5197}, - {0x841a, 0}, - {0x841b, 1}, - {0x841c, 5202}, - {0x841d, 2691}, - {0x841f, 0}, - {0x8420, 1}, - {0x8421, 2}, - {0x8422, 3}, - {0x8423, 4}, - {0x8424, 4238}, - {0x8425, 4239}, - {0x8426, 5215}, - {0x8427, 3937}, - {0x8428, 3283}, - {0x842a, 0}, - {0x842b, 1}, - {0x842c, 8587}, - {0x842e, 0}, - {0x842f, 1}, - {0x8430, 2}, - {0x8431, 5234}, - {0x8433, 0}, - {0x8434, 1}, - {0x8435, 9033}, - {0x8437, 0}, - {0x8438, 5203}, - {0x843a, 0}, - {0x843b, 1}, - {0x843c, 5228}, - {0x843d, 2699}, - {0x843f, 0}, - {0x8440, 1}, - {0x8441, 2}, - {0x8442, 3}, - {0x8443, 4}, - {0x8444, 5}, - {0x8445, 6}, - {0x8446, 5229}, - {0x8448, 0}, - {0x8449, 8715}, - {0x844b, 0}, - {0x844c, 1}, - {0x844d, 2}, - {0x844e, 3}, - {0x844f, 4}, - {0x8450, 5}, - {0x8451, 5219}, - {0x8452, 9030}, - {0x8454, 0}, - {0x8455, 1}, - {0x8456, 2}, - {0x8457, 4599}, - {0x8459, 5221}, - {0x845a, 5220}, - {0x845b, 1771}, - {0x845c, 5218}, - {0x845e, 0}, - {0x845f, 1}, - {0x8460, 2}, - {0x8461, 3054}, - {0x8463, 1516}, - {0x8464, 9031}, - {0x8466, 8595}, - {0x8468, 0}, - {0x8469, 5230}, - {0x846b, 1968}, - {0x846c, 4388}, - {0x846d, 5235}, - {0x846f, 9889}, - {0x8471, 1363}, - {0x8473, 5222}, - {0x8475, 2440}, - {0x8476, 5231}, - {0x8477, 8034}, - {0x8478, 5227}, - {0x847a, 5225}, - {0x847c, 0}, - {0x847d, 1}, - {0x847e, 2}, - {0x847f, 3}, - {0x8480, 4}, - {0x8481, 5}, - {0x8482, 1466}, - {0x8484, 0}, - {0x8485, 1}, - {0x8486, 2}, - {0x8487, 5223}, - {0x8488, 5224}, - {0x8489, 5226}, - {0x848b, 2176}, - {0x848c, 5232}, - {0x848e, 5233}, - {0x8490, 0}, - {0x8491, 1}, - {0x8492, 2}, - {0x8493, 9037}, - {0x8494, 9032}, - {0x8496, 0}, - {0x8497, 5249}, - {0x8499, 2766}, - {0x849b, 0}, - {0x849c, 3543}, - {0x849e, 0}, - {0x849f, 1}, - {0x84a0, 2}, - {0x84a1, 5246}, - {0x84a3, 0}, - {0x84a4, 1}, - {0x84a5, 2}, - {0x84a6, 3}, - {0x84a7, 4}, - {0x84a8, 5}, - {0x84a9, 6}, - {0x84aa, 7}, - {0x84ab, 8}, - {0x84ac, 9}, - {0x84ad, 10}, - {0x84ae, 11}, - {0x84af, 4759}, - {0x84b1, 0}, - {0x84b2, 3056}, - {0x84b4, 5248}, - {0x84b6, 0}, - {0x84b7, 1}, - {0x84b8, 4501}, - {0x84b9, 5247}, - {0x84ba, 5244}, - {0x84bc, 7776}, - {0x84bd, 5240}, - {0x84bf, 5243}, - {0x84c0, 9029}, - {0x84c1, 5236}, - {0x84c3, 0}, - {0x84c4, 4025}, - {0x84c6, 0}, - {0x84c7, 1}, - {0x84c8, 2}, - {0x84c9, 3251}, - {0x84ca, 5242}, - {0x84cb, 7954}, - {0x84cd, 5237}, - {0x84cf, 0}, - {0x84d0, 5238}, - {0x84d1, 3559}, - {0x84d3, 5241}, - {0x84d5, 0}, - {0x84d6, 1078}, - {0x84d8, 0}, - {0x84d9, 1}, - {0x84da, 2}, - {0x84db, 3}, - {0x84dc, 4}, - {0x84dd, 2465}, - {0x84df, 2094}, - {0x84e0, 5245}, - {0x84e2, 0}, - {0x84e3, 5251}, - {0x84e5, 5250}, - {0x84e6, 5239}, - {0x84e8, 0}, - {0x84e9, 1}, - {0x84ea, 2}, - {0x84eb, 3}, - {0x84ec, 2991}, - {0x84ee, 8216}, - {0x84ef, 9013}, - {0x84f0, 5255}, - {0x84f2, 0}, - {0x84f3, 1}, - {0x84f4, 2}, - {0x84f5, 3}, - {0x84f6, 4}, - {0x84f7, 5}, - {0x84f8, 6}, - {0x84f9, 7}, - {0x84fa, 8}, - {0x84fb, 9}, - {0x84fc, 5262}, - {0x84fd, 9020}, - {0x84ff, 5261}, - {0x8501, 0}, - {0x8502, 1}, - {0x8503, 2}, - {0x8504, 3}, - {0x8505, 4}, - {0x8506, 5}, - {0x8507, 6}, - {0x8508, 7}, - {0x8509, 8}, - {0x850a, 9}, - {0x850b, 10}, - {0x850c, 5252}, - {0x850e, 0}, - {0x850f, 1}, - {0x8510, 2}, - {0x8511, 2804}, - {0x8513, 2722}, - {0x8514, 9839}, - {0x8516, 0}, - {0x8517, 4482}, - {0x8519, 0}, - {0x851a, 3780}, - {0x851c, 0}, - {0x851d, 1}, - {0x851e, 9041}, - {0x851f, 5257}, - {0x8521, 1171}, - {0x8523, 8096}, - {0x8525, 0}, - {0x8526, 9016}, - {0x8528, 0}, - {0x8529, 1}, - {0x852a, 2}, - {0x852b, 2891}, - {0x852c, 3446}, - {0x852d, 8731}, - {0x852f, 0}, - {0x8530, 1}, - {0x8531, 2}, - {0x8532, 3}, - {0x8533, 4}, - {0x8534, 5}, - {0x8535, 6}, - {0x8536, 7}, - {0x8537, 3131}, - {0x8538, 5254}, - {0x8539, 5256}, - {0x853a, 5258}, - {0x853b, 5260}, - {0x853c, 949}, - {0x853d, 1079}, - {0x853f, 0}, - {0x8540, 1}, - {0x8541, 9026}, - {0x8543, 5270}, - {0x8545, 0}, - {0x8546, 9039}, - {0x8548, 5264}, - {0x8549, 2183}, - {0x854a, 3274}, - {0x854c, 0}, - {0x854d, 1}, - {0x854e, 9021}, - {0x8550, 0}, - {0x8551, 1}, - {0x8552, 9028}, - {0x8553, 9009}, - {0x8555, 9035}, - {0x8556, 5259}, - {0x8558, 9019}, - {0x8559, 5263}, - {0x855b, 0}, - {0x855c, 1}, - {0x855d, 2}, - {0x855e, 5267}, - {0x8560, 0}, - {0x8561, 1}, - {0x8562, 9040}, - {0x8564, 5266}, - {0x8566, 0}, - {0x8567, 1}, - {0x8568, 5265}, - {0x8569, 7860}, - {0x856a, 8614}, - {0x856c, 0}, - {0x856d, 8651}, - {0x856f, 0}, - {0x8570, 1}, - {0x8571, 2}, - {0x8572, 5271}, - {0x8574, 4367}, - {0x8576, 0}, - {0x8577, 9045}, - {0x8579, 5277}, - {0x857a, 5268}, - {0x857b, 5272}, - {0x857d, 0}, - {0x857e, 2500}, - {0x8580, 0}, - {0x8581, 1}, - {0x8582, 2}, - {0x8583, 3}, - {0x8584, 1034}, - {0x8585, 5280}, - {0x8587, 5275}, - {0x8588, 9022}, - {0x858a, 8052}, - {0x858c, 9008}, - {0x858e, 0}, - {0x858f, 5276}, - {0x8591, 9856}, - {0x8593, 0}, - {0x8594, 8410}, - {0x8596, 0}, - {0x8597, 1}, - {0x8598, 2}, - {0x8599, 3}, - {0x859a, 4}, - {0x859b, 4047}, - {0x859c, 5279}, - {0x859e, 0}, - {0x859f, 9034}, - {0x85a1, 0}, - {0x85a2, 1}, - {0x85a3, 2}, - {0x85a4, 5273}, - {0x85a6, 8081}, - {0x85a8, 5274}, - {0x85a9, 8455}, - {0x85aa, 3976}, - {0x85ac, 0}, - {0x85ad, 1}, - {0x85ae, 5278}, - {0x85af, 3460}, - {0x85b0, 5283}, - {0x85b2, 0}, - {0x85b3, 1}, - {0x85b4, 2}, - {0x85b5, 3}, - {0x85b6, 4}, - {0x85b7, 5282}, - {0x85b9, 5281}, - {0x85ba, 9023}, - {0x85bc, 0}, - {0x85bd, 1}, - {0x85be, 2}, - {0x85bf, 3}, - {0x85c0, 4}, - {0x85c1, 5285}, - {0x85c3, 0}, - {0x85c4, 1}, - {0x85c5, 2}, - {0x85c6, 3}, - {0x85c7, 4}, - {0x85c8, 5}, - {0x85c9, 2230}, - {0x85cb, 0}, - {0x85cc, 1}, - {0x85cd, 8180}, - {0x85ce, 9027}, - {0x85cf, 1183}, - {0x85d0, 2799}, - {0x85d2, 0}, - {0x85d3, 5284}, - {0x85d5, 2939}, - {0x85d7, 0}, - {0x85d8, 1}, - {0x85d9, 2}, - {0x85da, 3}, - {0x85db, 4}, - {0x85dc, 5286}, - {0x85dd, 8722}, - {0x85df, 0}, - {0x85e0, 1}, - {0x85e1, 2}, - {0x85e2, 3}, - {0x85e3, 4}, - {0x85e4, 3628}, - {0x85e5, 8711}, - {0x85e7, 0}, - {0x85e8, 1}, - {0x85e9, 1607}, - {0x85ea, 9049}, - {0x85ec, 0}, - {0x85ed, 1}, - {0x85ee, 2}, - {0x85ef, 3}, - {0x85f0, 4}, - {0x85f1, 5}, - {0x85f2, 6}, - {0x85f3, 7}, - {0x85f4, 8788}, - {0x85f6, 9010}, - {0x85f8, 0}, - {0x85f9, 7718}, - {0x85fa, 9047}, - {0x85fb, 4392}, - {0x85fd, 0}, - {0x85fe, 1}, - {0x85ff, 5287}, - {0x8601, 0}, - {0x8602, 1}, - {0x8603, 2}, - {0x8604, 9048}, - {0x8605, 5289}, - {0x8606, 8258}, - {0x8607, 8531}, - {0x8609, 0}, - {0x860a, 1}, - {0x860b, 8379}, - {0x860d, 0}, - {0x860e, 1}, - {0x860f, 2}, - {0x8610, 3}, - {0x8611, 2821}, - {0x8613, 0}, - {0x8614, 1}, - {0x8615, 2}, - {0x8616, 5291}, - {0x8618, 0}, - {0x8619, 1}, - {0x861a, 9050}, - {0x861c, 0}, - {0x861d, 1}, - {0x861e, 9046}, - {0x8620, 0}, - {0x8621, 1}, - {0x8622, 9015}, - {0x8624, 0}, - {0x8625, 1}, - {0x8626, 2}, - {0x8627, 5288}, - {0x8629, 5290}, - {0x862b, 0}, - {0x862c, 1}, - {0x862d, 8185}, - {0x862f, 0}, - {0x8630, 1}, - {0x8631, 2}, - {0x8632, 3}, - {0x8633, 4}, - {0x8634, 5}, - {0x8635, 6}, - {0x8636, 7}, - {0x8637, 8}, - {0x8638, 4443}, - {0x863a, 9043}, - {0x863c, 5292}, - {0x863e, 0}, - {0x863f, 8289}, - {0x8641, 0}, - {0x8642, 1}, - {0x8643, 2}, - {0x8644, 3}, - {0x8645, 4}, - {0x8646, 5}, - {0x8647, 6}, - {0x8648, 7}, - {0x8649, 8}, - {0x864a, 9}, - {0x864b, 10}, - {0x864c, 11}, - {0x864d, 7152}, - {0x864e, 1975}, - {0x864f, 2649}, - {0x8650, 2929}, - {0x8651, 2670}, - {0x8653, 0}, - {0x8654, 7153}, - {0x8655, 7829}, - {0x8657, 0}, - {0x8658, 1}, - {0x8659, 2}, - {0x865a, 4020}, - {0x865c, 8265}, - {0x865e, 4290}, - {0x865f, 8002}, - {0x8661, 0}, - {0x8662, 6509}, - {0x8664, 0}, - {0x8665, 1}, - {0x8666, 2}, - {0x8667, 8168}, - {0x8669, 0}, - {0x866a, 1}, - {0x866b, 1291}, - {0x866c, 7154}, - {0x866e, 7155}, - {0x8670, 0}, - {0x8671, 3396}, - {0x8673, 0}, - {0x8674, 1}, - {0x8675, 2}, - {0x8676, 3}, - {0x8677, 4}, - {0x8678, 5}, - {0x8679, 1950}, - {0x867a, 7157}, - {0x867b, 7159}, - {0x867c, 7158}, - {0x867d, 3545}, - {0x867e, 3879}, - {0x867f, 7156}, - {0x8680, 3403}, - {0x8681, 4182}, - {0x8682, 2707}, - {0x8684, 0}, - {0x8685, 1}, - {0x8686, 2}, - {0x8687, 3}, - {0x8688, 4}, - {0x8689, 5}, - {0x868a, 3794}, - {0x868b, 7162}, - {0x868c, 1025}, - {0x868d, 7161}, - {0x868f, 0}, - {0x8690, 1}, - {0x8691, 2}, - {0x8692, 3}, - {0x8693, 7168}, - {0x8695, 1174}, - {0x8697, 0}, - {0x8698, 1}, - {0x8699, 2}, - {0x869a, 3}, - {0x869b, 4}, - {0x869c, 4074}, - {0x869d, 7164}, - {0x869f, 0}, - {0x86a0, 1}, - {0x86a1, 2}, - {0x86a2, 3}, - {0x86a3, 7166}, - {0x86a4, 4396}, - {0x86a6, 0}, - {0x86a7, 7165}, - {0x86a8, 7160}, - {0x86a9, 7169}, - {0x86aa, 7167}, - {0x86ac, 7163}, - {0x86ae, 0}, - {0x86af, 7177}, - {0x86b0, 7174}, - {0x86b1, 7176}, - {0x86b3, 0}, - {0x86b4, 7180}, - {0x86b5, 7172}, - {0x86b6, 7170}, - {0x86b8, 0}, - {0x86b9, 1}, - {0x86ba, 7175}, - {0x86bc, 0}, - {0x86bd, 1}, - {0x86be, 2}, - {0x86bf, 3}, - {0x86c0, 4602}, - {0x86c2, 0}, - {0x86c3, 1}, - {0x86c4, 7171}, - {0x86c6, 3190}, - {0x86c7, 3352}, - {0x86c9, 7178}, - {0x86ca, 1823}, - {0x86cb, 1425}, - {0x86cd, 0}, - {0x86ce, 7173}, - {0x86cf, 7179}, - {0x86d0, 7186}, - {0x86d1, 7192}, - {0x86d3, 0}, - {0x86d4, 2028}, - {0x86d6, 0}, - {0x86d7, 1}, - {0x86d8, 7191}, - {0x86d9, 3725}, - {0x86db, 4586}, - {0x86dd, 0}, - {0x86de, 7188}, - {0x86df, 7190}, - {0x86e1, 0}, - {0x86e2, 1}, - {0x86e3, 2}, - {0x86e4, 1773}, - {0x86e6, 0}, - {0x86e7, 1}, - {0x86e8, 2}, - {0x86e9, 7181}, - {0x86eb, 0}, - {0x86ec, 1}, - {0x86ed, 7184}, - {0x86ee, 2720}, - {0x86f0, 4478}, - {0x86f1, 7182}, - {0x86f2, 7183}, - {0x86f3, 7185}, - {0x86f4, 7189}, - {0x86f6, 0}, - {0x86f7, 1}, - {0x86f8, 7195}, - {0x86f9, 4257}, - {0x86fa, 9690}, - {0x86fc, 0}, - {0x86fd, 1}, - {0x86fe, 1577}, - {0x8700, 3464}, - {0x8702, 1665}, - {0x8703, 7193}, - {0x8705, 0}, - {0x8706, 9687}, - {0x8707, 7194}, - {0x8708, 7196}, - {0x8709, 7199}, - {0x870a, 7197}, - {0x870c, 0}, - {0x870d, 7198}, - {0x870f, 0}, - {0x8710, 1}, - {0x8711, 2}, - {0x8712, 4090}, - {0x8713, 7187}, - {0x8715, 3706}, - {0x8717, 3806}, - {0x8718, 4520}, - {0x871a, 7205}, - {0x871c, 2784}, - {0x871e, 7202}, - {0x8720, 0}, - {0x8721, 2458}, - {0x8722, 7214}, - {0x8723, 7200}, - {0x8725, 7203}, - {0x8727, 0}, - {0x8728, 1}, - {0x8729, 7210}, - {0x872b, 0}, - {0x872c, 1}, - {0x872d, 2}, - {0x872e, 7204}, - {0x8730, 0}, - {0x8731, 7209}, - {0x8733, 0}, - {0x8734, 7208}, - {0x8736, 0}, - {0x8737, 7211}, - {0x8739, 0}, - {0x873a, 1}, - {0x873b, 7201}, - {0x873d, 0}, - {0x873e, 7206}, - {0x873f, 7212}, - {0x8741, 0}, - {0x8742, 1}, - {0x8743, 2}, - {0x8744, 3}, - {0x8745, 4}, - {0x8746, 5}, - {0x8747, 4241}, - {0x8748, 7207}, - {0x8749, 1212}, - {0x874b, 0}, - {0x874c, 7220}, - {0x874e, 3958}, - {0x8750, 0}, - {0x8751, 1}, - {0x8752, 2}, - {0x8753, 7223}, - {0x8755, 8494}, - {0x8757, 2013}, - {0x8759, 7227}, - {0x875b, 0}, - {0x875c, 1}, - {0x875d, 2}, - {0x875e, 3}, - {0x875f, 4}, - {0x8760, 7218}, - {0x8762, 0}, - {0x8763, 7224}, - {0x8764, 7226}, - {0x8765, 7228}, - {0x8766, 8626}, - {0x8768, 0}, - {0x8769, 1}, - {0x876a, 2}, - {0x876b, 3}, - {0x876c, 4}, - {0x876d, 5}, - {0x876e, 7221}, - {0x8770, 7219}, - {0x8772, 0}, - {0x8773, 1}, - {0x8774, 1970}, - {0x8776, 1500}, - {0x8778, 8606}, - {0x877a, 0}, - {0x877b, 7217}, - {0x877c, 7225}, - {0x877d, 7215}, - {0x877e, 7216}, - {0x8780, 0}, - {0x8781, 1}, - {0x8782, 7213}, - {0x8783, 7238}, - {0x8784, 9692}, - {0x8785, 7235}, - {0x8787, 0}, - {0x8788, 7234}, - {0x878a, 0}, - {0x878b, 7222}, - {0x878d, 3253}, - {0x878f, 0}, - {0x8790, 1}, - {0x8791, 2}, - {0x8792, 3}, - {0x8793, 7229}, - {0x8795, 0}, - {0x8796, 1}, - {0x8797, 7237}, - {0x8799, 0}, - {0x879a, 1}, - {0x879b, 2}, - {0x879c, 3}, - {0x879d, 4}, - {0x879e, 8300}, - {0x879f, 2813}, - {0x87a1, 0}, - {0x87a2, 8742}, - {0x87a4, 0}, - {0x87a5, 1}, - {0x87a6, 2}, - {0x87a7, 3}, - {0x87a8, 7231}, - {0x87aa, 0}, - {0x87ab, 7239}, - {0x87ac, 7241}, - {0x87ad, 7236}, - {0x87af, 7230}, - {0x87b1, 0}, - {0x87b2, 1}, - {0x87b3, 7243}, - {0x87b5, 7242}, - {0x87b7, 0}, - {0x87b8, 1}, - {0x87b9, 2}, - {0x87ba, 2692}, - {0x87bb, 9696}, - {0x87bd, 7246}, - {0x87bf, 0}, - {0x87c0, 7248}, - {0x87c2, 0}, - {0x87c3, 1}, - {0x87c4, 8827}, - {0x87c6, 7233}, - {0x87c8, 9694}, - {0x87ca, 7249}, - {0x87cb, 7244}, - {0x87cd, 0}, - {0x87ce, 9697}, - {0x87d0, 0}, - {0x87d1, 7247}, - {0x87d2, 7232}, - {0x87d3, 7245}, - {0x87d5, 0}, - {0x87d6, 1}, - {0x87d7, 2}, - {0x87d8, 3}, - {0x87d9, 4}, - {0x87da, 5}, - {0x87db, 7250}, - {0x87dd, 0}, - {0x87de, 1}, - {0x87df, 2}, - {0x87e0, 7252}, - {0x87e2, 0}, - {0x87e3, 9685}, - {0x87e5, 7240}, - {0x87e7, 0}, - {0x87e8, 1}, - {0x87e9, 2}, - {0x87ea, 7251}, - {0x87ec, 7787}, - {0x87ee, 7253}, - {0x87ef, 9691}, - {0x87f1, 0}, - {0x87f2, 7817}, - {0x87f4, 0}, - {0x87f5, 1}, - {0x87f6, 9689}, - {0x87f8, 0}, - {0x87f9, 3970}, - {0x87fb, 8721}, - {0x87fd, 0}, - {0x87fe, 7256}, - {0x8801, 0}, - {0x8802, 1}, - {0x8803, 4877}, - {0x8805, 8745}, - {0x8806, 9686}, - {0x8808, 0}, - {0x8809, 1}, - {0x880a, 7257}, - {0x880c, 0}, - {0x880d, 1}, - {0x880e, 2}, - {0x880f, 3}, - {0x8810, 9693}, - {0x8811, 9695}, - {0x8813, 7255}, - {0x8815, 3263}, - {0x8816, 7254}, - {0x8818, 0}, - {0x8819, 1}, - {0x881a, 2}, - {0x881b, 7258}, - {0x881d, 0}, - {0x881e, 1}, - {0x881f, 8175}, - {0x8821, 7259}, - {0x8822, 1347}, - {0x8823, 9688}, - {0x8825, 0}, - {0x8826, 1}, - {0x8827, 2}, - {0x8828, 3}, - {0x8829, 4}, - {0x882a, 5}, - {0x882b, 6}, - {0x882c, 7}, - {0x882d, 8}, - {0x882e, 9}, - {0x882f, 10}, - {0x8830, 11}, - {0x8831, 7977}, - {0x8832, 6797}, - {0x8834, 0}, - {0x8835, 1}, - {0x8836, 7771}, - {0x8838, 0}, - {0x8839, 7260}, - {0x883b, 8310}, - {0x883c, 7261}, - {0x883e, 0}, - {0x883f, 1}, - {0x8840, 4051}, - {0x8842, 0}, - {0x8843, 1}, - {0x8844, 7338}, - {0x8845, 3985}, - {0x8846, 8855}, - {0x8848, 0}, - {0x8849, 1}, - {0x884a, 9872}, - {0x884c, 3995}, - {0x884d, 4101}, - {0x884f, 0}, - {0x8850, 1}, - {0x8851, 2}, - {0x8852, 3}, - {0x8853, 8511}, - {0x8854, 3899}, - {0x8856, 0}, - {0x8857, 2215}, - {0x8859, 4076}, - {0x885b, 8600}, - {0x885d, 7816}, - {0x885f, 0}, - {0x8860, 1}, - {0x8861, 1945}, - {0x8862, 5613}, - {0x8863, 4169}, - {0x8864, 7078}, - {0x8865, 1152}, - {0x8867, 0}, - {0x8868, 1110}, - {0x8869, 7079}, - {0x886b, 3321}, - {0x886c, 1257}, - {0x886e, 4870}, - {0x8870, 3482}, - {0x8872, 7080}, - {0x8874, 0}, - {0x8875, 1}, - {0x8876, 2}, - {0x8877, 4563}, - {0x8879, 8844}, - {0x887b, 0}, - {0x887c, 1}, - {0x887d, 7081}, - {0x887e, 7358}, - {0x887f, 7082}, - {0x8881, 4335}, - {0x8882, 7083}, - {0x8884, 971}, - {0x8885, 7359}, - {0x8887, 0}, - {0x8888, 7360}, - {0x888a, 0}, - {0x888b, 1407}, - {0x888d, 2972}, - {0x888f, 0}, - {0x8890, 1}, - {0x8891, 2}, - {0x8892, 3598}, - {0x8894, 0}, - {0x8895, 1}, - {0x8896, 4015}, - {0x8898, 0}, - {0x8899, 1}, - {0x889a, 2}, - {0x889b, 3}, - {0x889c, 3729}, - {0x889e, 0}, - {0x889f, 1}, - {0x88a0, 2}, - {0x88a1, 3}, - {0x88a2, 7084}, - {0x88a4, 4871}, - {0x88a6, 0}, - {0x88a7, 1}, - {0x88a8, 2}, - {0x88a9, 3}, - {0x88aa, 4}, - {0x88ab, 1060}, - {0x88ad, 3867}, - {0x88af, 0}, - {0x88b0, 1}, - {0x88b1, 1695}, - {0x88b3, 0}, - {0x88b4, 1}, - {0x88b5, 2}, - {0x88b6, 3}, - {0x88b7, 7086}, - {0x88b9, 0}, - {0x88ba, 1}, - {0x88bb, 2}, - {0x88bc, 7087}, - {0x88be, 0}, - {0x88bf, 1}, - {0x88c0, 2}, - {0x88c1, 1162}, - {0x88c2, 2586}, - {0x88c4, 0}, - {0x88c5, 4621}, - {0x88c6, 7085}, - {0x88c8, 0}, - {0x88c9, 7088}, - {0x88ca, 9713}, - {0x88cc, 0}, - {0x88cd, 1}, - {0x88ce, 7090}, - {0x88cf, 8204}, - {0x88d1, 0}, - {0x88d2, 4874}, - {0x88d4, 4200}, - {0x88d5, 4326}, - {0x88d7, 0}, - {0x88d8, 7361}, - {0x88d9, 3220}, - {0x88db, 0}, - {0x88dc, 7768}, - {0x88dd, 8876}, - {0x88df, 7362}, - {0x88e1, 0}, - {0x88e2, 7089}, - {0x88e3, 7091}, - {0x88e4, 2416}, - {0x88e5, 7092}, - {0x88e7, 0}, - {0x88e8, 7096}, - {0x88ea, 0}, - {0x88eb, 1}, - {0x88ec, 2}, - {0x88ed, 3}, - {0x88ee, 4}, - {0x88ef, 5}, - {0x88f0, 7098}, - {0x88f1, 7093}, - {0x88f3, 3338}, - {0x88f4, 2978}, - {0x88f6, 0}, - {0x88f7, 1}, - {0x88f8, 2698}, - {0x88f9, 1877}, - {0x88fb, 0}, - {0x88fc, 7095}, - {0x88fd, 9895}, - {0x88fe, 7097}, - {0x8901, 0}, - {0x8902, 1836}, - {0x8904, 0}, - {0x8905, 1}, - {0x8906, 2}, - {0x8907, 9846}, - {0x8909, 0}, - {0x890a, 7103}, - {0x890c, 0}, - {0x890d, 1}, - {0x890e, 2}, - {0x890f, 3}, - {0x8910, 1933}, - {0x8912, 1032}, - {0x8913, 7101}, - {0x8915, 0}, - {0x8916, 1}, - {0x8917, 2}, - {0x8918, 3}, - {0x8919, 7100}, - {0x891a, 7094}, - {0x891b, 7102}, - {0x891d, 0}, - {0x891e, 1}, - {0x891f, 2}, - {0x8920, 3}, - {0x8921, 7099}, - {0x8923, 0}, - {0x8924, 1}, - {0x8925, 3271}, - {0x8927, 0}, - {0x8928, 1}, - {0x8929, 2}, - {0x892a, 3707}, - {0x892b, 7105}, - {0x892d, 0}, - {0x892e, 1}, - {0x892f, 2}, - {0x8930, 5945}, - {0x8932, 8161}, - {0x8933, 9659}, - {0x8934, 7104}, - {0x8936, 7106}, - {0x8938, 9662}, - {0x893a, 0}, - {0x893b, 8925}, - {0x893d, 0}, - {0x893e, 1}, - {0x893f, 2}, - {0x8940, 3}, - {0x8941, 7107}, - {0x8943, 0}, - {0x8944, 3922}, - {0x8946, 0}, - {0x8947, 9661}, - {0x8949, 0}, - {0x894a, 1}, - {0x894b, 2}, - {0x894c, 3}, - {0x894d, 4}, - {0x894e, 5}, - {0x894f, 6}, - {0x8950, 7}, - {0x8951, 8}, - {0x8952, 9}, - {0x8953, 10}, - {0x8954, 11}, - {0x8955, 12}, - {0x8956, 7722}, - {0x8958, 0}, - {0x8959, 1}, - {0x895a, 2}, - {0x895b, 3}, - {0x895c, 4}, - {0x895d, 9660}, - {0x895e, 7363}, - {0x895f, 2244}, - {0x8960, 9658}, - {0x8962, 0}, - {0x8963, 1}, - {0x8964, 9663}, - {0x8966, 7108}, - {0x8968, 0}, - {0x8969, 1}, - {0x896a, 8583}, - {0x896c, 9835}, - {0x896e, 0}, - {0x896f, 7807}, - {0x8971, 0}, - {0x8972, 8621}, - {0x8974, 0}, - {0x8975, 1}, - {0x8976, 2}, - {0x8977, 3}, - {0x8978, 4}, - {0x8979, 5}, - {0x897a, 6}, - {0x897b, 7109}, - {0x897d, 0}, - {0x897e, 1}, - {0x897f, 3846}, - {0x8981, 4145}, - {0x8983, 7135}, - {0x8985, 0}, - {0x8986, 1709}, - {0x8988, 0}, - {0x8989, 1}, - {0x898a, 2}, - {0x898b, 8086}, - {0x898d, 0}, - {0x898e, 1}, - {0x898f, 7986}, - {0x8991, 0}, - {0x8992, 1}, - {0x8993, 8324}, - {0x8995, 0}, - {0x8996, 8502}, - {0x8998, 9400}, - {0x899a, 0}, - {0x899b, 1}, - {0x899c, 2}, - {0x899d, 3}, - {0x899e, 4}, - {0x899f, 5}, - {0x89a0, 6}, - {0x89a1, 9402}, - {0x89a3, 0}, - {0x89a4, 1}, - {0x89a5, 2}, - {0x89a6, 9404}, - {0x89a8, 0}, - {0x89a9, 1}, - {0x89aa, 8420}, - {0x89ac, 9401}, - {0x89ae, 0}, - {0x89af, 9405}, - {0x89b1, 0}, - {0x89b2, 9406}, - {0x89b4, 0}, - {0x89b5, 1}, - {0x89b6, 2}, - {0x89b7, 9407}, - {0x89b9, 0}, - {0x89ba, 8146}, - {0x89bc, 0}, - {0x89bd, 8189}, - {0x89bf, 9403}, - {0x89c0, 7981}, - {0x89c1, 2158}, - {0x89c2, 1844}, - {0x89c4, 1855}, - {0x89c5, 2782}, - {0x89c6, 3434}, - {0x89c7, 6458}, - {0x89c8, 2475}, - {0x89c9, 2340}, - {0x89ca, 6459}, - {0x89cb, 6460}, - {0x89cc, 6461}, - {0x89ce, 6462}, - {0x89cf, 6463}, - {0x89d0, 6464}, - {0x89d1, 6465}, - {0x89d2, 2200}, - {0x89d4, 0}, - {0x89d5, 1}, - {0x89d6, 7511}, - {0x89d8, 0}, - {0x89d9, 1}, - {0x89da, 7513}, - {0x89dc, 7514}, - {0x89de, 7512}, - {0x89e0, 0}, - {0x89e1, 1}, - {0x89e2, 2}, - {0x89e3, 2227}, - {0x89e5, 7515}, - {0x89e6, 1320}, - {0x89e8, 0}, - {0x89e9, 1}, - {0x89ea, 2}, - {0x89eb, 7516}, - {0x89ed, 0}, - {0x89ee, 1}, - {0x89ef, 7517}, - {0x89f1, 0}, - {0x89f2, 1}, - {0x89f3, 6592}, - {0x89f4, 9737}, - {0x89f6, 9738}, - {0x89f8, 7828}, - {0x89fa, 0}, - {0x89fb, 1}, - {0x89fc, 2}, - {0x89fd, 3}, - {0x89fe, 4}, - {0x89ff, 5}, - {0x8a00, 4093}, - {0x8a01, 8927}, - {0x8a02, 7883}, - {0x8a03, 7949}, - {0x8a05, 0}, - {0x8a06, 1}, - {0x8a07, 4862}, - {0x8a08, 8055}, - {0x8a0a, 8683}, - {0x8a0c, 8929}, - {0x8a0e, 8559}, - {0x8a10, 8928}, - {0x8a12, 0}, - {0x8a13, 8682}, - {0x8a15, 8930}, - {0x8a16, 8395}, - {0x8a18, 8056}, - {0x8a1a, 0}, - {0x8a1b, 7906}, - {0x8a1d, 8690}, - {0x8a1f, 8528}, - {0x8a21, 0}, - {0x8a22, 1}, - {0x8a23, 8147}, - {0x8a25, 8933}, - {0x8a27, 0}, - {0x8a28, 1}, - {0x8a29, 2}, - {0x8a2a, 7922}, - {0x8a2c, 0}, - {0x8a2d, 8479}, - {0x8a2f, 0}, - {0x8a30, 1}, - {0x8a31, 8669}, - {0x8a33, 0}, - {0x8a34, 8532}, - {0x8a36, 8935}, - {0x8a38, 0}, - {0x8a39, 1}, - {0x8a3a, 8834}, - {0x8a3c, 0}, - {0x8a3d, 1}, - {0x8a3e, 7518}, - {0x8a40, 0}, - {0x8a41, 8934}, - {0x8a43, 0}, - {0x8a44, 1}, - {0x8a45, 2}, - {0x8a46, 8936}, - {0x8a48, 6788}, - {0x8a4a, 0}, - {0x8a4b, 1}, - {0x8a4c, 2}, - {0x8a4d, 3}, - {0x8a4e, 8932}, - {0x8a50, 8810}, - {0x8a52, 8939}, - {0x8a54, 8937}, - {0x8a55, 8381}, - {0x8a57, 0}, - {0x8a58, 8938}, - {0x8a5a, 0}, - {0x8a5b, 8893}, - {0x8a5d, 0}, - {0x8a5e, 7838}, - {0x8a60, 0}, - {0x8a61, 8950}, - {0x8a62, 8679}, - {0x8a63, 8726}, - {0x8a65, 0}, - {0x8a66, 8503}, - {0x8a68, 0}, - {0x8a69, 8492}, - {0x8a6b, 7784}, - {0x8a6c, 8946}, - {0x8a6d, 7991}, - {0x8a6e, 8947}, - {0x8a70, 8943}, - {0x8a71, 8016}, - {0x8a72, 7952}, - {0x8a73, 8648}, - {0x8a75, 8945}, - {0x8a77, 0}, - {0x8a78, 1}, - {0x8a79, 4435}, - {0x8a7b, 0}, - {0x8a7c, 8944}, - {0x8a7e, 0}, - {0x8a7f, 8942}, - {0x8a81, 0}, - {0x8a82, 1}, - {0x8a83, 2}, - {0x8a84, 8941}, - {0x8a85, 8862}, - {0x8a86, 8940}, - {0x8a87, 8162}, - {0x8a89, 4323}, - {0x8a8a, 3631}, - {0x8a8c, 0}, - {0x8a8d, 8446}, - {0x8a8f, 0}, - {0x8a90, 1}, - {0x8a91, 8953}, - {0x8a92, 8954}, - {0x8a93, 3419}, - {0x8a95, 7855}, - {0x8a97, 0}, - {0x8a98, 8758}, - {0x8a9a, 8951}, - {0x8a9c, 0}, - {0x8a9d, 1}, - {0x8a9e, 8765}, - {0x8aa0, 7810}, - {0x8aa1, 8118}, - {0x8aa3, 8612}, - {0x8aa4, 8618}, - {0x8aa5, 8952}, - {0x8aa6, 8529}, - {0x8aa8, 8032}, - {0x8aaa, 0}, - {0x8aab, 1}, - {0x8aac, 8519}, - {0x8aae, 0}, - {0x8aaf, 1}, - {0x8ab0, 8517}, - {0x8ab2, 8156}, - {0x8ab4, 0}, - {0x8ab5, 1}, - {0x8ab6, 8961}, - {0x8ab8, 0}, - {0x8ab9, 7925}, - {0x8abb, 0}, - {0x8abc, 8728}, - {0x8abe, 0}, - {0x8abf, 7878}, - {0x8ac1, 0}, - {0x8ac2, 8960}, - {0x8ac4, 8884}, - {0x8ac6, 0}, - {0x8ac7, 8553}, - {0x8ac9, 8957}, - {0x8acb, 8426}, - {0x8acd, 8948}, - {0x8acf, 8955}, - {0x8ad1, 8956}, - {0x8ad2, 8231}, - {0x8ad4, 0}, - {0x8ad5, 1}, - {0x8ad6, 8288}, - {0x8ad7, 8959}, - {0x8ad9, 0}, - {0x8ada, 1}, - {0x8adb, 8958}, - {0x8adc, 7879}, - {0x8ade, 8972}, - {0x8ae0, 0}, - {0x8ae1, 1}, - {0x8ae2, 8949}, - {0x8ae4, 8966}, - {0x8ae6, 8970}, - {0x8ae7, 8659}, - {0x8ae9, 0}, - {0x8aea, 1}, - {0x8aeb, 8963}, - {0x8aed, 8967}, - {0x8aee, 8971}, - {0x8af0, 0}, - {0x8af1, 8031}, - {0x8af3, 8969}, - {0x8af5, 0}, - {0x8af6, 8962}, - {0x8af7, 7940}, - {0x8af8, 8861}, - {0x8afa, 8699}, - {0x8afc, 8968}, - {0x8afe, 8364}, - {0x8b00, 8334}, - {0x8b01, 8965}, - {0x8b02, 8599}, - {0x8b04, 8561}, - {0x8b05, 8856}, - {0x8b07, 5948}, - {0x8b09, 0}, - {0x8b0a, 8023}, - {0x8b0c, 0}, - {0x8b0d, 1}, - {0x8b0e, 8322}, - {0x8b10, 8977}, - {0x8b12, 0}, - {0x8b13, 1}, - {0x8b14, 8964}, - {0x8b16, 8975}, - {0x8b17, 7733}, - {0x8b19, 8401}, - {0x8b1a, 8976}, - {0x8b1b, 8099}, - {0x8b1d, 8662}, - {0x8b1f, 0}, - {0x8b20, 1}, - {0x8b21, 8710}, - {0x8b23, 0}, - {0x8b24, 1}, - {0x8b25, 2}, - {0x8b26, 7519}, - {0x8b28, 8973}, - {0x8b2a, 0}, - {0x8b2b, 8978}, - {0x8b2c, 8333}, - {0x8b2d, 8979}, - {0x8b2f, 0}, - {0x8b30, 1}, - {0x8b31, 2}, - {0x8b32, 3}, - {0x8b33, 8931}, - {0x8b35, 0}, - {0x8b36, 1}, - {0x8b37, 2}, - {0x8b38, 3}, - {0x8b39, 8122}, - {0x8b3b, 0}, - {0x8b3c, 1}, - {0x8b3d, 2}, - {0x8b3e, 8312}, - {0x8b40, 0}, - {0x8b41, 1}, - {0x8b42, 2}, - {0x8b43, 3}, - {0x8b44, 4}, - {0x8b45, 5}, - {0x8b46, 6}, - {0x8b47, 7}, - {0x8b48, 8}, - {0x8b49, 8840}, - {0x8b4b, 0}, - {0x8b4c, 1}, - {0x8b4d, 2}, - {0x8b4e, 8982}, - {0x8b4f, 8043}, - {0x8b51, 0}, - {0x8b52, 1}, - {0x8b53, 2}, - {0x8b54, 3}, - {0x8b55, 4}, - {0x8b56, 8980}, - {0x8b58, 8496}, - {0x8b59, 8981}, - {0x8b5a, 8552}, - {0x8b5c, 8388}, - {0x8b5e, 0}, - {0x8b5f, 1}, - {0x8b60, 2}, - {0x8b61, 3}, - {0x8b62, 4}, - {0x8b63, 5}, - {0x8b64, 6}, - {0x8b65, 7}, - {0x8b66, 2270}, - {0x8b68, 0}, - {0x8b69, 1}, - {0x8b6a, 2}, - {0x8b6b, 8984}, - {0x8b6c, 3016}, - {0x8b6e, 0}, - {0x8b6f, 8729}, - {0x8b70, 8727}, - {0x8b72, 0}, - {0x8b73, 1}, - {0x8b74, 8405}, - {0x8b76, 0}, - {0x8b77, 8010}, - {0x8b79, 0}, - {0x8b7a, 1}, - {0x8b7b, 2}, - {0x8b7c, 3}, - {0x8b7d, 8768}, - {0x8b7f, 0}, - {0x8b80, 7891}, - {0x8b82, 0}, - {0x8b83, 1}, - {0x8b84, 2}, - {0x8b85, 3}, - {0x8b86, 4}, - {0x8b87, 5}, - {0x8b88, 6}, - {0x8b89, 7}, - {0x8b8a, 7753}, - {0x8b8c, 0}, - {0x8b8d, 1}, - {0x8b8e, 9755}, - {0x8b90, 0}, - {0x8b91, 1}, - {0x8b92, 7789}, - {0x8b93, 8440}, - {0x8b95, 8187}, - {0x8b96, 8985}, - {0x8b98, 0}, - {0x8b99, 1}, - {0x8b9a, 2}, - {0x8b9b, 3}, - {0x8b9c, 8974}, - {0x8b9e, 8983}, - {0x8ba0, 4887}, - {0x8ba1, 2105}, - {0x8ba2, 1512}, - {0x8ba3, 1719}, - {0x8ba4, 3242}, - {0x8ba5, 2072}, - {0x8ba6, 4888}, - {0x8ba7, 4889}, - {0x8ba8, 3625}, - {0x8ba9, 3230}, - {0x8baa, 4890}, - {0x8bab, 3100}, - {0x8bad, 4062}, - {0x8bae, 4208}, - {0x8baf, 4063}, - {0x8bb0, 2106}, - {0x8bb2, 2179}, - {0x8bb3, 2041}, - {0x8bb4, 4891}, - {0x8bb5, 4892}, - {0x8bb6, 4081}, - {0x8bb7, 4893}, - {0x8bb8, 4024}, - {0x8bb9, 1582}, - {0x8bba, 2690}, - {0x8bbc, 3524}, - {0x8bbd, 1674}, - {0x8bbe, 3361}, - {0x8bbf, 1632}, - {0x8bc0, 2342}, - {0x8bc1, 4515}, - {0x8bc2, 4894}, - {0x8bc3, 4895}, - {0x8bc4, 3039}, - {0x8bc5, 4676}, - {0x8bc6, 3405}, - {0x8bc8, 4426}, - {0x8bc9, 3540}, - {0x8bca, 4496}, - {0x8bcb, 4896}, - {0x8bcc, 4574}, - {0x8bcd, 1357}, - {0x8bce, 4898}, - {0x8bcf, 4897}, - {0x8bd1, 4210}, - {0x8bd2, 4899}, - {0x8bd3, 4900}, - {0x8bd4, 4901}, - {0x8bd5, 3435}, - {0x8bd6, 4902}, - {0x8bd7, 3394}, - {0x8bd8, 4903}, - {0x8bd9, 4904}, - {0x8bda, 1268}, - {0x8bdb, 4590}, - {0x8bdc, 4905}, - {0x8bdd, 1989}, - {0x8bde, 1423}, - {0x8bdf, 4906}, - {0x8be0, 4907}, - {0x8be1, 1863}, - {0x8be2, 4056}, - {0x8be3, 4207}, - {0x8be4, 4908}, - {0x8be5, 1726}, - {0x8be6, 3927}, - {0x8be7, 1206}, - {0x8be8, 4909}, - {0x8be9, 4910}, - {0x8beb, 2236}, - {0x8bec, 3819}, - {0x8bed, 4308}, - {0x8bee, 4911}, - {0x8bef, 3842}, - {0x8bf0, 4912}, - {0x8bf1, 4282}, - {0x8bf2, 2042}, - {0x8bf3, 4913}, - {0x8bf4, 3498}, - {0x8bf5, 3525}, - {0x8bf6, 4914}, - {0x8bf7, 3176}, - {0x8bf8, 4589}, - {0x8bf9, 4915}, - {0x8bfa, 2934}, - {0x8bfb, 1536}, - {0x8bfc, 4916}, - {0x8bfd, 1641}, - {0x8bfe, 2395}, - {0x8bff, 4917}, - {0x8c00, 4918}, - {0x8c01, 3490}, - {0x8c02, 4919}, - {0x8c03, 1496}, - {0x8c04, 4920}, - {0x8c05, 2571}, - {0x8c06, 4632}, - {0x8c07, 4921}, - {0x8c08, 3595}, - {0x8c0a, 4209}, - {0x8c0b, 2836}, - {0x8c0c, 4922}, - {0x8c0d, 1502}, - {0x8c0e, 2022}, - {0x8c0f, 4923}, - {0x8c10, 3966}, - {0x8c11, 4924}, - {0x8c12, 4925}, - {0x8c13, 3788}, - {0x8c14, 4926}, - {0x8c15, 4927}, - {0x8c16, 4928}, - {0x8c17, 1214}, - {0x8c18, 4931}, - {0x8c19, 4929}, - {0x8c1a, 4113}, - {0x8c1b, 4930}, - {0x8c1c, 2778}, - {0x8c1d, 4932}, - {0x8c1f, 4933}, - {0x8c20, 4934}, - {0x8c21, 4935}, - {0x8c22, 3974}, - {0x8c23, 4140}, - {0x8c24, 1028}, - {0x8c25, 4936}, - {0x8c26, 3112}, - {0x8c27, 4937}, - {0x8c28, 2248}, - {0x8c29, 2726}, - {0x8c2a, 4938}, - {0x8c2b, 4939}, - {0x8c2c, 2818}, - {0x8c2d, 3594}, - {0x8c2e, 4940}, - {0x8c2f, 4941}, - {0x8c30, 2473}, - {0x8c31, 3062}, - {0x8c32, 4942}, - {0x8c33, 4943}, - {0x8c34, 3121}, - {0x8c35, 4944}, - {0x8c36, 4945}, - {0x8c37, 1825}, - {0x8c39, 0}, - {0x8c3a, 1}, - {0x8c3b, 2}, - {0x8c3c, 3}, - {0x8c3d, 4}, - {0x8c3e, 5}, - {0x8c3f, 6}, - {0x8c40, 7}, - {0x8c41, 2050}, - {0x8c43, 0}, - {0x8c44, 1}, - {0x8c45, 2}, - {0x8c46, 1528}, - {0x8c47, 7414}, - {0x8c48, 8392}, - {0x8c49, 7415}, - {0x8c4b, 0}, - {0x8c4c, 3732}, - {0x8c4e, 0}, - {0x8c4f, 1}, - {0x8c50, 7933}, - {0x8c52, 0}, - {0x8c53, 1}, - {0x8c54, 2}, - {0x8c55, 7445}, - {0x8c57, 0}, - {0x8c58, 1}, - {0x8c59, 2}, - {0x8c5a, 6544}, - {0x8c5c, 0}, - {0x8c5d, 1}, - {0x8c5e, 2}, - {0x8c5f, 3}, - {0x8c60, 4}, - {0x8c61, 3936}, - {0x8c62, 2004}, - {0x8c64, 0}, - {0x8c65, 1}, - {0x8c66, 2}, - {0x8c67, 3}, - {0x8c68, 4}, - {0x8c69, 5}, - {0x8c6a, 1911}, - {0x8c6b, 4328}, - {0x8c6d, 0}, - {0x8c6e, 1}, - {0x8c6f, 2}, - {0x8c70, 3}, - {0x8c71, 4}, - {0x8c72, 5}, - {0x8c73, 5597}, - {0x8c75, 0}, - {0x8c76, 1}, - {0x8c77, 2}, - {0x8c78, 7504}, - {0x8c79, 1043}, - {0x8c7a, 1209}, - {0x8c7c, 0}, - {0x8c7d, 1}, - {0x8c7e, 2}, - {0x8c7f, 3}, - {0x8c80, 4}, - {0x8c81, 5}, - {0x8c82, 7505}, - {0x8c84, 0}, - {0x8c85, 7507}, - {0x8c87, 0}, - {0x8c88, 1}, - {0x8c89, 1928}, - {0x8c8a, 7506}, - {0x8c8c, 2743}, - {0x8c8e, 0}, - {0x8c8f, 1}, - {0x8c90, 2}, - {0x8c91, 3}, - {0x8c92, 4}, - {0x8c93, 5}, - {0x8c94, 7509}, - {0x8c96, 0}, - {0x8c97, 1}, - {0x8c98, 7508}, - {0x8c9a, 0}, - {0x8c9b, 1}, - {0x8c9c, 2}, - {0x8c9d, 7739}, - {0x8c9e, 8831}, - {0x8ca0, 7948}, - {0x8ca1, 7769}, - {0x8ca2, 7972}, - {0x8ca4, 0}, - {0x8ca5, 1}, - {0x8ca6, 2}, - {0x8ca7, 8378}, - {0x8ca8, 8037}, - {0x8ca9, 7920}, - {0x8caa, 8548}, - {0x8cab, 7984}, - {0x8cac, 8801}, - {0x8cae, 0}, - {0x8caf, 8866}, - {0x8cb0, 9387}, - {0x8cb2, 9391}, - {0x8cb3, 7912}, - {0x8cb4, 7993}, - {0x8cb6, 7752}, - {0x8cb7, 8304}, - {0x8cb8, 7848}, - {0x8cba, 9388}, - {0x8cbb, 7927}, - {0x8cbc, 8566}, - {0x8cbd, 9389}, - {0x8cbf, 8315}, - {0x8cc0, 8005}, - {0x8cc1, 9386}, - {0x8cc2, 8267}, - {0x8cc3, 8239}, - {0x8cc4, 8026}, - {0x8cc5, 9392}, - {0x8cc7, 8887}, - {0x8cc8, 8063}, - {0x8cca, 8805}, - {0x8ccc, 0}, - {0x8ccd, 1}, - {0x8cce, 2}, - {0x8ccf, 3}, - {0x8cd0, 4}, - {0x8cd1, 9394}, - {0x8cd2, 8475}, - {0x8cd3, 7761}, - {0x8cd5, 9396}, - {0x8cd7, 0}, - {0x8cd8, 1}, - {0x8cd9, 2}, - {0x8cda, 9395}, - {0x8cdc, 7839}, - {0x8cde, 8472}, - {0x8ce0, 8372}, - {0x8ce1, 9135}, - {0x8ce2, 8635}, - {0x8ce3, 8306}, - {0x8ce4, 8085}, - {0x8ce6, 7946}, - {0x8ce7, 9398}, - {0x8ce9, 0}, - {0x8cea, 8849}, - {0x8ceb, 9397}, - {0x8cec, 8824}, - {0x8ced, 7892}, - {0x8cef, 0}, - {0x8cf0, 1}, - {0x8cf1, 2}, - {0x8cf2, 3}, - {0x8cf3, 4}, - {0x8cf4, 8179}, - {0x8cf6, 0}, - {0x8cf7, 1}, - {0x8cf8, 2}, - {0x8cf9, 3}, - {0x8cfa, 8873}, - {0x8cfb, 9399}, - {0x8cfc, 7976}, - {0x8cfd, 8457}, - {0x8cfe, 8903}, - {0x8d01, 0}, - {0x8d02, 1}, - {0x8d03, 2}, - {0x8d04, 9390}, - {0x8d05, 8881}, - {0x8d07, 0}, - {0x8d08, 8806}, - {0x8d0a, 8795}, - {0x8d0b, 8900}, - {0x8d0d, 8469}, - {0x8d0f, 8746}, - {0x8d10, 9393}, - {0x8d12, 0}, - {0x8d13, 1}, - {0x8d14, 2}, - {0x8d15, 3}, - {0x8d16, 8509}, - {0x8d18, 0}, - {0x8d19, 1}, - {0x8d1a, 2}, - {0x8d1b, 7957}, - {0x8d1c, 8796}, - {0x8d1d, 1053}, - {0x8d1e, 4491}, - {0x8d1f, 1717}, - {0x8d21, 1802}, - {0x8d22, 1165}, - {0x8d23, 4403}, - {0x8d24, 3898}, - {0x8d25, 999}, - {0x8d26, 4460}, - {0x8d27, 2058}, - {0x8d28, 4553}, - {0x8d29, 1620}, - {0x8d2a, 3587}, - {0x8d2b, 3029}, - {0x8d2c, 1098}, - {0x8d2d, 1811}, - {0x8d2e, 4603}, - {0x8d2f, 1850}, - {0x8d30, 1598}, - {0x8d31, 2157}, - {0x8d32, 6444}, - {0x8d33, 6445}, - {0x8d34, 3660}, - {0x8d35, 1868}, - {0x8d36, 6446}, - {0x8d37, 1406}, - {0x8d38, 2744}, - {0x8d39, 1646}, - {0x8d3a, 1935}, - {0x8d3b, 6447}, - {0x8d3c, 4407}, - {0x8d3d, 6448}, - {0x8d3e, 2121}, - {0x8d3f, 2036}, - {0x8d40, 6449}, - {0x8d41, 2599}, - {0x8d42, 2655}, - {0x8d43, 4386}, - {0x8d44, 4647}, - {0x8d45, 6450}, - {0x8d46, 6451}, - {0x8d47, 6454}, - {0x8d48, 6452}, - {0x8d49, 6453}, - {0x8d4a, 3351}, - {0x8d4b, 1710}, - {0x8d4c, 1539}, - {0x8d4d, 6455}, - {0x8d4e, 3457}, - {0x8d4f, 3334}, - {0x8d50, 1360}, - {0x8d52, 0}, - {0x8d53, 5691}, - {0x8d54, 2979}, - {0x8d55, 6456}, - {0x8d56, 2464}, - {0x8d58, 4629}, - {0x8d59, 6457}, - {0x8d5a, 4617}, - {0x8d5b, 3287}, - {0x8d5c, 4745}, - {0x8d5d, 4739}, - {0x8d5e, 4385}, - {0x8d60, 4412}, - {0x8d61, 3325}, - {0x8d62, 4243}, - {0x8d63, 1742}, - {0x8d64, 1285}, - {0x8d66, 3355}, - {0x8d67, 7412}, - {0x8d69, 0}, - {0x8d6a, 1}, - {0x8d6b, 1932}, - {0x8d6d, 7413}, - {0x8d6f, 0}, - {0x8d70, 4668}, - {0x8d72, 0}, - {0x8d73, 7407}, - {0x8d74, 1707}, - {0x8d75, 4469}, - {0x8d76, 1738}, - {0x8d77, 3087}, - {0x8d79, 0}, - {0x8d7a, 1}, - {0x8d7b, 2}, - {0x8d7c, 3}, - {0x8d7d, 4}, - {0x8d7e, 5}, - {0x8d7f, 6}, - {0x8d80, 7}, - {0x8d81, 1256}, - {0x8d83, 0}, - {0x8d84, 7408}, - {0x8d85, 1233}, - {0x8d87, 0}, - {0x8d88, 1}, - {0x8d89, 2}, - {0x8d8a, 4352}, - {0x8d8b, 3188}, - {0x8d8d, 0}, - {0x8d8e, 1}, - {0x8d8f, 2}, - {0x8d90, 3}, - {0x8d91, 7410}, - {0x8d93, 0}, - {0x8d94, 7409}, - {0x8d95, 7956}, - {0x8d97, 0}, - {0x8d98, 1}, - {0x8d99, 8826}, - {0x8d9b, 0}, - {0x8d9c, 1}, - {0x8d9d, 2}, - {0x8d9e, 3}, - {0x8d9f, 3614}, - {0x8da1, 0}, - {0x8da2, 1}, - {0x8da3, 3199}, - {0x8da5, 0}, - {0x8da6, 1}, - {0x8da7, 2}, - {0x8da8, 8430}, - {0x8daa, 0}, - {0x8dab, 1}, - {0x8dac, 2}, - {0x8dad, 3}, - {0x8dae, 4}, - {0x8daf, 5}, - {0x8db0, 6}, - {0x8db1, 7411}, - {0x8db2, 9720}, - {0x8db3, 4672}, - {0x8db4, 2944}, - {0x8db5, 7452}, - {0x8db7, 0}, - {0x8db8, 7447}, - {0x8dba, 7455}, - {0x8dbc, 7454}, - {0x8dbe, 4537}, - {0x8dbf, 7453}, - {0x8dc1, 0}, - {0x8dc2, 1}, - {0x8dc3, 4353}, - {0x8dc4, 7456}, - {0x8dc6, 7464}, - {0x8dc8, 0}, - {0x8dc9, 1}, - {0x8dca, 2}, - {0x8dcb, 986}, - {0x8dcc, 1497}, - {0x8dce, 7461}, - {0x8dcf, 7462}, - {0x8dd1, 2973}, - {0x8dd3, 0}, - {0x8dd4, 1}, - {0x8dd5, 2}, - {0x8dd6, 7457}, - {0x8dd7, 7458}, - {0x8dd9, 0}, - {0x8dda, 7459}, - {0x8ddb, 7463}, - {0x8ddd, 2319}, - {0x8dde, 7460}, - {0x8ddf, 1781}, - {0x8de1, 0}, - {0x8de2, 1}, - {0x8de3, 7468}, - {0x8de4, 7471}, - {0x8de6, 0}, - {0x8de7, 1}, - {0x8de8, 2420}, - {0x8dea, 1867}, - {0x8deb, 7448}, - {0x8dec, 7465}, - {0x8dee, 0}, - {0x8def, 2654}, - {0x8df1, 0}, - {0x8df2, 1}, - {0x8df3, 3659}, - {0x8df5, 2156}, - {0x8df7, 7466}, - {0x8df8, 7467}, - {0x8df9, 7469}, - {0x8dfa, 1572}, - {0x8dfb, 7470}, - {0x8dfd, 7473}, - {0x8dff, 0}, - {0x8e01, 0}, - {0x8e02, 1}, - {0x8e03, 2}, - {0x8e04, 3}, - {0x8e05, 7449}, - {0x8e07, 0}, - {0x8e08, 1}, - {0x8e09, 7472}, - {0x8e0a, 4256}, - {0x8e0c, 1297}, - {0x8e0e, 0}, - {0x8e0f, 3575}, - {0x8e10, 8084}, - {0x8e12, 0}, - {0x8e13, 1}, - {0x8e14, 7474}, - {0x8e16, 0}, - {0x8e17, 1}, - {0x8e18, 2}, - {0x8e19, 3}, - {0x8e1a, 4}, - {0x8e1b, 5}, - {0x8e1c, 6}, - {0x8e1d, 7475}, - {0x8e1e, 2320}, - {0x8e1f, 7476}, - {0x8e21, 0}, - {0x8e22, 3634}, - {0x8e23, 7479}, - {0x8e25, 0}, - {0x8e26, 1}, - {0x8e27, 2}, - {0x8e28, 3}, - {0x8e29, 1167}, - {0x8e2a, 4662}, - {0x8e2c, 7477}, - {0x8e2e, 7478}, - {0x8e2f, 7480}, - {0x8e31, 7486}, - {0x8e33, 0}, - {0x8e34, 8752}, - {0x8e35, 7484}, - {0x8e37, 0}, - {0x8e38, 1}, - {0x8e39, 7483}, - {0x8e3a, 7481}, - {0x8e3c, 0}, - {0x8e3d, 7485}, - {0x8e3f, 0}, - {0x8e40, 7482}, - {0x8e41, 7488}, - {0x8e42, 7489}, - {0x8e44, 3638}, - {0x8e46, 0}, - {0x8e47, 5947}, - {0x8e48, 1433}, - {0x8e49, 7487}, - {0x8e4a, 7492}, - {0x8e4b, 3574}, - {0x8e4c, 9725}, - {0x8e4e, 0}, - {0x8e4f, 1}, - {0x8e50, 2}, - {0x8e51, 7490}, - {0x8e52, 7491}, - {0x8e54, 0}, - {0x8e55, 9728}, - {0x8e57, 0}, - {0x8e58, 1}, - {0x8e59, 7450}, - {0x8e5b, 0}, - {0x8e5c, 1}, - {0x8e5d, 2}, - {0x8e5e, 3}, - {0x8e5f, 4}, - {0x8e60, 5}, - {0x8e61, 6}, - {0x8e62, 7}, - {0x8e63, 9734}, - {0x8e65, 0}, - {0x8e66, 1069}, - {0x8e68, 0}, - {0x8e69, 7451}, - {0x8e6b, 0}, - {0x8e6c, 1446}, - {0x8e6d, 1195}, - {0x8e6f, 7496}, - {0x8e70, 7493}, - {0x8e72, 1558}, - {0x8e74, 7497}, - {0x8e76, 7494}, - {0x8e78, 0}, - {0x8e79, 1}, - {0x8e7a, 9727}, - {0x8e7c, 7495}, - {0x8e7e, 0}, - {0x8e7f, 1373}, - {0x8e81, 4397}, - {0x8e83, 0}, - {0x8e84, 1}, - {0x8e85, 7498}, - {0x8e87, 1310}, - {0x8e89, 9724}, - {0x8e8a, 7820}, - {0x8e8b, 9730}, - {0x8e8d, 8781}, - {0x8e8f, 7499}, - {0x8e90, 7501}, - {0x8e91, 9732}, - {0x8e92, 9726}, - {0x8e93, 9731}, - {0x8e94, 7500}, - {0x8e96, 0}, - {0x8e97, 1}, - {0x8e98, 2}, - {0x8e99, 3}, - {0x8e9a, 9729}, - {0x8e9c, 7502}, - {0x8e9e, 7503}, - {0x8ea0, 0}, - {0x8ea1, 9733}, - {0x8ea3, 0}, - {0x8ea4, 1}, - {0x8ea5, 7843}, - {0x8ea6, 9736}, - {0x8ea8, 0}, - {0x8ea9, 1}, - {0x8eaa, 9735}, - {0x8eab, 3366}, - {0x8eac, 1795}, - {0x8eae, 0}, - {0x8eaf, 3192}, - {0x8eb1, 0}, - {0x8eb2, 1570}, - {0x8eb4, 0}, - {0x8eb5, 1}, - {0x8eb6, 2}, - {0x8eb7, 3}, - {0x8eb8, 4}, - {0x8eb9, 5}, - {0x8eba, 3612}, - {0x8ebc, 0}, - {0x8ebd, 1}, - {0x8ebe, 2}, - {0x8ebf, 3}, - {0x8ec0, 8432}, - {0x8ec2, 0}, - {0x8ec3, 1}, - {0x8ec4, 2}, - {0x8ec5, 3}, - {0x8ec6, 4}, - {0x8ec7, 5}, - {0x8ec8, 6}, - {0x8ec9, 7}, - {0x8eca, 7803}, - {0x8ecb, 8807}, - {0x8ecc, 7990}, - {0x8ecd, 8150}, - {0x8ece, 6392}, - {0x8ed0, 0}, - {0x8ed1, 1}, - {0x8ed2, 8672}, - {0x8ed4, 9356}, - {0x8ed6, 0}, - {0x8ed7, 1}, - {0x8ed8, 2}, - {0x8ed9, 3}, - {0x8eda, 4}, - {0x8edb, 9357}, - {0x8edd, 0}, - {0x8ede, 1}, - {0x8edf, 8450}, - {0x8ee1, 0}, - {0x8ee2, 1}, - {0x8ee3, 2}, - {0x8ee4, 9364}, - {0x8ee6, 0}, - {0x8ee7, 1}, - {0x8ee8, 2}, - {0x8ee9, 3}, - {0x8eea, 4}, - {0x8eeb, 9363}, - {0x8eed, 0}, - {0x8eee, 1}, - {0x8eef, 2}, - {0x8ef0, 3}, - {0x8ef1, 4}, - {0x8ef2, 9358}, - {0x8ef4, 0}, - {0x8ef5, 1}, - {0x8ef6, 2}, - {0x8ef7, 3}, - {0x8ef8, 8857}, - {0x8ef9, 9361}, - {0x8efa, 9366}, - {0x8efb, 9359}, - {0x8efc, 9362}, - {0x8efe, 9367}, - {0x8f01, 0}, - {0x8f02, 1}, - {0x8f03, 8113}, - {0x8f05, 9370}, - {0x8f07, 9369}, - {0x8f09, 8792}, - {0x8f0a, 9368}, - {0x8f0c, 0}, - {0x8f0d, 1}, - {0x8f0e, 2}, - {0x8f0f, 3}, - {0x8f10, 4}, - {0x8f11, 5}, - {0x8f12, 9371}, - {0x8f14, 7945}, - {0x8f15, 8422}, - {0x8f17, 0}, - {0x8f18, 1}, - {0x8f19, 2}, - {0x8f1a, 3}, - {0x8f1b, 8230}, - {0x8f1c, 9375}, - {0x8f1d, 8025}, - {0x8f1e, 9373}, - {0x8f1f, 9374}, - {0x8f21, 0}, - {0x8f22, 1}, - {0x8f23, 2}, - {0x8f24, 3}, - {0x8f25, 7995}, - {0x8f26, 9372}, - {0x8f28, 0}, - {0x8f29, 7738}, - {0x8f2a, 8283}, - {0x8f2c, 0}, - {0x8f2d, 1}, - {0x8f2e, 2}, - {0x8f2f, 8048}, - {0x8f31, 0}, - {0x8f32, 1}, - {0x8f33, 9376}, - {0x8f35, 0}, - {0x8f36, 1}, - {0x8f37, 2}, - {0x8f38, 8507}, - {0x8f3a, 0}, - {0x8f3b, 7943}, - {0x8f3d, 0}, - {0x8f3e, 8816}, - {0x8f3f, 8759}, - {0x8f41, 0}, - {0x8f42, 9426}, - {0x8f44, 8627}, - {0x8f45, 8773}, - {0x8f46, 9377}, - {0x8f48, 0}, - {0x8f49, 8872}, - {0x8f4b, 0}, - {0x8f4c, 1}, - {0x8f4d, 8828}, - {0x8f4e, 8112}, - {0x8f50, 0}, - {0x8f51, 1}, - {0x8f52, 2}, - {0x8f53, 3}, - {0x8f54, 9378}, - {0x8f56, 0}, - {0x8f57, 1}, - {0x8f58, 2}, - {0x8f59, 3}, - {0x8f5a, 4}, - {0x8f5b, 5}, - {0x8f5c, 6}, - {0x8f5d, 7}, - {0x8f5e, 8}, - {0x8f5f, 8006}, - {0x8f61, 9088}, - {0x8f62, 9365}, - {0x8f64, 9360}, - {0x8f66, 1242}, - {0x8f67, 4417}, - {0x8f68, 1861}, - {0x8f69, 4036}, - {0x8f6b, 6369}, - {0x8f6c, 4615}, - {0x8f6d, 6370}, - {0x8f6e, 2685}, - {0x8f6f, 3272}, - {0x8f70, 1947}, - {0x8f71, 6371}, - {0x8f72, 6372}, - {0x8f73, 6373}, - {0x8f74, 4576}, - {0x8f75, 6374}, - {0x8f76, 6375}, - {0x8f77, 6377}, - {0x8f78, 6376}, - {0x8f79, 6378}, - {0x8f7a, 6379}, - {0x8f7b, 3166}, - {0x8f7c, 6380}, - {0x8f7d, 4379}, - {0x8f7e, 6381}, - {0x8f7f, 2207}, - {0x8f81, 6382}, - {0x8f82, 6383}, - {0x8f83, 2208}, - {0x8f84, 6384}, - {0x8f85, 1699}, - {0x8f86, 2567}, - {0x8f87, 6385}, - {0x8f88, 1051}, - {0x8f89, 2025}, - {0x8f8a, 1870}, - {0x8f8b, 6386}, - {0x8f8d, 6387}, - {0x8f8e, 6388}, - {0x8f8f, 6389}, - {0x8f90, 1685}, - {0x8f91, 2080}, - {0x8f93, 3451}, - {0x8f94, 5492}, - {0x8f95, 4338}, - {0x8f96, 3882}, - {0x8f97, 4440}, - {0x8f98, 6390}, - {0x8f99, 4479}, - {0x8f9a, 6391}, - {0x8f9b, 3980}, - {0x8f9c, 1813}, - {0x8f9e, 1354}, - {0x8f9f, 1090}, - {0x8fa1, 0}, - {0x8fa2, 1}, - {0x8fa3, 2460}, - {0x8fa5, 0}, - {0x8fa6, 7728}, - {0x8fa8, 1103}, - {0x8fa9, 1104}, - {0x8fab, 1105}, - {0x8fad, 7837}, - {0x8fae, 7755}, - {0x8faf, 7754}, - {0x8fb0, 1250}, - {0x8fb1, 3267}, - {0x8fb2, 8362}, - {0x8fb4, 0}, - {0x8fb5, 1}, - {0x8fb6, 5949}, - {0x8fb8, 0}, - {0x8fb9, 1096}, - {0x8fbb, 0}, - {0x8fbc, 1}, - {0x8fbd, 2578}, - {0x8fbe, 1394}, - {0x8fc0, 0}, - {0x8fc1, 3109}, - {0x8fc2, 4285}, - {0x8fc4, 3096}, - {0x8fc5, 4065}, - {0x8fc7, 1878}, - {0x8fc8, 2716}, - {0x8fca, 0}, - {0x8fcb, 1}, - {0x8fcc, 2}, - {0x8fcd, 3}, - {0x8fce, 4242}, - {0x8fd0, 4366}, - {0x8fd1, 2253}, - {0x8fd3, 5950}, - {0x8fd4, 1618}, - {0x8fd5, 5951}, - {0x8fd7, 0}, - {0x8fd8, 1998}, - {0x8fd9, 4483}, - {0x8fdb, 2249}, - {0x8fdc, 4345}, - {0x8fdd, 3764}, - {0x8fde, 2549}, - {0x8fdf, 1278}, - {0x8fe1, 0}, - {0x8fe2, 3657}, - {0x8fe4, 5954}, - {0x8fe5, 5952}, - {0x8fe6, 5956}, - {0x8fe8, 5958}, - {0x8fe9, 5955}, - {0x8fea, 1456}, - {0x8feb, 3047}, - {0x8fed, 1501}, - {0x8fee, 5953}, - {0x8ff0, 3469}, - {0x8ff2, 0}, - {0x8ff3, 5957}, - {0x8ff4, 9851}, - {0x8ff6, 0}, - {0x8ff7, 2777}, - {0x8ff8, 1070}, - {0x8ff9, 2070}, - {0x8ffb, 0}, - {0x8ffc, 1}, - {0x8ffd, 4628}, - {0x8fff, 0}, - {0x9000, 3708}, - {0x9001, 3522}, - {0x9002, 3425}, - {0x9003, 3622}, - {0x9004, 5960}, - {0x9005, 5959}, - {0x9006, 2889}, - {0x9008, 0}, - {0x9009, 4042}, - {0x900a, 4064}, - {0x900b, 5961}, - {0x900d, 5964}, - {0x900f, 3689}, - {0x9010, 4591}, - {0x9011, 5963}, - {0x9012, 1470}, - {0x9014, 3695}, - {0x9015, 9202}, - {0x9016, 5965}, - {0x9017, 1529}, - {0x9019, 8830}, - {0x901a, 3673}, - {0x901b, 1853}, - {0x901d, 3420}, - {0x901e, 1270}, - {0x901f, 3534}, - {0x9020, 4399}, - {0x9021, 5966}, - {0x9022, 1671}, - {0x9023, 8217}, - {0x9025, 0}, - {0x9026, 5962}, - {0x9028, 0}, - {0x9029, 1}, - {0x902a, 2}, - {0x902b, 3}, - {0x902c, 4}, - {0x902d, 5969}, - {0x902e, 1409}, - {0x902f, 5970}, - {0x9031, 0}, - {0x9032, 8123}, - {0x9034, 0}, - {0x9035, 5967}, - {0x9036, 5968}, - {0x9038, 4196}, - {0x903a, 0}, - {0x903b, 2694}, - {0x903c, 1071}, - {0x903e, 4295}, - {0x9040, 0}, - {0x9041, 1564}, - {0x9042, 3553}, - {0x9044, 5971}, - {0x9046, 0}, - {0x9047, 4315}, - {0x9049, 0}, - {0x904a, 1}, - {0x904b, 8787}, - {0x904d, 1106}, - {0x904e, 7998}, - {0x904f, 1587}, - {0x9050, 5974}, - {0x9051, 5972}, - {0x9052, 5973}, - {0x9053, 1441}, - {0x9054, 7846}, - {0x9055, 8590}, - {0x9057, 4172}, - {0x9058, 5976}, - {0x905a, 0}, - {0x905b, 5978}, - {0x905c, 8684}, - {0x905e, 7870}, - {0x9060, 8778}, - {0x9062, 5977}, - {0x9063, 3119}, - {0x9065, 4138}, - {0x9067, 0}, - {0x9068, 5975}, - {0x9069, 8499}, - {0x906b, 0}, - {0x906c, 1}, - {0x906d, 4389}, - {0x906e, 4475}, - {0x9070, 0}, - {0x9071, 1}, - {0x9072, 7812}, - {0x9074, 5980}, - {0x9075, 4686}, - {0x9077, 8399}, - {0x9078, 8674}, - {0x907a, 8719}, - {0x907c, 8233}, - {0x907d, 5981}, - {0x907f, 1093}, - {0x9080, 4132}, - {0x9081, 8307}, - {0x9082, 5982}, - {0x9083, 5984}, - {0x9084, 8021}, - {0x9086, 0}, - {0x9087, 9201}, - {0x9088, 5983}, - {0x908a, 7750}, - {0x908b, 5985}, - {0x908d, 0}, - {0x908e, 1}, - {0x908f, 8291}, - {0x9090, 9203}, - {0x9091, 4191}, - {0x9093, 1452}, - {0x9095, 6167}, - {0x9097, 4967}, - {0x9099, 4970}, - {0x909b, 4968}, - {0x909d, 4969}, - {0x909f, 0}, - {0x90a0, 1}, - {0x90a1, 4972}, - {0x90a2, 3994}, - {0x90a3, 2858}, - {0x90a5, 0}, - {0x90a6, 1017}, - {0x90a8, 0}, - {0x90a9, 1}, - {0x90aa, 3963}, - {0x90ac, 4971}, - {0x90ae, 4271}, - {0x90af, 1889}, - {0x90b0, 4978}, - {0x90b1, 3182}, - {0x90b3, 4974}, - {0x90b4, 4973}, - {0x90b5, 3348}, - {0x90b6, 4975}, - {0x90b8, 4977}, - {0x90b9, 4667}, - {0x90ba, 4976}, - {0x90bb, 2595}, - {0x90bd, 0}, - {0x90be, 4981}, - {0x90c0, 0}, - {0x90c1, 4313}, - {0x90c3, 0}, - {0x90c4, 4983}, - {0x90c5, 4980}, - {0x90c7, 4984}, - {0x90c9, 0}, - {0x90ca, 2189}, - {0x90cc, 0}, - {0x90cd, 1}, - {0x90ce, 2484}, - {0x90cf, 4979}, - {0x90d0, 4982}, - {0x90d1, 4514}, - {0x90d3, 4985}, - {0x90d5, 0}, - {0x90d6, 1}, - {0x90d7, 4989}, - {0x90d9, 0}, - {0x90da, 1}, - {0x90db, 4990}, - {0x90dc, 4988}, - {0x90dd, 1913}, - {0x90df, 8990}, - {0x90e1, 2353}, - {0x90e2, 4987}, - {0x90e4, 0}, - {0x90e5, 1}, - {0x90e6, 4986}, - {0x90e7, 4362}, - {0x90e8, 1158}, - {0x90ea, 0}, - {0x90eb, 4991}, - {0x90ed, 1874}, - {0x90ef, 4992}, - {0x90f1, 0}, - {0x90f2, 1}, - {0x90f3, 2}, - {0x90f4, 1248}, - {0x90f5, 8755}, - {0x90f7, 0}, - {0x90f8, 1415}, - {0x90fa, 0}, - {0x90fb, 1}, - {0x90fc, 2}, - {0x90fd, 1531}, - {0x90fe, 4993}, - {0x9101, 0}, - {0x9102, 1588}, - {0x9104, 4994}, - {0x9106, 8992}, - {0x9108, 0}, - {0x9109, 8647}, - {0x910b, 0}, - {0x910c, 1}, - {0x910d, 2}, - {0x910e, 3}, - {0x910f, 4}, - {0x9110, 5}, - {0x9111, 6}, - {0x9112, 8892}, - {0x9114, 8988}, - {0x9116, 8785}, - {0x9118, 0}, - {0x9119, 1074}, - {0x911b, 0}, - {0x911c, 1}, - {0x911d, 2}, - {0x911e, 4996}, - {0x9120, 0}, - {0x9121, 1}, - {0x9122, 4995}, - {0x9123, 4997}, - {0x9125, 0}, - {0x9126, 1}, - {0x9127, 7867}, - {0x9129, 0}, - {0x912a, 1}, - {0x912b, 2}, - {0x912c, 3}, - {0x912d, 8839}, - {0x912f, 4999}, - {0x9130, 8237}, - {0x9131, 4998}, - {0x9132, 7851}, - {0x9134, 8989}, - {0x9136, 8991}, - {0x9138, 0}, - {0x9139, 5000}, - {0x913a, 8987}, - {0x913c, 0}, - {0x913d, 1}, - {0x913e, 2}, - {0x913f, 3}, - {0x9140, 4}, - {0x9141, 5}, - {0x9142, 6}, - {0x9143, 5001}, - {0x9145, 0}, - {0x9146, 5002}, - {0x9148, 8993}, - {0x9149, 4276}, - {0x914a, 7416}, - {0x914b, 3186}, - {0x914c, 4640}, - {0x914d, 2981}, - {0x914e, 7418}, - {0x914f, 7419}, - {0x9150, 7417}, - {0x9152, 2293}, - {0x9154, 0}, - {0x9155, 1}, - {0x9156, 2}, - {0x9157, 4026}, - {0x9159, 0}, - {0x915a, 1648}, - {0x915c, 0}, - {0x915d, 4368}, - {0x915e, 3581}, - {0x9160, 0}, - {0x9161, 7422}, - {0x9162, 7421}, - {0x9163, 1887}, - {0x9164, 7420}, - {0x9165, 3531}, - {0x9167, 0}, - {0x9168, 1}, - {0x9169, 7424}, - {0x916a, 2493}, - {0x916c, 1295}, - {0x916e, 3675}, - {0x916f, 7425}, - {0x9170, 7423}, - {0x9171, 2181}, - {0x9172, 7428}, - {0x9174, 7429}, - {0x9175, 2206}, - {0x9176, 2749}, - {0x9177, 2414}, - {0x9178, 3542}, - {0x9179, 7430}, - {0x917b, 0}, - {0x917c, 1}, - {0x917d, 7426}, - {0x917e, 7427}, - {0x917f, 2899}, - {0x9181, 0}, - {0x9182, 1}, - {0x9183, 2}, - {0x9184, 3}, - {0x9185, 7432}, - {0x9187, 1343}, - {0x9189, 4682}, - {0x918b, 1370}, - {0x918c, 7431}, - {0x918d, 7434}, - {0x918f, 0}, - {0x9190, 7433}, - {0x9191, 7435}, - {0x9192, 3996}, - {0x9194, 0}, - {0x9195, 1}, - {0x9196, 8789}, - {0x9198, 0}, - {0x9199, 1}, - {0x919a, 2774}, - {0x919b, 3204}, - {0x919c, 7823}, - {0x919e, 0}, - {0x919f, 1}, - {0x91a0, 2}, - {0x91a1, 3}, - {0x91a2, 7436}, - {0x91a3, 7437}, - {0x91a5, 0}, - {0x91a6, 1}, - {0x91a7, 2}, - {0x91a8, 3}, - {0x91a9, 4}, - {0x91aa, 7438}, - {0x91ab, 8716}, - {0x91ac, 8100}, - {0x91ad, 7439}, - {0x91ae, 7440}, - {0x91af, 7441}, - {0x91b1, 0}, - {0x91b2, 1}, - {0x91b3, 2}, - {0x91b4, 7443}, - {0x91b5, 7442}, - {0x91b7, 0}, - {0x91b8, 1}, - {0x91b9, 2}, - {0x91ba, 7444}, - {0x91bc, 0}, - {0x91bd, 1}, - {0x91be, 2}, - {0x91bf, 3}, - {0x91c0, 8347}, - {0x91c1, 8664}, - {0x91c3, 9722}, - {0x91c5, 9721}, - {0x91c7, 1168}, - {0x91c9, 4281}, - {0x91ca, 3428}, - {0x91cb, 8500}, - {0x91cc, 2522}, - {0x91cd, 4567}, - {0x91ce, 4151}, - {0x91cf, 2568}, - {0x91d1, 2241}, - {0x91d2, 9459}, - {0x91d3, 9460}, - {0x91d4, 9461}, - {0x91d5, 9464}, - {0x91d7, 9463}, - {0x91d8, 7880}, - {0x91d9, 9462}, - {0x91db, 0}, - {0x91dc, 1701}, - {0x91dd, 8832}, - {0x91df, 0}, - {0x91e0, 1}, - {0x91e1, 2}, - {0x91e2, 3}, - {0x91e3, 7877}, - {0x91e4, 9467}, - {0x91e6, 0}, - {0x91e7, 9466}, - {0x91e9, 7917}, - {0x91eb, 0}, - {0x91ec, 1}, - {0x91ed, 2}, - {0x91ee, 3}, - {0x91ef, 4}, - {0x91f0, 5}, - {0x91f1, 6}, - {0x91f2, 7}, - {0x91f3, 8}, - {0x91f4, 9}, - {0x91f5, 9469}, - {0x91f7, 9465}, - {0x91f9, 9470}, - {0x91fa, 8397}, - {0x91fc, 0}, - {0x91fd, 1}, - {0x91fe, 2}, - {0x91ff, 3}, - {0x9200, 9480}, - {0x9201, 9476}, - {0x9203, 0}, - {0x9204, 9478}, - {0x9206, 0}, - {0x9207, 1}, - {0x9208, 9471}, - {0x9209, 8336}, - {0x920b, 0}, - {0x920c, 1}, - {0x920d, 7901}, - {0x920e, 7973}, - {0x9210, 9475}, - {0x9211, 9474}, - {0x9213, 0}, - {0x9214, 7802}, - {0x9215, 8358}, - {0x9217, 0}, - {0x9218, 1}, - {0x9219, 2}, - {0x921a, 3}, - {0x921b, 4}, - {0x921c, 5}, - {0x921d, 6}, - {0x921e, 8149}, - {0x9220, 0}, - {0x9221, 1}, - {0x9222, 2}, - {0x9223, 7953}, - {0x9225, 9479}, - {0x9226, 9472}, - {0x9227, 9477}, - {0x9229, 0}, - {0x922a, 1}, - {0x922b, 2}, - {0x922c, 3}, - {0x922d, 4}, - {0x922e, 9497}, - {0x9230, 9493}, - {0x9232, 0}, - {0x9233, 9484}, - {0x9234, 8241}, - {0x9236, 0}, - {0x9237, 9483}, - {0x9238, 9487}, - {0x9239, 9498}, - {0x923a, 9481}, - {0x923c, 0}, - {0x923d, 9486}, - {0x923e, 8756}, - {0x923f, 9491}, - {0x9240, 8064}, - {0x9242, 0}, - {0x9243, 1}, - {0x9244, 2}, - {0x9245, 9473}, - {0x9247, 0}, - {0x9248, 9495}, - {0x9249, 9494}, - {0x924b, 0}, - {0x924c, 1}, - {0x924d, 9496}, - {0x924f, 0}, - {0x9250, 1}, - {0x9251, 7766}, - {0x9253, 0}, - {0x9254, 1}, - {0x9255, 9485}, - {0x9257, 8403}, - {0x9259, 0}, - {0x925a, 8314}, - {0x925b, 8398}, - {0x925d, 0}, - {0x925e, 9488}, - {0x9260, 0}, - {0x9261, 1}, - {0x9262, 7765}, - {0x9264, 0}, - {0x9265, 1}, - {0x9266, 9482}, - {0x9268, 0}, - {0x9269, 1}, - {0x926a, 2}, - {0x926b, 3}, - {0x926c, 9489}, - {0x926d, 9490}, - {0x926f, 0}, - {0x9270, 1}, - {0x9271, 2}, - {0x9272, 3}, - {0x9273, 4}, - {0x9274, 2155}, - {0x9276, 0}, - {0x9277, 1}, - {0x9278, 8106}, - {0x927a, 9502}, - {0x927b, 7967}, - {0x927d, 0}, - {0x927e, 1}, - {0x927f, 9517}, - {0x9280, 8733}, - {0x9282, 0}, - {0x9283, 9522}, - {0x9285, 8571}, - {0x9287, 0}, - {0x9288, 1}, - {0x9289, 2}, - {0x928a, 3}, - {0x928b, 4}, - {0x928c, 5}, - {0x928d, 6}, - {0x928e, 7552}, - {0x9290, 0}, - {0x9291, 8623}, - {0x9293, 9516}, - {0x9295, 0}, - {0x9296, 9512}, - {0x9298, 8332}, - {0x929a, 9519}, - {0x929c, 8636}, - {0x929e, 0}, - {0x929f, 1}, - {0x92a0, 9501}, - {0x92a2, 0}, - {0x92a3, 9525}, - {0x92a5, 8717}, - {0x92a6, 9510}, - {0x92a8, 9524}, - {0x92a9, 9514}, - {0x92aa, 9503}, - {0x92ab, 9521}, - {0x92ac, 9500}, - {0x92ae, 7553}, - {0x92b0, 0}, - {0x92b1, 9509}, - {0x92b3, 0}, - {0x92b4, 1}, - {0x92b5, 2}, - {0x92b6, 3}, - {0x92b7, 8653}, - {0x92b9, 8666}, - {0x92bb, 8562}, - {0x92bc, 9534}, - {0x92be, 0}, - {0x92bf, 1}, - {0x92c0, 2}, - {0x92c1, 8271}, - {0x92c3, 9539}, - {0x92c5, 8663}, - {0x92c7, 7740}, - {0x92c8, 7554}, - {0x92ca, 0}, - {0x92cb, 1}, - {0x92cc, 9513}, - {0x92ce, 0}, - {0x92cf, 9505}, - {0x92d1, 0}, - {0x92d2, 7935}, - {0x92d4, 0}, - {0x92d5, 1}, - {0x92d6, 2}, - {0x92d7, 3}, - {0x92d8, 4}, - {0x92d9, 5}, - {0x92da, 6}, - {0x92db, 7}, - {0x92dc, 8}, - {0x92dd, 9535}, - {0x92df, 9540}, - {0x92e1, 0}, - {0x92e2, 1}, - {0x92e3, 9507}, - {0x92e4, 7824}, - {0x92e5, 9530}, - {0x92e6, 9541}, - {0x92e8, 9533}, - {0x92ea, 8385}, - {0x92ec, 0}, - {0x92ed, 8451}, - {0x92ee, 9504}, - {0x92ef, 9532}, - {0x92f0, 9531}, - {0x92f1, 9528}, - {0x92f3, 0}, - {0x92f4, 1}, - {0x92f5, 2}, - {0x92f6, 9536}, - {0x92f8, 8141}, - {0x92fa, 0}, - {0x92fb, 1}, - {0x92fc, 7960}, - {0x92fe, 0}, - {0x92ff, 1}, - {0x9301, 9547}, - {0x9303, 0}, - {0x9304, 1}, - {0x9305, 2}, - {0x9306, 9543}, - {0x9307, 9551}, - {0x9308, 9552}, - {0x930a, 0}, - {0x930b, 1}, - {0x930c, 2}, - {0x930d, 3}, - {0x930e, 4}, - {0x930f, 5}, - {0x9310, 8880}, - {0x9312, 9542}, - {0x9314, 0}, - {0x9315, 9548}, - {0x9317, 0}, - {0x9318, 7834}, - {0x9319, 9554}, - {0x931a, 9520}, - {0x931b, 9545}, - {0x931d, 0}, - {0x931e, 1}, - {0x931f, 9553}, - {0x9320, 7882}, - {0x9322, 8402}, - {0x9324, 0}, - {0x9325, 1}, - {0x9326, 8120}, - {0x9328, 8313}, - {0x932a, 0}, - {0x932b, 8619}, - {0x932d, 0}, - {0x932e, 9549}, - {0x932f, 7845}, - {0x9331, 0}, - {0x9332, 8268}, - {0x9333, 8320}, - {0x9335, 0}, - {0x9336, 9837}, - {0x9338, 9527}, - {0x933a, 0}, - {0x933b, 1}, - {0x933c, 2}, - {0x933d, 3}, - {0x933e, 7555}, - {0x9340, 9546}, - {0x9341, 8632}, - {0x9343, 9550}, - {0x9345, 0}, - {0x9346, 9468}, - {0x9347, 9556}, - {0x9349, 0}, - {0x934a, 1}, - {0x934b, 7996}, - {0x934d, 7893}, - {0x934f, 0}, - {0x9350, 1}, - {0x9351, 2}, - {0x9352, 3}, - {0x9353, 4}, - {0x9354, 9558}, - {0x9356, 0}, - {0x9357, 1}, - {0x9358, 8808}, - {0x935a, 0}, - {0x935b, 7894}, - {0x935d, 0}, - {0x935e, 1}, - {0x935f, 2}, - {0x9360, 3}, - {0x9361, 4}, - {0x9362, 5}, - {0x9363, 6}, - {0x9364, 9559}, - {0x9365, 9555}, - {0x9367, 0}, - {0x9368, 1}, - {0x9369, 9544}, - {0x936a, 7556}, - {0x936c, 8412}, - {0x936e, 0}, - {0x936f, 1}, - {0x9370, 9561}, - {0x9372, 0}, - {0x9373, 1}, - {0x9374, 2}, - {0x9375, 8087}, - {0x9376, 9557}, - {0x9378, 0}, - {0x9379, 1}, - {0x937a, 8829}, - {0x937c, 0}, - {0x937d, 1}, - {0x937e, 9598}, - {0x9380, 0}, - {0x9381, 1}, - {0x9382, 8316}, - {0x9384, 9562}, - {0x9386, 0}, - {0x9387, 9566}, - {0x9389, 0}, - {0x938a, 7732}, - {0x938c, 0}, - {0x938d, 1}, - {0x938e, 2}, - {0x938f, 7558}, - {0x9391, 0}, - {0x9392, 1}, - {0x9393, 2}, - {0x9394, 3}, - {0x9395, 4}, - {0x9396, 8542}, - {0x9398, 9568}, - {0x939a, 0}, - {0x939b, 1}, - {0x939c, 2}, - {0x939d, 3}, - {0x939e, 4}, - {0x939f, 5}, - {0x93a0, 6}, - {0x93a1, 7}, - {0x93a2, 8610}, - {0x93a3, 9044}, - {0x93a5, 0}, - {0x93a6, 9571}, - {0x93a7, 9511}, - {0x93a9, 9518}, - {0x93aa, 9560}, - {0x93ac, 7963}, - {0x93ae, 8835}, - {0x93b0, 9572}, - {0x93b2, 0}, - {0x93b3, 8352}, - {0x93b5, 9573}, - {0x93b7, 0}, - {0x93b8, 9569}, - {0x93ba, 0}, - {0x93bb, 1}, - {0x93bc, 2}, - {0x93bd, 3}, - {0x93be, 4}, - {0x93bf, 9570}, - {0x93c1, 0}, - {0x93c2, 1}, - {0x93c3, 9580}, - {0x93c5, 0}, - {0x93c6, 1}, - {0x93c7, 9581}, - {0x93c8, 8224}, - {0x93ca, 7557}, - {0x93cc, 9567}, - {0x93cd, 9578}, - {0x93cf, 0}, - {0x93d0, 1}, - {0x93d1, 9582}, - {0x93d3, 0}, - {0x93d4, 1}, - {0x93d5, 2}, - {0x93d6, 7681}, - {0x93d7, 9529}, - {0x93d8, 9564}, - {0x93da, 0}, - {0x93db, 1}, - {0x93dc, 9576}, - {0x93dd, 9577}, - {0x93de, 9579}, - {0x93df, 7791}, - {0x93e1, 8132}, - {0x93e2, 9575}, - {0x93e4, 9563}, - {0x93e6, 0}, - {0x93e7, 1}, - {0x93e8, 9757}, - {0x93ea, 0}, - {0x93eb, 1}, - {0x93ec, 2}, - {0x93ed, 3}, - {0x93ee, 4}, - {0x93ef, 5}, - {0x93f0, 6}, - {0x93f1, 7}, - {0x93f2, 8}, - {0x93f3, 9}, - {0x93f4, 10}, - {0x93f5, 9515}, - {0x93f7, 9585}, - {0x93f9, 9591}, - {0x93fb, 0}, - {0x93fc, 1}, - {0x93fd, 2}, - {0x93fe, 3}, - {0x93ff, 4}, - {0x9401, 0}, - {0x9402, 1}, - {0x9403, 9506}, - {0x9405, 0}, - {0x9406, 1}, - {0x9407, 2}, - {0x9408, 3}, - {0x9409, 4}, - {0x940a, 5}, - {0x940b, 9523}, - {0x940d, 0}, - {0x940e, 1}, - {0x940f, 2}, - {0x9410, 8234}, - {0x9412, 9526}, - {0x9413, 9587}, - {0x9414, 9583}, - {0x9416, 0}, - {0x9417, 1}, - {0x9418, 8851}, - {0x9419, 9592}, - {0x941b, 0}, - {0x941c, 1}, - {0x941d, 9584}, - {0x941f, 0}, - {0x9420, 9589}, - {0x9422, 0}, - {0x9423, 1}, - {0x9424, 2}, - {0x9425, 3}, - {0x9426, 9537}, - {0x9427, 9538}, - {0x9428, 9565}, - {0x942a, 0}, - {0x942b, 1}, - {0x942c, 2}, - {0x942d, 3}, - {0x942e, 8218}, - {0x9430, 0}, - {0x9431, 1}, - {0x9432, 9594}, - {0x9433, 8198}, - {0x9435, 8567}, - {0x9437, 0}, - {0x9438, 9499}, - {0x943a, 9508}, - {0x943c, 0}, - {0x943d, 1}, - {0x943e, 7559}, - {0x943f, 9595}, - {0x9441, 0}, - {0x9442, 1}, - {0x9443, 2}, - {0x9444, 8867}, - {0x9446, 0}, - {0x9447, 1}, - {0x9448, 2}, - {0x9449, 3}, - {0x944a, 9593}, - {0x944c, 9574}, - {0x944e, 0}, - {0x944f, 1}, - {0x9450, 2}, - {0x9451, 3}, - {0x9452, 8083}, - {0x9454, 9596}, - {0x9456, 0}, - {0x9457, 1}, - {0x9458, 2}, - {0x9459, 3}, - {0x945a, 4}, - {0x945b, 5}, - {0x945c, 6}, - {0x945d, 7}, - {0x945e, 8}, - {0x945f, 9}, - {0x9460, 9492}, - {0x9462, 0}, - {0x9463, 9597}, - {0x9465, 9586}, - {0x9467, 0}, - {0x9468, 1}, - {0x9469, 2}, - {0x946a, 3}, - {0x946b, 7560}, - {0x946d, 9588}, - {0x946f, 0}, - {0x9470, 8782}, - {0x9472, 8646}, - {0x9474, 0}, - {0x9475, 1}, - {0x9476, 2}, - {0x9477, 8351}, - {0x9479, 9590}, - {0x947b, 0}, - {0x947c, 8292}, - {0x947d, 8895}, - {0x947e, 9756}, - {0x947f, 8798}, - {0x9481, 0}, - {0x9482, 1}, - {0x9483, 2}, - {0x9484, 3}, - {0x9485, 6798}, - {0x9486, 6799}, - {0x9487, 6800}, - {0x9488, 4492}, - {0x9489, 1507}, - {0x948a, 6802}, - {0x948b, 6801}, - {0x948c, 6803}, - {0x948d, 6804}, - {0x948e, 3106}, - {0x948f, 6805}, - {0x9490, 6806}, - {0x9492, 1613}, - {0x9493, 1495}, - {0x9494, 6807}, - {0x9495, 6809}, - {0x9497, 6808}, - {0x9499, 1729}, - {0x949a, 6810}, - {0x949b, 6811}, - {0x949c, 6812}, - {0x949d, 1562}, - {0x949e, 1235}, - {0x949f, 4562}, - {0x94a0, 2857}, - {0x94a1, 1054}, - {0x94a2, 1745}, - {0x94a3, 6813}, - {0x94a4, 6814}, - {0x94a5, 4354}, - {0x94a6, 3154}, - {0x94a7, 2346}, - {0x94a8, 3816}, - {0x94a9, 1804}, - {0x94aa, 6816}, - {0x94ab, 6815}, - {0x94ac, 6818}, - {0x94ad, 6817}, - {0x94ae, 2918}, - {0x94af, 6819}, - {0x94b0, 6820}, - {0x94b1, 3115}, - {0x94b2, 6821}, - {0x94b3, 3116}, - {0x94b4, 6822}, - {0x94b5, 1134}, - {0x94b6, 6823}, - {0x94b7, 6824}, - {0x94b8, 6825}, - {0x94b9, 6826}, - {0x94ba, 6827}, - {0x94bb, 4679}, - {0x94bc, 6828}, - {0x94bd, 6829}, - {0x94be, 2123}, - {0x94bf, 6830}, - {0x94c0, 4272}, - {0x94c1, 3661}, - {0x94c2, 1139}, - {0x94c3, 2606}, - {0x94c4, 6831}, - {0x94c5, 3107}, - {0x94c6, 2738}, - {0x94c8, 6832}, - {0x94c9, 6833}, - {0x94ca, 6834}, - {0x94cb, 6835}, - {0x94cc, 6836}, - {0x94cd, 6837}, - {0x94ce, 6838}, - {0x94d0, 6839}, - {0x94d1, 6840}, - {0x94d2, 6841}, - {0x94d4, 0}, - {0x94d5, 6842}, - {0x94d6, 6843}, - {0x94d7, 6844}, - {0x94d8, 6846}, - {0x94d9, 6845}, - {0x94db, 6847}, - {0x94dc, 3678}, - {0x94dd, 2664}, - {0x94de, 6848}, - {0x94df, 6849}, - {0x94e0, 6850}, - {0x94e1, 4418}, - {0x94e2, 6851}, - {0x94e3, 3872}, - {0x94e4, 6852}, - {0x94e5, 6853}, - {0x94e7, 6854}, - {0x94e8, 6855}, - {0x94e9, 6857}, - {0x94ea, 6856}, - {0x94eb, 6858}, - {0x94ec, 1776}, - {0x94ed, 2815}, - {0x94ee, 6859}, - {0x94ef, 6860}, - {0x94f0, 2195}, - {0x94f1, 4166}, - {0x94f2, 1216}, - {0x94f3, 6861}, - {0x94f4, 6862}, - {0x94f5, 6863}, - {0x94f6, 4223}, - {0x94f7, 6864}, - {0x94f8, 4604}, - {0x94f9, 6865}, - {0x94fa, 3051}, - {0x94fc, 6866}, - {0x94fd, 6867}, - {0x94fe, 2557}, - {0x94ff, 6868}, - {0x9500, 3943}, - {0x9501, 3565}, - {0x9502, 6870}, - {0x9503, 6869}, - {0x9504, 1311}, - {0x9505, 1873}, - {0x9506, 6871}, - {0x9507, 6872}, - {0x9508, 4013}, - {0x9509, 6873}, - {0x950a, 6874}, - {0x950b, 1667}, - {0x950c, 3978}, - {0x950d, 6875}, - {0x950e, 6876}, - {0x950f, 6877}, - {0x9510, 3276}, - {0x9511, 3635}, - {0x9512, 6878}, - {0x9513, 6879}, - {0x9514, 6880}, - {0x9515, 6881}, - {0x9516, 6882}, - {0x9517, 4481}, - {0x9518, 6883}, - {0x9519, 1392}, - {0x951a, 2735}, - {0x951b, 6884}, - {0x951d, 6885}, - {0x951e, 6886}, - {0x951f, 6887}, - {0x9521, 3852}, - {0x9522, 6888}, - {0x9523, 2695}, - {0x9524, 1339}, - {0x9525, 4627}, - {0x9526, 2246}, - {0x9528, 3892}, - {0x9529, 6891}, - {0x952a, 6889}, - {0x952b, 6890}, - {0x952c, 6892}, - {0x952d, 1510}, - {0x952e, 2159}, - {0x952f, 2321}, - {0x9530, 2769}, - {0x9531, 6893}, - {0x9532, 6894}, - {0x9534, 6895}, - {0x9535, 6903}, - {0x9536, 6896}, - {0x9537, 6897}, - {0x9538, 6898}, - {0x9539, 3135}, - {0x953a, 6937}, - {0x953b, 1548}, - {0x953c, 6899}, - {0x953e, 6900}, - {0x953f, 6901}, - {0x9540, 1541}, - {0x9541, 2755}, - {0x9542, 6902}, - {0x9544, 6904}, - {0x9545, 6905}, - {0x9546, 6906}, - {0x9547, 4499}, - {0x9549, 6907}, - {0x954a, 2906}, - {0x954c, 6908}, - {0x954d, 2907}, - {0x954e, 6909}, - {0x954f, 6910}, - {0x9550, 1759}, - {0x9551, 1026}, - {0x9552, 6911}, - {0x9553, 6912}, - {0x9554, 6913}, - {0x9556, 6914}, - {0x9557, 6915}, - {0x9558, 6916}, - {0x9559, 6917}, - {0x955b, 6918}, - {0x955c, 2276}, - {0x955d, 6921}, - {0x955e, 6919}, - {0x955f, 6920}, - {0x9561, 6922}, - {0x9562, 6923}, - {0x9563, 2582}, - {0x9564, 6924}, - {0x9565, 6925}, - {0x9566, 6926}, - {0x9567, 6927}, - {0x9568, 6928}, - {0x9569, 6929}, - {0x956a, 6930}, - {0x956b, 6931}, - {0x956c, 6932}, - {0x956d, 2499}, - {0x956f, 6933}, - {0x9570, 2550}, - {0x9571, 6934}, - {0x9572, 6935}, - {0x9573, 6936}, - {0x9575, 0}, - {0x9576, 3919}, - {0x9577, 7797}, - {0x9579, 0}, - {0x957a, 1}, - {0x957b, 2}, - {0x957c, 3}, - {0x957d, 4}, - {0x957e, 5}, - {0x957f, 1225}, - {0x9580, 8317}, - {0x9582, 9151}, - {0x9583, 8467}, - {0x9585, 0}, - {0x9586, 9152}, - {0x9588, 0}, - {0x9589, 7749}, - {0x958b, 8152}, - {0x958c, 9156}, - {0x958e, 9154}, - {0x958f, 8452}, - {0x9591, 8637}, - {0x9593, 8071}, - {0x9594, 9155}, - {0x9596, 0}, - {0x9597, 1}, - {0x9598, 8809}, - {0x959a, 0}, - {0x959b, 1}, - {0x959c, 2}, - {0x959d, 3}, - {0x959e, 4}, - {0x959f, 5}, - {0x95a0, 6}, - {0x95a1, 8003}, - {0x95a3, 7966}, - {0x95a4, 9849}, - {0x95a5, 7915}, - {0x95a7, 0}, - {0x95a8, 7989}, - {0x95a9, 8330}, - {0x95ab, 9159}, - {0x95ac, 9161}, - {0x95ad, 9158}, - {0x95af, 0}, - {0x95b0, 1}, - {0x95b1, 2}, - {0x95b2, 8783}, - {0x95b4, 0}, - {0x95b5, 1}, - {0x95b6, 9163}, - {0x95b8, 0}, - {0x95b9, 8691}, - {0x95bb, 8695}, - {0x95bc, 9167}, - {0x95bd, 9166}, - {0x95be, 9162}, - {0x95bf, 9165}, - {0x95c1, 0}, - {0x95c2, 1}, - {0x95c3, 9168}, - {0x95c5, 0}, - {0x95c6, 9836}, - {0x95c8, 9153}, - {0x95ca, 8174}, - {0x95cb, 9169}, - {0x95cc, 8184}, - {0x95ce, 0}, - {0x95cf, 1}, - {0x95d0, 9171}, - {0x95d2, 0}, - {0x95d3, 1}, - {0x95d4, 9170}, - {0x95d5, 9172}, - {0x95d6, 7832}, - {0x95d8, 0}, - {0x95d9, 1}, - {0x95da, 2}, - {0x95db, 3}, - {0x95dc, 7980}, - {0x95de, 9173}, - {0x95e0, 0}, - {0x95e1, 7793}, - {0x95e2, 9873}, - {0x95e4, 0}, - {0x95e5, 9157}, - {0x95e7, 0}, - {0x95e8, 2762}, - {0x95e9, 5765}, - {0x95ea, 3322}, - {0x95eb, 5766}, - {0x95ed, 1086}, - {0x95ee, 3801}, - {0x95ef, 1334}, - {0x95f0, 3277}, - {0x95f1, 5767}, - {0x95f2, 3901}, - {0x95f3, 5768}, - {0x95f4, 2135}, - {0x95f5, 5769}, - {0x95f6, 5770}, - {0x95f7, 2763}, - {0x95f8, 4419}, - {0x95f9, 2873}, - {0x95fa, 1860}, - {0x95fb, 3796}, - {0x95fc, 5771}, - {0x95fd, 2811}, - {0x95fe, 5772}, - {0x9600, 1604}, - {0x9601, 1774}, - {0x9602, 1929}, - {0x9603, 5773}, - {0x9604, 5774}, - {0x9605, 4359}, - {0x9606, 5775}, - {0x9608, 5776}, - {0x9609, 4084}, - {0x960a, 5777}, - {0x960b, 5778}, - {0x960c, 5779}, - {0x960d, 5780}, - {0x960e, 4095}, - {0x960f, 5781}, - {0x9610, 1218}, - {0x9611, 2470}, - {0x9612, 5782}, - {0x9614, 2454}, - {0x9615, 5783}, - {0x9616, 5784}, - {0x9617, 5785}, - {0x9619, 5786}, - {0x961a, 5787}, - {0x961c, 1714}, - {0x961d, 4948}, - {0x961f, 1554}, - {0x9621, 4950}, - {0x9622, 4949}, - {0x9624, 0}, - {0x9625, 1}, - {0x9626, 2}, - {0x9627, 3}, - {0x9628, 4}, - {0x9629, 5}, - {0x962a, 4952}, - {0x962c, 0}, - {0x962d, 1}, - {0x962e, 3273}, - {0x9630, 0}, - {0x9631, 4951}, - {0x9632, 1629}, - {0x9633, 4125}, - {0x9634, 4220}, - {0x9635, 4500}, - {0x9636, 2216}, - {0x9638, 0}, - {0x9639, 1}, - {0x963a, 2}, - {0x963b, 4677}, - {0x963c, 4954}, - {0x963d, 4953}, - {0x963f, 941}, - {0x9640, 3716}, - {0x9642, 4955}, - {0x9644, 1720}, - {0x9645, 2109}, - {0x9646, 2660}, - {0x9647, 2635}, - {0x9648, 1255}, - {0x9649, 4956}, - {0x964b, 2641}, - {0x964c, 2835}, - {0x964d, 2182}, - {0x964f, 0}, - {0x9650, 3915}, - {0x9652, 0}, - {0x9653, 1}, - {0x9654, 4957}, - {0x9655, 3323}, - {0x9657, 0}, - {0x9658, 8986}, - {0x965a, 0}, - {0x965b, 1094}, - {0x965d, 8468}, - {0x965f, 4958}, - {0x9661, 1527}, - {0x9662, 4349}, - {0x9663, 8836}, - {0x9664, 1314}, - {0x9666, 0}, - {0x9667, 4959}, - {0x9668, 4364}, - {0x9669, 3906}, - {0x966a, 2980}, - {0x966c, 4960}, - {0x966e, 0}, - {0x966f, 1}, - {0x9670, 8732}, - {0x9672, 4961}, - {0x9673, 7806}, - {0x9674, 4962}, - {0x9675, 2611}, - {0x9676, 3624}, - {0x9677, 3914}, - {0x9678, 8269}, - {0x967a, 0}, - {0x967b, 1}, - {0x967c, 2}, - {0x967d, 8705}, - {0x967f, 0}, - {0x9680, 1}, - {0x9681, 2}, - {0x9682, 3}, - {0x9683, 4}, - {0x9684, 5}, - {0x9685, 4300}, - {0x9686, 2632}, - {0x9688, 4963}, - {0x968a, 7897}, - {0x968b, 3546}, - {0x968d, 4964}, - {0x968e, 8114}, - {0x968f, 3547}, - {0x9690, 4229}, - {0x9692, 0}, - {0x9693, 1}, - {0x9694, 1775}, - {0x9695, 8786}, - {0x9697, 4965}, - {0x9698, 954}, - {0x9699, 3875}, - {0x969b, 8057}, - {0x969c, 4464}, - {0x969e, 0}, - {0x969f, 1}, - {0x96a0, 2}, - {0x96a1, 3}, - {0x96a2, 4}, - {0x96a3, 5}, - {0x96a4, 6}, - {0x96a5, 7}, - {0x96a6, 8}, - {0x96a7, 3554}, - {0x96a8, 8535}, - {0x96aa, 8639}, - {0x96ac, 0}, - {0x96ad, 1}, - {0x96ae, 2}, - {0x96af, 3}, - {0x96b0, 4966}, - {0x96b1, 8735}, - {0x96b3, 5764}, - {0x96b4, 8253}, - {0x96b6, 2542}, - {0x96b8, 8213}, - {0x96b9, 7545}, - {0x96bb, 9893}, - {0x96bc, 7546}, - {0x96bd, 7547}, - {0x96be, 2868}, - {0x96c0, 3219}, - {0x96c1, 4108}, - {0x96c3, 0}, - {0x96c4, 4006}, - {0x96c5, 4078}, - {0x96c6, 2082}, - {0x96c7, 1830}, - {0x96c9, 6940}, - {0x96cb, 0}, - {0x96cc, 1353}, - {0x96cd, 4255}, - {0x96ce, 7548}, - {0x96cf, 1312}, - {0x96d1, 0}, - {0x96d2, 7549}, - {0x96d4, 0}, - {0x96d5, 1490}, - {0x96d6, 8534}, - {0x96d8, 0}, - {0x96d9, 8516}, - {0x96db, 7825}, - {0x96dc, 8791}, - {0x96de, 0}, - {0x96df, 1}, - {0x96e0, 7551}, - {0x96e2, 8202}, - {0x96e3, 8338}, - {0x96e5, 0}, - {0x96e6, 1}, - {0x96e7, 2}, - {0x96e8, 4303}, - {0x96e9, 7521}, - {0x96ea, 4050}, - {0x96ec, 0}, - {0x96ed, 1}, - {0x96ee, 2}, - {0x96ef, 7523}, - {0x96f1, 0}, - {0x96f2, 8784}, - {0x96f3, 7522}, - {0x96f5, 0}, - {0x96f6, 2604}, - {0x96f7, 2498}, - {0x96f9, 1035}, - {0x96fb, 7875}, - {0x96fd, 0}, - {0x96fe, 3836}, - {0x9700, 4019}, - {0x9701, 7525}, - {0x9703, 0}, - {0x9704, 3939}, - {0x9706, 7524}, - {0x9707, 4497}, - {0x9708, 7526}, - {0x9709, 2750}, - {0x970b, 0}, - {0x970c, 1}, - {0x970d, 2057}, - {0x970e, 7528}, - {0x970f, 7527}, - {0x9711, 0}, - {0x9712, 1}, - {0x9713, 2881}, - {0x9715, 0}, - {0x9716, 2593}, - {0x9718, 0}, - {0x9719, 1}, - {0x971a, 2}, - {0x971b, 3}, - {0x971c, 3487}, - {0x971e, 3881}, - {0x9720, 0}, - {0x9721, 1}, - {0x9722, 2}, - {0x9723, 3}, - {0x9724, 4}, - {0x9725, 5}, - {0x9726, 6}, - {0x9727, 8616}, - {0x9729, 0}, - {0x972a, 7529}, - {0x972c, 0}, - {0x972d, 7530}, - {0x972f, 0}, - {0x9730, 7531}, - {0x9732, 2653}, - {0x9734, 0}, - {0x9735, 1}, - {0x9736, 2}, - {0x9737, 3}, - {0x9738, 991}, - {0x9739, 3002}, - {0x973b, 0}, - {0x973c, 1}, - {0x973d, 9741}, - {0x973e, 7532}, - {0x9740, 0}, - {0x9741, 1}, - {0x9742, 9740}, - {0x9744, 9742}, - {0x9746, 0}, - {0x9747, 1}, - {0x9748, 8242}, - {0x974a, 0}, - {0x974b, 1}, - {0x974c, 2}, - {0x974d, 3}, - {0x974e, 4}, - {0x974f, 5}, - {0x9750, 6}, - {0x9751, 7}, - {0x9752, 3165}, - {0x9753, 7520}, - {0x9755, 0}, - {0x9756, 2279}, - {0x9758, 0}, - {0x9759, 2273}, - {0x975a, 9739}, - {0x975b, 1478}, - {0x975d, 0}, - {0x975e, 1636}, - {0x9760, 2380}, - {0x9761, 2775}, - {0x9762, 2795}, - {0x9764, 0}, - {0x9765, 4738}, - {0x9767, 0}, - {0x9768, 8899}, - {0x9769, 1770}, - {0x976b, 0}, - {0x976c, 1}, - {0x976d, 2}, - {0x976e, 3}, - {0x976f, 4}, - {0x9770, 5}, - {0x9771, 6}, - {0x9772, 7}, - {0x9773, 2250}, - {0x9774, 4046}, - {0x9776, 987}, - {0x9778, 0}, - {0x9779, 1}, - {0x977a, 2}, - {0x977b, 3}, - {0x977c, 7624}, - {0x977e, 0}, - {0x977f, 1}, - {0x9780, 2}, - {0x9781, 3}, - {0x9782, 4}, - {0x9783, 5}, - {0x9784, 6}, - {0x9785, 7625}, - {0x9787, 0}, - {0x9788, 1}, - {0x9789, 2}, - {0x978a, 3}, - {0x978b, 3959}, - {0x978d, 955}, - {0x978f, 7971}, - {0x9791, 7626}, - {0x9792, 7627}, - {0x9794, 7628}, - {0x9796, 0}, - {0x9797, 1}, - {0x9798, 3143}, - {0x979a, 0}, - {0x979b, 1}, - {0x979c, 2}, - {0x979d, 3}, - {0x979e, 4}, - {0x979f, 5}, - {0x97a0, 2302}, - {0x97a2, 0}, - {0x97a3, 7631}, - {0x97a5, 0}, - {0x97a6, 9877}, - {0x97a8, 0}, - {0x97a9, 1}, - {0x97aa, 2}, - {0x97ab, 7630}, - {0x97ad, 1095}, - {0x97af, 7629}, - {0x97b1, 0}, - {0x97b2, 7632}, - {0x97b4, 7633}, - {0x97b6, 0}, - {0x97b7, 1}, - {0x97b8, 2}, - {0x97b9, 3}, - {0x97ba, 4}, - {0x97bb, 5}, - {0x97bc, 6}, - {0x97bd, 9822}, - {0x97bf, 0}, - {0x97c0, 1}, - {0x97c1, 2}, - {0x97c2, 3}, - {0x97c3, 9821}, - {0x97c5, 0}, - {0x97c6, 9874}, - {0x97c8, 0}, - {0x97c9, 9823}, - {0x97cb, 8589}, - {0x97cc, 8445}, - {0x97ce, 0}, - {0x97cf, 1}, - {0x97d0, 2}, - {0x97d1, 3}, - {0x97d2, 4}, - {0x97d3, 8000}, - {0x97d5, 0}, - {0x97d6, 1}, - {0x97d7, 2}, - {0x97d8, 3}, - {0x97d9, 9317}, - {0x97db, 0}, - {0x97dc, 9319}, - {0x97de, 9318}, - {0x97e0, 0}, - {0x97e1, 1}, - {0x97e2, 2}, - {0x97e3, 3}, - {0x97e4, 4}, - {0x97e5, 5}, - {0x97e6, 3763}, - {0x97e7, 3240}, - {0x97e9, 1890}, - {0x97ea, 6222}, - {0x97eb, 6223}, - {0x97ec, 6224}, - {0x97ed, 2289}, - {0x97ef, 0}, - {0x97f0, 1}, - {0x97f1, 2}, - {0x97f2, 3}, - {0x97f3, 4219}, - {0x97f5, 4370}, - {0x97f6, 3345}, - {0x97f8, 0}, - {0x97f9, 1}, - {0x97fa, 2}, - {0x97fb, 3}, - {0x97fc, 4}, - {0x97fd, 5}, - {0x97fe, 6}, - {0x97ff, 8649}, - {0x9801, 8713}, - {0x9802, 7881}, - {0x9803, 8425}, - {0x9805, 8650}, - {0x9806, 8518}, - {0x9807, 9669}, - {0x9808, 8668}, - {0x980a, 9310}, - {0x980c, 8527}, - {0x980e, 9670}, - {0x980f, 9671}, - {0x9810, 8769}, - {0x9811, 8586}, - {0x9812, 7727}, - {0x9813, 7900}, - {0x9815, 0}, - {0x9816, 1}, - {0x9817, 8383}, - {0x9818, 8244}, - {0x981a, 0}, - {0x981b, 1}, - {0x981c, 9673}, - {0x981e, 0}, - {0x981f, 1}, - {0x9820, 2}, - {0x9821, 9672}, - {0x9823, 0}, - {0x9824, 8718}, - {0x9826, 9675}, - {0x9828, 0}, - {0x9829, 1}, - {0x982a, 2}, - {0x982b, 3}, - {0x982c, 4}, - {0x982d, 8573}, - {0x982f, 0}, - {0x9830, 8062}, - {0x9832, 0}, - {0x9833, 1}, - {0x9834, 2}, - {0x9835, 3}, - {0x9836, 4}, - {0x9837, 9676}, - {0x9838, 8131}, - {0x983a, 0}, - {0x983b, 8377}, - {0x983d, 8577}, - {0x983f, 0}, - {0x9840, 1}, - {0x9841, 2}, - {0x9842, 3}, - {0x9843, 4}, - {0x9844, 5}, - {0x9845, 6}, - {0x9846, 8154}, - {0x9848, 0}, - {0x9849, 1}, - {0x984a, 2}, - {0x984b, 3}, - {0x984c, 8563}, - {0x984d, 7905}, - {0x984e, 9677}, - {0x9850, 0}, - {0x9851, 1}, - {0x9852, 2}, - {0x9853, 9678}, - {0x9854, 8694}, - {0x9856, 0}, - {0x9857, 1}, - {0x9858, 8779}, - {0x9859, 9681}, - {0x985b, 7872}, - {0x985d, 0}, - {0x985e, 8200}, - {0x9860, 0}, - {0x9861, 1}, - {0x9862, 9680}, - {0x9864, 0}, - {0x9865, 9682}, - {0x9867, 7978}, - {0x9869, 0}, - {0x986a, 1}, - {0x986b, 7794}, - {0x986c, 9683}, - {0x986e, 0}, - {0x986f, 8638}, - {0x9870, 9684}, - {0x9871, 8260}, - {0x9873, 9679}, - {0x9874, 8435}, - {0x9875, 4154}, - {0x9876, 1508}, - {0x9877, 3175}, - {0x9878, 7136}, - {0x9879, 3931}, - {0x987a, 3496}, - {0x987b, 4022}, - {0x987c, 6183}, - {0x987d, 3736}, - {0x987e, 1828}, - {0x987f, 1560}, - {0x9880, 7137}, - {0x9881, 1007}, - {0x9882, 3521}, - {0x9883, 7138}, - {0x9884, 4327}, - {0x9885, 2644}, - {0x9886, 2613}, - {0x9887, 3043}, - {0x9888, 2272}, - {0x9889, 7139}, - {0x988a, 2120}, - {0x988c, 7140}, - {0x988d, 7141}, - {0x988f, 7142}, - {0x9890, 4170}, - {0x9891, 3028}, - {0x9893, 3704}, - {0x9894, 7143}, - {0x9896, 4246}, - {0x9897, 2386}, - {0x9898, 3637}, - {0x989a, 7144}, - {0x989b, 7145}, - {0x989c, 4094}, - {0x989d, 1581}, - {0x989e, 7146}, - {0x989f, 7147}, - {0x98a0, 1472}, - {0x98a1, 7148}, - {0x98a2, 7149}, - {0x98a4, 1219}, - {0x98a5, 7150}, - {0x98a6, 7151}, - {0x98a7, 3202}, - {0x98a8, 7936}, - {0x98aa, 0}, - {0x98ab, 1}, - {0x98ac, 2}, - {0x98ad, 3}, - {0x98ae, 9420}, - {0x98af, 9421}, - {0x98b1, 9880}, - {0x98b3, 9848}, - {0x98b5, 0}, - {0x98b6, 9422}, - {0x98b8, 0}, - {0x98b9, 1}, - {0x98ba, 2}, - {0x98bb, 3}, - {0x98bc, 9423}, - {0x98be, 0}, - {0x98bf, 1}, - {0x98c0, 2}, - {0x98c1, 3}, - {0x98c2, 4}, - {0x98c3, 5}, - {0x98c4, 8376}, - {0x98c6, 9424}, - {0x98c8, 9425}, - {0x98ca, 0}, - {0x98cb, 1}, - {0x98cc, 2}, - {0x98cd, 3}, - {0x98ce, 1668}, - {0x98d0, 0}, - {0x98d1, 6583}, - {0x98d2, 6584}, - {0x98d3, 6585}, - {0x98d5, 6586}, - {0x98d7, 0}, - {0x98d8, 3021}, - {0x98d9, 6587}, - {0x98da, 6588}, - {0x98db, 7924}, - {0x98dd, 0}, - {0x98de, 1638}, - {0x98df, 3402}, - {0x98e0, 9115}, - {0x98e2, 9854}, - {0x98e4, 0}, - {0x98e5, 1}, - {0x98e6, 2}, - {0x98e7, 5658}, - {0x98e8, 7655}, - {0x98e9, 9117}, - {0x98ea, 9119}, - {0x98eb, 9120}, - {0x98ed, 9121}, - {0x98ef, 7921}, - {0x98f1, 0}, - {0x98f2, 8734}, - {0x98f4, 9122}, - {0x98f6, 0}, - {0x98f7, 1}, - {0x98f8, 2}, - {0x98f9, 3}, - {0x98fa, 4}, - {0x98fb, 5}, - {0x98fc, 8523}, - {0x98fd, 7734}, - {0x98fe, 8501}, - {0x9901, 0}, - {0x9902, 1}, - {0x9903, 8109}, - {0x9905, 7763}, - {0x9907, 0}, - {0x9908, 1}, - {0x9909, 9123}, - {0x990a, 8707}, - {0x990c, 7911}, - {0x990d, 7656}, - {0x990f, 0}, - {0x9910, 1172}, - {0x9911, 9124}, - {0x9912, 8343}, - {0x9913, 7908}, - {0x9915, 0}, - {0x9916, 1}, - {0x9917, 2}, - {0x9918, 8760}, - {0x991a, 0}, - {0x991b, 9125}, - {0x991d, 0}, - {0x991e, 8090}, - {0x9920, 0}, - {0x9921, 8643}, - {0x9923, 0}, - {0x9924, 1}, - {0x9925, 2}, - {0x9926, 3}, - {0x9927, 4}, - {0x9928, 7982}, - {0x992a, 0}, - {0x992b, 1}, - {0x992c, 2}, - {0x992d, 3}, - {0x992e, 7657}, - {0x9930, 0}, - {0x9931, 1}, - {0x9932, 2}, - {0x9933, 9116}, - {0x9935, 0}, - {0x9936, 1}, - {0x9937, 9126}, - {0x9939, 0}, - {0x993a, 1}, - {0x993b, 2}, - {0x993c, 9118}, - {0x993e, 8245}, - {0x993f, 9127}, - {0x9941, 0}, - {0x9942, 1}, - {0x9943, 9128}, - {0x9945, 8309}, - {0x9947, 0}, - {0x9948, 9129}, - {0x9949, 9130}, - {0x994a, 9131}, - {0x994b, 8171}, - {0x994c, 9132}, - {0x994e, 0}, - {0x994f, 1}, - {0x9950, 2}, - {0x9951, 8042}, - {0x9952, 8441}, - {0x9954, 7659}, - {0x9955, 7658}, - {0x9957, 9830}, - {0x9959, 0}, - {0x995a, 1}, - {0x995b, 2}, - {0x995c, 9831}, - {0x995e, 7788}, - {0x9960, 0}, - {0x9961, 1}, - {0x9962, 9133}, - {0x9963, 5661}, - {0x9965, 2069}, - {0x9967, 5662}, - {0x9968, 5663}, - {0x9969, 5664}, - {0x996a, 5665}, - {0x996b, 5666}, - {0x996c, 5667}, - {0x996d, 1622}, - {0x996e, 4226}, - {0x996f, 2165}, - {0x9970, 3429}, - {0x9971, 1038}, - {0x9972, 3516}, - {0x9974, 5668}, - {0x9975, 1595}, - {0x9976, 3231}, - {0x9977, 5669}, - {0x9979, 0}, - {0x997a, 2201}, - {0x997c, 1126}, - {0x997d, 5670}, - {0x997f, 1589}, - {0x9980, 5671}, - {0x9981, 2876}, - {0x9983, 0}, - {0x9984, 5672}, - {0x9985, 3911}, - {0x9986, 1846}, - {0x9987, 5673}, - {0x9988, 2444}, - {0x998a, 5674}, - {0x998b, 1213}, - {0x998d, 5675}, - {0x998f, 2620}, - {0x9990, 5676}, - {0x9991, 5677}, - {0x9992, 2719}, - {0x9993, 5678}, - {0x9994, 5679}, - {0x9995, 5680}, - {0x9996, 3438}, - {0x9997, 4718}, - {0x9998, 4857}, - {0x9999, 3920}, - {0x999b, 0}, - {0x999c, 1}, - {0x999d, 2}, - {0x999e, 3}, - {0x999f, 4}, - {0x99a0, 5}, - {0x99a1, 6}, - {0x99a2, 7}, - {0x99a3, 8}, - {0x99a4, 9}, - {0x99a5, 6955}, - {0x99a7, 0}, - {0x99a8, 5086}, - {0x99aa, 0}, - {0x99ab, 1}, - {0x99ac, 8301}, - {0x99ad, 8770}, - {0x99ae, 7938}, - {0x99b0, 0}, - {0x99b1, 8579}, - {0x99b3, 7813}, - {0x99b4, 8681}, - {0x99b6, 0}, - {0x99b7, 1}, - {0x99b8, 2}, - {0x99b9, 3}, - {0x99ba, 4}, - {0x99bb, 5}, - {0x99bc, 6}, - {0x99bd, 7}, - {0x99be, 8}, - {0x99bf, 9}, - {0x99c0, 10}, - {0x99c1, 7767}, - {0x99c3, 0}, - {0x99c4, 1}, - {0x99c5, 2}, - {0x99c6, 3}, - {0x99c7, 4}, - {0x99c8, 5}, - {0x99c9, 6}, - {0x99ca, 7}, - {0x99cb, 8}, - {0x99cc, 9}, - {0x99cd, 10}, - {0x99ce, 11}, - {0x99cf, 12}, - {0x99d0, 8869}, - {0x99d1, 9223}, - {0x99d2, 8138}, - {0x99d4, 9218}, - {0x99d5, 8066}, - {0x99d7, 0}, - {0x99d8, 9224}, - {0x99d9, 9220}, - {0x99db, 8497}, - {0x99dd, 8580}, - {0x99df, 9219}, - {0x99e1, 8302}, - {0x99e2, 9227}, - {0x99e4, 0}, - {0x99e5, 1}, - {0x99e6, 2}, - {0x99e7, 3}, - {0x99e8, 4}, - {0x99e9, 5}, - {0x99ea, 6}, - {0x99eb, 7}, - {0x99ec, 8}, - {0x99ed, 7999}, - {0x99ef, 0}, - {0x99f0, 1}, - {0x99f1, 8295}, - {0x99f3, 0}, - {0x99f4, 1}, - {0x99f5, 2}, - {0x99f6, 3}, - {0x99f7, 4}, - {0x99f8, 5}, - {0x99f9, 6}, - {0x99fa, 7}, - {0x99fb, 8}, - {0x99fc, 9}, - {0x99fd, 10}, - {0x99fe, 11}, - {0x99ff, 8151}, - {0x9a01, 7811}, - {0x9a03, 0}, - {0x9a04, 1}, - {0x9a05, 9231}, - {0x9a07, 0}, - {0x9a08, 1}, - {0x9a09, 2}, - {0x9a0a, 3}, - {0x9a0b, 4}, - {0x9a0c, 5}, - {0x9a0d, 9230}, - {0x9a0e, 8391}, - {0x9a0f, 9229}, - {0x9a11, 0}, - {0x9a12, 1}, - {0x9a13, 2}, - {0x9a14, 3}, - {0x9a15, 4}, - {0x9a16, 9234}, - {0x9a18, 0}, - {0x9a19, 8375}, - {0x9a1b, 0}, - {0x9a1c, 1}, - {0x9a1d, 2}, - {0x9a1e, 3}, - {0x9a1f, 4}, - {0x9a20, 5}, - {0x9a21, 6}, - {0x9a22, 7}, - {0x9a23, 8}, - {0x9a24, 9}, - {0x9a25, 10}, - {0x9a26, 11}, - {0x9a27, 12}, - {0x9a28, 13}, - {0x9a29, 14}, - {0x9a2a, 15}, - {0x9a2b, 9200}, - {0x9a2d, 9233}, - {0x9a2e, 9236}, - {0x9a30, 8560}, - {0x9a32, 0}, - {0x9a33, 1}, - {0x9a34, 2}, - {0x9a35, 3}, - {0x9a36, 9221}, - {0x9a37, 8460}, - {0x9a38, 9237}, - {0x9a3a, 0}, - {0x9a3b, 1}, - {0x9a3c, 2}, - {0x9a3d, 3}, - {0x9a3e, 8294}, - {0x9a40, 9042}, - {0x9a41, 9235}, - {0x9a42, 9232}, - {0x9a43, 9238}, - {0x9a44, 9239}, - {0x9a45, 8433}, - {0x9a47, 0}, - {0x9a48, 1}, - {0x9a49, 2}, - {0x9a4a, 9226}, - {0x9a4c, 0}, - {0x9a4d, 9225}, - {0x9a4f, 9240}, - {0x9a51, 0}, - {0x9a52, 1}, - {0x9a53, 2}, - {0x9a54, 3}, - {0x9a55, 8103}, - {0x9a57, 8700}, - {0x9a59, 0}, - {0x9a5a, 8129}, - {0x9a5b, 9222}, - {0x9a5d, 0}, - {0x9a5e, 1}, - {0x9a5f, 8860}, - {0x9a61, 0}, - {0x9a62, 8270}, - {0x9a64, 9242}, - {0x9a65, 9241}, - {0x9a67, 0}, - {0x9a68, 1}, - {0x9a69, 2}, - {0x9a6a, 9228}, - {0x9a6c, 2708}, - {0x9a6d, 4329}, - {0x9a6e, 3717}, - {0x9a6f, 4058}, - {0x9a70, 1280}, - {0x9a71, 3194}, - {0x9a73, 1148}, - {0x9a74, 2662}, - {0x9a75, 6074}, - {0x9a76, 3410}, - {0x9a77, 6075}, - {0x9a78, 6076}, - {0x9a79, 2307}, - {0x9a7a, 6077}, - {0x9a7b, 4609}, - {0x9a7c, 3718}, - {0x9a7d, 6079}, - {0x9a7e, 2128}, - {0x9a7f, 6078}, - {0x9a80, 6080}, - {0x9a81, 6081}, - {0x9a82, 2709}, - {0x9a84, 2191}, - {0x9a85, 6082}, - {0x9a86, 2701}, - {0x9a87, 1886}, - {0x9a88, 6083}, - {0x9a8a, 6084}, - {0x9a8b, 1271}, - {0x9a8c, 4114}, - {0x9a8e, 0}, - {0x9a8f, 2354}, - {0x9a90, 6085}, - {0x9a91, 3086}, - {0x9a92, 6086}, - {0x9a93, 6087}, - {0x9a95, 0}, - {0x9a96, 6088}, - {0x9a97, 3020}, - {0x9a98, 6089}, - {0x9a9a, 3296}, - {0x9a9b, 6090}, - {0x9a9c, 6091}, - {0x9a9d, 6092}, - {0x9a9e, 5941}, - {0x9a9f, 6093}, - {0x9aa0, 6094}, - {0x9aa1, 2697}, - {0x9aa2, 6095}, - {0x9aa3, 6096}, - {0x9aa4, 4583}, - {0x9aa5, 6097}, - {0x9aa7, 6098}, - {0x9aa8, 1824}, - {0x9aaa, 0}, - {0x9aab, 1}, - {0x9aac, 2}, - {0x9aad, 3}, - {0x9aae, 4}, - {0x9aaf, 7721}, - {0x9ab0, 7635}, - {0x9ab1, 7634}, - {0x9ab3, 0}, - {0x9ab4, 1}, - {0x9ab5, 2}, - {0x9ab6, 7638}, - {0x9ab7, 7636}, - {0x9ab8, 1880}, - {0x9aba, 7639}, - {0x9abc, 7640}, - {0x9abe, 0}, - {0x9abf, 1}, - {0x9ac0, 7642}, - {0x9ac1, 7641}, - {0x9ac2, 7644}, - {0x9ac4, 0}, - {0x9ac5, 7643}, - {0x9ac7, 0}, - {0x9ac8, 1}, - {0x9ac9, 2}, - {0x9aca, 3}, - {0x9acb, 7645}, - {0x9acc, 7646}, - {0x9ace, 0}, - {0x9acf, 9825}, - {0x9ad1, 7647}, - {0x9ad2, 9892}, - {0x9ad3, 3549}, - {0x9ad4, 8564}, - {0x9ad5, 9827}, - {0x9ad6, 9826}, - {0x9ad8, 1754}, - {0x9ada, 0}, - {0x9adb, 1}, - {0x9adc, 2}, - {0x9add, 3}, - {0x9ade, 4}, - {0x9adf, 7660}, - {0x9ae1, 7661}, - {0x9ae3, 0}, - {0x9ae4, 1}, - {0x9ae5, 2}, - {0x9ae6, 7662}, - {0x9ae8, 0}, - {0x9ae9, 1}, - {0x9aea, 2}, - {0x9aeb, 7664}, - {0x9aed, 7666}, - {0x9aee, 9845}, - {0x9aef, 7663}, - {0x9af1, 0}, - {0x9af2, 1}, - {0x9af3, 2}, - {0x9af4, 3}, - {0x9af5, 4}, - {0x9af6, 5}, - {0x9af7, 6}, - {0x9af8, 7}, - {0x9af9, 7667}, - {0x9afb, 7665}, - {0x9afd, 0}, - {0x9afe, 1}, - {0x9aff, 2}, - {0x9b01, 0}, - {0x9b02, 1}, - {0x9b03, 4660}, - {0x9b05, 0}, - {0x9b06, 8524}, - {0x9b08, 7668}, - {0x9b0a, 0}, - {0x9b0b, 1}, - {0x9b0c, 2}, - {0x9b0d, 9850}, - {0x9b0f, 7669}, - {0x9b11, 0}, - {0x9b12, 1}, - {0x9b13, 7670}, - {0x9b15, 0}, - {0x9b16, 1}, - {0x9b17, 2}, - {0x9b18, 3}, - {0x9b19, 4}, - {0x9b1a, 9888}, - {0x9b1c, 0}, - {0x9b1d, 1}, - {0x9b1e, 2}, - {0x9b1f, 7671}, - {0x9b21, 0}, - {0x9b22, 9832}, - {0x9b23, 7672}, - {0x9b25, 7888}, - {0x9b27, 8342}, - {0x9b29, 9164}, - {0x9b2b, 0}, - {0x9b2c, 1}, - {0x9b2d, 2}, - {0x9b2e, 9160}, - {0x9b2f, 5019}, - {0x9b31, 8766}, - {0x9b32, 4704}, - {0x9b34, 0}, - {0x9b35, 1}, - {0x9b36, 2}, - {0x9b37, 3}, - {0x9b38, 4}, - {0x9b39, 5}, - {0x9b3a, 6}, - {0x9b3b, 6003}, - {0x9b3c, 1862}, - {0x9b3e, 0}, - {0x9b3f, 1}, - {0x9b40, 2}, - {0x9b41, 2442}, - {0x9b42, 2047}, - {0x9b43, 7649}, - {0x9b44, 3046}, - {0x9b45, 7648}, - {0x9b47, 7650}, - {0x9b48, 7652}, - {0x9b49, 7651}, - {0x9b4b, 0}, - {0x9b4c, 1}, - {0x9b4d, 7653}, - {0x9b4e, 9829}, - {0x9b4f, 3785}, - {0x9b51, 7654}, - {0x9b53, 0}, - {0x9b54, 2826}, - {0x9b56, 0}, - {0x9b57, 1}, - {0x9b58, 9828}, - {0x9b5a, 8761}, - {0x9b5c, 0}, - {0x9b5d, 1}, - {0x9b5e, 2}, - {0x9b5f, 3}, - {0x9b60, 4}, - {0x9b61, 5}, - {0x9b62, 6}, - {0x9b63, 7}, - {0x9b64, 8}, - {0x9b65, 9}, - {0x9b66, 10}, - {0x9b67, 11}, - {0x9b68, 12}, - {0x9b69, 13}, - {0x9b6a, 14}, - {0x9b6b, 15}, - {0x9b6c, 16}, - {0x9b6d, 17}, - {0x9b6e, 18}, - {0x9b6f, 8266}, - {0x9b71, 0}, - {0x9b72, 1}, - {0x9b73, 2}, - {0x9b74, 9759}, - {0x9b76, 0}, - {0x9b77, 9758}, - {0x9b79, 0}, - {0x9b7a, 1}, - {0x9b7b, 2}, - {0x9b7c, 3}, - {0x9b7d, 4}, - {0x9b7e, 5}, - {0x9b7f, 6}, - {0x9b80, 7}, - {0x9b81, 9760}, - {0x9b83, 9761}, - {0x9b85, 0}, - {0x9b86, 1}, - {0x9b87, 2}, - {0x9b88, 3}, - {0x9b89, 4}, - {0x9b8a, 5}, - {0x9b8b, 6}, - {0x9b8c, 7}, - {0x9b8d, 8}, - {0x9b8e, 9762}, - {0x9b90, 9767}, - {0x9b91, 7737}, - {0x9b92, 9765}, - {0x9b94, 0}, - {0x9b95, 1}, - {0x9b96, 2}, - {0x9b97, 3}, - {0x9b98, 4}, - {0x9b99, 5}, - {0x9b9a, 9769}, - {0x9b9c, 0}, - {0x9b9d, 9774}, - {0x9b9e, 9771}, - {0x9ba0, 0}, - {0x9ba1, 1}, - {0x9ba2, 2}, - {0x9ba3, 3}, - {0x9ba4, 4}, - {0x9ba5, 5}, - {0x9ba6, 6}, - {0x9ba7, 7}, - {0x9ba8, 8}, - {0x9ba9, 9}, - {0x9baa, 9770}, - {0x9bab, 9773}, - {0x9bad, 9768}, - {0x9bae, 8633}, - {0x9bb0, 0}, - {0x9bb1, 1}, - {0x9bb2, 2}, - {0x9bb3, 3}, - {0x9bb4, 4}, - {0x9bb5, 5}, - {0x9bb6, 6}, - {0x9bb7, 7}, - {0x9bb8, 8}, - {0x9bb9, 9}, - {0x9bba, 10}, - {0x9bbb, 11}, - {0x9bbc, 12}, - {0x9bbd, 13}, - {0x9bbe, 14}, - {0x9bbf, 15}, - {0x9bc0, 9782}, - {0x9bc1, 9776}, - {0x9bc3, 0}, - {0x9bc4, 1}, - {0x9bc5, 2}, - {0x9bc6, 3}, - {0x9bc7, 9784}, - {0x9bc9, 8205}, - {0x9bca, 9783}, - {0x9bcc, 0}, - {0x9bcd, 1}, - {0x9bce, 2}, - {0x9bcf, 3}, - {0x9bd0, 4}, - {0x9bd1, 5}, - {0x9bd2, 6}, - {0x9bd3, 7}, - {0x9bd4, 9797}, - {0x9bd6, 9786}, - {0x9bd8, 0}, - {0x9bd9, 1}, - {0x9bda, 2}, - {0x9bdb, 9795}, - {0x9bdd, 9792}, - {0x9bdf, 0}, - {0x9be0, 1}, - {0x9be1, 9789}, - {0x9be2, 9793}, - {0x9be4, 9790}, - {0x9be6, 0}, - {0x9be7, 9791}, - {0x9be8, 8128}, - {0x9bea, 9787}, - {0x9beb, 9788}, - {0x9bed, 0}, - {0x9bee, 1}, - {0x9bef, 2}, - {0x9bf0, 9794}, - {0x9bf2, 0}, - {0x9bf3, 1}, - {0x9bf4, 9796}, - {0x9bf6, 0}, - {0x9bf7, 1}, - {0x9bf8, 2}, - {0x9bf9, 3}, - {0x9bfa, 4}, - {0x9bfb, 5}, - {0x9bfc, 6}, - {0x9bfd, 9785}, - {0x9bff, 9804}, - {0x9c01, 0}, - {0x9c02, 1}, - {0x9c03, 2}, - {0x9c04, 3}, - {0x9c05, 4}, - {0x9c06, 5}, - {0x9c07, 6}, - {0x9c08, 9799}, - {0x9c09, 9803}, - {0x9c0b, 0}, - {0x9c0c, 1}, - {0x9c0d, 9801}, - {0x9c0f, 0}, - {0x9c10, 9800}, - {0x9c12, 9802}, - {0x9c13, 8456}, - {0x9c15, 0}, - {0x9c16, 1}, - {0x9c17, 2}, - {0x9c18, 3}, - {0x9c19, 4}, - {0x9c1a, 5}, - {0x9c1b, 6}, - {0x9c1c, 7}, - {0x9c1d, 8}, - {0x9c1e, 9}, - {0x9c1f, 10}, - {0x9c20, 9805}, - {0x9c22, 0}, - {0x9c23, 9780}, - {0x9c25, 9809}, - {0x9c27, 0}, - {0x9c28, 9808}, - {0x9c29, 9810}, - {0x9c2b, 0}, - {0x9c2c, 1}, - {0x9c2d, 9807}, - {0x9c2f, 0}, - {0x9c30, 1}, - {0x9c31, 9778}, - {0x9c32, 9806}, - {0x9c33, 9811}, - {0x9c35, 9815}, - {0x9c37, 9781}, - {0x9c39, 9779}, - {0x9c3b, 9814}, - {0x9c3d, 0}, - {0x9c3e, 9812}, - {0x9c40, 0}, - {0x9c41, 1}, - {0x9c42, 2}, - {0x9c43, 3}, - {0x9c44, 4}, - {0x9c45, 9816}, - {0x9c47, 0}, - {0x9c48, 9813}, - {0x9c49, 7757}, - {0x9c4b, 0}, - {0x9c4c, 1}, - {0x9c4d, 2}, - {0x9c4e, 3}, - {0x9c4f, 4}, - {0x9c50, 5}, - {0x9c51, 6}, - {0x9c52, 9819}, - {0x9c54, 9818}, - {0x9c56, 9817}, - {0x9c57, 8238}, - {0x9c58, 9775}, - {0x9c5a, 0}, - {0x9c5b, 1}, - {0x9c5c, 2}, - {0x9c5d, 9798}, - {0x9c5f, 9766}, - {0x9c61, 0}, - {0x9c62, 1}, - {0x9c63, 2}, - {0x9c64, 3}, - {0x9c65, 4}, - {0x9c66, 5}, - {0x9c67, 9820}, - {0x9c69, 0}, - {0x9c6a, 1}, - {0x9c6b, 2}, - {0x9c6c, 3}, - {0x9c6d, 9772}, - {0x9c6f, 0}, - {0x9c70, 1}, - {0x9c71, 2}, - {0x9c72, 3}, - {0x9c73, 4}, - {0x9c74, 5}, - {0x9c75, 6}, - {0x9c76, 7}, - {0x9c77, 8}, - {0x9c78, 9763}, - {0x9c7a, 9777}, - {0x9c7c, 4296}, - {0x9c7e, 0}, - {0x9c7f, 7561}, - {0x9c81, 2650}, - {0x9c82, 7562}, - {0x9c84, 0}, - {0x9c85, 7563}, - {0x9c86, 7564}, - {0x9c87, 7565}, - {0x9c88, 7566}, - {0x9c8a, 0}, - {0x9c8b, 7568}, - {0x9c8d, 1044}, - {0x9c8e, 7569}, - {0x9c90, 7570}, - {0x9c91, 7571}, - {0x9c92, 7572}, - {0x9c94, 7573}, - {0x9c95, 7574}, - {0x9c97, 0}, - {0x9c98, 1}, - {0x9c99, 2}, - {0x9c9a, 7575}, - {0x9c9b, 7576}, - {0x9c9c, 3895}, - {0x9c9e, 7577}, - {0x9c9f, 7578}, - {0x9ca0, 7579}, - {0x9ca1, 7580}, - {0x9ca2, 7581}, - {0x9ca3, 7582}, - {0x9ca4, 2523}, - {0x9ca5, 7583}, - {0x9ca6, 7584}, - {0x9ca7, 7585}, - {0x9ca8, 7586}, - {0x9ca9, 7587}, - {0x9cab, 7588}, - {0x9cad, 7589}, - {0x9cae, 7590}, - {0x9cb0, 7591}, - {0x9cb1, 7592}, - {0x9cb2, 7593}, - {0x9cb3, 7594}, - {0x9cb4, 7595}, - {0x9cb5, 7596}, - {0x9cb6, 7597}, - {0x9cb7, 7598}, - {0x9cb8, 2263}, - {0x9cba, 7599}, - {0x9cbb, 7600}, - {0x9cbc, 7601}, - {0x9cbd, 7602}, - {0x9cbf, 0}, - {0x9cc0, 1}, - {0x9cc1, 2}, - {0x9cc2, 3}, - {0x9cc3, 3285}, - {0x9cc4, 7603}, - {0x9cc5, 7604}, - {0x9cc6, 7605}, - {0x9cc7, 7606}, - {0x9cc9, 0}, - {0x9cca, 7607}, - {0x9ccb, 7608}, - {0x9ccc, 7609}, - {0x9ccd, 7610}, - {0x9cce, 7611}, - {0x9ccf, 7612}, - {0x9cd0, 7613}, - {0x9cd2, 0}, - {0x9cd3, 7614}, - {0x9cd4, 7615}, - {0x9cd5, 7616}, - {0x9cd6, 1111}, - {0x9cd7, 7617}, - {0x9cd8, 7618}, - {0x9cd9, 7619}, - {0x9cdb, 0}, - {0x9cdc, 7620}, - {0x9cdd, 7621}, - {0x9cde, 2596}, - {0x9cdf, 7622}, - {0x9ce1, 0}, - {0x9ce2, 7623}, - {0x9ce4, 0}, - {0x9ce5, 8348}, - {0x9ce7, 0}, - {0x9ce8, 1}, - {0x9ce9, 9600}, - {0x9ceb, 0}, - {0x9cec, 8924}, - {0x9cee, 0}, - {0x9cef, 1}, - {0x9cf0, 2}, - {0x9cf1, 3}, - {0x9cf2, 4}, - {0x9cf3, 7941}, - {0x9cf4, 8331}, - {0x9cf6, 9601}, - {0x9cf8, 0}, - {0x9cf9, 1}, - {0x9cfa, 2}, - {0x9cfb, 3}, - {0x9cfc, 4}, - {0x9cfd, 5}, - {0x9cfe, 6}, - {0x9cff, 7}, - {0x9d01, 0}, - {0x9d02, 1}, - {0x9d03, 2}, - {0x9d04, 3}, - {0x9d05, 4}, - {0x9d06, 9603}, - {0x9d07, 9602}, - {0x9d09, 8686}, - {0x9d0b, 0}, - {0x9d0c, 1}, - {0x9d0d, 2}, - {0x9d0e, 3}, - {0x9d0f, 4}, - {0x9d10, 5}, - {0x9d11, 6}, - {0x9d12, 7}, - {0x9d13, 8}, - {0x9d14, 9}, - {0x9d15, 8578}, - {0x9d17, 0}, - {0x9d18, 1}, - {0x9d19, 2}, - {0x9d1a, 3}, - {0x9d1b, 8771}, - {0x9d1d, 9607}, - {0x9d1f, 9608}, - {0x9d21, 0}, - {0x9d22, 1}, - {0x9d23, 9604}, - {0x9d25, 0}, - {0x9d26, 8701}, - {0x9d28, 8687}, - {0x9d2a, 0}, - {0x9d2b, 1}, - {0x9d2c, 2}, - {0x9d2d, 3}, - {0x9d2e, 4}, - {0x9d2f, 9610}, - {0x9d30, 9612}, - {0x9d32, 0}, - {0x9d33, 1}, - {0x9d34, 2}, - {0x9d35, 3}, - {0x9d36, 4}, - {0x9d37, 5}, - {0x9d38, 6}, - {0x9d39, 7}, - {0x9d3a, 8}, - {0x9d3b, 8007}, - {0x9d3d, 0}, - {0x9d3e, 1}, - {0x9d3f, 7965}, - {0x9d41, 0}, - {0x9d42, 9613}, - {0x9d44, 0}, - {0x9d45, 1}, - {0x9d46, 2}, - {0x9d47, 3}, - {0x9d48, 4}, - {0x9d49, 5}, - {0x9d4a, 6}, - {0x9d4b, 7}, - {0x9d4c, 8}, - {0x9d4d, 9}, - {0x9d4e, 10}, - {0x9d4f, 11}, - {0x9d50, 12}, - {0x9d51, 8144}, - {0x9d52, 9618}, - {0x9d53, 9615}, - {0x9d55, 0}, - {0x9d56, 1}, - {0x9d57, 2}, - {0x9d58, 3}, - {0x9d59, 4}, - {0x9d5a, 5}, - {0x9d5b, 6}, - {0x9d5c, 9620}, - {0x9d5d, 7904}, - {0x9d5f, 0}, - {0x9d60, 9617}, - {0x9d61, 9621}, - {0x9d63, 0}, - {0x9d64, 1}, - {0x9d65, 2}, - {0x9d66, 3}, - {0x9d67, 4}, - {0x9d68, 5}, - {0x9d69, 6}, - {0x9d6a, 9623}, - {0x9d6c, 8374}, - {0x9d6e, 0}, - {0x9d6f, 9624}, - {0x9d71, 0}, - {0x9d72, 8438}, - {0x9d74, 0}, - {0x9d75, 1}, - {0x9d76, 2}, - {0x9d77, 3}, - {0x9d78, 4}, - {0x9d79, 5}, - {0x9d7a, 6}, - {0x9d7b, 7}, - {0x9d7c, 8}, - {0x9d7d, 9}, - {0x9d7e, 10}, - {0x9d7f, 11}, - {0x9d80, 12}, - {0x9d81, 13}, - {0x9d82, 14}, - {0x9d83, 15}, - {0x9d84, 16}, - {0x9d85, 17}, - {0x9d86, 18}, - {0x9d87, 9605}, - {0x9d89, 9625}, - {0x9d8b, 0}, - {0x9d8c, 1}, - {0x9d8d, 2}, - {0x9d8e, 3}, - {0x9d8f, 4}, - {0x9d90, 5}, - {0x9d91, 6}, - {0x9d92, 7}, - {0x9d93, 9622}, - {0x9d95, 0}, - {0x9d96, 1}, - {0x9d97, 2}, - {0x9d98, 9626}, - {0x9d9a, 9627}, - {0x9d9c, 0}, - {0x9d9d, 1}, - {0x9d9e, 2}, - {0x9d9f, 3}, - {0x9da0, 4}, - {0x9da1, 5}, - {0x9da2, 6}, - {0x9da3, 7}, - {0x9da4, 8}, - {0x9da5, 9629}, - {0x9da7, 0}, - {0x9da8, 1}, - {0x9da9, 9630}, - {0x9dab, 0}, - {0x9dac, 1}, - {0x9dad, 2}, - {0x9dae, 3}, - {0x9daf, 9036}, - {0x9db1, 0}, - {0x9db2, 1}, - {0x9db3, 2}, - {0x9db4, 8004}, - {0x9db6, 0}, - {0x9db7, 1}, - {0x9db8, 2}, - {0x9db9, 3}, - {0x9dba, 4}, - {0x9dbb, 9824}, - {0x9dbc, 9632}, - {0x9dbe, 0}, - {0x9dbf, 1}, - {0x9dc0, 9628}, - {0x9dc2, 9631}, - {0x9dc4, 8044}, - {0x9dc6, 0}, - {0x9dc7, 1}, - {0x9dc8, 2}, - {0x9dc9, 3}, - {0x9dca, 4}, - {0x9dcb, 5}, - {0x9dcc, 6}, - {0x9dcd, 7}, - {0x9dce, 8}, - {0x9dcf, 9}, - {0x9dd0, 10}, - {0x9dd1, 11}, - {0x9dd2, 12}, - {0x9dd3, 9634}, - {0x9dd5, 0}, - {0x9dd6, 1}, - {0x9dd7, 8366}, - {0x9dd9, 9611}, - {0x9dda, 9635}, - {0x9ddc, 0}, - {0x9ddd, 1}, - {0x9dde, 2}, - {0x9ddf, 3}, - {0x9de0, 4}, - {0x9de1, 5}, - {0x9de2, 6}, - {0x9de3, 7}, - {0x9de4, 8}, - {0x9de5, 9609}, - {0x9de6, 9637}, - {0x9de8, 0}, - {0x9de9, 1}, - {0x9dea, 2}, - {0x9deb, 3}, - {0x9dec, 4}, - {0x9ded, 5}, - {0x9dee, 6}, - {0x9def, 9636}, - {0x9df1, 0}, - {0x9df2, 9638}, - {0x9df3, 9619}, - {0x9df5, 0}, - {0x9df6, 1}, - {0x9df7, 2}, - {0x9df8, 9639}, - {0x9df9, 8738}, - {0x9dfa, 9641}, - {0x9dfc, 0}, - {0x9dfd, 1}, - {0x9dfe, 2}, - {0x9dff, 3}, - {0x9e01, 0}, - {0x9e02, 1}, - {0x9e03, 2}, - {0x9e04, 3}, - {0x9e05, 4}, - {0x9e06, 5}, - {0x9e07, 6}, - {0x9e08, 7}, - {0x9e09, 8}, - {0x9e0a, 9}, - {0x9e0b, 10}, - {0x9e0c, 9640}, - {0x9e0e, 0}, - {0x9e0f, 1}, - {0x9e10, 2}, - {0x9e11, 3}, - {0x9e12, 4}, - {0x9e13, 5}, - {0x9e14, 6}, - {0x9e15, 9606}, - {0x9e17, 0}, - {0x9e18, 1}, - {0x9e19, 2}, - {0x9e1a, 9633}, - {0x9e1b, 9642}, - {0x9e1d, 9616}, - {0x9e1e, 9614}, - {0x9e1f, 2900}, - {0x9e20, 6965}, - {0x9e21, 2073}, - {0x9e22, 6966}, - {0x9e23, 2814}, - {0x9e25, 2937}, - {0x9e26, 4068}, - {0x9e28, 6967}, - {0x9e29, 6968}, - {0x9e2a, 6969}, - {0x9e2b, 6970}, - {0x9e2c, 6971}, - {0x9e2d, 4069}, - {0x9e2f, 4117}, - {0x9e31, 6973}, - {0x9e32, 6972}, - {0x9e33, 4330}, - {0x9e35, 3715}, - {0x9e36, 6974}, - {0x9e37, 6976}, - {0x9e38, 6975}, - {0x9e39, 6977}, - {0x9e3a, 6978}, - {0x9e3c, 0}, - {0x9e3d, 1766}, - {0x9e3e, 6979}, - {0x9e3f, 1951}, - {0x9e41, 6980}, - {0x9e42, 6981}, - {0x9e43, 2328}, - {0x9e44, 6982}, - {0x9e45, 1579}, - {0x9e46, 6983}, - {0x9e47, 6984}, - {0x9e48, 6985}, - {0x9e49, 6986}, - {0x9e4a, 3216}, - {0x9e4b, 6987}, - {0x9e4c, 6988}, - {0x9e4e, 6989}, - {0x9e4f, 2997}, - {0x9e51, 6990}, - {0x9e53, 0}, - {0x9e54, 1}, - {0x9e55, 6991}, - {0x9e57, 6992}, - {0x9e58, 7637}, - {0x9e5a, 6993}, - {0x9e5b, 6994}, - {0x9e5c, 6995}, - {0x9e5e, 6996}, - {0x9e60, 0}, - {0x9e61, 1}, - {0x9e62, 2}, - {0x9e63, 6997}, - {0x9e64, 1934}, - {0x9e66, 6998}, - {0x9e67, 6999}, - {0x9e68, 7000}, - {0x9e69, 7001}, - {0x9e6a, 7002}, - {0x9e6b, 7003}, - {0x9e6c, 7004}, - {0x9e6d, 7006}, - {0x9e6f, 0}, - {0x9e70, 4234}, - {0x9e71, 7005}, - {0x9e73, 7007}, - {0x9e75, 9864}, - {0x9e77, 0}, - {0x9e78, 1}, - {0x9e79, 9886}, - {0x9e7a, 9723}, - {0x9e7c, 8076}, - {0x9e7d, 8692}, - {0x9e7e, 7446}, - {0x9e7f, 2656}, - {0x9e81, 0}, - {0x9e82, 7676}, - {0x9e84, 0}, - {0x9e85, 1}, - {0x9e86, 2}, - {0x9e87, 7677}, - {0x9e88, 7678}, - {0x9e8a, 0}, - {0x9e8b, 7679}, - {0x9e8d, 0}, - {0x9e8e, 1}, - {0x9e8f, 2}, - {0x9e90, 3}, - {0x9e91, 4}, - {0x9e92, 7680}, - {0x9e93, 2651}, - {0x9e95, 0}, - {0x9e96, 1}, - {0x9e97, 8207}, - {0x9e99, 0}, - {0x9e9a, 1}, - {0x9e9b, 2}, - {0x9e9c, 3}, - {0x9e9d, 7682}, - {0x9e9f, 7683}, - {0x9ea1, 0}, - {0x9ea2, 1}, - {0x9ea3, 2}, - {0x9ea4, 3}, - {0x9ea5, 8305}, - {0x9ea6, 2714}, - {0x9ea8, 0}, - {0x9ea9, 9719}, - {0x9eab, 0}, - {0x9eac, 1}, - {0x9ead, 2}, - {0x9eae, 3}, - {0x9eaf, 9878}, - {0x9eb1, 0}, - {0x9eb2, 1}, - {0x9eb3, 2}, - {0x9eb4, 7406}, - {0x9eb5, 9871}, - {0x9eb7, 0}, - {0x9eb8, 7405}, - {0x9eba, 0}, - {0x9ebb, 2704}, - {0x9ebd, 7673}, - {0x9ebe, 7674}, - {0x9ec0, 0}, - {0x9ec1, 1}, - {0x9ec2, 2}, - {0x9ec3, 3}, - {0x9ec4, 2011}, - {0x9ec6, 0}, - {0x9ec7, 1}, - {0x9ec8, 2}, - {0x9ec9, 4856}, - {0x9ecb, 0}, - {0x9ecc, 8922}, - {0x9ecd, 3465}, - {0x9ece, 2515}, - {0x9ecf, 6954}, - {0x9ed1, 1937}, - {0x9ed3, 0}, - {0x9ed4, 3114}, - {0x9ed6, 0}, - {0x9ed7, 1}, - {0x9ed8, 2831}, - {0x9eda, 0}, - {0x9edb, 7684}, - {0x9edc, 7685}, - {0x9edd, 7686}, - {0x9ede, 7873}, - {0x9edf, 7688}, - {0x9ee0, 7687}, - {0x9ee2, 7689}, - {0x9ee4, 0}, - {0x9ee5, 7692}, - {0x9ee7, 7691}, - {0x9ee8, 7859}, - {0x9ee9, 7690}, - {0x9eea, 7693}, - {0x9eec, 0}, - {0x9eed, 1}, - {0x9eee, 2}, - {0x9eef, 7694}, - {0x9ef1, 0}, - {0x9ef2, 9834}, - {0x9ef4, 9866}, - {0x9ef6, 0}, - {0x9ef7, 9833}, - {0x9ef9, 6741}, - {0x9efb, 6742}, - {0x9efc, 6743}, - {0x9efd, 9752}, - {0x9efe, 7542}, - {0x9eff, 9753}, - {0x9f01, 0}, - {0x9f02, 1}, - {0x9f03, 2}, - {0x9f04, 3}, - {0x9f05, 4}, - {0x9f06, 5}, - {0x9f07, 6}, - {0x9f08, 7}, - {0x9f09, 9754}, - {0x9f0b, 7543}, - {0x9f0d, 7544}, - {0x9f0e, 1509}, - {0x9f10, 4724}, - {0x9f12, 0}, - {0x9f13, 1821}, - {0x9f15, 9843}, - {0x9f17, 4721}, - {0x9f19, 5087}, - {0x9f1b, 0}, - {0x9f1c, 1}, - {0x9f1d, 2}, - {0x9f1e, 3}, - {0x9f1f, 4}, - {0x9f20, 3466}, - {0x9f22, 7695}, - {0x9f24, 0}, - {0x9f25, 1}, - {0x9f26, 2}, - {0x9f27, 3}, - {0x9f28, 4}, - {0x9f29, 5}, - {0x9f2a, 6}, - {0x9f2b, 7}, - {0x9f2c, 7696}, - {0x9f2e, 0}, - {0x9f2f, 7697}, - {0x9f31, 0}, - {0x9f32, 1}, - {0x9f33, 2}, - {0x9f34, 3}, - {0x9f35, 4}, - {0x9f36, 5}, - {0x9f37, 7699}, - {0x9f39, 7698}, - {0x9f3b, 1072}, - {0x9f3d, 7700}, - {0x9f3e, 7701}, - {0x9f40, 0}, - {0x9f41, 1}, - {0x9f42, 2}, - {0x9f43, 3}, - {0x9f44, 7702}, - {0x9f46, 0}, - {0x9f47, 1}, - {0x9f48, 2}, - {0x9f49, 3}, - {0x9f4a, 8390}, - {0x9f4b, 8811}, - {0x9f4d, 0}, - {0x9f4e, 1}, - {0x9f4f, 9427}, - {0x9f50, 3082}, - {0x9f51, 6594}, - {0x9f52, 7814}, - {0x9f54, 9743}, - {0x9f56, 0}, - {0x9f57, 1}, - {0x9f58, 2}, - {0x9f59, 9745}, - {0x9f5b, 0}, - {0x9f5c, 9747}, - {0x9f5e, 0}, - {0x9f5f, 9744}, - {0x9f60, 9746}, - {0x9f61, 8240}, - {0x9f63, 9841}, - {0x9f65, 0}, - {0x9f66, 9748}, - {0x9f68, 0}, - {0x9f69, 1}, - {0x9f6a, 9750}, - {0x9f6c, 9749}, - {0x9f6e, 0}, - {0x9f6f, 1}, - {0x9f70, 2}, - {0x9f71, 3}, - {0x9f72, 8434}, - {0x9f74, 0}, - {0x9f75, 1}, - {0x9f76, 2}, - {0x9f77, 9751}, - {0x9f79, 0}, - {0x9f7a, 1}, - {0x9f7b, 2}, - {0x9f7c, 3}, - {0x9f7d, 4}, - {0x9f7e, 5}, - {0x9f7f, 1282}, - {0x9f80, 7533}, - {0x9f82, 0}, - {0x9f83, 7534}, - {0x9f84, 2605}, - {0x9f85, 7535}, - {0x9f86, 7536}, - {0x9f87, 7537}, - {0x9f88, 7538}, - {0x9f89, 7539}, - {0x9f8a, 7540}, - {0x9f8b, 3198}, - {0x9f8c, 7541}, - {0x9f8d, 8247}, - {0x9f8f, 0}, - {0x9f90, 8371}, - {0x9f92, 0}, - {0x9f93, 1}, - {0x9f94, 7970}, - {0x9f95, 9453}, - {0x9f97, 0}, - {0x9f98, 1}, - {0x9f99, 2627}, - {0x9f9a, 1793}, - {0x9f9b, 6740}, - {0x9f9c, 7988}, - {0x9f9e, 0}, - {0x9f9f, 1859}, - {0x9fa0, 4851}, - {0x9fa2, 0}, - {0x9fa3, 1}, - {0x9fa4, 2}, - {0x9fa5, 3}, - {0xe817, 0}, - {0xe818, 1}, - {0xe82c, 0}, - {0xe832, 0}, - {0xe855, 0}, - {0xfa0e, 0}, - {0xfa0f, 1}, - {0xfa14, 0}, - {0xfa20, 0}, - {0xfa21, 1}, - {0xfa24, 0}, - {0xfa28, 0}, - {0xfa29, 1}, - {0xfe4a, 0}, - {0xfe4b, 1}, - {0xfe4c, 2}, - {0xfe4d, 3}, - {0xfe4e, 4}, - {0xfe4f, 5}, - {0xfe50, 6}, - {0xfe51, 7}, - {0xfe52, 8}, - {0xfe55, 0}, - {0xfe56, 1}, - {0xfe57, 2}, - {0xfe5a, 0}, - {0xfe5b, 1}, - {0xfe5c, 2}, - {0xfe5d, 3}, - {0xfe5e, 4}, - {0xfe5f, 5}, - {0xfe60, 6}, - {0xfe61, 7}, - {0xfe62, 8}, - {0xfe63, 9}, - {0xfe64, 10}, - {0xfe65, 11}, - {0xfe66, 12}, - {0xfe69, 0}, - {0xfe6a, 1}, - {0xfe6b, 2}, - {0xff01, 262}, - {0xff02, 263}, - {0xff03, 264}, - {0xff04, 166}, - {0xff05, 266}, - {0xff06, 267}, - {0xff07, 268}, - {0xff08, 269}, - {0xff09, 270}, - {0xff0a, 271}, - {0xff0b, 272}, - {0xff0c, 273}, - {0xff0d, 274}, - {0xff0e, 275}, - {0xff0f, 276}, - {0xff10, 277}, - {0xff11, 278}, - {0xff12, 279}, - {0xff13, 280}, - {0xff14, 281}, - {0xff15, 282}, - {0xff16, 283}, - {0xff17, 284}, - {0xff18, 285}, - {0xff19, 286}, - {0xff1a, 287}, - {0xff1b, 288}, - {0xff1c, 289}, - {0xff1d, 290}, - {0xff1e, 291}, - {0xff1f, 292}, - {0xff20, 293}, - {0xff21, 294}, - {0xff22, 295}, - {0xff23, 296}, - {0xff24, 297}, - {0xff25, 298}, - {0xff26, 299}, - {0xff27, 300}, - {0xff28, 301}, - {0xff29, 302}, - {0xff2a, 303}, - {0xff2b, 304}, - {0xff2c, 305}, - {0xff2d, 306}, - {0xff2e, 307}, - {0xff2f, 308}, - {0xff30, 309}, - {0xff31, 310}, - {0xff32, 311}, - {0xff33, 312}, - {0xff34, 313}, - {0xff35, 314}, - {0xff36, 315}, - {0xff37, 316}, - {0xff38, 317}, - {0xff39, 318}, - {0xff3a, 319}, - {0xff3b, 320}, - {0xff3c, 321}, - {0xff3d, 322}, - {0xff3e, 323}, - {0xff3f, 324}, - {0xff40, 325}, - {0xff41, 326}, - {0xff42, 327}, - {0xff43, 328}, - {0xff44, 329}, - {0xff45, 330}, - {0xff46, 331}, - {0xff47, 332}, - {0xff48, 333}, - {0xff49, 334}, - {0xff4a, 335}, - {0xff4b, 336}, - {0xff4c, 337}, - {0xff4d, 338}, - {0xff4e, 339}, - {0xff4f, 340}, - {0xff50, 341}, - {0xff51, 342}, - {0xff52, 343}, - {0xff53, 344}, - {0xff54, 345}, - {0xff55, 346}, - {0xff56, 347}, - {0xff57, 348}, - {0xff58, 349}, - {0xff59, 350}, - {0xff5a, 351}, - {0xff5b, 352}, - {0xff5c, 353}, - {0xff5d, 354}, - {0xff5e, 106}, - {0xffe0, 168}, - {0xffe1, 169}, - {0xffe3, 355}, - {0xffe5, 265}}; - diff --git a/src/add-ons/print/drivers/pdf/source/japanese.h b/src/add-ons/print/drivers/pdf/source/japanese.h deleted file mode 100644 index 156611537f..0000000000 --- a/src/add-ons/print/drivers/pdf/source/japanese.h +++ /dev/null @@ -1,8478 +0,0 @@ -// WARNING: MACHINE GENERATED, DON'T CHANGE! -static unicode_to_cid japanese[] = { - {0x20, 1}, - {0x21, 2}, - {0x22, 3}, - {0x23, 4}, - {0x24, 5}, - {0x25, 6}, - {0x26, 7}, - {0x27, 8}, - {0x28, 9}, - {0x29, 10}, - {0x2a, 11}, - {0x2b, 12}, - {0x2c, 13}, - {0x2d, 14}, - {0x2e, 15}, - {0x2f, 16}, - {0x30, 17}, - {0x31, 18}, - {0x32, 19}, - {0x33, 20}, - {0x34, 21}, - {0x35, 22}, - {0x36, 23}, - {0x37, 24}, - {0x38, 25}, - {0x39, 26}, - {0x3a, 27}, - {0x3b, 28}, - {0x3c, 29}, - {0x3d, 30}, - {0x3e, 31}, - {0x3f, 32}, - {0x40, 33}, - {0x41, 34}, - {0x42, 35}, - {0x43, 36}, - {0x44, 37}, - {0x45, 38}, - {0x46, 39}, - {0x47, 40}, - {0x48, 41}, - {0x49, 42}, - {0x4a, 43}, - {0x4b, 44}, - {0x4c, 45}, - {0x4d, 46}, - {0x4e, 47}, - {0x4f, 48}, - {0x50, 49}, - {0x51, 50}, - {0x52, 51}, - {0x53, 52}, - {0x54, 53}, - {0x55, 54}, - {0x56, 55}, - {0x57, 56}, - {0x58, 57}, - {0x59, 58}, - {0x5a, 59}, - {0x5b, 60}, - {0x5c, 97}, - {0x5d, 62}, - {0x5e, 63}, - {0x5f, 64}, - {0x60, 65}, - {0x61, 66}, - {0x62, 67}, - {0x63, 68}, - {0x64, 69}, - {0x65, 70}, - {0x66, 71}, - {0x67, 72}, - {0x68, 73}, - {0x69, 74}, - {0x6a, 75}, - {0x6b, 76}, - {0x6c, 77}, - {0x6d, 78}, - {0x6e, 79}, - {0x6f, 80}, - {0x70, 81}, - {0x71, 82}, - {0x72, 83}, - {0x73, 84}, - {0x74, 85}, - {0x75, 86}, - {0x76, 87}, - {0x77, 88}, - {0x78, 89}, - {0x79, 90}, - {0x7a, 91}, - {0x7b, 92}, - {0x7c, 93}, - {0x7d, 94}, - {0x7e, 95}, - {0xa1, 101}, - {0xa2, 102}, - {0xa3, 103}, - {0xa4, 107}, - {0xa5, 61}, - {0xa6, 99}, - {0xa7, 720}, - {0xa8, 647}, - {0xa9, 152}, - {0xaa, 140}, - {0xab, 109}, - {0xac, 153}, - {0xad, 151}, - {0xae, 154}, - {0xaf, 129}, - {0xb0, 707}, - {0xb1, 694}, - {0xb2, 157}, - {0xb3, 158}, - {0xb4, 645}, - {0xb5, 159}, - {0xb6, 778}, - {0xb7, 117}, - {0xb8, 134}, - {0xb9, 160}, - {0xba, 144}, - {0xbb, 123}, - {0xbc, 161}, - {0xbd, 162}, - {0xbe, 163}, - {0xbf, 126}, - {0xc0, 164}, - {0xc1, 165}, - {0xc2, 166}, - {0xc3, 167}, - {0xc4, 168}, - {0xc5, 169}, - {0xc6, 139}, - {0xc7, 170}, - {0xc8, 171}, - {0xc9, 172}, - {0xca, 173}, - {0xcb, 174}, - {0xcc, 175}, - {0xcd, 176}, - {0xce, 177}, - {0xcf, 178}, - {0xd0, 179}, - {0xd1, 180}, - {0xd2, 181}, - {0xd3, 182}, - {0xd4, 183}, - {0xd5, 184}, - {0xd6, 185}, - {0xd7, 695}, - {0xd8, 142}, - {0xd9, 187}, - {0xda, 188}, - {0xdb, 189}, - {0xdc, 190}, - {0xdd, 191}, - {0xde, 192}, - {0xdf, 150}, - {0xe0, 193}, - {0xe1, 194}, - {0xe2, 195}, - {0xe3, 196}, - {0xe4, 197}, - {0xe5, 198}, - {0xe6, 145}, - {0xe7, 199}, - {0xe8, 200}, - {0xe9, 201}, - {0xea, 202}, - {0xeb, 203}, - {0xec, 204}, - {0xed, 205}, - {0xee, 206}, - {0xef, 207}, - {0xf0, 208}, - {0xf1, 209}, - {0xf2, 210}, - {0xf3, 211}, - {0xf4, 212}, - {0xf5, 213}, - {0xf6, 214}, - {0xf7, 696}, - {0xf8, 148}, - {0xf9, 216}, - {0xfa, 217}, - {0xfb, 218}, - {0xfc, 219}, - {0xfd, 220}, - {0xfe, 221}, - {0xff, 222}, - {0x100, 9366}, - {0x101, 9361}, - {0x112, 9369}, - {0x113, 9364}, - {0x11a, 9395}, - {0x11b, 9407}, - {0x128, 9400}, - {0x129, 9412}, - {0x12a, 9367}, - {0x12b, 9362}, - {0x131, 146}, - {0x141, 141}, - {0x142, 147}, - {0x14b, 9436}, - {0x14c, 9370}, - {0x14d, 9365}, - {0x152, 143}, - {0x153, 149}, - {0x160, 223}, - {0x161, 227}, - {0x168, 9405}, - {0x169, 9417}, - {0x16a, 9368}, - {0x16b, 9363}, - {0x16e, 9404}, - {0x16f, 9416}, - {0x178, 224}, - {0x17d, 225}, - {0x17e, 229}, - {0x1c0, 99}, - {0x1cd, 9394}, - {0x1ce, 9406}, - {0x1cf, 9398}, - {0x1d0, 9410}, - {0x1d1, 9401}, - {0x1d2, 9413}, - {0x1d3, 9403}, - {0x1d4, 9415}, - {0x1fd, 9421}, - {0x251, 9418}, - {0x254, 9423}, - {0x259, 9426}, - {0x25a, 9429}, - {0x25b, 9432}, - {0x275, 9437}, - {0x283, 9442}, - {0x28c, 9438}, - {0x292, 9441}, - {0x2d0, 9443}, - {0x300, 65}, - {0x301, 127}, - {0x302, 128}, - {0x303, 95}, - {0x304, 129}, - {0x305, 226}, - {0x306, 130}, - {0x307, 131}, - {0x308, 132}, - {0x30a, 133}, - {0x30b, 135}, - {0x30c, 137}, - {0x327, 134}, - {0x328, 136}, - {0x332, 64}, - {0x336, 138}, - {0x361, 758}, - {0x391, 1011}, - {0x392, 1012}, - {0x393, 1013}, - {0x394, 1014}, - {0x395, 1015}, - {0x396, 1016}, - {0x397, 1017}, - {0x398, 1018}, - {0x399, 1019}, - {0x39a, 1020}, - {0x39b, 1021}, - {0x39c, 1022}, - {0x39d, 1023}, - {0x39e, 1024}, - {0x39f, 1025}, - {0x3a0, 1026}, - {0x3a1, 1027}, - {0x3a3, 1028}, - {0x3a4, 1029}, - {0x3a5, 1030}, - {0x3a6, 1031}, - {0x3a7, 1032}, - {0x3a8, 1033}, - {0x3a9, 1034}, - {0x3b1, 1035}, - {0x3b2, 1036}, - {0x3b3, 1037}, - {0x3b4, 1038}, - {0x3b5, 1039}, - {0x3b6, 1040}, - {0x3b7, 1041}, - {0x3b8, 1042}, - {0x3b9, 1043}, - {0x3ba, 1044}, - {0x3bb, 1045}, - {0x3bc, 1046}, - {0x3bd, 1047}, - {0x3be, 1048}, - {0x3bf, 1049}, - {0x3c0, 1050}, - {0x3c1, 1051}, - {0x3c3, 1052}, - {0x3c4, 1053}, - {0x3c5, 1054}, - {0x3c6, 1055}, - {0x3c7, 1056}, - {0x3c8, 1057}, - {0x3c9, 1058}, - {0x401, 1065}, - {0x410, 1059}, - {0x411, 1060}, - {0x412, 1061}, - {0x413, 1062}, - {0x414, 1063}, - {0x415, 1064}, - {0x416, 1066}, - {0x417, 1067}, - {0x418, 1068}, - {0x419, 1069}, - {0x41a, 1070}, - {0x41b, 1071}, - {0x41c, 1072}, - {0x41d, 1073}, - {0x41e, 1074}, - {0x41f, 1075}, - {0x420, 1076}, - {0x421, 1077}, - {0x422, 1078}, - {0x423, 1079}, - {0x424, 1080}, - {0x425, 1081}, - {0x426, 1082}, - {0x427, 1083}, - {0x428, 1084}, - {0x429, 1085}, - {0x42a, 1086}, - {0x42b, 1087}, - {0x42c, 1088}, - {0x42d, 1089}, - {0x42e, 1090}, - {0x42f, 1091}, - {0x430, 1092}, - {0x431, 1093}, - {0x432, 1094}, - {0x433, 1095}, - {0x434, 1096}, - {0x435, 1097}, - {0x436, 1099}, - {0x437, 1100}, - {0x438, 1101}, - {0x439, 1102}, - {0x43a, 1103}, - {0x43b, 1104}, - {0x43c, 1105}, - {0x43d, 1106}, - {0x43e, 1107}, - {0x43f, 1108}, - {0x440, 1109}, - {0x441, 1110}, - {0x442, 1111}, - {0x443, 1112}, - {0x444, 1113}, - {0x445, 1114}, - {0x446, 1115}, - {0x447, 1116}, - {0x448, 1117}, - {0x449, 1118}, - {0x44a, 1119}, - {0x44b, 1120}, - {0x44c, 1121}, - {0x44d, 1122}, - {0x44e, 1123}, - {0x44f, 1124}, - {0x451, 1098}, - {0x1ebc, 9397}, - {0x1ebd, 9409}, - {0x2002, 231}, - {0x2003, 633}, - {0x2010, 662}, - {0x2011, 14}, - {0x2012, 114}, - {0x2013, 114}, - {0x2014, 138}, - {0x2015, 661}, - {0x2016, 666}, - {0x2018, 670}, - {0x2019, 671}, - {0x201a, 120}, - {0x201c, 672}, - {0x201d, 673}, - {0x201e, 121}, - {0x2020, 776}, - {0x2021, 777}, - {0x2022, 119}, - {0x2025, 669}, - {0x2026, 668}, - {0x2030, 772}, - {0x2032, 708}, - {0x2033, 709}, - {0x2039, 110}, - {0x203a, 111}, - {0x203b, 734}, - {0x203e, 325}, - {0x2044, 104}, - {0x2070, 9377}, - {0x2074, 9378}, - {0x2075, 9379}, - {0x2076, 9380}, - {0x2077, 9381}, - {0x2078, 9382}, - {0x2079, 9383}, - {0x2080, 9384}, - {0x2081, 9385}, - {0x2082, 9386}, - {0x2083, 9387}, - {0x2084, 9388}, - {0x2085, 9389}, - {0x2086, 9390}, - {0x2087, 9391}, - {0x2088, 9392}, - {0x2089, 9393}, - {0x20ac, 9354}, - {0x20dd, 779}, - {0x2103, 710}, - {0x2109, 8305}, - {0x210a, 8304}, - {0x2113, 8025}, - {0x2116, 7610}, - {0x2121, 8055}, - {0x2122, 228}, - {0x2126, 9355}, - {0x212b, 771}, - {0x2153, 9375}, - {0x2154, 9376}, - {0x215b, 9371}, - {0x215c, 9372}, - {0x215d, 9373}, - {0x215e, 9374}, - {0x2160, 7575}, - {0x2161, 7576}, - {0x2162, 7577}, - {0x2163, 7578}, - {0x2164, 7579}, - {0x2165, 7580}, - {0x2166, 7581}, - {0x2167, 7582}, - {0x2168, 7583}, - {0x2169, 7584}, - {0x216a, 8225}, - {0x216b, 8226}, - {0x2170, 8092}, - {0x2171, 8093}, - {0x2172, 8094}, - {0x2173, 8095}, - {0x2174, 8096}, - {0x2175, 8097}, - {0x2176, 8098}, - {0x2177, 8099}, - {0x2178, 8100}, - {0x2179, 8101}, - {0x217a, 8298}, - {0x217b, 8299}, - {0x217f, 8303}, - {0x2190, 737}, - {0x2191, 738}, - {0x2192, 736}, - {0x2193, 739}, - {0x2197, 0}, - {0x2199, 0}, - {0x21c4, 8310}, - {0x21c5, 8311}, - {0x21c6, 8309}, - {0x21d2, 752}, - {0x21d4, 753}, - {0x21e6, 8013}, - {0x21e7, 8012}, - {0x21e8, 8014}, - {0x21e9, 8011}, - {0x2200, 754}, - {0x2202, 759}, - {0x2203, 755}, - {0x2207, 760}, - {0x2208, 741}, - {0x220b, 742}, - {0x2211, 7625}, - {0x2212, 693}, - {0x221a, 765}, - {0x221d, 767}, - {0x221e, 703}, - {0x221f, 7629}, - {0x2220, 756}, - {0x2225, 666}, - {0x2227, 749}, - {0x2228, 750}, - {0x2229, 748}, - {0x222a, 747}, - {0x222b, 769}, - {0x222c, 770}, - {0x222d, 8195}, - {0x222e, 7624}, - {0x2234, 704}, - {0x2235, 768}, - {0x223c, 665}, - {0x223d, 766}, - {0x2252, 762}, - {0x2260, 698}, - {0x2261, 761}, - {0x2266, 701}, - {0x2267, 702}, - {0x226a, 763}, - {0x226b, 764}, - {0x2273, 0}, - {0x2282, 745}, - {0x2283, 746}, - {0x2286, 743}, - {0x2287, 744}, - {0x22a5, 757}, - {0x22bf, 7630}, - {0x22ee, 7897}, - {0x22ef, 668}, - {0x2312, 758}, - {0x2460, 7555}, - {0x2461, 7556}, - {0x2462, 7557}, - {0x2463, 7558}, - {0x2464, 7559}, - {0x2465, 7560}, - {0x2466, 7561}, - {0x2467, 7562}, - {0x2468, 7563}, - {0x2469, 7564}, - {0x246a, 7565}, - {0x246b, 7566}, - {0x246c, 7567}, - {0x246d, 7568}, - {0x246e, 7569}, - {0x246f, 7570}, - {0x2470, 7571}, - {0x2471, 7572}, - {0x2472, 7573}, - {0x2473, 7574}, - {0x2474, 8071}, - {0x2475, 8072}, - {0x2476, 8073}, - {0x2477, 8074}, - {0x2478, 8075}, - {0x2479, 8076}, - {0x247a, 8077}, - {0x247b, 8078}, - {0x247c, 8079}, - {0x247d, 8080}, - {0x247e, 8081}, - {0x247f, 8082}, - {0x2480, 8083}, - {0x2481, 8084}, - {0x2482, 8085}, - {0x2483, 8086}, - {0x2484, 8087}, - {0x2485, 8088}, - {0x2486, 8089}, - {0x2487, 8090}, - {0x2488, 8062}, - {0x2489, 8063}, - {0x248a, 8064}, - {0x248b, 8065}, - {0x248c, 8066}, - {0x248d, 8067}, - {0x248e, 8068}, - {0x248f, 8069}, - {0x2490, 8070}, - {0x249c, 8112}, - {0x249d, 8113}, - {0x249e, 8114}, - {0x249f, 8115}, - {0x24a0, 8116}, - {0x24a1, 8117}, - {0x24a2, 8118}, - {0x24a3, 8119}, - {0x24a4, 8120}, - {0x24a5, 8121}, - {0x24a6, 8122}, - {0x24a7, 8123}, - {0x24a8, 8124}, - {0x24a9, 8125}, - {0x24aa, 8126}, - {0x24ab, 8127}, - {0x24ac, 8128}, - {0x24ad, 8129}, - {0x24ae, 8130}, - {0x24af, 8131}, - {0x24b0, 8132}, - {0x24b1, 8133}, - {0x24b2, 8134}, - {0x24b3, 8135}, - {0x24b4, 8136}, - {0x24b5, 8137}, - {0x24b7, 0}, - {0x24b8, 1}, - {0x24b9, 2}, - {0x24ba, 3}, - {0x24bb, 4}, - {0x24bc, 5}, - {0x24bd, 6}, - {0x24be, 7}, - {0x24bf, 8}, - {0x24c0, 9}, - {0x24c1, 10}, - {0x24c2, 11}, - {0x24c3, 12}, - {0x24c4, 13}, - {0x24c5, 14}, - {0x24c6, 15}, - {0x24c7, 16}, - {0x24c8, 17}, - {0x24c9, 18}, - {0x24ca, 19}, - {0x24cb, 20}, - {0x24cc, 21}, - {0x24cd, 22}, - {0x24ce, 23}, - {0x24cf, 24}, - {0x24d1, 0}, - {0x24d2, 1}, - {0x24d3, 2}, - {0x24d4, 3}, - {0x24d5, 4}, - {0x24d6, 5}, - {0x24d7, 6}, - {0x24d8, 7}, - {0x24d9, 8}, - {0x24da, 9}, - {0x24db, 10}, - {0x24dc, 11}, - {0x24dd, 12}, - {0x24de, 13}, - {0x24df, 14}, - {0x24e0, 15}, - {0x24e1, 16}, - {0x24e2, 17}, - {0x24e3, 18}, - {0x24e4, 19}, - {0x24e5, 20}, - {0x24e6, 21}, - {0x24e7, 22}, - {0x24e8, 23}, - {0x24e9, 24}, - {0x24ea, 8224}, - {0x2500, 7479}, - {0x2501, 7480}, - {0x2502, 7481}, - {0x2503, 7482}, - {0x2504, 7483}, - {0x2505, 7484}, - {0x2506, 7485}, - {0x2507, 7486}, - {0x2508, 7487}, - {0x2509, 7488}, - {0x250a, 7489}, - {0x250b, 7490}, - {0x250c, 7491}, - {0x250d, 7492}, - {0x250e, 7493}, - {0x250f, 7494}, - {0x2510, 7495}, - {0x2511, 7496}, - {0x2512, 7497}, - {0x2513, 7498}, - {0x2514, 7499}, - {0x2515, 7500}, - {0x2516, 7501}, - {0x2517, 7502}, - {0x2518, 7503}, - {0x2519, 7504}, - {0x251a, 7505}, - {0x251b, 7506}, - {0x251c, 7507}, - {0x251d, 7508}, - {0x251e, 7509}, - {0x251f, 7510}, - {0x2520, 7511}, - {0x2521, 7512}, - {0x2522, 7513}, - {0x2523, 7514}, - {0x2524, 7515}, - {0x2525, 7516}, - {0x2526, 7517}, - {0x2527, 7518}, - {0x2528, 7519}, - {0x2529, 7520}, - {0x252a, 7521}, - {0x252b, 7522}, - {0x252c, 7523}, - {0x252d, 7524}, - {0x252e, 7525}, - {0x252f, 7526}, - {0x2530, 7527}, - {0x2531, 7528}, - {0x2532, 7529}, - {0x2533, 7530}, - {0x2534, 7531}, - {0x2535, 7532}, - {0x2536, 7533}, - {0x2537, 7534}, - {0x2538, 7535}, - {0x2539, 7536}, - {0x253a, 7537}, - {0x253b, 7538}, - {0x253c, 7539}, - {0x253d, 7540}, - {0x253e, 7541}, - {0x253f, 7542}, - {0x2540, 7543}, - {0x2541, 7544}, - {0x2542, 7545}, - {0x2543, 7546}, - {0x2544, 7547}, - {0x2545, 7548}, - {0x2546, 7549}, - {0x2547, 7550}, - {0x2548, 7551}, - {0x2549, 7552}, - {0x254a, 7553}, - {0x254b, 7554}, - {0x2550, 8251}, - {0x255e, 8252}, - {0x2561, 8254}, - {0x256a, 8253}, - {0x256d, 8247}, - {0x256e, 8248}, - {0x256f, 8250}, - {0x2570, 8249}, - {0x2571, 8261}, - {0x2572, 8262}, - {0x2573, 8263}, - {0x2581, 8230}, - {0x2582, 8231}, - {0x2583, 8232}, - {0x2584, 8233}, - {0x2585, 8234}, - {0x2586, 8235}, - {0x2587, 8236}, - {0x2588, 8237}, - {0x2589, 8244}, - {0x258a, 8243}, - {0x258b, 8242}, - {0x258c, 8241}, - {0x258d, 8240}, - {0x258e, 8239}, - {0x258f, 8238}, - {0x2594, 8245}, - {0x2595, 8246}, - {0x25a0, 729}, - {0x25a1, 728}, - {0x25a2, 8015}, - {0x25b2, 731}, - {0x25b3, 730}, - {0x25b7, 8010}, - {0x25bc, 733}, - {0x25bd, 732}, - {0x25c1, 8009}, - {0x25c6, 727}, - {0x25c7, 726}, - {0x25c9, 8210}, - {0x25cb, 723}, - {0x25ce, 725}, - {0x25cf, 724}, - {0x25e2, 8255}, - {0x25e3, 8256}, - {0x25e4, 8258}, - {0x25e5, 8257}, - {0x25ef, 779}, - {0x2600, 8215}, - {0x2601, 8216}, - {0x2602, 8217}, - {0x2603, 8218}, - {0x2605, 722}, - {0x2606, 721}, - {0x260e, 8056}, - {0x261c, 8220}, - {0x261d, 8221}, - {0x261e, 8219}, - {0x261f, 8222}, - {0x2640, 706}, - {0x2642, 705}, - {0x2660, 8211}, - {0x2661, 8017}, - {0x2662, 8019}, - {0x2663, 8213}, - {0x2664, 8018}, - {0x2665, 8212}, - {0x2666, 8214}, - {0x2667, 8016}, - {0x2669, 0}, - {0x266a, 775}, - {0x266d, 774}, - {0x266f, 773}, - {0x2776, 8286}, - {0x2777, 8287}, - {0x2778, 8288}, - {0x2779, 8289}, - {0x277a, 8290}, - {0x277b, 8291}, - {0x277c, 8292}, - {0x277d, 8293}, - {0x277e, 8294}, - {0x27a1, 8206}, - {0x2e8d, 0}, - {0x2e8e, 4209}, - {0x2e90, 4646}, - {0x2e92, 3762}, - {0x2e93, 4739}, - {0x2e94, 4779}, - {0x2e99, 5059}, - {0x2e9b, 5089}, - {0x2e9f, 3644}, - {0x2ea0, 3773}, - {0x2ea2, 0}, - {0x2eac, 2260}, - {0x2ebf, 0}, - {0x2ec0, 1}, - {0x2ec1, 1931}, - {0x2ec4, 2658}, - {0x2ed1, 3029}, - {0x2ed8, 2664}, - {0x2ee4, 1614}, - {0x2ee8, 3380}, - {0x2ee9, 1323}, - {0x2eeb, 2666}, - {0x2eed, 2243}, - {0x2eef, 3965}, - {0x2ef2, 1615}, - {0x2f00, 1200}, - {0x2f01, 8371}, - {0x2f02, 4095}, - {0x2f03, 4097}, - {0x2f04, 1333}, - {0x2f05, 4102}, - {0x2f06, 3275}, - {0x2f07, 4110}, - {0x2f08, 2579}, - {0x2f09, 4208}, - {0x2f0a, 3286}, - {0x2f0b, 3392}, - {0x2f0c, 4219}, - {0x2f0d, 4227}, - {0x2f0e, 4233}, - {0x2f0f, 4243}, - {0x2f10, 4248}, - {0x2f11, 3163}, - {0x2f12, 3991}, - {0x2f13, 4294}, - {0x2f14, 4301}, - {0x2f15, 4302}, - {0x2f16, 4307}, - {0x2f17, 2375}, - {0x2f18, 3708}, - {0x2f19, 4316}, - {0x2f1a, 4321}, - {0x2f1b, 4328}, - {0x2f1c, 3746}, - {0x2f1d, 1969}, - {0x2f1e, 4459}, - {0x2f1f, 3156}, - {0x2f20, 2204}, - {0x2f21, 4538}, - {0x2f22, 4539}, - {0x2f23, 3878}, - {0x2f24, 2887}, - {0x2f25, 2433}, - {0x2f26, 2208}, - {0x2f27, 4622}, - {0x2f28, 2631}, - {0x2f29, 2454}, - {0x2f2a, 4646}, - {0x2f2b, 4648}, - {0x2f2c, 4658}, - {0x2f2d, 2177}, - {0x2f2e, 4716}, - {0x2f2f, 1979}, - {0x2f30, 1918}, - {0x2f31, 1738}, - {0x2f32, 1519}, - {0x2f33, 4739}, - {0x2f34, 4741}, - {0x2f35, 4761}, - {0x2f36, 4763}, - {0x2f37, 4768}, - {0x2f38, 1655}, - {0x2f3a, 4783}, - {0x2f3b, 4785}, - {0x2f3c, 2554}, - {0x2f3d, 4930}, - {0x2f3e, 1921}, - {0x2f3f, 2326}, - {0x2f40, 2215}, - {0x2f41, 5058}, - {0x2f42, 3592}, - {0x2f43, 3143}, - {0x2f44, 1740}, - {0x2f45, 3661}, - {0x2f46, 5088}, - {0x2f47, 3284}, - {0x2f48, 5132}, - {0x2f49, 1860}, - {0x2f4a, 3814}, - {0x2f4b, 1853}, - {0x2f4c, 2221}, - {0x2f4d, 5349}, - {0x2f4e, 5364}, - {0x2f4f, 5368}, - {0x2f50, 3450}, - {0x2f51, 3807}, - {0x2f52, 2223}, - {0x2f53, 5378}, - {0x2f54, 2603}, - {0x2f55, 1360}, - {0x2f56, 3066}, - {0x2f57, 3541}, - {0x2f58, 5604}, - {0x2f59, 5606}, - {0x2f5a, 3618}, - {0x2f5b, 1383}, - {0x2f5c, 1671}, - {0x2f5d, 1880}, - {0x2f5e, 1904}, - {0x2f5f, 1732}, - {0x2f60, 1245}, - {0x2f61, 1504}, - {0x2f62, 1537}, - {0x2f63, 2652}, - {0x2f64, 3899}, - {0x2f65, 3134}, - {0x2f66, 3479}, - {0x2f68, 5783}, - {0x2f69, 3368}, - {0x2f6a, 3453}, - {0x2f6b, 2172}, - {0x2f6c, 3816}, - {0x2f6d, 3779}, - {0x2f6e, 3836}, - {0x2f6f, 2676}, - {0x2f70, 2260}, - {0x2f72, 1363}, - {0x2f73, 1856}, - {0x2f74, 3953}, - {0x2f75, 2971}, - {0x2f76, 3606}, - {0x2f77, 2227}, - {0x2f78, 1544}, - {0x2f79, 6163}, - {0x2f7a, 3901}, - {0x2f7b, 1227}, - {0x2f7c, 4061}, - {0x2f7d, 2261}, - {0x2f7e, 6205}, - {0x2f7f, 2262}, - {0x2f80, 6227}, - {0x2f81, 3281}, - {0x2f82, 2569}, - {0x2f83, 2263}, - {0x2f84, 2232}, - {0x2f85, 1235}, - {0x2f86, 2697}, - {0x2f87, 2726}, - {0x2f88, 2360}, - {0x2f89, 2081}, - {0x2f8a, 2541}, - {0x2f8b, 6322}, - {0x2f8c, 6479}, - {0x2f8d, 2988}, - {0x2f8e, 1858}, - {0x2f8f, 2022}, - {0x2f90, 1189}, - {0x2f91, 6635}, - {0x2f92, 1887}, - {0x2f93, 1455}, - {0x2f94, 1908}, - {0x2f95, 2921}, - {0x2f96, 3198}, - {0x2f97, 6742}, - {0x2f98, 6745}, - {0x2f99, 1419}, - {0x2f9a, 2682}, - {0x2f9b, 2808}, - {0x2f9c, 2829}, - {0x2f9d, 2574}, - {0x2f9e, 2306}, - {0x2f9f, 2575}, - {0x2fa0, 2914}, - {0x2fa2, 3874}, - {0x2fa3, 3243}, - {0x2fa4, 3428}, - {0x2fa5, 3948}, - {0x2fa6, 1754}, - {0x2fa7, 3029}, - {0x2fa8, 3827}, - {0x2fa9, 3550}, - {0x2faa, 7113}, - {0x2fab, 7115}, - {0x2fac, 1229}, - {0x2fad, 8695}, - {0x2fae, 3463}, - {0x2faf, 3800}, - {0x2fb0, 1461}, - {0x2fb1, 7171}, - {0x2fb2, 7173}, - {0x2fb3, 1339}, - {0x2fb4, 3607}, - {0x2fb5, 3561}, - {0x2fb6, 3464}, - {0x2fb7, 2543}, - {0x2fb8, 2335}, - {0x2fb9, 2035}, - {0x2fba, 3333}, - {0x2fbb, 2062}, - {0x2fbc, 2036}, - {0x2fbd, 7276}, - {0x2fbe, 7293}, - {0x2fbf, 7299}, - {0x2fc0, 7300}, - {0x2fc1, 1614}, - {0x2fc2, 1685}, - {0x2fc3, 3031}, - {0x2fc4, 7414}, - {0x2fc5, 2267}, - {0x2fc6, 7425}, - {0x2fc7, 3729}, - {0x2fc9, 1642}, - {0x2fca, 2055}, - {0x2fcb, 7446}, - {0x2fcc, 7449}, - {0x2fcd, 3102}, - {0x2fce, 1937}, - {0x2fcf, 2767}, - {0x2fd0, 3475}, - {0x2fd1, 7457}, - {0x2fd2, 7458}, - {0x2fd3, 3966}, - {0x2fd4, 7472}, - {0x2fd5, 7473}, - {0x3000, 633}, - {0x3001, 634}, - {0x3002, 635}, - {0x3003, 655}, - {0x3004, 8308}, - {0x3005, 657}, - {0x3006, 658}, - {0x3007, 659}, - {0x3008, 682}, - {0x3009, 683}, - {0x300a, 684}, - {0x300b, 685}, - {0x300c, 686}, - {0x300d, 687}, - {0x300e, 688}, - {0x300f, 689}, - {0x3010, 690}, - {0x3011, 691}, - {0x3012, 735}, - {0x3013, 740}, - {0x3014, 676}, - {0x3015, 677}, - {0x301c, 665}, - {0x301d, 7608}, - {0x301f, 7609}, - {0x3020, 8058}, - {0x3034, 0}, - {0x3035, 1}, - {0x3036, 8057}, - {0x3041, 842}, - {0x3042, 843}, - {0x3043, 844}, - {0x3044, 845}, - {0x3045, 846}, - {0x3046, 847}, - {0x3047, 848}, - {0x3048, 849}, - {0x3049, 850}, - {0x304a, 851}, - {0x304b, 852}, - {0x304c, 853}, - {0x304d, 854}, - {0x304e, 855}, - {0x304f, 856}, - {0x3050, 857}, - {0x3051, 858}, - {0x3052, 859}, - {0x3053, 860}, - {0x3054, 861}, - {0x3055, 862}, - {0x3056, 863}, - {0x3057, 864}, - {0x3058, 865}, - {0x3059, 866}, - {0x305a, 867}, - {0x305b, 868}, - {0x305c, 869}, - {0x305d, 870}, - {0x305e, 871}, - {0x305f, 872}, - {0x3060, 873}, - {0x3061, 874}, - {0x3062, 875}, - {0x3063, 876}, - {0x3064, 877}, - {0x3065, 878}, - {0x3066, 879}, - {0x3067, 880}, - {0x3068, 881}, - {0x3069, 882}, - {0x306a, 883}, - {0x306b, 884}, - {0x306c, 885}, - {0x306d, 886}, - {0x306e, 887}, - {0x306f, 888}, - {0x3070, 889}, - {0x3071, 890}, - {0x3072, 891}, - {0x3073, 892}, - {0x3074, 893}, - {0x3075, 894}, - {0x3076, 895}, - {0x3077, 896}, - {0x3078, 897}, - {0x3079, 898}, - {0x307a, 899}, - {0x307b, 900}, - {0x307c, 901}, - {0x307d, 902}, - {0x307e, 903}, - {0x307f, 904}, - {0x3080, 905}, - {0x3081, 906}, - {0x3082, 907}, - {0x3083, 908}, - {0x3084, 909}, - {0x3085, 910}, - {0x3086, 911}, - {0x3087, 912}, - {0x3088, 913}, - {0x3089, 914}, - {0x308a, 915}, - {0x308b, 916}, - {0x308c, 917}, - {0x308d, 918}, - {0x308e, 919}, - {0x308f, 920}, - {0x3090, 921}, - {0x3091, 922}, - {0x3092, 923}, - {0x3093, 924}, - {0x3094, 7958}, - {0x309b, 643}, - {0x309c, 644}, - {0x309d, 653}, - {0x309e, 654}, - {0x30a1, 925}, - {0x30a2, 926}, - {0x30a3, 927}, - {0x30a4, 928}, - {0x30a5, 929}, - {0x30a6, 930}, - {0x30a7, 931}, - {0x30a8, 932}, - {0x30a9, 933}, - {0x30aa, 934}, - {0x30ab, 935}, - {0x30ac, 936}, - {0x30ad, 937}, - {0x30ae, 938}, - {0x30af, 939}, - {0x30b0, 940}, - {0x30b1, 941}, - {0x30b2, 942}, - {0x30b3, 943}, - {0x30b4, 944}, - {0x30b5, 945}, - {0x30b6, 946}, - {0x30b7, 947}, - {0x30b8, 948}, - {0x30b9, 949}, - {0x30ba, 950}, - {0x30bb, 951}, - {0x30bc, 952}, - {0x30bd, 953}, - {0x30be, 954}, - {0x30bf, 955}, - {0x30c0, 956}, - {0x30c1, 957}, - {0x30c2, 958}, - {0x30c3, 959}, - {0x30c4, 960}, - {0x30c5, 961}, - {0x30c6, 962}, - {0x30c7, 963}, - {0x30c8, 964}, - {0x30c9, 965}, - {0x30ca, 966}, - {0x30cb, 967}, - {0x30cc, 968}, - {0x30cd, 969}, - {0x30ce, 970}, - {0x30cf, 971}, - {0x30d0, 972}, - {0x30d1, 973}, - {0x30d2, 974}, - {0x30d3, 975}, - {0x30d4, 976}, - {0x30d5, 977}, - {0x30d6, 978}, - {0x30d7, 979}, - {0x30d8, 980}, - {0x30d9, 981}, - {0x30da, 982}, - {0x30db, 983}, - {0x30dc, 984}, - {0x30dd, 985}, - {0x30de, 986}, - {0x30df, 987}, - {0x30e0, 988}, - {0x30e1, 989}, - {0x30e2, 990}, - {0x30e3, 991}, - {0x30e4, 992}, - {0x30e5, 993}, - {0x30e6, 994}, - {0x30e7, 995}, - {0x30e8, 996}, - {0x30e9, 997}, - {0x30ea, 998}, - {0x30eb, 999}, - {0x30ec, 1000}, - {0x30ed, 1001}, - {0x30ee, 1002}, - {0x30ef, 1003}, - {0x30f0, 1004}, - {0x30f1, 1005}, - {0x30f2, 1006}, - {0x30f3, 1007}, - {0x30f4, 1008}, - {0x30f5, 1009}, - {0x30f6, 1010}, - {0x30f7, 8313}, - {0x30f8, 8314}, - {0x30f9, 8315}, - {0x30fa, 8316}, - {0x30fb, 638}, - {0x30fc, 660}, - {0x30fd, 651}, - {0x30fe, 652}, - {0x3221, 0}, - {0x3222, 1}, - {0x3223, 2}, - {0x3224, 3}, - {0x3225, 4}, - {0x3226, 5}, - {0x3227, 6}, - {0x3228, 7}, - {0x3229, 8}, - {0x322a, 8198}, - {0x322b, 8199}, - {0x322c, 8200}, - {0x322d, 8201}, - {0x322e, 8202}, - {0x322f, 8203}, - {0x3230, 8197}, - {0x3231, 7618}, - {0x3232, 7619}, - {0x3233, 8143}, - {0x3234, 8141}, - {0x3235, 8148}, - {0x3236, 8147}, - {0x3237, 8204}, - {0x3238, 8142}, - {0x3239, 7620}, - {0x323a, 8151}, - {0x323b, 8149}, - {0x323c, 8144}, - {0x323d, 8139}, - {0x323e, 8146}, - {0x323f, 8140}, - {0x3240, 8150}, - {0x3241, 8205}, - {0x3242, 8145}, - {0x3243, 8138}, - {0x3281, 0}, - {0x3282, 1}, - {0x3283, 2}, - {0x3284, 3}, - {0x3285, 4}, - {0x3286, 5}, - {0x3287, 6}, - {0x3288, 7}, - {0x3289, 8}, - {0x328b, 0}, - {0x328c, 1}, - {0x328d, 2}, - {0x328e, 3}, - {0x328f, 4}, - {0x3291, 8161}, - {0x3292, 8160}, - {0x3293, 8162}, - {0x3294, 8156}, - {0x3296, 8165}, - {0x3298, 8158}, - {0x3299, 8223}, - {0x329d, 8319}, - {0x329e, 8191}, - {0x32a1, 0}, - {0x32a4, 7613}, - {0x32a5, 7614}, - {0x32a6, 7615}, - {0x32a7, 7616}, - {0x32a8, 7617}, - {0x32a9, 8154}, - {0x32aa, 8157}, - {0x32ab, 8159}, - {0x32ac, 8163}, - {0x32ad, 8153}, - {0x32ae, 8164}, - {0x32af, 8155}, - {0x32b0, 8152}, - {0x32d1, 0}, - {0x32d2, 1}, - {0x32d3, 2}, - {0x32d4, 3}, - {0x32d5, 4}, - {0x32d6, 5}, - {0x32d7, 6}, - {0x32d8, 7}, - {0x32d9, 8}, - {0x32da, 9}, - {0x32db, 10}, - {0x32dc, 11}, - {0x32dd, 12}, - {0x32de, 13}, - {0x32df, 14}, - {0x32e0, 15}, - {0x32e1, 16}, - {0x32e2, 17}, - {0x32e3, 18}, - {0x32e4, 19}, - {0x32e5, 20}, - {0x32e6, 21}, - {0x32e7, 22}, - {0x32e8, 23}, - {0x32e9, 24}, - {0x32ea, 25}, - {0x32eb, 26}, - {0x32ec, 27}, - {0x32ed, 28}, - {0x32ee, 29}, - {0x32ef, 30}, - {0x32f0, 31}, - {0x32f1, 32}, - {0x32f2, 33}, - {0x32f3, 34}, - {0x32f4, 35}, - {0x32f5, 36}, - {0x32f6, 37}, - {0x32f7, 38}, - {0x32f8, 39}, - {0x32f9, 40}, - {0x32fa, 41}, - {0x32fb, 42}, - {0x32fc, 43}, - {0x32fd, 44}, - {0x32fe, 45}, - {0x3300, 8048}, - {0x3302, 0}, - {0x3303, 8042}, - {0x3305, 8183}, - {0x330d, 7595}, - {0x330f, 0}, - {0x3310, 1}, - {0x3311, 2}, - {0x3312, 3}, - {0x3313, 4}, - {0x3314, 7586}, - {0x3315, 8041}, - {0x3316, 8039}, - {0x3318, 8040}, - {0x331b, 0}, - {0x331c, 1}, - {0x331d, 2}, - {0x331e, 8051}, - {0x3320, 0}, - {0x3321, 1}, - {0x3322, 8038}, - {0x3323, 8043}, - {0x3326, 7596}, - {0x3327, 7590}, - {0x3329, 0}, - {0x332a, 8052}, - {0x332b, 7598}, - {0x332f, 0}, - {0x3330, 1}, - {0x3331, 8049}, - {0x3333, 8327}, - {0x3335, 0}, - {0x3336, 7592}, - {0x3339, 8046}, - {0x333b, 8047}, - {0x333f, 0}, - {0x3340, 1}, - {0x3342, 8045}, - {0x3344, 0}, - {0x3345, 1}, - {0x3346, 2}, - {0x3347, 8050}, - {0x3349, 7585}, - {0x334a, 7599}, - {0x334c, 0}, - {0x334d, 7588}, - {0x334e, 8328}, - {0x3350, 0}, - {0x3351, 7593}, - {0x3356, 0}, - {0x3357, 8044}, - {0x337b, 8323}, - {0x337c, 7623}, - {0x337d, 7622}, - {0x337e, 7621}, - {0x337f, 8054}, - {0x3385, 8031}, - {0x3386, 8032}, - {0x3387, 8033}, - {0x3388, 8192}, - {0x3389, 8193}, - {0x338e, 7604}, - {0x338f, 7605}, - {0x3390, 8035}, - {0x3396, 8037}, - {0x3397, 8024}, - {0x3398, 8026}, - {0x339c, 7601}, - {0x339d, 7602}, - {0x339e, 7603}, - {0x339f, 8186}, - {0x33a0, 8020}, - {0x33a1, 7607}, - {0x33a2, 8021}, - {0x33a3, 8187}, - {0x33a4, 8022}, - {0x33a5, 8023}, - {0x33a6, 8188}, - {0x33b0, 8030}, - {0x33b1, 8029}, - {0x33b2, 8028}, - {0x33b3, 8027}, - {0x33c4, 7606}, - {0x33c8, 8194}, - {0x33cb, 8034}, - {0x33cc, 8182}, - {0x33cd, 7611}, - {0x33d4, 8036}, - {0x33d8, 0}, - {0x4e00, 1200}, - {0x4e01, 3000}, - {0x4e03, 2275}, - {0x4e05, 0}, - {0x4e07, 3754}, - {0x4e08, 2510}, - {0x4e09, 2174}, - {0x4e0a, 2509}, - {0x4e0b, 1340}, - {0x4e0d, 3526}, - {0x4e0e, 3881}, - {0x4e10, 4091}, - {0x4e11, 1233}, - {0x4e14, 1484}, - {0x4e15, 4092}, - {0x4e16, 2632}, - {0x4e17, 4311}, - {0x4e18, 1648}, - {0x4e19, 3594}, - {0x4e1e, 2511}, - {0x4e21, 3974}, - {0x4e26, 3602}, - {0x4e28, 8371}, - {0x4e2a, 4093}, - {0x4e2d, 2980}, - {0x4e30, 0}, - {0x4e31, 4094}, - {0x4e32, 1778}, - {0x4e36, 4095}, - {0x4e38, 1561}, - {0x4e39, 2926}, - {0x4e3b, 2323}, - {0x4e3c, 4096}, - {0x4e3f, 4097}, - {0x4e41, 0}, - {0x4e42, 4098}, - {0x4e43, 3307}, - {0x4e45, 1649}, - {0x4e4b, 3309}, - {0x4e4d, 3259}, - {0x4e4e, 1911}, - {0x4e4f, 3681}, - {0x4e55, 6480}, - {0x4e56, 4099}, - {0x4e57, 2512}, - {0x4e58, 4100}, - {0x4e59, 1333}, - {0x4e5d, 1757}, - {0x4e5e, 1956}, - {0x4e5f, 3829}, - {0x4e62, 4659}, - {0x4e71, 3930}, - {0x4e73, 3285}, - {0x4e7e, 1505}, - {0x4e80, 1615}, - {0x4e82, 4101}, - {0x4e85, 4102}, - {0x4e86, 3971}, - {0x4e88, 3879}, - {0x4e89, 2794}, - {0x4e8a, 4104}, - {0x4e8b, 2244}, - {0x4e8c, 3275}, - {0x4e8e, 4107}, - {0x4e91, 1248}, - {0x4e92, 1939}, - {0x4e94, 1938}, - {0x4e95, 1194}, - {0x4e98, 4081}, - {0x4e99, 4080}, - {0x4e9b, 2083}, - {0x4e9c, 1125}, - {0x4e9e, 4108}, - {0x4e9f, 4109}, - {0x4ea0, 4110}, - {0x4ea1, 3682}, - {0x4ea2, 4111}, - {0x4ea4, 1958}, - {0x4ea5, 1195}, - {0x4ea6, 3744}, - {0x4ea8, 1686}, - {0x4eab, 1687}, - {0x4eac, 1688}, - {0x4ead, 3070}, - {0x4eae, 3972}, - {0x4eb0, 4112}, - {0x4eb3, 4113}, - {0x4eb6, 4114}, - {0x4eba, 2579}, - {0x4ec0, 2372}, - {0x4ec1, 2580}, - {0x4ec2, 4119}, - {0x4ec4, 4117}, - {0x4ec6, 4118}, - {0x4ec7, 1650}, - {0x4eca, 2067}, - {0x4ecb, 1392}, - {0x4ecd, 4116}, - {0x4ece, 4115}, - {0x4ecf, 3577}, - {0x4ed4, 2196}, - {0x4ed5, 2195}, - {0x4ed6, 2846}, - {0x4ed7, 4120}, - {0x4ed8, 3527}, - {0x4ed9, 2699}, - {0x4edd, 656}, - {0x4ede, 4121}, - {0x4edf, 4123}, - {0x4ee1, 8372}, - {0x4ee3, 2885}, - {0x4ee4, 4009}, - {0x4ee5, 1166}, - {0x4eed, 4122}, - {0x4eee, 1342}, - {0x4ef0, 1724}, - {0x4ef2, 2981}, - {0x4ef6, 1861}, - {0x4ef7, 4124}, - {0x4efb, 3290}, - {0x4efc, 8373}, - {0x4f00, 8374}, - {0x4f01, 1575}, - {0x4f03, 8375}, - {0x4f09, 4125}, - {0x4f0a, 1167}, - {0x4f0d, 1940}, - {0x4f0e, 1576}, - {0x4f0f, 3564}, - {0x4f10, 3398}, - {0x4f11, 1651}, - {0x4f1a, 1393}, - {0x4f1c, 4160}, - {0x4f1d, 3131}, - {0x4f2f, 3362}, - {0x4f30, 4127}, - {0x4f34, 3408}, - {0x4f36, 4010}, - {0x4f38, 2547}, - {0x4f39, 8376}, - {0x4f3a, 2197}, - {0x4f3c, 2245}, - {0x4f3d, 1344}, - {0x4f43, 3053}, - {0x4f46, 2912}, - {0x4f47, 4131}, - {0x4f4d, 1168}, - {0x4f4e, 3071}, - {0x4f4f, 2373}, - {0x4f50, 2084}, - {0x4f51, 3854}, - {0x4f53, 2862}, - {0x4f55, 1343}, - {0x4f56, 8377}, - {0x4f57, 4130}, - {0x4f59, 3880}, - {0x4f5a, 4126}, - {0x4f5b, 4128}, - {0x4f5c, 2142}, - {0x4f5d, 4129}, - {0x4f5e, 4563}, - {0x4f69, 4137}, - {0x4f6f, 4140}, - {0x4f70, 4138}, - {0x4f73, 1346}, - {0x4f75, 3595}, - {0x4f76, 4132}, - {0x4f7b, 4136}, - {0x4f7c, 1959}, - {0x4f7e, 0}, - {0x4f7f, 2198}, - {0x4f83, 1506}, - {0x4f86, 4141}, - {0x4f88, 4133}, - {0x4f8a, 8379}, - {0x4f8b, 4011}, - {0x4f8d, 2246}, - {0x4f8f, 4134}, - {0x4f91, 4139}, - {0x4f92, 8378}, - {0x4f94, 8381}, - {0x4f96, 4142}, - {0x4f98, 4135}, - {0x4f9a, 8380}, - {0x4f9b, 1689}, - {0x4f9d, 1169}, - {0x4fa0, 1690}, - {0x4fa1, 1345}, - {0x4fab, 4564}, - {0x4fad, 3751}, - {0x4fae, 3552}, - {0x4faf, 1960}, - {0x4fb5, 2549}, - {0x4fb6, 3967}, - {0x4fbf, 3624}, - {0x4fc2, 1806}, - {0x4fc3, 2821}, - {0x4fc4, 1380}, - {0x4fc9, 8364}, - {0x4fca, 2397}, - {0x4fcd, 8382}, - {0x4fce, 4146}, - {0x4fd0, 4151}, - {0x4fd1, 4149}, - {0x4fd4, 4144}, - {0x4fd7, 2831}, - {0x4fd8, 4147}, - {0x4fda, 4150}, - {0x4fdb, 4148}, - {0x4fdd, 3629}, - {0x4fdf, 4145}, - {0x4fe0, 7660}, - {0x4fe1, 2548}, - {0x4fe3, 3745}, - {0x4fe4, 4152}, - {0x4fe5, 4153}, - {0x4fee, 2350}, - {0x4fef, 4166}, - {0x4ff3, 3334}, - {0x4ff5, 3496}, - {0x4ff6, 4161}, - {0x4ff8, 3648}, - {0x4ffa, 1334}, - {0x4ffe, 4165}, - {0x4fff, 8385}, - {0x5001, 0}, - {0x5005, 4159}, - {0x5006, 4168}, - {0x5009, 2772}, - {0x500b, 1912}, - {0x500d, 3346}, - {0x500f, 5632}, - {0x5011, 4167}, - {0x5012, 3159}, - {0x5014, 4156}, - {0x5016, 1962}, - {0x5019, 1961}, - {0x501a, 4154}, - {0x501e, 8386}, - {0x501f, 2310}, - {0x5021, 4162}, - {0x5022, 8384}, - {0x5023, 3647}, - {0x5024, 2955}, - {0x5025, 4158}, - {0x5026, 1863}, - {0x5028, 4155}, - {0x5029, 4163}, - {0x502a, 4157}, - {0x502b, 3993}, - {0x502c, 4164}, - {0x502d, 4071}, - {0x5036, 1758}, - {0x5039, 1862}, - {0x5040, 8383}, - {0x5042, 8389}, - {0x5043, 4169}, - {0x5046, 8387}, - {0x5047, 4170}, - {0x5048, 4174}, - {0x5049, 1170}, - {0x504f, 3616}, - {0x5050, 4173}, - {0x5055, 4172}, - {0x5056, 4176}, - {0x505a, 4175}, - {0x505c, 3072}, - {0x5065, 1864}, - {0x506c, 4177}, - {0x5070, 8388}, - {0x5072, 2289}, - {0x5074, 2822}, - {0x5075, 3073}, - {0x5076, 1774}, - {0x5078, 4178}, - {0x507d, 1616}, - {0x5080, 4179}, - {0x5085, 4181}, - {0x508d, 3683}, - {0x5091, 1852}, - {0x5094, 8390}, - {0x5098, 2175}, - {0x5099, 3467}, - {0x509a, 4180}, - {0x50ac, 2101}, - {0x50ad, 3885}, - {0x50b2, 4183}, - {0x50b3, 4186}, - {0x50b4, 4182}, - {0x50b5, 2100}, - {0x50b7, 2439}, - {0x50be, 1807}, - {0x50c2, 4187}, - {0x50c5, 1735}, - {0x50c9, 4184}, - {0x50ca, 4185}, - {0x50cd, 3207}, - {0x50cf, 2814}, - {0x50d1, 1691}, - {0x50d5, 3707}, - {0x50d6, 4188}, - {0x50d8, 8392}, - {0x50da, 3973}, - {0x50de, 4189}, - {0x50e3, 4192}, - {0x50e5, 4190}, - {0x50e7, 2768}, - {0x50ed, 4191}, - {0x50ee, 4193}, - {0x50f4, 8391}, - {0x50f5, 4195}, - {0x50f9, 4194}, - {0x50fb, 3608}, - {0x5100, 1617}, - {0x5101, 4197}, - {0x5102, 4198}, - {0x5104, 1327}, - {0x5109, 4196}, - {0x5112, 2336}, - {0x5114, 4201}, - {0x5115, 4200}, - {0x5116, 4199}, - {0x5118, 4143}, - {0x511a, 4202}, - {0x511f, 2440}, - {0x5121, 4203}, - {0x512a, 3855}, - {0x5132, 3813}, - {0x5137, 4205}, - {0x513a, 4204}, - {0x513b, 4207}, - {0x513c, 4206}, - {0x513f, 4208}, - {0x5140, 4209}, - {0x5141, 1208}, - {0x5143, 1897}, - {0x5144, 1809}, - {0x5145, 2374}, - {0x5146, 3001}, - {0x5147, 1692}, - {0x5148, 2700}, - {0x5149, 1963}, - {0x514a, 8393}, - {0x514b, 2048}, - {0x514c, 4211}, - {0x514d, 3796}, - {0x514e, 3136}, - {0x5150, 2247}, - {0x5152, 4210}, - {0x5154, 4212}, - {0x515a, 3160}, - {0x515c, 1491}, - {0x5162, 4213}, - {0x5164, 8394}, - {0x5165, 3286}, - {0x5168, 2742}, - {0x5169, 4215}, - {0x516a, 4216}, - {0x516b, 3392}, - {0x516c, 1964}, - {0x516d, 4065}, - {0x516e, 4217}, - {0x5171, 1694}, - {0x5175, 3596}, - {0x5176, 2838}, - {0x5177, 1769}, - {0x5178, 3119}, - {0x517c, 1865}, - {0x5180, 4218}, - {0x5182, 4219}, - {0x5185, 3258}, - {0x5186, 1281}, - {0x5189, 4222}, - {0x518a, 2157}, - {0x518c, 4221}, - {0x518d, 2102}, - {0x518f, 4223}, - {0x5190, 6235}, - {0x5191, 4224}, - {0x5192, 3695}, - {0x5193, 4225}, - {0x5195, 4226}, - {0x5196, 4227}, - {0x5197, 2513}, - {0x5199, 2296}, - {0x519d, 8395}, - {0x51a0, 1507}, - {0x51a2, 4230}, - {0x51a4, 4228}, - {0x51a5, 3785}, - {0x51a6, 4229}, - {0x51a8, 3532}, - {0x51a9, 4231}, - {0x51aa, 4232}, - {0x51ab, 4233}, - {0x51ac, 3161}, - {0x51b0, 4237}, - {0x51b1, 4235}, - {0x51b2, 4236}, - {0x51b3, 4234}, - {0x51b4, 2131}, - {0x51b5, 4238}, - {0x51b6, 3830}, - {0x51b7, 4012}, - {0x51bd, 4239}, - {0x51be, 8396}, - {0x51c4, 2636}, - {0x51c5, 4240}, - {0x51c6, 2404}, - {0x51c9, 4241}, - {0x51cb, 3002}, - {0x51cc, 3975}, - {0x51cd, 3162}, - {0x51d6, 4314}, - {0x51db, 4242}, - {0x51dc, 8284}, - {0x51dd, 1725}, - {0x51e0, 4243}, - {0x51e1, 3724}, - {0x51e6, 2418}, - {0x51e7, 2908}, - {0x51e9, 4245}, - {0x51ea, 3260}, - {0x51ec, 8397}, - {0x51ed, 4246}, - {0x51f0, 4247}, - {0x51f1, 1420}, - {0x51f5, 4248}, - {0x51f6, 1695}, - {0x51f8, 3236}, - {0x51f9, 1308}, - {0x51fa, 2394}, - {0x51fd, 3381}, - {0x51fe, 4249}, - {0x5200, 3163}, - {0x5202, 0}, - {0x5203, 2581}, - {0x5204, 4250}, - {0x5206, 3580}, - {0x5207, 2686}, - {0x5208, 1502}, - {0x520a, 1509}, - {0x520b, 4251}, - {0x520e, 4253}, - {0x5211, 1808}, - {0x5214, 4252}, - {0x5215, 8398}, - {0x5217, 4027}, - {0x521d, 2419}, - {0x5224, 3409}, - {0x5225, 3612}, - {0x5227, 4254}, - {0x5229, 3938}, - {0x522a, 4255}, - {0x522e, 4256}, - {0x5230, 3192}, - {0x5233, 4257}, - {0x5236, 2637}, - {0x5237, 2158}, - {0x5238, 1866}, - {0x5239, 4258}, - {0x523a, 2199}, - {0x523b, 2049}, - {0x5243, 3074}, - {0x5244, 4260}, - {0x5247, 2823}, - {0x524a, 2143}, - {0x524b, 4261}, - {0x524c, 4262}, - {0x524d, 2738}, - {0x524f, 4259}, - {0x5254, 4264}, - {0x5256, 3684}, - {0x525b, 2038}, - {0x525d, 7774}, - {0x525e, 4263}, - {0x5263, 1867}, - {0x5264, 2126}, - {0x5265, 3363}, - {0x5269, 4267}, - {0x526a, 4265}, - {0x526f, 3565}, - {0x5270, 2514}, - {0x5271, 4274}, - {0x5272, 1474}, - {0x5273, 4268}, - {0x5274, 4266}, - {0x5275, 2769}, - {0x527d, 4270}, - {0x527f, 4269}, - {0x5283, 1442}, - {0x5287, 1846}, - {0x5288, 4275}, - {0x5289, 3957}, - {0x528d, 4271}, - {0x5291, 4276}, - {0x5292, 4273}, - {0x5294, 4272}, - {0x529b, 3991}, - {0x529c, 8399}, - {0x529f, 1965}, - {0x52a0, 1347}, - {0x52a3, 4028}, - {0x52a6, 8400}, - {0x52a9, 2431}, - {0x52aa, 3154}, - {0x52ab, 2039}, - {0x52ac, 4279}, - {0x52ad, 4280}, - {0x52af, 8573}, - {0x52b1, 4013}, - {0x52b4, 4049}, - {0x52b5, 4282}, - {0x52b9, 1966}, - {0x52bc, 4281}, - {0x52be, 1421}, - {0x52c0, 8401}, - {0x52c1, 4283}, - {0x52c3, 3716}, - {0x52c5, 3032}, - {0x52c7, 3856}, - {0x52c9, 3625}, - {0x52cd, 4284}, - {0x52d2, 7150}, - {0x52d5, 3208}, - {0x52d7, 4285}, - {0x52d8, 1510}, - {0x52d9, 3775}, - {0x52db, 8402}, - {0x52dd, 2441}, - {0x52de, 4286}, - {0x52df, 3639}, - {0x52e0, 4290}, - {0x52e2, 2638}, - {0x52e3, 4287}, - {0x52e4, 1736}, - {0x52e6, 4288}, - {0x52e7, 1511}, - {0x52f2, 1796}, - {0x52f3, 4291}, - {0x52f5, 4292}, - {0x52f8, 4293}, - {0x52f9, 4294}, - {0x52fa, 2311}, - {0x52fe, 1967}, - {0x52ff, 3818}, - {0x5300, 8403}, - {0x5301, 3828}, - {0x5302, 3279}, - {0x5305, 3649}, - {0x5306, 4295}, - {0x5307, 8404}, - {0x5308, 4296}, - {0x530b, 0}, - {0x530d, 4298}, - {0x530f, 4300}, - {0x5310, 4299}, - {0x5315, 4301}, - {0x5316, 1341}, - {0x5317, 3706}, - {0x5319, 2156}, - {0x531a, 4302}, - {0x531d, 2779}, - {0x5320, 2442}, - {0x5321, 1697}, - {0x5323, 4303}, - {0x5324, 8405}, - {0x532a, 3439}, - {0x532f, 4304}, - {0x5331, 4305}, - {0x5333, 4306}, - {0x5338, 4307}, - {0x5339, 3478}, - {0x533a, 1760}, - {0x533b, 1193}, - {0x533f, 3223}, - {0x5340, 4308}, - {0x5341, 2375}, - {0x5343, 2701}, - {0x5345, 4310}, - {0x5346, 4309}, - {0x5347, 2443}, - {0x5348, 1941}, - {0x5349, 4312}, - {0x534a, 3410}, - {0x534d, 4313}, - {0x5351, 3440}, - {0x5352, 2836}, - {0x5353, 2894}, - {0x5354, 1696}, - {0x5357, 3270}, - {0x5358, 2927}, - {0x535a, 3364}, - {0x535c, 3708}, - {0x535e, 4315}, - {0x5360, 2702}, - {0x5366, 1803}, - {0x5369, 4316}, - {0x536e, 4317}, - {0x536f, 1230}, - {0x5370, 1209}, - {0x5371, 1577}, - {0x5372, 8406}, - {0x5373, 2824}, - {0x5374, 1643}, - {0x5375, 3931}, - {0x5377, 4320}, - {0x5378, 1335}, - {0x537b, 4319}, - {0x537f, 1698}, - {0x5382, 4321}, - {0x5384, 3837}, - {0x5393, 8407}, - {0x5396, 4322}, - {0x5398, 3994}, - {0x539a, 1968}, - {0x539f, 1898}, - {0x53a0, 4323}, - {0x53a5, 4325}, - {0x53a6, 4324}, - {0x53a8, 2597}, - {0x53a9, 1243}, - {0x53ad, 1280}, - {0x53ae, 4326}, - {0x53b0, 4327}, - {0x53b2, 8408}, - {0x53b3, 1899}, - {0x53b6, 4328}, - {0x53bb, 1672}, - {0x53c2, 2176}, - {0x53c3, 4329}, - {0x53c8, 3746}, - {0x53c9, 2085}, - {0x53ca, 1652}, - {0x53cb, 3857}, - {0x53cc, 2770}, - {0x53cd, 3411}, - {0x53ce, 2345}, - {0x53d4, 2385}, - {0x53d6, 2324}, - {0x53d7, 2337}, - {0x53d9, 2432}, - {0x53db, 3412}, - {0x53dd, 8409}, - {0x53df, 4332}, - {0x53e1, 1253}, - {0x53e2, 2771}, - {0x53e3, 1969}, - {0x53e4, 1913}, - {0x53e5, 1759}, - {0x53e8, 4336}, - {0x53e9, 2911}, - {0x53ea, 2910}, - {0x53eb, 1699}, - {0x53ec, 2444}, - {0x53ed, 4337}, - {0x53ee, 4335}, - {0x53ef, 1348}, - {0x53f0, 2886}, - {0x53f1, 2276}, - {0x53f2, 2201}, - {0x53f3, 1224}, - {0x53f6, 1486}, - {0x53f7, 2040}, - {0x53f8, 2200}, - {0x53fa, 4338}, - {0x5401, 4339}, - {0x5403, 1635}, - {0x5404, 1444}, - {0x5408, 2041}, - {0x5409, 1634}, - {0x540a, 3067}, - {0x540b, 1223}, - {0x540c, 3209}, - {0x540d, 3786}, - {0x540e, 1971}, - {0x540f, 3939}, - {0x5410, 3137}, - {0x5411, 1970}, - {0x541b, 1797}, - {0x541d, 4348}, - {0x541f, 1755}, - {0x5420, 3704}, - {0x5426, 3441}, - {0x5429, 4347}, - {0x542b, 1562}, - {0x542c, 4342}, - {0x542d, 4343}, - {0x542e, 4345}, - {0x5436, 4346}, - {0x5438, 1653}, - {0x5439, 2599}, - {0x543b, 3581}, - {0x543c, 4344}, - {0x543d, 4340}, - {0x543e, 1943}, - {0x5440, 4341}, - {0x5442, 4042}, - {0x5446, 3650}, - {0x5448, 3076}, - {0x5449, 1942}, - {0x544a, 2050}, - {0x544e, 4349}, - {0x5451, 3253}, - {0x545f, 4353}, - {0x5468, 2346}, - {0x546a, 2338}, - {0x5470, 4356}, - {0x5471, 4354}, - {0x5473, 3759}, - {0x5475, 4351}, - {0x5476, 4360}, - {0x5477, 4355}, - {0x547b, 4358}, - {0x547c, 1914}, - {0x547d, 3787}, - {0x5480, 4359}, - {0x5484, 4361}, - {0x5486, 4363}, - {0x548a, 8412}, - {0x548b, 2144}, - {0x548c, 4072}, - {0x548e, 4352}, - {0x548f, 4350}, - {0x5490, 4362}, - {0x5492, 4357}, - {0x549c, 8411}, - {0x54a2, 4365}, - {0x54a4, 4374}, - {0x54a5, 4367}, - {0x54a8, 4371}, - {0x54a9, 8413}, - {0x54ab, 4372}, - {0x54ac, 4368}, - {0x54af, 4401}, - {0x54b2, 2137}, - {0x54b3, 1423}, - {0x54b8, 4366}, - {0x54bc, 4376}, - {0x54bd, 1210}, - {0x54be, 4375}, - {0x54c0, 1129}, - {0x54c1, 3516}, - {0x54c2, 4373}, - {0x54c4, 4369}, - {0x54c7, 4364}, - {0x54c8, 4370}, - {0x54c9, 2104}, - {0x54d8, 4377}, - {0x54e1, 1211}, - {0x54e2, 4386}, - {0x54e5, 4378}, - {0x54e6, 4379}, - {0x54e8, 2445}, - {0x54e9, 3735}, - {0x54ed, 4384}, - {0x54ee, 4383}, - {0x54f2, 3113}, - {0x54fa, 4385}, - {0x54fd, 4382}, - {0x54ff, 8414}, - {0x5504, 1238}, - {0x5506, 2086}, - {0x5507, 2550}, - {0x550f, 4380}, - {0x5510, 3164}, - {0x5514, 4381}, - {0x5516, 1126}, - {0x552e, 4391}, - {0x552f, 3853}, - {0x5531, 2447}, - {0x5533, 4397}, - {0x5538, 4396}, - {0x5539, 4387}, - {0x553e, 2851}, - {0x5540, 4388}, - {0x5544, 2895}, - {0x5545, 4393}, - {0x5546, 2446}, - {0x554c, 4390}, - {0x554f, 3824}, - {0x5553, 1810}, - {0x5556, 4394}, - {0x5557, 4395}, - {0x555c, 4392}, - {0x555d, 4398}, - {0x555e, 7633}, - {0x5561, 0}, - {0x5563, 4389}, - {0x557b, 4404}, - {0x557c, 4409}, - {0x557e, 4405}, - {0x5580, 4400}, - {0x5583, 4410}, - {0x5584, 2739}, - {0x5586, 8415}, - {0x5587, 4412}, - {0x5589, 1972}, - {0x558a, 4402}, - {0x558b, 3003}, - {0x5598, 4406}, - {0x5599, 4399}, - {0x559a, 1513}, - {0x559c, 1578}, - {0x559d, 1475}, - {0x559e, 4407}, - {0x559f, 4403}, - {0x55a7, 1868}, - {0x55a8, 4413}, - {0x55a9, 4411}, - {0x55aa, 2773}, - {0x55ab, 1636}, - {0x55ac, 1700}, - {0x55ae, 4408}, - {0x55b0, 1772}, - {0x55b6, 1254}, - {0x55c4, 4417}, - {0x55c5, 4415}, - {0x55c7, 4472}, - {0x55d4, 4420}, - {0x55da, 4414}, - {0x55dc, 4418}, - {0x55df, 4416}, - {0x55e3, 2202}, - {0x55e4, 4419}, - {0x55f7, 4422}, - {0x55f9, 4427}, - {0x55fd, 4425}, - {0x55fe, 4424}, - {0x5606, 2928}, - {0x5609, 1349}, - {0x560f, 0}, - {0x5614, 4421}, - {0x5616, 4423}, - {0x5617, 2448}, - {0x5618, 1237}, - {0x561b, 4426}, - {0x5629, 1374}, - {0x562f, 4437}, - {0x5631, 2532}, - {0x5632, 4433}, - {0x5634, 4431}, - {0x5636, 4432}, - {0x5638, 4434}, - {0x5642, 1247}, - {0x564c, 2747}, - {0x564e, 4428}, - {0x5650, 4429}, - {0x5653, 7963}, - {0x565b, 1496}, - {0x5664, 4436}, - {0x5668, 1579}, - {0x566a, 4439}, - {0x566b, 4435}, - {0x566c, 4438}, - {0x5672, 0}, - {0x5674, 3582}, - {0x5678, 3245}, - {0x567a, 3404}, - {0x5680, 4441}, - {0x5686, 4440}, - {0x5687, 1443}, - {0x568a, 4442}, - {0x568f, 4445}, - {0x5694, 4444}, - {0x5699, 7654}, - {0x56a0, 4443}, - {0x56a2, 3311}, - {0x56a5, 4446}, - {0x56ad, 0}, - {0x56ae, 4447}, - {0x56b4, 4449}, - {0x56b6, 4448}, - {0x56bc, 4451}, - {0x56c0, 4454}, - {0x56c1, 4452}, - {0x56c2, 4450}, - {0x56c3, 4453}, - {0x56c8, 4455}, - {0x56ca, 7770}, - {0x56ce, 4456}, - {0x56d1, 4457}, - {0x56d3, 4458}, - {0x56d7, 4459}, - {0x56d8, 4220}, - {0x56da, 2344}, - {0x56db, 2203}, - {0x56de, 1395}, - {0x56e0, 1212}, - {0x56e3, 2946}, - {0x56ee, 4460}, - {0x56f0, 2068}, - {0x56f2, 1171}, - {0x56f3, 2596}, - {0x56f9, 4461}, - {0x56fa, 1915}, - {0x56fd, 2051}, - {0x56ff, 4463}, - {0x5700, 4462}, - {0x5703, 3632}, - {0x5704, 4464}, - {0x5708, 4466}, - {0x5709, 4465}, - {0x570b, 4467}, - {0x570d, 4468}, - {0x570f, 1869}, - {0x5712, 1282}, - {0x5713, 4469}, - {0x5716, 4471}, - {0x5718, 4470}, - {0x571c, 4473}, - {0x571f, 3156}, - {0x5726, 4474}, - {0x5727, 1145}, - {0x5728, 2127}, - {0x572d, 1811}, - {0x5730, 2957}, - {0x5734, 0}, - {0x5737, 4475}, - {0x5738, 4476}, - {0x573b, 4478}, - {0x5740, 4479}, - {0x5742, 2132}, - {0x5747, 1737}, - {0x574a, 3685}, - {0x574e, 4477}, - {0x574f, 4480}, - {0x5750, 2097}, - {0x5751, 1973}, - {0x5759, 8416}, - {0x5761, 4484}, - {0x5764, 2069}, - {0x5765, 8417}, - {0x5766, 2929}, - {0x5769, 4481}, - {0x576a, 3062}, - {0x577f, 4485}, - {0x5782, 2600}, - {0x5788, 4483}, - {0x5789, 4486}, - {0x578b, 1813}, - {0x5793, 4487}, - {0x57a0, 4488}, - {0x57a2, 1974}, - {0x57a3, 1438}, - {0x57a4, 4490}, - {0x57aa, 4491}, - {0x57ac, 8418}, - {0x57b0, 4492}, - {0x57b3, 4489}, - {0x57c0, 4482}, - {0x57c3, 4493}, - {0x57c6, 4494}, - {0x57c7, 8420}, - {0x57c8, 8419}, - {0x57cb, 3730}, - {0x57ce, 2515}, - {0x57d2, 4496}, - {0x57d3, 4497}, - {0x57d4, 4495}, - {0x57d6, 4499}, - {0x57dc, 3310}, - {0x57df, 1196}, - {0x57e0, 3528}, - {0x57e3, 4500}, - {0x57f4, 2533}, - {0x57f6, 0}, - {0x57f7, 2277}, - {0x57f9, 3347}, - {0x57fa, 1580}, - {0x57fc, 2139}, - {0x5800, 3719}, - {0x5802, 3210}, - {0x5805, 1870}, - {0x5806, 2863}, - {0x580a, 4498}, - {0x580b, 4501}, - {0x5815, 2852}, - {0x5819, 4502}, - {0x581d, 4503}, - {0x5821, 4505}, - {0x5824, 3077}, - {0x582a, 1514}, - {0x582f, 7474}, - {0x5830, 1283}, - {0x5831, 3651}, - {0x5834, 2516}, - {0x5835, 3138}, - {0x583a, 2134}, - {0x583d, 4511}, - {0x5840, 3597}, - {0x5841, 4005}, - {0x584a, 1396}, - {0x584b, 4507}, - {0x5851, 2748}, - {0x5852, 4510}, - {0x5854, 3165}, - {0x5857, 3139}, - {0x5858, 3166}, - {0x5859, 3405}, - {0x585a, 3049}, - {0x585e, 2105}, - {0x5861, 7751}, - {0x5862, 4506}, - {0x5869, 1304}, - {0x586b, 3120}, - {0x5870, 4508}, - {0x5872, 4504}, - {0x5875, 2582}, - {0x5879, 4512}, - {0x587e, 2392}, - {0x5883, 1701}, - {0x5885, 4513}, - {0x5893, 3640}, - {0x5897, 2815}, - {0x589c, 3042}, - {0x589e, 8423}, - {0x589f, 4515}, - {0x58a8, 3709}, - {0x58ab, 4516}, - {0x58ae, 4521}, - {0x58b2, 8424}, - {0x58b3, 3583}, - {0x58b8, 4520}, - {0x58b9, 4514}, - {0x58ba, 4517}, - {0x58bb, 4519}, - {0x58be, 2070}, - {0x58c1, 3609}, - {0x58c5, 4522}, - {0x58c7, 2947}, - {0x58ca, 1397}, - {0x58cc, 2517}, - {0x58d1, 4524}, - {0x58d3, 4523}, - {0x58d5, 2042}, - {0x58d7, 4525}, - {0x58d8, 4527}, - {0x58d9, 4526}, - {0x58dc, 4529}, - {0x58de, 4518}, - {0x58df, 4531}, - {0x58e4, 4530}, - {0x58e5, 4528}, - {0x58eb, 2204}, - {0x58ec, 2583}, - {0x58ee, 2774}, - {0x58ef, 4532}, - {0x58f0, 2656}, - {0x58f1, 1201}, - {0x58f2, 3354}, - {0x58f7, 3063}, - {0x58f9, 4534}, - {0x58fa, 4533}, - {0x58fb, 4535}, - {0x58fc, 4536}, - {0x58fd, 4537}, - {0x5902, 4538}, - {0x5909, 3617}, - {0x590a, 4539}, - {0x590b, 8425}, - {0x590f, 1350}, - {0x5910, 4540}, - {0x5915, 3878}, - {0x5916, 1422}, - {0x5918, 4318}, - {0x5919, 2386}, - {0x591a, 2847}, - {0x591b, 4541}, - {0x591c, 3831}, - {0x5922, 3776}, - {0x5925, 4543}, - {0x5927, 2887}, - {0x5929, 3121}, - {0x592a, 2848}, - {0x592b, 3529}, - {0x592c, 4544}, - {0x592d, 4545}, - {0x592e, 1309}, - {0x5931, 2278}, - {0x5932, 4546}, - {0x5937, 1172}, - {0x5938, 4547}, - {0x593e, 4548}, - {0x5944, 1284}, - {0x5947, 1581}, - {0x5948, 3256}, - {0x5949, 3652}, - {0x594e, 4552}, - {0x594f, 2775}, - {0x5950, 4551}, - {0x5951, 1814}, - {0x5953, 8426}, - {0x5954, 3721}, - {0x5955, 4550}, - {0x5957, 3167}, - {0x5958, 4554}, - {0x595a, 4553}, - {0x595b, 8427}, - {0x595d, 8428}, - {0x5960, 4556}, - {0x5962, 4555}, - {0x5963, 8429}, - {0x5965, 1310}, - {0x5967, 4557}, - {0x5968, 2449}, - {0x5969, 4559}, - {0x596a, 2915}, - {0x596c, 4558}, - {0x596e, 3587}, - {0x5973, 2433}, - {0x5974, 3157}, - {0x5978, 4560}, - {0x597d, 1975}, - {0x5981, 4561}, - {0x5982, 3287}, - {0x5983, 3442}, - {0x5984, 3805}, - {0x598a, 3291}, - {0x598d, 4570}, - {0x5993, 1618}, - {0x5996, 3887}, - {0x5999, 3771}, - {0x599b, 4665}, - {0x599d, 4562}, - {0x59a3, 4565}, - {0x59a4, 8430}, - {0x59a5, 2853}, - {0x59a8, 3686}, - {0x59ac, 3140}, - {0x59b2, 4566}, - {0x59b9, 3731}, - {0x59ba, 8431}, - {0x59bb, 2106}, - {0x59be, 2450}, - {0x59c6, 4567}, - {0x59c9, 2206}, - {0x59cb, 2205}, - {0x59d0, 1149}, - {0x59d1, 1916}, - {0x59d3, 2639}, - {0x59d4, 1173}, - {0x59d9, 4571}, - {0x59da, 4572}, - {0x59dc, 4569}, - {0x59e4, 0}, - {0x59e5, 1242}, - {0x59e6, 1515}, - {0x59e8, 4568}, - {0x59ea, 3793}, - {0x59eb, 3491}, - {0x59f6, 1132}, - {0x59fb, 1213}, - {0x59ff, 2207}, - {0x5a01, 1174}, - {0x5a03, 1127}, - {0x5a09, 4577}, - {0x5a11, 4575}, - {0x5a18, 3784}, - {0x5a1a, 4578}, - {0x5a1c, 4576}, - {0x5a1f, 4574}, - {0x5a20, 2551}, - {0x5a25, 4573}, - {0x5a29, 3626}, - {0x5a2f, 1944}, - {0x5a35, 4582}, - {0x5a36, 4583}, - {0x5a3c, 2451}, - {0x5a40, 4579}, - {0x5a41, 4050}, - {0x5a46, 3330}, - {0x5a49, 4581}, - {0x5a5a, 2071}, - {0x5a62, 4584}, - {0x5a66, 3530}, - {0x5a6a, 4585}, - {0x5a6c, 4580}, - {0x5a7f, 3783}, - {0x5a92, 3348}, - {0x5a9a, 4586}, - {0x5a9b, 3492}, - {0x5abc, 4587}, - {0x5abd, 4591}, - {0x5abe, 4588}, - {0x5ac1, 1351}, - {0x5ac2, 4590}, - {0x5ac9, 2279}, - {0x5acb, 4589}, - {0x5acc, 1871}, - {0x5ad0, 4603}, - {0x5ad6, 4596}, - {0x5ad7, 4593}, - {0x5ae1, 2978}, - {0x5ae3, 4592}, - {0x5ae6, 4594}, - {0x5ae9, 4595}, - {0x5afa, 4597}, - {0x5afb, 4598}, - {0x5b09, 1582}, - {0x5b0b, 4600}, - {0x5b0c, 4599}, - {0x5b16, 4601}, - {0x5b22, 2518}, - {0x5b2a, 4604}, - {0x5b2c, 3064}, - {0x5b30, 1255}, - {0x5b32, 4602}, - {0x5b36, 4605}, - {0x5b3e, 4606}, - {0x5b40, 4609}, - {0x5b43, 4607}, - {0x5b45, 4608}, - {0x5b50, 2208}, - {0x5b51, 4610}, - {0x5b54, 1976}, - {0x5b55, 4611}, - {0x5b56, 8432}, - {0x5b57, 2248}, - {0x5b58, 2840}, - {0x5b5a, 4612}, - {0x5b5b, 4613}, - {0x5b5c, 2216}, - {0x5b5d, 1977}, - {0x5b5f, 3806}, - {0x5b63, 1602}, - {0x5b64, 1917}, - {0x5b65, 4614}, - {0x5b66, 1462}, - {0x5b69, 4615}, - {0x5b6b, 2841}, - {0x5b70, 4616}, - {0x5b71, 4656}, - {0x5b73, 4617}, - {0x5b75, 4618}, - {0x5b78, 4619}, - {0x5b7a, 4621}, - {0x5b7f, 0}, - {0x5b80, 4622}, - {0x5b83, 4623}, - {0x5b85, 2896}, - {0x5b87, 1225}, - {0x5b88, 2325}, - {0x5b89, 1158}, - {0x5b8b, 2777}, - {0x5b8c, 1516}, - {0x5b8d, 2273}, - {0x5b8f, 1978}, - {0x5b95, 3168}, - {0x5b97, 2347}, - {0x5b98, 1517}, - {0x5b99, 2982}, - {0x5b9a, 3078}, - {0x5b9b, 1148}, - {0x5b9c, 1619}, - {0x5b9d, 3653}, - {0x5b9f, 2286}, - {0x5ba2, 1644}, - {0x5ba3, 2703}, - {0x5ba4, 2280}, - {0x5ba5, 3858}, - {0x5ba6, 4624}, - {0x5bae, 1654}, - {0x5bb0, 2107}, - {0x5bb3, 1424}, - {0x5bb4, 1285}, - {0x5bb5, 2452}, - {0x5bb6, 1352}, - {0x5bb8, 4625}, - {0x5bb9, 3888}, - {0x5bbf, 2387}, - {0x5bc0, 8433}, - {0x5bc2, 2320}, - {0x5bc3, 4626}, - {0x5bc4, 1583}, - {0x5bc5, 3242}, - {0x5bc6, 3765}, - {0x5bc7, 4627}, - {0x5bc9, 4628}, - {0x5bcc, 3531}, - {0x5bd0, 4630}, - {0x5bd2, 1508}, - {0x5bd3, 1775}, - {0x5bd4, 4629}, - {0x5bd8, 8435}, - {0x5bdb, 1518}, - {0x5bdd, 2552}, - {0x5bde, 4634}, - {0x5bdf, 2159}, - {0x5be1, 1353}, - {0x5be2, 4633}, - {0x5be4, 4631}, - {0x5be5, 4635}, - {0x5be6, 4632}, - {0x5be7, 3297}, - {0x5be8, 5262}, - {0x5be9, 2553}, - {0x5beb, 4636}, - {0x5bec, 8436}, - {0x5bee, 3976}, - {0x5bf0, 4637}, - {0x5bf3, 4639}, - {0x5bf5, 3004}, - {0x5bf6, 4638}, - {0x5bf8, 2631}, - {0x5bfa, 2249}, - {0x5bfe, 2864}, - {0x5bff, 2339}, - {0x5c01, 3559}, - {0x5c02, 2704}, - {0x5c04, 2297}, - {0x5c05, 4640}, - {0x5c06, 2453}, - {0x5c07, 4641}, - {0x5c08, 4642}, - {0x5c09, 1175}, - {0x5c0a, 2842}, - {0x5c0b, 2584}, - {0x5c0d, 4643}, - {0x5c0e, 3211}, - {0x5c0f, 2454}, - {0x5c11, 2455}, - {0x5c13, 4644}, - {0x5c16, 2705}, - {0x5c1a, 2456}, - {0x5c1e, 8437}, - {0x5c20, 4645}, - {0x5c22, 4646}, - {0x5c24, 3820}, - {0x5c28, 4647}, - {0x5c2d, 1726}, - {0x5c31, 2348}, - {0x5c38, 4648}, - {0x5c39, 4649}, - {0x5c3a, 2312}, - {0x5c3b, 2546}, - {0x5c3c, 3276}, - {0x5c3d, 2586}, - {0x5c3e, 3468}, - {0x5c3f, 3288}, - {0x5c40, 1729}, - {0x5c41, 4650}, - {0x5c45, 1673}, - {0x5c46, 4651}, - {0x5c48, 1782}, - {0x5c4a, 3239}, - {0x5c4b, 1328}, - {0x5c4d, 2209}, - {0x5c4e, 4652}, - {0x5c4f, 4655}, - {0x5c50, 4654}, - {0x5c51, 1781}, - {0x5c53, 4653}, - {0x5c55, 3122}, - {0x5c5b, 7826}, - {0x5c5e, 2832}, - {0x5c60, 3141}, - {0x5c61, 2292}, - {0x5c62, 7693}, - {0x5c64, 2778}, - {0x5c65, 3940}, - {0x5c6c, 4657}, - {0x5c6e, 4658}, - {0x5c6f, 3246}, - {0x5c71, 2177}, - {0x5c76, 4660}, - {0x5c79, 4661}, - {0x5c8c, 4662}, - {0x5c90, 1584}, - {0x5c91, 4663}, - {0x5c94, 4664}, - {0x5ca1, 1324}, - {0x5ca6, 8438}, - {0x5ca8, 2749}, - {0x5ca9, 1568}, - {0x5cab, 4666}, - {0x5cac, 3764}, - {0x5cb1, 2866}, - {0x5cb3, 1463}, - {0x5cb6, 4668}, - {0x5cb7, 4670}, - {0x5cb8, 1563}, - {0x5cba, 8439}, - {0x5cbb, 4667}, - {0x5cbc, 4669}, - {0x5cbe, 4672}, - {0x5cc5, 4671}, - {0x5cc7, 4673}, - {0x5cd9, 4674}, - {0x5ce0, 3221}, - {0x5ce1, 1702}, - {0x5ce8, 1381}, - {0x5ce9, 4675}, - {0x5cea, 4680}, - {0x5ced, 4678}, - {0x5cef, 3655}, - {0x5cf0, 3654}, - {0x5cf5, 8440}, - {0x5cf6, 3169}, - {0x5cfa, 4677}, - {0x5cfb, 2398}, - {0x5cfd, 4676}, - {0x5d07, 2616}, - {0x5d0b, 4681}, - {0x5d0e, 2138}, - {0x5d11, 4687}, - {0x5d14, 4688}, - {0x5d15, 4682}, - {0x5d16, 1425}, - {0x5d17, 4683}, - {0x5d18, 4692}, - {0x5d19, 4691}, - {0x5d1a, 4690}, - {0x5d1b, 4686}, - {0x5d1f, 4685}, - {0x5d22, 4689}, - {0x5d27, 8441}, - {0x5d29, 3656}, - {0x5d42, 8444}, - {0x5d4b, 4696}, - {0x5d4c, 4693}, - {0x5d4e, 4695}, - {0x5d50, 3932}, - {0x5d52, 4694}, - {0x5d53, 8442}, - {0x5d5c, 4684}, - {0x5d69, 2617}, - {0x5d6c, 4697}, - {0x5d6d, 8445}, - {0x5d6f, 2087}, - {0x5d73, 4698}, - {0x5d76, 4699}, - {0x5d82, 4702}, - {0x5d84, 4701}, - {0x5d87, 4700}, - {0x5d8b, 3170}, - {0x5d8c, 4679}, - {0x5d90, 4708}, - {0x5d9d, 4704}, - {0x5da2, 4703}, - {0x5dac, 4705}, - {0x5dae, 4706}, - {0x5db7, 4709}, - {0x5db8, 8446}, - {0x5db9, 8447}, - {0x5dba, 4014}, - {0x5dbc, 4710}, - {0x5dbd, 4707}, - {0x5dc9, 4711}, - {0x5dcc, 1564}, - {0x5dcd, 4712}, - {0x5dd0, 8448}, - {0x5dd2, 4714}, - {0x5dd3, 4713}, - {0x5dd6, 4715}, - {0x5ddb, 4716}, - {0x5ddd, 2706}, - {0x5dde, 2349}, - {0x5de1, 2414}, - {0x5de3, 2789}, - {0x5de5, 1979}, - {0x5de6, 2088}, - {0x5de7, 1980}, - {0x5de8, 1674}, - {0x5deb, 4717}, - {0x5dee, 2089}, - {0x5df1, 1918}, - {0x5df2, 4718}, - {0x5df3, 3762}, - {0x5df4, 3321}, - {0x5df5, 4719}, - {0x5df7, 1981}, - {0x5dfb, 1512}, - {0x5dfd, 2917}, - {0x5dfe, 1738}, - {0x5e02, 2210}, - {0x5e03, 3533}, - {0x5e06, 3413}, - {0x5e0b, 4720}, - {0x5e0c, 1585}, - {0x5e11, 4723}, - {0x5e15, 0}, - {0x5e16, 3005}, - {0x5e19, 4722}, - {0x5e1a, 4721}, - {0x5e1b, 4724}, - {0x5e1d, 3079}, - {0x5e25, 2601}, - {0x5e2b, 2211}, - {0x5e2d, 2670}, - {0x5e2f, 2867}, - {0x5e30, 1596}, - {0x5e33, 3006}, - {0x5e36, 4725}, - {0x5e37, 4726}, - {0x5e38, 2519}, - {0x5e3d, 3687}, - {0x5e40, 4729}, - {0x5e43, 4728}, - {0x5e44, 4727}, - {0x5e45, 3567}, - {0x5e47, 4736}, - {0x5e4c, 3720}, - {0x5e4e, 4730}, - {0x5e54, 4732}, - {0x5e55, 3737}, - {0x5e57, 4731}, - {0x5e5f, 4733}, - {0x5e61, 3388}, - {0x5e62, 4734}, - {0x5e63, 3598}, - {0x5e64, 4735}, - {0x5e6c, 0}, - {0x5e72, 1519}, - {0x5e73, 3599}, - {0x5e74, 3301}, - {0x5e75, 4737}, - {0x5e76, 4738}, - {0x5e78, 1982}, - {0x5e79, 1520}, - {0x5e7a, 4739}, - {0x5e7b, 1900}, - {0x5e7c, 3886}, - {0x5e7d, 3859}, - {0x5e7e, 1586}, - {0x5e7f, 4741}, - {0x5e81, 3007}, - {0x5e83, 1983}, - {0x5e84, 2457}, - {0x5e87, 3443}, - {0x5e8a, 2458}, - {0x5e8f, 2434}, - {0x5e95, 3080}, - {0x5e96, 3657}, - {0x5e97, 3123}, - {0x5e9a, 1984}, - {0x5e9c, 3534}, - {0x5ea0, 4742}, - {0x5ea6, 3155}, - {0x5ea7, 2098}, - {0x5eab, 1919}, - {0x5ead, 3081}, - {0x5eb5, 1159}, - {0x5eb6, 2424}, - {0x5eb7, 1985}, - {0x5eb8, 3889}, - {0x5ebf, 0}, - {0x5ec1, 4743}, - {0x5ec2, 4744}, - {0x5ec3, 3335}, - {0x5ec8, 4745}, - {0x5ec9, 4031}, - {0x5eca, 4051}, - {0x5ecf, 4747}, - {0x5ed0, 4746}, - {0x5ed3, 1445}, - {0x5ed6, 4748}, - {0x5eda, 4751}, - {0x5edb, 4752}, - {0x5edd, 4750}, - {0x5edf, 3506}, - {0x5ee0, 2459}, - {0x5ee1, 4754}, - {0x5ee2, 4753}, - {0x5ee3, 4749}, - {0x5ee8, 4755}, - {0x5ee9, 4756}, - {0x5eec, 4757}, - {0x5ef0, 4760}, - {0x5ef1, 4758}, - {0x5ef3, 4759}, - {0x5ef4, 4761}, - {0x5ef6, 1286}, - {0x5ef7, 3082}, - {0x5ef8, 4762}, - {0x5efa, 1872}, - {0x5efb, 1398}, - {0x5efc, 3308}, - {0x5efe, 4763}, - {0x5eff, 3283}, - {0x5f01, 3627}, - {0x5f03, 4764}, - {0x5f04, 4052}, - {0x5f09, 4765}, - {0x5f0a, 3600}, - {0x5f0b, 4768}, - {0x5f0c, 4090}, - {0x5f0d, 4106}, - {0x5f0f, 2268}, - {0x5f10, 3277}, - {0x5f11, 4769}, - {0x5f13, 1655}, - {0x5f14, 3008}, - {0x5f15, 1214}, - {0x5f16, 4770}, - {0x5f17, 3574}, - {0x5f18, 1986}, - {0x5f1b, 2958}, - {0x5f1d, 0}, - {0x5f1f, 3083}, - {0x5f21, 8449}, - {0x5f25, 3835}, - {0x5f26, 1901}, - {0x5f27, 1920}, - {0x5f29, 4771}, - {0x5f2d, 4772}, - {0x5f2f, 4778}, - {0x5f31, 2321}, - {0x5f34, 8450}, - {0x5f35, 3009}, - {0x5f37, 1703}, - {0x5f38, 4773}, - {0x5f3c, 3485}, - {0x5f3e, 2948}, - {0x5f41, 4774}, - {0x5f45, 8370}, - {0x5f48, 4775}, - {0x5f4a, 1704}, - {0x5f4c, 4776}, - {0x5f4e, 4777}, - {0x5f51, 4779}, - {0x5f53, 3184}, - {0x5f56, 4780}, - {0x5f57, 4781}, - {0x5f59, 4782}, - {0x5f5c, 4767}, - {0x5f5d, 4766}, - {0x5f61, 4783}, - {0x5f62, 1815}, - {0x5f66, 3481}, - {0x5f67, 8451}, - {0x5f69, 2108}, - {0x5f6a, 3497}, - {0x5f6b, 3010}, - {0x5f6c, 3517}, - {0x5f6d, 4784}, - {0x5f70, 2460}, - {0x5f71, 1256}, - {0x5f73, 4785}, - {0x5f77, 4786}, - {0x5f79, 3838}, - {0x5f7c, 3444}, - {0x5f7f, 4789}, - {0x5f80, 1311}, - {0x5f81, 2640}, - {0x5f82, 4788}, - {0x5f83, 4787}, - {0x5f84, 1816}, - {0x5f85, 2868}, - {0x5f87, 4793}, - {0x5f88, 4791}, - {0x5f8a, 4790}, - {0x5f8b, 3951}, - {0x5f8c, 1945}, - {0x5f90, 2435}, - {0x5f91, 4792}, - {0x5f92, 3142}, - {0x5f93, 2376}, - {0x5f97, 3224}, - {0x5f98, 4796}, - {0x5f99, 4795}, - {0x5f9e, 4794}, - {0x5fa0, 4797}, - {0x5fa1, 1946}, - {0x5fa8, 4798}, - {0x5fa9, 3566}, - {0x5faa, 2405}, - {0x5fad, 4799}, - {0x5fae, 3469}, - {0x5fb3, 3225}, - {0x5fb4, 3011}, - {0x5fb7, 8452}, - {0x5fb9, 3114}, - {0x5fbc, 4800}, - {0x5fbd, 1605}, - {0x5fc3, 2554}, - {0x5fc5, 3486}, - {0x5fcc, 1587}, - {0x5fcd, 3292}, - {0x5fd6, 4801}, - {0x5fd7, 2212}, - {0x5fd8, 3688}, - {0x5fd9, 3689}, - {0x5fdc, 1312}, - {0x5fdd, 4806}, - {0x5fde, 8453}, - {0x5fe0, 2983}, - {0x5fe4, 4803}, - {0x5feb, 1399}, - {0x5ff0, 4854}, - {0x5ff1, 4805}, - {0x5ff5, 3302}, - {0x5ff8, 4804}, - {0x5ffb, 4802}, - {0x5ffd, 2060}, - {0x5fff, 4808}, - {0x600e, 4814}, - {0x600f, 4820}, - {0x6010, 4812}, - {0x6012, 3158}, - {0x6015, 4817}, - {0x6016, 3535}, - {0x6019, 4811}, - {0x601b, 4816}, - {0x601c, 4015}, - {0x601d, 2213}, - {0x6020, 2869}, - {0x6021, 4809}, - {0x6025, 1656}, - {0x6026, 4819}, - {0x6027, 2641}, - {0x6028, 1287}, - {0x6029, 4813}, - {0x602a, 1400}, - {0x602b, 4818}, - {0x602f, 1705}, - {0x6031, 4815}, - {0x603a, 4821}, - {0x6041, 4823}, - {0x6042, 4833}, - {0x6043, 4831}, - {0x6046, 4828}, - {0x604a, 4827}, - {0x604b, 4032}, - {0x604d, 4829}, - {0x6050, 1706}, - {0x6052, 1987}, - {0x6055, 2436}, - {0x6059, 4836}, - {0x605a, 4822}, - {0x605d, 8454}, - {0x605f, 4826}, - {0x6060, 4810}, - {0x6062, 1402}, - {0x6063, 4830}, - {0x6064, 4832}, - {0x6065, 2959}, - {0x6068, 2072}, - {0x6069, 1336}, - {0x606a, 4824}, - {0x606b, 4835}, - {0x606c, 4834}, - {0x606d, 1707}, - {0x606f, 2825}, - {0x6070, 1476}, - {0x6075, 1817}, - {0x6077, 4825}, - {0x6081, 4837}, - {0x6083, 4840}, - {0x6084, 4842}, - {0x6085, 8455}, - {0x6089, 2281}, - {0x608a, 8456}, - {0x608b, 4848}, - {0x608c, 3084}, - {0x608d, 4838}, - {0x6092, 4846}, - {0x6094, 1401}, - {0x6096, 4844}, - {0x6097, 4845}, - {0x609a, 4841}, - {0x609b, 4843}, - {0x609f, 1947}, - {0x60a0, 3860}, - {0x60a3, 1521}, - {0x60a6, 1275}, - {0x60a7, 4847}, - {0x60a9, 3312}, - {0x60aa, 1137}, - {0x60b2, 3445}, - {0x60b3, 4807}, - {0x60b4, 4853}, - {0x60b5, 4857}, - {0x60b6, 3825}, - {0x60b8, 4850}, - {0x60bc, 3171}, - {0x60bd, 4855}, - {0x60c5, 2520}, - {0x60c6, 4856}, - {0x60c7, 3247}, - {0x60d1, 4077}, - {0x60d3, 4852}, - {0x60d5, 8458}, - {0x60d8, 4858}, - {0x60da, 2061}, - {0x60dc, 2671}, - {0x60de, 8457}, - {0x60df, 1176}, - {0x60e0, 4851}, - {0x60e1, 4849}, - {0x60e3, 2780}, - {0x60e7, 4839}, - {0x60e8, 2178}, - {0x60f0, 2854}, - {0x60f1, 4870}, - {0x60f2, 8460}, - {0x60f3, 2781}, - {0x60f4, 4865}, - {0x60f6, 4862}, - {0x60f7, 4863}, - {0x60f9, 2322}, - {0x60fa, 4866}, - {0x60fb, 4869}, - {0x6100, 4864}, - {0x6101, 2351}, - {0x6103, 4867}, - {0x6106, 4861}, - {0x6108, 3848}, - {0x6109, 3847}, - {0x610d, 4871}, - {0x610e, 4872}, - {0x610f, 1177}, - {0x6111, 8461}, - {0x6113, 0}, - {0x6114, 1}, - {0x6115, 4860}, - {0x611a, 1770}, - {0x611b, 1130}, - {0x611f, 1522}, - {0x6120, 8459}, - {0x6121, 4868}, - {0x6127, 4876}, - {0x6128, 4875}, - {0x612c, 4880}, - {0x6130, 8463}, - {0x6134, 4881}, - {0x6137, 8462}, - {0x613c, 4879}, - {0x613d, 4882}, - {0x613e, 4874}, - {0x613f, 4878}, - {0x6142, 4883}, - {0x6144, 4884}, - {0x6147, 4873}, - {0x6148, 2250}, - {0x614a, 4877}, - {0x614b, 2870}, - {0x614c, 1988}, - {0x614d, 4859}, - {0x614e, 2555}, - {0x6153, 4897}, - {0x6155, 3641}, - {0x6158, 4887}, - {0x6159, 4888}, - {0x615a, 4889}, - {0x615d, 4896}, - {0x615f, 4895}, - {0x6162, 3755}, - {0x6163, 1523}, - {0x6165, 4893}, - {0x6167, 1819}, - {0x6168, 1426}, - {0x616b, 4890}, - {0x616e, 3968}, - {0x616f, 4892}, - {0x6170, 1178}, - {0x6171, 4894}, - {0x6173, 4885}, - {0x6174, 4891}, - {0x6175, 4898}, - {0x6176, 1818}, - {0x6177, 4886}, - {0x617e, 3911}, - {0x6182, 3861}, - {0x6187, 4901}, - {0x618a, 4905}, - {0x618e, 2816}, - {0x6190, 4033}, - {0x6191, 4906}, - {0x6194, 4903}, - {0x6196, 4900}, - {0x6198, 8464}, - {0x6199, 4899}, - {0x619a, 4904}, - {0x61a4, 3584}, - {0x61a7, 3212}, - {0x61a9, 1820}, - {0x61ab, 4907}, - {0x61ac, 4902}, - {0x61ae, 4908}, - {0x61b2, 1873}, - {0x61b6, 1329}, - {0x61ba, 4916}, - {0x61be, 1524}, - {0x61c3, 4914}, - {0x61c6, 4915}, - {0x61c7, 2073}, - {0x61c8, 4913}, - {0x61c9, 4911}, - {0x61ca, 4910}, - {0x61cb, 4917}, - {0x61cc, 4909}, - {0x61cd, 4919}, - {0x61d0, 1403}, - {0x61e3, 4921}, - {0x61e6, 4920}, - {0x61f2, 3012}, - {0x61f4, 4924}, - {0x61f6, 4922}, - {0x61f7, 4912}, - {0x61f8, 1874}, - {0x61fa, 4923}, - {0x61fc, 4927}, - {0x61fd, 4926}, - {0x61fe, 4928}, - {0x61ff, 4925}, - {0x6200, 4929}, - {0x6208, 4930}, - {0x6209, 4931}, - {0x620a, 3642}, - {0x620c, 4933}, - {0x620d, 4932}, - {0x620e, 2377}, - {0x6210, 2642}, - {0x6211, 1382}, - {0x6212, 1404}, - {0x6213, 8465}, - {0x6214, 4934}, - {0x6216, 1155}, - {0x621a, 2672}, - {0x621b, 4935}, - {0x621d, 6756}, - {0x621e, 4936}, - {0x621f, 1847}, - {0x6221, 4937}, - {0x6226, 2707}, - {0x622a, 4938}, - {0x622e, 4939}, - {0x622f, 1620}, - {0x6230, 4940}, - {0x6232, 4941}, - {0x6233, 4942}, - {0x6234, 2871}, - {0x6238, 1921}, - {0x623b, 3821}, - {0x623f, 3690}, - {0x6240, 2420}, - {0x6241, 4943}, - {0x6247, 2708}, - {0x6248, 6938}, - {0x6249, 3446}, - {0x624b, 2326}, - {0x624d, 2109}, - {0x624e, 4944}, - {0x6253, 2855}, - {0x6255, 3575}, - {0x6258, 2897}, - {0x625b, 4947}, - {0x625e, 4945}, - {0x6260, 4948}, - {0x6263, 4946}, - {0x6268, 4949}, - {0x626e, 3585}, - {0x6271, 1147}, - {0x6276, 3536}, - {0x6279, 3447}, - {0x627c, 4950}, - {0x627e, 4953}, - {0x627f, 2461}, - {0x6280, 1621}, - {0x6282, 4951}, - {0x6283, 4958}, - {0x6284, 2462}, - {0x6289, 4952}, - {0x628a, 3322}, - {0x6291, 3912}, - {0x6292, 4954}, - {0x6293, 4955}, - {0x6294, 4959}, - {0x6295, 3172}, - {0x6296, 4956}, - {0x6297, 1989}, - {0x6298, 2690}, - {0x629b, 4973}, - {0x629c, 3400}, - {0x629e, 2898}, - {0x62a6, 8466}, - {0x62ab, 3448}, - {0x62ac, 5042}, - {0x62b1, 3658}, - {0x62b5, 3085}, - {0x62b9, 3747}, - {0x62bb, 4962}, - {0x62bc, 1313}, - {0x62bd, 2984}, - {0x62c2, 4971}, - {0x62c5, 2930}, - {0x62c6, 4965}, - {0x62c7, 4972}, - {0x62c8, 4967}, - {0x62c9, 4974}, - {0x62ca, 4970}, - {0x62cc, 4969}, - {0x62cd, 3365}, - {0x62cf, 4963}, - {0x62d0, 1405}, - {0x62d1, 4961}, - {0x62d2, 1675}, - {0x62d3, 2899}, - {0x62d4, 4957}, - {0x62d7, 4960}, - {0x62d8, 1990}, - {0x62d9, 2687}, - {0x62db, 2463}, - {0x62dc, 4968}, - {0x62dd, 3336}, - {0x62e0, 1676}, - {0x62e1, 1446}, - {0x62ec, 1477}, - {0x62ed, 2535}, - {0x62ee, 4976}, - {0x62ef, 4981}, - {0x62f1, 4977}, - {0x62f3, 1875}, - {0x62f5, 4982}, - {0x62f6, 2160}, - {0x62f7, 2043}, - {0x62fe, 2352}, - {0x62ff, 4964}, - {0x6301, 2251}, - {0x6302, 4979}, - {0x6307, 2214}, - {0x6308, 4980}, - {0x6309, 1160}, - {0x630c, 4975}, - {0x6311, 3013}, - {0x6319, 1677}, - {0x631f, 1708}, - {0x6327, 4978}, - {0x6328, 1131}, - {0x632b, 2099}, - {0x632f, 2556}, - {0x633a, 3086}, - {0x633d, 3432}, - {0x633e, 4984}, - {0x633f, 2784}, - {0x6343, 0}, - {0x6349, 2826}, - {0x634c, 2169}, - {0x634d, 4985}, - {0x634f, 4987}, - {0x6350, 4983}, - {0x6355, 3633}, - {0x6357, 3033}, - {0x635c, 2782}, - {0x6367, 3659}, - {0x6368, 2298}, - {0x6369, 4999}, - {0x636b, 4998}, - {0x636e, 2622}, - {0x6372, 1876}, - {0x6376, 4992}, - {0x6377, 2465}, - {0x637a, 3264}, - {0x637b, 3303}, - {0x6380, 4990}, - {0x6383, 2783}, - {0x6388, 2340}, - {0x6389, 4995}, - {0x638c, 2464}, - {0x638e, 4989}, - {0x638f, 4994}, - {0x6392, 3337}, - {0x6396, 4988}, - {0x6398, 1783}, - {0x639b, 1467}, - {0x639f, 4996}, - {0x63a0, 3955}, - {0x63a1, 2110}, - {0x63a2, 2931}, - {0x63a3, 4993}, - {0x63a5, 2688}, - {0x63a7, 1991}, - {0x63a8, 2602}, - {0x63a9, 1288}, - {0x63aa, 2750}, - {0x63ab, 4991}, - {0x63ac, 1631}, - {0x63b2, 1821}, - {0x63b4, 3051}, - {0x63b5, 4997}, - {0x63bb, 2785}, - {0x63be, 5000}, - {0x63c0, 5002}, - {0x63c3, 2839}, - {0x63c4, 5008}, - {0x63c6, 5003}, - {0x63c9, 5005}, - {0x63cf, 3507}, - {0x63d0, 3087}, - {0x63d2, 5006}, - {0x63d6, 3862}, - {0x63da, 3890}, - {0x63db, 1525}, - {0x63e1, 1138}, - {0x63e3, 5004}, - {0x63e9, 5001}, - {0x63ee, 1588}, - {0x63f4, 1289}, - {0x63f5, 8467}, - {0x63f6, 5007}, - {0x63fa, 3891}, - {0x6406, 5011}, - {0x640d, 2843}, - {0x640f, 5018}, - {0x6413, 5012}, - {0x6414, 7724}, - {0x6416, 5009}, - {0x6417, 5016}, - {0x641c, 4986}, - {0x6426, 5013}, - {0x6428, 5017}, - {0x642c, 3414}, - {0x642d, 3173}, - {0x6434, 5010}, - {0x6436, 5014}, - {0x643a, 1822}, - {0x643e, 2145}, - {0x6442, 2689}, - {0x644e, 5022}, - {0x6451, 7747}, - {0x6458, 3104}, - {0x6460, 8468}, - {0x6467, 5019}, - {0x6469, 3726}, - {0x646f, 5020}, - {0x6476, 5021}, - {0x6478, 3802}, - {0x647a, 2630}, - {0x6483, 1848}, - {0x6488, 5028}, - {0x6492, 2179}, - {0x6493, 5025}, - {0x6495, 5024}, - {0x649a, 3304}, - {0x649d, 8469}, - {0x649e, 3213}, - {0x64a4, 3115}, - {0x64a5, 5026}, - {0x64a9, 5027}, - {0x64ab, 3553}, - {0x64ad, 3323}, - {0x64ae, 2161}, - {0x64b0, 2709}, - {0x64b2, 3710}, - {0x64b9, 1447}, - {0x64bb, 5034}, - {0x64bc, 5029}, - {0x64bf, 0}, - {0x64c1, 3892}, - {0x64c2, 5036}, - {0x64c5, 5032}, - {0x64c7, 5033}, - {0x64cd, 2786}, - {0x64ce, 8470}, - {0x64d2, 5031}, - {0x64d4, 4966}, - {0x64d8, 5035}, - {0x64da, 5030}, - {0x64e0, 5040}, - {0x64e1, 5041}, - {0x64e2, 3105}, - {0x64e3, 5043}, - {0x64e6, 2162}, - {0x64e7, 5038}, - {0x64ec, 1622}, - {0x64ef, 5044}, - {0x64f1, 5037}, - {0x64f2, 5048}, - {0x64f4, 5047}, - {0x64f6, 5046}, - {0x64fa, 5049}, - {0x64fd, 5051}, - {0x64fe, 2521}, - {0x6500, 5050}, - {0x6505, 5054}, - {0x6518, 5052}, - {0x651c, 5053}, - {0x651d, 5015}, - {0x6522, 7831}, - {0x6523, 5056}, - {0x6524, 5055}, - {0x652a, 5023}, - {0x652b, 5057}, - {0x652c, 5045}, - {0x652f, 2215}, - {0x6534, 5058}, - {0x6535, 5059}, - {0x6536, 5061}, - {0x6537, 5060}, - {0x6538, 5062}, - {0x6539, 1406}, - {0x653b, 1992}, - {0x653e, 3660}, - {0x653f, 2643}, - {0x6545, 1922}, - {0x6548, 5064}, - {0x654d, 5067}, - {0x654e, 8471}, - {0x654f, 3524}, - {0x6551, 1657}, - {0x6555, 5066}, - {0x6556, 5065}, - {0x6557, 3338}, - {0x6558, 5068}, - {0x6559, 1709}, - {0x655d, 5070}, - {0x655e, 5069}, - {0x6562, 1526}, - {0x6563, 2180}, - {0x6566, 3248}, - {0x656c, 1823}, - {0x6570, 2618}, - {0x6572, 5071}, - {0x6574, 2644}, - {0x6575, 3106}, - {0x6577, 3537}, - {0x6578, 5072}, - {0x6582, 5073}, - {0x6583, 5074}, - {0x6587, 3592}, - {0x6588, 4620}, - {0x6589, 2666}, - {0x658c, 3518}, - {0x658e, 2120}, - {0x6590, 3449}, - {0x6591, 3415}, - {0x6597, 3143}, - {0x6599, 3977}, - {0x659b, 5076}, - {0x659c, 2300}, - {0x659f, 5077}, - {0x65a1, 1146}, - {0x65a4, 1740}, - {0x65a5, 2673}, - {0x65a7, 3538}, - {0x65ab, 5078}, - {0x65ac, 2192}, - {0x65ad, 2949}, - {0x65af, 2217}, - {0x65b0, 2557}, - {0x65b7, 5079}, - {0x65b9, 3661}, - {0x65bc, 1305}, - {0x65bd, 2218}, - {0x65c1, 5082}, - {0x65c3, 5080}, - {0x65c4, 5083}, - {0x65c5, 3969}, - {0x65c6, 5081}, - {0x65cb, 2719}, - {0x65cc, 5084}, - {0x65cf, 2834}, - {0x65d2, 5085}, - {0x65d7, 1590}, - {0x65d9, 5087}, - {0x65db, 5086}, - {0x65e0, 5088}, - {0x65e1, 5089}, - {0x65e2, 1591}, - {0x65e5, 3284}, - {0x65e6, 2932}, - {0x65e7, 1670}, - {0x65e8, 2219}, - {0x65e9, 2787}, - {0x65ec, 2406}, - {0x65ed, 1140}, - {0x65f1, 5090}, - {0x65fa, 1314}, - {0x65fb, 5094}, - {0x6600, 8472}, - {0x6602, 1993}, - {0x6603, 5093}, - {0x6606, 2075}, - {0x6607, 2466}, - {0x6609, 8474}, - {0x660a, 5092}, - {0x660c, 2467}, - {0x660e, 3788}, - {0x660f, 2074}, - {0x6613, 1179}, - {0x6614, 2674}, - {0x6615, 8473}, - {0x661c, 5099}, - {0x661e, 8476}, - {0x661f, 2645}, - {0x6620, 1257}, - {0x6624, 8477}, - {0x6625, 2399}, - {0x6627, 3732}, - {0x6628, 2146}, - {0x662d, 2468}, - {0x662e, 8475}, - {0x662f, 2635}, - {0x6631, 8366}, - {0x6634, 5098}, - {0x6635, 5096}, - {0x6636, 5097}, - {0x663b, 7680}, - {0x663c, 2985}, - {0x663f, 5129}, - {0x6641, 5103}, - {0x6642, 2252}, - {0x6643, 1994}, - {0x6644, 5101}, - {0x6649, 5102}, - {0x664b, 2558}, - {0x664f, 5100}, - {0x6652, 2173}, - {0x6657, 8479}, - {0x6659, 8480}, - {0x665c, 0}, - {0x665d, 5105}, - {0x665e, 5104}, - {0x665f, 5109}, - {0x6662, 5110}, - {0x6664, 5106}, - {0x6665, 8478}, - {0x6666, 1408}, - {0x6667, 5107}, - {0x6668, 5108}, - {0x6669, 3433}, - {0x666e, 3539}, - {0x666f, 1824}, - {0x6670, 5111}, - {0x6673, 8482}, - {0x6674, 2646}, - {0x6676, 2469}, - {0x667a, 2960}, - {0x6681, 1727}, - {0x6683, 5112}, - {0x6684, 5116}, - {0x6687, 1355}, - {0x6688, 5113}, - {0x6689, 5115}, - {0x668e, 5114}, - {0x6691, 2421}, - {0x6696, 2950}, - {0x6697, 1161}, - {0x6698, 5117}, - {0x6699, 8483}, - {0x669d, 5118}, - {0x66a0, 8484}, - {0x66a2, 3014}, - {0x66a6, 4025}, - {0x66ab, 2193}, - {0x66ae, 3643}, - {0x66b2, 8485}, - {0x66b4, 3691}, - {0x66b8, 5125}, - {0x66b9, 5120}, - {0x66bc, 5123}, - {0x66be, 5122}, - {0x66bf, 8486}, - {0x66c1, 5119}, - {0x66c4, 5124}, - {0x66c7, 3254}, - {0x66c9, 5121}, - {0x66d6, 5126}, - {0x66d9, 2422}, - {0x66da, 5127}, - {0x66dc, 3893}, - {0x66dd, 3374}, - {0x66e0, 5128}, - {0x66e6, 5130}, - {0x66e9, 5131}, - {0x66f0, 5132}, - {0x66f2, 1730}, - {0x66f3, 1258}, - {0x66f4, 1995}, - {0x66f5, 5133}, - {0x66f7, 5134}, - {0x66f8, 2427}, - {0x66f9, 2788}, - {0x66fa, 8487}, - {0x66fb, 8369}, - {0x66fc, 4333}, - {0x66fd, 2752}, - {0x66fe, 2751}, - {0x66ff, 2872}, - {0x6700, 2103}, - {0x6703, 4171}, - {0x6708, 1860}, - {0x6709, 3863}, - {0x670b, 3662}, - {0x670d, 3568}, - {0x670e, 8488}, - {0x670f, 5135}, - {0x6714, 2147}, - {0x6715, 3035}, - {0x6716, 5136}, - {0x6717, 4053}, - {0x671b, 3692}, - {0x671d, 3015}, - {0x671e, 5137}, - {0x671f, 1592}, - {0x6726, 5138}, - {0x6727, 5139}, - {0x6728, 3814}, - {0x672a, 3760}, - {0x672b, 3748}, - {0x672c, 3722}, - {0x672d, 2163}, - {0x672e, 5141}, - {0x6731, 2327}, - {0x6734, 3711}, - {0x6736, 5143}, - {0x6737, 5146}, - {0x6738, 5145}, - {0x673a, 1589}, - {0x673d, 1658}, - {0x673f, 5142}, - {0x6741, 5144}, - {0x6746, 5147}, - {0x6749, 2623}, - {0x674e, 3941}, - {0x674f, 1165}, - {0x6750, 2128}, - {0x6751, 2844}, - {0x6753, 2313}, - {0x6756, 2523}, - {0x6759, 5150}, - {0x675c, 3144}, - {0x675e, 5148}, - {0x675f, 2827}, - {0x6760, 5149}, - {0x6761, 2522}, - {0x6762, 3817}, - {0x6763, 5151}, - {0x6764, 5152}, - {0x6765, 3922}, - {0x6766, 8490}, - {0x676a, 5157}, - {0x676d, 1996}, - {0x676f, 3339}, - {0x6770, 5154}, - {0x6771, 3174}, - {0x6772, 5091}, - {0x6773, 5095}, - {0x6775, 1641}, - {0x6777, 3325}, - {0x677c, 5156}, - {0x677e, 2470}, - {0x677f, 3416}, - {0x6785, 5162}, - {0x6787, 3470}, - {0x6789, 5153}, - {0x678b, 5159}, - {0x678c, 5158}, - {0x6790, 2675}, - {0x6795, 3739}, - {0x6797, 3995}, - {0x679a, 3733}, - {0x679c, 1356}, - {0x679d, 2220}, - {0x67a0, 4078}, - {0x67a1, 5161}, - {0x67a2, 2619}, - {0x67a6, 5160}, - {0x67a9, 5155}, - {0x67af, 1923}, - {0x67b3, 5167}, - {0x67b4, 5165}, - {0x67b6, 1357}, - {0x67b7, 5163}, - {0x67b8, 5169}, - {0x67b9, 5175}, - {0x67bb, 8491}, - {0x67c0, 8493}, - {0x67c1, 2856}, - {0x67c4, 3601}, - {0x67c6, 5177}, - {0x67ca, 3476}, - {0x67ce, 5176}, - {0x67cf, 3366}, - {0x67d0, 3693}, - {0x67d1, 1527}, - {0x67d3, 2715}, - {0x67d4, 2378}, - {0x67d8, 3055}, - {0x67da, 3864}, - {0x67dd, 5172}, - {0x67de, 5171}, - {0x67e2, 5173}, - {0x67e4, 5170}, - {0x67e7, 5178}, - {0x67e9, 5168}, - {0x67ec, 5166}, - {0x67ee, 5174}, - {0x67ef, 5164}, - {0x67f1, 2986}, - {0x67f3, 3844}, - {0x67f4, 2290}, - {0x67f5, 2148}, - {0x67fb, 2090}, - {0x67fe, 3741}, - {0x67ff, 1439}, - {0x6801, 8494}, - {0x6802, 3050}, - {0x6803, 3234}, - {0x6804, 1259}, - {0x6805, 7687}, - {0x6813, 2710}, - {0x6816, 2648}, - {0x6817, 1792}, - {0x681e, 5180}, - {0x6821, 1997}, - {0x6822, 1498}, - {0x6829, 5182}, - {0x682a, 1490}, - {0x682b, 5188}, - {0x6831, 0}, - {0x6832, 5185}, - {0x6834, 2711}, - {0x6838, 1449}, - {0x6839, 2076}, - {0x683c, 1448}, - {0x683d, 2111}, - {0x6840, 5183}, - {0x6841, 1851}, - {0x6842, 1825}, - {0x6843, 3175}, - {0x6844, 8495}, - {0x6846, 5181}, - {0x6848, 1162}, - {0x684d, 5184}, - {0x684e, 5186}, - {0x6850, 1733}, - {0x6851, 1794}, - {0x6852, 8492}, - {0x6853, 1528}, - {0x6854, 1637}, - {0x6859, 5189}, - {0x685c, 2153}, - {0x685d, 3743}, - {0x685f, 2181}, - {0x6863, 5190}, - {0x6867, 3490}, - {0x6874, 5202}, - {0x6876, 1331}, - {0x6877, 5191}, - {0x687e, 5208}, - {0x687f, 5192}, - {0x6881, 3978}, - {0x6883, 5199}, - {0x6885, 3349}, - {0x688d, 5207}, - {0x688e, 7836}, - {0x688f, 5194}, - {0x6893, 1144}, - {0x6894, 5196}, - {0x6897, 1998}, - {0x689b, 5198}, - {0x689d, 5197}, - {0x689f, 5193}, - {0x68a0, 5204}, - {0x68a2, 2471}, - {0x68a6, 4542}, - {0x68a7, 1948}, - {0x68a8, 3942}, - {0x68ad, 5195}, - {0x68af, 3088}, - {0x68b0, 1409}, - {0x68b1, 2077}, - {0x68b3, 5187}, - {0x68b5, 5203}, - {0x68b6, 1471}, - {0x68b9, 5201}, - {0x68ba, 5205}, - {0x68bc, 3176}, - {0x68c4, 1594}, - {0x68c6, 5235}, - {0x68c8, 8367}, - {0x68c9, 3797}, - {0x68ca, 5210}, - {0x68cb, 1593}, - {0x68cd, 5217}, - {0x68cf, 8496}, - {0x68d2, 3694}, - {0x68d4, 5218}, - {0x68d5, 5220}, - {0x68d7, 5224}, - {0x68d8, 5212}, - {0x68da, 2920}, - {0x68df, 3177}, - {0x68e0, 5228}, - {0x68e1, 5215}, - {0x68e3, 5225}, - {0x68e7, 5219}, - {0x68ee, 2559}, - {0x68ef, 5229}, - {0x68f1, 0}, - {0x68f2, 2647}, - {0x68f9, 5227}, - {0x68fa, 1529}, - {0x6900, 4086}, - {0x6901, 5209}, - {0x6904, 5223}, - {0x6905, 1180}, - {0x6908, 5211}, - {0x690b, 3782}, - {0x690c, 5216}, - {0x690d, 2536}, - {0x690e, 3043}, - {0x690f, 5206}, - {0x6912, 5222}, - {0x6919, 2624}, - {0x691a, 5232}, - {0x691b, 1487}, - {0x691c, 1877}, - {0x6921, 5234}, - {0x6922, 5213}, - {0x6923, 5233}, - {0x6925, 5226}, - {0x6926, 5214}, - {0x6928, 5230}, - {0x692a, 5231}, - {0x6930, 5248}, - {0x6934, 3238}, - {0x6936, 5221}, - {0x6939, 5244}, - {0x693d, 5246}, - {0x693f, 3060}, - {0x694a, 3894}, - {0x6953, 3560}, - {0x6954, 5241}, - {0x6955, 2858}, - {0x6959, 5247}, - {0x695a, 2753}, - {0x695c, 5238}, - {0x695d, 5251}, - {0x695e, 5250}, - {0x6960, 3271}, - {0x6961, 5249}, - {0x6962, 3266}, - {0x6968, 8498}, - {0x696a, 5253}, - {0x696b, 5240}, - {0x696d, 1728}, - {0x696e, 5243}, - {0x696f, 2407}, - {0x6973, 3350}, - {0x6974, 5245}, - {0x6975, 1731}, - {0x6977, 5237}, - {0x6978, 5239}, - {0x6979, 5236}, - {0x697c, 4054}, - {0x697d, 1464}, - {0x697e, 5242}, - {0x6980, 0}, - {0x6981, 5252}, - {0x6982, 1427}, - {0x698a, 2135}, - {0x698e, 1279}, - {0x6991, 5269}, - {0x6994, 4055}, - {0x6995, 5272}, - {0x6998, 8500}, - {0x699b, 2560}, - {0x699c, 5271}, - {0x69a0, 5270}, - {0x69a7, 5267}, - {0x69ae, 5255}, - {0x69b1, 5284}, - {0x69b2, 5254}, - {0x69b4, 5273}, - {0x69bb, 5265}, - {0x69be, 5260}, - {0x69bf, 5257}, - {0x69c1, 5258}, - {0x69c3, 5266}, - {0x69c7, 7475}, - {0x69ca, 5263}, - {0x69cb, 1999}, - {0x69cc, 3044}, - {0x69cd, 2790}, - {0x69ce, 5261}, - {0x69d0, 5256}, - {0x69d3, 5259}, - {0x69d7, 0}, - {0x69d8, 3895}, - {0x69d9, 3736}, - {0x69dd, 5264}, - {0x69de, 5274}, - {0x69e2, 8501}, - {0x69e7, 5282}, - {0x69e8, 5275}, - {0x69eb, 5288}, - {0x69ed, 5286}, - {0x69f2, 5281}, - {0x69f9, 5280}, - {0x69fb, 3052}, - {0x69fd, 2791}, - {0x69ff, 5278}, - {0x6a02, 5276}, - {0x6a05, 5283}, - {0x6a0a, 5289}, - {0x6a0b, 3465}, - {0x6a0c, 5295}, - {0x6a12, 5290}, - {0x6a13, 5293}, - {0x6a14, 5287}, - {0x6a17, 2994}, - {0x6a19, 3498}, - {0x6a1b, 5277}, - {0x6a1e, 5285}, - {0x6a1f, 2472}, - {0x6a21, 3803}, - {0x6a22, 5305}, - {0x6a23, 5292}, - {0x6a29, 1878}, - {0x6a2a, 1315}, - {0x6a2b, 1469}, - {0x6a2e, 5268}, - {0x6a30, 8502}, - {0x6a35, 2473}, - {0x6a36, 5297}, - {0x6a38, 5304}, - {0x6a39, 2341}, - {0x6a3a, 1488}, - {0x6a3d, 2924}, - {0x6a44, 5294}, - {0x6a46, 8504}, - {0x6a47, 5299}, - {0x6a48, 5303}, - {0x6a4b, 1710}, - {0x6a51, 0}, - {0x6a58, 1638}, - {0x6a59, 5301}, - {0x6a5f, 1595}, - {0x6a61, 3235}, - {0x6a62, 5300}, - {0x6a66, 5302}, - {0x6a6b, 8503}, - {0x6a72, 5296}, - {0x6a73, 8505}, - {0x6a78, 5298}, - {0x6a7e, 8506}, - {0x6a7f, 1470}, - {0x6a80, 2951}, - {0x6a84, 5309}, - {0x6a8d, 5307}, - {0x6a8e, 1949}, - {0x6a90, 5306}, - {0x6a97, 5312}, - {0x6a9c, 5179}, - {0x6a9e, 0}, - {0x6a9f, 1}, - {0x6aa0, 5308}, - {0x6aa2, 5310}, - {0x6aa3, 5311}, - {0x6aaa, 5323}, - {0x6aac, 5319}, - {0x6aae, 5200}, - {0x6ab3, 5318}, - {0x6ab8, 5317}, - {0x6abb, 5314}, - {0x6ac1, 5291}, - {0x6ac2, 5316}, - {0x6ac3, 5315}, - {0x6ad1, 5321}, - {0x6ad3, 4044}, - {0x6ada, 5324}, - {0x6adb, 1779}, - {0x6ade, 5320}, - {0x6adf, 5322}, - {0x6ae2, 8507}, - {0x6ae4, 8508}, - {0x6ae8, 3387}, - {0x6aea, 5325}, - {0x6afa, 5329}, - {0x6afb, 5326}, - {0x6b04, 3933}, - {0x6b05, 5327}, - {0x6b0a, 5279}, - {0x6b12, 5330}, - {0x6b16, 5331}, - {0x6b1d, 1239}, - {0x6b1f, 5333}, - {0x6b20, 1853}, - {0x6b21, 2253}, - {0x6b23, 1741}, - {0x6b27, 1316}, - {0x6b32, 3913}, - {0x6b37, 5335}, - {0x6b38, 5334}, - {0x6b39, 5337}, - {0x6b3a, 1623}, - {0x6b3d, 1742}, - {0x6b3e, 1530}, - {0x6b43, 5340}, - {0x6b47, 5339}, - {0x6b49, 5341}, - {0x6b4c, 1358}, - {0x6b4e, 2933}, - {0x6b50, 5342}, - {0x6b53, 1531}, - {0x6b54, 5344}, - {0x6b59, 5343}, - {0x6b5b, 5345}, - {0x6b5f, 5346}, - {0x6b61, 5347}, - {0x6b62, 2221}, - {0x6b63, 2649}, - {0x6b64, 2065}, - {0x6b66, 3554}, - {0x6b69, 3634}, - {0x6b6a, 4074}, - {0x6b6f, 2243}, - {0x6b73, 2112}, - {0x6b74, 4026}, - {0x6b78, 5348}, - {0x6b79, 5349}, - {0x6b7b, 2222}, - {0x6b7f, 5350}, - {0x6b80, 5351}, - {0x6b83, 5353}, - {0x6b84, 5352}, - {0x6b86, 3718}, - {0x6b89, 2408}, - {0x6b8a, 2328}, - {0x6b8b, 2194}, - {0x6b8d, 5354}, - {0x6b95, 5356}, - {0x6b96, 2537}, - {0x6b98, 5355}, - {0x6b9e, 5357}, - {0x6ba4, 5358}, - {0x6baa, 5359}, - {0x6bab, 5360}, - {0x6baf, 5361}, - {0x6bb1, 5363}, - {0x6bb2, 5362}, - {0x6bb3, 5364}, - {0x6bb4, 1317}, - {0x6bb5, 2952}, - {0x6bb7, 5365}, - {0x6bba, 2164}, - {0x6bbb, 1450}, - {0x6bbc, 5366}, - {0x6bbf, 3132}, - {0x6bc0, 4509}, - {0x6bc5, 1597}, - {0x6bc6, 5367}, - {0x6bcb, 5368}, - {0x6bcd, 3644}, - {0x6bce, 3734}, - {0x6bd2, 3231}, - {0x6bd3, 5369}, - {0x6bd4, 3450}, - {0x6bd6, 8509}, - {0x6bd8, 3471}, - {0x6bdb, 3807}, - {0x6bdf, 5370}, - {0x6beb, 5372}, - {0x6bec, 5371}, - {0x6bef, 5374}, - {0x6bf3, 5373}, - {0x6c08, 5376}, - {0x6c0f, 2223}, - {0x6c11, 3773}, - {0x6c13, 5377}, - {0x6c14, 5378}, - {0x6c17, 1598}, - {0x6c1b, 5379}, - {0x6c23, 5381}, - {0x6c24, 5380}, - {0x6c34, 2603}, - {0x6c37, 3499}, - {0x6c38, 1260}, - {0x6c3e, 3417}, - {0x6c3f, 8510}, - {0x6c40, 3089}, - {0x6c41, 2379}, - {0x6c42, 1659}, - {0x6c4e, 3418}, - {0x6c50, 2266}, - {0x6c55, 5383}, - {0x6c57, 1532}, - {0x6c5a, 1306}, - {0x6c5c, 8511}, - {0x6c5d, 3274}, - {0x6c5e, 5382}, - {0x6c5f, 2000}, - {0x6c60, 2961}, - {0x6c62, 5384}, - {0x6c68, 5392}, - {0x6c6a, 5385}, - {0x6c6f, 8513}, - {0x6c70, 2849}, - {0x6c72, 1660}, - {0x6c73, 5393}, - {0x6c7a, 1854}, - {0x6c7d, 1599}, - {0x6c7e, 5391}, - {0x6c81, 5389}, - {0x6c82, 5386}, - {0x6c83, 3914}, - {0x6c86, 8512}, - {0x6c88, 3036}, - {0x6c8c, 3249}, - {0x6c8d, 5387}, - {0x6c90, 5395}, - {0x6c92, 5394}, - {0x6c93, 1785}, - {0x6c96, 1325}, - {0x6c99, 2091}, - {0x6c9a, 5388}, - {0x6c9b, 5390}, - {0x6ca1, 3717}, - {0x6ca2, 2900}, - {0x6cab, 3749}, - {0x6cae, 5403}, - {0x6cb1, 5404}, - {0x6cb3, 1359}, - {0x6cb8, 3576}, - {0x6cb9, 3849}, - {0x6cba, 5406}, - {0x6cbb, 2255}, - {0x6cbc, 2474}, - {0x6cbd, 5399}, - {0x6cbe, 5405}, - {0x6cbf, 1290}, - {0x6cc1, 1711}, - {0x6cc4, 5396}, - {0x6cc5, 5401}, - {0x6cc9, 2712}, - {0x6cca, 3367}, - {0x6ccc, 3451}, - {0x6cd3, 5398}, - {0x6cd5, 3663}, - {0x6cd7, 5400}, - {0x6cd9, 5409}, - {0x6cda, 8514}, - {0x6cdb, 5407}, - {0x6cdd, 5402}, - {0x6ce1, 3664}, - {0x6ce2, 3326}, - {0x6ce3, 1661}, - {0x6ce5, 3103}, - {0x6ce8, 2987}, - {0x6cea, 5410}, - {0x6cec, 0}, - {0x6cef, 5408}, - {0x6cf0, 2873}, - {0x6cf1, 5397}, - {0x6cf3, 1261}, - {0x6d04, 8515}, - {0x6d0b, 3896}, - {0x6d0c, 5421}, - {0x6d12, 5420}, - {0x6d17, 2714}, - {0x6d19, 5417}, - {0x6d1b, 3926}, - {0x6d1e, 3214}, - {0x6d1f, 5411}, - {0x6d25, 3041}, - {0x6d29, 1262}, - {0x6d2a, 2001}, - {0x6d2b, 5414}, - {0x6d32, 2353}, - {0x6d33, 5419}, - {0x6d35, 5418}, - {0x6d36, 5413}, - {0x6d38, 5416}, - {0x6d3b, 1478}, - {0x6d3d, 5415}, - {0x6d3e, 3327}, - {0x6d41, 3958}, - {0x6d44, 2524}, - {0x6d45, 2713}, - {0x6d59, 5427}, - {0x6d5a, 5425}, - {0x6d5c, 3519}, - {0x6d63, 5422}, - {0x6d64, 5424}, - {0x6d66, 1244}, - {0x6d69, 2002}, - {0x6d6a, 4056}, - {0x6d6c, 1435}, - {0x6d6e, 3540}, - {0x6d6f, 8517}, - {0x6d74, 3915}, - {0x6d77, 1410}, - {0x6d78, 2561}, - {0x6d79, 5426}, - {0x6d85, 5431}, - {0x6d87, 8516}, - {0x6d88, 2475}, - {0x6d8c, 3866}, - {0x6d8e, 5428}, - {0x6d93, 5423}, - {0x6d95, 5429}, - {0x6d96, 8518}, - {0x6d99, 4006}, - {0x6d9b, 3181}, - {0x6d9c, 3226}, - {0x6dac, 8519}, - {0x6daf, 1428}, - {0x6db2, 1271}, - {0x6db5, 5435}, - {0x6db8, 5438}, - {0x6dbc, 3979}, - {0x6dc0, 3918}, - {0x6dc5, 5445}, - {0x6dc6, 5439}, - {0x6dc7, 5436}, - {0x6dcb, 3996}, - {0x6dcc, 5442}, - {0x6dcf, 8520}, - {0x6dd1, 2388}, - {0x6dd2, 5444}, - {0x6dd5, 5449}, - {0x6dd8, 3179}, - {0x6dd9, 5447}, - {0x6dde, 5441}, - {0x6de1, 2934}, - {0x6de4, 5448}, - {0x6de6, 5437}, - {0x6de8, 5443}, - {0x6dea, 5450}, - {0x6deb, 1216}, - {0x6dec, 5440}, - {0x6dee, 5451}, - {0x6df1, 2562}, - {0x6df2, 8522}, - {0x6df3, 2409}, - {0x6df5, 3573}, - {0x6df7, 2078}, - {0x6df8, 8521}, - {0x6df9, 5432}, - {0x6dfa, 5446}, - {0x6dfb, 3124}, - {0x6dfc, 8523}, - {0x6e05, 2650}, - {0x6e07, 1479}, - {0x6e08, 2113}, - {0x6e09, 2476}, - {0x6e0a, 5434}, - {0x6e0b, 2380}, - {0x6e13, 1826}, - {0x6e15, 5433}, - {0x6e19, 5455}, - {0x6e1a, 2423}, - {0x6e1b, 1902}, - {0x6e1d, 5470}, - {0x6e1f, 5464}, - {0x6e20, 1678}, - {0x6e21, 3145}, - {0x6e23, 5459}, - {0x6e24, 5468}, - {0x6e25, 1139}, - {0x6e26, 1236}, - {0x6e27, 8526}, - {0x6e29, 1337}, - {0x6e2b, 5461}, - {0x6e2c, 2828}, - {0x6e2d, 5452}, - {0x6e2e, 5454}, - {0x6e2f, 2003}, - {0x6e38, 5471}, - {0x6e39, 8524}, - {0x6e3a, 5466}, - {0x6e3c, 8527}, - {0x6e3e, 5458}, - {0x6e43, 5465}, - {0x6e4a, 3767}, - {0x6e4d, 5463}, - {0x6e4e, 5467}, - {0x6e56, 1924}, - {0x6e58, 2477}, - {0x6e5b, 2935}, - {0x6e5c, 8525}, - {0x6e5f, 5457}, - {0x6e67, 3865}, - {0x6e6b, 5460}, - {0x6e6e, 5453}, - {0x6e6f, 3180}, - {0x6e72, 5456}, - {0x6e76, 5462}, - {0x6e7e, 4087}, - {0x6e7f, 2282}, - {0x6e80, 3756}, - {0x6e82, 5472}, - {0x6e8c, 3394}, - {0x6e8f, 5484}, - {0x6e90, 1903}, - {0x6e96, 2410}, - {0x6e98, 5474}, - {0x6e9c, 3959}, - {0x6e9d, 2004}, - {0x6e9f, 5487}, - {0x6ea2, 1202}, - {0x6ea5, 5485}, - {0x6eaa, 5473}, - {0x6eaf, 5479}, - {0x6eb2, 5481}, - {0x6eb6, 3897}, - {0x6eb7, 5476}, - {0x6eba, 3112}, - {0x6ebd, 5478}, - {0x6ebf, 8528}, - {0x6ec2, 5486}, - {0x6ec4, 5480}, - {0x6ec5, 3795}, - {0x6ec9, 5475}, - {0x6ecb, 2254}, - {0x6ecc, 5499}, - {0x6ed1, 1480}, - {0x6ed3, 5477}, - {0x6ed4, 5482}, - {0x6ed5, 5483}, - {0x6edd, 2892}, - {0x6ede, 2874}, - {0x6eec, 5491}, - {0x6eef, 5497}, - {0x6ef2, 5495}, - {0x6ef4, 3107}, - {0x6ef7, 5502}, - {0x6ef8, 5492}, - {0x6efe, 5493}, - {0x6eff, 5469}, - {0x6f01, 1683}, - {0x6f02, 3500}, - {0x6f06, 2283}, - {0x6f09, 2057}, - {0x6f0f, 4057}, - {0x6f11, 5489}, - {0x6f13, 5501}, - {0x6f14, 1291}, - {0x6f15, 2792}, - {0x6f20, 3375}, - {0x6f22, 1533}, - {0x6f23, 4034}, - {0x6f2b, 3757}, - {0x6f2c, 3054}, - {0x6f31, 5496}, - {0x6f32, 5498}, - {0x6f38, 2740}, - {0x6f3e, 5500}, - {0x6f3f, 5494}, - {0x6f41, 5488}, - {0x6f45, 1535}, - {0x6f51, 7776}, - {0x6f54, 1855}, - {0x6f58, 5514}, - {0x6f5b, 5509}, - {0x6f5c, 2716}, - {0x6f5f, 1473}, - {0x6f64, 2411}, - {0x6f66, 5518}, - {0x6f6d, 5511}, - {0x6f6e, 3016}, - {0x6f6f, 5508}, - {0x6f70, 3061}, - {0x6f74, 5543}, - {0x6f78, 5505}, - {0x6f7a, 5504}, - {0x6f7c, 5513}, - {0x6f80, 5507}, - {0x6f81, 5506}, - {0x6f82, 5512}, - {0x6f84, 2629}, - {0x6f86, 5503}, - {0x6f88, 8529}, - {0x6f8e, 5515}, - {0x6f91, 5516}, - {0x6f97, 1534}, - {0x6fa1, 5521}, - {0x6fa3, 5520}, - {0x6fa4, 5522}, - {0x6fa8, 0}, - {0x6faa, 5525}, - {0x6fb1, 3133}, - {0x6fb3, 5519}, - {0x6fb5, 8530}, - {0x6fb9, 5523}, - {0x6fc0, 1849}, - {0x6fc1, 2905}, - {0x6fc2, 5517}, - {0x6fc3, 3313}, - {0x6fc6, 5524}, - {0x6fd4, 5529}, - {0x6fd5, 5527}, - {0x6fd8, 5530}, - {0x6fdb, 5533}, - {0x6fdf, 5526}, - {0x6fe0, 2044}, - {0x6fe1, 3294}, - {0x6fe4, 5430}, - {0x6feb, 3934}, - {0x6fec, 5528}, - {0x6fee, 5532}, - {0x6fef, 2901}, - {0x6ff1, 5531}, - {0x6ff3, 5510}, - {0x6ff5, 8531}, - {0x6ff6, 7076}, - {0x6ffa, 5536}, - {0x6ffe, 5540}, - {0x7001, 5538}, - {0x7005, 8532}, - {0x7006, 7760}, - {0x7007, 8533}, - {0x7009, 5534}, - {0x700b, 5535}, - {0x700f, 5539}, - {0x7011, 5537}, - {0x7015, 3520}, - {0x7018, 5545}, - {0x701a, 5542}, - {0x701b, 5541}, - {0x701d, 5544}, - {0x701e, 3244}, - {0x701f, 5546}, - {0x7026, 2995}, - {0x7027, 2893}, - {0x7028, 8534}, - {0x702c, 2633}, - {0x7030, 5547}, - {0x7032, 5549}, - {0x703e, 5548}, - {0x704c, 5490}, - {0x7051, 5550}, - {0x7058, 3263}, - {0x705e, 0}, - {0x7063, 5551}, - {0x706b, 1360}, - {0x706f, 3182}, - {0x7070, 1411}, - {0x7078, 1662}, - {0x707c, 2314}, - {0x707d, 2114}, - {0x7085, 8535}, - {0x7089, 4045}, - {0x708a, 2604}, - {0x708e, 1292}, - {0x7092, 5553}, - {0x7099, 5552}, - {0x70ab, 8536}, - {0x70ac, 5556}, - {0x70ad, 2936}, - {0x70ae, 5559}, - {0x70af, 5554}, - {0x70b3, 5558}, - {0x70b8, 5557}, - {0x70b9, 3130}, - {0x70ba, 1181}, - {0x70bb, 8365}, - {0x70c8, 4029}, - {0x70cb, 5561}, - {0x70cf, 1226}, - {0x70d4, 0}, - {0x70d9, 5563}, - {0x70dd, 5562}, - {0x70df, 5560}, - {0x70f1, 5555}, - {0x70f9, 3665}, - {0x70fd, 5565}, - {0x7104, 8538}, - {0x7109, 5564}, - {0x710f, 8537}, - {0x7114, 1293}, - {0x7119, 5567}, - {0x711a, 3586}, - {0x711c, 5566}, - {0x7121, 3777}, - {0x7126, 2479}, - {0x7130, 7644}, - {0x7136, 2741}, - {0x713c, 2478}, - {0x7146, 8540}, - {0x7147, 8541}, - {0x7149, 4035}, - {0x714c, 5573}, - {0x714e, 2717}, - {0x7155, 5569}, - {0x7156, 5574}, - {0x7159, 1294}, - {0x715c, 8539}, - {0x7162, 5572}, - {0x7164, 3351}, - {0x7165, 5568}, - {0x7166, 5571}, - {0x7167, 2480}, - {0x7169, 3429}, - {0x716c, 5575}, - {0x716e, 2301}, - {0x717d, 2718}, - {0x7184, 5578}, - {0x7188, 5570}, - {0x718a, 1789}, - {0x718f, 5576}, - {0x7194, 3898}, - {0x7195, 5579}, - {0x7199, 8285}, - {0x719f, 2393}, - {0x71a8, 5580}, - {0x71ac, 5581}, - {0x71b1, 3300}, - {0x71b9, 5583}, - {0x71be, 5584}, - {0x71c1, 8543}, - {0x71c3, 3305}, - {0x71c8, 3183}, - {0x71c9, 5586}, - {0x71ce, 5588}, - {0x71d0, 3997}, - {0x71d2, 5585}, - {0x71d4, 5587}, - {0x71d5, 1295}, - {0x71d7, 5582}, - {0x71df, 4430}, - {0x71e0, 5589}, - {0x71e5, 2793}, - {0x71e6, 2182}, - {0x71e7, 5591}, - {0x71ec, 5590}, - {0x71ed, 2538}, - {0x71ee, 4334}, - {0x71f5, 5592}, - {0x71f9, 5594}, - {0x71fb, 5577}, - {0x71fc, 5593}, - {0x71fe, 8544}, - {0x71ff, 5595}, - {0x7206, 3376}, - {0x720d, 5596}, - {0x7210, 5597}, - {0x721b, 5598}, - {0x7228, 5599}, - {0x722a, 3066}, - {0x722c, 5601}, - {0x722d, 5600}, - {0x7230, 5602}, - {0x7232, 5603}, - {0x7235, 2315}, - {0x7236, 3541}, - {0x723a, 3832}, - {0x723b, 5604}, - {0x723c, 5605}, - {0x723d, 2776}, - {0x723e, 2256}, - {0x723f, 5606}, - {0x7240, 5607}, - {0x7246, 5608}, - {0x7247, 3618}, - {0x7248, 3419}, - {0x724b, 5609}, - {0x724c, 3341}, - {0x7252, 3017}, - {0x7256, 0}, - {0x7258, 5610}, - {0x7259, 1383}, - {0x725b, 1671}, - {0x725d, 3794}, - {0x725f, 3778}, - {0x7261, 1332}, - {0x7262, 4058}, - {0x7267, 3712}, - {0x7269, 3578}, - {0x7272, 2651}, - {0x7274, 5611}, - {0x7279, 3227}, - {0x727d, 1879}, - {0x727e, 5612}, - {0x7280, 2116}, - {0x7281, 5614}, - {0x7282, 5613}, - {0x7287, 5615}, - {0x7292, 5616}, - {0x7296, 5617}, - {0x72a0, 1624}, - {0x72a2, 5618}, - {0x72a7, 5619}, - {0x72ac, 1880}, - {0x72af, 3420}, - {0x72b1, 8545}, - {0x72b2, 5621}, - {0x72b6, 2525}, - {0x72b9, 5620}, - {0x72be, 8546}, - {0x72c2, 1712}, - {0x72c3, 5622}, - {0x72c4, 5624}, - {0x72c6, 5623}, - {0x72ce, 5625}, - {0x72d0, 1925}, - {0x72d2, 5626}, - {0x72d7, 1761}, - {0x72d9, 2754}, - {0x72db, 2063}, - {0x72e0, 5628}, - {0x72e1, 5629}, - {0x72e2, 5627}, - {0x72e9, 2329}, - {0x72ec, 3232}, - {0x72ed, 1713}, - {0x72f7, 5631}, - {0x72f8, 2922}, - {0x72f9, 5630}, - {0x72fc, 4059}, - {0x72fd, 3352}, - {0x7305, 0}, - {0x730a, 5634}, - {0x7316, 5636}, - {0x7317, 5633}, - {0x731b, 3808}, - {0x731c, 5635}, - {0x731d, 5637}, - {0x731f, 3980}, - {0x7324, 8547}, - {0x7325, 5641}, - {0x7329, 5640}, - {0x732a, 2996}, - {0x732b, 3299}, - {0x732e, 1881}, - {0x732f, 5639}, - {0x7334, 5638}, - {0x7336, 3867}, - {0x7337, 3868}, - {0x733e, 5642}, - {0x733f, 1296}, - {0x7344, 2056}, - {0x7345, 2224}, - {0x734e, 5643}, - {0x734f, 5644}, - {0x7357, 5646}, - {0x7363, 2381}, - {0x7368, 5648}, - {0x736a, 5647}, - {0x7370, 5649}, - {0x7372, 1451}, - {0x7375, 5651}, - {0x7377, 8549}, - {0x7378, 5650}, - {0x737a, 5653}, - {0x737b, 5652}, - {0x7384, 1904}, - {0x7386, 0}, - {0x7387, 3952}, - {0x7389, 1732}, - {0x738b, 1318}, - {0x7396, 1762}, - {0x739f, 0}, - {0x73a0, 1}, - {0x73a9, 1565}, - {0x73b2, 4016}, - {0x73b3, 5655}, - {0x73bb, 5657}, - {0x73bd, 8550}, - {0x73c0, 5658}, - {0x73c2, 1361}, - {0x73c8, 5654}, - {0x73c9, 8551}, - {0x73ca, 2183}, - {0x73cd, 3037}, - {0x73ce, 5656}, - {0x73d2, 8554}, - {0x73d6, 8552}, - {0x73de, 5661}, - {0x73e0, 2330}, - {0x73e3, 8553}, - {0x73e5, 5659}, - {0x73ea, 1812}, - {0x73ed, 3421}, - {0x73ee, 5660}, - {0x73f1, 5687}, - {0x73f5, 8556}, - {0x73f8, 5666}, - {0x73fe, 1905}, - {0x7403, 1663}, - {0x7405, 5663}, - {0x7406, 3943}, - {0x7407, 8555}, - {0x7409, 3960}, - {0x741b, 0}, - {0x7422, 2902}, - {0x7425, 5665}, - {0x7426, 8557}, - {0x7429, 8559}, - {0x742a, 8558}, - {0x742e, 8560}, - {0x7430, 0}, - {0x7431, 1}, - {0x7432, 5667}, - {0x7433, 3998}, - {0x7434, 1743}, - {0x7435, 3472}, - {0x7436, 3328}, - {0x743a, 5668}, - {0x743f, 5670}, - {0x7441, 5673}, - {0x7455, 5669}, - {0x7459, 5672}, - {0x745a, 1950}, - {0x745b, 1263}, - {0x745c, 5674}, - {0x745e, 2614}, - {0x745f, 5671}, - {0x7460, 4004}, - {0x7462, 8561}, - {0x7463, 5677}, - {0x7464, 7477}, - {0x7469, 5675}, - {0x746a, 5678}, - {0x746f, 5664}, - {0x7470, 5676}, - {0x7473, 2092}, - {0x7476, 5679}, - {0x747e, 5680}, - {0x7483, 3944}, - {0x7486, 0}, - {0x7487, 1}, - {0x7489, 8562}, - {0x748b, 5681}, - {0x749e, 5682}, - {0x749f, 8563}, - {0x74a2, 5662}, - {0x74a7, 5683}, - {0x74b0, 1536}, - {0x74bd, 2257}, - {0x74ca, 5684}, - {0x74cf, 5685}, - {0x74d4, 5686}, - {0x74dc, 1245}, - {0x74e0, 5688}, - {0x74e2, 3501}, - {0x74e3, 5689}, - {0x74e6, 1504}, - {0x74e7, 5690}, - {0x74e9, 5691}, - {0x74ee, 5692}, - {0x74f0, 5694}, - {0x74f1, 5695}, - {0x74f2, 5693}, - {0x74f6, 3525}, - {0x74f7, 5697}, - {0x74f8, 5696}, - {0x7501, 8564}, - {0x7503, 5699}, - {0x7504, 5698}, - {0x7505, 5700}, - {0x750c, 5701}, - {0x750d, 5703}, - {0x750e, 5702}, - {0x7511, 2059}, - {0x7513, 5705}, - {0x7515, 5704}, - {0x7518, 1537}, - {0x751a, 2585}, - {0x751c, 3126}, - {0x751e, 5706}, - {0x751f, 2652}, - {0x7523, 2184}, - {0x7525, 1307}, - {0x7526, 5707}, - {0x7528, 3899}, - {0x752b, 3635}, - {0x752c, 5708}, - {0x752f, 8434}, - {0x7530, 3134}, - {0x7531, 3869}, - {0x7532, 2005}, - {0x7533, 2563}, - {0x7537, 2953}, - {0x7538, 4297}, - {0x753a, 3018}, - {0x753b, 1384}, - {0x753c, 5709}, - {0x7544, 5710}, - {0x7546, 5715}, - {0x7549, 5713}, - {0x754a, 5712}, - {0x754b, 5063}, - {0x754c, 1412}, - {0x754d, 5711}, - {0x754f, 1182}, - {0x7551, 3390}, - {0x7554, 3422}, - {0x7559, 3961}, - {0x755a, 5716}, - {0x755b, 5714}, - {0x755c, 2970}, - {0x755d, 2634}, - {0x7560, 3391}, - {0x7562, 3487}, - {0x7564, 5718}, - {0x7565, 3956}, - {0x7566, 1827}, - {0x7567, 5719}, - {0x7569, 5717}, - {0x756a, 3434}, - {0x756b, 5720}, - {0x756d, 5721}, - {0x756f, 8565}, - {0x7570, 1183}, - {0x7573, 2526}, - {0x7574, 5726}, - {0x7576, 5723}, - {0x7577, 3269}, - {0x7578, 5722}, - {0x757f, 1600}, - {0x7582, 5729}, - {0x7586, 5724}, - {0x7587, 5725}, - {0x7589, 5728}, - {0x758a, 5727}, - {0x758b, 3479}, - {0x758e, 2756}, - {0x758f, 2755}, - {0x7591, 1625}, - {0x7593, 0}, - {0x7594, 5730}, - {0x759a, 5731}, - {0x759d, 5732}, - {0x75a3, 5734}, - {0x75a5, 5733}, - {0x75ab, 1272}, - {0x75b1, 5742}, - {0x75b2, 3452}, - {0x75b3, 5736}, - {0x75b5, 5738}, - {0x75b8, 5740}, - {0x75b9, 2564}, - {0x75bc, 5741}, - {0x75bd, 5739}, - {0x75be, 2284}, - {0x75c2, 5735}, - {0x75c3, 5737}, - {0x75c5, 3508}, - {0x75c7, 2481}, - {0x75ca, 5744}, - {0x75cd, 5743}, - {0x75d2, 5745}, - {0x75d4, 2258}, - {0x75d5, 2079}, - {0x75d8, 3185}, - {0x75d9, 5746}, - {0x75db, 3047}, - {0x75de, 5748}, - {0x75e2, 3945}, - {0x75e3, 5747}, - {0x75e9, 2795}, - {0x75f0, 5753}, - {0x75f2, 5755}, - {0x75f3, 5756}, - {0x75f4, 2962}, - {0x75fa, 5754}, - {0x75fc, 5751}, - {0x75fe, 5749}, - {0x75ff, 5750}, - {0x7601, 5752}, - {0x7609, 5759}, - {0x760b, 5757}, - {0x760d, 5758}, - {0x7616, 0}, - {0x761f, 5760}, - {0x7620, 5762}, - {0x7621, 5763}, - {0x7622, 5764}, - {0x7624, 5765}, - {0x7626, 7725}, - {0x7627, 5761}, - {0x7630, 5767}, - {0x7634, 5766}, - {0x763b, 5768}, - {0x7642, 3981}, - {0x7646, 5771}, - {0x7647, 5769}, - {0x7648, 5770}, - {0x764c, 1566}, - {0x7652, 3850}, - {0x7656, 3610}, - {0x7658, 5773}, - {0x765c, 5772}, - {0x7661, 5774}, - {0x7662, 5775}, - {0x7667, 5779}, - {0x7668, 5776}, - {0x7669, 5777}, - {0x766a, 5778}, - {0x766c, 5780}, - {0x7670, 5781}, - {0x7672, 5782}, - {0x7676, 5783}, - {0x7678, 5784}, - {0x767a, 3395}, - {0x767b, 3146}, - {0x767c, 5785}, - {0x767d, 3368}, - {0x767e, 3494}, - {0x7680, 5786}, - {0x7682, 8566}, - {0x7683, 5787}, - {0x7684, 3108}, - {0x7686, 1413}, - {0x7687, 2006}, - {0x7688, 5788}, - {0x768b, 5789}, - {0x768e, 5790}, - {0x7690, 2167}, - {0x7693, 5792}, - {0x7696, 5791}, - {0x7699, 5793}, - {0x769a, 5794}, - {0x769b, 8569}, - {0x769c, 8567}, - {0x769e, 8568}, - {0x76a5, 0}, - {0x76a6, 8570}, - {0x76ae, 3453}, - {0x76b0, 5795}, - {0x76b4, 5796}, - {0x76b7, 7452}, - {0x76b8, 5797}, - {0x76b9, 5798}, - {0x76ba, 5799}, - {0x76bf, 2172}, - {0x76c2, 5800}, - {0x76c3, 3340}, - {0x76c6, 3725}, - {0x76c8, 1264}, - {0x76ca, 1273}, - {0x76cd, 5801}, - {0x76d2, 5803}, - {0x76d6, 5802}, - {0x76d7, 3178}, - {0x76db, 2653}, - {0x76dc, 5336}, - {0x76de, 5804}, - {0x76df, 3789}, - {0x76e1, 5805}, - {0x76e3, 1538}, - {0x76e4, 3435}, - {0x76e5, 5806}, - {0x76e7, 5807}, - {0x76ea, 5808}, - {0x76ee, 3816}, - {0x76f2, 3809}, - {0x76f4, 3034}, - {0x76f8, 2796}, - {0x76fb, 5810}, - {0x76fe, 2412}, - {0x7701, 2482}, - {0x7704, 5813}, - {0x7707, 5812}, - {0x7708, 5811}, - {0x7709, 3473}, - {0x770b, 1539}, - {0x770c, 1885}, - {0x771b, 5819}, - {0x771e, 5816}, - {0x771f, 2565}, - {0x7720, 3774}, - {0x7724, 5815}, - {0x7725, 5817}, - {0x7726, 5818}, - {0x7729, 5814}, - {0x7737, 5820}, - {0x7738, 5821}, - {0x773a, 3019}, - {0x773c, 1567}, - {0x7740, 2979}, - {0x7746, 8572}, - {0x7747, 5822}, - {0x775a, 5823}, - {0x775b, 5826}, - {0x7760, 0}, - {0x7761, 2605}, - {0x7762, 7877}, - {0x7763, 3228}, - {0x7765, 5827}, - {0x7766, 3713}, - {0x7768, 5824}, - {0x776b, 5825}, - {0x7779, 5830}, - {0x777e, 5829}, - {0x777f, 5828}, - {0x778b, 5832}, - {0x778e, 5831}, - {0x7791, 5833}, - {0x779e, 5835}, - {0x77a0, 5834}, - {0x77a5, 3613}, - {0x77ac, 2400}, - {0x77ad, 3982}, - {0x77b0, 5836}, - {0x77b3, 3215}, - {0x77b6, 5837}, - {0x77b9, 5838}, - {0x77bb, 5842}, - {0x77bc, 5840}, - {0x77bd, 5841}, - {0x77bf, 5839}, - {0x77c7, 5843}, - {0x77cd, 5844}, - {0x77d7, 5845}, - {0x77da, 5846}, - {0x77db, 3779}, - {0x77dc, 5847}, - {0x77e2, 3836}, - {0x77e3, 5848}, - {0x77e5, 2956}, - {0x77e7, 3360}, - {0x77e9, 1763}, - {0x77ed, 2937}, - {0x77ee, 5849}, - {0x77ef, 1714}, - {0x77f3, 2676}, - {0x77fc, 5850}, - {0x7802, 2093}, - {0x780c, 5851}, - {0x7812, 5852}, - {0x7814, 1882}, - {0x7815, 2117}, - {0x7820, 5854}, - {0x7821, 8574}, - {0x7825, 3152}, - {0x7826, 2118}, - {0x7827, 1640}, - {0x782e, 0}, - {0x7832, 3666}, - {0x7834, 3329}, - {0x783a, 3153}, - {0x783f, 2030}, - {0x7845, 5856}, - {0x784e, 8575}, - {0x785d, 2483}, - {0x7864, 8576}, - {0x786b, 3962}, - {0x786c, 2007}, - {0x786f, 1883}, - {0x7872, 3383}, - {0x7874, 5858}, - {0x787a, 8577}, - {0x787c, 5860}, - {0x7881, 1951}, - {0x7886, 5859}, - {0x7887, 3090}, - {0x788c, 5862}, - {0x788d, 1429}, - {0x788e, 5857}, - {0x7891, 3454}, - {0x7893, 1234}, - {0x7895, 2140}, - {0x7897, 4088}, - {0x789a, 5861}, - {0x78a3, 5863}, - {0x78a7, 3611}, - {0x78a9, 2685}, - {0x78aa, 5865}, - {0x78af, 5866}, - {0x78b5, 5864}, - {0x78ba, 1452}, - {0x78bc, 5872}, - {0x78be, 5871}, - {0x78c1, 2259}, - {0x78c5, 5873}, - {0x78c6, 5868}, - {0x78ca, 5874}, - {0x78cb, 5869}, - {0x78d0, 3436}, - {0x78d1, 5867}, - {0x78d4, 5870}, - {0x78da, 5877}, - {0x78e1, 0}, - {0x78e7, 5876}, - {0x78e8, 3727}, - {0x78ec, 5875}, - {0x78ef, 1199}, - {0x78f4, 5879}, - {0x78fd, 5878}, - {0x7901, 2484}, - {0x7907, 5880}, - {0x790e, 2757}, - {0x7911, 5882}, - {0x7912, 5881}, - {0x7919, 5883}, - {0x7926, 5853}, - {0x792a, 5855}, - {0x792b, 5885}, - {0x792c, 5884}, - {0x7930, 8578}, - {0x793a, 2260}, - {0x793c, 4017}, - {0x793e, 2302}, - {0x7940, 5886}, - {0x7941, 1805}, - {0x7947, 1626}, - {0x7948, 1601}, - {0x7949, 2225}, - {0x7950, 3870}, - {0x7953, 5892}, - {0x7955, 5891}, - {0x7956, 2758}, - {0x7957, 5888}, - {0x795a, 5890}, - {0x795c, 0}, - {0x795d, 2389}, - {0x795e, 2566}, - {0x795f, 5889}, - {0x7960, 5887}, - {0x7962, 3296}, - {0x7965, 2485}, - {0x7968, 3502}, - {0x796d, 2119}, - {0x7977, 3186}, - {0x797a, 5893}, - {0x797f, 5894}, - {0x7980, 5916}, - {0x7981, 1744}, - {0x7984, 4067}, - {0x7985, 2743}, - {0x798a, 5895}, - {0x798d, 1362}, - {0x798e, 3091}, - {0x798f, 3569}, - {0x7994, 8582}, - {0x799b, 8584}, - {0x799d, 5896}, - {0x79a6, 1684}, - {0x79a7, 5897}, - {0x79aa, 5899}, - {0x79ae, 5900}, - {0x79b0, 3295}, - {0x79b1, 7758}, - {0x79b3, 5901}, - {0x79b9, 5902}, - {0x79ba, 5903}, - {0x79bd, 1745}, - {0x79be, 1363}, - {0x79bf, 3229}, - {0x79c0, 2354}, - {0x79c1, 2226}, - {0x79c9, 5904}, - {0x79cb, 2355}, - {0x79d1, 1354}, - {0x79d2, 3509}, - {0x79d5, 5905}, - {0x79d8, 3455}, - {0x79df, 2759}, - {0x79e1, 5908}, - {0x79e3, 5909}, - {0x79e4, 3359}, - {0x79e6, 2567}, - {0x79e7, 5906}, - {0x79e9, 2975}, - {0x79ec, 5907}, - {0x79f0, 2486}, - {0x79fb, 1184}, - {0x7a00, 1603}, - {0x7a08, 5910}, - {0x7a0b, 3092}, - {0x7a0d, 5911}, - {0x7a0e, 2667}, - {0x7a14, 3769}, - {0x7a17, 3477}, - {0x7a18, 5912}, - {0x7a19, 5913}, - {0x7a1a, 2963}, - {0x7a1c, 3983}, - {0x7a1f, 5915}, - {0x7a20, 5914}, - {0x7a2e, 2331}, - {0x7a31, 5917}, - {0x7a32, 1204}, - {0x7a37, 5920}, - {0x7a3b, 5918}, - {0x7a3c, 1364}, - {0x7a3d, 1828}, - {0x7a3e, 5919}, - {0x7a3f, 2008}, - {0x7a40, 2052}, - {0x7a42, 3638}, - {0x7a43, 5921}, - {0x7a46, 3714}, - {0x7a49, 5923}, - {0x7a4d, 2677}, - {0x7a4e, 1265}, - {0x7a4f, 1338}, - {0x7a50, 1136}, - {0x7a57, 5922}, - {0x7a61, 5924}, - {0x7a62, 5925}, - {0x7a63, 2527}, - {0x7a69, 5926}, - {0x7a6b, 1453}, - {0x7a70, 5928}, - {0x7a74, 1856}, - {0x7a76, 1664}, - {0x7a79, 5929}, - {0x7a7a, 1773}, - {0x7a7d, 5930}, - {0x7a7f, 2720}, - {0x7a81, 3237}, - {0x7a83, 2692}, - {0x7a84, 2149}, - {0x7a88, 5931}, - {0x7a92, 2976}, - {0x7a93, 2797}, - {0x7a95, 5933}, - {0x7a96, 5935}, - {0x7a97, 5932}, - {0x7a98, 5934}, - {0x7a9f, 1784}, - {0x7aa9, 5936}, - {0x7aaa, 1788}, - {0x7aae, 1665}, - {0x7aaf, 3900}, - {0x7ab0, 5938}, - {0x7ab6, 5939}, - {0x7aba, 1232}, - {0x7abc, 0}, - {0x7abf, 5942}, - {0x7ac3, 1492}, - {0x7ac4, 5941}, - {0x7ac5, 5940}, - {0x7ac7, 5944}, - {0x7ac8, 5937}, - {0x7aca, 5945}, - {0x7acb, 3953}, - {0x7acd, 5946}, - {0x7acf, 5947}, - {0x7ad1, 8585}, - {0x7ad2, 4549}, - {0x7ad3, 5949}, - {0x7ad5, 5948}, - {0x7ad9, 5950}, - {0x7ada, 5951}, - {0x7adc, 3965}, - {0x7add, 5952}, - {0x7adf, 7176}, - {0x7ae0, 2487}, - {0x7ae1, 5953}, - {0x7ae2, 5954}, - {0x7ae3, 2401}, - {0x7ae5, 3216}, - {0x7ae6, 5955}, - {0x7ae7, 8586}, - {0x7aea, 2918}, - {0x7aeb, 8588}, - {0x7aed, 5956}, - {0x7aef, 2938}, - {0x7af0, 5957}, - {0x7af6, 1693}, - {0x7af8, 4214}, - {0x7af9, 2971}, - {0x7afa, 2271}, - {0x7aff, 1540}, - {0x7b02, 5958}, - {0x7b04, 5971}, - {0x7b06, 5961}, - {0x7b08, 1666}, - {0x7b0a, 5960}, - {0x7b0b, 5973}, - {0x7b0f, 5959}, - {0x7b11, 2488}, - {0x7b18, 5963}, - {0x7b19, 5964}, - {0x7b1b, 3109}, - {0x7b1e, 5965}, - {0x7b20, 1468}, - {0x7b25, 2592}, - {0x7b26, 3542}, - {0x7b28, 5967}, - {0x7b2c, 2888}, - {0x7b33, 5962}, - {0x7b35, 5966}, - {0x7b36, 5968}, - {0x7b39, 2155}, - {0x7b45, 5975}, - {0x7b46, 3488}, - {0x7b48, 3386}, - {0x7b49, 3187}, - {0x7b4b, 1746}, - {0x7b4c, 5974}, - {0x7b4d, 5972}, - {0x7b4f, 3401}, - {0x7b50, 5969}, - {0x7b51, 2972}, - {0x7b52, 3189}, - {0x7b54, 3188}, - {0x7b56, 2150}, - {0x7b5d, 5993}, - {0x7b65, 5977}, - {0x7b67, 5979}, - {0x7b6c, 5982}, - {0x7b6e, 5983}, - {0x7b70, 5980}, - {0x7b71, 5981}, - {0x7b74, 5978}, - {0x7b75, 5976}, - {0x7b7a, 5970}, - {0x7b86, 3615}, - {0x7b87, 1365}, - {0x7b8b, 5990}, - {0x7b8d, 5987}, - {0x7b8f, 5992}, - {0x7b92, 5991}, - {0x7b94, 3369}, - {0x7b95, 3763}, - {0x7b97, 2185}, - {0x7b98, 5985}, - {0x7b99, 5994}, - {0x7b9a, 5989}, - {0x7b9c, 5988}, - {0x7b9d, 5984}, - {0x7b9e, 8589}, - {0x7b9f, 5986}, - {0x7ba1, 1541}, - {0x7baa, 2939}, - {0x7bad, 2721}, - {0x7bb1, 3382}, - {0x7bb4, 5999}, - {0x7bb8, 3384}, - {0x7bc0, 2693}, - {0x7bc1, 5996}, - {0x7bc4, 3427}, - {0x7bc6, 6000}, - {0x7bc7, 3619}, - {0x7bc9, 2969}, - {0x7bcb, 5995}, - {0x7bcc, 5997}, - {0x7bcf, 5998}, - {0x7bdd, 6001}, - {0x7be0, 2288}, - {0x7be4, 3230}, - {0x7be5, 6006}, - {0x7be6, 6005}, - {0x7be9, 6002}, - {0x7bed, 4060}, - {0x7bf3, 6011}, - {0x7bf6, 6015}, - {0x7bf7, 6012}, - {0x7c00, 6008}, - {0x7c07, 6009}, - {0x7c0d, 6014}, - {0x7c11, 6003}, - {0x7c12, 4330}, - {0x7c13, 6010}, - {0x7c14, 6004}, - {0x7c17, 6013}, - {0x7c1e, 7739}, - {0x7c1f, 6019}, - {0x7c21, 1542}, - {0x7c23, 6016}, - {0x7c27, 6017}, - {0x7c2a, 6018}, - {0x7c2b, 6021}, - {0x7c37, 6020}, - {0x7c38, 3466}, - {0x7c3d, 6022}, - {0x7c3e, 4036}, - {0x7c3f, 3645}, - {0x7c40, 6027}, - {0x7c43, 6024}, - {0x7c4c, 6023}, - {0x7c4d, 2678}, - {0x7c4f, 6026}, - {0x7c50, 6028}, - {0x7c54, 6025}, - {0x7c56, 6032}, - {0x7c58, 6029}, - {0x7c5f, 6030}, - {0x7c60, 6007}, - {0x7c64, 6031}, - {0x7c65, 6033}, - {0x7c6c, 6034}, - {0x7c73, 3606}, - {0x7c75, 6035}, - {0x7c7e, 3822}, - {0x7c81, 1734}, - {0x7c82, 1791}, - {0x7c83, 6036}, - {0x7c89, 3588}, - {0x7c8b, 2606}, - {0x7c8d, 3772}, - {0x7c90, 6037}, - {0x7c92, 3963}, - {0x7c95, 3370}, - {0x7c97, 2760}, - {0x7c98, 3306}, - {0x7c9b, 2391}, - {0x7c9f, 1156}, - {0x7ca1, 6042}, - {0x7ca2, 6040}, - {0x7ca4, 6038}, - {0x7ca5, 1501}, - {0x7ca7, 2489}, - {0x7ca8, 6043}, - {0x7cab, 6041}, - {0x7cad, 6039}, - {0x7cae, 6047}, - {0x7cb1, 6046}, - {0x7cb2, 6045}, - {0x7cb3, 6044}, - {0x7cb9, 6048}, - {0x7cbd, 6049}, - {0x7cbe, 2654}, - {0x7cc0, 6050}, - {0x7cc2, 6052}, - {0x7cc5, 6051}, - {0x7cc9, 0}, - {0x7cca, 1926}, - {0x7cce, 2746}, - {0x7cd2, 6054}, - {0x7cd6, 3190}, - {0x7cd8, 6053}, - {0x7cdc, 6055}, - {0x7cde, 3589}, - {0x7cdf, 2798}, - {0x7ce0, 2009}, - {0x7ce2, 6056}, - {0x7ce7, 3984}, - {0x7cef, 6058}, - {0x7cf2, 6059}, - {0x7cf4, 6060}, - {0x7cf6, 6061}, - {0x7cf8, 2227}, - {0x7cfa, 6062}, - {0x7cfb, 1829}, - {0x7cfe, 1668}, - {0x7d00, 1604}, - {0x7d02, 6064}, - {0x7d04, 3839}, - {0x7d05, 2010}, - {0x7d06, 6063}, - {0x7d08, 0}, - {0x7d09, 1}, - {0x7d0a, 6067}, - {0x7d0b, 3826}, - {0x7d0d, 3314}, - {0x7d10, 3493}, - {0x7d14, 2413}, - {0x7d15, 6066}, - {0x7d17, 2303}, - {0x7d18, 2011}, - {0x7d19, 2228}, - {0x7d1a, 1667}, - {0x7d1b, 3590}, - {0x7d1c, 6065}, - {0x7d20, 2761}, - {0x7d21, 3696}, - {0x7d22, 2151}, - {0x7d2b, 2229}, - {0x7d2c, 3065}, - {0x7d2e, 6070}, - {0x7d2f, 4007}, - {0x7d30, 2121}, - {0x7d32, 6071}, - {0x7d33, 2568}, - {0x7d35, 6073}, - {0x7d39, 2490}, - {0x7d3a, 2080}, - {0x7d3f, 6072}, - {0x7d42, 2356}, - {0x7d43, 1906}, - {0x7d44, 2762}, - {0x7d45, 6068}, - {0x7d46, 6074}, - {0x7d48, 8591}, - {0x7d4b, 6069}, - {0x7d4c, 1830}, - {0x7d4e, 6077}, - {0x7d4f, 6081}, - {0x7d50, 1857}, - {0x7d56, 6076}, - {0x7d5b, 6085}, - {0x7d5c, 8592}, - {0x7d5e, 2012}, - {0x7d61, 3927}, - {0x7d62, 1152}, - {0x7d63, 6082}, - {0x7d66, 1669}, - {0x7d68, 6079}, - {0x7d6e, 6080}, - {0x7d71, 3191}, - {0x7d72, 6078}, - {0x7d73, 6075}, - {0x7d75, 1414}, - {0x7d76, 2696}, - {0x7d79, 1884}, - {0x7d7d, 6087}, - {0x7d89, 6084}, - {0x7d8c, 0}, - {0x7d8f, 6086}, - {0x7d93, 6083}, - {0x7d99, 1831}, - {0x7d9a, 2835}, - {0x7d9b, 6088}, - {0x7d9c, 2800}, - {0x7d9f, 6101}, - {0x7da0, 8594}, - {0x7da2, 6097}, - {0x7da3, 6091}, - {0x7dab, 6095}, - {0x7dac, 2342}, - {0x7dad, 1185}, - {0x7dae, 6090}, - {0x7daf, 6098}, - {0x7db0, 6102}, - {0x7db1, 2013}, - {0x7db2, 3810}, - {0x7db4, 3058}, - {0x7db5, 6092}, - {0x7db7, 8593}, - {0x7db8, 6100}, - {0x7dba, 6089}, - {0x7dbb, 2940}, - {0x7dbd, 6094}, - {0x7dbe, 1153}, - {0x7dbf, 3798}, - {0x7dc7, 6093}, - {0x7dca, 1747}, - {0x7dcb, 3456}, - {0x7dcf, 2799}, - {0x7dd1, 3992}, - {0x7dd2, 2425}, - {0x7dd5, 6141}, - {0x7dd6, 8595}, - {0x7dd8, 6103}, - {0x7dda, 2722}, - {0x7ddc, 6099}, - {0x7ddd, 6104}, - {0x7dde, 6106}, - {0x7de0, 3093}, - {0x7de1, 6109}, - {0x7de4, 6105}, - {0x7de8, 3620}, - {0x7de9, 1543}, - {0x7dec, 3799}, - {0x7def, 1186}, - {0x7df2, 6108}, - {0x7df4, 4037}, - {0x7dfb, 6107}, - {0x7e01, 1297}, - {0x7e04, 3268}, - {0x7e05, 6110}, - {0x7e09, 6117}, - {0x7e0a, 6111}, - {0x7e0b, 6118}, - {0x7e12, 6114}, - {0x7e1b, 3377}, - {0x7e1e, 2294}, - {0x7e1f, 6116}, - {0x7e21, 6113}, - {0x7e22, 6119}, - {0x7e23, 6112}, - {0x7e26, 2382}, - {0x7e2b, 3667}, - {0x7e2e, 2390}, - {0x7e31, 6115}, - {0x7e32, 6127}, - {0x7e35, 6123}, - {0x7e37, 6126}, - {0x7e39, 6124}, - {0x7e3a, 6128}, - {0x7e3b, 6122}, - {0x7e3d, 6096}, - {0x7e3e, 2679}, - {0x7e41, 3423}, - {0x7e43, 6125}, - {0x7e46, 6120}, - {0x7e4a, 2723}, - {0x7e4b, 1832}, - {0x7e4d, 2357}, - {0x7e52, 8596}, - {0x7e54, 2539}, - {0x7e55, 2744}, - {0x7e56, 6131}, - {0x7e59, 6133}, - {0x7e5a, 6134}, - {0x7e5d, 6130}, - {0x7e5e, 6132}, - {0x7e61, 7697}, - {0x7e66, 6121}, - {0x7e67, 6129}, - {0x7e69, 6137}, - {0x7e6a, 6136}, - {0x7e6b, 7671}, - {0x7e6d, 3752}, - {0x7e70, 1793}, - {0x7e79, 6135}, - {0x7e7b, 6139}, - {0x7e7c, 6138}, - {0x7e7d, 6142}, - {0x7e7f, 6144}, - {0x7e82, 2186}, - {0x7e83, 6140}, - {0x7e88, 6145}, - {0x7e89, 6146}, - {0x7e8a, 8359}, - {0x7e8c, 6147}, - {0x7e8e, 6153}, - {0x7e8f, 3125}, - {0x7e90, 6149}, - {0x7e92, 6148}, - {0x7e93, 6150}, - {0x7e94, 6151}, - {0x7e96, 6152}, - {0x7e9b, 6154}, - {0x7e9c, 6155}, - {0x7f36, 1544}, - {0x7f38, 6156}, - {0x7f3a, 6157}, - {0x7f45, 6158}, - {0x7f47, 8597}, - {0x7f4c, 6159}, - {0x7f4d, 6160}, - {0x7f4e, 6161}, - {0x7f50, 6162}, - {0x7f51, 6163}, - {0x7f53, 0}, - {0x7f54, 6165}, - {0x7f55, 6164}, - {0x7f58, 6166}, - {0x7f5f, 6167}, - {0x7f60, 6168}, - {0x7f67, 6171}, - {0x7f68, 6169}, - {0x7f69, 6170}, - {0x7f6a, 2129}, - {0x7f6b, 1833}, - {0x7f6e, 2964}, - {0x7f70, 3399}, - {0x7f72, 2426}, - {0x7f75, 3331}, - {0x7f77, 3457}, - {0x7f78, 6172}, - {0x7f79, 4918}, - {0x7f82, 6173}, - {0x7f83, 6175}, - {0x7f85, 3919}, - {0x7f86, 6174}, - {0x7f87, 6177}, - {0x7f88, 6176}, - {0x7f8a, 3901}, - {0x7f8c, 6178}, - {0x7f8e, 3474}, - {0x7f94, 6179}, - {0x7f9a, 6182}, - {0x7f9d, 6181}, - {0x7f9e, 6180}, - {0x7fa1, 8598}, - {0x7fa3, 6183}, - {0x7fa4, 1800}, - {0x7fa8, 2724}, - {0x7fa9, 1627}, - {0x7fae, 6187}, - {0x7faf, 6184}, - {0x7fb2, 6185}, - {0x7fb6, 6188}, - {0x7fb8, 6189}, - {0x7fb9, 6186}, - {0x7fbd, 1227}, - {0x7fc1, 1319}, - {0x7fc5, 6191}, - {0x7fc6, 6192}, - {0x7fca, 6193}, - {0x7fcc, 3916}, - {0x7fd2, 2358}, - {0x7fd4, 6195}, - {0x7fd5, 6194}, - {0x7fe0, 2607}, - {0x7fe1, 6196}, - {0x7fe6, 6197}, - {0x7fe9, 6198}, - {0x7feb, 1569}, - {0x7fef, 0}, - {0x7ff0, 1545}, - {0x7ff3, 6199}, - {0x7ff9, 6200}, - {0x7ffb, 3723}, - {0x7ffc, 3917}, - {0x8000, 3902}, - {0x8001, 4061}, - {0x8003, 2015}, - {0x8004, 6203}, - {0x8005, 2304}, - {0x8006, 6202}, - {0x800b, 6204}, - {0x800c, 2261}, - {0x8010, 2865}, - {0x8012, 6205}, - {0x8015, 2014}, - {0x8017, 3811}, - {0x8018, 6206}, - {0x8019, 6207}, - {0x801c, 6208}, - {0x8021, 6209}, - {0x8028, 6210}, - {0x8033, 2262}, - {0x8036, 3833}, - {0x803b, 6212}, - {0x803d, 2941}, - {0x803f, 6211}, - {0x8046, 6214}, - {0x804a, 6213}, - {0x8052, 6215}, - {0x8056, 2655}, - {0x8058, 6216}, - {0x805a, 6217}, - {0x805e, 3593}, - {0x805f, 6218}, - {0x8061, 2801}, - {0x8062, 6219}, - {0x8068, 6220}, - {0x806f, 4038}, - {0x8070, 6223}, - {0x8072, 6222}, - {0x8073, 6221}, - {0x8074, 3020}, - {0x8076, 6224}, - {0x8077, 2540}, - {0x8079, 6225}, - {0x807d, 6226}, - {0x807e, 4062}, - {0x807f, 6227}, - {0x8084, 6228}, - {0x8085, 6230}, - {0x8086, 6229}, - {0x8087, 3385}, - {0x8089, 3281}, - {0x808b, 4068}, - {0x808c, 3389}, - {0x8093, 6232}, - {0x8096, 2491}, - {0x8098, 3484}, - {0x809a, 6233}, - {0x809b, 6231}, - {0x809d, 1546}, - {0x80a1, 1928}, - {0x80a2, 2230}, - {0x80a5, 3458}, - {0x80a9, 1886}, - {0x80aa, 3697}, - {0x80ac, 6236}, - {0x80ad, 6234}, - {0x80af, 2016}, - {0x80b1, 2017}, - {0x80b2, 1197}, - {0x80b4, 2136}, - {0x80ba, 3343}, - {0x80c3, 1187}, - {0x80c4, 6241}, - {0x80c6, 2942}, - {0x80cc, 3342}, - {0x80ce, 2875}, - {0x80d6, 6243}, - {0x80d8, 0}, - {0x80d9, 6239}, - {0x80da, 6242}, - {0x80db, 6237}, - {0x80dd, 6240}, - {0x80de, 3668}, - {0x80e1, 1929}, - {0x80e4, 1217}, - {0x80e5, 6238}, - {0x80ef, 6245}, - {0x80f1, 6246}, - {0x80f4, 3217}, - {0x80f8, 1715}, - {0x80fc, 6257}, - {0x80fd, 3315}, - {0x8102, 2231}, - {0x8105, 1716}, - {0x8106, 2668}, - {0x8107, 4076}, - {0x8108, 3770}, - {0x8109, 6244}, - {0x810a, 2680}, - {0x811a, 1645}, - {0x811b, 6247}, - {0x8123, 6249}, - {0x8129, 6248}, - {0x812f, 6250}, - {0x8131, 2916}, - {0x8133, 3316}, - {0x8139, 3021}, - {0x813e, 6254}, - {0x8146, 6253}, - {0x814b, 6251}, - {0x814e, 2587}, - {0x8150, 3543}, - {0x8151, 6256}, - {0x8153, 6255}, - {0x8154, 2018}, - {0x8155, 4089}, - {0x815f, 6272}, - {0x8165, 6260}, - {0x8166, 6261}, - {0x816b, 2332}, - {0x816e, 6259}, - {0x8170, 2058}, - {0x8171, 6258}, - {0x8174, 6262}, - {0x8178, 3022}, - {0x8179, 3570}, - {0x817a, 2725}, - {0x817f, 2876}, - {0x8180, 6266}, - {0x8182, 6267}, - {0x8183, 6263}, - {0x8188, 6264}, - {0x818a, 6265}, - {0x818f, 2019}, - {0x8193, 6273}, - {0x8195, 6269}, - {0x819a, 3544}, - {0x819c, 3738}, - {0x819d, 3482}, - {0x81a0, 6268}, - {0x81a3, 6271}, - {0x81a4, 6270}, - {0x81a8, 3698}, - {0x81a9, 6274}, - {0x81b0, 6275}, - {0x81b3, 2745}, - {0x81b5, 6276}, - {0x81b8, 6278}, - {0x81ba, 6282}, - {0x81bd, 6279}, - {0x81be, 6277}, - {0x81bf, 3317}, - {0x81c0, 6280}, - {0x81c2, 6281}, - {0x81c6, 1330}, - {0x81c8, 6288}, - {0x81c9, 6283}, - {0x81cd, 6284}, - {0x81d1, 6285}, - {0x81d3, 2817}, - {0x81d8, 6287}, - {0x81d9, 6286}, - {0x81da, 6289}, - {0x81df, 6290}, - {0x81e0, 6291}, - {0x81e3, 2569}, - {0x81e5, 1385}, - {0x81e7, 6292}, - {0x81e8, 3999}, - {0x81ea, 2263}, - {0x81ed, 2359}, - {0x81f3, 2232}, - {0x81f4, 2965}, - {0x81fa, 6293}, - {0x81fb, 6294}, - {0x81fc, 1235}, - {0x81fe, 6295}, - {0x8201, 6296}, - {0x8202, 6297}, - {0x8205, 6298}, - {0x8207, 6299}, - {0x8208, 1717}, - {0x8209, 5039}, - {0x820a, 6300}, - {0x820c, 2697}, - {0x820d, 6301}, - {0x820e, 2295}, - {0x8210, 6302}, - {0x8212, 4105}, - {0x8216, 6303}, - {0x8217, 3630}, - {0x8218, 1560}, - {0x821b, 2726}, - {0x821c, 2402}, - {0x821e, 3555}, - {0x821f, 2360}, - {0x8229, 6304}, - {0x822a, 2020}, - {0x822b, 6305}, - {0x822c, 3424}, - {0x822e, 6319}, - {0x8233, 6307}, - {0x8235, 2857}, - {0x8236, 3371}, - {0x8237, 1907}, - {0x8238, 6306}, - {0x8239, 2727}, - {0x8240, 6308}, - {0x8247, 3094}, - {0x8258, 6310}, - {0x8259, 6309}, - {0x825a, 6312}, - {0x825d, 6311}, - {0x825f, 6313}, - {0x8262, 6315}, - {0x8264, 6314}, - {0x8266, 1547}, - {0x8268, 6316}, - {0x826a, 6317}, - {0x826b, 6318}, - {0x826e, 2081}, - {0x826f, 3985}, - {0x8271, 6320}, - {0x8272, 2541}, - {0x8276, 1298}, - {0x8277, 6321}, - {0x8278, 6322}, - {0x827e, 6323}, - {0x828b, 1206}, - {0x828d, 6324}, - {0x8292, 6325}, - {0x8299, 3545}, - {0x829d, 2291}, - {0x829f, 6327}, - {0x82a5, 1415}, - {0x82a6, 1142}, - {0x82ab, 6326}, - {0x82ac, 6329}, - {0x82ad, 3332}, - {0x82af, 2570}, - {0x82b1, 1366}, - {0x82b3, 3669}, - {0x82b8, 1843}, - {0x82b9, 1748}, - {0x82bb, 6328}, - {0x82bd, 1386}, - {0x82c5, 1503}, - {0x82d1, 1299}, - {0x82d2, 6333}, - {0x82d3, 4018}, - {0x82d4, 2877}, - {0x82d7, 3510}, - {0x82d9, 6345}, - {0x82db, 1367}, - {0x82dc, 6343}, - {0x82de, 6341}, - {0x82df, 6332}, - {0x82e1, 6330}, - {0x82e3, 6331}, - {0x82e5, 2319}, - {0x82e6, 1764}, - {0x82e7, 2997}, - {0x82eb, 3241}, - {0x82f1, 1267}, - {0x82f3, 6335}, - {0x82f4, 6334}, - {0x82f9, 6340}, - {0x82fa, 6336}, - {0x82fb, 6339}, - {0x8301, 8600}, - {0x8302, 3804}, - {0x8303, 6338}, - {0x8304, 1368}, - {0x8305, 1499}, - {0x8306, 6342}, - {0x8309, 6344}, - {0x830e, 1834}, - {0x8316, 6348}, - {0x8317, 6357}, - {0x8318, 6358}, - {0x831c, 1135}, - {0x8323, 6365}, - {0x8328, 1205}, - {0x832b, 6356}, - {0x832f, 6355}, - {0x8331, 6350}, - {0x8332, 6349}, - {0x8334, 6347}, - {0x8335, 6346}, - {0x8336, 2977}, - {0x8338, 2907}, - {0x8339, 6352}, - {0x8340, 6351}, - {0x8345, 6354}, - {0x8349, 2802}, - {0x834a, 1835}, - {0x834f, 1251}, - {0x8350, 6353}, - {0x8352, 2021}, - {0x8358, 2803}, - {0x8362, 8601}, - {0x8373, 6371}, - {0x8375, 6372}, - {0x8377, 1369}, - {0x837b, 1326}, - {0x837c, 6369}, - {0x837f, 8602}, - {0x8385, 6359}, - {0x8387, 6367}, - {0x8389, 6374}, - {0x838a, 6368}, - {0x838e, 6366}, - {0x8393, 6337}, - {0x8396, 6364}, - {0x839a, 6360}, - {0x839e, 1548}, - {0x839f, 6362}, - {0x83a0, 6373}, - {0x83a2, 6363}, - {0x83a8, 6375}, - {0x83aa, 6361}, - {0x83ab, 3378}, - {0x83b1, 3923}, - {0x83b5, 6370}, - {0x83bd, 6392}, - {0x83c0, 0}, - {0x83c1, 6384}, - {0x83c5, 2625}, - {0x83c7, 8603}, - {0x83ca, 1632}, - {0x83cc, 1749}, - {0x83ce, 6379}, - {0x83d3, 1371}, - {0x83d6, 2492}, - {0x83d8, 6382}, - {0x83dc, 2122}, - {0x83df, 3147}, - {0x83e0, 6387}, - {0x83e9, 3646}, - {0x83eb, 6378}, - {0x83ef, 1370}, - {0x83f0, 1930}, - {0x83f1, 3483}, - {0x83f2, 6388}, - {0x83f4, 6376}, - {0x83f6, 8604}, - {0x83f7, 6385}, - {0x83fb, 6395}, - {0x83fd, 6380}, - {0x8403, 6381}, - {0x8404, 3218}, - {0x8407, 6386}, - {0x840a, 7807}, - {0x840b, 6383}, - {0x840c, 3670}, - {0x840d, 6389}, - {0x840e, 1188}, - {0x8413, 6377}, - {0x8420, 6391}, - {0x8422, 6390}, - {0x8429, 3361}, - {0x842a, 6397}, - {0x842c, 6408}, - {0x8431, 1500}, - {0x8435, 6411}, - {0x8438, 6393}, - {0x843c, 6398}, - {0x843d, 3928}, - {0x8446, 6407}, - {0x8448, 8605}, - {0x8449, 3903}, - {0x844e, 3954}, - {0x8457, 2998}, - {0x845b, 1481}, - {0x8461, 3556}, - {0x8462, 6413}, - {0x8463, 3193}, - {0x8466, 1141}, - {0x8469, 6406}, - {0x846b, 6402}, - {0x846c, 2804}, - {0x846d, 6396}, - {0x846e, 6404}, - {0x846f, 6409}, - {0x8471, 3298}, - {0x8475, 1134}, - {0x8477, 6401}, - {0x8479, 6410}, - {0x847a, 3562}, - {0x8482, 6405}, - {0x8484, 6400}, - {0x848b, 2493}, - {0x8490, 2361}, - {0x8494, 2264}, - {0x8499, 3812}, - {0x849c, 3513}, - {0x849f, 6416}, - {0x84a1, 6425}, - {0x84ad, 6403}, - {0x84b2, 1493}, - {0x84b4, 8606}, - {0x84b8, 2528}, - {0x84b9, 6414}, - {0x84bb, 6419}, - {0x84bc, 2805}, - {0x84bf, 6415}, - {0x84c1, 6422}, - {0x84c4, 2973}, - {0x84c6, 6423}, - {0x84c9, 3904}, - {0x84ca, 6412}, - {0x84cb, 1430}, - {0x84cd, 6418}, - {0x84d0, 6421}, - {0x84d1, 3768}, - {0x84d6, 6424}, - {0x84d9, 6417}, - {0x84da, 6420}, - {0x84dc, 8363}, - {0x84ec, 3671}, - {0x84ee, 4039}, - {0x84f4, 6428}, - {0x84fc, 6435}, - {0x84ff, 6427}, - {0x8500, 2287}, - {0x8506, 6394}, - {0x8511, 3614}, - {0x8513, 3758}, - {0x8514, 6434}, - {0x8515, 6433}, - {0x8517, 6429}, - {0x8518, 6430}, - {0x851a, 1240}, - {0x851f, 6432}, - {0x8521, 6426}, - {0x8523, 7706}, - {0x8526, 3057}, - {0x852c, 6431}, - {0x852d, 1218}, - {0x8535, 2818}, - {0x853d, 3603}, - {0x853e, 7861}, - {0x8540, 6436}, - {0x8541, 6440}, - {0x8543, 3437}, - {0x8548, 6439}, - {0x8549, 2494}, - {0x854a, 2293}, - {0x854b, 6442}, - {0x854e, 1718}, - {0x8553, 8607}, - {0x8555, 6443}, - {0x8557, 3563}, - {0x8558, 6438}, - {0x8559, 8608}, - {0x855a, 6399}, - {0x8563, 6437}, - {0x8568, 4085}, - {0x8569, 3194}, - {0x856a, 3557}, - {0x856b, 8609}, - {0x856d, 6450}, - {0x8577, 6456}, - {0x857e, 6457}, - {0x8580, 6444}, - {0x8584, 3372}, - {0x8587, 6454}, - {0x8588, 6446}, - {0x858a, 6448}, - {0x8590, 6458}, - {0x8591, 6447}, - {0x8594, 6451}, - {0x8597, 1300}, - {0x8599, 3261}, - {0x859b, 6452}, - {0x859c, 6455}, - {0x85a4, 6445}, - {0x85a6, 2728}, - {0x85a8, 6449}, - {0x85a9, 2165}, - {0x85aa, 2571}, - {0x85ab, 1798}, - {0x85ac, 3840}, - {0x85ae, 3845}, - {0x85af, 2428}, - {0x85b0, 8611}, - {0x85b9, 6462}, - {0x85ba, 6460}, - {0x85c1, 4084}, - {0x85c9, 6459}, - {0x85cd, 3935}, - {0x85cf, 6461}, - {0x85d0, 6463}, - {0x85d5, 6464}, - {0x85dc, 6467}, - {0x85dd, 6465}, - {0x85e4, 3195}, - {0x85e5, 6466}, - {0x85e9, 3425}, - {0x85ea, 6453}, - {0x85f7, 2429}, - {0x85f9, 6468}, - {0x85fa, 6473}, - {0x85fb, 2806}, - {0x85fe, 6472}, - {0x8602, 6441}, - {0x8606, 6474}, - {0x8607, 2763}, - {0x860a, 6469}, - {0x860b, 6471}, - {0x8613, 6470}, - {0x8616, 5328}, - {0x8617, 5313}, - {0x861a, 6476}, - {0x8622, 6475}, - {0x862d, 3936}, - {0x862f, 5809}, - {0x8630, 6477}, - {0x863f, 6478}, - {0x864d, 6479}, - {0x864e, 1931}, - {0x8650, 1646}, - {0x8654, 6481}, - {0x8655, 4244}, - {0x865a, 1679}, - {0x865c, 3970}, - {0x865e, 1771}, - {0x865f, 6482}, - {0x8667, 6483}, - {0x866b, 2988}, - {0x8671, 6484}, - {0x8679, 3282}, - {0x867b, 1150}, - {0x868a, 1379}, - {0x868b, 6489}, - {0x868c, 6490}, - {0x8693, 6485}, - {0x8695, 2187}, - {0x86a3, 6486}, - {0x86a4, 3320}, - {0x86a8, 0}, - {0x86a9, 6487}, - {0x86aa, 6488}, - {0x86ab, 6498}, - {0x86af, 6492}, - {0x86b0, 6495}, - {0x86b6, 6491}, - {0x86c4, 6493}, - {0x86c6, 6494}, - {0x86c7, 2308}, - {0x86c9, 6496}, - {0x86cb, 2943}, - {0x86cd, 1836}, - {0x86ce, 1440}, - {0x86d4, 6499}, - {0x86d9, 1437}, - {0x86db, 6504}, - {0x86de, 6500}, - {0x86df, 6503}, - {0x86e4, 3406}, - {0x86e9, 6501}, - {0x86ec, 6502}, - {0x86ed, 3514}, - {0x86ee, 3438}, - {0x86ef, 6505}, - {0x86f8, 2909}, - {0x86f9, 6515}, - {0x86fb, 6511}, - {0x86fe, 1387}, - {0x8700, 6509}, - {0x8702, 3672}, - {0x8703, 6510}, - {0x8706, 6507}, - {0x8708, 6508}, - {0x8709, 6513}, - {0x870a, 6516}, - {0x870d, 6514}, - {0x8711, 6512}, - {0x8712, 6506}, - {0x8718, 2966}, - {0x871a, 6523}, - {0x871c, 3766}, - {0x8725, 6521}, - {0x8729, 6522}, - {0x8734, 6517}, - {0x8737, 6519}, - {0x873b, 6520}, - {0x873f, 6518}, - {0x8749, 2698}, - {0x874b, 4063}, - {0x874c, 6527}, - {0x874e, 6528}, - {0x8753, 6534}, - {0x8755, 2544}, - {0x8757, 6530}, - {0x8759, 6533}, - {0x875f, 6525}, - {0x8760, 6524}, - {0x8763, 6535}, - {0x8766, 1372}, - {0x8768, 6531}, - {0x876a, 6536}, - {0x876e, 6532}, - {0x8774, 6529}, - {0x8776, 3023}, - {0x8778, 6526}, - {0x877f, 3358}, - {0x8782, 6540}, - {0x878d, 3877}, - {0x879f, 6539}, - {0x87a2, 6538}, - {0x87ab, 6547}, - {0x87ad, 0}, - {0x87af, 6541}, - {0x87b3, 6549}, - {0x87ba, 3920}, - {0x87bb, 6552}, - {0x87bd, 6543}, - {0x87c0, 6544}, - {0x87c4, 6548}, - {0x87c6, 6551}, - {0x87c7, 6550}, - {0x87cb, 6542}, - {0x87d0, 6545}, - {0x87d2, 6562}, - {0x87e0, 6555}, - {0x87ec, 7715}, - {0x87ef, 6553}, - {0x87f2, 6554}, - {0x87f6, 6559}, - {0x87f7, 6560}, - {0x87f9, 1416}, - {0x87fb, 1628}, - {0x87fe, 6558}, - {0x8805, 6537}, - {0x8807, 8614}, - {0x880d, 6557}, - {0x880e, 6561}, - {0x880f, 6556}, - {0x8811, 6563}, - {0x8815, 6565}, - {0x8816, 6564}, - {0x881f, 7813}, - {0x8821, 6567}, - {0x8822, 6566}, - {0x8823, 6497}, - {0x8827, 6571}, - {0x8831, 6568}, - {0x8836, 6569}, - {0x8839, 6570}, - {0x883b, 6572}, - {0x8840, 1858}, - {0x8842, 6574}, - {0x8844, 6573}, - {0x8846, 2362}, - {0x884c, 2022}, - {0x884d, 5412}, - {0x8852, 6575}, - {0x8853, 2395}, - {0x8857, 1431}, - {0x8859, 6576}, - {0x885b, 1268}, - {0x885d, 2495}, - {0x885e, 6577}, - {0x8861, 2023}, - {0x8862, 6578}, - {0x8863, 1189}, - {0x8868, 3503}, - {0x886b, 6579}, - {0x8870, 2608}, - {0x8872, 6586}, - {0x8875, 6583}, - {0x8877, 2989}, - {0x887d, 6584}, - {0x887e, 6581}, - {0x887f, 1750}, - {0x8881, 6580}, - {0x8882, 6587}, - {0x8888, 1804}, - {0x888b, 2878}, - {0x888d, 6593}, - {0x8892, 6589}, - {0x8896, 2837}, - {0x8897, 6588}, - {0x8899, 6591}, - {0x889e, 6582}, - {0x88a2, 6592}, - {0x88a4, 6594}, - {0x88ab, 3459}, - {0x88ae, 6590}, - {0x88b0, 6595}, - {0x88b1, 6597}, - {0x88b4, 1927}, - {0x88b5, 6585}, - {0x88b7, 1157}, - {0x88be, 0}, - {0x88bf, 6596}, - {0x88c1, 2123}, - {0x88c2, 4030}, - {0x88c3, 6598}, - {0x88c4, 6599}, - {0x88c5, 2807}, - {0x88cf, 3946}, - {0x88d4, 6600}, - {0x88d5, 3871}, - {0x88d8, 6601}, - {0x88d9, 6602}, - {0x88dc, 3636}, - {0x88dd, 6603}, - {0x88df, 2096}, - {0x88e1, 3947}, - {0x88e8, 6608}, - {0x88f1, 0}, - {0x88f2, 6609}, - {0x88f3, 2496}, - {0x88f4, 6607}, - {0x88f5, 8615}, - {0x88f8, 3921}, - {0x88f9, 6604}, - {0x88fc, 6606}, - {0x88fd, 2657}, - {0x88fe, 2628}, - {0x8902, 6605}, - {0x8904, 6610}, - {0x8907, 3571}, - {0x890a, 6612}, - {0x890c, 6611}, - {0x8910, 1482}, - {0x8912, 3673}, - {0x8913, 6613}, - {0x8919, 0}, - {0x891a, 1}, - {0x891c, 8360}, - {0x891d, 6625}, - {0x891e, 6615}, - {0x8925, 6616}, - {0x892a, 6617}, - {0x892b, 6618}, - {0x8936, 6622}, - {0x8938, 6623}, - {0x893b, 6621}, - {0x8941, 6619}, - {0x8943, 6614}, - {0x8944, 6620}, - {0x894c, 6624}, - {0x894d, 7120}, - {0x8956, 1320}, - {0x895e, 6627}, - {0x895f, 1751}, - {0x8960, 6626}, - {0x8964, 6629}, - {0x8966, 6628}, - {0x896a, 6631}, - {0x896d, 6630}, - {0x896f, 6632}, - {0x8972, 2363}, - {0x8974, 6633}, - {0x8977, 6634}, - {0x897e, 6635}, - {0x897f, 2658}, - {0x8981, 3905}, - {0x8983, 6636}, - {0x8986, 3572}, - {0x8987, 3324}, - {0x8988, 6637}, - {0x898a, 6638}, - {0x898b, 1887}, - {0x898f, 1606}, - {0x8993, 6639}, - {0x8996, 2233}, - {0x8997, 3319}, - {0x8998, 6640}, - {0x899a, 1454}, - {0x89a1, 6641}, - {0x89a6, 6643}, - {0x89a7, 3937}, - {0x89a9, 6642}, - {0x89aa, 2572}, - {0x89ac, 6644}, - {0x89af, 6645}, - {0x89b2, 6646}, - {0x89b3, 1549}, - {0x89ba, 6647}, - {0x89bd, 6648}, - {0x89bf, 6649}, - {0x89c0, 6650}, - {0x89d2, 1455}, - {0x89da, 6651}, - {0x89dc, 6652}, - {0x89dd, 6653}, - {0x89e3, 1394}, - {0x89e6, 2542}, - {0x89e7, 6654}, - {0x89f4, 6655}, - {0x89f8, 6656}, - {0x8a00, 1908}, - {0x8a02, 3095}, - {0x8a03, 6657}, - {0x8a08, 1837}, - {0x8a0a, 2588}, - {0x8a0c, 6660}, - {0x8a0e, 3196}, - {0x8a10, 6659}, - {0x8a12, 8616}, - {0x8a13, 1799}, - {0x8a16, 6658}, - {0x8a17, 2903}, - {0x8a18, 1607}, - {0x8a1b, 6661}, - {0x8a1d, 6662}, - {0x8a1f, 2497}, - {0x8a23, 1859}, - {0x8a25, 6663}, - {0x8a2a, 3674}, - {0x8a2d, 2691}, - {0x8a31, 1680}, - {0x8a33, 3841}, - {0x8a34, 2764}, - {0x8a36, 6664}, - {0x8a37, 8617}, - {0x8a3a, 2573}, - {0x8a3b, 2990}, - {0x8a3c, 2498}, - {0x8a41, 6665}, - {0x8a46, 6668}, - {0x8a48, 6669}, - {0x8a50, 2094}, - {0x8a51, 2850}, - {0x8a52, 6667}, - {0x8a54, 2499}, - {0x8a55, 3504}, - {0x8a5b, 6666}, - {0x8a5e, 2234}, - {0x8a60, 1269}, - {0x8a62, 6673}, - {0x8a63, 1838}, - {0x8a66, 2236}, - {0x8a69, 2235}, - {0x8a6b, 4083}, - {0x8a6c, 6672}, - {0x8a6d, 6671}, - {0x8a6e, 2729}, - {0x8a70, 1639}, - {0x8a71, 4073}, - {0x8a72, 1432}, - {0x8a73, 2500}, - {0x8a79, 8618}, - {0x8a7c, 6670}, - {0x8a82, 6675}, - {0x8a84, 6676}, - {0x8a85, 6674}, - {0x8a87, 1932}, - {0x8a89, 3882}, - {0x8a8c, 2237}, - {0x8a8d, 3293}, - {0x8a91, 6679}, - {0x8a93, 2660}, - {0x8a95, 2944}, - {0x8a98, 3872}, - {0x8a9a, 6682}, - {0x8a9e, 1952}, - {0x8aa0, 2659}, - {0x8aa1, 6678}, - {0x8aa3, 6683}, - {0x8aa4, 1953}, - {0x8aa5, 6680}, - {0x8aa6, 6681}, - {0x8aa7, 8619}, - {0x8aa8, 6677}, - {0x8aac, 2694}, - {0x8aad, 3233}, - {0x8ab0, 2925}, - {0x8ab2, 1373}, - {0x8ab9, 3460}, - {0x8abc, 1629}, - {0x8abe, 8620}, - {0x8abf, 3024}, - {0x8ac2, 6686}, - {0x8ac4, 6684}, - {0x8ac7, 2954}, - {0x8acb, 2661}, - {0x8acc, 1550}, - {0x8acd, 6685}, - {0x8acf, 2593}, - {0x8ad2, 3986}, - {0x8ad6, 4070}, - {0x8ada, 6687}, - {0x8adb, 6698}, - {0x8adc, 3025}, - {0x8ade, 6697}, - {0x8adf, 8621}, - {0x8ae0, 6694}, - {0x8ae1, 6702}, - {0x8ae2, 6695}, - {0x8ae4, 6691}, - {0x8ae6, 3096}, - {0x8ae7, 6690}, - {0x8aeb, 6688}, - {0x8aed, 3851}, - {0x8aee, 2238}, - {0x8af1, 6692}, - {0x8af3, 6689}, - {0x8af6, 8623}, - {0x8af7, 6696}, - {0x8af8, 2430}, - {0x8afa, 1909}, - {0x8afe, 2906}, - {0x8b00, 3699}, - {0x8b01, 1276}, - {0x8b02, 1190}, - {0x8b04, 3197}, - {0x8b07, 6700}, - {0x8b0c, 6699}, - {0x8b0e, 3262}, - {0x8b10, 6704}, - {0x8b14, 6693}, - {0x8b16, 6703}, - {0x8b17, 6705}, - {0x8b19, 1888}, - {0x8b1a, 6701}, - {0x8b1b, 2024}, - {0x8b1d, 2305}, - {0x8b20, 6706}, - {0x8b21, 3906}, - {0x8b26, 6709}, - {0x8b28, 6712}, - {0x8b2b, 6710}, - {0x8b2c, 3495}, - {0x8b33, 6707}, - {0x8b39, 1752}, - {0x8b3e, 6711}, - {0x8b41, 6713}, - {0x8b44, 0}, - {0x8b49, 6717}, - {0x8b4c, 6714}, - {0x8b4e, 6716}, - {0x8b4f, 6715}, - {0x8b53, 8624}, - {0x8b56, 6718}, - {0x8b58, 2269}, - {0x8b5a, 6720}, - {0x8b5b, 6719}, - {0x8b5c, 3546}, - {0x8b5f, 6722}, - {0x8b66, 1839}, - {0x8b6b, 6721}, - {0x8b6c, 6723}, - {0x8b6f, 6724}, - {0x8b70, 1630}, - {0x8b71, 6190}, - {0x8b72, 2529}, - {0x8b74, 6725}, - {0x8b77, 1954}, - {0x8b7d, 6726}, - {0x8b7f, 8625}, - {0x8b80, 6727}, - {0x8b83, 2188}, - {0x8b8a, 5075}, - {0x8b8c, 6728}, - {0x8b8e, 6729}, - {0x8b90, 2364}, - {0x8b92, 6730}, - {0x8b93, 6731}, - {0x8b96, 6732}, - {0x8b99, 6733}, - {0x8b9a, 6734}, - {0x8c37, 2921}, - {0x8c3a, 6735}, - {0x8c3f, 6737}, - {0x8c41, 6736}, - {0x8c46, 3198}, - {0x8c48, 6738}, - {0x8c4a, 3675}, - {0x8c4c, 6739}, - {0x8c4e, 6740}, - {0x8c50, 6741}, - {0x8c55, 6742}, - {0x8c5a, 3250}, - {0x8c61, 2501}, - {0x8c62, 6743}, - {0x8c6a, 2045}, - {0x8c6b, 4103}, - {0x8c6c, 6744}, - {0x8c78, 6745}, - {0x8c79, 3505}, - {0x8c7a, 6746}, - {0x8c7c, 6754}, - {0x8c82, 6747}, - {0x8c85, 6749}, - {0x8c89, 6748}, - {0x8c8a, 6750}, - {0x8c8c, 3700}, - {0x8c8d, 6751}, - {0x8c8e, 6752}, - {0x8c94, 6753}, - {0x8c98, 6755}, - {0x8c9d, 1419}, - {0x8c9e, 3075}, - {0x8ca0, 3547}, - {0x8ca1, 2130}, - {0x8ca2, 2025}, - {0x8ca7, 3521}, - {0x8ca8, 1375}, - {0x8ca9, 3426}, - {0x8caa, 6758}, - {0x8cab, 1551}, - {0x8cac, 2681}, - {0x8cad, 6757}, - {0x8cae, 6762}, - {0x8caf, 2999}, - {0x8cb0, 3823}, - {0x8cb2, 6760}, - {0x8cb3, 6761}, - {0x8cb4, 1608}, - {0x8cb6, 6763}, - {0x8cb7, 3353}, - {0x8cb8, 2879}, - {0x8cbb, 3461}, - {0x8cbc, 3127}, - {0x8cbd, 6759}, - {0x8cbf, 3701}, - {0x8cc0, 1388}, - {0x8cc1, 6765}, - {0x8cc2, 4046}, - {0x8cc3, 3038}, - {0x8cc4, 4075}, - {0x8cc7, 2239}, - {0x8cc8, 6764}, - {0x8cca, 2833}, - {0x8ccd, 6781}, - {0x8cce, 2730}, - {0x8cd1, 3280}, - {0x8cd3, 3522}, - {0x8cda, 6768}, - {0x8cdb, 2189}, - {0x8cdc, 2240}, - {0x8cde, 2502}, - {0x8ce0, 3355}, - {0x8ce2, 1889}, - {0x8ce3, 6767}, - {0x8ce4, 6766}, - {0x8ce6, 3548}, - {0x8cea, 2285}, - {0x8ced, 3148}, - {0x8cf0, 8626}, - {0x8cf4, 8627}, - {0x8cfa, 6770}, - {0x8cfb, 6771}, - {0x8cfc, 2026}, - {0x8cfd, 6769}, - {0x8d04, 6772}, - {0x8d05, 6773}, - {0x8d07, 6775}, - {0x8d08, 2819}, - {0x8d0a, 6774}, - {0x8d0b, 1570}, - {0x8d0d, 6777}, - {0x8d0f, 6776}, - {0x8d10, 6778}, - {0x8d12, 8628}, - {0x8d13, 6780}, - {0x8d14, 6782}, - {0x8d16, 6783}, - {0x8d64, 2682}, - {0x8d66, 2299}, - {0x8d67, 6784}, - {0x8d6b, 1456}, - {0x8d6d, 6785}, - {0x8d70, 2808}, - {0x8d71, 6786}, - {0x8d73, 6787}, - {0x8d74, 3549}, - {0x8d76, 8629}, - {0x8d77, 1609}, - {0x8d81, 6788}, - {0x8d85, 3026}, - {0x8d8a, 1277}, - {0x8d99, 6789}, - {0x8da3, 2333}, - {0x8da8, 2620}, - {0x8db3, 2829}, - {0x8dba, 6792}, - {0x8dbe, 6791}, - {0x8dc2, 6790}, - {0x8dcb, 6798}, - {0x8dcc, 6796}, - {0x8dcf, 6793}, - {0x8dd6, 6795}, - {0x8dda, 6794}, - {0x8ddb, 6797}, - {0x8ddd, 1681}, - {0x8ddf, 6801}, - {0x8de1, 2683}, - {0x8de3, 6802}, - {0x8de8, 1933}, - {0x8dea, 6799}, - {0x8deb, 6800}, - {0x8def, 4047}, - {0x8df3, 3027}, - {0x8df5, 2731}, - {0x8dfc, 6803}, - {0x8dff, 6806}, - {0x8e08, 6804}, - {0x8e09, 6805}, - {0x8e0a, 3907}, - {0x8e0f, 3199}, - {0x8e10, 6809}, - {0x8e1d, 6807}, - {0x8e1e, 6808}, - {0x8e1f, 6810}, - {0x8e2a, 6824}, - {0x8e30, 6813}, - {0x8e34, 6814}, - {0x8e35, 6812}, - {0x8e42, 6811}, - {0x8e44, 3097}, - {0x8e47, 6816}, - {0x8e48, 6820}, - {0x8e49, 6817}, - {0x8e4a, 6815}, - {0x8e4c, 6818}, - {0x8e50, 6819}, - {0x8e55, 6826}, - {0x8e59, 6821}, - {0x8e5f, 2684}, - {0x8e60, 6823}, - {0x8e63, 6825}, - {0x8e64, 6822}, - {0x8e72, 6828}, - {0x8e74, 2365}, - {0x8e76, 6827}, - {0x8e7c, 6829}, - {0x8e81, 6830}, - {0x8e84, 6833}, - {0x8e85, 6832}, - {0x8e87, 6831}, - {0x8e8a, 6835}, - {0x8e8b, 6834}, - {0x8e8d, 3842}, - {0x8e91, 6837}, - {0x8e93, 6836}, - {0x8e94, 6838}, - {0x8e99, 6839}, - {0x8ea1, 6841}, - {0x8eaa, 6840}, - {0x8eab, 2574}, - {0x8eac, 6842}, - {0x8eaf, 1765}, - {0x8eb0, 6843}, - {0x8eb1, 6845}, - {0x8ebe, 6846}, - {0x8ec0, 7663}, - {0x8ec5, 6847}, - {0x8ec6, 6844}, - {0x8ec8, 6848}, - {0x8eca, 2306}, - {0x8ecb, 6849}, - {0x8ecc, 1610}, - {0x8ecd, 1801}, - {0x8ecf, 8631}, - {0x8ed2, 1890}, - {0x8edb, 6850}, - {0x8edf, 3272}, - {0x8ee2, 3128}, - {0x8ee3, 6851}, - {0x8eeb, 6854}, - {0x8ef8, 2272}, - {0x8efb, 6853}, - {0x8efc, 6852}, - {0x8efd, 1840}, - {0x8efe, 6855}, - {0x8f03, 1457}, - {0x8f05, 6857}, - {0x8f09, 2124}, - {0x8f0a, 6856}, - {0x8f0c, 6865}, - {0x8f12, 6859}, - {0x8f13, 6861}, - {0x8f14, 3637}, - {0x8f15, 6858}, - {0x8f19, 6860}, - {0x8f1b, 6864}, - {0x8f1c, 6862}, - {0x8f1d, 1611}, - {0x8f1f, 6863}, - {0x8f26, 6866}, - {0x8f29, 3344}, - {0x8f2a, 4000}, - {0x8f2f, 2366}, - {0x8f33, 6867}, - {0x8f38, 3852}, - {0x8f39, 6869}, - {0x8f3b, 6868}, - {0x8f3e, 6872}, - {0x8f3f, 3883}, - {0x8f42, 6871}, - {0x8f44, 1483}, - {0x8f45, 6870}, - {0x8f46, 6875}, - {0x8f49, 6874}, - {0x8f4c, 6873}, - {0x8f4d, 3116}, - {0x8f4e, 6876}, - {0x8f57, 6877}, - {0x8f5c, 6878}, - {0x8f5f, 2046}, - {0x8f61, 1787}, - {0x8f62, 6879}, - {0x8f63, 6880}, - {0x8f64, 6881}, - {0x8f9b, 2575}, - {0x8f9c, 6882}, - {0x8f9e, 2265}, - {0x8f9f, 6883}, - {0x8fa3, 6884}, - {0x8fa7, 4278}, - {0x8fa8, 4277}, - {0x8fad, 6885}, - {0x8fae, 6143}, - {0x8faf, 6886}, - {0x8fb0, 2914}, - {0x8fb1, 2545}, - {0x8fb2, 3318}, - {0x8fb6, 0}, - {0x8fb7, 6887}, - {0x8fba, 3621}, - {0x8fbb, 3056}, - {0x8fbc, 2064}, - {0x8fbf, 2919}, - {0x8fc2, 1228}, - {0x8fc4, 3750}, - {0x8fc5, 2589}, - {0x8fce, 1844}, - {0x8fd1, 1753}, - {0x8fd4, 3622}, - {0x8fda, 6888}, - {0x8fe2, 6890}, - {0x8fe5, 6889}, - {0x8fe6, 1376}, - {0x8fe9, 3278}, - {0x8fea, 6891}, - {0x8feb, 3373}, - {0x8fed, 3117}, - {0x8fef, 6892}, - {0x8ff0, 2396}, - {0x8ff4, 6894}, - {0x8ff7, 3790}, - {0x8ff8, 6909}, - {0x8ff9, 6896}, - {0x8ffa, 6897}, - {0x8ffd, 3045}, - {0x9000, 2880}, - {0x9001, 2809}, - {0x9003, 3200}, - {0x9005, 6895}, - {0x9006, 1647}, - {0x900b, 6904}, - {0x900d, 6901}, - {0x900e, 6914}, - {0x900f, 3201}, - {0x9010, 2974}, - {0x9011, 6898}, - {0x9013, 3098}, - {0x9014, 3149}, - {0x9015, 6899}, - {0x9016, 6903}, - {0x9017, 2598}, - {0x9019, 3357}, - {0x901a, 3048}, - {0x901d, 2662}, - {0x901e, 6902}, - {0x901f, 2830}, - {0x9020, 2820}, - {0x9021, 6900}, - {0x9022, 1133}, - {0x9023, 4040}, - {0x9027, 6905}, - {0x902e, 2881}, - {0x9031, 2367}, - {0x9032, 2576}, - {0x9035, 6907}, - {0x9036, 6906}, - {0x9038, 1203}, - {0x9039, 6908}, - {0x903c, 3489}, - {0x903e, 6916}, - {0x9041, 3251}, - {0x9042, 2609}, - {0x9045, 2967}, - {0x9047, 1776}, - {0x9049, 6915}, - {0x904a, 3873}, - {0x904b, 1249}, - {0x904d, 3623}, - {0x904e, 1377}, - {0x904f, 6910}, - {0x9050, 6911}, - {0x9051, 6912}, - {0x9052, 6913}, - {0x9053, 3219}, - {0x9054, 2913}, - {0x9055, 1191}, - {0x9056, 6917}, - {0x9058, 6918}, - {0x9059, 7476}, - {0x905c, 2845}, - {0x905e, 6919}, - {0x9060, 1301}, - {0x9061, 2766}, - {0x9063, 1891}, - {0x9065, 3908}, - {0x9067, 8634}, - {0x9068, 6920}, - {0x9069, 3110}, - {0x906d, 2810}, - {0x906e, 2307}, - {0x906f, 6921}, - {0x9072, 6924}, - {0x9075, 2415}, - {0x9076, 6922}, - {0x9077, 2733}, - {0x9078, 2732}, - {0x907a, 1192}, - {0x907c, 3987}, - {0x907d, 6926}, - {0x907f, 3462}, - {0x9080, 6928}, - {0x9081, 6927}, - {0x9082, 6925}, - {0x9083, 5943}, - {0x9084, 1552}, - {0x9087, 6893}, - {0x9089, 6930}, - {0x908a, 6929}, - {0x908f, 6931}, - {0x9091, 3874}, - {0x90a3, 3257}, - {0x90a6, 3676}, - {0x90a8, 6932}, - {0x90aa, 2309}, - {0x90af, 6933}, - {0x90b1, 6934}, - {0x90b5, 6935}, - {0x90b8, 3099}, - {0x90c1, 1198}, - {0x90ca, 2027}, - {0x90ce, 4064}, - {0x90db, 6939}, - {0x90de, 8635}, - {0x90e1, 1802}, - {0x90e2, 6936}, - {0x90e4, 6937}, - {0x90e8, 3558}, - {0x90ed, 1458}, - {0x90f5, 3875}, - {0x90f7, 1719}, - {0x90fd, 3150}, - {0x9102, 6940}, - {0x9112, 6941}, - {0x9115, 8637}, - {0x9119, 6942}, - {0x9127, 8638}, - {0x912d, 3100}, - {0x9130, 6944}, - {0x9132, 6943}, - {0x9149, 3243}, - {0x914a, 6945}, - {0x914b, 2368}, - {0x914c, 2316}, - {0x914d, 3345}, - {0x914e, 2991}, - {0x9152, 2334}, - {0x9154, 2610}, - {0x9156, 6946}, - {0x9158, 6947}, - {0x9162, 2595}, - {0x9163, 6948}, - {0x9165, 6949}, - {0x9169, 6950}, - {0x916a, 3929}, - {0x916c, 2369}, - {0x9172, 6952}, - {0x9173, 6951}, - {0x9175, 2028}, - {0x9177, 2053}, - {0x9178, 2190}, - {0x9182, 6955}, - {0x9187, 2416}, - {0x9189, 6954}, - {0x918b, 6953}, - {0x918d, 2889}, - {0x9190, 1955}, - {0x9192, 2663}, - {0x9197, 3396}, - {0x919c, 2371}, - {0x91a2, 6956}, - {0x91a4, 2503}, - {0x91aa, 6959}, - {0x91ab, 6957}, - {0x91ac, 7707}, - {0x91ae, 0}, - {0x91af, 6958}, - {0x91b1, 7777}, - {0x91b4, 6961}, - {0x91b5, 6960}, - {0x91b8, 2530}, - {0x91ba, 6962}, - {0x91c0, 6963}, - {0x91c1, 6964}, - {0x91c6, 3428}, - {0x91c7, 2115}, - {0x91c8, 2317}, - {0x91c9, 6965}, - {0x91cb, 6966}, - {0x91cc, 3948}, - {0x91cd, 2383}, - {0x91ce, 3834}, - {0x91cf, 3988}, - {0x91d0, 6967}, - {0x91d1, 1754}, - {0x91d6, 6968}, - {0x91d7, 8640}, - {0x91d8, 3101}, - {0x91da, 8639}, - {0x91db, 6971}, - {0x91dc, 1494}, - {0x91dd, 2577}, - {0x91de, 8641}, - {0x91df, 6969}, - {0x91e1, 6970}, - {0x91e3, 3068}, - {0x91e4, 8644}, - {0x91e5, 8645}, - {0x91e6, 3715}, - {0x91e7, 1780}, - {0x91ed, 8642}, - {0x91ee, 8643}, - {0x91f5, 6973}, - {0x91f6, 6974}, - {0x91fc, 6972}, - {0x91ff, 6976}, - {0x9206, 8646}, - {0x920a, 8648}, - {0x920d, 3255}, - {0x920e, 1441}, - {0x9210, 8647}, - {0x9211, 6980}, - {0x9214, 6977}, - {0x9215, 6979}, - {0x921e, 6975}, - {0x9229, 7050}, - {0x922c, 6978}, - {0x9234, 4019}, - {0x9237, 1934}, - {0x9239, 8655}, - {0x923a, 8649}, - {0x923c, 8651}, - {0x923f, 6988}, - {0x9240, 8650}, - {0x9244, 3118}, - {0x9245, 6983}, - {0x9248, 6986}, - {0x9249, 6984}, - {0x924b, 6989}, - {0x924e, 8652}, - {0x9250, 6990}, - {0x9251, 8654}, - {0x9257, 6982}, - {0x9259, 8653}, - {0x925a, 6995}, - {0x925b, 1302}, - {0x925e, 6981}, - {0x9262, 3393}, - {0x9264, 6985}, - {0x9266, 2504}, - {0x9267, 8656}, - {0x9271, 2029}, - {0x9277, 8658}, - {0x9278, 8659}, - {0x927e, 3702}, - {0x9280, 1756}, - {0x9283, 2384}, - {0x9285, 3220}, - {0x9288, 8362}, - {0x9291, 2735}, - {0x9293, 6993}, - {0x9295, 6987}, - {0x9296, 6992}, - {0x9298, 3791}, - {0x929a, 3028}, - {0x929b, 6994}, - {0x929c, 6991}, - {0x92a7, 8657}, - {0x92ad, 2734}, - {0x92b7, 6998}, - {0x92b9, 6997}, - {0x92cc, 0}, - {0x92cf, 6996}, - {0x92d0, 8663}, - {0x92d2, 3677}, - {0x92d3, 8667}, - {0x92d5, 8665}, - {0x92d7, 8661}, - {0x92d9, 8662}, - {0x92e0, 8666}, - {0x92e4, 2437}, - {0x92e7, 8660}, - {0x92e9, 6999}, - {0x92ea, 3631}, - {0x92ed, 1270}, - {0x92f2, 3512}, - {0x92f3, 2992}, - {0x92f8, 1682}, - {0x92f9, 8368}, - {0x92fa, 7001}, - {0x92fb, 8670}, - {0x92fc, 2031}, - {0x92ff, 8673}, - {0x9302, 8675}, - {0x9306, 2170}, - {0x930f, 7000}, - {0x9310, 2611}, - {0x9318, 2612}, - {0x9319, 7004}, - {0x931a, 7006}, - {0x931d, 8674}, - {0x931e, 8672}, - {0x9320, 2531}, - {0x9321, 8669}, - {0x9322, 7005}, - {0x9323, 7007}, - {0x9325, 8668}, - {0x9326, 1739}, - {0x9328, 3511}, - {0x932b, 2318}, - {0x932c, 4041}, - {0x932e, 7003}, - {0x932f, 2152}, - {0x9332, 4069}, - {0x9335, 7009}, - {0x933a, 7008}, - {0x933b, 7010}, - {0x9344, 7002}, - {0x9348, 8361}, - {0x934b, 3265}, - {0x934d, 3151}, - {0x9354, 3059}, - {0x9356, 7015}, - {0x9357, 8677}, - {0x935b, 2945}, - {0x935c, 7011}, - {0x9360, 7012}, - {0x936c, 1795}, - {0x936e, 7014}, - {0x9370, 8676}, - {0x9375, 1892}, - {0x937c, 7013}, - {0x937e, 2505}, - {0x938c, 1495}, - {0x9394, 7019}, - {0x9396, 2095}, - {0x9397, 2811}, - {0x939a, 3046}, - {0x93a4, 8678}, - {0x93a7, 1433}, - {0x93ac, 7017}, - {0x93ad, 7018}, - {0x93ae, 3039}, - {0x93b0, 7016}, - {0x93b9, 7020}, - {0x93c3, 7026}, - {0x93c6, 8679}, - {0x93c8, 7029}, - {0x93d0, 7028}, - {0x93d1, 3111}, - {0x93d6, 7021}, - {0x93d7, 7022}, - {0x93d8, 7025}, - {0x93dd, 7027}, - {0x93de, 8680}, - {0x93e1, 1720}, - {0x93e4, 7030}, - {0x93e5, 7024}, - {0x93e8, 7023}, - {0x93f8, 8681}, - {0x9403, 7034}, - {0x9407, 7035}, - {0x9410, 7036}, - {0x9413, 7033}, - {0x9414, 7032}, - {0x9418, 2506}, - {0x9419, 3202}, - {0x941a, 7031}, - {0x9421, 7040}, - {0x942b, 7038}, - {0x9431, 8682}, - {0x9435, 7039}, - {0x9436, 7037}, - {0x9438, 2904}, - {0x943a, 7041}, - {0x9441, 7042}, - {0x9444, 7044}, - {0x9445, 8683}, - {0x9448, 8684}, - {0x9451, 1553}, - {0x9452, 7043}, - {0x9453, 3846}, - {0x945a, 7055}, - {0x945b, 7045}, - {0x945e, 7048}, - {0x9460, 7046}, - {0x9462, 7047}, - {0x946a, 7049}, - {0x9470, 7051}, - {0x9475, 7052}, - {0x9477, 7053}, - {0x947c, 7056}, - {0x947d, 7054}, - {0x947e, 7057}, - {0x947f, 7059}, - {0x9481, 7058}, - {0x9577, 3029}, - {0x9580, 3827}, - {0x9582, 7060}, - {0x9583, 2736}, - {0x9587, 7061}, - {0x9589, 3604}, - {0x958a, 7062}, - {0x958b, 1417}, - {0x958f, 1246}, - {0x9591, 1555}, - {0x9592, 8685}, - {0x9593, 1554}, - {0x9594, 7063}, - {0x9596, 7064}, - {0x9598, 7065}, - {0x9599, 7066}, - {0x95a0, 7067}, - {0x95a2, 1556}, - {0x95a3, 1459}, - {0x95a4, 2032}, - {0x95a5, 3402}, - {0x95a7, 7069}, - {0x95a8, 7068}, - {0x95ad, 7070}, - {0x95b2, 1278}, - {0x95b9, 7073}, - {0x95bb, 7072}, - {0x95bc, 7071}, - {0x95be, 7074}, - {0x95c3, 7077}, - {0x95c7, 1163}, - {0x95ca, 7075}, - {0x95cc, 7079}, - {0x95cd, 7078}, - {0x95d4, 7081}, - {0x95d5, 7080}, - {0x95d6, 7082}, - {0x95d8, 3206}, - {0x95dc, 7083}, - {0x95e1, 7084}, - {0x95e2, 7086}, - {0x95e5, 7085}, - {0x961c, 3550}, - {0x9621, 7087}, - {0x9628, 7088}, - {0x962a, 2133}, - {0x962e, 7089}, - {0x962f, 7090}, - {0x9632, 3703}, - {0x963b, 2765}, - {0x963f, 1128}, - {0x9640, 2859}, - {0x9642, 7091}, - {0x9644, 3551}, - {0x964b, 7094}, - {0x964c, 7092}, - {0x964d, 2033}, - {0x964f, 7093}, - {0x9650, 1910}, - {0x965b, 3605}, - {0x965c, 7096}, - {0x965d, 7098}, - {0x965e, 7097}, - {0x965f, 7099}, - {0x9662, 1219}, - {0x9663, 2590}, - {0x9664, 2438}, - {0x9665, 1557}, - {0x9666, 7100}, - {0x966a, 3356}, - {0x966c, 7102}, - {0x9670, 1220}, - {0x9672, 7101}, - {0x9673, 3040}, - {0x9675, 3989}, - {0x9676, 3203}, - {0x9677, 7095}, - {0x9678, 3950}, - {0x967a, 1893}, - {0x967d, 3909}, - {0x9685, 1777}, - {0x9686, 3964}, - {0x9688, 1790}, - {0x968a, 2882}, - {0x968b, 6252}, - {0x968d, 7103}, - {0x968e, 1418}, - {0x968f, 2613}, - {0x9694, 1460}, - {0x9695, 7105}, - {0x9697, 7106}, - {0x9698, 7104}, - {0x9699, 1850}, - {0x969b, 2125}, - {0x969c, 2507}, - {0x969d, 8688}, - {0x96a0, 1221}, - {0x96a3, 4001}, - {0x96a7, 7108}, - {0x96a8, 6923}, - {0x96aa, 7107}, - {0x96af, 8689}, - {0x96b0, 7111}, - {0x96b1, 7109}, - {0x96b2, 7110}, - {0x96b4, 7112}, - {0x96b6, 7113}, - {0x96b7, 4020}, - {0x96b8, 7114}, - {0x96b9, 7115}, - {0x96bb, 2669}, - {0x96bc, 3407}, - {0x96c0, 2627}, - {0x96c1, 1571}, - {0x96c4, 3876}, - {0x96c5, 1389}, - {0x96c6, 2370}, - {0x96c7, 1935}, - {0x96c9, 7118}, - {0x96cb, 7117}, - {0x96cc, 2241}, - {0x96cd, 7119}, - {0x96ce, 7116}, - {0x96d1, 2166}, - {0x96d5, 7123}, - {0x96d6, 6546}, - {0x96d9, 4331}, - {0x96db, 2621}, - {0x96dc, 7121}, - {0x96e2, 3949}, - {0x96e3, 3273}, - {0x96e8, 1229}, - {0x96ea, 2695}, - {0x96eb, 2274}, - {0x96f0, 3591}, - {0x96f2, 1250}, - {0x96f6, 4021}, - {0x96f7, 3925}, - {0x96f9, 7124}, - {0x96fb, 3135}, - {0x9700, 2343}, - {0x9704, 7125}, - {0x9706, 7126}, - {0x9707, 2578}, - {0x9708, 7127}, - {0x970a, 4022}, - {0x970d, 7122}, - {0x970e, 7129}, - {0x970f, 7131}, - {0x9711, 7130}, - {0x9713, 7128}, - {0x9716, 7132}, - {0x9719, 7133}, - {0x971c, 2812}, - {0x971e, 1378}, - {0x9724, 7134}, - {0x9727, 3780}, - {0x972a, 7135}, - {0x9730, 7136}, - {0x9732, 4048}, - {0x9733, 8690}, - {0x9738, 5140}, - {0x9739, 7137}, - {0x973b, 8691}, - {0x973d, 7138}, - {0x973e, 7139}, - {0x9742, 7143}, - {0x9743, 8692}, - {0x9744, 7140}, - {0x9746, 7141}, - {0x9748, 7142}, - {0x9749, 7144}, - {0x974d, 8693}, - {0x974f, 8694}, - {0x9751, 8695}, - {0x9752, 2664}, - {0x9755, 8696}, - {0x9756, 3843}, - {0x9759, 2665}, - {0x975c, 7145}, - {0x975e, 3463}, - {0x9760, 7146}, - {0x9761, 7430}, - {0x9762, 3800}, - {0x9764, 7147}, - {0x9766, 7148}, - {0x9768, 7149}, - {0x9769, 1461}, - {0x976b, 7151}, - {0x976d, 2591}, - {0x9771, 7152}, - {0x9774, 1786}, - {0x9779, 7153}, - {0x977a, 7157}, - {0x977c, 7155}, - {0x9781, 7156}, - {0x9784, 1489}, - {0x9785, 7154}, - {0x9786, 7158}, - {0x978b, 7159}, - {0x978d, 1164}, - {0x978f, 7160}, - {0x9790, 7161}, - {0x9798, 2508}, - {0x979c, 7162}, - {0x97a0, 1633}, - {0x97a3, 7165}, - {0x97a6, 7164}, - {0x97a8, 7163}, - {0x97ab, 6708}, - {0x97ad, 3628}, - {0x97b3, 7166}, - {0x97b4, 7167}, - {0x97b6, 0}, - {0x97c3, 7168}, - {0x97c6, 7169}, - {0x97c8, 7170}, - {0x97cb, 7171}, - {0x97d3, 1558}, - {0x97dc, 7172}, - {0x97ed, 7173}, - {0x97ee, 3289}, - {0x97f2, 7175}, - {0x97f3, 1339}, - {0x97f5, 7178}, - {0x97f6, 7177}, - {0x97fb, 1222}, - {0x97ff, 1721}, - {0x9801, 3607}, - {0x9802, 3030}, - {0x9803, 2066}, - {0x9805, 2034}, - {0x9806, 2417}, - {0x9808, 2594}, - {0x980c, 7180}, - {0x980f, 7179}, - {0x9810, 3884}, - {0x9811, 1572}, - {0x9812, 3430}, - {0x9813, 3252}, - {0x9817, 2626}, - {0x9818, 3990}, - {0x981a, 1841}, - {0x9821, 7183}, - {0x9824, 7182}, - {0x982c, 3705}, - {0x982d, 3204}, - {0x9830, 7795}, - {0x9834, 1266}, - {0x9837, 7184}, - {0x9838, 7181}, - {0x983b, 3523}, - {0x983c, 3924}, - {0x983d, 7185}, - {0x9846, 7186}, - {0x984b, 7188}, - {0x984c, 2890}, - {0x984d, 1465}, - {0x984e, 1466}, - {0x984f, 7187}, - {0x9853, 0}, - {0x9854, 1573}, - {0x9855, 1894}, - {0x9857, 8697}, - {0x9858, 1574}, - {0x985a, 7752}, - {0x985b, 3129}, - {0x985e, 4008}, - {0x9865, 8698}, - {0x9867, 1936}, - {0x986b, 7189}, - {0x986f, 7190}, - {0x9870, 7191}, - {0x9871, 7192}, - {0x9873, 7194}, - {0x9874, 7193}, - {0x98a8, 3561}, - {0x98aa, 7195}, - {0x98af, 7196}, - {0x98b1, 7197}, - {0x98b6, 7198}, - {0x98c3, 7200}, - {0x98c4, 7199}, - {0x98c6, 7201}, - {0x98db, 3464}, - {0x98dc, 6201}, - {0x98df, 2543}, - {0x98e2, 1612}, - {0x98e9, 7202}, - {0x98eb, 7203}, - {0x98ed, 4289}, - {0x98ee, 5338}, - {0x98ef, 3431}, - {0x98f2, 1215}, - {0x98f4, 1151}, - {0x98fc, 2242}, - {0x98fd, 3678}, - {0x98fe, 2534}, - {0x9903, 7204}, - {0x9905, 3819}, - {0x9909, 7205}, - {0x990a, 3910}, - {0x990c, 1252}, - {0x9910, 2191}, - {0x9912, 7206}, - {0x9913, 1390}, - {0x9914, 7207}, - {0x9918, 7208}, - {0x991d, 7210}, - {0x991e, 7211}, - {0x9920, 7213}, - {0x9921, 7209}, - {0x9924, 7212}, - {0x9927, 8701}, - {0x9928, 1559}, - {0x992c, 7214}, - {0x992e, 7215}, - {0x9933, 0}, - {0x993d, 7216}, - {0x993e, 7217}, - {0x9942, 7218}, - {0x9945, 7220}, - {0x9949, 7219}, - {0x994b, 7222}, - {0x994c, 7225}, - {0x9950, 7221}, - {0x9951, 7223}, - {0x9952, 7224}, - {0x9955, 7226}, - {0x9957, 1722}, - {0x9996, 2335}, - {0x9997, 7227}, - {0x9998, 7228}, - {0x9999, 2035}, - {0x999e, 8703}, - {0x99a5, 7229}, - {0x99a8, 1436}, - {0x99ac, 3333}, - {0x99ad, 7230}, - {0x99ae, 7231}, - {0x99b3, 2968}, - {0x99b4, 3267}, - {0x99ba, 0}, - {0x99bc, 7232}, - {0x99c1, 3379}, - {0x99c4, 2860}, - {0x99c5, 1274}, - {0x99c6, 1766}, - {0x99c8, 1767}, - {0x99d0, 2993}, - {0x99d1, 7237}, - {0x99d2, 1768}, - {0x99d5, 1391}, - {0x99d8, 7236}, - {0x99db, 7234}, - {0x99dd, 7235}, - {0x99df, 7233}, - {0x99e2, 7247}, - {0x99ed, 7238}, - {0x99ee, 7239}, - {0x99f1, 7240}, - {0x99f2, 7241}, - {0x99f8, 7243}, - {0x99fb, 7242}, - {0x99ff, 2403}, - {0x9a01, 7244}, - {0x9a05, 7246}, - {0x9a0e, 1613}, - {0x9a0f, 7245}, - {0x9a12, 2813}, - {0x9a13, 1895}, - {0x9a19, 7248}, - {0x9a28, 2861}, - {0x9a2b, 7249}, - {0x9a2e, 0}, - {0x9a30, 3205}, - {0x9a37, 7250}, - {0x9a3e, 7255}, - {0x9a40, 7253}, - {0x9a42, 7252}, - {0x9a43, 7254}, - {0x9a45, 7251}, - {0x9a4d, 7257}, - {0x9a4e, 8704}, - {0x9a52, 7727}, - {0x9a55, 7256}, - {0x9a57, 7259}, - {0x9a5a, 1723}, - {0x9a5b, 7258}, - {0x9a5f, 7260}, - {0x9a62, 7261}, - {0x9a64, 7263}, - {0x9a65, 7262}, - {0x9a69, 7264}, - {0x9a6a, 7266}, - {0x9a6b, 7265}, - {0x9aa8, 2062}, - {0x9aad, 7267}, - {0x9ab0, 7268}, - {0x9ab6, 0}, - {0x9ab8, 1434}, - {0x9abc, 7269}, - {0x9ac0, 7270}, - {0x9ac4, 2615}, - {0x9acf, 7271}, - {0x9ad1, 7272}, - {0x9ad3, 7273}, - {0x9ad4, 7274}, - {0x9ad8, 2036}, - {0x9ad9, 8705}, - {0x9adc, 8706}, - {0x9ade, 7275}, - {0x9adf, 7276}, - {0x9ae2, 7277}, - {0x9ae3, 7278}, - {0x9ae6, 7279}, - {0x9aea, 3397}, - {0x9aeb, 7281}, - {0x9aed, 3480}, - {0x9aee, 7282}, - {0x9aef, 7280}, - {0x9af1, 7284}, - {0x9af4, 7283}, - {0x9af7, 7285}, - {0x9afb, 7286}, - {0x9b06, 7287}, - {0x9b18, 7288}, - {0x9b1a, 7289}, - {0x9b1f, 7290}, - {0x9b22, 7291}, - {0x9b23, 7292}, - {0x9b25, 7293}, - {0x9b27, 7294}, - {0x9b28, 7295}, - {0x9b29, 7296}, - {0x9b2a, 7297}, - {0x9b2e, 7298}, - {0x9b2f, 7299}, - {0x9b31, 5332}, - {0x9b32, 7300}, - {0x9b34, 0}, - {0x9b3b, 6057}, - {0x9b3c, 1614}, - {0x9b41, 1407}, - {0x9b42, 2082}, - {0x9b43, 7302}, - {0x9b44, 7301}, - {0x9b45, 3761}, - {0x9b4d, 7304}, - {0x9b4e, 7305}, - {0x9b4f, 7303}, - {0x9b51, 7306}, - {0x9b54, 3728}, - {0x9b58, 7307}, - {0x9b5a, 1685}, - {0x9b6f, 4043}, - {0x9b72, 8708}, - {0x9b74, 7308}, - {0x9b75, 8707}, - {0x9b83, 7310}, - {0x9b8e, 1154}, - {0x9b8f, 8709}, - {0x9b91, 7311}, - {0x9b92, 3579}, - {0x9b93, 7309}, - {0x9b96, 7312}, - {0x9b97, 7313}, - {0x9b9f, 7314}, - {0x9ba0, 7315}, - {0x9ba8, 7316}, - {0x9baa, 3740}, - {0x9bab, 2171}, - {0x9bad, 2154}, - {0x9bae, 2737}, - {0x9bb1, 8710}, - {0x9bb4, 7317}, - {0x9bb9, 7320}, - {0x9bbb, 8711}, - {0x9bc0, 7318}, - {0x9bc6, 7321}, - {0x9bc9, 1957}, - {0x9bca, 7319}, - {0x9bcf, 7322}, - {0x9bd1, 7323}, - {0x9bd2, 7324}, - {0x9bd4, 7328}, - {0x9bd6, 2168}, - {0x9bdb, 2884}, - {0x9be1, 7329}, - {0x9be2, 7326}, - {0x9be3, 7325}, - {0x9be4, 7327}, - {0x9be8, 1845}, - {0x9bf0, 7333}, - {0x9bf1, 7332}, - {0x9bf2, 7331}, - {0x9bf5, 1143}, - {0x9c00, 8712}, - {0x9c04, 7343}, - {0x9c06, 7339}, - {0x9c08, 7340}, - {0x9c09, 7336}, - {0x9c0a, 7342}, - {0x9c0c, 7338}, - {0x9c0d, 1472}, - {0x9c10, 4082}, - {0x9c12, 7341}, - {0x9c13, 7337}, - {0x9c14, 7335}, - {0x9c15, 7334}, - {0x9c1b, 7345}, - {0x9c21, 7348}, - {0x9c24, 7347}, - {0x9c25, 7346}, - {0x9c2d, 3515}, - {0x9c2e, 7344}, - {0x9c2f, 1207}, - {0x9c30, 7349}, - {0x9c32, 7351}, - {0x9c39, 1485}, - {0x9c3a, 7330}, - {0x9c3b, 1241}, - {0x9c3e, 7353}, - {0x9c46, 7352}, - {0x9c47, 7350}, - {0x9c48, 2923}, - {0x9c52, 3742}, - {0x9c57, 4002}, - {0x9c5a, 7354}, - {0x9c60, 7355}, - {0x9c67, 7356}, - {0x9c76, 7357}, - {0x9c78, 7358}, - {0x9ce5, 3031}, - {0x9ce7, 7359}, - {0x9ce9, 3403}, - {0x9ceb, 7364}, - {0x9cec, 7360}, - {0x9cf0, 7361}, - {0x9cf3, 3679}, - {0x9cf4, 3792}, - {0x9cf6, 3240}, - {0x9d03, 7365}, - {0x9d06, 7366}, - {0x9d07, 3222}, - {0x9d08, 7363}, - {0x9d09, 7362}, - {0x9d0e, 1322}, - {0x9d12, 7374}, - {0x9d15, 7373}, - {0x9d1b, 1303}, - {0x9d1f, 7371}, - {0x9d23, 7370}, - {0x9d26, 7368}, - {0x9d28, 1497}, - {0x9d2a, 7367}, - {0x9d2b, 2270}, - {0x9d2c, 1321}, - {0x9d3b, 2037}, - {0x9d3e, 7377}, - {0x9d3f, 7376}, - {0x9d41, 7375}, - {0x9d44, 7372}, - {0x9d46, 7378}, - {0x9d48, 7379}, - {0x9d50, 7384}, - {0x9d51, 7383}, - {0x9d59, 7385}, - {0x9d5c, 1231}, - {0x9d5d, 7380}, - {0x9d5e, 7381}, - {0x9d60, 2054}, - {0x9d61, 3781}, - {0x9d64, 7382}, - {0x9d6b, 8714}, - {0x9d6c, 3680}, - {0x9d6f, 7390}, - {0x9d70, 8713}, - {0x9d72, 7386}, - {0x9d7a, 7391}, - {0x9d87, 7388}, - {0x9d89, 7387}, - {0x9d8f, 1842}, - {0x9d9a, 7392}, - {0x9da4, 7393}, - {0x9da9, 7394}, - {0x9dab, 7389}, - {0x9daf, 7369}, - {0x9db2, 7395}, - {0x9db4, 3069}, - {0x9db8, 7399}, - {0x9dba, 7400}, - {0x9dbb, 7398}, - {0x9dc1, 7397}, - {0x9dc2, 7403}, - {0x9dc4, 7396}, - {0x9dc6, 7401}, - {0x9dcf, 7402}, - {0x9dd3, 7405}, - {0x9dd7, 7646}, - {0x9dd9, 7404}, - {0x9de6, 7407}, - {0x9ded, 7408}, - {0x9def, 7409}, - {0x9df2, 4079}, - {0x9df8, 7406}, - {0x9df9, 2891}, - {0x9dfa, 2141}, - {0x9dfd, 7410}, - {0x9e19, 8716}, - {0x9e1a, 7411}, - {0x9e1b, 7412}, - {0x9e1e, 7413}, - {0x9e75, 7414}, - {0x9e78, 1896}, - {0x9e79, 7415}, - {0x9e7c, 7677}, - {0x9e7d, 7416}, - {0x9e7f, 2267}, - {0x9e81, 7417}, - {0x9e88, 7418}, - {0x9e8b, 7419}, - {0x9e8c, 7420}, - {0x9e91, 7423}, - {0x9e92, 7421}, - {0x9e93, 4066}, - {0x9e95, 7422}, - {0x9e97, 4023}, - {0x9e9d, 7424}, - {0x9e9f, 4003}, - {0x9ea5, 7425}, - {0x9ea6, 3380}, - {0x9ea9, 7426}, - {0x9eaa, 7428}, - {0x9ead, 7429}, - {0x9eb4, 7682}, - {0x9eb5, 7797}, - {0x9eb8, 7427}, - {0x9eb9, 2047}, - {0x9eba, 3801}, - {0x9ebb, 3729}, - {0x9ebc, 4740}, - {0x9ebe, 5375}, - {0x9ebf, 3753}, - {0x9ec4, 1323}, - {0x9ecc, 7431}, - {0x9ecd, 1642}, - {0x9ece, 7432}, - {0x9ecf, 7433}, - {0x9ed0, 7434}, - {0x9ed1, 8717}, - {0x9ed2, 2055}, - {0x9ed4, 7435}, - {0x9ed8, 5645}, - {0x9ed9, 3815}, - {0x9edb, 2883}, - {0x9edc, 7436}, - {0x9edd, 7438}, - {0x9ede, 7437}, - {0x9ee0, 7439}, - {0x9ee5, 7440}, - {0x9ee8, 7441}, - {0x9eef, 7442}, - {0x9ef4, 7443}, - {0x9ef6, 7444}, - {0x9ef7, 7445}, - {0x9ef9, 7446}, - {0x9efb, 7447}, - {0x9efc, 7448}, - {0x9efd, 7449}, - {0x9f07, 7450}, - {0x9f08, 7451}, - {0x9f0e, 3102}, - {0x9f13, 1937}, - {0x9f15, 7453}, - {0x9f20, 2767}, - {0x9f21, 7454}, - {0x9f2c, 7455}, - {0x9f3b, 3475}, - {0x9f3e, 7456}, - {0x9f4a, 7457}, - {0x9f4b, 5898}, - {0x9f4e, 6779}, - {0x9f4f, 7174}, - {0x9f52, 7458}, - {0x9f54, 7459}, - {0x9f5f, 7461}, - {0x9f60, 7462}, - {0x9f61, 7463}, - {0x9f62, 4024}, - {0x9f63, 7460}, - {0x9f66, 7464}, - {0x9f67, 7465}, - {0x9f6a, 7467}, - {0x9f6c, 7466}, - {0x9f72, 7469}, - {0x9f76, 7470}, - {0x9f77, 7468}, - {0x9f8d, 3966}, - {0x9f95, 7471}, - {0x9f9c, 7472}, - {0x9f9d, 5927}, - {0x9fa0, 7473}, - {0xf929, 8489}, - {0xf9dc, 8686}, - {0xfa0e, 8410}, - {0xfa0f, 8421}, - {0xfa10, 8422}, - {0xfa11, 8443}, - {0xfa12, 8481}, - {0xfa13, 8497}, - {0xfa14, 8499}, - {0xfa15, 8542}, - {0xfa16, 8548}, - {0xfa17, 8571}, - {0xfa18, 8579}, - {0xfa19, 8580}, - {0xfa1a, 8581}, - {0xfa1b, 8583}, - {0xfa1c, 8587}, - {0xfa1d, 8590}, - {0xfa1e, 8599}, - {0xfa1f, 8610}, - {0xfa20, 8612}, - {0xfa21, 8613}, - {0xfa22, 8622}, - {0xfa23, 8630}, - {0xfa24, 8632}, - {0xfa25, 8633}, - {0xfa26, 8636}, - {0xfa27, 8664}, - {0xfa28, 8671}, - {0xfa29, 8687}, - {0xfa2a, 8699}, - {0xfa2b, 8700}, - {0xfa2c, 8702}, - {0xfa2d, 8715}, - {0xfb00, 9358}, - {0xfb01, 112}, - {0xfb02, 113}, - {0xfb03, 9359}, - {0xfb04, 9360}, - {0xfe30, 7898}, - {0xfe31, 7892}, - {0xfe32, 7893}, - {0xfe33, 7890}, - {0xfe35, 7899}, - {0xfe36, 7900}, - {0xfe37, 7905}, - {0xfe38, 7906}, - {0xfe39, 7901}, - {0xfe3a, 7902}, - {0xfe3b, 7915}, - {0xfe3c, 7916}, - {0xfe3d, 7909}, - {0xfe3e, 7910}, - {0xfe3f, 7907}, - {0xfe40, 7908}, - {0xfe41, 7911}, - {0xfe42, 7912}, - {0xfe43, 7913}, - {0xfe44, 7914}, - {0xff01, 642}, - {0xff02, 8007}, - {0xff03, 716}, - {0xff04, 712}, - {0xff05, 715}, - {0xff06, 717}, - {0xff07, 8006}, - {0xff08, 674}, - {0xff09, 675}, - {0xff0a, 718}, - {0xff0b, 692}, - {0xff0c, 636}, - {0xff0d, 693}, - {0xff0e, 637}, - {0xff0f, 663}, - {0xff10, 780}, - {0xff11, 781}, - {0xff12, 782}, - {0xff13, 783}, - {0xff14, 784}, - {0xff15, 785}, - {0xff16, 786}, - {0xff17, 787}, - {0xff18, 788}, - {0xff19, 789}, - {0xff1a, 639}, - {0xff1b, 640}, - {0xff1c, 699}, - {0xff1d, 697}, - {0xff1e, 700}, - {0xff1f, 641}, - {0xff20, 719}, - {0xff21, 790}, - {0xff22, 791}, - {0xff23, 792}, - {0xff24, 793}, - {0xff25, 794}, - {0xff26, 795}, - {0xff27, 796}, - {0xff28, 797}, - {0xff29, 798}, - {0xff2a, 799}, - {0xff2b, 800}, - {0xff2c, 801}, - {0xff2d, 802}, - {0xff2e, 803}, - {0xff2f, 804}, - {0xff30, 805}, - {0xff31, 806}, - {0xff32, 807}, - {0xff33, 808}, - {0xff34, 809}, - {0xff35, 810}, - {0xff36, 811}, - {0xff37, 812}, - {0xff38, 813}, - {0xff39, 814}, - {0xff3a, 815}, - {0xff3b, 678}, - {0xff3c, 664}, - {0xff3d, 679}, - {0xff3e, 648}, - {0xff3f, 650}, - {0xff40, 646}, - {0xff41, 816}, - {0xff42, 817}, - {0xff43, 818}, - {0xff44, 819}, - {0xff45, 820}, - {0xff46, 821}, - {0xff47, 822}, - {0xff48, 823}, - {0xff49, 824}, - {0xff4a, 825}, - {0xff4b, 826}, - {0xff4c, 827}, - {0xff4d, 828}, - {0xff4e, 829}, - {0xff4f, 830}, - {0xff50, 831}, - {0xff51, 832}, - {0xff52, 833}, - {0xff53, 834}, - {0xff54, 835}, - {0xff55, 836}, - {0xff56, 837}, - {0xff57, 838}, - {0xff58, 839}, - {0xff59, 840}, - {0xff5a, 841}, - {0xff5b, 680}, - {0xff5c, 667}, - {0xff5d, 681}, - {0xff5e, 665}, - {0xff61, 327}, - {0xff62, 328}, - {0xff63, 329}, - {0xff64, 330}, - {0xff65, 331}, - {0xff66, 332}, - {0xff67, 333}, - {0xff68, 334}, - {0xff69, 335}, - {0xff6a, 336}, - {0xff6b, 337}, - {0xff6c, 338}, - {0xff6d, 339}, - {0xff6e, 340}, - {0xff6f, 341}, - {0xff70, 342}, - {0xff71, 343}, - {0xff72, 344}, - {0xff73, 345}, - {0xff74, 346}, - {0xff75, 347}, - {0xff76, 348}, - {0xff77, 349}, - {0xff78, 350}, - {0xff79, 351}, - {0xff7a, 352}, - {0xff7b, 353}, - {0xff7c, 354}, - {0xff7d, 355}, - {0xff7e, 356}, - {0xff7f, 357}, - {0xff80, 358}, - {0xff81, 359}, - {0xff82, 360}, - {0xff83, 361}, - {0xff84, 362}, - {0xff85, 363}, - {0xff86, 364}, - {0xff87, 365}, - {0xff88, 366}, - {0xff89, 367}, - {0xff8a, 368}, - {0xff8b, 369}, - {0xff8c, 370}, - {0xff8d, 371}, - {0xff8e, 372}, - {0xff8f, 373}, - {0xff90, 374}, - {0xff91, 375}, - {0xff92, 376}, - {0xff93, 377}, - {0xff94, 378}, - {0xff95, 379}, - {0xff96, 380}, - {0xff97, 381}, - {0xff98, 382}, - {0xff99, 383}, - {0xff9a, 384}, - {0xff9b, 385}, - {0xff9c, 386}, - {0xff9d, 387}, - {0xff9e, 388}, - {0xff9f, 389}, - {0xffe0, 713}, - {0xffe1, 714}, - {0xffe2, 751}, - {0xffe3, 649}, - {0xffe4, 8005}, - {0xffe5, 711}, - {0xffe8, 323}}; - diff --git a/src/add-ons/print/drivers/pdf/source/korean.h b/src/add-ons/print/drivers/pdf/source/korean.h deleted file mode 100644 index 8edad3f663..0000000000 --- a/src/add-ons/print/drivers/pdf/source/korean.h +++ /dev/null @@ -1,15848 +0,0 @@ -// WARNING: MACHINE GENERATED, DON'T CHANGE! -static unicode_to_cid korean[] = { - {0x20, 1}, - {0x21, 2}, - {0x22, 3}, - {0x23, 4}, - {0x24, 5}, - {0x25, 6}, - {0x26, 7}, - {0x27, 8}, - {0x28, 9}, - {0x29, 10}, - {0x2a, 11}, - {0x2b, 12}, - {0x2c, 13}, - {0x2d, 14}, - {0x2e, 15}, - {0x2f, 16}, - {0x30, 17}, - {0x31, 18}, - {0x32, 19}, - {0x33, 20}, - {0x34, 21}, - {0x35, 22}, - {0x36, 23}, - {0x37, 24}, - {0x38, 25}, - {0x39, 26}, - {0x3a, 27}, - {0x3b, 28}, - {0x3c, 29}, - {0x3d, 30}, - {0x3e, 31}, - {0x3f, 32}, - {0x40, 33}, - {0x41, 34}, - {0x42, 35}, - {0x43, 36}, - {0x44, 37}, - {0x45, 38}, - {0x46, 39}, - {0x47, 40}, - {0x48, 41}, - {0x49, 42}, - {0x4a, 43}, - {0x4b, 44}, - {0x4c, 45}, - {0x4d, 46}, - {0x4e, 47}, - {0x4f, 48}, - {0x50, 49}, - {0x51, 50}, - {0x52, 51}, - {0x53, 52}, - {0x54, 53}, - {0x55, 54}, - {0x56, 55}, - {0x57, 56}, - {0x58, 57}, - {0x59, 58}, - {0x5a, 59}, - {0x5b, 60}, - {0x5c, 61}, - {0x5d, 62}, - {0x5e, 63}, - {0x5f, 64}, - {0x60, 65}, - {0x61, 66}, - {0x62, 67}, - {0x63, 68}, - {0x64, 69}, - {0x65, 70}, - {0x66, 71}, - {0x67, 72}, - {0x68, 73}, - {0x69, 74}, - {0x6a, 75}, - {0x6b, 76}, - {0x6c, 77}, - {0x6d, 78}, - {0x6e, 79}, - {0x6f, 80}, - {0x70, 81}, - {0x71, 82}, - {0x72, 83}, - {0x73, 84}, - {0x74, 85}, - {0x75, 86}, - {0x76, 87}, - {0x77, 88}, - {0x78, 89}, - {0x79, 90}, - {0x7a, 91}, - {0x7b, 92}, - {0x7c, 93}, - {0x7d, 94}, - {0x7e, 95}, - {0xa1, 208}, - {0xa4, 214}, - {0xa7, 155}, - {0xa8, 107}, - {0xaa, 668}, - {0xab, 176}, - {0xb0, 138}, - {0xb1, 130}, - {0xb2, 843}, - {0xb3, 844}, - {0xb4, 199}, - {0xb6, 244}, - {0xb8, 206}, - {0xb9, 842}, - {0xba, 675}, - {0xbb, 177}, - {0xbc, 751}, - {0xbd, 748}, - {0xbe, 752}, - {0xbf, 209}, - {0xc6, 666}, - {0xd0, 667}, - {0xd7, 131}, - {0xd8, 673}, - {0xde, 676}, - {0xdf, 768}, - {0xe6, 757}, - {0xf0, 759}, - {0xf7, 132}, - {0xf8, 766}, - {0xfe, 769}, - {0x111, 758}, - {0x126, 669}, - {0x127, 760}, - {0x131, 761}, - {0x132, 670}, - {0x133, 762}, - {0x138, 763}, - {0x13f, 671}, - {0x140, 764}, - {0x141, 672}, - {0x142, 765}, - {0x149, 772}, - {0x14a, 678}, - {0x14b, 771}, - {0x152, 674}, - {0x153, 767}, - {0x166, 677}, - {0x167, 770}, - {0x2bc, 8275}, - {0x2c7, 201}, - {0x2d8, 202}, - {0x2d9, 205}, - {0x2da, 204}, - {0x2db, 207}, - {0x2dc, 200}, - {0x2dd, 203}, - {0x391, 471}, - {0x392, 472}, - {0x393, 473}, - {0x394, 474}, - {0x395, 475}, - {0x396, 476}, - {0x397, 477}, - {0x398, 478}, - {0x399, 479}, - {0x39a, 480}, - {0x39b, 481}, - {0x39c, 482}, - {0x39d, 483}, - {0x39e, 484}, - {0x39f, 485}, - {0x3a0, 486}, - {0x3a1, 487}, - {0x3a3, 488}, - {0x3a4, 489}, - {0x3a5, 490}, - {0x3a6, 491}, - {0x3a7, 492}, - {0x3a8, 493}, - {0x3a9, 494}, - {0x3b1, 495}, - {0x3b2, 496}, - {0x3b3, 497}, - {0x3b4, 498}, - {0x3b5, 499}, - {0x3b6, 500}, - {0x3b7, 501}, - {0x3b8, 502}, - {0x3b9, 503}, - {0x3ba, 504}, - {0x3bb, 505}, - {0x3bc, 506}, - {0x3bd, 507}, - {0x3be, 508}, - {0x3bf, 509}, - {0x3c0, 510}, - {0x3c1, 511}, - {0x3c3, 512}, - {0x3c4, 513}, - {0x3c5, 514}, - {0x3c6, 515}, - {0x3c7, 516}, - {0x3c8, 517}, - {0x3c9, 518}, - {0x401, 1026}, - {0x410, 1020}, - {0x411, 1021}, - {0x412, 1022}, - {0x413, 1023}, - {0x414, 1024}, - {0x415, 1025}, - {0x416, 1027}, - {0x417, 1028}, - {0x418, 1029}, - {0x419, 1030}, - {0x41a, 1031}, - {0x41b, 1032}, - {0x41c, 1033}, - {0x41d, 1034}, - {0x41e, 1035}, - {0x41f, 1036}, - {0x420, 1037}, - {0x421, 1038}, - {0x422, 1039}, - {0x423, 1040}, - {0x424, 1041}, - {0x425, 1042}, - {0x426, 1043}, - {0x427, 1044}, - {0x428, 1045}, - {0x429, 1046}, - {0x42a, 1047}, - {0x42b, 1048}, - {0x42c, 1049}, - {0x42d, 1050}, - {0x42e, 1051}, - {0x42f, 1052}, - {0x430, 1053}, - {0x431, 1054}, - {0x432, 1055}, - {0x433, 1056}, - {0x434, 1057}, - {0x435, 1058}, - {0x436, 1060}, - {0x437, 1061}, - {0x438, 1062}, - {0x439, 1063}, - {0x43a, 1064}, - {0x43b, 1065}, - {0x43c, 1066}, - {0x43d, 1067}, - {0x43e, 1068}, - {0x43f, 1069}, - {0x440, 1070}, - {0x441, 1071}, - {0x442, 1072}, - {0x443, 1073}, - {0x444, 1074}, - {0x445, 1075}, - {0x446, 1076}, - {0x447, 1077}, - {0x448, 1078}, - {0x449, 1079}, - {0x44a, 1080}, - {0x44b, 1081}, - {0x44c, 1082}, - {0x44d, 1083}, - {0x44e, 1084}, - {0x44f, 1085}, - {0x451, 1059}, - {0x2013, 109}, - {0x2014, 110}, - {0x2016, 111}, - {0x2018, 114}, - {0x2019, 115}, - {0x201b, 8238}, - {0x201c, 116}, - {0x201d, 117}, - {0x201f, 8237}, - {0x2020, 245}, - {0x2021, 246}, - {0x2022, 8607}, - {0x2025, 105}, - {0x2026, 106}, - {0x2030, 216}, - {0x2032, 139}, - {0x2033, 140}, - {0x2034, 8582}, - {0x2035, 9326}, - {0x2036, 9324}, - {0x2039, 8612}, - {0x203a, 8613}, - {0x203b, 156}, - {0x203c, 8763}, - {0x2042, 8599}, - {0x2074, 845}, - {0x207a, 8239}, - {0x207b, 8240}, - {0x207c, 8248}, - {0x207d, 8250}, - {0x207e, 8251}, - {0x207f, 846}, - {0x2081, 847}, - {0x2082, 848}, - {0x2083, 849}, - {0x2084, 850}, - {0x2103, 141}, - {0x2109, 215}, - {0x2113, 590}, - {0x2116, 258}, - {0x2121, 263}, - {0x2122, 260}, - {0x2126, 643}, - {0x212b, 142}, - {0x2153, 749}, - {0x2154, 750}, - {0x215b, 753}, - {0x215c, 754}, - {0x215d, 755}, - {0x215e, 756}, - {0x2160, 461}, - {0x2161, 462}, - {0x2162, 463}, - {0x2163, 464}, - {0x2164, 465}, - {0x2165, 466}, - {0x2166, 467}, - {0x2167, 468}, - {0x2168, 469}, - {0x2169, 470}, - {0x2170, 451}, - {0x2171, 452}, - {0x2172, 453}, - {0x2173, 454}, - {0x2174, 455}, - {0x2175, 456}, - {0x2176, 457}, - {0x2177, 458}, - {0x2178, 459}, - {0x2179, 460}, - {0x2190, 171}, - {0x2191, 172}, - {0x2192, 170}, - {0x2193, 173}, - {0x2194, 174}, - {0x2195, 247}, - {0x2196, 250}, - {0x2197, 248}, - {0x2198, 251}, - {0x2199, 249}, - {0x21b0, 8868}, - {0x21b1, 8865}, - {0x21b2, 8864}, - {0x21b3, 8869}, - {0x21b4, 8867}, - {0x21bc, 8884}, - {0x21c0, 8885}, - {0x21c4, 8896}, - {0x21c5, 8897}, - {0x21cd, 8816}, - {0x21cf, 8815}, - {0x21d0, 8814}, - {0x21d1, 8854}, - {0x21d2, 195}, - {0x21d3, 8855}, - {0x21d4, 196}, - {0x21e0, 9190}, - {0x21e1, 9192}, - {0x21e2, 9191}, - {0x21e3, 9193}, - {0x21e6, 9198}, - {0x21e7, 9200}, - {0x21e8, 9199}, - {0x21e9, 9201}, - {0x2200, 197}, - {0x2202, 151}, - {0x2203, 198}, - {0x2206, 8715}, - {0x2207, 152}, - {0x2208, 184}, - {0x2209, 8749}, - {0x220b, 185}, - {0x220c, 8750}, - {0x220f, 213}, - {0x2211, 212}, - {0x2213, 8726}, - {0x221a, 178}, - {0x221d, 180}, - {0x221e, 136}, - {0x221f, 8717}, - {0x2220, 148}, - {0x2222, 8738}, - {0x2225, 8719}, - {0x2226, 8720}, - {0x2227, 192}, - {0x2228, 193}, - {0x2229, 191}, - {0x222a, 190}, - {0x222b, 182}, - {0x222c, 183}, - {0x222e, 211}, - {0x2234, 137}, - {0x2235, 181}, - {0x2236, 210}, - {0x2237, 8321}, - {0x223d, 179}, - {0x2243, 8500}, - {0x2245, 8499}, - {0x2248, 8501}, - {0x2250, 8739}, - {0x2251, 8723}, - {0x2252, 154}, - {0x2253, 8722}, - {0x225a, 8753}, - {0x2260, 133}, - {0x2261, 153}, - {0x2262, 8734}, - {0x2264, 134}, - {0x2265, 135}, - {0x2266, 8724}, - {0x2267, 8725}, - {0x226e, 8745}, - {0x226f, 8746}, - {0x2270, 8481}, - {0x2271, 8482}, - {0x2272, 8483}, - {0x2273, 8484}, - {0x2276, 8489}, - {0x2277, 8490}, - {0x2279, 8491}, - {0x227a, 8475}, - {0x227b, 8476}, - {0x2280, 8479}, - {0x2281, 8480}, - {0x2282, 188}, - {0x2283, 189}, - {0x2284, 8748}, - {0x2285, 8747}, - {0x2286, 186}, - {0x2287, 187}, - {0x228a, 8486}, - {0x228b, 8488}, - {0x2295, 8727}, - {0x2296, 8728}, - {0x2297, 8729}, - {0x22a3, 8742}, - {0x22a4, 8503}, - {0x22a5, 149}, - {0x22bb, 8751}, - {0x22bc, 8752}, - {0x22ce, 8477}, - {0x22cf, 8478}, - {0x22da, 8492}, - {0x22db, 8493}, - {0x22ee, 8320}, - {0x22ef, 106}, - {0x2306, 8754}, - {0x2312, 150}, - {0x2314, 8731}, - {0x2460, 733}, - {0x2461, 734}, - {0x2462, 735}, - {0x2463, 736}, - {0x2464, 737}, - {0x2465, 738}, - {0x2466, 739}, - {0x2467, 740}, - {0x2468, 741}, - {0x2469, 742}, - {0x246a, 743}, - {0x246b, 744}, - {0x246c, 745}, - {0x246d, 746}, - {0x246e, 747}, - {0x246f, 8791}, - {0x2470, 8792}, - {0x2471, 8793}, - {0x2472, 8794}, - {0x2473, 8795}, - {0x2474, 827}, - {0x2475, 828}, - {0x2476, 829}, - {0x2477, 830}, - {0x2478, 831}, - {0x2479, 832}, - {0x247a, 833}, - {0x247b, 834}, - {0x247c, 835}, - {0x247d, 836}, - {0x247e, 837}, - {0x247f, 838}, - {0x2480, 839}, - {0x2481, 840}, - {0x2482, 841}, - {0x2483, 9042}, - {0x2484, 9043}, - {0x2485, 9044}, - {0x2486, 9045}, - {0x2487, 9046}, - {0x249c, 801}, - {0x249d, 802}, - {0x249e, 803}, - {0x249f, 804}, - {0x24a0, 805}, - {0x24a1, 806}, - {0x24a2, 807}, - {0x24a3, 808}, - {0x24a4, 809}, - {0x24a5, 810}, - {0x24a6, 811}, - {0x24a7, 812}, - {0x24a8, 813}, - {0x24a9, 814}, - {0x24aa, 815}, - {0x24ab, 816}, - {0x24ac, 817}, - {0x24ad, 818}, - {0x24ae, 819}, - {0x24af, 820}, - {0x24b0, 821}, - {0x24b1, 822}, - {0x24b2, 823}, - {0x24b3, 824}, - {0x24b4, 825}, - {0x24b5, 826}, - {0x24b6, 8388}, - {0x24b7, 8389}, - {0x24b8, 8390}, - {0x24b9, 8391}, - {0x24ba, 8392}, - {0x24bb, 8393}, - {0x24bc, 8394}, - {0x24bd, 8395}, - {0x24be, 8396}, - {0x24bf, 8397}, - {0x24c0, 8398}, - {0x24c1, 8399}, - {0x24c2, 8400}, - {0x24c3, 8401}, - {0x24c4, 8402}, - {0x24c5, 8403}, - {0x24c6, 8404}, - {0x24c7, 8405}, - {0x24c8, 8406}, - {0x24c9, 8407}, - {0x24ca, 8408}, - {0x24cb, 8409}, - {0x24cc, 8410}, - {0x24cd, 8411}, - {0x24ce, 8412}, - {0x24cf, 8413}, - {0x24d0, 707}, - {0x24d1, 708}, - {0x24d2, 709}, - {0x24d3, 710}, - {0x24d4, 711}, - {0x24d5, 712}, - {0x24d6, 713}, - {0x24d7, 714}, - {0x24d8, 715}, - {0x24d9, 716}, - {0x24da, 717}, - {0x24db, 718}, - {0x24dc, 719}, - {0x24dd, 720}, - {0x24de, 721}, - {0x24df, 722}, - {0x24e0, 723}, - {0x24e1, 724}, - {0x24e2, 725}, - {0x24e3, 726}, - {0x24e4, 727}, - {0x24e5, 728}, - {0x24e6, 729}, - {0x24e7, 730}, - {0x24e8, 731}, - {0x24e9, 732}, - {0x2500, 519}, - {0x2501, 530}, - {0x2502, 520}, - {0x2503, 531}, - {0x250c, 521}, - {0x250d, 558}, - {0x250e, 557}, - {0x250f, 532}, - {0x2510, 522}, - {0x2511, 552}, - {0x2512, 551}, - {0x2513, 533}, - {0x2514, 524}, - {0x2515, 556}, - {0x2516, 555}, - {0x2517, 535}, - {0x2518, 523}, - {0x2519, 554}, - {0x251a, 553}, - {0x251b, 534}, - {0x251c, 525}, - {0x251d, 546}, - {0x251e, 559}, - {0x251f, 560}, - {0x2520, 541}, - {0x2521, 561}, - {0x2522, 562}, - {0x2523, 536}, - {0x2524, 527}, - {0x2525, 548}, - {0x2526, 563}, - {0x2527, 564}, - {0x2528, 543}, - {0x2529, 565}, - {0x252a, 566}, - {0x252b, 538}, - {0x252c, 526}, - {0x252d, 567}, - {0x252e, 568}, - {0x252f, 542}, - {0x2530, 547}, - {0x2531, 569}, - {0x2532, 570}, - {0x2533, 537}, - {0x2534, 528}, - {0x2535, 571}, - {0x2536, 572}, - {0x2537, 544}, - {0x2538, 549}, - {0x2539, 573}, - {0x253a, 574}, - {0x253b, 539}, - {0x253c, 529}, - {0x253d, 575}, - {0x253e, 576}, - {0x253f, 545}, - {0x2540, 577}, - {0x2541, 578}, - {0x2542, 550}, - {0x2543, 579}, - {0x2544, 580}, - {0x2545, 581}, - {0x2546, 582}, - {0x2547, 583}, - {0x2548, 584}, - {0x2549, 585}, - {0x254a, 586}, - {0x254b, 540}, - {0x2592, 232}, - {0x25a0, 165}, - {0x25a1, 164}, - {0x25a3, 229}, - {0x25a4, 233}, - {0x25a5, 234}, - {0x25a6, 237}, - {0x25a7, 236}, - {0x25a8, 235}, - {0x25a9, 238}, - {0x25b1, 8736}, - {0x25b2, 167}, - {0x25b3, 166}, - {0x25b5, 8780}, - {0x25b6, 220}, - {0x25b7, 219}, - {0x25b9, 8781}, - {0x25bc, 169}, - {0x25bd, 168}, - {0x25bf, 8779}, - {0x25c0, 218}, - {0x25c1, 217}, - {0x25c3, 8782}, - {0x25c6, 163}, - {0x25c7, 162}, - {0x25c8, 228}, - {0x25c9, 227}, - {0x25ca, 8787}, - {0x25cb, 159}, - {0x25cc, 8639}, - {0x25ce, 161}, - {0x25cf, 160}, - {0x25d0, 230}, - {0x25d1, 231}, - {0x25e6, 8775}, - {0x25ef, 8633}, - {0x2605, 158}, - {0x2606, 157}, - {0x260e, 241}, - {0x260f, 240}, - {0x261c, 242}, - {0x261d, 9222}, - {0x261e, 243}, - {0x261f, 9223}, - {0x262f, 8664}, - {0x2640, 147}, - {0x2642, 146}, - {0x2660, 222}, - {0x2661, 223}, - {0x2663, 226}, - {0x2664, 221}, - {0x2665, 224}, - {0x2667, 225}, - {0x2668, 239}, - {0x2669, 253}, - {0x266a, 254}, - {0x266c, 255}, - {0x266d, 252}, - {0x266f, 8594}, - {0x2716, 8631}, - {0x271a, 8630}, - {0x273d, 8604}, - {0x2756, 8637}, - {0x2776, 8673}, - {0x2777, 8674}, - {0x2778, 8675}, - {0x2779, 8676}, - {0x277a, 8677}, - {0x277b, 8678}, - {0x277c, 8679}, - {0x277d, 8680}, - {0x277e, 8681}, - {0x277f, 8682}, - {0x278a, 8342}, - {0x278b, 8343}, - {0x278c, 8344}, - {0x278d, 8345}, - {0x278e, 8346}, - {0x278f, 8347}, - {0x2790, 8348}, - {0x2791, 8349}, - {0x2792, 8350}, - {0x2793, 8351}, - {0x3000, 101}, - {0x3001, 102}, - {0x3002, 103}, - {0x3003, 108}, - {0x3008, 120}, - {0x3009, 121}, - {0x300a, 122}, - {0x300b, 123}, - {0x300c, 124}, - {0x300d, 125}, - {0x300e, 126}, - {0x300f, 127}, - {0x3010, 128}, - {0x3011, 129}, - {0x3012, 8700}, - {0x3013, 175}, - {0x3014, 118}, - {0x3015, 119}, - {0x3016, 8219}, - {0x3017, 8220}, - {0x3018, 8221}, - {0x3019, 8222}, - {0x301e, 9322}, - {0x301f, 9323}, - {0x3020, 8671}, - {0x3036, 8701}, - {0x3041, 851}, - {0x3042, 852}, - {0x3043, 853}, - {0x3044, 854}, - {0x3045, 855}, - {0x3046, 856}, - {0x3047, 857}, - {0x3048, 858}, - {0x3049, 859}, - {0x304a, 860}, - {0x304b, 861}, - {0x304c, 862}, - {0x304d, 863}, - {0x304e, 864}, - {0x304f, 865}, - {0x3050, 866}, - {0x3051, 867}, - {0x3052, 868}, - {0x3053, 869}, - {0x3054, 870}, - {0x3055, 871}, - {0x3056, 872}, - {0x3057, 873}, - {0x3058, 874}, - {0x3059, 875}, - {0x305a, 876}, - {0x305b, 877}, - {0x305c, 878}, - {0x305d, 879}, - {0x305e, 880}, - {0x305f, 881}, - {0x3060, 882}, - {0x3061, 883}, - {0x3062, 884}, - {0x3063, 885}, - {0x3064, 886}, - {0x3065, 887}, - {0x3066, 888}, - {0x3067, 889}, - {0x3068, 890}, - {0x3069, 891}, - {0x306a, 892}, - {0x306b, 893}, - {0x306c, 894}, - {0x306d, 895}, - {0x306e, 896}, - {0x306f, 897}, - {0x3070, 898}, - {0x3071, 899}, - {0x3072, 900}, - {0x3073, 901}, - {0x3074, 902}, - {0x3075, 903}, - {0x3076, 904}, - {0x3077, 905}, - {0x3078, 906}, - {0x3079, 907}, - {0x307a, 908}, - {0x307b, 909}, - {0x307c, 910}, - {0x307d, 911}, - {0x307e, 912}, - {0x307f, 913}, - {0x3080, 914}, - {0x3081, 915}, - {0x3082, 916}, - {0x3083, 917}, - {0x3084, 918}, - {0x3085, 919}, - {0x3086, 920}, - {0x3087, 921}, - {0x3088, 922}, - {0x3089, 923}, - {0x308a, 924}, - {0x308b, 925}, - {0x308c, 926}, - {0x308d, 927}, - {0x308e, 928}, - {0x308f, 929}, - {0x3090, 930}, - {0x3091, 931}, - {0x3092, 932}, - {0x3093, 933}, - {0x30a1, 934}, - {0x30a2, 935}, - {0x30a3, 936}, - {0x30a4, 937}, - {0x30a5, 938}, - {0x30a6, 939}, - {0x30a7, 940}, - {0x30a8, 941}, - {0x30a9, 942}, - {0x30aa, 943}, - {0x30ab, 944}, - {0x30ac, 945}, - {0x30ad, 946}, - {0x30ae, 947}, - {0x30af, 948}, - {0x30b0, 949}, - {0x30b1, 950}, - {0x30b2, 951}, - {0x30b3, 952}, - {0x30b4, 953}, - {0x30b5, 954}, - {0x30b6, 955}, - {0x30b7, 956}, - {0x30b8, 957}, - {0x30b9, 958}, - {0x30ba, 959}, - {0x30bb, 960}, - {0x30bc, 961}, - {0x30bd, 962}, - {0x30be, 963}, - {0x30bf, 964}, - {0x30c0, 965}, - {0x30c1, 966}, - {0x30c2, 967}, - {0x30c3, 968}, - {0x30c4, 969}, - {0x30c5, 970}, - {0x30c6, 971}, - {0x30c7, 972}, - {0x30c8, 973}, - {0x30c9, 974}, - {0x30ca, 975}, - {0x30cb, 976}, - {0x30cc, 977}, - {0x30cd, 978}, - {0x30ce, 979}, - {0x30cf, 980}, - {0x30d0, 981}, - {0x30d1, 982}, - {0x30d2, 983}, - {0x30d3, 984}, - {0x30d4, 985}, - {0x30d5, 986}, - {0x30d6, 987}, - {0x30d7, 988}, - {0x30d8, 989}, - {0x30d9, 990}, - {0x30da, 991}, - {0x30db, 992}, - {0x30dc, 993}, - {0x30dd, 994}, - {0x30de, 995}, - {0x30df, 996}, - {0x30e0, 997}, - {0x30e1, 998}, - {0x30e2, 999}, - {0x30e3, 1000}, - {0x30e4, 1001}, - {0x30e5, 1002}, - {0x30e6, 1003}, - {0x30e7, 1004}, - {0x30e8, 1005}, - {0x30e9, 1006}, - {0x30ea, 1007}, - {0x30eb, 1008}, - {0x30ec, 1009}, - {0x30ed, 1010}, - {0x30ee, 1011}, - {0x30ef, 1012}, - {0x30f0, 1013}, - {0x30f1, 1014}, - {0x30f2, 1015}, - {0x30f3, 1016}, - {0x30f4, 1017}, - {0x30f5, 1018}, - {0x30f6, 1019}, - {0x30fb, 104}, - {0x30fc, 9330}, - {0x3131, 358}, - {0x3132, 359}, - {0x3133, 360}, - {0x3134, 361}, - {0x3135, 362}, - {0x3136, 363}, - {0x3137, 364}, - {0x3138, 365}, - {0x3139, 366}, - {0x313a, 367}, - {0x313b, 368}, - {0x313c, 369}, - {0x313d, 370}, - {0x313e, 371}, - {0x313f, 372}, - {0x3140, 373}, - {0x3141, 374}, - {0x3142, 375}, - {0x3143, 376}, - {0x3144, 377}, - {0x3145, 378}, - {0x3146, 379}, - {0x3147, 380}, - {0x3148, 381}, - {0x3149, 382}, - {0x314a, 383}, - {0x314b, 384}, - {0x314c, 385}, - {0x314d, 386}, - {0x314e, 387}, - {0x314f, 388}, - {0x3150, 389}, - {0x3151, 390}, - {0x3152, 391}, - {0x3153, 392}, - {0x3154, 393}, - {0x3155, 394}, - {0x3156, 395}, - {0x3157, 396}, - {0x3158, 397}, - {0x3159, 398}, - {0x315a, 399}, - {0x315b, 400}, - {0x315c, 401}, - {0x315d, 402}, - {0x315e, 403}, - {0x315f, 404}, - {0x3160, 405}, - {0x3161, 406}, - {0x3162, 407}, - {0x3163, 408}, - {0x3164, 101}, - {0x3165, 409}, - {0x3166, 410}, - {0x3167, 411}, - {0x3168, 412}, - {0x3169, 413}, - {0x316a, 414}, - {0x316b, 415}, - {0x316c, 416}, - {0x316d, 417}, - {0x316e, 418}, - {0x316f, 419}, - {0x3170, 420}, - {0x3171, 421}, - {0x3172, 422}, - {0x3173, 423}, - {0x3174, 424}, - {0x3175, 425}, - {0x3176, 426}, - {0x3177, 427}, - {0x3178, 428}, - {0x3179, 429}, - {0x317a, 430}, - {0x317b, 431}, - {0x317c, 432}, - {0x317d, 433}, - {0x317e, 434}, - {0x317f, 435}, - {0x3180, 436}, - {0x3181, 437}, - {0x3182, 438}, - {0x3183, 439}, - {0x3184, 440}, - {0x3185, 441}, - {0x3186, 442}, - {0x3187, 443}, - {0x3188, 444}, - {0x3189, 445}, - {0x318a, 446}, - {0x318b, 447}, - {0x318c, 448}, - {0x318d, 449}, - {0x318e, 450}, - {0x3200, 773}, - {0x3201, 774}, - {0x3202, 775}, - {0x3203, 776}, - {0x3204, 777}, - {0x3205, 778}, - {0x3206, 779}, - {0x3207, 780}, - {0x3208, 781}, - {0x3209, 782}, - {0x320a, 783}, - {0x320b, 784}, - {0x320c, 785}, - {0x320d, 786}, - {0x320e, 787}, - {0x320f, 788}, - {0x3210, 789}, - {0x3211, 790}, - {0x3212, 791}, - {0x3213, 792}, - {0x3214, 793}, - {0x3215, 794}, - {0x3216, 795}, - {0x3217, 796}, - {0x3218, 797}, - {0x3219, 798}, - {0x321a, 799}, - {0x321b, 800}, - {0x321c, 257}, - {0x3231, 8788}, - {0x3239, 8789}, - {0x3260, 679}, - {0x3261, 680}, - {0x3262, 681}, - {0x3263, 682}, - {0x3264, 683}, - {0x3265, 684}, - {0x3266, 685}, - {0x3267, 686}, - {0x3268, 687}, - {0x3269, 688}, - {0x326a, 689}, - {0x326b, 690}, - {0x326c, 691}, - {0x326d, 692}, - {0x326e, 693}, - {0x326f, 694}, - {0x3270, 695}, - {0x3271, 696}, - {0x3272, 697}, - {0x3273, 698}, - {0x3274, 699}, - {0x3275, 700}, - {0x3276, 701}, - {0x3277, 702}, - {0x3278, 703}, - {0x3279, 704}, - {0x327a, 705}, - {0x327b, 706}, - {0x327f, 256}, - {0x328a, 9301}, - {0x328b, 9302}, - {0x328c, 9303}, - {0x328d, 9304}, - {0x328e, 9305}, - {0x328f, 9306}, - {0x3290, 9300}, - {0x3294, 9080}, - {0x329e, 8761}, - {0x32a5, 9096}, - {0x3380, 627}, - {0x3381, 628}, - {0x3382, 629}, - {0x3383, 630}, - {0x3384, 631}, - {0x3388, 612}, - {0x3389, 613}, - {0x338a, 646}, - {0x338b, 647}, - {0x338c, 648}, - {0x338d, 608}, - {0x338e, 609}, - {0x338f, 610}, - {0x3390, 638}, - {0x3391, 639}, - {0x3392, 640}, - {0x3393, 641}, - {0x3394, 642}, - {0x3395, 587}, - {0x3396, 588}, - {0x3397, 589}, - {0x3398, 591}, - {0x3399, 597}, - {0x339a, 598}, - {0x339b, 599}, - {0x339c, 600}, - {0x339d, 601}, - {0x339e, 602}, - {0x339f, 603}, - {0x33a0, 604}, - {0x33a1, 605}, - {0x33a2, 606}, - {0x33a3, 593}, - {0x33a4, 594}, - {0x33a5, 595}, - {0x33a6, 596}, - {0x33a7, 615}, - {0x33a8, 616}, - {0x33a9, 655}, - {0x33aa, 656}, - {0x33ab, 657}, - {0x33ac, 658}, - {0x33ad, 651}, - {0x33ae, 652}, - {0x33af, 653}, - {0x33b0, 617}, - {0x33b1, 618}, - {0x33b2, 619}, - {0x33b3, 620}, - {0x33b4, 621}, - {0x33b5, 622}, - {0x33b6, 623}, - {0x33b7, 624}, - {0x33b8, 625}, - {0x33b9, 626}, - {0x33ba, 632}, - {0x33bb, 633}, - {0x33bc, 634}, - {0x33bd, 635}, - {0x33be, 636}, - {0x33bf, 637}, - {0x33c0, 644}, - {0x33c1, 645}, - {0x33c2, 261}, - {0x33c3, 662}, - {0x33c4, 592}, - {0x33c5, 650}, - {0x33c6, 665}, - {0x33c7, 259}, - {0x33c8, 614}, - {0x33c9, 663}, - {0x33ca, 607}, - {0x33cb, 8790}, - {0x33cf, 611}, - {0x33d0, 660}, - {0x33d3, 661}, - {0x33d6, 649}, - {0x33d8, 262}, - {0x33db, 654}, - {0x33dc, 664}, - {0x33dd, 659}, - {0x4e00, 6460}, - {0x4e01, 6704}, - {0x4e03, 7364}, - {0x4e07, 4670}, - {0x4e08, 6534}, - {0x4e09, 5320}, - {0x4e0a, 5331}, - {0x4e0b, 7616}, - {0x4e0d, 5109}, - {0x4e11, 7288}, - {0x4e14, 7041}, - {0x4e15, 5181}, - {0x4e16, 5492}, - {0x4e18, 3893}, - {0x4e19, 5041}, - {0x4e1e, 5682}, - {0x4e2d, 6922}, - {0x4e32, 3802}, - {0x4e38, 7882}, - {0x4e39, 4192}, - {0x4e3b, 6860}, - {0x4e42, 6029}, - {0x4e43, 4154}, - {0x4e45, 3894}, - {0x4e4b, 6942}, - {0x4e4d, 5241}, - {0x4e4e, 7800}, - {0x4e4f, 7614}, - {0x4e56, 3855}, - {0x4e58, 5683}, - {0x4e59, 6380}, - {0x4e5d, 3895}, - {0x4e5e, 3613}, - {0x4e5f, 5862}, - {0x4e6b, 3500}, - {0x4e6d, 4329}, - {0x4e73, 6309}, - {0x4e76, 5092}, - {0x4e77, 5315}, - {0x4e7e, 3601}, - {0x4e82, 4389}, - {0x4e86, 4551}, - {0x4e88, 5934}, - {0x4e8b, 5242}, - {0x4e8c, 6413}, - {0x4e8e, 6197}, - {0x4e90, 6252}, - {0x4e91, 6238}, - {0x4e92, 7801}, - {0x4e94, 6049}, - {0x4e95, 6705}, - {0x4e98, 4058}, - {0x4e9b, 5243}, - {0x4e9e, 5775}, - {0x4ea1, 4696}, - {0x4ea2, 7670}, - {0x4ea4, 3868}, - {0x4ea5, 7685}, - {0x4ea6, 5947}, - {0x4ea8, 7771}, - {0x4eab, 7710}, - {0x4eac, 3660}, - {0x4ead, 6706}, - {0x4eae, 4427}, - {0x4eb6, 4193}, - {0x4eba, 6443}, - {0x4ec0, 5771}, - {0x4ec1, 6444}, - {0x4ec4, 7331}, - {0x4ec7, 3896}, - {0x4eca, 4038}, - {0x4ecb, 3560}, - {0x4ecd, 6479}, - {0x4ed4, 6483}, - {0x4ed5, 5244}, - {0x4ed6, 7380}, - {0x4ed7, 6535}, - {0x4ed8, 5110}, - {0x4ed9, 5418}, - {0x4edd, 4331}, - {0x4edf, 7148}, - {0x4ee3, 4250}, - {0x4ee4, 4489}, - {0x4ee5, 6414}, - {0x4ef0, 5833}, - {0x4ef2, 6923}, - {0x4ef6, 3602}, - {0x4ef7, 3561}, - {0x4efb, 6469}, - {0x4f01, 4062}, - {0x4f09, 7671}, - {0x4f0a, 6415}, - {0x4f0b, 4051}, - {0x4f0d, 6050}, - {0x4f0e, 4063}, - {0x4f0f, 5074}, - {0x4f10, 5005}, - {0x4f11, 8005}, - {0x4f2f, 4988}, - {0x4f34, 4905}, - {0x4f36, 4490}, - {0x4f38, 5735}, - {0x4f3a, 5245}, - {0x4f3c, 5246}, - {0x4f3d, 3436}, - {0x4f43, 6643}, - {0x4f46, 4194}, - {0x4f47, 6591}, - {0x4f48, 7544}, - {0x4f4d, 6284}, - {0x4f4e, 6592}, - {0x4f4f, 6861}, - {0x4f50, 6854}, - {0x4f51, 6198}, - {0x4f55, 7617}, - {0x4f59, 5935}, - {0x4f5a, 6461}, - {0x4f5b, 5171}, - {0x4f5c, 6509}, - {0x4f69, 7502}, - {0x4f6f, 5879}, - {0x4f70, 4989}, - {0x4f73, 3437}, - {0x4f76, 4127}, - {0x4f7a, 6644}, - {0x4f7e, 6462}, - {0x4f7f, 5247}, - {0x4f81, 5736}, - {0x4f83, 3476}, - {0x4f84, 7015}, - {0x4f86, 4420}, - {0x4f88, 7336}, - {0x4f8a, 3839}, - {0x4f8b, 4506}, - {0x4f8d, 5692}, - {0x4f8f, 6862}, - {0x4f91, 6310}, - {0x4f96, 4594}, - {0x4f98, 7042}, - {0x4f9b, 3786}, - {0x4f9d, 6394}, - {0x4fae, 4764}, - {0x4faf, 7966}, - {0x4fb5, 7367}, - {0x4fb6, 4440}, - {0x4fbf, 7518}, - {0x4fc2, 3705}, - {0x4fc3, 7241}, - {0x4fc4, 5776}, - {0x4fc9, 6051}, - {0x4fca, 6902}, - {0x4fce, 6782}, - {0x4fd1, 6174}, - {0x4fd3, 3661}, - {0x4fd4, 7734}, - {0x4fd7, 5537}, - {0x4fda, 4613}, - {0x4fdd, 5058}, - {0x4fdf, 5248}, - {0x4fe0, 7759}, - {0x4fe1, 5737}, - {0x4fee, 5567}, - {0x4fef, 5111}, - {0x4ff1, 3897}, - {0x4ff3, 4970}, - {0x4ff5, 7576}, - {0x4ff8, 5093}, - {0x4ffa, 5925}, - {0x5002, 5042}, - {0x5006, 4428}, - {0x5009, 7092}, - {0x500b, 3562}, - {0x500d, 4969}, - {0x5011, 4836}, - {0x5012, 4269}, - {0x5016, 7705}, - {0x5019, 7967}, - {0x501a, 6395}, - {0x501c, 7134}, - {0x501e, 3662}, - {0x501f, 7043}, - {0x5021, 7093}, - {0x5023, 4941}, - {0x5024, 7337}, - {0x5026, 3969}, - {0x5027, 6837}, - {0x5028, 3585}, - {0x502a, 6030}, - {0x502b, 4595}, - {0x502c, 7394}, - {0x502d, 6131}, - {0x503b, 5863}, - {0x5043, 5917}, - {0x5047, 3438}, - {0x5048, 3627}, - {0x5049, 6285}, - {0x504f, 7519}, - {0x5055, 7686}, - {0x505a, 6863}, - {0x505c, 6707}, - {0x5065, 3603}, - {0x5074, 7330}, - {0x5075, 6708}, - {0x5076, 6199}, - {0x5078, 7465}, - {0x5080, 3856}, - {0x5085, 5112}, - {0x508d, 4942}, - {0x5091, 3614}, - {0x5098, 5303}, - {0x5099, 5182}, - {0x50ac, 7262}, - {0x50ad, 6175}, - {0x50b2, 6052}, - {0x50b3, 6645}, - {0x50b5, 7114}, - {0x50b7, 5332}, - {0x50be, 3663}, - {0x50c5, 4023}, - {0x50c9, 7177}, - {0x50ca, 5419}, - {0x50cf, 5333}, - {0x50d1, 3869}, - {0x50d5, 5075}, - {0x50d6, 8035}, - {0x50da, 4552}, - {0x50de, 6286}, - {0x50e5, 6140}, - {0x50e7, 5684}, - {0x50ed, 7082}, - {0x50f9, 3439}, - {0x50fb, 5020}, - {0x50ff, 5249}, - {0x5100, 6396}, - {0x5101, 6903}, - {0x5104, 5912}, - {0x5106, 3664}, - {0x5109, 3617}, - {0x5112, 6311}, - {0x511f, 5334}, - {0x5121, 4543}, - {0x512a, 6200}, - {0x5132, 6593}, - {0x5137, 4441}, - {0x513a, 4133}, - {0x513c, 5926}, - {0x5140, 6089}, - {0x5141, 6359}, - {0x5143, 6255}, - {0x5144, 7772}, - {0x5145, 7306}, - {0x5146, 6783}, - {0x5147, 8013}, - {0x5148, 5420}, - {0x5149, 3840}, - {0x514b, 4016}, - {0x514c, 7431}, - {0x514d, 4735}, - {0x514e, 7449}, - {0x5152, 5777}, - {0x515c, 4348}, - {0x5162, 4059}, - {0x5165, 6477}, - {0x5167, 4155}, - {0x5168, 6646}, - {0x5169, 4429}, - {0x516a, 6312}, - {0x516b, 7499}, - {0x516c, 3787}, - {0x516d, 4591}, - {0x516e, 7791}, - {0x5171, 3788}, - {0x5175, 5043}, - {0x5176, 4064}, - {0x5177, 3898}, - {0x5178, 6647}, - {0x517c, 3654}, - {0x5180, 4065}, - {0x5186, 5933}, - {0x518a, 7126}, - {0x518d, 6570}, - {0x5192, 4765}, - {0x5195, 4736}, - {0x5197, 6176}, - {0x51a0, 3819}, - {0x51a5, 4748}, - {0x51aa, 4733}, - {0x51ac, 4332}, - {0x51b6, 5864}, - {0x51b7, 4424}, - {0x51bd, 4477}, - {0x51c4, 7130}, - {0x51c6, 6904}, - {0x51c9, 4430}, - {0x51cb, 6784}, - {0x51cc, 4607}, - {0x51cd, 4333}, - {0x51dc, 4606}, - {0x51dd, 6390}, - {0x51de, 8036}, - {0x51e1, 5009}, - {0x51f0, 7904}, - {0x51f1, 3563}, - {0x51f6, 8014}, - {0x51f8, 7167}, - {0x51f9, 6141}, - {0x51fa, 7303}, - {0x51fd, 7651}, - {0x5200, 4270}, - {0x5203, 6445}, - {0x5206, 5152}, - {0x5207, 6684}, - {0x5208, 6031}, - {0x520a, 3477}, - {0x520e, 4837}, - {0x5211, 7773}, - {0x5217, 4478}, - {0x521d, 7214}, - {0x5224, 7490}, - {0x5225, 5037}, - {0x5229, 4614}, - {0x522a, 5304}, - {0x522e, 3835}, - {0x5230, 4271}, - {0x5236, 6759}, - {0x5237, 5561}, - {0x5238, 3970}, - {0x5239, 7077}, - {0x523a, 6484}, - {0x523b, 3465}, - {0x5243, 7205}, - {0x5247, 7360}, - {0x524a, 5301}, - {0x524b, 4017}, - {0x524c, 4397}, - {0x524d, 6648}, - {0x5254, 7135}, - {0x5256, 5113}, - {0x525b, 3536}, - {0x525d, 4886}, - {0x5261, 5463}, - {0x5269, 6480}, - {0x526a, 6649}, - {0x526f, 5114}, - {0x5272, 7649}, - {0x5275, 7094}, - {0x527d, 7577}, - {0x527f, 7215}, - {0x5283, 7948}, - {0x5287, 4018}, - {0x5288, 5021}, - {0x5289, 4577}, - {0x528d, 3618}, - {0x5291, 6760}, - {0x5292, 3619}, - {0x529b, 4458}, - {0x529f, 3789}, - {0x52a0, 3440}, - {0x52a3, 4479}, - {0x52a4, 4024}, - {0x52a9, 6785}, - {0x52aa, 4169}, - {0x52ab, 3624}, - {0x52be, 7703}, - {0x52c1, 3665}, - {0x52c3, 4930}, - {0x52c5, 7361}, - {0x52c7, 6177}, - {0x52c9, 4737}, - {0x52cd, 3666}, - {0x52d2, 4604}, - {0x52d5, 4334}, - {0x52d6, 6229}, - {0x52d8, 3510}, - {0x52d9, 4812}, - {0x52db, 7979}, - {0x52dd, 5685}, - {0x52de, 4511}, - {0x52df, 4766}, - {0x52e2, 5493}, - {0x52e3, 6619}, - {0x52e4, 4025}, - {0x52f3, 7980}, - {0x52f5, 4442}, - {0x52f8, 3971}, - {0x52fa, 6510}, - {0x52fb, 4009}, - {0x52fe, 3899}, - {0x52ff, 4848}, - {0x5305, 7545}, - {0x5308, 8015}, - {0x530d, 7546}, - {0x530f, 7547}, - {0x5310, 5076}, - {0x5315, 5183}, - {0x5316, 7863}, - {0x5317, 5151}, - {0x5319, 5693}, - {0x5320, 6536}, - {0x5321, 3841}, - {0x5323, 3530}, - {0x532a, 5184}, - {0x532f, 7928}, - {0x5339, 7604}, - {0x533f, 4188}, - {0x5340, 3900}, - {0x5341, 5772}, - {0x5343, 7149}, - {0x5344, 6478}, - {0x5347, 5686}, - {0x5348, 6053}, - {0x5349, 7994}, - {0x534a, 4906}, - {0x534d, 4671}, - {0x5351, 5185}, - {0x5352, 6834}, - {0x5353, 7395}, - {0x5354, 7760}, - {0x5357, 4145}, - {0x535a, 4887}, - {0x535c, 5077}, - {0x535e, 5031}, - {0x5360, 6692}, - {0x5366, 3852}, - {0x5368, 5450}, - {0x536f, 4800}, - {0x5370, 6446}, - {0x5371, 6287}, - {0x5374, 3466}, - {0x5375, 4390}, - {0x5377, 3972}, - {0x537d, 6926}, - {0x537f, 3667}, - {0x5384, 5851}, - {0x5393, 5840}, - {0x5398, 4615}, - {0x539a, 7968}, - {0x539f, 6256}, - {0x53a0, 7332}, - {0x53a5, 3979}, - {0x53a6, 7618}, - {0x53ad, 5989}, - {0x53bb, 3586}, - {0x53c3, 7083}, - {0x53c8, 6201}, - {0x53c9, 7044}, - {0x53ca, 4052}, - {0x53cb, 6202}, - {0x53cd, 4907}, - {0x53d4, 5628}, - {0x53d6, 7316}, - {0x53d7, 5568}, - {0x53db, 4908}, - {0x53e1, 6032}, - {0x53e2, 7251}, - {0x53e3, 3901}, - {0x53e4, 3729}, - {0x53e5, 3902}, - {0x53e9, 3730}, - {0x53ea, 6943}, - {0x53eb, 3994}, - {0x53ec, 5500}, - {0x53ed, 7500}, - {0x53ef, 3441}, - {0x53f0, 7432}, - {0x53f1, 7016}, - {0x53f2, 5250}, - {0x53f3, 6203}, - {0x53f8, 5251}, - {0x5403, 8023}, - {0x5404, 3467}, - {0x5408, 7663}, - {0x5409, 4128}, - {0x540a, 6620}, - {0x540c, 4335}, - {0x540d, 4749}, - {0x540e, 7969}, - {0x540f, 4616}, - {0x5410, 7450}, - {0x5411, 7711}, - {0x541b, 3953}, - {0x541d, 4638}, - {0x541f, 6381}, - {0x5420, 7534}, - {0x5426, 5115}, - {0x5429, 5153}, - {0x542b, 7652}, - {0x5433, 6055}, - {0x5438, 8030}, - {0x5439, 7317}, - {0x543b, 4838}, - {0x543c, 7970}, - {0x543e, 6054}, - {0x5442, 4443}, - {0x5448, 6709}, - {0x544a, 3731}, - {0x5451, 7408}, - {0x5468, 6867}, - {0x546a, 6866}, - {0x5471, 3732}, - {0x5473, 4851}, - {0x5475, 3442}, - {0x547b, 5738}, - {0x547c, 7802}, - {0x547d, 4750}, - {0x5480, 6594}, - {0x5486, 7548}, - {0x548c, 7864}, - {0x548e, 3903}, - {0x5490, 5116}, - {0x54a4, 7381}, - {0x54a8, 6485}, - {0x54ab, 6944}, - {0x54ac, 3870}, - {0x54b3, 7687}, - {0x54b8, 7653}, - {0x54bd, 6447}, - {0x54c0, 5841}, - {0x54c1, 7590}, - {0x54c4, 7853}, - {0x54c8, 7664}, - {0x54c9, 6571}, - {0x54e1, 6257}, - {0x54e5, 3443}, - {0x54e8, 7216}, - {0x54ed, 3767}, - {0x54ee, 7953}, - {0x54f2, 7168}, - {0x54fa, 7549}, - {0x5504, 7503}, - {0x5506, 5252}, - {0x5507, 6980}, - {0x550e, 4617}, - {0x5510, 4239}, - {0x551c, 4689}, - {0x552f, 6313}, - {0x5531, 7095}, - {0x5535, 5821}, - {0x553e, 7382}, - {0x5544, 7396}, - {0x5546, 5335}, - {0x554f, 4839}, - {0x5553, 3706}, - {0x5556, 4217}, - {0x555e, 5778}, - {0x5563, 7654}, - {0x557c, 6761}, - {0x5580, 3579}, - {0x5584, 5421}, - {0x5586, 7169}, - {0x5587, 4374}, - {0x5589, 7971}, - {0x558a, 7655}, - {0x5598, 7150}, - {0x5599, 7995}, - {0x559a, 7883}, - {0x559c, 8037}, - {0x559d, 3501}, - {0x55a7, 7990}, - {0x55a9, 6314}, - {0x55aa, 5336}, - {0x55ab, 4132}, - {0x55ac, 3871}, - {0x55ae, 4195}, - {0x55c5, 7972}, - {0x55c7, 5365}, - {0x55d4, 6981}, - {0x55da, 6056}, - {0x55dc, 4066}, - {0x55df, 7045}, - {0x55e3, 5253}, - {0x55e4, 7338}, - {0x55fd, 5569}, - {0x55fe, 6868}, - {0x5606, 7409}, - {0x5609, 3444}, - {0x5614, 3904}, - {0x5617, 5337}, - {0x562f, 5501}, - {0x5632, 6786}, - {0x5634, 7318}, - {0x5636, 5694}, - {0x5653, 7719}, - {0x5668, 4067}, - {0x566b, 8038}, - {0x5674, 5154}, - {0x5686, 7954}, - {0x56a5, 5956}, - {0x56ac, 5223}, - {0x56ae, 7712}, - {0x56b4, 5927}, - {0x56bc, 6511}, - {0x56ca, 4152}, - {0x56cd, 8039}, - {0x56d1, 7242}, - {0x56da, 5570}, - {0x56db, 5254}, - {0x56de, 7929}, - {0x56e0, 6448}, - {0x56f0, 3774}, - {0x56f9, 4491}, - {0x56fa, 3733}, - {0x5703, 7550}, - {0x5704, 5902}, - {0x5708, 3973}, - {0x570b, 3947}, - {0x570d, 6288}, - {0x5712, 6259}, - {0x5713, 6258}, - {0x5716, 4272}, - {0x5718, 4196}, - {0x571f, 7451}, - {0x5728, 6572}, - {0x572d, 3995}, - {0x5730, 6945}, - {0x573b, 4068}, - {0x5740, 6946}, - {0x5742, 7491}, - {0x5747, 4010}, - {0x574a, 4943}, - {0x574d, 4218}, - {0x574e, 3511}, - {0x5750, 6855}, - {0x5751, 3581}, - {0x5761, 7474}, - {0x5764, 3775}, - {0x5766, 7410}, - {0x576a, 7529}, - {0x576e, 4252}, - {0x5770, 3668}, - {0x5775, 3905}, - {0x577c, 7397}, - {0x5782, 5571}, - {0x5788, 4251}, - {0x578b, 7774}, - {0x5793, 7688}, - {0x57a0, 6373}, - {0x57a2, 3906}, - {0x57a3, 6260}, - {0x57c3, 5842}, - {0x57c7, 6178}, - {0x57c8, 6905}, - {0x57cb, 4708}, - {0x57ce, 5474}, - {0x57df, 5948}, - {0x57e0, 5117}, - {0x57f0, 7115}, - {0x57f4, 5720}, - {0x57f7, 7032}, - {0x57f9, 4971}, - {0x57fa, 4069}, - {0x57fc, 4070}, - {0x5800, 3959}, - {0x5802, 4240}, - {0x5805, 3637}, - {0x5806, 7459}, - {0x5808, 3537}, - {0x5809, 6355}, - {0x580a, 5793}, - {0x581e, 7187}, - {0x5821, 5059}, - {0x5824, 6762}, - {0x5827, 5957}, - {0x582a, 3512}, - {0x582f, 6142}, - {0x5830, 5918}, - {0x5831, 5060}, - {0x5834, 6537}, - {0x5835, 4273}, - {0x583a, 3707}, - {0x584a, 3857}, - {0x584b, 6002}, - {0x584f, 3564}, - {0x5851, 5502}, - {0x5854, 7424}, - {0x5857, 4274}, - {0x5858, 4241}, - {0x585a, 7252}, - {0x585e, 5362}, - {0x5861, 6650}, - {0x5862, 6057}, - {0x5864, 7981}, - {0x5875, 6982}, - {0x5879, 7084}, - {0x587c, 6651}, - {0x587e, 5629}, - {0x5883, 3669}, - {0x5885, 5373}, - {0x5889, 6179}, - {0x5893, 4801}, - {0x589c, 7265}, - {0x589e, 6931}, - {0x589f, 7720}, - {0x58a8, 4834}, - {0x58a9, 4319}, - {0x58ae, 7383}, - {0x58b3, 5155}, - {0x58ba, 6058}, - {0x58bb, 6538}, - {0x58be, 3478}, - {0x58c1, 5022}, - {0x58c5, 6090}, - {0x58c7, 4197}, - {0x58ce, 7982}, - {0x58d1, 7630}, - {0x58d3, 5829}, - {0x58d5, 7803}, - {0x58d8, 4564}, - {0x58d9, 3842}, - {0x58de, 3858}, - {0x58df, 4536}, - {0x58e4, 5880}, - {0x58eb, 5255}, - {0x58ec, 6470}, - {0x58ef, 6539}, - {0x58f9, 6463}, - {0x58fa, 7804}, - {0x58fb, 5374}, - {0x58fd, 5572}, - {0x590f, 7619}, - {0x5914, 4071}, - {0x5915, 5403}, - {0x5916, 6135}, - {0x5919, 5630}, - {0x591a, 4190}, - {0x591c, 5865}, - {0x5922, 4797}, - {0x5927, 4253}, - {0x5929, 7151}, - {0x592a, 7433}, - {0x592b, 5118}, - {0x592d, 6143}, - {0x592e, 5834}, - {0x5931, 5758}, - {0x5937, 6416}, - {0x593e, 7761}, - {0x5944, 5928}, - {0x5947, 4072}, - {0x5948, 4156}, - {0x5949, 5094}, - {0x594e, 3996}, - {0x594f, 6869}, - {0x5950, 7884}, - {0x5951, 3708}, - {0x5954, 5156}, - {0x5955, 7730}, - {0x5957, 7466}, - {0x595a, 7689}, - {0x5960, 6652}, - {0x5962, 5256}, - {0x5967, 6059}, - {0x596a, 7418}, - {0x596b, 6360}, - {0x596c, 6540}, - {0x596d, 5404}, - {0x596e, 5157}, - {0x5973, 4159}, - {0x5974, 4170}, - {0x5978, 3479}, - {0x597d, 7805}, - {0x5982, 5936}, - {0x5983, 5186}, - {0x5984, 4697}, - {0x598a, 6471}, - {0x5993, 4073}, - {0x5996, 6144}, - {0x5997, 4039}, - {0x5999, 4802}, - {0x59a5, 7384}, - {0x59a8, 4944}, - {0x59ac, 7467}, - {0x59b9, 4709}, - {0x59bb, 7131}, - {0x59be, 7188}, - {0x59c3, 6710}, - {0x59c6, 4767}, - {0x59c9, 6486}, - {0x59cb, 5695}, - {0x59d0, 6595}, - {0x59d1, 3734}, - {0x59d3, 5475}, - {0x59d4, 6289}, - {0x59d9, 6472}, - {0x59da, 6145}, - {0x59dc, 3538}, - {0x59dd, 6864}, - {0x59e6, 3480}, - {0x59e8, 6417}, - {0x59ea, 7017}, - {0x59ec, 8040}, - {0x59ee, 7672}, - {0x59f8, 5958}, - {0x59fb, 6449}, - {0x59ff, 6487}, - {0x5a01, 6290}, - {0x5a03, 6132}, - {0x5a11, 5257}, - {0x5a18, 4153}, - {0x5a1b, 6060}, - {0x5a1c, 4134}, - {0x5a1f, 5959}, - {0x5a20, 5739}, - {0x5a25, 5779}, - {0x5a29, 4672}, - {0x5a36, 7319}, - {0x5a3c, 7096}, - {0x5a41, 4565}, - {0x5a46, 7475}, - {0x5a49, 6107}, - {0x5a5a, 7844}, - {0x5a62, 5187}, - {0x5a66, 5119}, - {0x5a92, 4710}, - {0x5a9a, 4852}, - {0x5a9b, 6261}, - {0x5aa4, 5696}, - {0x5ac1, 3445}, - {0x5ac2, 5573}, - {0x5ac4, 6262}, - {0x5ac9, 7018}, - {0x5acc, 7758}, - {0x5ae1, 6621}, - {0x5ae6, 7673}, - {0x5ae9, 4181}, - {0x5b05, 7865}, - {0x5b09, 8041}, - {0x5b0b, 5422}, - {0x5b0c, 3872}, - {0x5b16, 7535}, - {0x5b2a, 5224}, - {0x5b40, 5338}, - {0x5b43, 5881}, - {0x5b50, 6488}, - {0x5b51, 7754}, - {0x5b54, 3790}, - {0x5b55, 6481}, - {0x5b57, 6489}, - {0x5b58, 6832}, - {0x5b5a, 5120}, - {0x5b5c, 6490}, - {0x5b5d, 7955}, - {0x5b5f, 4727}, - {0x5b63, 3709}, - {0x5b64, 3735}, - {0x5b69, 7690}, - {0x5b6b, 5546}, - {0x5b70, 5631}, - {0x5b71, 6522}, - {0x5b75, 5121}, - {0x5b78, 7631}, - {0x5b7a, 6315}, - {0x5b7c, 5923}, - {0x5b85, 4266}, - {0x5b87, 6204}, - {0x5b88, 5574}, - {0x5b89, 5807}, - {0x5b8b, 5553}, - {0x5b8c, 6108}, - {0x5b8f, 3864}, - {0x5b93, 5078}, - {0x5b95, 7427}, - {0x5b96, 7950}, - {0x5b97, 6838}, - {0x5b98, 3820}, - {0x5b99, 6870}, - {0x5b9a, 6711}, - {0x5b9b, 6109}, - {0x5b9c, 6397}, - {0x5ba2, 3580}, - {0x5ba3, 5423}, - {0x5ba4, 5759}, - {0x5ba5, 6316}, - {0x5ba6, 7885}, - {0x5bac, 5476}, - {0x5bae, 3963}, - {0x5bb0, 6573}, - {0x5bb3, 7691}, - {0x5bb4, 5960}, - {0x5bb5, 5503}, - {0x5bb6, 3446}, - {0x5bb8, 5740}, - {0x5bb9, 6180}, - {0x5bbf, 5632}, - {0x5bc0, 7116}, - {0x5bc2, 6622}, - {0x5bc3, 6263}, - {0x5bc4, 4074}, - {0x5bc5, 6450}, - {0x5bc6, 4883}, - {0x5bc7, 3907}, - {0x5bcc, 5122}, - {0x5bd0, 4711}, - {0x5bd2, 7635}, - {0x5bd3, 6205}, - {0x5bd4, 5721}, - {0x5bd7, 4168}, - {0x5bde, 4664}, - {0x5bdf, 7078}, - {0x5be1, 3803}, - {0x5be2, 7368}, - {0x5be4, 6061}, - {0x5be5, 6146}, - {0x5be6, 5760}, - {0x5be7, 4167}, - {0x5be8, 7117}, - {0x5be9, 5762}, - {0x5beb, 5258}, - {0x5bec, 3821}, - {0x5bee, 4553}, - {0x5bef, 6906}, - {0x5bf5, 7253}, - {0x5bf6, 5061}, - {0x5bf8, 7247}, - {0x5bfa, 5259}, - {0x5c01, 5095}, - {0x5c04, 5260}, - {0x5c07, 6541}, - {0x5c08, 6653}, - {0x5c09, 6291}, - {0x5c0a, 6833}, - {0x5c0b, 5763}, - {0x5c0d, 4254}, - {0x5c0e, 4275}, - {0x5c0f, 5504}, - {0x5c11, 5505}, - {0x5c16, 7178}, - {0x5c19, 5339}, - {0x5c24, 6206}, - {0x5c28, 4945}, - {0x5c31, 7320}, - {0x5c38, 5697}, - {0x5c39, 6361}, - {0x5c3a, 7136}, - {0x5c3b, 3736}, - {0x5c3c, 4186}, - {0x5c3e, 4853}, - {0x5c3f, 4180}, - {0x5c40, 3948}, - {0x5c45, 3587}, - {0x5c46, 3710}, - {0x5c48, 3960}, - {0x5c4b, 6078}, - {0x5c4d, 5699}, - {0x5c4e, 5698}, - {0x5c51, 5451}, - {0x5c55, 6654}, - {0x5c5b, 5044}, - {0x5c60, 4276}, - {0x5c62, 4566}, - {0x5c64, 7335}, - {0x5c65, 4618}, - {0x5c6c, 5538}, - {0x5c6f, 4358}, - {0x5c71, 5305}, - {0x5c79, 8024}, - {0x5c90, 4075}, - {0x5c91, 6527}, - {0x5ca1, 3539}, - {0x5ca9, 5822}, - {0x5cab, 5575}, - {0x5cac, 3531}, - {0x5cb1, 4255}, - {0x5cb3, 5794}, - {0x5cb5, 7806}, - {0x5cb7, 4870}, - {0x5cb8, 5808}, - {0x5cba, 4492}, - {0x5cbe, 6693}, - {0x5cc0, 5576}, - {0x5cd9, 7339}, - {0x5ce0, 5340}, - {0x5ce8, 5780}, - {0x5cef, 5096}, - {0x5cf0, 5097}, - {0x5cf4, 7735}, - {0x5cf6, 4277}, - {0x5cfb, 6907}, - {0x5cfd, 7762}, - {0x5d07, 5671}, - {0x5d0d, 4421}, - {0x5d0e, 4076}, - {0x5d11, 3776}, - {0x5d14, 7263}, - {0x5d16, 5843}, - {0x5d17, 3540}, - {0x5d19, 4596}, - {0x5d27, 5672}, - {0x5d29, 5175}, - {0x5d4b, 4854}, - {0x5d4c, 3513}, - {0x5d50, 4399}, - {0x5d69, 5673}, - {0x5d6c, 6136}, - {0x5d6f, 7046}, - {0x5d87, 3908}, - {0x5d8b, 4278}, - {0x5d9d, 4365}, - {0x5da0, 3873}, - {0x5da2, 6147}, - {0x5daa, 5931}, - {0x5db8, 6003}, - {0x5dba, 4493}, - {0x5dbc, 5375}, - {0x5dbd, 5795}, - {0x5dcd, 6137}, - {0x5dd2, 4673}, - {0x5dd6, 5823}, - {0x5ddd, 7152}, - {0x5dde, 6871}, - {0x5de1, 5640}, - {0x5de2, 5506}, - {0x5de5, 3791}, - {0x5de6, 6856}, - {0x5de7, 3874}, - {0x5de8, 3588}, - {0x5deb, 4813}, - {0x5dee, 7047}, - {0x5df1, 4077}, - {0x5df2, 6418}, - {0x5df3, 5261}, - {0x5df4, 7476}, - {0x5df7, 7674}, - {0x5dfd, 5547}, - {0x5dfe, 3604}, - {0x5e02, 5700}, - {0x5e03, 7551}, - {0x5e06, 5010}, - {0x5e0c, 8042}, - {0x5e11, 7428}, - {0x5e16, 7189}, - {0x5e19, 7019}, - {0x5e1b, 4990}, - {0x5e1d, 6763}, - {0x5e25, 5577}, - {0x5e2b, 5262}, - {0x5e2d, 5405}, - {0x5e33, 6542}, - {0x5e36, 4256}, - {0x5e38, 5341}, - {0x5e3d, 4768}, - {0x5e3f, 7973}, - {0x5e40, 6712}, - {0x5e44, 5796}, - {0x5e45, 7571}, - {0x5e47, 4946}, - {0x5e4c, 7905}, - {0x5e55, 4665}, - {0x5e5f, 7340}, - {0x5e61, 4996}, - {0x5e62, 4242}, - {0x5e63, 7536}, - {0x5e72, 3481}, - {0x5e73, 7530}, - {0x5e74, 4160}, - {0x5e77, 5045}, - {0x5e78, 7706}, - {0x5e79, 3482}, - {0x5e7b, 7886}, - {0x5e7c, 6317}, - {0x5e7d, 6318}, - {0x5e7e, 4078}, - {0x5e84, 6543}, - {0x5e87, 5188}, - {0x5e8a, 5342}, - {0x5e8f, 5376}, - {0x5e95, 6596}, - {0x5e97, 6694}, - {0x5e9a, 3670}, - {0x5e9c, 5123}, - {0x5ea0, 5343}, - {0x5ea6, 4279}, - {0x5ea7, 6857}, - {0x5eab, 3737}, - {0x5ead, 6713}, - {0x5eb5, 5824}, - {0x5eb6, 5377}, - {0x5eb7, 3541}, - {0x5eb8, 6181}, - {0x5ebe, 6319}, - {0x5ec2, 5344}, - {0x5ec8, 7620}, - {0x5ec9, 4483}, - {0x5eca, 4412}, - {0x5ed0, 3909}, - {0x5ed3, 3815}, - {0x5ed6, 4554}, - {0x5eda, 6872}, - {0x5edb, 6655}, - {0x5edf, 4803}, - {0x5ee0, 7097}, - {0x5ee2, 7537}, - {0x5ee3, 3843}, - {0x5eec, 4444}, - {0x5ef3, 7197}, - {0x5ef6, 5961}, - {0x5ef7, 6714}, - {0x5efa, 3605}, - {0x5efb, 7930}, - {0x5f01, 5032}, - {0x5f04, 4537}, - {0x5f0a, 7538}, - {0x5f0f, 5722}, - {0x5f11, 5701}, - {0x5f13, 3964}, - {0x5f14, 6787}, - {0x5f15, 6451}, - {0x5f17, 5172}, - {0x5f18, 7854}, - {0x5f1b, 6419}, - {0x5f1f, 6764}, - {0x5f26, 7736}, - {0x5f27, 7807}, - {0x5f29, 4171}, - {0x5f31, 5872}, - {0x5f35, 6544}, - {0x5f3a, 3542}, - {0x5f3c, 7605}, - {0x5f48, 7411}, - {0x5f4a, 3543}, - {0x5f4c, 4855}, - {0x5f4e, 4674}, - {0x5f56, 4198}, - {0x5f57, 7792}, - {0x5f59, 7997}, - {0x5f5b, 6420}, - {0x5f62, 7775}, - {0x5f66, 5919}, - {0x5f67, 6230}, - {0x5f69, 7118}, - {0x5f6a, 7578}, - {0x5f6b, 6788}, - {0x5f6c, 5225}, - {0x5f6d, 7513}, - {0x5f70, 7098}, - {0x5f71, 6004}, - {0x5f77, 4947}, - {0x5f79, 5949}, - {0x5f7c, 7597}, - {0x5f7f, 5173}, - {0x5f80, 6126}, - {0x5f81, 6715}, - {0x5f85, 4257}, - {0x5f87, 5641}, - {0x5f8a, 7931}, - {0x5f8b, 4600}, - {0x5f8c, 7974}, - {0x5f90, 5378}, - {0x5f91, 3671}, - {0x5f92, 4280}, - {0x5f97, 4364}, - {0x5f98, 4972}, - {0x5f99, 5263}, - {0x5f9e, 6839}, - {0x5fa0, 4422}, - {0x5fa1, 5903}, - {0x5fa8, 7906}, - {0x5fa9, 5079}, - {0x5faa, 5642}, - {0x5fae, 4856}, - {0x5fb5, 7038}, - {0x5fb7, 4267}, - {0x5fb9, 7170}, - {0x5fbd, 7998}, - {0x5fc3, 5764}, - {0x5fc5, 7606}, - {0x5fcc, 4079}, - {0x5fcd, 6452}, - {0x5fd6, 7248}, - {0x5fd7, 6947}, - {0x5fd8, 4698}, - {0x5fd9, 4699}, - {0x5fe0, 7307}, - {0x5feb, 7379}, - {0x5ff5, 4163}, - {0x5ffd, 7850}, - {0x5fff, 5158}, - {0x600f, 5835}, - {0x6012, 4172}, - {0x6016, 7552}, - {0x601c, 4494}, - {0x601d, 5264}, - {0x6020, 7434}, - {0x6021, 6421}, - {0x6025, 4053}, - {0x6027, 5477}, - {0x6028, 6264}, - {0x602a, 3859}, - {0x602f, 3625}, - {0x6041, 6473}, - {0x6042, 5643}, - {0x6043, 5702}, - {0x604d, 7907}, - {0x6050, 3792}, - {0x6052, 7675}, - {0x6055, 5379}, - {0x6059, 5882}, - {0x605d, 3836}, - {0x6062, 7932}, - {0x6063, 6491}, - {0x6064, 8010}, - {0x6065, 7341}, - {0x6068, 7636}, - {0x6069, 6374}, - {0x606a, 3468}, - {0x606c, 4164}, - {0x606d, 3793}, - {0x606f, 5723}, - {0x6070, 8031}, - {0x6085, 5985}, - {0x6089, 5761}, - {0x608c, 6765}, - {0x608d, 7637}, - {0x6094, 7933}, - {0x6096, 7504}, - {0x609a, 5554}, - {0x609b, 6656}, - {0x609f, 6062}, - {0x60a0, 6320}, - {0x60a3, 7887}, - {0x60a4, 7254}, - {0x60a7, 4619}, - {0x60b0, 6840}, - {0x60b2, 5189}, - {0x60b3, 4268}, - {0x60b4, 7312}, - {0x60b6, 4871}, - {0x60b8, 3711}, - {0x60bc, 4281}, - {0x60bd, 7132}, - {0x60c5, 6716}, - {0x60c7, 4320}, - {0x60d1, 7841}, - {0x60da, 7851}, - {0x60dc, 5406}, - {0x60df, 6321}, - {0x60e0, 7793}, - {0x60e1, 5797}, - {0x60f0, 7385}, - {0x60f1, 4178}, - {0x60f3, 5345}, - {0x60f6, 7908}, - {0x60f9, 5866}, - {0x60fa, 5478}, - {0x60fb, 7333}, - {0x6101, 5578}, - {0x6106, 3606}, - {0x6108, 6322}, - {0x6109, 6323}, - {0x610d, 4872}, - {0x610e, 7517}, - {0x610f, 6398}, - {0x6115, 5798}, - {0x611a, 6207}, - {0x611b, 5844}, - {0x611f, 3514}, - {0x6127, 3860}, - {0x6130, 7909}, - {0x6134, 7099}, - {0x6137, 3565}, - {0x613c, 5741}, - {0x613e, 3566}, - {0x613f, 6265}, - {0x6142, 6182}, - {0x6144, 4601}, - {0x6147, 6375}, - {0x6148, 6492}, - {0x614a, 3655}, - {0x614b, 7435}, - {0x614c, 7910}, - {0x6153, 7579}, - {0x6155, 4769}, - {0x6158, 7085}, - {0x6159, 7086}, - {0x615d, 7471}, - {0x615f, 7453}, - {0x6162, 4675}, - {0x6163, 3822}, - {0x6164, 3469}, - {0x6167, 7794}, - {0x6168, 3567}, - {0x616b, 6841}, - {0x616e, 4445}, - {0x6170, 6292}, - {0x6176, 3672}, - {0x6177, 3544}, - {0x617d, 7137}, - {0x617e, 6168}, - {0x6181, 7255}, - {0x6182, 6208}, - {0x618a, 5190}, - {0x618e, 6932}, - {0x6190, 4465}, - {0x6191, 5237}, - {0x6194, 7217}, - {0x6198, 8044}, - {0x6199, 8043}, - {0x619a, 7412}, - {0x61a4, 5159}, - {0x61a7, 4336}, - {0x61a9, 3628}, - {0x61ab, 4873}, - {0x61ac, 3673}, - {0x61ae, 4814}, - {0x61b2, 7723}, - {0x61b6, 5913}, - {0x61ba, 4219}, - {0x61be, 3515}, - {0x61c3, 4026}, - {0x61c7, 3483}, - {0x61c8, 7692}, - {0x61c9, 6391}, - {0x61ca, 6063}, - {0x61cb, 4815}, - {0x61e6, 4135}, - {0x61f2, 7039}, - {0x61f6, 4375}, - {0x61f7, 7934}, - {0x61f8, 7737}, - {0x61fa, 7087}, - {0x61fc, 3910}, - {0x61ff, 6399}, - {0x6200, 4466}, - {0x6207, 4243}, - {0x6208, 3804}, - {0x620a, 4816}, - {0x620c, 5667}, - {0x620d, 5579}, - {0x620e, 6369}, - {0x6210, 5479}, - {0x6211, 5781}, - {0x6212, 3712}, - {0x6216, 7842}, - {0x621a, 7138}, - {0x621f, 4019}, - {0x6221, 3516}, - {0x622a, 6685}, - {0x622e, 4592}, - {0x6230, 6657}, - {0x6231, 8045}, - {0x6234, 4258}, - {0x6236, 7808}, - {0x623e, 4446}, - {0x623f, 4948}, - {0x6240, 5507}, - {0x6241, 7520}, - {0x6247, 5424}, - {0x6248, 7809}, - {0x6249, 5191}, - {0x624b, 5580}, - {0x624d, 6574}, - {0x6253, 7386}, - {0x6258, 7398}, - {0x626e, 5160}, - {0x6271, 4054}, - {0x6276, 5124}, - {0x6279, 5192}, - {0x627c, 5852}, - {0x627f, 5687}, - {0x6280, 4080}, - {0x6284, 7218}, - {0x6289, 3648}, - {0x628a, 7477}, - {0x6291, 5914}, - {0x6292, 5380}, - {0x6295, 7468}, - {0x6297, 7676}, - {0x6298, 6686}, - {0x629b, 7553}, - {0x62ab, 7598}, - {0x62b1, 7554}, - {0x62b5, 6597}, - {0x62b9, 4690}, - {0x62bc, 5830}, - {0x62bd, 7266}, - {0x62c2, 5174}, - {0x62c7, 4817}, - {0x62c8, 4165}, - {0x62c9, 4409}, - {0x62cc, 4909}, - {0x62cd, 4888}, - {0x62cf, 4136}, - {0x62d0, 3861}, - {0x62d2, 3589}, - {0x62d3, 7139}, - {0x62d4, 4931}, - {0x62d6, 7387}, - {0x62d7, 6148}, - {0x62d8, 3911}, - {0x62d9, 6835}, - {0x62db, 7219}, - {0x62dc, 4973}, - {0x62ec, 3837}, - {0x62ed, 5724}, - {0x62ee, 4129}, - {0x62ef, 6934}, - {0x62f1, 3794}, - {0x62f3, 3974}, - {0x62f7, 3738}, - {0x62fe, 5678}, - {0x62ff, 4137}, - {0x6301, 6948}, - {0x6307, 6949}, - {0x6309, 5809}, - {0x6311, 4282}, - {0x632b, 6858}, - {0x632f, 6983}, - {0x633a, 6717}, - {0x633b, 5963}, - {0x633d, 4676}, - {0x633e, 7763}, - {0x6349, 7055}, - {0x634c, 7501}, - {0x634f, 4143}, - {0x6350, 5962}, - {0x6355, 7555}, - {0x6367, 5098}, - {0x6368, 5265}, - {0x636e, 3590}, - {0x6372, 3975}, - {0x6377, 7190}, - {0x637a, 4144}, - {0x637b, 4166}, - {0x637f, 5381}, - {0x6383, 5508}, - {0x6388, 5581}, - {0x6389, 4283}, - {0x638c, 6545}, - {0x6392, 4974}, - {0x6396, 5853}, - {0x6398, 3961}, - {0x639b, 3853}, - {0x63a0, 4425}, - {0x63a1, 7119}, - {0x63a2, 7420}, - {0x63a5, 6701}, - {0x63a7, 3795}, - {0x63a8, 7267}, - {0x63a9, 5929}, - {0x63aa, 6789}, - {0x63c0, 3484}, - {0x63c4, 6324}, - {0x63c6, 3997}, - {0x63cf, 4804}, - {0x63d0, 6766}, - {0x63d6, 6387}, - {0x63da, 5883}, - {0x63db, 7888}, - {0x63e1, 5799}, - {0x63ed, 3629}, - {0x63ee, 7999}, - {0x63f4, 6266}, - {0x63f6, 5867}, - {0x63f7, 5327}, - {0x640d, 5548}, - {0x640f, 4889}, - {0x6414, 5509}, - {0x6416, 6149}, - {0x6417, 4284}, - {0x641c, 5582}, - {0x6422, 6984}, - {0x642c, 4910}, - {0x642d, 7425}, - {0x643a, 8006}, - {0x643e, 7056}, - {0x6458, 6623}, - {0x6460, 7256}, - {0x6469, 4656}, - {0x646f, 6950}, - {0x6478, 4770}, - {0x6479, 4771}, - {0x647a, 6702}, - {0x6488, 4512}, - {0x6491, 7447}, - {0x6492, 5316}, - {0x6493, 6150}, - {0x649a, 4161}, - {0x649e, 4244}, - {0x64a4, 7171}, - {0x64a5, 4932}, - {0x64ab, 4818}, - {0x64ad, 7478}, - {0x64ae, 7261}, - {0x64b0, 7062}, - {0x64b2, 4890}, - {0x64bb, 4212}, - {0x64c1, 6091}, - {0x64c4, 4513}, - {0x64c5, 7153}, - {0x64c7, 7445}, - {0x64ca, 3630}, - {0x64cd, 6790}, - {0x64ce, 3674}, - {0x64d2, 4040}, - {0x64d4, 4220}, - {0x64d8, 5023}, - {0x64da, 3591}, - {0x64e1, 4259}, - {0x64e2, 7399}, - {0x64e5, 4400}, - {0x64e6, 7079}, - {0x64e7, 3592}, - {0x64ec, 6400}, - {0x64f2, 7140}, - {0x64f4, 7877}, - {0x64fa, 7479}, - {0x64fe, 6151}, - {0x6500, 4911}, - {0x6504, 7448}, - {0x6518, 5884}, - {0x651d, 5471}, - {0x6523, 4467}, - {0x652a, 3875}, - {0x652b, 7878}, - {0x652c, 4401}, - {0x652f, 6951}, - {0x6536, 5583}, - {0x6537, 3739}, - {0x6538, 6325}, - {0x6539, 3568}, - {0x653b, 3796}, - {0x653e, 4949}, - {0x653f, 6718}, - {0x6545, 3740}, - {0x6548, 7956}, - {0x654d, 5382}, - {0x654e, 3876}, - {0x654f, 4874}, - {0x6551, 3912}, - {0x6556, 6064}, - {0x6557, 7505}, - {0x655e, 7100}, - {0x6562, 3517}, - {0x6563, 5306}, - {0x6566, 4321}, - {0x656c, 3675}, - {0x656d, 5885}, - {0x6572, 3741}, - {0x6574, 6719}, - {0x6575, 6624}, - {0x6577, 5125}, - {0x6578, 5584}, - {0x657e, 5425}, - {0x6582, 4484}, - {0x6583, 7539}, - {0x6585, 7957}, - {0x6587, 4840}, - {0x658c, 5226}, - {0x6590, 5193}, - {0x6591, 4912}, - {0x6597, 4349}, - {0x6599, 4555}, - {0x659b, 3768}, - {0x659c, 5266}, - {0x659f, 7030}, - {0x65a1, 5817}, - {0x65a4, 4027}, - {0x65a5, 7141}, - {0x65a7, 5126}, - {0x65ab, 6512}, - {0x65ac, 7088}, - {0x65af, 5267}, - {0x65b0, 5742}, - {0x65b7, 4199}, - {0x65b9, 4950}, - {0x65bc, 5904}, - {0x65bd, 5703}, - {0x65c1, 4951}, - {0x65c5, 4447}, - {0x65cb, 5426}, - {0x65cc, 6720}, - {0x65cf, 6828}, - {0x65d2, 4578}, - {0x65d7, 4081}, - {0x65e0, 4819}, - {0x65e3, 4082}, - {0x65e5, 6464}, - {0x65e6, 4200}, - {0x65e8, 6952}, - {0x65e9, 6791}, - {0x65ec, 5644}, - {0x65ed, 6231}, - {0x65f1, 7638}, - {0x65f4, 6209}, - {0x65fa, 6127}, - {0x65fb, 4875}, - {0x65fc, 4876}, - {0x65fd, 4322}, - {0x65ff, 6065}, - {0x6606, 3777}, - {0x6607, 5688}, - {0x6609, 4952}, - {0x660a, 7810}, - {0x660c, 7101}, - {0x660e, 4751}, - {0x660f, 7845}, - {0x6610, 5161}, - {0x6611, 4041}, - {0x6613, 5950}, - {0x6614, 5407}, - {0x6615, 8019}, - {0x661e, 5046}, - {0x661f, 5480}, - {0x6620, 6005}, - {0x6625, 7300}, - {0x6627, 4712}, - {0x6628, 6513}, - {0x662d, 5510}, - {0x662f, 5704}, - {0x6630, 7621}, - {0x6631, 6232}, - {0x6634, 4805}, - {0x6636, 7102}, - {0x663a, 5047}, - {0x663b, 5836}, - {0x6641, 6792}, - {0x6642, 5705}, - {0x6643, 7911}, - {0x6644, 7912}, - {0x6649, 6985}, - {0x664b, 6986}, - {0x664f, 5810}, - {0x6659, 6908}, - {0x665b, 7738}, - {0x665d, 6873}, - {0x665e, 8046}, - {0x665f, 5481}, - {0x6664, 6066}, - {0x6665, 7890}, - {0x6666, 7935}, - {0x6667, 7811}, - {0x6668, 5743}, - {0x6669, 4677}, - {0x666b, 7400}, - {0x666e, 5062}, - {0x666f, 3676}, - {0x6673, 5408}, - {0x6674, 7198}, - {0x6676, 6721}, - {0x6677, 3990}, - {0x6678, 6722}, - {0x667a, 6953}, - {0x6684, 7991}, - {0x6687, 3447}, - {0x6688, 7988}, - {0x6689, 8000}, - {0x668e, 6006}, - {0x6690, 6293}, - {0x6691, 5383}, - {0x6696, 4140}, - {0x6697, 5825}, - {0x6698, 5886}, - {0x669d, 4752}, - {0x66a0, 3742}, - {0x66a2, 7103}, - {0x66ab, 6528}, - {0x66ae, 4772}, - {0x66b2, 6546}, - {0x66b3, 7795}, - {0x66b4, 7572}, - {0x66b9, 5464}, - {0x66bb, 3677}, - {0x66be, 4323}, - {0x66c4, 5999}, - {0x66c6, 4459}, - {0x66c7, 4221}, - {0x66c9, 7958}, - {0x66d6, 5845}, - {0x66d9, 5384}, - {0x66dc, 6152}, - {0x66dd, 7573}, - {0x66e0, 3844}, - {0x66e6, 8047}, - {0x66f0, 6125}, - {0x66f2, 3769}, - {0x66f3, 6033}, - {0x66f4, 3678}, - {0x66f7, 3502}, - {0x66f8, 5385}, - {0x66f9, 6794}, - {0x66fa, 6793}, - {0x66fc, 4678}, - {0x66fe, 6933}, - {0x66ff, 7206}, - {0x6700, 7264}, - {0x6703, 7936}, - {0x6708, 6281}, - {0x6709, 6326}, - {0x670b, 5176}, - {0x670d, 5080}, - {0x6714, 5302}, - {0x6715, 7031}, - {0x6717, 4413}, - {0x671b, 4700}, - {0x671d, 6795}, - {0x671e, 4083}, - {0x671f, 4084}, - {0x6726, 4798}, - {0x6727, 4538}, - {0x6728, 4788}, - {0x672a, 4857}, - {0x672b, 4691}, - {0x672c, 5091}, - {0x672d, 7080}, - {0x672e, 7304}, - {0x6731, 6874}, - {0x6734, 4891}, - {0x6736, 7388}, - {0x673a, 3984}, - {0x673d, 7975}, - {0x6746, 3485}, - {0x6749, 5321}, - {0x674e, 4620}, - {0x674f, 7707}, - {0x6750, 6575}, - {0x6751, 7249}, - {0x6753, 7580}, - {0x6756, 6547}, - {0x675c, 4350}, - {0x675e, 4085}, - {0x675f, 5539}, - {0x676d, 7677}, - {0x676f, 4975}, - {0x6770, 3615}, - {0x6771, 4337}, - {0x6773, 4806}, - {0x6775, 6598}, - {0x6777, 7480}, - {0x677b, 4183}, - {0x677e, 5555}, - {0x677f, 7492}, - {0x6787, 5194}, - {0x6789, 6128}, - {0x678b, 4953}, - {0x678f, 4146}, - {0x6790, 5409}, - {0x6793, 4351}, - {0x6795, 7369}, - {0x6797, 4647}, - {0x679a, 4713}, - {0x679c, 3805}, - {0x679d, 6954}, - {0x67af, 3743}, - {0x67b0, 7531}, - {0x67b3, 6955}, - {0x67b6, 3448}, - {0x67b7, 3449}, - {0x67b8, 3913}, - {0x67be, 5706}, - {0x67c4, 5048}, - {0x67cf, 4991}, - {0x67d0, 4773}, - {0x67d1, 3518}, - {0x67d2, 7365}, - {0x67d3, 5990}, - {0x67d4, 6327}, - {0x67da, 6328}, - {0x67dd, 7401}, - {0x67e9, 3914}, - {0x67ec, 3486}, - {0x67ef, 3450}, - {0x67f0, 4157}, - {0x67f1, 6875}, - {0x67f3, 4579}, - {0x67f4, 5707}, - {0x67f5, 7127}, - {0x67f6, 5268}, - {0x67fb, 5269}, - {0x67fe, 6723}, - {0x6812, 5645}, - {0x6813, 6658}, - {0x6816, 5386}, - {0x6817, 4602}, - {0x6821, 3877}, - {0x6822, 4992}, - {0x682a, 6876}, - {0x682f, 6233}, - {0x6838, 7704}, - {0x6839, 4028}, - {0x683c, 3631}, - {0x683d, 6576}, - {0x6840, 3616}, - {0x6841, 7678}, - {0x6842, 3713}, - {0x6843, 4285}, - {0x6848, 5811}, - {0x684e, 7020}, - {0x6850, 4338}, - {0x6851, 5346}, - {0x6853, 7891}, - {0x6854, 4130}, - {0x686d, 6987}, - {0x6876, 7454}, - {0x687f, 3487}, - {0x6881, 4431}, - {0x6885, 4714}, - {0x688f, 3770}, - {0x6893, 6577}, - {0x6894, 7342}, - {0x6897, 3679}, - {0x689d, 6796}, - {0x689f, 7959}, - {0x68a1, 6110}, - {0x68a2, 7220}, - {0x68a7, 6067}, - {0x68a8, 4621}, - {0x68ad, 5270}, - {0x68af, 6767}, - {0x68b0, 3714}, - {0x68b1, 3778}, - {0x68b3, 5511}, - {0x68b5, 5011}, - {0x68b6, 4858}, - {0x68c4, 4087}, - {0x68c5, 5049}, - {0x68c9, 4738}, - {0x68cb, 4086}, - {0x68cd, 3779}, - {0x68d2, 5099}, - {0x68d5, 6842}, - {0x68d7, 6797}, - {0x68d8, 4020}, - {0x68da, 5177}, - {0x68df, 4339}, - {0x68e0, 4245}, - {0x68e7, 6523}, - {0x68e8, 3715}, - {0x68ee, 5322}, - {0x68f2, 5387}, - {0x68f9, 4286}, - {0x68fa, 3823}, - {0x6900, 6111}, - {0x6905, 6401}, - {0x690d, 5725}, - {0x690e, 7268}, - {0x6912, 7221}, - {0x6927, 4753}, - {0x6930, 5868}, - {0x693d, 5964}, - {0x693f, 7301}, - {0x694a, 5887}, - {0x6953, 7592}, - {0x6954, 5452}, - {0x6955, 7389}, - {0x6957, 3607}, - {0x6959, 4820}, - {0x695a, 7222}, - {0x695e, 4608}, - {0x6960, 4147}, - {0x6961, 6329}, - {0x6962, 6330}, - {0x6963, 4859}, - {0x6968, 6724}, - {0x696b, 6928}, - {0x696d, 5932}, - {0x696e, 6599}, - {0x696f, 5646}, - {0x6975, 4021}, - {0x6977, 7693}, - {0x6978, 7269}, - {0x6979, 6007}, - {0x6995, 6183}, - {0x699b, 6988}, - {0x699c, 4954}, - {0x69a5, 7913}, - {0x69a7, 5195}, - {0x69ae, 6008}, - {0x69b4, 4580}, - {0x69bb, 7426}, - {0x69c1, 3744}, - {0x69c3, 4913}, - {0x69cb, 3915}, - {0x69cc, 7460}, - {0x69cd, 7104}, - {0x69d0, 3862}, - {0x69e8, 3816}, - {0x69ea, 3569}, - {0x69fb, 3998}, - {0x69fd, 6798}, - {0x69ff, 4029}, - {0x6a02, 5800}, - {0x6a0a, 4997}, - {0x6a11, 4432}, - {0x6a13, 4567}, - {0x6a17, 6600}, - {0x6a19, 7581}, - {0x6a1e, 7270}, - {0x6a1f, 6548}, - {0x6a21, 4774}, - {0x6a23, 5888}, - {0x6a35, 7223}, - {0x6a38, 4892}, - {0x6a39, 5585}, - {0x6a3a, 7866}, - {0x6a3d, 6909}, - {0x6a44, 3519}, - {0x6a48, 6153}, - {0x6a4b, 3878}, - {0x6a52, 6239}, - {0x6a53, 5647}, - {0x6a58, 4015}, - {0x6a59, 4366}, - {0x6a5f, 4088}, - {0x6a61, 5347}, - {0x6a6b, 7951}, - {0x6a80, 4201}, - {0x6a84, 3632}, - {0x6a89, 6725}, - {0x6a8d, 5915}, - {0x6a8e, 4042}, - {0x6a97, 5024}, - {0x6a9c, 7937}, - {0x6aa2, 3620}, - {0x6aa3, 6549}, - {0x6ab3, 5227}, - {0x6abb, 7656}, - {0x6ac2, 4287}, - {0x6ac3, 3985}, - {0x6ad3, 4514}, - {0x6ada, 4448}, - {0x6adb, 6927}, - {0x6af6, 7724}, - {0x6afb, 5858}, - {0x6b04, 4391}, - {0x6b0a, 3976}, - {0x6b0c, 6550}, - {0x6b12, 4392}, - {0x6b16, 4402}, - {0x6b20, 8027}, - {0x6b21, 7048}, - {0x6b23, 8020}, - {0x6b32, 6169}, - {0x6b3a, 4089}, - {0x6b3d, 8028}, - {0x6b3e, 3824}, - {0x6b46, 8029}, - {0x6b47, 7727}, - {0x6b4c, 3451}, - {0x6b4e, 7413}, - {0x6b50, 3916}, - {0x6b5f, 5937}, - {0x6b61, 7889}, - {0x6b62, 6956}, - {0x6b63, 6726}, - {0x6b64, 7049}, - {0x6b65, 5063}, - {0x6b66, 4821}, - {0x6b6a, 6133}, - {0x6b72, 5494}, - {0x6b77, 4460}, - {0x6b78, 3991}, - {0x6b7b, 5271}, - {0x6b7f, 4795}, - {0x6b83, 5837}, - {0x6b84, 6989}, - {0x6b86, 7436}, - {0x6b89, 5648}, - {0x6b8a, 5586}, - {0x6b96, 5726}, - {0x6b98, 6524}, - {0x6b9e, 6240}, - {0x6bae, 4485}, - {0x6baf, 5228}, - {0x6bb2, 5465}, - {0x6bb5, 4202}, - {0x6bb7, 6376}, - {0x6bba, 5317}, - {0x6bbc, 3470}, - {0x6bbf, 6659}, - {0x6bc1, 7996}, - {0x6bc5, 6402}, - {0x6bc6, 3917}, - {0x6bcb, 4822}, - {0x6bcd, 4775}, - {0x6bcf, 4715}, - {0x6bd2, 4309}, - {0x6bd3, 6356}, - {0x6bd4, 5196}, - {0x6bd6, 5197}, - {0x6bd7, 5198}, - {0x6bd8, 5199}, - {0x6bdb, 4776}, - {0x6beb, 7812}, - {0x6bec, 3918}, - {0x6c08, 6660}, - {0x6c0f, 5774}, - {0x6c11, 4877}, - {0x6c13, 4728}, - {0x6c23, 4090}, - {0x6c34, 5587}, - {0x6c37, 5238}, - {0x6c38, 6009}, - {0x6c3e, 5012}, - {0x6c40, 6727}, - {0x6c41, 6929}, - {0x6c42, 3919}, - {0x6c4e, 5013}, - {0x6c50, 5410}, - {0x6c55, 5307}, - {0x6c57, 7639}, - {0x6c5a, 6068}, - {0x6c5d, 5938}, - {0x6c5e, 7855}, - {0x6c5f, 3545}, - {0x6c60, 6957}, - {0x6c68, 3784}, - {0x6c6a, 6129}, - {0x6c6d, 6034}, - {0x6c70, 7437}, - {0x6c72, 4055}, - {0x6c76, 4841}, - {0x6c7a, 3649}, - {0x6c7d, 4091}, - {0x6c7e, 5162}, - {0x6c81, 5765}, - {0x6c82, 4092}, - {0x6c83, 6079}, - {0x6c85, 6267}, - {0x6c86, 7679}, - {0x6c87, 5965}, - {0x6c88, 7370}, - {0x6c8c, 4324}, - {0x6c90, 4789}, - {0x6c92, 4796}, - {0x6c93, 4234}, - {0x6c94, 4739}, - {0x6c95, 4849}, - {0x6c96, 7308}, - {0x6c99, 5272}, - {0x6c9a, 6958}, - {0x6c9b, 7506}, - {0x6cab, 4692}, - {0x6cae, 6601}, - {0x6cb3, 7622}, - {0x6cb8, 5200}, - {0x6cb9, 6331}, - {0x6cbb, 7343}, - {0x6cbc, 5512}, - {0x6cbd, 3745}, - {0x6cbe, 7179}, - {0x6cbf, 5966}, - {0x6cc1, 7914}, - {0x6cc2, 7776}, - {0x6cc4, 5453}, - {0x6cc9, 7154}, - {0x6cca, 4893}, - {0x6ccc, 7607}, - {0x6cd3, 7856}, - {0x6cd5, 5018}, - {0x6cd7, 5273}, - {0x6cdb, 5014}, - {0x6ce1, 7556}, - {0x6ce2, 7481}, - {0x6ce3, 6388}, - {0x6ce5, 4187}, - {0x6ce8, 6877}, - {0x6ceb, 7739}, - {0x6cee, 4914}, - {0x6cef, 4878}, - {0x6cf0, 7438}, - {0x6cf3, 6010}, - {0x6d0b, 5889}, - {0x6d0c, 4480}, - {0x6d11, 5064}, - {0x6d17, 5495}, - {0x6d19, 5588}, - {0x6d1b, 4382}, - {0x6d1e, 4340}, - {0x6d25, 6990}, - {0x6d27, 6332}, - {0x6d29, 5454}, - {0x6d2a, 7857}, - {0x6d32, 6878}, - {0x6d35, 5649}, - {0x6d36, 8016}, - {0x6d38, 3845}, - {0x6d39, 6268}, - {0x6d3b, 7899}, - {0x6d3d, 8032}, - {0x6d3e, 7482}, - {0x6d41, 4581}, - {0x6d59, 6687}, - {0x6d5a, 6910}, - {0x6d5c, 5229}, - {0x6d63, 6112}, - {0x6d66, 7557}, - {0x6d69, 7813}, - {0x6d6a, 4414}, - {0x6d6c, 4622}, - {0x6d6e, 5127}, - {0x6d74, 6170}, - {0x6d77, 7694}, - {0x6d78, 7371}, - {0x6d79, 7764}, - {0x6d7f, 7507}, - {0x6d85, 5986}, - {0x6d87, 3680}, - {0x6d88, 5513}, - {0x6d89, 5472}, - {0x6d8c, 6184}, - {0x6d8d, 7960}, - {0x6d8e, 5967}, - {0x6d91, 5540}, - {0x6d93, 5968}, - {0x6d95, 7207}, - {0x6daf, 5846}, - {0x6db2, 5854}, - {0x6db5, 7657}, - {0x6dc0, 6728}, - {0x6dc3, 3977}, - {0x6dc4, 7344}, - {0x6dc5, 5411}, - {0x6dc6, 7961}, - {0x6dc7, 4093}, - {0x6dcb, 4648}, - {0x6dcf, 7814}, - {0x6dd1, 5633}, - {0x6dd8, 4288}, - {0x6dd9, 6843}, - {0x6dda, 4568}, - {0x6dde, 5556}, - {0x6de1, 4222}, - {0x6de8, 6729}, - {0x6dea, 4597}, - {0x6deb, 6382}, - {0x6dee, 7938}, - {0x6df1, 5766}, - {0x6df3, 5650}, - {0x6df5, 5969}, - {0x6df7, 7846}, - {0x6df8, 7199}, - {0x6df9, 5930}, - {0x6dfa, 7155}, - {0x6dfb, 7180}, - {0x6e17, 5323}, - {0x6e19, 7892}, - {0x6e1a, 6602}, - {0x6e1b, 3520}, - {0x6e1f, 6730}, - {0x6e20, 3593}, - {0x6e21, 4289}, - {0x6e23, 5274}, - {0x6e24, 4933}, - {0x6e25, 5801}, - {0x6e26, 6099}, - {0x6e2b, 5455}, - {0x6e2c, 7334}, - {0x6e2d, 6294}, - {0x6e2f, 7680}, - {0x6e32, 5427}, - {0x6e34, 3503}, - {0x6e36, 6011}, - {0x6e38, 6333}, - {0x6e3a, 4807}, - {0x6e3c, 4860}, - {0x6e3d, 6578}, - {0x6e3e, 7847}, - {0x6e43, 4976}, - {0x6e44, 4861}, - {0x6e4a, 6879}, - {0x6e4d, 4203}, - {0x6e56, 7815}, - {0x6e58, 5348}, - {0x6e5b, 4223}, - {0x6e5c, 5727}, - {0x6e5e, 6731}, - {0x6e5f, 7915}, - {0x6e67, 6185}, - {0x6e6b, 7271}, - {0x6e6e, 6453}, - {0x6e6f, 7429}, - {0x6e72, 6269}, - {0x6e73, 4148}, - {0x6e7a, 5065}, - {0x6e90, 6270}, - {0x6e96, 6911}, - {0x6e9c, 4582}, - {0x6e9d, 3920}, - {0x6e9f, 4754}, - {0x6ea2, 6465}, - {0x6ea5, 5128}, - {0x6eaa, 3716}, - {0x6eab, 6083}, - {0x6eaf, 5514}, - {0x6eb1, 6991}, - {0x6eb6, 6186}, - {0x6eba, 4189}, - {0x6ec2, 4955}, - {0x6ec4, 7105}, - {0x6ec5, 4746}, - {0x6ec9, 7916}, - {0x6ecb, 6493}, - {0x6ecc, 7142}, - {0x6ece, 7777}, - {0x6ed1, 7900}, - {0x6ed3, 6579}, - {0x6ed4, 4290}, - {0x6eef, 7208}, - {0x6ef4, 6625}, - {0x6ef8, 7816}, - {0x6efe, 3780}, - {0x6eff, 4679}, - {0x6f01, 5905}, - {0x6f02, 7582}, - {0x6f06, 7366}, - {0x6f0f, 4569}, - {0x6f11, 3570}, - {0x6f14, 5970}, - {0x6f15, 6799}, - {0x6f20, 4666}, - {0x6f22, 7640}, - {0x6f23, 4468}, - {0x6f2b, 4680}, - {0x6f2c, 6959}, - {0x6f31, 5589}, - {0x6f32, 7106}, - {0x6f38, 6695}, - {0x6f3f, 6551}, - {0x6f41, 6012}, - {0x6f51, 4934}, - {0x6f54, 3650}, - {0x6f57, 7033}, - {0x6f58, 4915}, - {0x6f5a, 5634}, - {0x6f5b, 6529}, - {0x6f5e, 4515}, - {0x6f5f, 5412}, - {0x6f62, 7917}, - {0x6f64, 6362}, - {0x6f6d, 4224}, - {0x6f6e, 6800}, - {0x6f70, 3986}, - {0x6f7a, 6525}, - {0x6f7c, 4341}, - {0x6f7d, 5066}, - {0x6f7e, 4639}, - {0x6f81, 5328}, - {0x6f84, 7040}, - {0x6f88, 7172}, - {0x6f8d, 6880}, - {0x6f8e, 7514}, - {0x6f90, 6241}, - {0x6f94, 7817}, - {0x6f97, 3488}, - {0x6fa3, 7641}, - {0x6fa4, 7446}, - {0x6fa7, 4507}, - {0x6fae, 7939}, - {0x6faf, 7063}, - {0x6fb1, 6661}, - {0x6fb3, 6069}, - {0x6fb9, 4225}, - {0x6fbe, 4213}, - {0x6fc0, 3633}, - {0x6fc1, 7402}, - {0x6fc2, 4486}, - {0x6fc3, 4175}, - {0x6fca, 6035}, - {0x6fd5, 5677}, - {0x6fda, 6013}, - {0x6fdf, 6768}, - {0x6fe0, 7818}, - {0x6fe1, 6334}, - {0x6fe4, 4291}, - {0x6fe9, 7819}, - {0x6feb, 4403}, - {0x6fec, 6912}, - {0x6fef, 7403}, - {0x6ff1, 5230}, - {0x6ffe, 4449}, - {0x7001, 5890}, - {0x7005, 7778}, - {0x7006, 4310}, - {0x7009, 5275}, - {0x700b, 5767}, - {0x700f, 4583}, - {0x7011, 7574}, - {0x7015, 5231}, - {0x7018, 4516}, - {0x701a, 7642}, - {0x701b, 6014}, - {0x701c, 6370}, - {0x701d, 4461}, - {0x701e, 6732}, - {0x701f, 5515}, - {0x7023, 7695}, - {0x7027, 4539}, - {0x7028, 4544}, - {0x702f, 6015}, - {0x7037, 6437}, - {0x703e, 4393}, - {0x704c, 3825}, - {0x7050, 7779}, - {0x7051, 5562}, - {0x7058, 7414}, - {0x705d, 7820}, - {0x7063, 4681}, - {0x706b, 7867}, - {0x7070, 7940}, - {0x7078, 3921}, - {0x707c, 6514}, - {0x707d, 6580}, - {0x7085, 3681}, - {0x708a, 7321}, - {0x708e, 5991}, - {0x7092, 7224}, - {0x7098, 8021}, - {0x7099, 6494}, - {0x709a, 3846}, - {0x70a1, 6733}, - {0x70a4, 5516}, - {0x70ab, 7740}, - {0x70ac, 3594}, - {0x70ad, 7415}, - {0x70af, 7780}, - {0x70b3, 5050}, - {0x70b7, 6881}, - {0x70b8, 6515}, - {0x70b9, 6696}, - {0x70c8, 4481}, - {0x70cb, 8007}, - {0x70cf, 6070}, - {0x70d8, 7858}, - {0x70d9, 4383}, - {0x70dd, 6935}, - {0x70df, 5971}, - {0x70f1, 3682}, - {0x70f9, 7515}, - {0x70fd, 5100}, - {0x7104, 7983}, - {0x7109, 5920}, - {0x710c, 6913}, - {0x7119, 4977}, - {0x711a, 5163}, - {0x711e, 4325}, - {0x7121, 4823}, - {0x7126, 7225}, - {0x7130, 5992}, - {0x7136, 5972}, - {0x7147, 8001}, - {0x7149, 4469}, - {0x714a, 7992}, - {0x714c, 7918}, - {0x714e, 6662}, - {0x7150, 6016}, - {0x7156, 4141}, - {0x7159, 5973}, - {0x715c, 6234}, - {0x715e, 5318}, - {0x7164, 4716}, - {0x7165, 7893}, - {0x7166, 7976}, - {0x7167, 6801}, - {0x7169, 4998}, - {0x716c, 5891}, - {0x716e, 6495}, - {0x717d, 5428}, - {0x7184, 5728}, - {0x7189, 6242}, - {0x718a, 6253}, - {0x718f, 7984}, - {0x7192, 7781}, - {0x7194, 6187}, - {0x7199, 8048}, - {0x719f, 5635}, - {0x71a2, 5101}, - {0x71ac, 6071}, - {0x71b1, 5987}, - {0x71b9, 8049}, - {0x71ba, 8050}, - {0x71be, 7345}, - {0x71c1, 6000}, - {0x71c3, 5974}, - {0x71c8, 4367}, - {0x71c9, 4326}, - {0x71ce, 4556}, - {0x71d0, 4640}, - {0x71d2, 5517}, - {0x71d4, 4999}, - {0x71d5, 5975}, - {0x71df, 6017}, - {0x71e5, 6802}, - {0x71e6, 7064}, - {0x71e7, 5590}, - {0x71ed, 7243}, - {0x71ee, 5473}, - {0x71fb, 7985}, - {0x71fc, 5744}, - {0x71fe, 4292}, - {0x71ff, 6154}, - {0x7200, 7731}, - {0x7206, 7575}, - {0x7210, 4517}, - {0x721b, 4394}, - {0x722a, 6803}, - {0x722c, 7483}, - {0x722d, 6587}, - {0x7230, 6271}, - {0x7232, 6295}, - {0x7235, 6516}, - {0x7236, 5129}, - {0x723a, 5869}, - {0x723b, 7962}, - {0x723d, 5349}, - {0x723e, 6422}, - {0x7240, 5350}, - {0x7246, 6552}, - {0x7247, 7521}, - {0x7248, 7493}, - {0x724c, 7508}, - {0x7252, 7191}, - {0x7258, 4311}, - {0x7259, 5782}, - {0x725b, 6210}, - {0x725d, 5232}, - {0x725f, 4777}, - {0x7261, 4778}, - {0x7262, 4545}, - {0x7267, 4790}, - {0x7269, 4850}, - {0x7272, 5369}, - {0x7279, 7472}, - {0x727d, 3638}, - {0x7280, 5388}, - {0x7281, 4623}, - {0x72a2, 4312}, - {0x72a7, 8051}, - {0x72ac, 3639}, - {0x72af, 5015}, - {0x72c0, 5351}, - {0x72c2, 3847}, - {0x72c4, 6626}, - {0x72ce, 5831}, - {0x72d0, 7821}, - {0x72d7, 3922}, - {0x72d9, 6603}, - {0x72e1, 3879}, - {0x72e9, 5591}, - {0x72f8, 4624}, - {0x72f9, 7765}, - {0x72fc, 4415}, - {0x72fd, 7509}, - {0x730a, 6036}, - {0x7316, 7107}, - {0x731b, 4729}, - {0x731c, 5708}, - {0x731d, 6836}, - {0x7325, 6138}, - {0x7329, 5482}, - {0x732a, 6604}, - {0x732b, 4808}, - {0x7336, 6335}, - {0x7337, 6336}, - {0x733e, 7901}, - {0x733f, 6272}, - {0x7344, 6080}, - {0x7345, 5276}, - {0x7350, 6553}, - {0x7352, 6072}, - {0x7357, 3980}, - {0x7368, 4313}, - {0x736a, 7941}, - {0x7370, 6018}, - {0x7372, 7949}, - {0x7375, 4488}, - {0x7378, 5592}, - {0x737a, 4214}, - {0x737b, 7725}, - {0x7384, 7741}, - {0x7386, 6496}, - {0x7387, 5552}, - {0x7389, 6081}, - {0x738b, 6130}, - {0x738e, 6734}, - {0x7394, 7156}, - {0x7396, 3923}, - {0x7397, 6211}, - {0x7398, 4094}, - {0x739f, 4879}, - {0x73a7, 6363}, - {0x73a9, 6113}, - {0x73ad, 5233}, - {0x73b2, 4495}, - {0x73b3, 4260}, - {0x73b9, 7742}, - {0x73c0, 4894}, - {0x73c2, 3452}, - {0x73c9, 4880}, - {0x73ca, 5308}, - {0x73cc, 7608}, - {0x73cd, 6992}, - {0x73cf, 3471}, - {0x73d6, 3848}, - {0x73d9, 3797}, - {0x73dd, 7977}, - {0x73de, 4384}, - {0x73e0, 6882}, - {0x73e3, 5651}, - {0x73e4, 5067}, - {0x73e5, 6423}, - {0x73e6, 7713}, - {0x73e9, 7782}, - {0x73ea, 3999}, - {0x73ed, 4916}, - {0x73f7, 4824}, - {0x73f9, 5483}, - {0x73fd, 6735}, - {0x73fe, 7743}, - {0x7401, 5429}, - {0x7403, 3924}, - {0x7405, 4416}, - {0x7406, 4625}, - {0x7407, 5593}, - {0x7409, 4584}, - {0x7413, 6114}, - {0x741b, 7372}, - {0x7420, 6663}, - {0x7421, 5636}, - {0x7422, 7404}, - {0x7425, 7822}, - {0x7426, 4095}, - {0x7428, 3781}, - {0x742a, 4096}, - {0x742b, 5102}, - {0x742c, 6115}, - {0x742e, 6844}, - {0x742f, 3826}, - {0x7430, 5993}, - {0x7433, 4649}, - {0x7434, 4043}, - {0x7435, 5201}, - {0x7436, 7484}, - {0x7438, 7405}, - {0x743a, 5019}, - {0x743f, 7848}, - {0x7440, 6212}, - {0x7441, 4779}, - {0x7443, 7302}, - {0x7444, 5430}, - {0x744b, 6296}, - {0x7455, 7623}, - {0x7457, 6273}, - {0x7459, 4173}, - {0x745a, 7823}, - {0x745b, 6019}, - {0x745c, 6337}, - {0x745e, 5389}, - {0x745f, 5674}, - {0x7460, 4585}, - {0x7462, 6188}, - {0x7464, 6155}, - {0x7465, 6084}, - {0x7468, 6993}, - {0x7469, 7783}, - {0x746a, 4657}, - {0x746f, 4417}, - {0x747e, 4030}, - {0x7482, 4097}, - {0x7483, 4626}, - {0x7487, 5431}, - {0x7489, 4470}, - {0x748b, 6554}, - {0x7498, 4641}, - {0x749c, 7919}, - {0x749e, 4895}, - {0x749f, 3683}, - {0x74a1, 6994}, - {0x74a3, 4098}, - {0x74a5, 3684}, - {0x74a7, 5025}, - {0x74a8, 7065}, - {0x74aa, 6804}, - {0x74b0, 7894}, - {0x74b2, 5594}, - {0x74b5, 5939}, - {0x74b9, 5637}, - {0x74bd, 5363}, - {0x74bf, 5432}, - {0x74c6, 7021}, - {0x74ca, 3685}, - {0x74cf, 4540}, - {0x74d4, 6020}, - {0x74d8, 3827}, - {0x74da, 7066}, - {0x74dc, 3806}, - {0x74e0, 7824}, - {0x74e2, 7583}, - {0x74e3, 7494}, - {0x74e6, 6100}, - {0x74ee, 6092}, - {0x74f7, 6497}, - {0x7501, 5051}, - {0x7504, 3640}, - {0x7511, 6936}, - {0x7515, 6093}, - {0x7518, 3521}, - {0x751a, 5768}, - {0x751b, 7181}, - {0x751f, 5370}, - {0x7523, 5309}, - {0x7525, 5371}, - {0x7526, 5518}, - {0x7528, 6189}, - {0x752b, 5068}, - {0x752c, 6190}, - {0x7530, 6664}, - {0x7531, 6338}, - {0x7532, 3532}, - {0x7533, 5745}, - {0x7537, 4149}, - {0x7538, 6665}, - {0x753a, 6736}, - {0x7547, 4011}, - {0x754c, 3717}, - {0x754f, 6139}, - {0x7551, 6666}, - {0x7553, 4235}, - {0x7554, 4917}, - {0x7559, 4586}, - {0x755b, 6995}, - {0x755c, 7289}, - {0x755d, 4825}, - {0x7562, 7609}, - {0x7565, 4426}, - {0x7566, 8008}, - {0x756a, 5000}, - {0x756f, 6914}, - {0x7570, 6424}, - {0x7575, 7868}, - {0x7576, 4246}, - {0x7578, 4099}, - {0x757a, 3546}, - {0x757f, 4100}, - {0x7586, 3547}, - {0x7587, 6883}, - {0x758a, 7192}, - {0x758b, 7610}, - {0x758e, 5520}, - {0x758f, 5519}, - {0x7591, 6403}, - {0x759d, 5310}, - {0x75a5, 3571}, - {0x75ab, 5951}, - {0x75b1, 7558}, - {0x75b2, 7599}, - {0x75b3, 3522}, - {0x75b5, 6498}, - {0x75b8, 4215}, - {0x75b9, 6996}, - {0x75bc, 4342}, - {0x75bd, 6605}, - {0x75be, 7022}, - {0x75c2, 3453}, - {0x75c5, 5052}, - {0x75c7, 6937}, - {0x75cd, 6425}, - {0x75d2, 5892}, - {0x75d4, 7346}, - {0x75d5, 8022}, - {0x75d8, 4352}, - {0x75d9, 3686}, - {0x75db, 7455}, - {0x75e2, 4627}, - {0x75f0, 4226}, - {0x75f2, 4658}, - {0x75f4, 7347}, - {0x75fa, 5202}, - {0x75fc, 3746}, - {0x7600, 5906}, - {0x760d, 5893}, - {0x7619, 5521}, - {0x761f, 6085}, - {0x7620, 7143}, - {0x7621, 7108}, - {0x7622, 4918}, - {0x7624, 4587}, - {0x7626, 5595}, - {0x763b, 4570}, - {0x7642, 4557}, - {0x764c, 5826}, - {0x764e, 3489}, - {0x7652, 6339}, - {0x7656, 5026}, - {0x7661, 7348}, - {0x7664, 6688}, - {0x7669, 4376}, - {0x766c, 5433}, - {0x7670, 6094}, - {0x7672, 6667}, - {0x7678, 3718}, - {0x767b, 4368}, - {0x767c, 4935}, - {0x767d, 4993}, - {0x767e, 4994}, - {0x7684, 6627}, - {0x7686, 3572}, - {0x7687, 7920}, - {0x768e, 3880}, - {0x7690, 3747}, - {0x7693, 7825}, - {0x76ae, 7600}, - {0x76ba, 7272}, - {0x76bf, 4755}, - {0x76c2, 6213}, - {0x76c3, 4978}, - {0x76c6, 5164}, - {0x76c8, 6021}, - {0x76ca, 6438}, - {0x76d2, 7665}, - {0x76d6, 3573}, - {0x76db, 5484}, - {0x76dc, 4293}, - {0x76de, 6526}, - {0x76df, 4731}, - {0x76e1, 6997}, - {0x76e3, 3523}, - {0x76e4, 4919}, - {0x76e7, 4518}, - {0x76ee, 4791}, - {0x76f2, 4730}, - {0x76f4, 6975}, - {0x76f8, 5352}, - {0x76fc, 4920}, - {0x76fe, 5652}, - {0x7701, 5485}, - {0x7704, 4740}, - {0x7708, 7421}, - {0x7709, 4862}, - {0x770b, 3490}, - {0x771e, 6998}, - {0x7720, 4741}, - {0x7729, 7744}, - {0x7737, 3978}, - {0x7738, 4780}, - {0x773a, 6805}, - {0x773c, 5812}, - {0x7740, 7057}, - {0x774d, 7745}, - {0x775b, 6737}, - {0x7761, 5596}, - {0x7763, 4314}, - {0x7766, 4792}, - {0x776b, 7193}, - {0x7779, 4294}, - {0x777e, 3748}, - {0x777f, 6037}, - {0x778b, 6999}, - {0x7791, 4756}, - {0x779e, 4682}, - {0x77a5, 5038}, - {0x77ac, 5653}, - {0x77ad, 4558}, - {0x77b0, 3524}, - {0x77b3, 4343}, - {0x77bb, 7182}, - {0x77bc, 3621}, - {0x77bf, 3925}, - {0x77d7, 7244}, - {0x77db, 4781}, - {0x77dc, 4060}, - {0x77e2, 5709}, - {0x77e3, 6404}, - {0x77e5, 6960}, - {0x77e9, 3926}, - {0x77ed, 4204}, - {0x77ee, 6134}, - {0x77ef, 3881}, - {0x77f3, 5413}, - {0x7802, 5277}, - {0x7812, 5203}, - {0x7825, 6961}, - {0x7826, 7120}, - {0x7827, 7373}, - {0x782c, 4652}, - {0x7832, 7559}, - {0x7834, 7485}, - {0x7845, 4000}, - {0x784f, 5976}, - {0x785d, 7226}, - {0x786b, 4588}, - {0x786c, 3687}, - {0x786f, 5977}, - {0x787c, 5178}, - {0x7881, 4101}, - {0x7887, 6738}, - {0x788c, 4528}, - {0x788d, 5847}, - {0x788e, 5563}, - {0x7891, 5204}, - {0x7897, 6116}, - {0x78a3, 3504}, - {0x78a7, 5027}, - {0x78a9, 5414}, - {0x78ba, 7879}, - {0x78bb, 7880}, - {0x78bc, 4659}, - {0x78c1, 6499}, - {0x78c5, 4956}, - {0x78ca, 4546}, - {0x78cb, 7050}, - {0x78ce, 3719}, - {0x78d0, 4921}, - {0x78e8, 4660}, - {0x78ec, 3688}, - {0x78ef, 4102}, - {0x78f5, 3491}, - {0x78fb, 4922}, - {0x7901, 7227}, - {0x790e, 7228}, - {0x7916, 5940}, - {0x792a, 4450}, - {0x792b, 4462}, - {0x792c, 4923}, - {0x793a, 5710}, - {0x793e, 5278}, - {0x7940, 5279}, - {0x7941, 4103}, - {0x7947, 4104}, - {0x7948, 4105}, - {0x7949, 6962}, - {0x7950, 6214}, - {0x7956, 6806}, - {0x7957, 6963}, - {0x795a, 6807}, - {0x795b, 3595}, - {0x795c, 7826}, - {0x795d, 7290}, - {0x795e, 5746}, - {0x7960, 5280}, - {0x7965, 5353}, - {0x7968, 7584}, - {0x796d, 6769}, - {0x797a, 4106}, - {0x797f, 4529}, - {0x7981, 4044}, - {0x798d, 7869}, - {0x798e, 6739}, - {0x798f, 5081}, - {0x7991, 6215}, - {0x79a6, 5907}, - {0x79a7, 8052}, - {0x79aa, 5434}, - {0x79ae, 4508}, - {0x79b1, 4295}, - {0x79b3, 5894}, - {0x79b9, 6216}, - {0x79bd, 4045}, - {0x79be, 7870}, - {0x79bf, 4315}, - {0x79c0, 5597}, - {0x79c1, 5281}, - {0x79c9, 5053}, - {0x79ca, 4162}, - {0x79cb, 7273}, - {0x79d1, 3807}, - {0x79d2, 7229}, - {0x79d5, 5205}, - {0x79d8, 5206}, - {0x79df, 6808}, - {0x79e4, 7377}, - {0x79e6, 7000}, - {0x79e7, 5838}, - {0x79e9, 7023}, - {0x79fb, 6426}, - {0x7a00, 8053}, - {0x7a05, 5496}, - {0x7a08, 3492}, - {0x7a0b, 6740}, - {0x7a0d, 7230}, - {0x7a14, 6474}, - {0x7a17, 7510}, - {0x7a19, 6976}, - {0x7a1a, 7349}, - {0x7a1c, 4609}, - {0x7a1f, 7591}, - {0x7a20, 6809}, - {0x7a2e, 6845}, - {0x7a31, 7378}, - {0x7a36, 6235}, - {0x7a37, 6977}, - {0x7a3b, 4296}, - {0x7a3c, 3454}, - {0x7a3d, 3720}, - {0x7a3f, 3749}, - {0x7a40, 3771}, - {0x7a46, 4793}, - {0x7a49, 7350}, - {0x7a4d, 6628}, - {0x7a4e, 6022}, - {0x7a57, 5598}, - {0x7a61, 5366}, - {0x7a62, 6038}, - {0x7a69, 6086}, - {0x7a6b, 7881}, - {0x7a70, 5895}, - {0x7a74, 7755}, - {0x7a76, 3927}, - {0x7a79, 3965}, - {0x7a7a, 3798}, - {0x7a7d, 6741}, - {0x7a7f, 7157}, - {0x7a81, 4330}, - {0x7a84, 7058}, - {0x7a88, 6156}, - {0x7a92, 7024}, - {0x7a93, 7109}, - {0x7a95, 6810}, - {0x7a98, 3954}, - {0x7a9f, 3962}, - {0x7aa9, 6101}, - {0x7aaa, 6102}, - {0x7aae, 3966}, - {0x7aaf, 6157}, - {0x7aba, 4001}, - {0x7ac4, 7067}, - {0x7ac5, 4002}, - {0x7ac7, 4353}, - {0x7aca, 6689}, - {0x7acb, 4653}, - {0x7ad7, 4809}, - {0x7ad9, 7089}, - {0x7add, 5054}, - {0x7adf, 3689}, - {0x7ae0, 6555}, - {0x7ae3, 6915}, - {0x7ae5, 4344}, - {0x7aea, 5599}, - {0x7aed, 3505}, - {0x7aef, 4205}, - {0x7af6, 3690}, - {0x7af9, 6900}, - {0x7afa, 7291}, - {0x7aff, 3493}, - {0x7b0f, 7852}, - {0x7b11, 5522}, - {0x7b19, 5372}, - {0x7b1b, 6629}, - {0x7b1e, 7439}, - {0x7b20, 4654}, - {0x7b26, 5130}, - {0x7b2c, 6770}, - {0x7b2d, 4496}, - {0x7b39, 5497}, - {0x7b46, 7611}, - {0x7b49, 4369}, - {0x7b4b, 4031}, - {0x7b4c, 6668}, - {0x7b4d, 5654}, - {0x7b4f, 5006}, - {0x7b50, 3849}, - {0x7b51, 7292}, - {0x7b52, 7456}, - {0x7b54, 4236}, - {0x7b56, 7128}, - {0x7b60, 4012}, - {0x7b6c, 5486}, - {0x7b6e, 5390}, - {0x7b75, 5978}, - {0x7b7d, 6073}, - {0x7b87, 3574}, - {0x7b8b, 6669}, - {0x7b8f, 6588}, - {0x7b94, 4896}, - {0x7b95, 4107}, - {0x7b97, 5311}, - {0x7b9a, 7051}, - {0x7b9d, 3656}, - {0x7ba1, 3828}, - {0x7bad, 6670}, - {0x7bb1, 5354}, - {0x7bb4, 6530}, - {0x7bb8, 6606}, - {0x7bc0, 6690}, - {0x7bc1, 7921}, - {0x7bc4, 5016}, - {0x7bc6, 6671}, - {0x7bc7, 7522}, - {0x7bc9, 7293}, - {0x7bd2, 5729}, - {0x7be0, 5523}, - {0x7be4, 4316}, - {0x7be9, 5282}, - {0x7c07, 6829}, - {0x7c12, 7068}, - {0x7c1e, 4206}, - {0x7c21, 3494}, - {0x7c27, 7922}, - {0x7c2a, 6531}, - {0x7c2b, 5524}, - {0x7c3d, 7183}, - {0x7c3e, 4487}, - {0x7c3f, 5131}, - {0x7c43, 4404}, - {0x7c4c, 6884}, - {0x7c4d, 6630}, - {0x7c60, 4541}, - {0x7c64, 7184}, - {0x7c6c, 4628}, - {0x7c73, 4863}, - {0x7c83, 5207}, - {0x7c89, 5165}, - {0x7c92, 4655}, - {0x7c95, 4897}, - {0x7c97, 6811}, - {0x7c98, 6697}, - {0x7c9f, 5541}, - {0x7ca5, 6901}, - {0x7ca7, 6556}, - {0x7cae, 4433}, - {0x7cb1, 4434}, - {0x7cb2, 7070}, - {0x7cb3, 3582}, - {0x7cb9, 5600}, - {0x7cbe, 6742}, - {0x7cca, 7827}, - {0x7cd6, 4247}, - {0x7cde, 5166}, - {0x7cdf, 6812}, - {0x7ce0, 3548}, - {0x7ce7, 4435}, - {0x7cfb, 3721}, - {0x7cfe, 4003}, - {0x7d00, 4108}, - {0x7d02, 6885}, - {0x7d04, 5873}, - {0x7d05, 7859}, - {0x7d06, 6217}, - {0x7d07, 8025}, - {0x7d08, 7895}, - {0x7d0a, 4842}, - {0x7d0b, 4843}, - {0x7d0d, 4150}, - {0x7d10, 4184}, - {0x7d14, 5655}, - {0x7d17, 5283}, - {0x7d18, 3865}, - {0x7d19, 6964}, - {0x7d1a, 4056}, - {0x7d1b, 5167}, - {0x7d20, 5525}, - {0x7d21, 4957}, - {0x7d22, 5367}, - {0x7d2b, 6500}, - {0x7d2c, 6886}, - {0x7d2e, 7081}, - {0x7d2f, 4571}, - {0x7d30, 5498}, - {0x7d33, 5747}, - {0x7d35, 6607}, - {0x7d39, 5526}, - {0x7d3a, 3525}, - {0x7d42, 6846}, - {0x7d43, 7746}, - {0x7d44, 6813}, - {0x7d45, 3691}, - {0x7d46, 4924}, - {0x7d50, 3651}, - {0x7d5e, 3882}, - {0x7d61, 4385}, - {0x7d62, 7747}, - {0x7d66, 4057}, - {0x7d68, 6371}, - {0x7d6a, 6454}, - {0x7d6e, 5391}, - {0x7d71, 7457}, - {0x7d72, 5284}, - {0x7d73, 3549}, - {0x7d76, 6691}, - {0x7d79, 3641}, - {0x7d7f, 3928}, - {0x7d8e, 6743}, - {0x7d8f, 5601}, - {0x7d93, 3692}, - {0x7d9c, 6847}, - {0x7da0, 4530}, - {0x7da2, 6887}, - {0x7dac, 5602}, - {0x7dad, 6340}, - {0x7db1, 3550}, - {0x7db2, 4701}, - {0x7db4, 7173}, - {0x7db5, 7121}, - {0x7db8, 4598}, - {0x7dba, 4109}, - {0x7dbb, 7416}, - {0x7dbd, 6517}, - {0x7dbe, 4610}, - {0x7dbf, 4742}, - {0x7dc7, 7351}, - {0x7dca, 4126}, - {0x7dcb, 5208}, - {0x7dd6, 5392}, - {0x7dd8, 7658}, - {0x7dda, 5435}, - {0x7ddd, 7034}, - {0x7dde, 4207}, - {0x7de0, 7209}, - {0x7de1, 4881}, - {0x7de3, 5979}, - {0x7de8, 7523}, - {0x7de9, 6117}, - {0x7dec, 4743}, - {0x7def, 6297}, - {0x7df4, 4471}, - {0x7dfb, 7352}, - {0x7e09, 7001}, - {0x7e0a, 5855}, - {0x7e15, 6087}, - {0x7e1b, 4898}, - {0x7e1d, 7002}, - {0x7e1e, 7828}, - {0x7e1f, 6171}, - {0x7e21, 6581}, - {0x7e23, 7748}, - {0x7e2b, 5103}, - {0x7e2e, 7294}, - {0x7e2f, 5980}, - {0x7e31, 6848}, - {0x7e37, 4572}, - {0x7e3d, 7257}, - {0x7e3e, 6631}, - {0x7e41, 5001}, - {0x7e43, 5179}, - {0x7e46, 4826}, - {0x7e47, 6158}, - {0x7e52, 6938}, - {0x7e54, 6978}, - {0x7e55, 5436}, - {0x7e5e, 6159}, - {0x7e61, 5603}, - {0x7e69, 5689}, - {0x7e6a, 7942}, - {0x7e6b, 3722}, - {0x7e6d, 3642}, - {0x7e70, 6814}, - {0x7e79, 5952}, - {0x7e7c, 3723}, - {0x7e82, 7069}, - {0x7e8c, 5542}, - {0x7e8f, 6672}, - {0x7e93, 6023}, - {0x7e96, 5466}, - {0x7e98, 7071}, - {0x7e9b, 4317}, - {0x7e9c, 4405}, - {0x7f36, 5132}, - {0x7f38, 7681}, - {0x7f3a, 3652}, - {0x7f4c, 5859}, - {0x7f50, 3829}, - {0x7f54, 4702}, - {0x7f55, 7643}, - {0x7f6a, 6859}, - {0x7f6b, 3854}, - {0x7f6e, 7353}, - {0x7f70, 5007}, - {0x7f72, 5393}, - {0x7f75, 4717}, - {0x7f77, 7486}, - {0x7f79, 4629}, - {0x7f85, 4377}, - {0x7f88, 4110}, - {0x7f8a, 5896}, - {0x7f8c, 3551}, - {0x7f8e, 4864}, - {0x7f94, 3750}, - {0x7f9a, 4497}, - {0x7f9e, 5604}, - {0x7fa4, 3955}, - {0x7fa8, 5437}, - {0x7fa9, 6405}, - {0x7fb2, 8054}, - {0x7fb8, 4630}, - {0x7fb9, 3583}, - {0x7fbd, 6218}, - {0x7fc1, 6095}, - {0x7fc5, 5711}, - {0x7fca, 6439}, - {0x7fcc, 6440}, - {0x7fce, 4498}, - {0x7fd2, 5679}, - {0x7fd4, 5355}, - {0x7fd5, 8033}, - {0x7fdf, 6632}, - {0x7fe0, 7322}, - {0x7fe1, 5209}, - {0x7fe9, 7524}, - {0x7feb, 6118}, - {0x7ff0, 7644}, - {0x7ff9, 3883}, - {0x7ffc, 6441}, - {0x8000, 6160}, - {0x8001, 4519}, - {0x8003, 3751}, - {0x8005, 6501}, - {0x8006, 4111}, - {0x8009, 3929}, - {0x800c, 6427}, - {0x8010, 4158}, - {0x8015, 3693}, - {0x8017, 4782}, - {0x8018, 6243}, - {0x802d, 4112}, - {0x8033, 6428}, - {0x8036, 5870}, - {0x803d, 7422}, - {0x803f, 3694}, - {0x8043, 4227}, - {0x8046, 4499}, - {0x804a, 4559}, - {0x8056, 5487}, - {0x8058, 5239}, - {0x805a, 7323}, - {0x805e, 4844}, - {0x806f, 4472}, - {0x8070, 7258}, - {0x8072, 5488}, - {0x8073, 6191}, - {0x8077, 6979}, - {0x807d, 7200}, - {0x807e, 4542}, - {0x807f, 6368}, - {0x8084, 6429}, - {0x8085, 5638}, - {0x8086, 5285}, - {0x8087, 6815}, - {0x8089, 6357}, - {0x808b, 4605}, - {0x808c, 4113}, - {0x8096, 7231}, - {0x809b, 7682}, - {0x809d, 3495}, - {0x80a1, 3752}, - {0x80a2, 6965}, - {0x80a5, 5210}, - {0x80a9, 3643}, - {0x80aa, 4958}, - {0x80af, 4061}, - {0x80b1, 3866}, - {0x80b2, 6358}, - {0x80b4, 7963}, - {0x80ba, 7540}, - {0x80c3, 6298}, - {0x80c4, 6865}, - {0x80cc, 4979}, - {0x80ce, 7440}, - {0x80da, 4980}, - {0x80db, 3533}, - {0x80de, 7560}, - {0x80e1, 7829}, - {0x80e4, 6364}, - {0x80e5, 5394}, - {0x80f1, 3850}, - {0x80f4, 4345}, - {0x80f8, 8017}, - {0x80fd, 4185}, - {0x8102, 6966}, - {0x8105, 7766}, - {0x8106, 7324}, - {0x8107, 7767}, - {0x8108, 4722}, - {0x810a, 7144}, - {0x8118, 6119}, - {0x811a, 3472}, - {0x811b, 3695}, - {0x8123, 5656}, - {0x8129, 5605}, - {0x812b, 7419}, - {0x812f, 7561}, - {0x8139, 7110}, - {0x813e, 5211}, - {0x814b, 5856}, - {0x814e, 5748}, - {0x8150, 5133}, - {0x8151, 5134}, - {0x8154, 3552}, - {0x8155, 6120}, - {0x8165, 5489}, - {0x8166, 4179}, - {0x816b, 6849}, - {0x8170, 6161}, - {0x8171, 3608}, - {0x8178, 6557}, - {0x8179, 5082}, - {0x817a, 5438}, - {0x817f, 7461}, - {0x8180, 4959}, - {0x8188, 3634}, - {0x818a, 4899}, - {0x818f, 3753}, - {0x819a, 5135}, - {0x819c, 4667}, - {0x819d, 5675}, - {0x81a0, 3884}, - {0x81a3, 7025}, - {0x81a8, 7516}, - {0x81b3, 5439}, - {0x81b5, 7313}, - {0x81ba, 6392}, - {0x81bd, 4228}, - {0x81be, 7943}, - {0x81bf, 4176}, - {0x81c0, 4359}, - {0x81c2, 5212}, - {0x81c6, 5916}, - {0x81cd, 6771}, - {0x81d8, 4410}, - {0x81df, 6558}, - {0x81e3, 5749}, - {0x81e5, 6103}, - {0x81e7, 6559}, - {0x81e8, 4650}, - {0x81ea, 6502}, - {0x81ed, 7325}, - {0x81f3, 6967}, - {0x81f4, 7354}, - {0x81fa, 4261}, - {0x81fb, 7003}, - {0x81fc, 3930}, - {0x81fe, 6341}, - {0x8205, 3931}, - {0x8207, 5941}, - {0x8208, 8034}, - {0x820a, 3932}, - {0x820c, 5456}, - {0x820d, 5286}, - {0x8212, 5395}, - {0x821b, 7158}, - {0x821c, 5657}, - {0x821e, 4827}, - {0x821f, 6888}, - {0x8221, 3553}, - {0x822a, 7683}, - {0x822b, 4960}, - {0x822c, 4925}, - {0x8235, 7390}, - {0x8236, 4900}, - {0x8237, 7749}, - {0x8239, 5440}, - {0x8240, 5136}, - {0x8245, 5942}, - {0x8247, 6744}, - {0x8259, 7111}, - {0x8264, 6406}, - {0x8266, 7659}, - {0x826e, 3496}, - {0x826f, 4436}, - {0x8271, 3497}, - {0x8272, 5368}, - {0x8276, 5994}, - {0x8278, 7232}, - {0x827e, 5848}, - {0x828b, 6219}, - {0x828d, 6518}, - {0x828e, 3967}, - {0x8292, 4703}, - {0x8299, 5137}, - {0x829a, 4360}, - {0x829d, 6968}, - {0x829f, 5324}, - {0x82a5, 3575}, - {0x82a6, 7830}, - {0x82a9, 4046}, - {0x82ac, 5168}, - {0x82ad, 7487}, - {0x82ae, 6039}, - {0x82af, 5769}, - {0x82b1, 7871}, - {0x82b3, 4961}, - {0x82b7, 6969}, - {0x82b8, 6244}, - {0x82b9, 4032}, - {0x82bb, 7274}, - {0x82bc, 4783}, - {0x82bd, 5783}, - {0x82bf, 6482}, - {0x82d1, 6274}, - {0x82d2, 5995}, - {0x82d4, 7441}, - {0x82d5, 7233}, - {0x82d7, 4810}, - {0x82db, 3455}, - {0x82de, 7562}, - {0x82df, 3933}, - {0x82e1, 6430}, - {0x82e5, 5874}, - {0x82e6, 3754}, - {0x82e7, 6608}, - {0x82f1, 6024}, - {0x82fd, 3755}, - {0x82fe, 7612}, - {0x8301, 6921}, - {0x8302, 4828}, - {0x8303, 5017}, - {0x8304, 3456}, - {0x8305, 4784}, - {0x8309, 4693}, - {0x8317, 4757}, - {0x8328, 6503}, - {0x832b, 4704}, - {0x832f, 5083}, - {0x8331, 5606}, - {0x8334, 7944}, - {0x8335, 6455}, - {0x8336, 4191}, - {0x8338, 6192}, - {0x8339, 5943}, - {0x8340, 5658}, - {0x8347, 7708}, - {0x8349, 7234}, - {0x834a, 7784}, - {0x834f, 6475}, - {0x8351, 6431}, - {0x8352, 7923}, - {0x8373, 4354}, - {0x8377, 7624}, - {0x837b, 6633}, - {0x8389, 4631}, - {0x838a, 6560}, - {0x838e, 5287}, - {0x8396, 3696}, - {0x8398, 5750}, - {0x839e, 6121}, - {0x83a2, 7768}, - {0x83a9, 5138}, - {0x83aa, 5784}, - {0x83ab, 4668}, - {0x83bd, 4705}, - {0x83c1, 7201}, - {0x83c5, 3830}, - {0x83c9, 4531}, - {0x83ca, 3949}, - {0x83cc, 4013}, - {0x83d3, 3808}, - {0x83d6, 7112}, - {0x83dc, 7122}, - {0x83e9, 5069}, - {0x83eb, 4033}, - {0x83ef, 7872}, - {0x83f0, 3756}, - {0x83f1, 4611}, - {0x83f2, 5213}, - {0x83f4, 5827}, - {0x83f9, 6609}, - {0x83fd, 5639}, - {0x8403, 7314}, - {0x8404, 4297}, - {0x840a, 4423}, - {0x840c, 4732}, - {0x840d, 7532}, - {0x840e, 6299}, - {0x8429, 7275}, - {0x842c, 4683}, - {0x8431, 7993}, - {0x8438, 6342}, - {0x843d, 4386}, - {0x8449, 6001}, - {0x8457, 6610}, - {0x845b, 3506}, - {0x8461, 7563}, - {0x8463, 4346}, - {0x8466, 6300}, - {0x846b, 7831}, - {0x846c, 6561}, - {0x846f, 5875}, - {0x8475, 4004}, - {0x847a, 6930}, - {0x8490, 5607}, - {0x8494, 5712}, - {0x8499, 4799}, - {0x849c, 5312}, - {0x84a1, 4962}, - {0x84b2, 7564}, - {0x84b8, 6939}, - {0x84bb, 5876}, - {0x84bc, 7113}, - {0x84bf, 7832}, - {0x84c0, 5549}, - {0x84c2, 4758}, - {0x84c4, 7295}, - {0x84c6, 5415}, - {0x84c9, 6193}, - {0x84cb, 3576}, - {0x84cd, 5713}, - {0x84d1, 5288}, - {0x84da, 5608}, - {0x84ec, 5104}, - {0x84ee, 4473}, - {0x84f4, 5659}, - {0x84fc, 4560}, - {0x8511, 4747}, - {0x8513, 4684}, - {0x8514, 5084}, - {0x8517, 6504}, - {0x8518, 5325}, - {0x851a, 6250}, - {0x851e, 4573}, - {0x8521, 7123}, - {0x8523, 6562}, - {0x8525, 7259}, - {0x852c, 5527}, - {0x852d, 6383}, - {0x852f, 7004}, - {0x853d, 7541}, - {0x853f, 6301}, - {0x8541, 4229}, - {0x8543, 5002}, - {0x8549, 7235}, - {0x854e, 3885}, - {0x8553, 6245}, - {0x8559, 7796}, - {0x8563, 5660}, - {0x8568, 3981}, - {0x8569, 7430}, - {0x856a, 4829}, - {0x856d, 5528}, - {0x8584, 4901}, - {0x8587, 4865}, - {0x858f, 6407}, - {0x8591, 3554}, - {0x8594, 6563}, - {0x859b, 5457}, - {0x85a6, 7159}, - {0x85a8, 7989}, - {0x85a9, 5319}, - {0x85aa, 5751}, - {0x85af, 5396}, - {0x85b0, 7986}, - {0x85ba, 6772}, - {0x85c1, 3757}, - {0x85c9, 6505}, - {0x85cd, 4406}, - {0x85ce, 5752}, - {0x85cf, 6564}, - {0x85d5, 6220}, - {0x85dc, 4451}, - {0x85dd, 6040}, - {0x85e4, 4370}, - {0x85e5, 5877}, - {0x85e9, 5003}, - {0x85ea, 5609}, - {0x85f7, 6611}, - {0x85fa, 4642}, - {0x85fb, 6816}, - {0x85ff, 3817}, - {0x8602, 6041}, - {0x8606, 4520}, - {0x8607, 5529}, - {0x860a, 6088}, - {0x8616, 5924}, - {0x8617, 5028}, - {0x861a, 5441}, - {0x862d, 4395}, - {0x863f, 4378}, - {0x864e, 7833}, - {0x8650, 7632}, - {0x8654, 3609}, - {0x8655, 7133}, - {0x865b, 7721}, - {0x865c, 4521}, - {0x865e, 6221}, - {0x865f, 7834}, - {0x8667, 8009}, - {0x8679, 7860}, - {0x868a, 4845}, - {0x868c, 4963}, - {0x8693, 6456}, - {0x86a3, 3799}, - {0x86a4, 6817}, - {0x86a9, 7355}, - {0x86c7, 5289}, - {0x86cb, 4208}, - {0x86d4, 7945}, - {0x86d9, 6104}, - {0x86db, 6889}, - {0x86df, 3886}, - {0x86e4, 7666}, - {0x86ed, 7026}, - {0x86fe, 5785}, - {0x8700, 7245}, - {0x8702, 5105}, - {0x8703, 5753}, - {0x8708, 6074}, - {0x8718, 6970}, - {0x871a, 5214}, - {0x871c, 4884}, - {0x874e, 3508}, - {0x8755, 5730}, - {0x8757, 7924}, - {0x875f, 6302}, - {0x8766, 7625}, - {0x8768, 5676}, - {0x8774, 7835}, - {0x8776, 6703}, - {0x8778, 6105}, - {0x8782, 4418}, - {0x878d, 6372}, - {0x879f, 4759}, - {0x87a2, 7785}, - {0x87b3, 4248}, - {0x87ba, 4379}, - {0x87c4, 7376}, - {0x87e0, 4926}, - {0x87ec, 5442}, - {0x87ef, 6162}, - {0x87f2, 7309}, - {0x87f9, 7696}, - {0x87fb, 6408}, - {0x87fe, 5467}, - {0x8805, 5690}, - {0x881f, 4411}, - {0x8822, 6916}, - {0x8823, 4452}, - {0x8831, 3758}, - {0x8836, 6532}, - {0x883b, 4685}, - {0x8840, 7756}, - {0x8846, 6924}, - {0x884c, 7709}, - {0x884d, 5981}, - {0x8852, 7750}, - {0x8853, 5668}, - {0x8857, 3457}, - {0x8859, 5786}, - {0x885b, 6303}, - {0x885d, 7310}, - {0x8861, 7786}, - {0x8862, 3934}, - {0x8863, 6409}, - {0x8868, 7585}, - {0x886b, 5326}, - {0x8870, 5565}, - {0x8872, 4151}, - {0x8877, 7311}, - {0x887e, 4047}, - {0x887f, 4048}, - {0x8881, 6275}, - {0x8882, 4763}, - {0x8888, 3458}, - {0x888b, 4262}, - {0x888d, 7565}, - {0x8892, 4209}, - {0x8896, 5610}, - {0x8897, 7005}, - {0x889e, 3782}, - {0x88ab, 7601}, - {0x88b4, 3759}, - {0x88c1, 6582}, - {0x88c2, 4482}, - {0x88cf, 4632}, - {0x88d4, 6042}, - {0x88d5, 6343}, - {0x88d9, 3956}, - {0x88dc, 5070}, - {0x88dd, 6565}, - {0x88df, 5290}, - {0x88e1, 4633}, - {0x88e8, 5215}, - {0x88f3, 5356}, - {0x88f4, 4981}, - {0x88f5, 4982}, - {0x88f8, 4380}, - {0x88fd, 6773}, - {0x8907, 5085}, - {0x8910, 3507}, - {0x8912, 7566}, - {0x8913, 5071}, - {0x8918, 6304}, - {0x8919, 4983}, - {0x8925, 6172}, - {0x892a, 7462}, - {0x8936, 5680}, - {0x8938, 4574}, - {0x893b, 5458}, - {0x8941, 3555}, - {0x8944, 5897}, - {0x895f, 4049}, - {0x8964, 4407}, - {0x896a, 4694}, - {0x8972, 5681}, - {0x897f, 5397}, - {0x8981, 6163}, - {0x8983, 4230}, - {0x8986, 5086}, - {0x8987, 7511}, - {0x898b, 3644}, - {0x898f, 4005}, - {0x8993, 4734}, - {0x8996, 5714}, - {0x89a1, 3635}, - {0x89a9, 4298}, - {0x89aa, 7363}, - {0x89b2, 4034}, - {0x89ba, 3473}, - {0x89bd, 4408}, - {0x89c0, 3831}, - {0x89d2, 3474}, - {0x89e3, 7697}, - {0x89f4, 5357}, - {0x89f8, 7246}, - {0x8a00, 5921}, - {0x8a02, 6745}, - {0x8a03, 5139}, - {0x8a08, 3724}, - {0x8a0a, 5754}, - {0x8a0c, 7861}, - {0x8a0e, 7452}, - {0x8a13, 7987}, - {0x8a16, 8026}, - {0x8a17, 7406}, - {0x8a18, 4114}, - {0x8a1b, 6106}, - {0x8a1d, 5787}, - {0x8a1f, 5557}, - {0x8a23, 3653}, - {0x8a25, 4182}, - {0x8a2a, 4964}, - {0x8a2d, 5459}, - {0x8a31, 7722}, - {0x8a34, 5530}, - {0x8a36, 3459}, - {0x8a3a, 7006}, - {0x8a3b, 6890}, - {0x8a50, 5291}, - {0x8a54, 6818}, - {0x8a55, 7533}, - {0x8a5b, 6612}, - {0x8a5e, 5292}, - {0x8a60, 6025}, - {0x8a62, 5661}, - {0x8a63, 6043}, - {0x8a66, 5715}, - {0x8a69, 5716}, - {0x8a6d, 3987}, - {0x8a6e, 6673}, - {0x8a70, 8055}, - {0x8a71, 7873}, - {0x8a72, 7698}, - {0x8a73, 5358}, - {0x8a75, 5443}, - {0x8a79, 7185}, - {0x8a85, 6891}, - {0x8a87, 3809}, - {0x8a8c, 6971}, - {0x8a8d, 6457}, - {0x8a93, 5398}, - {0x8a95, 7417}, - {0x8a98, 6344}, - {0x8a9e, 5908}, - {0x8aa0, 5490}, - {0x8aa1, 3725}, - {0x8aa3, 4830}, - {0x8aa4, 6075}, - {0x8aa5, 3760}, - {0x8aa6, 5558}, - {0x8aa8, 7946}, - {0x8aaa, 5460}, - {0x8ab0, 5611}, - {0x8ab2, 3810}, - {0x8ab9, 5216}, - {0x8abc, 6410}, - {0x8abe, 6377}, - {0x8abf, 6819}, - {0x8ac2, 7186}, - {0x8ac4, 5662}, - {0x8ac7, 4231}, - {0x8acb, 7202}, - {0x8acd, 6589}, - {0x8acf, 7276}, - {0x8ad2, 4437}, - {0x8ad6, 4535}, - {0x8adb, 6345}, - {0x8adc, 7194}, - {0x8ae1, 5717}, - {0x8ae6, 7210}, - {0x8ae7, 7699}, - {0x8aea, 6746}, - {0x8aeb, 3498}, - {0x8aed, 6346}, - {0x8aee, 6506}, - {0x8af1, 8002}, - {0x8af6, 5770}, - {0x8af7, 7593}, - {0x8af8, 6774}, - {0x8afa, 5922}, - {0x8afe, 4139}, - {0x8b00, 4785}, - {0x8b01, 5818}, - {0x8b02, 6305}, - {0x8b04, 4371}, - {0x8b0e, 4866}, - {0x8b10, 4885}, - {0x8b14, 7633}, - {0x8b16, 5543}, - {0x8b17, 4965}, - {0x8b19, 3657}, - {0x8b1a, 6442}, - {0x8b1b, 3556}, - {0x8b1d, 5293}, - {0x8b20, 6164}, - {0x8b28, 4786}, - {0x8b2b, 6634}, - {0x8b2c, 4589}, - {0x8b33, 3935}, - {0x8b39, 4035}, - {0x8b41, 7874}, - {0x8b49, 6940}, - {0x8b4e, 8011}, - {0x8b4f, 4115}, - {0x8b58, 5731}, - {0x8b5a, 4232}, - {0x8b5c, 5072}, - {0x8b66, 3697}, - {0x8b6c, 5217}, - {0x8b6f, 5953}, - {0x8b70, 6411}, - {0x8b74, 3645}, - {0x8b77, 7836}, - {0x8b7d, 6044}, - {0x8b80, 4318}, - {0x8b8a, 5033}, - {0x8b90, 5612}, - {0x8b92, 7090}, - {0x8b93, 5898}, - {0x8b96, 7091}, - {0x8b9a, 7072}, - {0x8c37, 3772}, - {0x8c3f, 3726}, - {0x8c41, 7902}, - {0x8c46, 4355}, - {0x8c48, 4116}, - {0x8c4a, 7594}, - {0x8c4c, 6122}, - {0x8c55, 5718}, - {0x8c5a, 4327}, - {0x8c61, 5359}, - {0x8c6a, 7837}, - {0x8c6b, 6045}, - {0x8c79, 7586}, - {0x8c7a, 5719}, - {0x8c82, 7236}, - {0x8c8a, 4723}, - {0x8c8c, 4787}, - {0x8c9d, 7512}, - {0x8c9e, 6747}, - {0x8ca0, 5140}, - {0x8ca1, 6583}, - {0x8ca2, 3800}, - {0x8ca7, 5234}, - {0x8ca8, 7875}, - {0x8ca9, 7495}, - {0x8caa, 7423}, - {0x8cab, 3832}, - {0x8cac, 7129}, - {0x8caf, 6613}, - {0x8cb0, 5499}, - {0x8cb3, 6433}, - {0x8cb4, 3992}, - {0x8cb6, 7528}, - {0x8cb7, 4718}, - {0x8cb8, 4263}, - {0x8cbb, 5218}, - {0x8cbc, 7195}, - {0x8cbd, 6432}, - {0x8cbf, 4831}, - {0x8cc0, 7626}, - {0x8cc1, 5169}, - {0x8cc2, 4547}, - {0x8cc3, 6476}, - {0x8cc4, 7947}, - {0x8cc7, 6507}, - {0x8cc8, 3460}, - {0x8cca, 6635}, - {0x8cd1, 7007}, - {0x8cd3, 5235}, - {0x8cda, 4548}, - {0x8cdc, 5294}, - {0x8cde, 5360}, - {0x8ce0, 4984}, - {0x8ce2, 7751}, - {0x8ce3, 4719}, - {0x8ce4, 7160}, - {0x8ce6, 5141}, - {0x8cea, 7027}, - {0x8ced, 4299}, - {0x8cf4, 4549}, - {0x8cfb, 5142}, - {0x8cfc, 3936}, - {0x8cfd, 5364}, - {0x8d04, 6972}, - {0x8d05, 7315}, - {0x8d07, 6365}, - {0x8d08, 6941}, - {0x8d0a, 7073}, - {0x8d0d, 5468}, - {0x8d13, 6566}, - {0x8d16, 5544}, - {0x8d64, 6636}, - {0x8d66, 5295}, - {0x8d6b, 7732}, - {0x8d70, 6892}, - {0x8d73, 4006}, - {0x8d74, 5143}, - {0x8d77, 4117}, - {0x8d85, 7237}, - {0x8d8a, 6282}, - {0x8d99, 6820}, - {0x8da3, 7326}, - {0x8da8, 7277}, - {0x8db3, 6830}, - {0x8dba, 5144}, - {0x8dbe, 6973}, - {0x8dc6, 7442}, - {0x8dcb, 4936}, - {0x8dcc, 7028}, - {0x8dcf, 3461}, - {0x8ddb, 7488}, - {0x8ddd, 3596}, - {0x8de1, 6637}, - {0x8de3, 5444}, - {0x8de8, 3811}, - {0x8def, 4522}, - {0x8df3, 4300}, - {0x8e0a, 6194}, - {0x8e0f, 4237}, - {0x8e10, 7161}, - {0x8e1e, 3597}, - {0x8e2a, 6850}, - {0x8e30, 6347}, - {0x8e35, 6851}, - {0x8e42, 6348}, - {0x8e44, 6775}, - {0x8e47, 3610}, - {0x8e48, 4301}, - {0x8e49, 7052}, - {0x8e4a, 7797}, - {0x8e59, 7296}, - {0x8e5f, 6638}, - {0x8e60, 7145}, - {0x8e74, 7297}, - {0x8e76, 3982}, - {0x8e81, 6821}, - {0x8e87, 6614}, - {0x8e8a, 6893}, - {0x8e8d, 5878}, - {0x8eaa, 4643}, - {0x8eab, 5755}, - {0x8eac, 3968}, - {0x8ec0, 3937}, - {0x8eca, 7053}, - {0x8ecb, 5819}, - {0x8ecc, 3988}, - {0x8ecd, 3957}, - {0x8ed2, 7726}, - {0x8edf, 5982}, - {0x8eeb, 7008}, - {0x8ef8, 7298}, - {0x8efb, 3462}, - {0x8efe, 5732}, - {0x8f03, 3887}, - {0x8f05, 4523}, - {0x8f09, 6584}, - {0x8f12, 7196}, - {0x8f13, 4686}, - {0x8f14, 5073}, - {0x8f15, 3698}, - {0x8f1b, 4438}, - {0x8f1c, 7356}, - {0x8f1d, 8003}, - {0x8f1e, 4706}, - {0x8f1f, 7174}, - {0x8f26, 4474}, - {0x8f27, 5055}, - {0x8f29, 4985}, - {0x8f2a, 4599}, - {0x8f2f, 7035}, - {0x8f33, 6894}, - {0x8f38, 5613}, - {0x8f39, 5087}, - {0x8f3b, 5088}, - {0x8f3e, 6674}, - {0x8f3f, 5944}, - {0x8f44, 7650}, - {0x8f45, 6276}, - {0x8f49, 6675}, - {0x8f4d, 7175}, - {0x8f4e, 3888}, - {0x8f5d, 5945}, - {0x8f5f, 3867}, - {0x8f62, 4463}, - {0x8f9b, 5756}, - {0x8f9c, 3761}, - {0x8fa3, 4398}, - {0x8fa6, 7496}, - {0x8fa8, 5034}, - {0x8fad, 5296}, - {0x8faf, 5035}, - {0x8fb0, 7009}, - {0x8fb1, 6173}, - {0x8fb2, 4177}, - {0x8fc2, 6222}, - {0x8fc5, 5757}, - {0x8fce, 6026}, - {0x8fd1, 4036}, - {0x8fd4, 4927}, - {0x8fe6, 3463}, - {0x8fea, 6639}, - {0x8feb, 4902}, - {0x8fed, 7029}, - {0x8ff0, 5669}, - {0x8ff2, 3626}, - {0x8ff7, 4867}, - {0x8ff9, 6640}, - {0x8ffd, 7278}, - {0x9000, 7463}, - {0x9001, 5559}, - {0x9002, 3838}, - {0x9003, 4302}, - {0x9005, 7978}, - {0x9006, 5954}, - {0x9008, 7787}, - {0x900b, 7567}, - {0x900d, 5531}, - {0x900f, 7469}, - {0x9010, 7299}, - {0x9011, 3938}, - {0x9014, 4303}, - {0x9015, 3699}, - {0x9017, 4356}, - {0x9019, 6615}, - {0x901a, 7458}, - {0x901d, 5399}, - {0x901e, 4500}, - {0x901f, 5545}, - {0x9020, 6822}, - {0x9021, 6917}, - {0x9022, 5106}, - {0x9023, 4475}, - {0x902e, 7211}, - {0x9031, 6895}, - {0x9032, 7010}, - {0x9035, 4007}, - {0x9038, 6466}, - {0x903c, 7615}, - {0x903e, 6350}, - {0x9041, 4361}, - {0x9042, 5614}, - {0x9047, 6223}, - {0x904a, 6349}, - {0x904b, 6246}, - {0x904d, 7525}, - {0x904e, 3812}, - {0x9050, 7627}, - {0x9051, 7925}, - {0x9053, 4304}, - {0x9054, 4216}, - {0x9055, 6306}, - {0x9059, 6165}, - {0x905c, 5550}, - {0x905d, 4238}, - {0x905e, 7212}, - {0x9060, 6277}, - {0x9061, 5532}, - {0x9063, 3646}, - {0x9069, 6641}, - {0x906d, 6823}, - {0x906e, 7054}, - {0x906f, 4362}, - {0x9072, 6974}, - {0x9075, 6918}, - {0x9077, 7162}, - {0x9078, 5445}, - {0x907a, 6351}, - {0x907c, 4561}, - {0x907d, 3598}, - {0x907f, 7602}, - {0x9080, 6166}, - {0x9081, 4720}, - {0x9082, 7700}, - {0x9083, 5615}, - {0x9084, 7896}, - {0x9087, 6434}, - {0x9088, 4669}, - {0x908a, 5036}, - {0x908f, 4381}, - {0x9091, 6389}, - {0x9095, 6096}, - {0x9099, 4707}, - {0x90a2, 7788}, - {0x90a3, 4138}, - {0x90a6, 4966}, - {0x90a8, 7250}, - {0x90aa, 5297}, - {0x90af, 3526}, - {0x90b0, 7443}, - {0x90b1, 3939}, - {0x90b5, 5533}, - {0x90b8, 6616}, - {0x90c1, 6236}, - {0x90ca, 3889}, - {0x90de, 4419}, - {0x90e1, 3958}, - {0x90e8, 5145}, - {0x90ed, 3818}, - {0x90f5, 6224}, - {0x90fd, 4305}, - {0x9102, 5802}, - {0x9112, 7279}, - {0x9115, 7714}, - {0x9119, 5219}, - {0x9127, 4372}, - {0x912d, 6748}, - {0x9132, 4210}, - {0x9149, 6352}, - {0x914a, 6749}, - {0x914b, 7280}, - {0x914c, 6519}, - {0x914d, 4986}, - {0x914e, 6896}, - {0x9152, 6897}, - {0x9162, 7238}, - {0x9169, 4760}, - {0x916a, 4387}, - {0x916c, 5616}, - {0x9175, 7964}, - {0x9177, 7843}, - {0x9178, 5313}, - {0x9187, 5663}, - {0x9189, 7327}, - {0x918b, 7239}, - {0x918d, 6776}, - {0x9192, 5491}, - {0x919c, 7281}, - {0x91ab, 6412}, - {0x91ac, 6567}, - {0x91ae, 7240}, - {0x91af, 7798}, - {0x91b1, 4937}, - {0x91b4, 4509}, - {0x91b5, 3584}, - {0x91c0, 5899}, - {0x91c7, 7124}, - {0x91c9, 6353}, - {0x91cb, 5416}, - {0x91cc, 4634}, - {0x91cd, 6925}, - {0x91ce, 5871}, - {0x91cf, 4439}, - {0x91d0, 4635}, - {0x91d1, 4131}, - {0x91d7, 5566}, - {0x91d8, 6750}, - {0x91dc, 5146}, - {0x91dd, 7374}, - {0x91e3, 6824}, - {0x91e7, 7163}, - {0x91ea, 6225}, - {0x91f5, 7125}, - {0x920d, 4363}, - {0x9210, 3622}, - {0x9211, 7497}, - {0x9212, 5329}, - {0x9217, 6366}, - {0x921e, 4014}, - {0x9234, 4501}, - {0x923a, 6082}, - {0x923f, 6676}, - {0x9240, 3534}, - {0x9245, 3599}, - {0x9249, 7752}, - {0x9257, 3658}, - {0x925b, 5983}, - {0x925e, 6283}, - {0x9262, 4938}, - {0x9264, 3940}, - {0x9265, 5670}, - {0x9266, 6751}, - {0x9280, 6378}, - {0x9283, 7260}, - {0x9285, 4347}, - {0x9291, 5446}, - {0x9293, 6677}, - {0x9296, 5617}, - {0x9298, 4761}, - {0x929c, 7660}, - {0x92b3, 6046}, - {0x92b6, 3941}, - {0x92b7, 5534}, - {0x92b9, 5618}, - {0x92cc, 6752}, - {0x92cf, 7769}, - {0x92d2, 5107}, - {0x92e4, 5400}, - {0x92ea, 7568}, - {0x92f8, 3600}, - {0x92fc, 3557}, - {0x9304, 4532}, - {0x9310, 7282}, - {0x9318, 7283}, - {0x931a, 6590}, - {0x931e, 5664}, - {0x931f, 4233}, - {0x9320, 6753}, - {0x9321, 4118}, - {0x9322, 6678}, - {0x9324, 4119}, - {0x9326, 4050}, - {0x9328, 4811}, - {0x932b, 5417}, - {0x932e, 3762}, - {0x932f, 7059}, - {0x9348, 6027}, - {0x934a, 4476}, - {0x934b, 3813}, - {0x934d, 4306}, - {0x9354, 5803}, - {0x935b, 4211}, - {0x936e, 6354}, - {0x9375, 3611}, - {0x937c, 7375}, - {0x937e, 6852}, - {0x938c, 3659}, - {0x9394, 6195}, - {0x9396, 5564}, - {0x939a, 7284}, - {0x93a3, 7789}, - {0x93a7, 3577}, - {0x93ac, 7838}, - {0x93ad, 7011}, - {0x93b0, 6467}, - {0x93c3, 6831}, - {0x93d1, 6642}, - {0x93de, 6196}, - {0x93e1, 3700}, - {0x93e4, 4575}, - {0x93f6, 7036}, - {0x9404, 7952}, - {0x9418, 6853}, - {0x9425, 5447}, - {0x942b, 6679}, - {0x9435, 7176}, - {0x9438, 7407}, - {0x9444, 6898}, - {0x9451, 3527}, - {0x9452, 3528}, - {0x945b, 3851}, - {0x947d, 7074}, - {0x947f, 7060}, - {0x9577, 6568}, - {0x9580, 4846}, - {0x9583, 5469}, - {0x9589, 7542}, - {0x958b, 3578}, - {0x958f, 6367}, - {0x9591, 7645}, - {0x9592, 7646}, - {0x9593, 3499}, - {0x9594, 4882}, - {0x9598, 3535}, - {0x95a3, 3475}, - {0x95a4, 7667}, - {0x95a5, 5008}, - {0x95a8, 4008}, - {0x95ad, 4453}, - {0x95b1, 5988}, - {0x95bb, 5996}, - {0x95bc, 5820}, - {0x95c7, 5828}, - {0x95ca, 7903}, - {0x95d4, 7668}, - {0x95d5, 3983}, - {0x95d6, 7473}, - {0x95dc, 3833}, - {0x95e1, 7164}, - {0x95e2, 5029}, - {0x961c, 5147}, - {0x9621, 7165}, - {0x962a, 7498}, - {0x962e, 6123}, - {0x9632, 4967}, - {0x963b, 6825}, - {0x963f, 5788}, - {0x9640, 7391}, - {0x9642, 7603}, - {0x9644, 5148}, - {0x964b, 4576}, - {0x964c, 4724}, - {0x964d, 3558}, - {0x9650, 7647}, - {0x965b, 7543}, - {0x965c, 7669}, - {0x965d, 5470}, - {0x965e, 5691}, - {0x965f, 7146}, - {0x9662, 6278}, - {0x9663, 7012}, - {0x9664, 6777}, - {0x966a, 4987}, - {0x9670, 6384}, - {0x9673, 7013}, - {0x9675, 4612}, - {0x9676, 4307}, - {0x9677, 7661}, - {0x9678, 4593}, - {0x967d, 5900}, - {0x9685, 6226}, - {0x9686, 4603}, - {0x968a, 4264}, - {0x968b, 5619}, - {0x968d, 7926}, - {0x968e, 3727}, - {0x9694, 3636}, - {0x9695, 6247}, - {0x9698, 5849}, - {0x9699, 4022}, - {0x969b, 6778}, - {0x969c, 6569}, - {0x96a3, 4644}, - {0x96a7, 5620}, - {0x96a8, 5621}, - {0x96aa, 7728}, - {0x96b1, 6379}, - {0x96b7, 4510}, - {0x96bb, 7147}, - {0x96c0, 6520}, - {0x96c1, 5813}, - {0x96c4, 6254}, - {0x96c5, 5789}, - {0x96c6, 7037}, - {0x96c7, 3763}, - {0x96c9, 7357}, - {0x96cb, 6919}, - {0x96cc, 6508}, - {0x96cd, 6097}, - {0x96ce, 6617}, - {0x96d5, 6826}, - {0x96d6, 5622}, - {0x96d9, 5773}, - {0x96db, 7285}, - {0x96dc, 6533}, - {0x96e2, 4636}, - {0x96e3, 4142}, - {0x96e8, 6227}, - {0x96e9, 6228}, - {0x96ea, 5461}, - {0x96ef, 4847}, - {0x96f0, 5170}, - {0x96f2, 6248}, - {0x96f6, 4502}, - {0x96f7, 4550}, - {0x96f9, 4903}, - {0x96fb, 6680}, - {0x9700, 5623}, - {0x9706, 6754}, - {0x9707, 7014}, - {0x9711, 6698}, - {0x9713, 6047}, - {0x9716, 4651}, - {0x9719, 6028}, - {0x971c, 5361}, - {0x971e, 7628}, - {0x9727, 4832}, - {0x9730, 5314}, - {0x9732, 4524}, - {0x9739, 5030}, - {0x973d, 6779}, - {0x9742, 4464}, - {0x9744, 5850}, - {0x9748, 4503}, - {0x9751, 7203}, - {0x9756, 6755}, - {0x975c, 6756}, - {0x975e, 5220}, - {0x9761, 4868}, - {0x9762, 4744}, - {0x9769, 7733}, - {0x976d, 6458}, - {0x9774, 7876}, - {0x9777, 6459}, - {0x977a, 4695}, - {0x978b, 7799}, - {0x978d, 5814}, - {0x978f, 3801}, - {0x97a0, 3950}, - {0x97a8, 3509}, - {0x97ab, 3951}, - {0x97ad, 7526}, - {0x97c6, 7166}, - {0x97cb, 6307}, - {0x97d3, 7648}, - {0x97dc, 4308}, - {0x97f3, 6385}, - {0x97f6, 5535}, - {0x97fb, 6249}, - {0x97ff, 7715}, - {0x9800, 7839}, - {0x9801, 7757}, - {0x9802, 6757}, - {0x9803, 3701}, - {0x9805, 7684}, - {0x9806, 5665}, - {0x9808, 5624}, - {0x980a, 6237}, - {0x980c, 5560}, - {0x9810, 6048}, - {0x9811, 6124}, - {0x9812, 4928}, - {0x9813, 4328}, - {0x9817, 7489}, - {0x9818, 4504}, - {0x982d, 4357}, - {0x9830, 7770}, - {0x9838, 3702}, - {0x9839, 7464}, - {0x983b, 5236}, - {0x9846, 3814}, - {0x984c, 6780}, - {0x984d, 5857}, - {0x984e, 5804}, - {0x9854, 5815}, - {0x9858, 6279}, - {0x985a, 6681}, - {0x985e, 4590}, - {0x9865, 7840}, - {0x9867, 3764}, - {0x986b, 6682}, - {0x986f, 7753}, - {0x98a8, 7595}, - {0x98af, 5330}, - {0x98b1, 7444}, - {0x98c4, 7588}, - {0x98c7, 7587}, - {0x98db, 5221}, - {0x98dc, 5004}, - {0x98df, 5733}, - {0x98e1, 5551}, - {0x98e2, 4120}, - {0x98ed, 7362}, - {0x98ee, 6386}, - {0x98ef, 4929}, - {0x98f4, 6435}, - {0x98fc, 5298}, - {0x98fd, 7569}, - {0x98fe, 5734}, - {0x9903, 3890}, - {0x9909, 7716}, - {0x990a, 5901}, - {0x990c, 6436}, - {0x9910, 7075}, - {0x9913, 5790}, - {0x9918, 5946}, - {0x991e, 6683}, - {0x9920, 5056}, - {0x9928, 3834}, - {0x9945, 4687}, - {0x9949, 4037}, - {0x994b, 3989}, - {0x994c, 7076}, - {0x994d, 5448}, - {0x9951, 4121}, - {0x9952, 6167}, - {0x9954, 6098}, - {0x9957, 7717}, - {0x9996, 5625}, - {0x9999, 7718}, - {0x999d, 7613}, - {0x99a5, 5089}, - {0x99a8, 7790}, - {0x99ac, 4661}, - {0x99ad, 5909}, - {0x99ae, 7596}, - {0x99b1, 7392}, - {0x99b3, 7358}, - {0x99b4, 5666}, - {0x99b9, 6468}, - {0x99c1, 4904}, - {0x99d0, 6899}, - {0x99d1, 4174}, - {0x99d2, 3942}, - {0x99d5, 3464}, - {0x99d9, 5149}, - {0x99dd, 7393}, - {0x99df, 5299}, - {0x99ed, 7701}, - {0x99f1, 4388}, - {0x99ff, 6920}, - {0x9a01, 5240}, - {0x9a08, 5057}, - {0x9a0e, 4122}, - {0x9a0f, 4123}, - {0x9a19, 7527}, - {0x9a2b, 3612}, - {0x9a30, 4373}, - {0x9a36, 7286}, - {0x9a37, 5536}, - {0x9a40, 4725}, - {0x9a43, 7589}, - {0x9a45, 3943}, - {0x9a4d, 7965}, - {0x9a55, 3891}, - {0x9a57, 7729}, - {0x9a5a, 3703}, - {0x9a5b, 5955}, - {0x9a5f, 7328}, - {0x9a62, 4454}, - {0x9a65, 4124}, - {0x9a69, 7897}, - {0x9a6a, 4455}, - {0x9aa8, 3785}, - {0x9ab8, 7702}, - {0x9ad3, 5626}, - {0x9ad4, 7213}, - {0x9ad8, 3765}, - {0x9ae5, 5997}, - {0x9aee, 4939}, - {0x9b1a, 5627}, - {0x9b27, 4562}, - {0x9b2a, 7470}, - {0x9b31, 6251}, - {0x9b3c, 3993}, - {0x9b41, 3863}, - {0x9b42, 7849}, - {0x9b43, 4940}, - {0x9b44, 4995}, - {0x9b45, 4721}, - {0x9b4f, 6308}, - {0x9b54, 4662}, - {0x9b5a, 5910}, - {0x9b6f, 4525}, - {0x9b8e, 6699}, - {0x9b91, 7570}, - {0x9b9f, 5816}, - {0x9bab, 3892}, - {0x9bae, 5449}, - {0x9bc9, 4637}, - {0x9bd6, 7204}, - {0x9be4, 3783}, - {0x9be8, 3704}, - {0x9c0d, 7287}, - {0x9c10, 5805}, - {0x9c12, 5090}, - {0x9c15, 7629}, - {0x9c25, 7898}, - {0x9c32, 6076}, - {0x9c3b, 4688}, - {0x9c47, 3559}, - {0x9c49, 5039}, - {0x9c57, 4645}, - {0x9ce5, 6827}, - {0x9ce7, 5150}, - {0x9ce9, 3944}, - {0x9cf3, 5108}, - {0x9cf4, 4762}, - {0x9cf6, 5984}, - {0x9d09, 5791}, - {0x9d1b, 6280}, - {0x9d26, 5839}, - {0x9d28, 5832}, - {0x9d3b, 7862}, - {0x9d51, 3647}, - {0x9d5d, 5792}, - {0x9d60, 3773}, - {0x9d61, 4833}, - {0x9d6c, 5180}, - {0x9d72, 6521}, - {0x9da9, 4794}, - {0x9daf, 5860}, - {0x9db4, 7634}, - {0x9dc4, 3728}, - {0x9dd7, 3945}, - {0x9df2, 7329}, - {0x9df8, 8012}, - {0x9df9, 6393}, - {0x9dfa, 4526}, - {0x9e1a, 5861}, - {0x9e1e, 4396}, - {0x9e75, 4527}, - {0x9e79, 7662}, - {0x9e7d, 5998}, - {0x9e7f, 4533}, - {0x9e92, 4125}, - {0x9e93, 4534}, - {0x9e97, 4456}, - {0x9e9d, 5300}, - {0x9e9f, 4646}, - {0x9ea5, 4726}, - {0x9eb4, 3952}, - {0x9eb5, 4745}, - {0x9ebb, 4663}, - {0x9ebe, 8004}, - {0x9ec3, 7927}, - {0x9ecd, 5401}, - {0x9ece, 4457}, - {0x9ed1, 8018}, - {0x9ed4, 3623}, - {0x9ed8, 4835}, - {0x9edb, 4265}, - {0x9edc, 7305}, - {0x9ede, 6700}, - {0x9ee8, 4249}, - {0x9ef4, 4869}, - {0x9f07, 6077}, - {0x9f08, 5040}, - {0x9f0e, 6758}, - {0x9f13, 3766}, - {0x9f20, 5402}, - {0x9f3b, 5222}, - {0x9f4a, 6781}, - {0x9f4b, 6585}, - {0x9f4e, 6586}, - {0x9f52, 7359}, - {0x9f5f, 6618}, - {0x9f61, 4505}, - {0x9f67, 5462}, - {0x9f6a, 7061}, - {0x9f6c, 5911}, - {0x9f77, 5806}, - {0x9f8d, 4563}, - {0x9f90, 4968}, - {0x9f95, 3529}, - {0x9f9c, 3946}, - {0xac00, 1086}, - {0xac01, 1087}, - {0xac02, 9333}, - {0xac03, 9334}, - {0xac04, 1088}, - {0xac05, 9335}, - {0xac06, 9336}, - {0xac07, 1089}, - {0xac08, 1090}, - {0xac09, 1091}, - {0xac0a, 1092}, - {0xac0b, 9337}, - {0xac0c, 9338}, - {0xac0d, 9339}, - {0xac0e, 9340}, - {0xac0f, 9341}, - {0xac10, 1093}, - {0xac11, 1094}, - {0xac12, 1095}, - {0xac13, 1096}, - {0xac14, 1097}, - {0xac15, 1098}, - {0xac16, 1099}, - {0xac17, 1100}, - {0xac18, 9342}, - {0xac19, 1101}, - {0xac1a, 1102}, - {0xac1b, 1103}, - {0xac1c, 1104}, - {0xac1d, 1105}, - {0xac1e, 9343}, - {0xac1f, 9344}, - {0xac20, 1106}, - {0xac21, 9345}, - {0xac22, 9346}, - {0xac23, 9347}, - {0xac24, 1107}, - {0xac25, 9348}, - {0xac26, 9349}, - {0xac27, 9350}, - {0xac28, 9351}, - {0xac29, 9352}, - {0xac2a, 9353}, - {0xac2b, 9354}, - {0xac2c, 1108}, - {0xac2d, 1109}, - {0xac2e, 9355}, - {0xac2f, 1110}, - {0xac30, 1111}, - {0xac31, 1112}, - {0xac32, 9356}, - {0xac33, 9357}, - {0xac34, 9358}, - {0xac35, 9359}, - {0xac36, 9360}, - {0xac37, 9361}, - {0xac38, 1113}, - {0xac39, 1114}, - {0xac3a, 9362}, - {0xac3b, 9363}, - {0xac3c, 1115}, - {0xac3d, 9364}, - {0xac3e, 9365}, - {0xac3f, 9366}, - {0xac40, 1116}, - {0xac41, 9367}, - {0xac42, 9368}, - {0xac43, 9369}, - {0xac44, 9370}, - {0xac45, 9371}, - {0xac46, 9372}, - {0xac47, 9373}, - {0xac48, 9374}, - {0xac49, 9375}, - {0xac4a, 9376}, - {0xac4b, 1117}, - {0xac4c, 9377}, - {0xac4d, 1118}, - {0xac4e, 9378}, - {0xac4f, 9379}, - {0xac50, 9380}, - {0xac51, 9381}, - {0xac52, 9382}, - {0xac53, 9383}, - {0xac54, 1119}, - {0xac55, 9384}, - {0xac56, 9385}, - {0xac57, 9386}, - {0xac58, 1120}, - {0xac59, 9387}, - {0xac5a, 9388}, - {0xac5b, 9389}, - {0xac5c, 1121}, - {0xac5d, 9390}, - {0xac5e, 9391}, - {0xac5f, 9392}, - {0xac60, 9393}, - {0xac61, 9394}, - {0xac62, 9395}, - {0xac63, 9396}, - {0xac64, 9397}, - {0xac65, 9398}, - {0xac66, 9399}, - {0xac67, 9400}, - {0xac68, 9401}, - {0xac69, 9402}, - {0xac6a, 9403}, - {0xac6b, 9404}, - {0xac6c, 9405}, - {0xac6d, 9406}, - {0xac6e, 9407}, - {0xac6f, 9408}, - {0xac70, 1122}, - {0xac71, 1123}, - {0xac72, 9409}, - {0xac73, 9410}, - {0xac74, 1124}, - {0xac75, 9411}, - {0xac76, 9412}, - {0xac77, 1125}, - {0xac78, 1126}, - {0xac79, 9413}, - {0xac7a, 1127}, - {0xac7b, 9414}, - {0xac7c, 9415}, - {0xac7d, 9416}, - {0xac7e, 9417}, - {0xac7f, 9418}, - {0xac80, 1128}, - {0xac81, 1129}, - {0xac82, 9419}, - {0xac83, 1130}, - {0xac84, 1131}, - {0xac85, 1132}, - {0xac86, 1133}, - {0xac87, 9420}, - {0xac88, 9421}, - {0xac89, 1134}, - {0xac8a, 1135}, - {0xac8b, 1136}, - {0xac8c, 1137}, - {0xac8d, 9422}, - {0xac8e, 9423}, - {0xac8f, 9424}, - {0xac90, 1138}, - {0xac91, 9425}, - {0xac92, 9426}, - {0xac93, 9427}, - {0xac94, 1139}, - {0xac95, 9428}, - {0xac96, 9429}, - {0xac97, 9430}, - {0xac98, 9431}, - {0xac99, 9432}, - {0xac9a, 9433}, - {0xac9b, 9434}, - {0xac9c, 1140}, - {0xac9d, 1141}, - {0xac9e, 9435}, - {0xac9f, 1142}, - {0xaca0, 1143}, - {0xaca1, 1144}, - {0xaca2, 9436}, - {0xaca3, 9437}, - {0xaca4, 9438}, - {0xaca5, 9439}, - {0xaca6, 9440}, - {0xaca7, 9441}, - {0xaca8, 1145}, - {0xaca9, 1146}, - {0xacaa, 1147}, - {0xacab, 9442}, - {0xacac, 1148}, - {0xacad, 9443}, - {0xacae, 9444}, - {0xacaf, 1149}, - {0xacb0, 1150}, - {0xacb1, 9445}, - {0xacb2, 9446}, - {0xacb3, 9447}, - {0xacb4, 9448}, - {0xacb5, 9449}, - {0xacb6, 9450}, - {0xacb7, 9451}, - {0xacb8, 1151}, - {0xacb9, 1152}, - {0xacba, 9452}, - {0xacbb, 1153}, - {0xacbc, 1154}, - {0xacbd, 1155}, - {0xacbe, 9453}, - {0xacbf, 9454}, - {0xacc0, 9455}, - {0xacc1, 1156}, - {0xacc2, 9456}, - {0xacc3, 9457}, - {0xacc4, 1157}, - {0xacc5, 9458}, - {0xacc6, 9459}, - {0xacc7, 9460}, - {0xacc8, 1158}, - {0xacc9, 9461}, - {0xacca, 9462}, - {0xaccb, 9463}, - {0xaccc, 1159}, - {0xaccd, 9464}, - {0xacce, 9465}, - {0xaccf, 9466}, - {0xacd0, 9467}, - {0xacd1, 9468}, - {0xacd2, 9469}, - {0xacd3, 9470}, - {0xacd4, 9471}, - {0xacd5, 1160}, - {0xacd6, 9472}, - {0xacd7, 1161}, - {0xacd8, 9473}, - {0xacd9, 9474}, - {0xacda, 9475}, - {0xacdb, 9476}, - {0xacdc, 9477}, - {0xacdd, 9478}, - {0xacde, 9479}, - {0xacdf, 9480}, - {0xace0, 1162}, - {0xace1, 1163}, - {0xace2, 9481}, - {0xace3, 9482}, - {0xace4, 1164}, - {0xace5, 9483}, - {0xace6, 9484}, - {0xace7, 1165}, - {0xace8, 1166}, - {0xace9, 9485}, - {0xacea, 1167}, - {0xaceb, 9486}, - {0xacec, 1168}, - {0xaced, 9487}, - {0xacee, 9488}, - {0xacef, 1169}, - {0xacf0, 1170}, - {0xacf1, 1171}, - {0xacf2, 9489}, - {0xacf3, 1172}, - {0xacf4, 9490}, - {0xacf5, 1173}, - {0xacf6, 1174}, - {0xacf7, 9491}, - {0xacf8, 9492}, - {0xacf9, 9493}, - {0xacfa, 9494}, - {0xacfb, 9495}, - {0xacfc, 1175}, - {0xacfd, 1176}, - {0xacfe, 9496}, - {0xacff, 9497}, - {0xad00, 1177}, - {0xad01, 9498}, - {0xad02, 9499}, - {0xad03, 9500}, - {0xad04, 1178}, - {0xad05, 9501}, - {0xad06, 1179}, - {0xad07, 9502}, - {0xad08, 9503}, - {0xad09, 9504}, - {0xad0a, 9505}, - {0xad0b, 9506}, - {0xad0c, 1180}, - {0xad0d, 1181}, - {0xad0e, 9507}, - {0xad0f, 1182}, - {0xad10, 9508}, - {0xad11, 1183}, - {0xad12, 9509}, - {0xad13, 9510}, - {0xad14, 9511}, - {0xad15, 9512}, - {0xad16, 9513}, - {0xad17, 9514}, - {0xad18, 1184}, - {0xad19, 9515}, - {0xad1a, 9516}, - {0xad1b, 9517}, - {0xad1c, 1185}, - {0xad1d, 9518}, - {0xad1e, 9519}, - {0xad1f, 9520}, - {0xad20, 1186}, - {0xad21, 9521}, - {0xad22, 9522}, - {0xad23, 9523}, - {0xad24, 9524}, - {0xad25, 9525}, - {0xad26, 9526}, - {0xad27, 9527}, - {0xad28, 9528}, - {0xad29, 1187}, - {0xad2a, 9529}, - {0xad2b, 9530}, - {0xad2c, 1188}, - {0xad2d, 1189}, - {0xad2e, 9531}, - {0xad2f, 9532}, - {0xad30, 9533}, - {0xad31, 9534}, - {0xad32, 9535}, - {0xad33, 9536}, - {0xad34, 1190}, - {0xad35, 1191}, - {0xad36, 9537}, - {0xad37, 9538}, - {0xad38, 1192}, - {0xad39, 9539}, - {0xad3a, 9540}, - {0xad3b, 9541}, - {0xad3c, 1193}, - {0xad3d, 9542}, - {0xad3e, 9543}, - {0xad3f, 9544}, - {0xad40, 9545}, - {0xad41, 9546}, - {0xad42, 9547}, - {0xad43, 9548}, - {0xad44, 1194}, - {0xad45, 1195}, - {0xad46, 9549}, - {0xad47, 1196}, - {0xad48, 9550}, - {0xad49, 1197}, - {0xad4a, 9551}, - {0xad4b, 9552}, - {0xad4c, 9553}, - {0xad4d, 9554}, - {0xad4e, 9555}, - {0xad4f, 9556}, - {0xad50, 1198}, - {0xad51, 9557}, - {0xad52, 9558}, - {0xad53, 9559}, - {0xad54, 1199}, - {0xad55, 9560}, - {0xad56, 9561}, - {0xad57, 9562}, - {0xad58, 1200}, - {0xad59, 9563}, - {0xad5a, 9564}, - {0xad5b, 9565}, - {0xad5c, 9566}, - {0xad5d, 9567}, - {0xad5e, 9568}, - {0xad5f, 9569}, - {0xad60, 9570}, - {0xad61, 1201}, - {0xad62, 9571}, - {0xad63, 1202}, - {0xad64, 9572}, - {0xad65, 9573}, - {0xad66, 9574}, - {0xad67, 9575}, - {0xad68, 9576}, - {0xad69, 9577}, - {0xad6a, 9578}, - {0xad6b, 9579}, - {0xad6c, 1203}, - {0xad6d, 1204}, - {0xad6e, 9580}, - {0xad6f, 9581}, - {0xad70, 1205}, - {0xad71, 9582}, - {0xad72, 9583}, - {0xad73, 1206}, - {0xad74, 1207}, - {0xad75, 1208}, - {0xad76, 1209}, - {0xad77, 9584}, - {0xad78, 9585}, - {0xad79, 9586}, - {0xad7a, 9587}, - {0xad7b, 1210}, - {0xad7c, 1211}, - {0xad7d, 1212}, - {0xad7e, 9588}, - {0xad7f, 1213}, - {0xad80, 9589}, - {0xad81, 1214}, - {0xad82, 1215}, - {0xad83, 9590}, - {0xad84, 9591}, - {0xad85, 9592}, - {0xad86, 9593}, - {0xad87, 9594}, - {0xad88, 1216}, - {0xad89, 1217}, - {0xad8a, 9595}, - {0xad8b, 9596}, - {0xad8c, 1218}, - {0xad8d, 9597}, - {0xad8e, 9598}, - {0xad8f, 9599}, - {0xad90, 1219}, - {0xad91, 9600}, - {0xad92, 9601}, - {0xad93, 9602}, - {0xad94, 9603}, - {0xad95, 9604}, - {0xad96, 9605}, - {0xad97, 9606}, - {0xad98, 9607}, - {0xad99, 9608}, - {0xad9a, 9609}, - {0xad9b, 9610}, - {0xad9c, 1220}, - {0xad9d, 1221}, - {0xad9e, 9611}, - {0xad9f, 9612}, - {0xada0, 9613}, - {0xada1, 9614}, - {0xada2, 9615}, - {0xada3, 9616}, - {0xada4, 1222}, - {0xada5, 9617}, - {0xada6, 9618}, - {0xada7, 9619}, - {0xada8, 9620}, - {0xada9, 9621}, - {0xadaa, 9622}, - {0xadab, 9623}, - {0xadac, 9624}, - {0xadad, 9625}, - {0xadae, 9626}, - {0xadaf, 9627}, - {0xadb0, 9628}, - {0xadb1, 9629}, - {0xadb2, 9630}, - {0xadb3, 9631}, - {0xadb4, 9632}, - {0xadb5, 9633}, - {0xadb6, 9634}, - {0xadb7, 1223}, - {0xadb8, 9635}, - {0xadb9, 9636}, - {0xadba, 9637}, - {0xadbb, 9638}, - {0xadbc, 9639}, - {0xadbd, 9640}, - {0xadbe, 9641}, - {0xadbf, 9642}, - {0xadc0, 1224}, - {0xadc1, 1225}, - {0xadc2, 9643}, - {0xadc3, 9644}, - {0xadc4, 1226}, - {0xadc5, 9645}, - {0xadc6, 9646}, - {0xadc7, 9647}, - {0xadc8, 1227}, - {0xadc9, 9648}, - {0xadca, 9649}, - {0xadcb, 9650}, - {0xadcc, 9651}, - {0xadcd, 9652}, - {0xadce, 9653}, - {0xadcf, 9654}, - {0xadd0, 1228}, - {0xadd1, 1229}, - {0xadd2, 9655}, - {0xadd3, 1230}, - {0xadd4, 9656}, - {0xadd5, 9657}, - {0xadd6, 9658}, - {0xadd7, 9659}, - {0xadd8, 9660}, - {0xadd9, 9661}, - {0xadda, 9662}, - {0xaddb, 9663}, - {0xaddc, 1231}, - {0xaddd, 9664}, - {0xadde, 9665}, - {0xaddf, 9666}, - {0xade0, 1232}, - {0xade1, 9667}, - {0xade2, 9668}, - {0xade3, 9669}, - {0xade4, 1233}, - {0xade5, 9670}, - {0xade6, 9671}, - {0xade7, 9672}, - {0xade8, 9673}, - {0xade9, 9674}, - {0xadea, 9675}, - {0xadeb, 9676}, - {0xadec, 9677}, - {0xaded, 9678}, - {0xadee, 9679}, - {0xadef, 9680}, - {0xadf0, 9681}, - {0xadf1, 9682}, - {0xadf2, 9683}, - {0xadf3, 9684}, - {0xadf4, 9685}, - {0xadf5, 9686}, - {0xadf6, 9687}, - {0xadf7, 9688}, - {0xadf8, 1234}, - {0xadf9, 1235}, - {0xadfa, 9689}, - {0xadfb, 9690}, - {0xadfc, 1236}, - {0xadfd, 9691}, - {0xadfe, 9692}, - {0xadff, 1237}, - {0xae00, 1238}, - {0xae01, 1239}, - {0xae02, 9693}, - {0xae03, 9694}, - {0xae04, 9695}, - {0xae05, 9696}, - {0xae06, 9697}, - {0xae07, 9698}, - {0xae08, 1240}, - {0xae09, 1241}, - {0xae0a, 9699}, - {0xae0b, 1242}, - {0xae0c, 9700}, - {0xae0d, 1243}, - {0xae0e, 9701}, - {0xae0f, 9702}, - {0xae10, 9703}, - {0xae11, 9704}, - {0xae12, 9705}, - {0xae13, 9706}, - {0xae14, 1244}, - {0xae15, 9707}, - {0xae16, 9708}, - {0xae17, 9709}, - {0xae18, 9710}, - {0xae19, 9711}, - {0xae1a, 9712}, - {0xae1b, 9713}, - {0xae1c, 9714}, - {0xae1d, 9715}, - {0xae1e, 9716}, - {0xae1f, 9717}, - {0xae20, 9718}, - {0xae21, 9719}, - {0xae22, 9720}, - {0xae23, 9721}, - {0xae24, 9722}, - {0xae25, 9723}, - {0xae26, 9724}, - {0xae27, 9725}, - {0xae28, 9726}, - {0xae29, 9727}, - {0xae2a, 9728}, - {0xae2b, 9729}, - {0xae2c, 9730}, - {0xae2d, 9731}, - {0xae2e, 9732}, - {0xae2f, 9733}, - {0xae30, 1245}, - {0xae31, 1246}, - {0xae32, 9734}, - {0xae33, 9735}, - {0xae34, 1247}, - {0xae35, 9736}, - {0xae36, 9737}, - {0xae37, 1248}, - {0xae38, 1249}, - {0xae39, 9738}, - {0xae3a, 1250}, - {0xae3b, 9739}, - {0xae3c, 9740}, - {0xae3d, 9741}, - {0xae3e, 9742}, - {0xae3f, 9743}, - {0xae40, 1251}, - {0xae41, 1252}, - {0xae42, 9744}, - {0xae43, 1253}, - {0xae44, 9745}, - {0xae45, 1254}, - {0xae46, 1255}, - {0xae47, 9746}, - {0xae48, 9747}, - {0xae49, 9748}, - {0xae4a, 1256}, - {0xae4b, 9749}, - {0xae4c, 1257}, - {0xae4d, 1258}, - {0xae4e, 1259}, - {0xae4f, 9750}, - {0xae50, 1260}, - {0xae51, 9751}, - {0xae52, 9752}, - {0xae53, 9753}, - {0xae54, 1261}, - {0xae55, 9754}, - {0xae56, 1262}, - {0xae57, 9755}, - {0xae58, 9756}, - {0xae59, 9757}, - {0xae5a, 9758}, - {0xae5b, 9759}, - {0xae5c, 1263}, - {0xae5d, 1264}, - {0xae5e, 9760}, - {0xae5f, 1265}, - {0xae60, 1266}, - {0xae61, 1267}, - {0xae62, 9761}, - {0xae63, 9762}, - {0xae64, 9763}, - {0xae65, 1268}, - {0xae66, 9764}, - {0xae67, 9765}, - {0xae68, 1269}, - {0xae69, 1270}, - {0xae6a, 9766}, - {0xae6b, 9767}, - {0xae6c, 1271}, - {0xae6d, 9768}, - {0xae6e, 9769}, - {0xae6f, 9770}, - {0xae70, 1272}, - {0xae71, 9771}, - {0xae72, 9772}, - {0xae73, 9773}, - {0xae74, 9774}, - {0xae75, 9775}, - {0xae76, 9776}, - {0xae77, 9777}, - {0xae78, 1273}, - {0xae79, 1274}, - {0xae7a, 9778}, - {0xae7b, 1275}, - {0xae7c, 1276}, - {0xae7d, 1277}, - {0xae7e, 9779}, - {0xae7f, 9780}, - {0xae80, 9781}, - {0xae81, 9782}, - {0xae82, 9783}, - {0xae83, 9784}, - {0xae84, 1278}, - {0xae85, 1279}, - {0xae86, 9785}, - {0xae87, 9786}, - {0xae88, 9787}, - {0xae89, 9788}, - {0xae8a, 9789}, - {0xae8b, 9790}, - {0xae8c, 1280}, - {0xae8d, 9791}, - {0xae8e, 9792}, - {0xae8f, 9793}, - {0xae90, 9794}, - {0xae91, 9795}, - {0xae92, 9796}, - {0xae93, 9797}, - {0xae94, 9798}, - {0xae95, 9799}, - {0xae96, 9800}, - {0xae97, 9801}, - {0xae98, 9802}, - {0xae99, 9803}, - {0xae9a, 9804}, - {0xae9b, 9805}, - {0xae9c, 9806}, - {0xae9d, 9807}, - {0xae9e, 9808}, - {0xae9f, 9809}, - {0xaea0, 9810}, - {0xaea1, 9811}, - {0xaea2, 9812}, - {0xaea3, 9813}, - {0xaea4, 9814}, - {0xaea5, 9815}, - {0xaea6, 9816}, - {0xaea7, 9817}, - {0xaea8, 9818}, - {0xaea9, 9819}, - {0xaeaa, 9820}, - {0xaeab, 9821}, - {0xaeac, 9822}, - {0xaead, 9823}, - {0xaeae, 9824}, - {0xaeaf, 9825}, - {0xaeb0, 9826}, - {0xaeb1, 9827}, - {0xaeb2, 9828}, - {0xaeb3, 9829}, - {0xaeb4, 9830}, - {0xaeb5, 9831}, - {0xaeb6, 9832}, - {0xaeb7, 9833}, - {0xaeb8, 9834}, - {0xaeb9, 9835}, - {0xaeba, 9836}, - {0xaebb, 9837}, - {0xaebc, 1281}, - {0xaebd, 1282}, - {0xaebe, 1283}, - {0xaebf, 9838}, - {0xaec0, 1284}, - {0xaec1, 9839}, - {0xaec2, 9840}, - {0xaec3, 9841}, - {0xaec4, 1285}, - {0xaec5, 9842}, - {0xaec6, 9843}, - {0xaec7, 9844}, - {0xaec8, 9845}, - {0xaec9, 9846}, - {0xaeca, 9847}, - {0xaecb, 9848}, - {0xaecc, 1286}, - {0xaecd, 1287}, - {0xaece, 9849}, - {0xaecf, 1288}, - {0xaed0, 1289}, - {0xaed1, 1290}, - {0xaed2, 9850}, - {0xaed3, 9851}, - {0xaed4, 9852}, - {0xaed5, 9853}, - {0xaed6, 9854}, - {0xaed7, 9855}, - {0xaed8, 1291}, - {0xaed9, 1292}, - {0xaeda, 9856}, - {0xaedb, 9857}, - {0xaedc, 1293}, - {0xaedd, 9858}, - {0xaede, 9859}, - {0xaedf, 9860}, - {0xaee0, 9861}, - {0xaee1, 9862}, - {0xaee2, 9863}, - {0xaee3, 9864}, - {0xaee4, 9865}, - {0xaee5, 9866}, - {0xaee6, 9867}, - {0xaee7, 9868}, - {0xaee8, 1294}, - {0xaee9, 9869}, - {0xaeea, 9870}, - {0xaeeb, 1295}, - {0xaeec, 9871}, - {0xaeed, 1296}, - {0xaeee, 9872}, - {0xaeef, 9873}, - {0xaef0, 9874}, - {0xaef1, 9875}, - {0xaef2, 9876}, - {0xaef3, 9877}, - {0xaef4, 1297}, - {0xaef5, 9878}, - {0xaef6, 9879}, - {0xaef7, 9880}, - {0xaef8, 1298}, - {0xaef9, 9881}, - {0xaefa, 9882}, - {0xaefb, 9883}, - {0xaefc, 1299}, - {0xaefd, 9884}, - {0xaefe, 9885}, - {0xaeff, 9886}, - {0xaf00, 9887}, - {0xaf01, 9888}, - {0xaf02, 9889}, - {0xaf03, 9890}, - {0xaf04, 9891}, - {0xaf05, 9892}, - {0xaf06, 9893}, - {0xaf07, 1300}, - {0xaf08, 1301}, - {0xaf09, 9894}, - {0xaf0a, 9895}, - {0xaf0b, 9896}, - {0xaf0c, 9897}, - {0xaf0d, 1302}, - {0xaf0e, 9898}, - {0xaf0f, 9899}, - {0xaf10, 1303}, - {0xaf11, 9900}, - {0xaf12, 9901}, - {0xaf13, 9902}, - {0xaf14, 9903}, - {0xaf15, 9904}, - {0xaf16, 9905}, - {0xaf17, 9906}, - {0xaf18, 9907}, - {0xaf19, 9908}, - {0xaf1a, 9909}, - {0xaf1b, 9910}, - {0xaf1c, 9911}, - {0xaf1d, 9912}, - {0xaf1e, 9913}, - {0xaf1f, 9914}, - {0xaf20, 9915}, - {0xaf21, 9916}, - {0xaf22, 9917}, - {0xaf23, 9918}, - {0xaf24, 9919}, - {0xaf25, 9920}, - {0xaf26, 9921}, - {0xaf27, 9922}, - {0xaf28, 9923}, - {0xaf29, 9924}, - {0xaf2a, 9925}, - {0xaf2b, 9926}, - {0xaf2c, 1304}, - {0xaf2d, 1305}, - {0xaf2e, 9927}, - {0xaf2f, 9928}, - {0xaf30, 1306}, - {0xaf31, 9929}, - {0xaf32, 1307}, - {0xaf33, 9930}, - {0xaf34, 1308}, - {0xaf35, 9931}, - {0xaf36, 9932}, - {0xaf37, 9933}, - {0xaf38, 9934}, - {0xaf39, 9935}, - {0xaf3a, 9936}, - {0xaf3b, 9937}, - {0xaf3c, 1309}, - {0xaf3d, 1310}, - {0xaf3e, 9938}, - {0xaf3f, 1311}, - {0xaf40, 9939}, - {0xaf41, 1312}, - {0xaf42, 1313}, - {0xaf43, 1314}, - {0xaf44, 9940}, - {0xaf45, 9941}, - {0xaf46, 9942}, - {0xaf47, 9943}, - {0xaf48, 1315}, - {0xaf49, 1316}, - {0xaf4a, 9944}, - {0xaf4b, 9945}, - {0xaf4c, 9946}, - {0xaf4d, 9947}, - {0xaf4e, 9948}, - {0xaf4f, 9949}, - {0xaf50, 1317}, - {0xaf51, 9950}, - {0xaf52, 9951}, - {0xaf53, 9952}, - {0xaf54, 9953}, - {0xaf55, 9954}, - {0xaf56, 9955}, - {0xaf57, 9956}, - {0xaf58, 9957}, - {0xaf59, 9958}, - {0xaf5a, 9959}, - {0xaf5b, 9960}, - {0xaf5c, 1318}, - {0xaf5d, 1319}, - {0xaf5e, 9961}, - {0xaf5f, 9962}, - {0xaf60, 9963}, - {0xaf61, 9964}, - {0xaf62, 9965}, - {0xaf63, 9966}, - {0xaf64, 1320}, - {0xaf65, 1321}, - {0xaf66, 9967}, - {0xaf67, 9968}, - {0xaf68, 9969}, - {0xaf69, 9970}, - {0xaf6a, 9971}, - {0xaf6b, 9972}, - {0xaf6c, 9973}, - {0xaf6d, 9974}, - {0xaf6e, 9975}, - {0xaf6f, 9976}, - {0xaf70, 9977}, - {0xaf71, 9978}, - {0xaf72, 9979}, - {0xaf73, 9980}, - {0xaf74, 9981}, - {0xaf75, 9982}, - {0xaf76, 9983}, - {0xaf77, 9984}, - {0xaf78, 9985}, - {0xaf79, 1322}, - {0xaf7a, 9986}, - {0xaf7b, 9987}, - {0xaf7c, 9988}, - {0xaf7d, 9989}, - {0xaf7e, 9990}, - {0xaf7f, 9991}, - {0xaf80, 1323}, - {0xaf81, 9992}, - {0xaf82, 9993}, - {0xaf83, 9994}, - {0xaf84, 1324}, - {0xaf85, 9995}, - {0xaf86, 9996}, - {0xaf87, 9997}, - {0xaf88, 1325}, - {0xaf89, 9998}, - {0xaf8a, 9999}, - {0xaf8b, 10000}, - {0xaf8c, 10001}, - {0xaf8d, 10002}, - {0xaf8e, 10003}, - {0xaf8f, 10004}, - {0xaf90, 1326}, - {0xaf91, 1327}, - {0xaf93, 0}, - {0xaf94, 1}, - {0xaf95, 1328}, - {0xaf97, 0}, - {0xaf98, 1}, - {0xaf99, 2}, - {0xaf9a, 3}, - {0xaf9b, 4}, - {0xaf9c, 1329}, - {0xaf9e, 0}, - {0xaf9f, 1}, - {0xafa0, 2}, - {0xafa1, 3}, - {0xafa2, 4}, - {0xafa3, 5}, - {0xafa4, 6}, - {0xafa5, 7}, - {0xafa6, 8}, - {0xafa7, 9}, - {0xafa8, 10}, - {0xafa9, 11}, - {0xafaa, 12}, - {0xafab, 13}, - {0xafac, 14}, - {0xafad, 15}, - {0xafae, 16}, - {0xafaf, 17}, - {0xafb0, 18}, - {0xafb1, 19}, - {0xafb2, 20}, - {0xafb3, 21}, - {0xafb4, 22}, - {0xafb5, 23}, - {0xafb6, 24}, - {0xafb7, 25}, - {0xafb8, 1330}, - {0xafb9, 1331}, - {0xafbb, 0}, - {0xafbc, 1332}, - {0xafbe, 0}, - {0xafbf, 1}, - {0xafc0, 1333}, - {0xafc2, 0}, - {0xafc3, 1}, - {0xafc4, 2}, - {0xafc5, 3}, - {0xafc6, 4}, - {0xafc7, 1334}, - {0xafc8, 1335}, - {0xafc9, 1336}, - {0xafcb, 1337}, - {0xafcd, 1338}, - {0xafce, 1339}, - {0xafd0, 0}, - {0xafd1, 1}, - {0xafd2, 2}, - {0xafd3, 3}, - {0xafd4, 1340}, - {0xafd6, 0}, - {0xafd7, 1}, - {0xafd8, 2}, - {0xafd9, 3}, - {0xafda, 4}, - {0xafdb, 5}, - {0xafdc, 1341}, - {0xafde, 0}, - {0xafdf, 1}, - {0xafe0, 2}, - {0xafe1, 3}, - {0xafe2, 4}, - {0xafe3, 5}, - {0xafe4, 6}, - {0xafe5, 7}, - {0xafe6, 8}, - {0xafe7, 9}, - {0xafe8, 1342}, - {0xafe9, 1343}, - {0xafeb, 0}, - {0xafec, 1}, - {0xafed, 2}, - {0xafee, 3}, - {0xafef, 4}, - {0xaff0, 1344}, - {0xaff1, 1345}, - {0xaff3, 0}, - {0xaff4, 1346}, - {0xaff6, 0}, - {0xaff7, 1}, - {0xaff8, 1347}, - {0xaffa, 0}, - {0xaffb, 1}, - {0xaffc, 2}, - {0xaffd, 3}, - {0xaffe, 4}, - {0xafff, 5}, - {0xb000, 1348}, - {0xb001, 1349}, - {0xb003, 0}, - {0xb004, 1350}, - {0xb006, 0}, - {0xb007, 1}, - {0xb008, 2}, - {0xb009, 3}, - {0xb00a, 4}, - {0xb00b, 5}, - {0xb00c, 1351}, - {0xb00e, 0}, - {0xb00f, 1}, - {0xb010, 1352}, - {0xb012, 0}, - {0xb013, 1}, - {0xb014, 1353}, - {0xb016, 0}, - {0xb017, 1}, - {0xb018, 2}, - {0xb019, 3}, - {0xb01a, 4}, - {0xb01b, 5}, - {0xb01c, 1354}, - {0xb01d, 1355}, - {0xb01f, 0}, - {0xb020, 1}, - {0xb021, 2}, - {0xb022, 3}, - {0xb023, 4}, - {0xb024, 5}, - {0xb025, 6}, - {0xb026, 7}, - {0xb027, 8}, - {0xb028, 1356}, - {0xb02a, 0}, - {0xb02b, 1}, - {0xb02c, 2}, - {0xb02d, 3}, - {0xb02e, 4}, - {0xb02f, 5}, - {0xb030, 6}, - {0xb031, 7}, - {0xb032, 8}, - {0xb033, 9}, - {0xb034, 10}, - {0xb035, 11}, - {0xb036, 12}, - {0xb037, 13}, - {0xb038, 14}, - {0xb039, 15}, - {0xb03a, 16}, - {0xb03b, 17}, - {0xb03c, 18}, - {0xb03d, 19}, - {0xb03e, 20}, - {0xb03f, 21}, - {0xb040, 22}, - {0xb041, 23}, - {0xb042, 24}, - {0xb043, 25}, - {0xb044, 1357}, - {0xb045, 1358}, - {0xb047, 0}, - {0xb048, 1359}, - {0xb04a, 1360}, - {0xb04c, 1361}, - {0xb04e, 1362}, - {0xb050, 0}, - {0xb051, 1}, - {0xb052, 2}, - {0xb053, 1363}, - {0xb054, 1364}, - {0xb055, 1365}, - {0xb057, 1366}, - {0xb059, 1367}, - {0xb05b, 0}, - {0xb05c, 1}, - {0xb05d, 1368}, - {0xb05f, 0}, - {0xb060, 1}, - {0xb061, 2}, - {0xb062, 3}, - {0xb063, 4}, - {0xb064, 5}, - {0xb065, 6}, - {0xb066, 7}, - {0xb067, 8}, - {0xb068, 9}, - {0xb069, 10}, - {0xb06a, 11}, - {0xb06b, 12}, - {0xb06c, 13}, - {0xb06d, 14}, - {0xb06e, 15}, - {0xb06f, 16}, - {0xb070, 17}, - {0xb071, 18}, - {0xb072, 19}, - {0xb073, 20}, - {0xb074, 21}, - {0xb075, 22}, - {0xb076, 23}, - {0xb077, 24}, - {0xb078, 25}, - {0xb079, 26}, - {0xb07a, 27}, - {0xb07b, 28}, - {0xb07c, 1369}, - {0xb07d, 1370}, - {0xb07f, 0}, - {0xb080, 1371}, - {0xb082, 0}, - {0xb083, 1}, - {0xb084, 1372}, - {0xb086, 0}, - {0xb087, 1}, - {0xb088, 2}, - {0xb089, 3}, - {0xb08a, 4}, - {0xb08b, 5}, - {0xb08c, 1373}, - {0xb08d, 1374}, - {0xb08f, 1375}, - {0xb091, 1376}, - {0xb093, 0}, - {0xb094, 1}, - {0xb095, 2}, - {0xb096, 3}, - {0xb097, 4}, - {0xb098, 1377}, - {0xb099, 1378}, - {0xb09a, 1379}, - {0xb09c, 1380}, - {0xb09e, 0}, - {0xb09f, 1381}, - {0xb0a0, 1382}, - {0xb0a1, 1383}, - {0xb0a2, 1384}, - {0xb0a4, 0}, - {0xb0a5, 1}, - {0xb0a6, 2}, - {0xb0a7, 3}, - {0xb0a8, 1385}, - {0xb0a9, 1386}, - {0xb0ab, 1387}, - {0xb0ac, 1388}, - {0xb0ad, 1389}, - {0xb0ae, 1390}, - {0xb0af, 1391}, - {0xb0b1, 1392}, - {0xb0b3, 1393}, - {0xb0b4, 1394}, - {0xb0b5, 1395}, - {0xb0b7, 0}, - {0xb0b8, 1396}, - {0xb0ba, 0}, - {0xb0bb, 1}, - {0xb0bc, 1397}, - {0xb0be, 0}, - {0xb0bf, 1}, - {0xb0c0, 2}, - {0xb0c1, 3}, - {0xb0c2, 4}, - {0xb0c3, 5}, - {0xb0c4, 1398}, - {0xb0c5, 1399}, - {0xb0c7, 1400}, - {0xb0c8, 1401}, - {0xb0c9, 1402}, - {0xb0cb, 0}, - {0xb0cc, 1}, - {0xb0cd, 2}, - {0xb0ce, 3}, - {0xb0cf, 4}, - {0xb0d0, 1403}, - {0xb0d1, 1404}, - {0xb0d3, 0}, - {0xb0d4, 1405}, - {0xb0d6, 0}, - {0xb0d7, 1}, - {0xb0d8, 1406}, - {0xb0da, 0}, - {0xb0db, 1}, - {0xb0dc, 2}, - {0xb0dd, 3}, - {0xb0de, 4}, - {0xb0df, 5}, - {0xb0e0, 1407}, - {0xb0e2, 0}, - {0xb0e3, 1}, - {0xb0e4, 2}, - {0xb0e5, 1408}, - {0xb0e7, 0}, - {0xb0e8, 1}, - {0xb0e9, 2}, - {0xb0ea, 3}, - {0xb0eb, 4}, - {0xb0ec, 5}, - {0xb0ed, 6}, - {0xb0ee, 7}, - {0xb0ef, 8}, - {0xb0f0, 9}, - {0xb0f1, 10}, - {0xb0f2, 11}, - {0xb0f3, 12}, - {0xb0f4, 13}, - {0xb0f5, 14}, - {0xb0f6, 15}, - {0xb0f7, 16}, - {0xb0f8, 17}, - {0xb0f9, 18}, - {0xb0fa, 19}, - {0xb0fb, 20}, - {0xb0fc, 21}, - {0xb0fd, 22}, - {0xb0fe, 23}, - {0xb0ff, 24}, - {0xb101, 0}, - {0xb102, 1}, - {0xb103, 2}, - {0xb104, 3}, - {0xb105, 4}, - {0xb106, 5}, - {0xb107, 6}, - {0xb108, 1409}, - {0xb109, 1410}, - {0xb10b, 1411}, - {0xb10c, 1412}, - {0xb10e, 0}, - {0xb10f, 1}, - {0xb110, 1413}, - {0xb112, 1414}, - {0xb113, 1415}, - {0xb115, 0}, - {0xb116, 1}, - {0xb117, 2}, - {0xb118, 1416}, - {0xb119, 1417}, - {0xb11b, 1418}, - {0xb11c, 1419}, - {0xb11d, 1420}, - {0xb11f, 0}, - {0xb120, 1}, - {0xb121, 2}, - {0xb122, 3}, - {0xb123, 1421}, - {0xb124, 1422}, - {0xb125, 1423}, - {0xb127, 0}, - {0xb128, 1424}, - {0xb12a, 0}, - {0xb12b, 1}, - {0xb12c, 1425}, - {0xb12e, 0}, - {0xb12f, 1}, - {0xb130, 2}, - {0xb131, 3}, - {0xb132, 4}, - {0xb133, 5}, - {0xb134, 1426}, - {0xb135, 1427}, - {0xb137, 1428}, - {0xb138, 1429}, - {0xb139, 1430}, - {0xb13b, 0}, - {0xb13c, 1}, - {0xb13d, 2}, - {0xb13e, 3}, - {0xb13f, 4}, - {0xb140, 1431}, - {0xb141, 1432}, - {0xb143, 0}, - {0xb144, 1433}, - {0xb146, 0}, - {0xb147, 1}, - {0xb148, 1434}, - {0xb14a, 0}, - {0xb14b, 1}, - {0xb14c, 2}, - {0xb14d, 3}, - {0xb14e, 4}, - {0xb14f, 5}, - {0xb150, 1435}, - {0xb151, 1436}, - {0xb153, 0}, - {0xb154, 1437}, - {0xb155, 1438}, - {0xb157, 0}, - {0xb158, 1439}, - {0xb15a, 0}, - {0xb15b, 1}, - {0xb15c, 1440}, - {0xb15e, 0}, - {0xb15f, 1}, - {0xb160, 1441}, - {0xb162, 0}, - {0xb163, 1}, - {0xb164, 2}, - {0xb165, 3}, - {0xb166, 4}, - {0xb167, 5}, - {0xb168, 6}, - {0xb169, 7}, - {0xb16a, 8}, - {0xb16b, 9}, - {0xb16c, 10}, - {0xb16d, 11}, - {0xb16e, 12}, - {0xb16f, 13}, - {0xb170, 14}, - {0xb171, 15}, - {0xb172, 16}, - {0xb173, 17}, - {0xb174, 18}, - {0xb175, 19}, - {0xb176, 20}, - {0xb177, 21}, - {0xb178, 1442}, - {0xb179, 1443}, - {0xb17b, 0}, - {0xb17c, 1444}, - {0xb17e, 0}, - {0xb17f, 1}, - {0xb180, 1445}, - {0xb182, 1446}, - {0xb184, 0}, - {0xb185, 1}, - {0xb186, 2}, - {0xb187, 3}, - {0xb188, 1447}, - {0xb189, 1448}, - {0xb18b, 1449}, - {0xb18d, 1450}, - {0xb18f, 0}, - {0xb190, 1}, - {0xb191, 2}, - {0xb192, 1451}, - {0xb193, 1452}, - {0xb194, 1453}, - {0xb196, 0}, - {0xb197, 1}, - {0xb198, 1454}, - {0xb19a, 0}, - {0xb19b, 1}, - {0xb19c, 1455}, - {0xb19e, 0}, - {0xb19f, 1}, - {0xb1a0, 2}, - {0xb1a1, 3}, - {0xb1a2, 4}, - {0xb1a3, 5}, - {0xb1a4, 6}, - {0xb1a5, 7}, - {0xb1a6, 8}, - {0xb1a7, 9}, - {0xb1a8, 1456}, - {0xb1aa, 0}, - {0xb1ab, 1}, - {0xb1ac, 2}, - {0xb1ad, 3}, - {0xb1ae, 4}, - {0xb1af, 5}, - {0xb1b0, 6}, - {0xb1b1, 7}, - {0xb1b2, 8}, - {0xb1b3, 9}, - {0xb1b4, 10}, - {0xb1b5, 11}, - {0xb1b6, 12}, - {0xb1b7, 13}, - {0xb1b8, 14}, - {0xb1b9, 15}, - {0xb1ba, 16}, - {0xb1bb, 17}, - {0xb1bc, 18}, - {0xb1bd, 19}, - {0xb1be, 20}, - {0xb1bf, 21}, - {0xb1c0, 22}, - {0xb1c1, 23}, - {0xb1c2, 24}, - {0xb1c3, 25}, - {0xb1c4, 26}, - {0xb1c5, 27}, - {0xb1c6, 28}, - {0xb1c7, 29}, - {0xb1c8, 30}, - {0xb1c9, 31}, - {0xb1ca, 32}, - {0xb1cb, 33}, - {0xb1cc, 1457}, - {0xb1ce, 0}, - {0xb1cf, 1}, - {0xb1d0, 1458}, - {0xb1d2, 0}, - {0xb1d3, 1}, - {0xb1d4, 1459}, - {0xb1d6, 0}, - {0xb1d7, 1}, - {0xb1d8, 2}, - {0xb1d9, 3}, - {0xb1da, 4}, - {0xb1db, 5}, - {0xb1dc, 1460}, - {0xb1dd, 1461}, - {0xb1df, 1462}, - {0xb1e1, 0}, - {0xb1e2, 1}, - {0xb1e3, 2}, - {0xb1e4, 3}, - {0xb1e5, 4}, - {0xb1e6, 5}, - {0xb1e7, 6}, - {0xb1e8, 1463}, - {0xb1e9, 1464}, - {0xb1eb, 0}, - {0xb1ec, 1465}, - {0xb1ee, 0}, - {0xb1ef, 1}, - {0xb1f0, 1466}, - {0xb1f2, 0}, - {0xb1f3, 1}, - {0xb1f4, 2}, - {0xb1f5, 3}, - {0xb1f6, 4}, - {0xb1f7, 5}, - {0xb1f8, 6}, - {0xb1f9, 1467}, - {0xb1fb, 1468}, - {0xb1fd, 1469}, - {0xb1ff, 0}, - {0xb201, 0}, - {0xb202, 1}, - {0xb203, 2}, - {0xb204, 1470}, - {0xb205, 1471}, - {0xb207, 0}, - {0xb208, 1472}, - {0xb20a, 0}, - {0xb20b, 1473}, - {0xb20c, 1474}, - {0xb20e, 0}, - {0xb20f, 1}, - {0xb210, 2}, - {0xb211, 3}, - {0xb212, 4}, - {0xb213, 5}, - {0xb214, 1475}, - {0xb215, 1476}, - {0xb217, 1477}, - {0xb219, 1478}, - {0xb21b, 0}, - {0xb21c, 1}, - {0xb21d, 2}, - {0xb21e, 3}, - {0xb21f, 4}, - {0xb220, 1479}, - {0xb222, 0}, - {0xb223, 1}, - {0xb224, 2}, - {0xb225, 3}, - {0xb226, 4}, - {0xb227, 5}, - {0xb228, 6}, - {0xb229, 7}, - {0xb22a, 8}, - {0xb22b, 9}, - {0xb22c, 10}, - {0xb22d, 11}, - {0xb22e, 12}, - {0xb22f, 13}, - {0xb230, 14}, - {0xb231, 15}, - {0xb232, 16}, - {0xb233, 17}, - {0xb234, 1480}, - {0xb236, 0}, - {0xb237, 1}, - {0xb238, 2}, - {0xb239, 3}, - {0xb23a, 4}, - {0xb23b, 5}, - {0xb23c, 1481}, - {0xb23e, 0}, - {0xb23f, 1}, - {0xb240, 2}, - {0xb241, 3}, - {0xb242, 4}, - {0xb243, 5}, - {0xb244, 6}, - {0xb245, 7}, - {0xb246, 8}, - {0xb247, 9}, - {0xb248, 10}, - {0xb249, 11}, - {0xb24a, 12}, - {0xb24b, 13}, - {0xb24c, 14}, - {0xb24d, 15}, - {0xb24e, 16}, - {0xb24f, 17}, - {0xb250, 18}, - {0xb251, 19}, - {0xb252, 20}, - {0xb253, 21}, - {0xb254, 22}, - {0xb255, 23}, - {0xb256, 24}, - {0xb257, 25}, - {0xb258, 1482}, - {0xb25a, 0}, - {0xb25b, 1}, - {0xb25c, 1483}, - {0xb25e, 0}, - {0xb25f, 1}, - {0xb260, 1484}, - {0xb262, 0}, - {0xb263, 1}, - {0xb264, 2}, - {0xb265, 3}, - {0xb266, 4}, - {0xb267, 5}, - {0xb268, 1485}, - {0xb269, 1486}, - {0xb26b, 0}, - {0xb26c, 1}, - {0xb26d, 2}, - {0xb26e, 3}, - {0xb26f, 4}, - {0xb270, 5}, - {0xb271, 6}, - {0xb272, 7}, - {0xb273, 8}, - {0xb274, 1487}, - {0xb275, 1488}, - {0xb277, 0}, - {0xb278, 1}, - {0xb279, 2}, - {0xb27a, 3}, - {0xb27b, 4}, - {0xb27c, 1489}, - {0xb27e, 0}, - {0xb27f, 1}, - {0xb280, 2}, - {0xb281, 3}, - {0xb282, 4}, - {0xb283, 5}, - {0xb284, 1490}, - {0xb285, 1491}, - {0xb287, 0}, - {0xb288, 1}, - {0xb289, 1492}, - {0xb28b, 0}, - {0xb28c, 1}, - {0xb28d, 2}, - {0xb28e, 3}, - {0xb28f, 4}, - {0xb290, 1493}, - {0xb291, 1494}, - {0xb293, 0}, - {0xb294, 1495}, - {0xb296, 0}, - {0xb297, 1}, - {0xb298, 1496}, - {0xb299, 1497}, - {0xb29a, 1498}, - {0xb29c, 0}, - {0xb29d, 1}, - {0xb29e, 2}, - {0xb29f, 3}, - {0xb2a0, 1499}, - {0xb2a1, 1500}, - {0xb2a3, 1501}, - {0xb2a5, 1502}, - {0xb2a6, 1503}, - {0xb2a8, 0}, - {0xb2a9, 1}, - {0xb2aa, 1504}, - {0xb2ac, 1505}, - {0xb2ae, 0}, - {0xb2af, 1}, - {0xb2b0, 1506}, - {0xb2b2, 0}, - {0xb2b3, 1}, - {0xb2b4, 1507}, - {0xb2b6, 0}, - {0xb2b7, 1}, - {0xb2b8, 2}, - {0xb2b9, 3}, - {0xb2ba, 4}, - {0xb2bb, 5}, - {0xb2bc, 6}, - {0xb2bd, 7}, - {0xb2be, 8}, - {0xb2bf, 9}, - {0xb2c0, 10}, - {0xb2c1, 11}, - {0xb2c2, 12}, - {0xb2c3, 13}, - {0xb2c4, 14}, - {0xb2c5, 15}, - {0xb2c6, 16}, - {0xb2c7, 17}, - {0xb2c8, 1508}, - {0xb2c9, 1509}, - {0xb2cb, 0}, - {0xb2cc, 1510}, - {0xb2ce, 0}, - {0xb2cf, 1}, - {0xb2d0, 1511}, - {0xb2d2, 1512}, - {0xb2d4, 0}, - {0xb2d5, 1}, - {0xb2d6, 2}, - {0xb2d7, 3}, - {0xb2d8, 1513}, - {0xb2d9, 1514}, - {0xb2db, 1515}, - {0xb2dd, 1516}, - {0xb2df, 0}, - {0xb2e0, 1}, - {0xb2e1, 2}, - {0xb2e2, 1517}, - {0xb2e4, 1518}, - {0xb2e5, 1519}, - {0xb2e6, 1520}, - {0xb2e8, 1521}, - {0xb2ea, 0}, - {0xb2eb, 1522}, - {0xb2ec, 1523}, - {0xb2ed, 1524}, - {0xb2ee, 1525}, - {0xb2ef, 1526}, - {0xb2f1, 0}, - {0xb2f2, 1}, - {0xb2f3, 1527}, - {0xb2f4, 1528}, - {0xb2f5, 1529}, - {0xb2f7, 1530}, - {0xb2f8, 1531}, - {0xb2f9, 1532}, - {0xb2fa, 1533}, - {0xb2fb, 1534}, - {0xb2fd, 0}, - {0xb2fe, 1}, - {0xb2ff, 1535}, - {0xb300, 1536}, - {0xb301, 1537}, - {0xb303, 0}, - {0xb304, 1538}, - {0xb306, 0}, - {0xb307, 1}, - {0xb308, 1539}, - {0xb30a, 0}, - {0xb30b, 1}, - {0xb30c, 2}, - {0xb30d, 3}, - {0xb30e, 4}, - {0xb30f, 5}, - {0xb310, 1540}, - {0xb311, 1541}, - {0xb313, 1542}, - {0xb314, 1543}, - {0xb315, 1544}, - {0xb317, 0}, - {0xb318, 1}, - {0xb319, 2}, - {0xb31a, 3}, - {0xb31b, 4}, - {0xb31c, 1545}, - {0xb31e, 0}, - {0xb31f, 1}, - {0xb320, 2}, - {0xb321, 3}, - {0xb322, 4}, - {0xb323, 5}, - {0xb324, 6}, - {0xb325, 7}, - {0xb326, 8}, - {0xb327, 9}, - {0xb328, 10}, - {0xb329, 11}, - {0xb32a, 12}, - {0xb32b, 13}, - {0xb32c, 14}, - {0xb32d, 15}, - {0xb32e, 16}, - {0xb32f, 17}, - {0xb330, 18}, - {0xb331, 19}, - {0xb332, 20}, - {0xb333, 21}, - {0xb334, 22}, - {0xb335, 23}, - {0xb336, 24}, - {0xb337, 25}, - {0xb338, 26}, - {0xb339, 27}, - {0xb33a, 28}, - {0xb33b, 29}, - {0xb33c, 30}, - {0xb33d, 31}, - {0xb33e, 32}, - {0xb33f, 33}, - {0xb340, 34}, - {0xb341, 35}, - {0xb342, 36}, - {0xb343, 37}, - {0xb344, 38}, - {0xb345, 39}, - {0xb346, 40}, - {0xb347, 41}, - {0xb348, 42}, - {0xb349, 43}, - {0xb34a, 44}, - {0xb34b, 45}, - {0xb34c, 46}, - {0xb34d, 47}, - {0xb34e, 48}, - {0xb34f, 49}, - {0xb350, 50}, - {0xb351, 51}, - {0xb352, 52}, - {0xb353, 53}, - {0xb354, 1546}, - {0xb355, 1547}, - {0xb356, 1548}, - {0xb358, 1549}, - {0xb35a, 0}, - {0xb35b, 1550}, - {0xb35c, 1551}, - {0xb35e, 1552}, - {0xb35f, 1553}, - {0xb361, 0}, - {0xb362, 1}, - {0xb363, 2}, - {0xb364, 1554}, - {0xb365, 1555}, - {0xb367, 1556}, - {0xb369, 1557}, - {0xb36b, 1558}, - {0xb36d, 0}, - {0xb36e, 1559}, - {0xb370, 1560}, - {0xb371, 1561}, - {0xb373, 0}, - {0xb374, 1562}, - {0xb376, 0}, - {0xb377, 1}, - {0xb378, 1563}, - {0xb37a, 0}, - {0xb37b, 1}, - {0xb37c, 2}, - {0xb37d, 3}, - {0xb37e, 4}, - {0xb37f, 5}, - {0xb380, 1564}, - {0xb381, 1565}, - {0xb383, 1566}, - {0xb384, 1567}, - {0xb385, 1568}, - {0xb387, 0}, - {0xb388, 1}, - {0xb389, 2}, - {0xb38a, 3}, - {0xb38b, 4}, - {0xb38c, 1569}, - {0xb38e, 0}, - {0xb38f, 1}, - {0xb390, 1570}, - {0xb392, 0}, - {0xb393, 1}, - {0xb394, 1571}, - {0xb396, 0}, - {0xb397, 1}, - {0xb398, 2}, - {0xb399, 3}, - {0xb39a, 4}, - {0xb39b, 5}, - {0xb39c, 6}, - {0xb39d, 7}, - {0xb39e, 8}, - {0xb39f, 9}, - {0xb3a0, 1572}, - {0xb3a1, 1573}, - {0xb3a3, 0}, - {0xb3a4, 1}, - {0xb3a5, 2}, - {0xb3a6, 3}, - {0xb3a7, 4}, - {0xb3a8, 1574}, - {0xb3aa, 0}, - {0xb3ab, 1}, - {0xb3ac, 1575}, - {0xb3ae, 0}, - {0xb3af, 1}, - {0xb3b0, 2}, - {0xb3b1, 3}, - {0xb3b2, 4}, - {0xb3b3, 5}, - {0xb3b4, 6}, - {0xb3b5, 7}, - {0xb3b6, 8}, - {0xb3b7, 9}, - {0xb3b8, 10}, - {0xb3b9, 11}, - {0xb3ba, 12}, - {0xb3bb, 13}, - {0xb3bc, 14}, - {0xb3bd, 15}, - {0xb3be, 16}, - {0xb3bf, 17}, - {0xb3c0, 18}, - {0xb3c1, 19}, - {0xb3c2, 20}, - {0xb3c3, 21}, - {0xb3c4, 1576}, - {0xb3c5, 1577}, - {0xb3c7, 0}, - {0xb3c8, 1578}, - {0xb3ca, 0}, - {0xb3cb, 1579}, - {0xb3cc, 1580}, - {0xb3ce, 1581}, - {0xb3d0, 1582}, - {0xb3d2, 0}, - {0xb3d3, 1}, - {0xb3d4, 1583}, - {0xb3d5, 1584}, - {0xb3d7, 1585}, - {0xb3d9, 1586}, - {0xb3db, 1587}, - {0xb3dd, 1588}, - {0xb3df, 0}, - {0xb3e0, 1589}, - {0xb3e2, 0}, - {0xb3e3, 1}, - {0xb3e4, 1590}, - {0xb3e6, 0}, - {0xb3e7, 1}, - {0xb3e8, 1591}, - {0xb3ea, 0}, - {0xb3eb, 1}, - {0xb3ec, 2}, - {0xb3ed, 3}, - {0xb3ee, 4}, - {0xb3ef, 5}, - {0xb3f0, 6}, - {0xb3f1, 7}, - {0xb3f2, 8}, - {0xb3f3, 9}, - {0xb3f4, 10}, - {0xb3f5, 11}, - {0xb3f6, 12}, - {0xb3f7, 13}, - {0xb3f8, 14}, - {0xb3f9, 15}, - {0xb3fa, 16}, - {0xb3fb, 17}, - {0xb3fc, 1592}, - {0xb3fe, 0}, - {0xb3ff, 1}, - {0xb401, 0}, - {0xb402, 1}, - {0xb403, 2}, - {0xb404, 3}, - {0xb405, 4}, - {0xb406, 5}, - {0xb407, 6}, - {0xb408, 7}, - {0xb409, 8}, - {0xb40a, 9}, - {0xb40b, 10}, - {0xb40c, 11}, - {0xb40d, 12}, - {0xb40e, 13}, - {0xb40f, 14}, - {0xb410, 1593}, - {0xb412, 0}, - {0xb413, 1}, - {0xb414, 2}, - {0xb415, 3}, - {0xb416, 4}, - {0xb417, 5}, - {0xb418, 1594}, - {0xb41a, 0}, - {0xb41b, 1}, - {0xb41c, 1595}, - {0xb41e, 0}, - {0xb41f, 1}, - {0xb420, 1596}, - {0xb422, 0}, - {0xb423, 1}, - {0xb424, 2}, - {0xb425, 3}, - {0xb426, 4}, - {0xb427, 5}, - {0xb428, 1597}, - {0xb429, 1598}, - {0xb42b, 1599}, - {0xb42d, 0}, - {0xb42e, 1}, - {0xb42f, 2}, - {0xb430, 3}, - {0xb431, 4}, - {0xb432, 5}, - {0xb433, 6}, - {0xb434, 1600}, - {0xb436, 0}, - {0xb437, 1}, - {0xb438, 2}, - {0xb439, 3}, - {0xb43a, 4}, - {0xb43b, 5}, - {0xb43c, 6}, - {0xb43d, 7}, - {0xb43e, 8}, - {0xb43f, 9}, - {0xb440, 10}, - {0xb441, 11}, - {0xb442, 12}, - {0xb443, 13}, - {0xb444, 14}, - {0xb445, 15}, - {0xb446, 16}, - {0xb447, 17}, - {0xb448, 18}, - {0xb449, 19}, - {0xb44a, 20}, - {0xb44b, 21}, - {0xb44c, 22}, - {0xb44d, 23}, - {0xb44e, 24}, - {0xb44f, 25}, - {0xb450, 1601}, - {0xb451, 1602}, - {0xb453, 0}, - {0xb454, 1603}, - {0xb456, 0}, - {0xb457, 1}, - {0xb458, 1604}, - {0xb45a, 0}, - {0xb45b, 1}, - {0xb45c, 2}, - {0xb45d, 3}, - {0xb45e, 4}, - {0xb45f, 5}, - {0xb460, 1605}, - {0xb461, 1606}, - {0xb463, 1607}, - {0xb465, 1608}, - {0xb467, 0}, - {0xb468, 1}, - {0xb469, 2}, - {0xb46a, 3}, - {0xb46b, 4}, - {0xb46c, 1609}, - {0xb46e, 0}, - {0xb46f, 1}, - {0xb470, 2}, - {0xb471, 3}, - {0xb472, 4}, - {0xb473, 5}, - {0xb474, 6}, - {0xb475, 7}, - {0xb476, 8}, - {0xb477, 9}, - {0xb478, 10}, - {0xb479, 11}, - {0xb47a, 12}, - {0xb47b, 13}, - {0xb47c, 14}, - {0xb47d, 15}, - {0xb47e, 16}, - {0xb47f, 17}, - {0xb480, 1610}, - {0xb482, 0}, - {0xb483, 1}, - {0xb484, 2}, - {0xb485, 3}, - {0xb486, 4}, - {0xb487, 5}, - {0xb488, 1611}, - {0xb48a, 0}, - {0xb48b, 1}, - {0xb48c, 2}, - {0xb48d, 3}, - {0xb48e, 4}, - {0xb48f, 5}, - {0xb490, 6}, - {0xb491, 7}, - {0xb492, 8}, - {0xb493, 9}, - {0xb494, 10}, - {0xb495, 11}, - {0xb496, 12}, - {0xb497, 13}, - {0xb498, 14}, - {0xb499, 15}, - {0xb49a, 16}, - {0xb49b, 17}, - {0xb49c, 18}, - {0xb49d, 1612}, - {0xb49f, 0}, - {0xb4a0, 1}, - {0xb4a1, 2}, - {0xb4a2, 3}, - {0xb4a3, 4}, - {0xb4a4, 1613}, - {0xb4a6, 0}, - {0xb4a7, 1}, - {0xb4a8, 1614}, - {0xb4aa, 0}, - {0xb4ab, 1}, - {0xb4ac, 1615}, - {0xb4ae, 0}, - {0xb4af, 1}, - {0xb4b0, 2}, - {0xb4b1, 3}, - {0xb4b2, 4}, - {0xb4b3, 5}, - {0xb4b4, 6}, - {0xb4b5, 1616}, - {0xb4b7, 1617}, - {0xb4b9, 1618}, - {0xb4bb, 0}, - {0xb4bc, 1}, - {0xb4bd, 2}, - {0xb4be, 3}, - {0xb4bf, 4}, - {0xb4c0, 1619}, - {0xb4c2, 0}, - {0xb4c3, 1}, - {0xb4c4, 1620}, - {0xb4c6, 0}, - {0xb4c7, 1}, - {0xb4c8, 1621}, - {0xb4ca, 0}, - {0xb4cb, 1}, - {0xb4cc, 2}, - {0xb4cd, 3}, - {0xb4ce, 4}, - {0xb4cf, 5}, - {0xb4d0, 1622}, - {0xb4d2, 0}, - {0xb4d3, 1}, - {0xb4d4, 2}, - {0xb4d5, 1623}, - {0xb4d7, 0}, - {0xb4d8, 1}, - {0xb4d9, 2}, - {0xb4da, 3}, - {0xb4db, 4}, - {0xb4dc, 1624}, - {0xb4dd, 1625}, - {0xb4df, 0}, - {0xb4e0, 1626}, - {0xb4e2, 0}, - {0xb4e3, 1627}, - {0xb4e4, 1628}, - {0xb4e6, 1629}, - {0xb4e8, 0}, - {0xb4e9, 1}, - {0xb4ea, 2}, - {0xb4eb, 3}, - {0xb4ec, 1630}, - {0xb4ed, 1631}, - {0xb4ef, 1632}, - {0xb4f1, 1633}, - {0xb4f3, 0}, - {0xb4f4, 1}, - {0xb4f5, 2}, - {0xb4f6, 3}, - {0xb4f7, 4}, - {0xb4f8, 1634}, - {0xb4fa, 0}, - {0xb4fb, 1}, - {0xb4fc, 2}, - {0xb4fd, 3}, - {0xb4fe, 4}, - {0xb4ff, 5}, - {0xb501, 0}, - {0xb502, 1}, - {0xb503, 2}, - {0xb504, 3}, - {0xb505, 4}, - {0xb506, 5}, - {0xb507, 6}, - {0xb508, 7}, - {0xb509, 8}, - {0xb50a, 9}, - {0xb50b, 10}, - {0xb50c, 11}, - {0xb50d, 12}, - {0xb50e, 13}, - {0xb50f, 14}, - {0xb510, 15}, - {0xb511, 16}, - {0xb512, 17}, - {0xb513, 18}, - {0xb514, 1635}, - {0xb515, 1636}, - {0xb517, 0}, - {0xb518, 1637}, - {0xb51a, 0}, - {0xb51b, 1638}, - {0xb51c, 1639}, - {0xb51e, 0}, - {0xb51f, 1}, - {0xb520, 2}, - {0xb521, 3}, - {0xb522, 4}, - {0xb523, 5}, - {0xb524, 1640}, - {0xb525, 1641}, - {0xb527, 1642}, - {0xb528, 1643}, - {0xb529, 1644}, - {0xb52a, 1645}, - {0xb52c, 0}, - {0xb52d, 1}, - {0xb52e, 2}, - {0xb52f, 3}, - {0xb530, 1646}, - {0xb531, 1647}, - {0xb533, 0}, - {0xb534, 1648}, - {0xb536, 0}, - {0xb537, 1}, - {0xb538, 1649}, - {0xb53a, 0}, - {0xb53b, 1}, - {0xb53c, 2}, - {0xb53d, 3}, - {0xb53e, 4}, - {0xb53f, 5}, - {0xb540, 1650}, - {0xb541, 1651}, - {0xb543, 1652}, - {0xb544, 1653}, - {0xb545, 1654}, - {0xb547, 0}, - {0xb548, 1}, - {0xb549, 2}, - {0xb54a, 3}, - {0xb54b, 1655}, - {0xb54c, 1656}, - {0xb54d, 1657}, - {0xb54f, 0}, - {0xb550, 1658}, - {0xb552, 0}, - {0xb553, 1}, - {0xb554, 1659}, - {0xb556, 0}, - {0xb557, 1}, - {0xb558, 2}, - {0xb559, 3}, - {0xb55a, 4}, - {0xb55b, 5}, - {0xb55c, 1660}, - {0xb55d, 1661}, - {0xb55f, 1662}, - {0xb560, 1663}, - {0xb561, 1664}, - {0xb563, 0}, - {0xb564, 1}, - {0xb565, 2}, - {0xb566, 3}, - {0xb567, 4}, - {0xb568, 5}, - {0xb569, 6}, - {0xb56a, 7}, - {0xb56b, 8}, - {0xb56c, 9}, - {0xb56d, 10}, - {0xb56e, 11}, - {0xb56f, 12}, - {0xb570, 13}, - {0xb571, 14}, - {0xb572, 15}, - {0xb573, 16}, - {0xb574, 17}, - {0xb575, 18}, - {0xb576, 19}, - {0xb577, 20}, - {0xb578, 21}, - {0xb579, 22}, - {0xb57a, 23}, - {0xb57b, 24}, - {0xb57c, 25}, - {0xb57d, 26}, - {0xb57e, 27}, - {0xb57f, 28}, - {0xb580, 29}, - {0xb581, 30}, - {0xb582, 31}, - {0xb583, 32}, - {0xb584, 33}, - {0xb585, 34}, - {0xb586, 35}, - {0xb587, 36}, - {0xb588, 37}, - {0xb589, 38}, - {0xb58a, 39}, - {0xb58b, 40}, - {0xb58c, 41}, - {0xb58d, 42}, - {0xb58e, 43}, - {0xb58f, 44}, - {0xb590, 45}, - {0xb591, 46}, - {0xb592, 47}, - {0xb593, 48}, - {0xb594, 49}, - {0xb595, 50}, - {0xb596, 51}, - {0xb597, 52}, - {0xb598, 53}, - {0xb599, 54}, - {0xb59a, 55}, - {0xb59b, 56}, - {0xb59c, 57}, - {0xb59d, 58}, - {0xb59e, 59}, - {0xb59f, 60}, - {0xb5a0, 1665}, - {0xb5a1, 1666}, - {0xb5a3, 0}, - {0xb5a4, 1667}, - {0xb5a6, 0}, - {0xb5a7, 1}, - {0xb5a8, 1668}, - {0xb5aa, 1669}, - {0xb5ab, 1670}, - {0xb5ad, 0}, - {0xb5ae, 1}, - {0xb5af, 2}, - {0xb5b0, 1671}, - {0xb5b1, 1672}, - {0xb5b3, 1673}, - {0xb5b4, 1674}, - {0xb5b5, 1675}, - {0xb5b7, 0}, - {0xb5b8, 1}, - {0xb5b9, 2}, - {0xb5ba, 3}, - {0xb5bb, 1676}, - {0xb5bc, 1677}, - {0xb5bd, 1678}, - {0xb5bf, 0}, - {0xb5c0, 1679}, - {0xb5c2, 0}, - {0xb5c3, 1}, - {0xb5c4, 1680}, - {0xb5c6, 0}, - {0xb5c7, 1}, - {0xb5c8, 2}, - {0xb5c9, 3}, - {0xb5ca, 4}, - {0xb5cb, 5}, - {0xb5cc, 1681}, - {0xb5cd, 1682}, - {0xb5cf, 1683}, - {0xb5d0, 1684}, - {0xb5d1, 1685}, - {0xb5d3, 0}, - {0xb5d4, 1}, - {0xb5d5, 2}, - {0xb5d6, 3}, - {0xb5d7, 4}, - {0xb5d8, 1686}, - {0xb5da, 0}, - {0xb5db, 1}, - {0xb5dc, 2}, - {0xb5dd, 3}, - {0xb5de, 4}, - {0xb5df, 5}, - {0xb5e0, 6}, - {0xb5e1, 7}, - {0xb5e2, 8}, - {0xb5e3, 9}, - {0xb5e4, 10}, - {0xb5e5, 11}, - {0xb5e6, 12}, - {0xb5e7, 13}, - {0xb5e8, 14}, - {0xb5e9, 15}, - {0xb5ea, 16}, - {0xb5eb, 17}, - {0xb5ec, 1687}, - {0xb5ee, 0}, - {0xb5ef, 1}, - {0xb5f0, 2}, - {0xb5f1, 3}, - {0xb5f2, 4}, - {0xb5f3, 5}, - {0xb5f4, 6}, - {0xb5f5, 7}, - {0xb5f6, 8}, - {0xb5f7, 9}, - {0xb5f8, 10}, - {0xb5f9, 11}, - {0xb5fa, 12}, - {0xb5fb, 13}, - {0xb5fc, 14}, - {0xb5fd, 15}, - {0xb5fe, 16}, - {0xb5ff, 17}, - {0xb601, 0}, - {0xb602, 1}, - {0xb603, 2}, - {0xb604, 3}, - {0xb605, 4}, - {0xb606, 5}, - {0xb607, 6}, - {0xb608, 7}, - {0xb609, 8}, - {0xb60a, 9}, - {0xb60b, 10}, - {0xb60c, 11}, - {0xb60d, 12}, - {0xb60e, 13}, - {0xb60f, 14}, - {0xb610, 1688}, - {0xb611, 1689}, - {0xb613, 0}, - {0xb614, 1690}, - {0xb616, 0}, - {0xb617, 1}, - {0xb618, 1691}, - {0xb61a, 0}, - {0xb61b, 1}, - {0xb61c, 2}, - {0xb61d, 3}, - {0xb61e, 4}, - {0xb61f, 5}, - {0xb620, 6}, - {0xb621, 7}, - {0xb622, 8}, - {0xb623, 9}, - {0xb624, 10}, - {0xb625, 1692}, - {0xb627, 0}, - {0xb628, 1}, - {0xb629, 2}, - {0xb62a, 3}, - {0xb62b, 4}, - {0xb62c, 1693}, - {0xb62e, 0}, - {0xb62f, 1}, - {0xb630, 2}, - {0xb631, 3}, - {0xb632, 4}, - {0xb633, 5}, - {0xb634, 1694}, - {0xb636, 0}, - {0xb637, 1}, - {0xb638, 2}, - {0xb639, 3}, - {0xb63a, 4}, - {0xb63b, 5}, - {0xb63c, 6}, - {0xb63d, 7}, - {0xb63e, 8}, - {0xb63f, 9}, - {0xb640, 10}, - {0xb641, 11}, - {0xb642, 12}, - {0xb643, 13}, - {0xb644, 14}, - {0xb645, 15}, - {0xb646, 16}, - {0xb647, 17}, - {0xb648, 1695}, - {0xb64a, 0}, - {0xb64b, 1}, - {0xb64c, 2}, - {0xb64d, 3}, - {0xb64e, 4}, - {0xb64f, 5}, - {0xb650, 6}, - {0xb651, 7}, - {0xb652, 8}, - {0xb653, 9}, - {0xb654, 10}, - {0xb655, 11}, - {0xb656, 12}, - {0xb657, 13}, - {0xb658, 14}, - {0xb659, 15}, - {0xb65a, 16}, - {0xb65b, 17}, - {0xb65c, 18}, - {0xb65d, 19}, - {0xb65e, 20}, - {0xb65f, 21}, - {0xb660, 22}, - {0xb661, 23}, - {0xb662, 24}, - {0xb663, 25}, - {0xb664, 1696}, - {0xb666, 0}, - {0xb667, 1}, - {0xb668, 1697}, - {0xb66a, 0}, - {0xb66b, 1}, - {0xb66c, 2}, - {0xb66d, 3}, - {0xb66e, 4}, - {0xb66f, 5}, - {0xb670, 6}, - {0xb671, 7}, - {0xb672, 8}, - {0xb673, 9}, - {0xb674, 10}, - {0xb675, 11}, - {0xb676, 12}, - {0xb677, 13}, - {0xb678, 14}, - {0xb679, 15}, - {0xb67a, 16}, - {0xb67b, 17}, - {0xb67c, 18}, - {0xb67d, 19}, - {0xb67e, 20}, - {0xb67f, 21}, - {0xb680, 22}, - {0xb681, 23}, - {0xb682, 24}, - {0xb683, 25}, - {0xb684, 26}, - {0xb685, 27}, - {0xb686, 28}, - {0xb687, 29}, - {0xb688, 30}, - {0xb689, 31}, - {0xb68a, 32}, - {0xb68b, 33}, - {0xb68c, 34}, - {0xb68d, 35}, - {0xb68e, 36}, - {0xb68f, 37}, - {0xb690, 38}, - {0xb691, 39}, - {0xb692, 40}, - {0xb693, 41}, - {0xb694, 42}, - {0xb695, 43}, - {0xb696, 44}, - {0xb697, 45}, - {0xb698, 46}, - {0xb699, 47}, - {0xb69a, 48}, - {0xb69b, 49}, - {0xb69c, 1698}, - {0xb69d, 1699}, - {0xb69f, 0}, - {0xb6a0, 1700}, - {0xb6a2, 0}, - {0xb6a3, 1}, - {0xb6a4, 1701}, - {0xb6a6, 0}, - {0xb6a7, 1}, - {0xb6a8, 2}, - {0xb6a9, 3}, - {0xb6aa, 4}, - {0xb6ab, 1702}, - {0xb6ac, 1703}, - {0xb6ae, 0}, - {0xb6af, 1}, - {0xb6b0, 2}, - {0xb6b1, 1704}, - {0xb6b3, 0}, - {0xb6b4, 1}, - {0xb6b5, 2}, - {0xb6b6, 3}, - {0xb6b7, 4}, - {0xb6b8, 5}, - {0xb6b9, 6}, - {0xb6ba, 7}, - {0xb6bb, 8}, - {0xb6bc, 9}, - {0xb6bd, 10}, - {0xb6be, 11}, - {0xb6bf, 12}, - {0xb6c0, 13}, - {0xb6c1, 14}, - {0xb6c2, 15}, - {0xb6c3, 16}, - {0xb6c4, 17}, - {0xb6c5, 18}, - {0xb6c6, 19}, - {0xb6c7, 20}, - {0xb6c8, 21}, - {0xb6c9, 22}, - {0xb6ca, 23}, - {0xb6cb, 24}, - {0xb6cc, 25}, - {0xb6cd, 26}, - {0xb6ce, 27}, - {0xb6cf, 28}, - {0xb6d0, 29}, - {0xb6d1, 30}, - {0xb6d2, 31}, - {0xb6d3, 32}, - {0xb6d4, 1705}, - {0xb6d6, 0}, - {0xb6d7, 1}, - {0xb6d8, 2}, - {0xb6d9, 3}, - {0xb6da, 4}, - {0xb6db, 5}, - {0xb6dc, 6}, - {0xb6dd, 7}, - {0xb6de, 8}, - {0xb6df, 9}, - {0xb6e0, 10}, - {0xb6e1, 11}, - {0xb6e2, 12}, - {0xb6e3, 13}, - {0xb6e4, 14}, - {0xb6e5, 15}, - {0xb6e6, 16}, - {0xb6e7, 17}, - {0xb6e8, 18}, - {0xb6e9, 19}, - {0xb6ea, 20}, - {0xb6eb, 21}, - {0xb6ec, 22}, - {0xb6ed, 23}, - {0xb6ee, 24}, - {0xb6ef, 25}, - {0xb6f0, 1706}, - {0xb6f2, 0}, - {0xb6f3, 1}, - {0xb6f4, 1707}, - {0xb6f6, 0}, - {0xb6f7, 1}, - {0xb6f8, 1708}, - {0xb6fa, 0}, - {0xb6fb, 1}, - {0xb6fc, 2}, - {0xb6fd, 3}, - {0xb6fe, 4}, - {0xb6ff, 5}, - {0xb700, 1709}, - {0xb701, 1710}, - {0xb703, 0}, - {0xb704, 1}, - {0xb705, 1711}, - {0xb707, 0}, - {0xb708, 1}, - {0xb709, 2}, - {0xb70a, 3}, - {0xb70b, 4}, - {0xb70c, 5}, - {0xb70d, 6}, - {0xb70e, 7}, - {0xb70f, 8}, - {0xb710, 9}, - {0xb711, 10}, - {0xb712, 11}, - {0xb713, 12}, - {0xb714, 13}, - {0xb715, 14}, - {0xb716, 15}, - {0xb717, 16}, - {0xb718, 17}, - {0xb719, 18}, - {0xb71a, 19}, - {0xb71b, 20}, - {0xb71c, 21}, - {0xb71d, 22}, - {0xb71e, 23}, - {0xb71f, 24}, - {0xb720, 25}, - {0xb721, 26}, - {0xb722, 27}, - {0xb723, 28}, - {0xb724, 29}, - {0xb725, 30}, - {0xb726, 31}, - {0xb727, 32}, - {0xb728, 1712}, - {0xb729, 1713}, - {0xb72b, 0}, - {0xb72c, 1714}, - {0xb72e, 0}, - {0xb72f, 1715}, - {0xb730, 1716}, - {0xb732, 0}, - {0xb733, 1}, - {0xb734, 2}, - {0xb735, 3}, - {0xb736, 4}, - {0xb737, 5}, - {0xb738, 1717}, - {0xb739, 1718}, - {0xb73b, 1719}, - {0xb73d, 0}, - {0xb73e, 1}, - {0xb73f, 2}, - {0xb740, 3}, - {0xb741, 4}, - {0xb742, 5}, - {0xb743, 6}, - {0xb744, 1720}, - {0xb746, 0}, - {0xb747, 1}, - {0xb748, 1721}, - {0xb74a, 0}, - {0xb74b, 1}, - {0xb74c, 1722}, - {0xb74e, 0}, - {0xb74f, 1}, - {0xb750, 2}, - {0xb751, 3}, - {0xb752, 4}, - {0xb753, 5}, - {0xb754, 1723}, - {0xb755, 1724}, - {0xb757, 0}, - {0xb758, 1}, - {0xb759, 2}, - {0xb75a, 3}, - {0xb75b, 4}, - {0xb75c, 5}, - {0xb75d, 6}, - {0xb75e, 7}, - {0xb75f, 8}, - {0xb760, 1725}, - {0xb762, 0}, - {0xb763, 1}, - {0xb764, 1726}, - {0xb766, 0}, - {0xb767, 1}, - {0xb768, 1727}, - {0xb76a, 0}, - {0xb76b, 1}, - {0xb76c, 2}, - {0xb76d, 3}, - {0xb76e, 4}, - {0xb76f, 5}, - {0xb770, 1728}, - {0xb771, 1729}, - {0xb773, 1730}, - {0xb775, 1731}, - {0xb777, 0}, - {0xb778, 1}, - {0xb779, 2}, - {0xb77a, 3}, - {0xb77b, 4}, - {0xb77c, 1732}, - {0xb77d, 1733}, - {0xb77f, 0}, - {0xb780, 1734}, - {0xb782, 0}, - {0xb783, 1}, - {0xb784, 1735}, - {0xb786, 0}, - {0xb787, 1}, - {0xb788, 2}, - {0xb789, 3}, - {0xb78a, 4}, - {0xb78b, 5}, - {0xb78c, 1736}, - {0xb78d, 1737}, - {0xb78f, 1738}, - {0xb790, 1739}, - {0xb791, 1740}, - {0xb792, 1741}, - {0xb794, 0}, - {0xb795, 1}, - {0xb796, 1742}, - {0xb797, 1743}, - {0xb798, 1744}, - {0xb799, 1745}, - {0xb79b, 0}, - {0xb79c, 1746}, - {0xb79e, 0}, - {0xb79f, 1}, - {0xb7a0, 1747}, - {0xb7a2, 0}, - {0xb7a3, 1}, - {0xb7a4, 2}, - {0xb7a5, 3}, - {0xb7a6, 4}, - {0xb7a7, 5}, - {0xb7a8, 1748}, - {0xb7a9, 1749}, - {0xb7ab, 1750}, - {0xb7ac, 1751}, - {0xb7ad, 1752}, - {0xb7af, 0}, - {0xb7b0, 1}, - {0xb7b1, 2}, - {0xb7b2, 3}, - {0xb7b3, 4}, - {0xb7b4, 1753}, - {0xb7b5, 1754}, - {0xb7b7, 0}, - {0xb7b8, 1755}, - {0xb7ba, 0}, - {0xb7bb, 1}, - {0xb7bc, 2}, - {0xb7bd, 3}, - {0xb7be, 4}, - {0xb7bf, 5}, - {0xb7c0, 6}, - {0xb7c1, 7}, - {0xb7c2, 8}, - {0xb7c3, 9}, - {0xb7c4, 10}, - {0xb7c5, 11}, - {0xb7c6, 12}, - {0xb7c7, 1756}, - {0xb7c9, 1757}, - {0xb7cb, 0}, - {0xb7cc, 1}, - {0xb7cd, 2}, - {0xb7ce, 3}, - {0xb7cf, 4}, - {0xb7d0, 5}, - {0xb7d1, 6}, - {0xb7d2, 7}, - {0xb7d3, 8}, - {0xb7d4, 9}, - {0xb7d5, 10}, - {0xb7d6, 11}, - {0xb7d7, 12}, - {0xb7d8, 13}, - {0xb7d9, 14}, - {0xb7da, 15}, - {0xb7db, 16}, - {0xb7dc, 17}, - {0xb7dd, 18}, - {0xb7de, 19}, - {0xb7df, 20}, - {0xb7e0, 21}, - {0xb7e1, 22}, - {0xb7e2, 23}, - {0xb7e3, 24}, - {0xb7e4, 25}, - {0xb7e5, 26}, - {0xb7e6, 27}, - {0xb7e7, 28}, - {0xb7e8, 29}, - {0xb7e9, 30}, - {0xb7ea, 31}, - {0xb7eb, 32}, - {0xb7ec, 1758}, - {0xb7ed, 1759}, - {0xb7ef, 0}, - {0xb7f0, 1760}, - {0xb7f2, 0}, - {0xb7f3, 1}, - {0xb7f4, 1761}, - {0xb7f6, 0}, - {0xb7f7, 1}, - {0xb7f8, 2}, - {0xb7f9, 3}, - {0xb7fa, 4}, - {0xb7fb, 5}, - {0xb7fc, 1762}, - {0xb7fd, 1763}, - {0xb7ff, 1764}, - {0xb800, 1765}, - {0xb801, 1766}, - {0xb803, 0}, - {0xb804, 1}, - {0xb805, 2}, - {0xb806, 3}, - {0xb807, 1767}, - {0xb808, 1768}, - {0xb809, 1769}, - {0xb80b, 0}, - {0xb80c, 1770}, - {0xb80e, 0}, - {0xb80f, 1}, - {0xb810, 1771}, - {0xb812, 0}, - {0xb813, 1}, - {0xb814, 2}, - {0xb815, 3}, - {0xb816, 4}, - {0xb817, 5}, - {0xb818, 1772}, - {0xb819, 1773}, - {0xb81b, 1774}, - {0xb81d, 1775}, - {0xb81f, 0}, - {0xb820, 1}, - {0xb821, 2}, - {0xb822, 3}, - {0xb823, 4}, - {0xb824, 1776}, - {0xb825, 1777}, - {0xb827, 0}, - {0xb828, 1778}, - {0xb82a, 0}, - {0xb82b, 1}, - {0xb82c, 1779}, - {0xb82e, 0}, - {0xb82f, 1}, - {0xb830, 2}, - {0xb831, 3}, - {0xb832, 4}, - {0xb833, 5}, - {0xb834, 1780}, - {0xb835, 1781}, - {0xb837, 1782}, - {0xb838, 1783}, - {0xb839, 1784}, - {0xb83b, 0}, - {0xb83c, 1}, - {0xb83d, 2}, - {0xb83e, 3}, - {0xb83f, 4}, - {0xb840, 1785}, - {0xb842, 0}, - {0xb843, 1}, - {0xb844, 1786}, - {0xb846, 0}, - {0xb847, 1}, - {0xb848, 2}, - {0xb849, 3}, - {0xb84a, 4}, - {0xb84b, 5}, - {0xb84c, 6}, - {0xb84d, 7}, - {0xb84e, 8}, - {0xb84f, 9}, - {0xb850, 10}, - {0xb851, 1787}, - {0xb853, 1788}, - {0xb855, 0}, - {0xb856, 1}, - {0xb857, 2}, - {0xb858, 3}, - {0xb859, 4}, - {0xb85a, 5}, - {0xb85b, 6}, - {0xb85c, 1789}, - {0xb85d, 1790}, - {0xb85f, 0}, - {0xb860, 1791}, - {0xb862, 0}, - {0xb863, 1}, - {0xb864, 1792}, - {0xb866, 0}, - {0xb867, 1}, - {0xb868, 2}, - {0xb869, 3}, - {0xb86a, 4}, - {0xb86b, 5}, - {0xb86c, 1793}, - {0xb86d, 1794}, - {0xb86f, 1795}, - {0xb871, 1796}, - {0xb873, 0}, - {0xb874, 1}, - {0xb875, 2}, - {0xb876, 3}, - {0xb877, 4}, - {0xb878, 1797}, - {0xb87a, 0}, - {0xb87b, 1}, - {0xb87c, 1798}, - {0xb87e, 0}, - {0xb87f, 1}, - {0xb880, 2}, - {0xb881, 3}, - {0xb882, 4}, - {0xb883, 5}, - {0xb884, 6}, - {0xb885, 7}, - {0xb886, 8}, - {0xb887, 9}, - {0xb888, 10}, - {0xb889, 11}, - {0xb88a, 12}, - {0xb88b, 13}, - {0xb88c, 14}, - {0xb88d, 1799}, - {0xb88f, 0}, - {0xb890, 1}, - {0xb891, 2}, - {0xb892, 3}, - {0xb893, 4}, - {0xb894, 5}, - {0xb895, 6}, - {0xb896, 7}, - {0xb897, 8}, - {0xb898, 9}, - {0xb899, 10}, - {0xb89a, 11}, - {0xb89b, 12}, - {0xb89c, 13}, - {0xb89d, 14}, - {0xb89e, 15}, - {0xb89f, 16}, - {0xb8a0, 17}, - {0xb8a1, 18}, - {0xb8a2, 19}, - {0xb8a3, 20}, - {0xb8a4, 21}, - {0xb8a5, 22}, - {0xb8a6, 23}, - {0xb8a7, 24}, - {0xb8a8, 1800}, - {0xb8aa, 0}, - {0xb8ab, 1}, - {0xb8ac, 2}, - {0xb8ad, 3}, - {0xb8ae, 4}, - {0xb8af, 5}, - {0xb8b0, 1801}, - {0xb8b2, 0}, - {0xb8b3, 1}, - {0xb8b4, 1802}, - {0xb8b6, 0}, - {0xb8b7, 1}, - {0xb8b8, 1803}, - {0xb8ba, 0}, - {0xb8bb, 1}, - {0xb8bc, 2}, - {0xb8bd, 3}, - {0xb8be, 4}, - {0xb8bf, 5}, - {0xb8c0, 1804}, - {0xb8c1, 1805}, - {0xb8c3, 1806}, - {0xb8c5, 1807}, - {0xb8c7, 0}, - {0xb8c8, 1}, - {0xb8c9, 2}, - {0xb8ca, 3}, - {0xb8cb, 4}, - {0xb8cc, 1808}, - {0xb8ce, 0}, - {0xb8cf, 1}, - {0xb8d0, 1809}, - {0xb8d2, 0}, - {0xb8d3, 1}, - {0xb8d4, 1810}, - {0xb8d6, 0}, - {0xb8d7, 1}, - {0xb8d8, 2}, - {0xb8d9, 3}, - {0xb8da, 4}, - {0xb8db, 5}, - {0xb8dc, 6}, - {0xb8dd, 1811}, - {0xb8df, 1812}, - {0xb8e1, 1813}, - {0xb8e3, 0}, - {0xb8e4, 1}, - {0xb8e5, 2}, - {0xb8e6, 3}, - {0xb8e7, 4}, - {0xb8e8, 1814}, - {0xb8e9, 1815}, - {0xb8eb, 0}, - {0xb8ec, 1816}, - {0xb8ee, 0}, - {0xb8ef, 1}, - {0xb8f0, 1817}, - {0xb8f2, 0}, - {0xb8f3, 1}, - {0xb8f4, 2}, - {0xb8f5, 3}, - {0xb8f6, 4}, - {0xb8f7, 5}, - {0xb8f8, 1818}, - {0xb8f9, 1819}, - {0xb8fb, 1820}, - {0xb8fd, 1821}, - {0xb8ff, 0}, - {0xb901, 0}, - {0xb902, 1}, - {0xb903, 2}, - {0xb904, 1822}, - {0xb906, 0}, - {0xb907, 1}, - {0xb908, 2}, - {0xb909, 3}, - {0xb90a, 4}, - {0xb90b, 5}, - {0xb90c, 6}, - {0xb90d, 7}, - {0xb90e, 8}, - {0xb90f, 9}, - {0xb910, 10}, - {0xb911, 11}, - {0xb912, 12}, - {0xb913, 13}, - {0xb914, 14}, - {0xb915, 15}, - {0xb916, 16}, - {0xb917, 17}, - {0xb918, 1823}, - {0xb91a, 0}, - {0xb91b, 1}, - {0xb91c, 2}, - {0xb91d, 3}, - {0xb91e, 4}, - {0xb91f, 5}, - {0xb920, 1824}, - {0xb922, 0}, - {0xb923, 1}, - {0xb924, 2}, - {0xb925, 3}, - {0xb926, 4}, - {0xb927, 5}, - {0xb928, 6}, - {0xb929, 7}, - {0xb92a, 8}, - {0xb92b, 9}, - {0xb92c, 10}, - {0xb92d, 11}, - {0xb92e, 12}, - {0xb92f, 13}, - {0xb930, 14}, - {0xb931, 15}, - {0xb932, 16}, - {0xb933, 17}, - {0xb934, 18}, - {0xb935, 19}, - {0xb936, 20}, - {0xb937, 21}, - {0xb938, 22}, - {0xb939, 23}, - {0xb93a, 24}, - {0xb93b, 25}, - {0xb93c, 1825}, - {0xb93d, 1826}, - {0xb93f, 0}, - {0xb940, 1827}, - {0xb942, 0}, - {0xb943, 1}, - {0xb944, 1828}, - {0xb946, 0}, - {0xb947, 1}, - {0xb948, 2}, - {0xb949, 3}, - {0xb94a, 4}, - {0xb94b, 5}, - {0xb94c, 1829}, - {0xb94e, 0}, - {0xb94f, 1830}, - {0xb951, 1831}, - {0xb953, 0}, - {0xb954, 1}, - {0xb955, 2}, - {0xb956, 3}, - {0xb957, 4}, - {0xb958, 1832}, - {0xb959, 1833}, - {0xb95b, 0}, - {0xb95c, 1834}, - {0xb95e, 0}, - {0xb95f, 1}, - {0xb960, 1835}, - {0xb962, 0}, - {0xb963, 1}, - {0xb964, 2}, - {0xb965, 3}, - {0xb966, 4}, - {0xb967, 5}, - {0xb968, 1836}, - {0xb969, 1837}, - {0xb96b, 1838}, - {0xb96d, 1839}, - {0xb96f, 0}, - {0xb970, 1}, - {0xb971, 2}, - {0xb972, 3}, - {0xb973, 4}, - {0xb974, 1840}, - {0xb975, 1841}, - {0xb977, 0}, - {0xb978, 1842}, - {0xb97a, 0}, - {0xb97b, 1}, - {0xb97c, 1843}, - {0xb97e, 0}, - {0xb97f, 1}, - {0xb980, 2}, - {0xb981, 3}, - {0xb982, 4}, - {0xb983, 5}, - {0xb984, 1844}, - {0xb985, 1845}, - {0xb987, 1846}, - {0xb989, 1847}, - {0xb98a, 1848}, - {0xb98c, 0}, - {0xb98d, 1849}, - {0xb98e, 1850}, - {0xb990, 0}, - {0xb991, 1}, - {0xb992, 2}, - {0xb993, 3}, - {0xb994, 4}, - {0xb995, 5}, - {0xb996, 6}, - {0xb997, 7}, - {0xb998, 8}, - {0xb999, 9}, - {0xb99a, 10}, - {0xb99b, 11}, - {0xb99c, 12}, - {0xb99d, 13}, - {0xb99e, 14}, - {0xb99f, 15}, - {0xb9a0, 16}, - {0xb9a1, 17}, - {0xb9a2, 18}, - {0xb9a3, 19}, - {0xb9a4, 20}, - {0xb9a5, 21}, - {0xb9a6, 22}, - {0xb9a7, 23}, - {0xb9a8, 24}, - {0xb9a9, 25}, - {0xb9aa, 26}, - {0xb9ab, 27}, - {0xb9ac, 1851}, - {0xb9ad, 1852}, - {0xb9af, 0}, - {0xb9b0, 1853}, - {0xb9b2, 0}, - {0xb9b3, 1}, - {0xb9b4, 1854}, - {0xb9b6, 0}, - {0xb9b7, 1}, - {0xb9b8, 2}, - {0xb9b9, 3}, - {0xb9ba, 4}, - {0xb9bb, 5}, - {0xb9bc, 1855}, - {0xb9bd, 1856}, - {0xb9bf, 1857}, - {0xb9c1, 1858}, - {0xb9c3, 0}, - {0xb9c4, 1}, - {0xb9c5, 2}, - {0xb9c6, 3}, - {0xb9c7, 4}, - {0xb9c8, 1859}, - {0xb9c9, 1860}, - {0xb9cb, 0}, - {0xb9cc, 1861}, - {0xb9ce, 1862}, - {0xb9cf, 1863}, - {0xb9d0, 1864}, - {0xb9d1, 1865}, - {0xb9d2, 1866}, - {0xb9d4, 0}, - {0xb9d5, 1}, - {0xb9d6, 2}, - {0xb9d7, 3}, - {0xb9d8, 1867}, - {0xb9d9, 1868}, - {0xb9db, 1869}, - {0xb9dd, 1870}, - {0xb9de, 1871}, - {0xb9e0, 0}, - {0xb9e1, 1872}, - {0xb9e3, 1873}, - {0xb9e4, 1874}, - {0xb9e5, 1875}, - {0xb9e7, 0}, - {0xb9e8, 1876}, - {0xb9ea, 0}, - {0xb9eb, 1}, - {0xb9ec, 1877}, - {0xb9ee, 0}, - {0xb9ef, 1}, - {0xb9f0, 2}, - {0xb9f1, 3}, - {0xb9f2, 4}, - {0xb9f3, 5}, - {0xb9f4, 1878}, - {0xb9f5, 1879}, - {0xb9f7, 1880}, - {0xb9f8, 1881}, - {0xb9f9, 1882}, - {0xb9fa, 1883}, - {0xb9fc, 0}, - {0xb9fd, 1}, - {0xb9fe, 2}, - {0xb9ff, 3}, - {0xba00, 1884}, - {0xba01, 1885}, - {0xba03, 0}, - {0xba04, 1}, - {0xba05, 2}, - {0xba06, 3}, - {0xba07, 4}, - {0xba08, 1886}, - {0xba0a, 0}, - {0xba0b, 1}, - {0xba0c, 2}, - {0xba0d, 3}, - {0xba0e, 4}, - {0xba0f, 5}, - {0xba10, 6}, - {0xba11, 7}, - {0xba12, 8}, - {0xba13, 9}, - {0xba14, 10}, - {0xba15, 1887}, - {0xba17, 0}, - {0xba18, 1}, - {0xba19, 2}, - {0xba1a, 3}, - {0xba1b, 4}, - {0xba1c, 5}, - {0xba1d, 6}, - {0xba1e, 7}, - {0xba1f, 8}, - {0xba20, 9}, - {0xba21, 10}, - {0xba22, 11}, - {0xba23, 12}, - {0xba24, 13}, - {0xba25, 14}, - {0xba26, 15}, - {0xba27, 16}, - {0xba28, 17}, - {0xba29, 18}, - {0xba2a, 19}, - {0xba2b, 20}, - {0xba2c, 21}, - {0xba2d, 22}, - {0xba2e, 23}, - {0xba2f, 24}, - {0xba30, 25}, - {0xba31, 26}, - {0xba32, 27}, - {0xba33, 28}, - {0xba34, 29}, - {0xba35, 30}, - {0xba36, 31}, - {0xba37, 32}, - {0xba38, 1888}, - {0xba39, 1889}, - {0xba3b, 0}, - {0xba3c, 1890}, - {0xba3e, 0}, - {0xba3f, 1}, - {0xba40, 1891}, - {0xba42, 1892}, - {0xba44, 0}, - {0xba45, 1}, - {0xba46, 2}, - {0xba47, 3}, - {0xba48, 1893}, - {0xba49, 1894}, - {0xba4b, 1895}, - {0xba4d, 1896}, - {0xba4e, 1897}, - {0xba50, 0}, - {0xba51, 1}, - {0xba52, 2}, - {0xba53, 1898}, - {0xba54, 1899}, - {0xba55, 1900}, - {0xba57, 0}, - {0xba58, 1901}, - {0xba5a, 0}, - {0xba5b, 1}, - {0xba5c, 1902}, - {0xba5e, 0}, - {0xba5f, 1}, - {0xba60, 2}, - {0xba61, 3}, - {0xba62, 4}, - {0xba63, 5}, - {0xba64, 1903}, - {0xba65, 1904}, - {0xba67, 1905}, - {0xba68, 1906}, - {0xba69, 1907}, - {0xba6b, 0}, - {0xba6c, 1}, - {0xba6d, 2}, - {0xba6e, 3}, - {0xba6f, 4}, - {0xba70, 1908}, - {0xba71, 1909}, - {0xba73, 0}, - {0xba74, 1910}, - {0xba76, 0}, - {0xba77, 1}, - {0xba78, 1911}, - {0xba7a, 0}, - {0xba7b, 1}, - {0xba7c, 2}, - {0xba7d, 3}, - {0xba7e, 4}, - {0xba7f, 5}, - {0xba80, 6}, - {0xba81, 7}, - {0xba82, 8}, - {0xba83, 1912}, - {0xba84, 1913}, - {0xba85, 1914}, - {0xba87, 1915}, - {0xba89, 0}, - {0xba8a, 1}, - {0xba8b, 2}, - {0xba8c, 1916}, - {0xba8e, 0}, - {0xba8f, 1}, - {0xba90, 2}, - {0xba91, 3}, - {0xba92, 4}, - {0xba93, 5}, - {0xba94, 6}, - {0xba95, 7}, - {0xba96, 8}, - {0xba97, 9}, - {0xba98, 10}, - {0xba99, 11}, - {0xba9a, 12}, - {0xba9b, 13}, - {0xba9c, 14}, - {0xba9d, 15}, - {0xba9e, 16}, - {0xba9f, 17}, - {0xbaa0, 18}, - {0xbaa1, 19}, - {0xbaa2, 20}, - {0xbaa3, 21}, - {0xbaa4, 22}, - {0xbaa5, 23}, - {0xbaa6, 24}, - {0xbaa7, 25}, - {0xbaa8, 1917}, - {0xbaa9, 1918}, - {0xbaab, 1919}, - {0xbaac, 1920}, - {0xbaae, 0}, - {0xbaaf, 1}, - {0xbab0, 1921}, - {0xbab2, 1922}, - {0xbab4, 0}, - {0xbab5, 1}, - {0xbab6, 2}, - {0xbab7, 3}, - {0xbab8, 1923}, - {0xbab9, 1924}, - {0xbabb, 1925}, - {0xbabd, 1926}, - {0xbabf, 0}, - {0xbac0, 1}, - {0xbac1, 2}, - {0xbac2, 3}, - {0xbac3, 4}, - {0xbac4, 1927}, - {0xbac6, 0}, - {0xbac7, 1}, - {0xbac8, 1928}, - {0xbaca, 0}, - {0xbacb, 1}, - {0xbacc, 2}, - {0xbacd, 3}, - {0xbace, 4}, - {0xbacf, 5}, - {0xbad0, 6}, - {0xbad1, 7}, - {0xbad2, 8}, - {0xbad3, 9}, - {0xbad4, 10}, - {0xbad5, 11}, - {0xbad6, 12}, - {0xbad7, 13}, - {0xbad8, 1929}, - {0xbad9, 1930}, - {0xbadb, 0}, - {0xbadc, 1}, - {0xbadd, 2}, - {0xbade, 3}, - {0xbadf, 4}, - {0xbae0, 5}, - {0xbae1, 6}, - {0xbae2, 7}, - {0xbae3, 8}, - {0xbae4, 9}, - {0xbae5, 10}, - {0xbae6, 11}, - {0xbae7, 12}, - {0xbae8, 13}, - {0xbae9, 14}, - {0xbaea, 15}, - {0xbaeb, 16}, - {0xbaec, 17}, - {0xbaed, 18}, - {0xbaee, 19}, - {0xbaef, 20}, - {0xbaf0, 21}, - {0xbaf1, 22}, - {0xbaf2, 23}, - {0xbaf3, 24}, - {0xbaf4, 25}, - {0xbaf5, 26}, - {0xbaf6, 27}, - {0xbaf7, 28}, - {0xbaf8, 29}, - {0xbaf9, 30}, - {0xbafa, 31}, - {0xbafb, 32}, - {0xbafc, 1931}, - {0xbafe, 0}, - {0xbaff, 1}, - {0xbb00, 1932}, - {0xbb02, 0}, - {0xbb03, 1}, - {0xbb04, 1933}, - {0xbb06, 0}, - {0xbb07, 1}, - {0xbb08, 2}, - {0xbb09, 3}, - {0xbb0a, 4}, - {0xbb0b, 5}, - {0xbb0c, 6}, - {0xbb0d, 1934}, - {0xbb0f, 1935}, - {0xbb11, 1936}, - {0xbb13, 0}, - {0xbb14, 1}, - {0xbb15, 2}, - {0xbb16, 3}, - {0xbb17, 4}, - {0xbb18, 1937}, - {0xbb1a, 0}, - {0xbb1b, 1}, - {0xbb1c, 1938}, - {0xbb1e, 0}, - {0xbb1f, 1}, - {0xbb20, 1939}, - {0xbb22, 0}, - {0xbb23, 1}, - {0xbb24, 2}, - {0xbb25, 3}, - {0xbb26, 4}, - {0xbb27, 5}, - {0xbb28, 6}, - {0xbb29, 1940}, - {0xbb2b, 1941}, - {0xbb2d, 0}, - {0xbb2e, 1}, - {0xbb2f, 2}, - {0xbb30, 3}, - {0xbb31, 4}, - {0xbb32, 5}, - {0xbb33, 6}, - {0xbb34, 1942}, - {0xbb35, 1943}, - {0xbb36, 1944}, - {0xbb38, 1945}, - {0xbb3a, 0}, - {0xbb3b, 1946}, - {0xbb3c, 1947}, - {0xbb3d, 1948}, - {0xbb3e, 1949}, - {0xbb40, 0}, - {0xbb41, 1}, - {0xbb42, 2}, - {0xbb43, 3}, - {0xbb44, 1950}, - {0xbb45, 1951}, - {0xbb47, 1952}, - {0xbb49, 1953}, - {0xbb4b, 0}, - {0xbb4c, 1}, - {0xbb4d, 1954}, - {0xbb4f, 1955}, - {0xbb50, 1956}, - {0xbb52, 0}, - {0xbb53, 1}, - {0xbb54, 1957}, - {0xbb56, 0}, - {0xbb57, 1}, - {0xbb58, 1958}, - {0xbb5a, 0}, - {0xbb5b, 1}, - {0xbb5c, 2}, - {0xbb5d, 3}, - {0xbb5e, 4}, - {0xbb5f, 5}, - {0xbb60, 6}, - {0xbb61, 1959}, - {0xbb63, 1960}, - {0xbb65, 0}, - {0xbb66, 1}, - {0xbb67, 2}, - {0xbb68, 3}, - {0xbb69, 4}, - {0xbb6a, 5}, - {0xbb6b, 6}, - {0xbb6c, 1961}, - {0xbb6e, 0}, - {0xbb6f, 1}, - {0xbb70, 2}, - {0xbb71, 3}, - {0xbb72, 4}, - {0xbb73, 5}, - {0xbb74, 6}, - {0xbb75, 7}, - {0xbb76, 8}, - {0xbb77, 9}, - {0xbb78, 10}, - {0xbb79, 11}, - {0xbb7a, 12}, - {0xbb7b, 13}, - {0xbb7c, 14}, - {0xbb7d, 15}, - {0xbb7e, 16}, - {0xbb7f, 17}, - {0xbb80, 18}, - {0xbb81, 19}, - {0xbb82, 20}, - {0xbb83, 21}, - {0xbb84, 22}, - {0xbb85, 23}, - {0xbb86, 24}, - {0xbb87, 25}, - {0xbb88, 1962}, - {0xbb8a, 0}, - {0xbb8b, 1}, - {0xbb8c, 1963}, - {0xbb8e, 0}, - {0xbb8f, 1}, - {0xbb90, 1964}, - {0xbb92, 0}, - {0xbb93, 1}, - {0xbb94, 2}, - {0xbb95, 3}, - {0xbb96, 4}, - {0xbb97, 5}, - {0xbb98, 6}, - {0xbb99, 7}, - {0xbb9a, 8}, - {0xbb9b, 9}, - {0xbb9c, 10}, - {0xbb9d, 11}, - {0xbb9e, 12}, - {0xbb9f, 13}, - {0xbba0, 14}, - {0xbba1, 15}, - {0xbba2, 16}, - {0xbba3, 17}, - {0xbba4, 1965}, - {0xbba6, 0}, - {0xbba7, 1}, - {0xbba8, 1966}, - {0xbbaa, 0}, - {0xbbab, 1}, - {0xbbac, 1967}, - {0xbbae, 0}, - {0xbbaf, 1}, - {0xbbb0, 2}, - {0xbbb1, 3}, - {0xbbb2, 4}, - {0xbbb3, 5}, - {0xbbb4, 1968}, - {0xbbb6, 0}, - {0xbbb7, 1969}, - {0xbbb9, 0}, - {0xbbba, 1}, - {0xbbbb, 2}, - {0xbbbc, 3}, - {0xbbbd, 4}, - {0xbbbe, 5}, - {0xbbbf, 6}, - {0xbbc0, 1970}, - {0xbbc2, 0}, - {0xbbc3, 1}, - {0xbbc4, 1971}, - {0xbbc6, 0}, - {0xbbc7, 1}, - {0xbbc8, 1972}, - {0xbbca, 0}, - {0xbbcb, 1}, - {0xbbcc, 2}, - {0xbbcd, 3}, - {0xbbce, 4}, - {0xbbcf, 5}, - {0xbbd0, 1973}, - {0xbbd2, 0}, - {0xbbd3, 1974}, - {0xbbd5, 0}, - {0xbbd6, 1}, - {0xbbd7, 2}, - {0xbbd8, 3}, - {0xbbd9, 4}, - {0xbbda, 5}, - {0xbbdb, 6}, - {0xbbdc, 7}, - {0xbbdd, 8}, - {0xbbde, 9}, - {0xbbdf, 10}, - {0xbbe0, 11}, - {0xbbe1, 12}, - {0xbbe2, 13}, - {0xbbe3, 14}, - {0xbbe4, 15}, - {0xbbe5, 16}, - {0xbbe6, 17}, - {0xbbe7, 18}, - {0xbbe8, 19}, - {0xbbe9, 20}, - {0xbbea, 21}, - {0xbbeb, 22}, - {0xbbec, 23}, - {0xbbed, 24}, - {0xbbee, 25}, - {0xbbef, 26}, - {0xbbf0, 27}, - {0xbbf1, 28}, - {0xbbf2, 29}, - {0xbbf3, 30}, - {0xbbf4, 31}, - {0xbbf5, 32}, - {0xbbf6, 33}, - {0xbbf7, 34}, - {0xbbf8, 1975}, - {0xbbf9, 1976}, - {0xbbfb, 0}, - {0xbbfc, 1977}, - {0xbbfe, 0}, - {0xbbff, 1978}, - {0xbc00, 1979}, - {0xbc02, 1980}, - {0xbc04, 0}, - {0xbc05, 1}, - {0xbc06, 2}, - {0xbc07, 3}, - {0xbc08, 1981}, - {0xbc09, 1982}, - {0xbc0b, 1983}, - {0xbc0c, 1984}, - {0xbc0d, 1985}, - {0xbc0f, 1986}, - {0xbc11, 1987}, - {0xbc13, 0}, - {0xbc14, 1988}, - {0xbc15, 1989}, - {0xbc16, 1990}, - {0xbc17, 1991}, - {0xbc18, 1992}, - {0xbc1a, 0}, - {0xbc1b, 1993}, - {0xbc1c, 1994}, - {0xbc1d, 1995}, - {0xbc1e, 1996}, - {0xbc1f, 1997}, - {0xbc21, 0}, - {0xbc22, 1}, - {0xbc23, 2}, - {0xbc24, 1998}, - {0xbc25, 1999}, - {0xbc27, 2000}, - {0xbc29, 2001}, - {0xbc2b, 0}, - {0xbc2c, 1}, - {0xbc2d, 2002}, - {0xbc2f, 0}, - {0xbc30, 2003}, - {0xbc31, 2004}, - {0xbc33, 0}, - {0xbc34, 2005}, - {0xbc36, 0}, - {0xbc37, 1}, - {0xbc38, 2006}, - {0xbc3a, 0}, - {0xbc3b, 1}, - {0xbc3c, 2}, - {0xbc3d, 3}, - {0xbc3e, 4}, - {0xbc3f, 5}, - {0xbc40, 2007}, - {0xbc41, 2008}, - {0xbc43, 2009}, - {0xbc44, 2010}, - {0xbc45, 2011}, - {0xbc47, 0}, - {0xbc48, 1}, - {0xbc49, 2012}, - {0xbc4b, 0}, - {0xbc4c, 2013}, - {0xbc4d, 2014}, - {0xbc4f, 0}, - {0xbc50, 2015}, - {0xbc52, 0}, - {0xbc53, 1}, - {0xbc54, 2}, - {0xbc55, 3}, - {0xbc56, 4}, - {0xbc57, 5}, - {0xbc58, 6}, - {0xbc59, 7}, - {0xbc5a, 8}, - {0xbc5b, 9}, - {0xbc5c, 10}, - {0xbc5d, 2016}, - {0xbc5f, 0}, - {0xbc60, 1}, - {0xbc61, 2}, - {0xbc62, 3}, - {0xbc63, 4}, - {0xbc64, 5}, - {0xbc65, 6}, - {0xbc66, 7}, - {0xbc67, 8}, - {0xbc68, 9}, - {0xbc69, 10}, - {0xbc6a, 11}, - {0xbc6b, 12}, - {0xbc6c, 13}, - {0xbc6d, 14}, - {0xbc6e, 15}, - {0xbc6f, 16}, - {0xbc70, 17}, - {0xbc71, 18}, - {0xbc72, 19}, - {0xbc73, 20}, - {0xbc74, 21}, - {0xbc75, 22}, - {0xbc76, 23}, - {0xbc77, 24}, - {0xbc78, 25}, - {0xbc79, 26}, - {0xbc7a, 27}, - {0xbc7b, 28}, - {0xbc7c, 29}, - {0xbc7d, 30}, - {0xbc7e, 31}, - {0xbc7f, 32}, - {0xbc80, 33}, - {0xbc81, 34}, - {0xbc82, 35}, - {0xbc83, 36}, - {0xbc84, 2017}, - {0xbc85, 2018}, - {0xbc87, 0}, - {0xbc88, 2019}, - {0xbc8a, 0}, - {0xbc8b, 2020}, - {0xbc8c, 2021}, - {0xbc8e, 2022}, - {0xbc90, 0}, - {0xbc91, 1}, - {0xbc92, 2}, - {0xbc93, 3}, - {0xbc94, 2023}, - {0xbc95, 2024}, - {0xbc97, 2025}, - {0xbc99, 2026}, - {0xbc9a, 2027}, - {0xbc9c, 0}, - {0xbc9d, 1}, - {0xbc9e, 2}, - {0xbc9f, 3}, - {0xbca0, 2028}, - {0xbca1, 2029}, - {0xbca3, 0}, - {0xbca4, 2030}, - {0xbca6, 0}, - {0xbca7, 2031}, - {0xbca8, 2032}, - {0xbcaa, 0}, - {0xbcab, 1}, - {0xbcac, 2}, - {0xbcad, 3}, - {0xbcae, 4}, - {0xbcaf, 5}, - {0xbcb0, 2033}, - {0xbcb1, 2034}, - {0xbcb3, 2035}, - {0xbcb4, 2036}, - {0xbcb5, 2037}, - {0xbcb7, 0}, - {0xbcb8, 1}, - {0xbcb9, 2}, - {0xbcba, 3}, - {0xbcbb, 4}, - {0xbcbc, 2038}, - {0xbcbd, 2039}, - {0xbcbf, 0}, - {0xbcc0, 2040}, - {0xbcc2, 0}, - {0xbcc3, 1}, - {0xbcc4, 2041}, - {0xbcc6, 0}, - {0xbcc7, 1}, - {0xbcc8, 2}, - {0xbcc9, 3}, - {0xbcca, 4}, - {0xbccb, 5}, - {0xbccc, 6}, - {0xbccd, 2042}, - {0xbccf, 2043}, - {0xbcd0, 2044}, - {0xbcd1, 2045}, - {0xbcd3, 0}, - {0xbcd4, 1}, - {0xbcd5, 2046}, - {0xbcd7, 0}, - {0xbcd8, 2047}, - {0xbcda, 0}, - {0xbcdb, 1}, - {0xbcdc, 2048}, - {0xbcde, 0}, - {0xbcdf, 1}, - {0xbce0, 2}, - {0xbce1, 3}, - {0xbce2, 4}, - {0xbce3, 5}, - {0xbce4, 6}, - {0xbce5, 7}, - {0xbce6, 8}, - {0xbce7, 9}, - {0xbce8, 10}, - {0xbce9, 11}, - {0xbcea, 12}, - {0xbceb, 13}, - {0xbcec, 14}, - {0xbced, 15}, - {0xbcee, 16}, - {0xbcef, 17}, - {0xbcf0, 18}, - {0xbcf1, 19}, - {0xbcf2, 20}, - {0xbcf3, 21}, - {0xbcf4, 2049}, - {0xbcf5, 2050}, - {0xbcf6, 2051}, - {0xbcf8, 2052}, - {0xbcfa, 0}, - {0xbcfb, 1}, - {0xbcfc, 2053}, - {0xbcfe, 0}, - {0xbcff, 1}, - {0xbd01, 0}, - {0xbd02, 1}, - {0xbd03, 2}, - {0xbd04, 2054}, - {0xbd05, 2055}, - {0xbd07, 2056}, - {0xbd09, 2057}, - {0xbd0b, 0}, - {0xbd0c, 1}, - {0xbd0d, 2}, - {0xbd0e, 3}, - {0xbd0f, 4}, - {0xbd10, 2058}, - {0xbd12, 0}, - {0xbd13, 1}, - {0xbd14, 2059}, - {0xbd16, 0}, - {0xbd17, 1}, - {0xbd18, 2}, - {0xbd19, 3}, - {0xbd1a, 4}, - {0xbd1b, 5}, - {0xbd1c, 6}, - {0xbd1d, 7}, - {0xbd1e, 8}, - {0xbd1f, 9}, - {0xbd20, 10}, - {0xbd21, 11}, - {0xbd22, 12}, - {0xbd23, 13}, - {0xbd24, 2060}, - {0xbd26, 0}, - {0xbd27, 1}, - {0xbd28, 2}, - {0xbd29, 3}, - {0xbd2a, 4}, - {0xbd2b, 5}, - {0xbd2c, 2061}, - {0xbd2e, 0}, - {0xbd2f, 1}, - {0xbd30, 2}, - {0xbd31, 3}, - {0xbd32, 4}, - {0xbd33, 5}, - {0xbd34, 6}, - {0xbd35, 7}, - {0xbd36, 8}, - {0xbd37, 9}, - {0xbd38, 10}, - {0xbd39, 11}, - {0xbd3a, 12}, - {0xbd3b, 13}, - {0xbd3c, 14}, - {0xbd3d, 15}, - {0xbd3e, 16}, - {0xbd3f, 17}, - {0xbd40, 2062}, - {0xbd42, 0}, - {0xbd43, 1}, - {0xbd44, 2}, - {0xbd45, 3}, - {0xbd46, 4}, - {0xbd47, 5}, - {0xbd48, 2063}, - {0xbd49, 2064}, - {0xbd4b, 0}, - {0xbd4c, 2065}, - {0xbd4e, 0}, - {0xbd4f, 1}, - {0xbd50, 2066}, - {0xbd52, 0}, - {0xbd53, 1}, - {0xbd54, 2}, - {0xbd55, 3}, - {0xbd56, 4}, - {0xbd57, 5}, - {0xbd58, 2067}, - {0xbd59, 2068}, - {0xbd5b, 0}, - {0xbd5c, 1}, - {0xbd5d, 2}, - {0xbd5e, 3}, - {0xbd5f, 4}, - {0xbd60, 5}, - {0xbd61, 6}, - {0xbd62, 7}, - {0xbd63, 8}, - {0xbd64, 2069}, - {0xbd66, 0}, - {0xbd67, 1}, - {0xbd68, 2070}, - {0xbd6a, 0}, - {0xbd6b, 1}, - {0xbd6c, 2}, - {0xbd6d, 3}, - {0xbd6e, 4}, - {0xbd6f, 5}, - {0xbd70, 6}, - {0xbd71, 7}, - {0xbd72, 8}, - {0xbd73, 9}, - {0xbd74, 10}, - {0xbd75, 11}, - {0xbd76, 12}, - {0xbd77, 13}, - {0xbd78, 14}, - {0xbd79, 15}, - {0xbd7a, 16}, - {0xbd7b, 17}, - {0xbd7c, 18}, - {0xbd7d, 19}, - {0xbd7e, 20}, - {0xbd7f, 21}, - {0xbd80, 2071}, - {0xbd81, 2072}, - {0xbd83, 0}, - {0xbd84, 2073}, - {0xbd86, 0}, - {0xbd87, 2074}, - {0xbd88, 2075}, - {0xbd89, 2076}, - {0xbd8a, 2077}, - {0xbd8c, 0}, - {0xbd8d, 1}, - {0xbd8e, 2}, - {0xbd8f, 3}, - {0xbd90, 2078}, - {0xbd91, 2079}, - {0xbd93, 2080}, - {0xbd95, 2081}, - {0xbd97, 0}, - {0xbd98, 1}, - {0xbd99, 2082}, - {0xbd9a, 2083}, - {0xbd9c, 2084}, - {0xbd9e, 0}, - {0xbd9f, 1}, - {0xbda0, 2}, - {0xbda1, 3}, - {0xbda2, 4}, - {0xbda3, 5}, - {0xbda4, 2085}, - {0xbda6, 0}, - {0xbda7, 1}, - {0xbda8, 2}, - {0xbda9, 3}, - {0xbdaa, 4}, - {0xbdab, 5}, - {0xbdac, 6}, - {0xbdad, 7}, - {0xbdae, 8}, - {0xbdaf, 9}, - {0xbdb0, 2086}, - {0xbdb2, 0}, - {0xbdb3, 1}, - {0xbdb4, 2}, - {0xbdb5, 3}, - {0xbdb6, 4}, - {0xbdb7, 5}, - {0xbdb8, 2087}, - {0xbdba, 0}, - {0xbdbb, 1}, - {0xbdbc, 2}, - {0xbdbd, 3}, - {0xbdbe, 4}, - {0xbdbf, 5}, - {0xbdc0, 6}, - {0xbdc1, 7}, - {0xbdc2, 8}, - {0xbdc3, 9}, - {0xbdc4, 10}, - {0xbdc5, 11}, - {0xbdc6, 12}, - {0xbdc7, 13}, - {0xbdc8, 14}, - {0xbdc9, 15}, - {0xbdca, 16}, - {0xbdcb, 17}, - {0xbdcc, 18}, - {0xbdcd, 19}, - {0xbdce, 20}, - {0xbdcf, 21}, - {0xbdd0, 22}, - {0xbdd1, 23}, - {0xbdd2, 24}, - {0xbdd3, 25}, - {0xbdd4, 2088}, - {0xbdd5, 2089}, - {0xbdd7, 0}, - {0xbdd8, 2090}, - {0xbdda, 0}, - {0xbddb, 1}, - {0xbddc, 2091}, - {0xbdde, 0}, - {0xbddf, 1}, - {0xbde0, 2}, - {0xbde1, 3}, - {0xbde2, 4}, - {0xbde3, 5}, - {0xbde4, 6}, - {0xbde5, 7}, - {0xbde6, 8}, - {0xbde7, 9}, - {0xbde8, 10}, - {0xbde9, 2092}, - {0xbdeb, 0}, - {0xbdec, 1}, - {0xbded, 2}, - {0xbdee, 3}, - {0xbdef, 4}, - {0xbdf0, 2093}, - {0xbdf2, 0}, - {0xbdf3, 1}, - {0xbdf4, 2094}, - {0xbdf6, 0}, - {0xbdf7, 1}, - {0xbdf8, 2095}, - {0xbdfa, 0}, - {0xbdfb, 1}, - {0xbdfc, 2}, - {0xbdfd, 3}, - {0xbdfe, 4}, - {0xbdff, 5}, - {0xbe00, 2096}, - {0xbe02, 0}, - {0xbe03, 2097}, - {0xbe05, 2098}, - {0xbe07, 0}, - {0xbe08, 1}, - {0xbe09, 2}, - {0xbe0a, 3}, - {0xbe0b, 4}, - {0xbe0c, 2099}, - {0xbe0d, 2100}, - {0xbe0f, 0}, - {0xbe10, 2101}, - {0xbe12, 0}, - {0xbe13, 1}, - {0xbe14, 2102}, - {0xbe16, 0}, - {0xbe17, 1}, - {0xbe18, 2}, - {0xbe19, 3}, - {0xbe1a, 4}, - {0xbe1b, 5}, - {0xbe1c, 2103}, - {0xbe1d, 2104}, - {0xbe1f, 2105}, - {0xbe21, 0}, - {0xbe22, 1}, - {0xbe23, 2}, - {0xbe24, 3}, - {0xbe25, 4}, - {0xbe26, 5}, - {0xbe27, 6}, - {0xbe28, 7}, - {0xbe29, 8}, - {0xbe2a, 9}, - {0xbe2b, 10}, - {0xbe2c, 11}, - {0xbe2d, 12}, - {0xbe2e, 13}, - {0xbe2f, 14}, - {0xbe30, 15}, - {0xbe31, 16}, - {0xbe32, 17}, - {0xbe33, 18}, - {0xbe34, 19}, - {0xbe35, 20}, - {0xbe36, 21}, - {0xbe37, 22}, - {0xbe38, 23}, - {0xbe39, 24}, - {0xbe3a, 25}, - {0xbe3b, 26}, - {0xbe3c, 27}, - {0xbe3d, 28}, - {0xbe3e, 29}, - {0xbe3f, 30}, - {0xbe40, 31}, - {0xbe41, 32}, - {0xbe42, 33}, - {0xbe43, 34}, - {0xbe44, 2106}, - {0xbe45, 2107}, - {0xbe47, 0}, - {0xbe48, 2108}, - {0xbe4a, 0}, - {0xbe4b, 1}, - {0xbe4c, 2109}, - {0xbe4e, 2110}, - {0xbe50, 0}, - {0xbe51, 1}, - {0xbe52, 2}, - {0xbe53, 3}, - {0xbe54, 2111}, - {0xbe55, 2112}, - {0xbe57, 2113}, - {0xbe59, 2114}, - {0xbe5a, 2115}, - {0xbe5b, 2116}, - {0xbe5d, 0}, - {0xbe5e, 1}, - {0xbe5f, 2}, - {0xbe60, 2117}, - {0xbe61, 2118}, - {0xbe63, 0}, - {0xbe64, 2119}, - {0xbe66, 0}, - {0xbe67, 1}, - {0xbe68, 2120}, - {0xbe6a, 2121}, - {0xbe6c, 0}, - {0xbe6d, 1}, - {0xbe6e, 2}, - {0xbe6f, 3}, - {0xbe70, 2122}, - {0xbe71, 2123}, - {0xbe73, 2124}, - {0xbe74, 2125}, - {0xbe75, 2126}, - {0xbe77, 0}, - {0xbe78, 1}, - {0xbe79, 2}, - {0xbe7a, 3}, - {0xbe7b, 2127}, - {0xbe7c, 2128}, - {0xbe7d, 2129}, - {0xbe7f, 0}, - {0xbe80, 2130}, - {0xbe82, 0}, - {0xbe83, 1}, - {0xbe84, 2131}, - {0xbe86, 0}, - {0xbe87, 1}, - {0xbe88, 2}, - {0xbe89, 3}, - {0xbe8a, 4}, - {0xbe8b, 5}, - {0xbe8c, 2132}, - {0xbe8d, 2133}, - {0xbe8f, 2134}, - {0xbe90, 2135}, - {0xbe91, 2136}, - {0xbe93, 0}, - {0xbe94, 1}, - {0xbe95, 2}, - {0xbe96, 3}, - {0xbe97, 4}, - {0xbe98, 2137}, - {0xbe99, 2138}, - {0xbe9b, 0}, - {0xbe9c, 1}, - {0xbe9d, 2}, - {0xbe9e, 3}, - {0xbe9f, 4}, - {0xbea0, 5}, - {0xbea1, 6}, - {0xbea2, 7}, - {0xbea3, 8}, - {0xbea4, 9}, - {0xbea5, 10}, - {0xbea6, 11}, - {0xbea7, 12}, - {0xbea8, 2139}, - {0xbeaa, 0}, - {0xbeab, 1}, - {0xbeac, 2}, - {0xbead, 3}, - {0xbeae, 4}, - {0xbeaf, 5}, - {0xbeb0, 6}, - {0xbeb1, 7}, - {0xbeb2, 8}, - {0xbeb3, 9}, - {0xbeb4, 10}, - {0xbeb5, 11}, - {0xbeb6, 12}, - {0xbeb7, 13}, - {0xbeb8, 14}, - {0xbeb9, 15}, - {0xbeba, 16}, - {0xbebb, 17}, - {0xbebc, 18}, - {0xbebd, 19}, - {0xbebe, 20}, - {0xbebf, 21}, - {0xbec0, 22}, - {0xbec1, 23}, - {0xbec2, 24}, - {0xbec3, 25}, - {0xbec4, 26}, - {0xbec5, 27}, - {0xbec6, 28}, - {0xbec7, 29}, - {0xbec8, 30}, - {0xbec9, 31}, - {0xbeca, 32}, - {0xbecb, 33}, - {0xbecc, 34}, - {0xbecd, 35}, - {0xbece, 36}, - {0xbecf, 37}, - {0xbed0, 2140}, - {0xbed1, 2141}, - {0xbed3, 0}, - {0xbed4, 2142}, - {0xbed6, 0}, - {0xbed7, 2143}, - {0xbed8, 2144}, - {0xbeda, 0}, - {0xbedb, 1}, - {0xbedc, 2}, - {0xbedd, 3}, - {0xbede, 4}, - {0xbedf, 5}, - {0xbee0, 2145}, - {0xbee2, 0}, - {0xbee3, 2146}, - {0xbee4, 2147}, - {0xbee5, 2148}, - {0xbee7, 0}, - {0xbee8, 1}, - {0xbee9, 2}, - {0xbeea, 3}, - {0xbeeb, 4}, - {0xbeec, 2149}, - {0xbeee, 0}, - {0xbeef, 1}, - {0xbef0, 2}, - {0xbef1, 3}, - {0xbef2, 4}, - {0xbef3, 5}, - {0xbef4, 6}, - {0xbef5, 7}, - {0xbef6, 8}, - {0xbef7, 9}, - {0xbef8, 10}, - {0xbef9, 11}, - {0xbefa, 12}, - {0xbefb, 13}, - {0xbefc, 14}, - {0xbefd, 15}, - {0xbefe, 16}, - {0xbeff, 17}, - {0xbf01, 2150}, - {0xbf03, 0}, - {0xbf04, 1}, - {0xbf05, 2}, - {0xbf06, 3}, - {0xbf07, 4}, - {0xbf08, 2151}, - {0xbf09, 2152}, - {0xbf0b, 0}, - {0xbf0c, 1}, - {0xbf0d, 2}, - {0xbf0e, 3}, - {0xbf0f, 4}, - {0xbf10, 5}, - {0xbf11, 6}, - {0xbf12, 7}, - {0xbf13, 8}, - {0xbf14, 9}, - {0xbf15, 10}, - {0xbf16, 11}, - {0xbf17, 12}, - {0xbf18, 2153}, - {0xbf19, 2154}, - {0xbf1b, 2155}, - {0xbf1c, 2156}, - {0xbf1d, 2157}, - {0xbf1f, 0}, - {0xbf20, 1}, - {0xbf21, 2}, - {0xbf22, 3}, - {0xbf23, 4}, - {0xbf24, 5}, - {0xbf25, 6}, - {0xbf26, 7}, - {0xbf27, 8}, - {0xbf28, 9}, - {0xbf29, 10}, - {0xbf2a, 11}, - {0xbf2b, 12}, - {0xbf2c, 13}, - {0xbf2d, 14}, - {0xbf2e, 15}, - {0xbf2f, 16}, - {0xbf30, 17}, - {0xbf31, 18}, - {0xbf32, 19}, - {0xbf33, 20}, - {0xbf34, 21}, - {0xbf35, 22}, - {0xbf36, 23}, - {0xbf37, 24}, - {0xbf38, 25}, - {0xbf39, 26}, - {0xbf3a, 27}, - {0xbf3b, 28}, - {0xbf3c, 29}, - {0xbf3d, 30}, - {0xbf3e, 31}, - {0xbf3f, 32}, - {0xbf40, 2158}, - {0xbf41, 2159}, - {0xbf43, 0}, - {0xbf44, 2160}, - {0xbf46, 0}, - {0xbf47, 1}, - {0xbf48, 2161}, - {0xbf4a, 0}, - {0xbf4b, 1}, - {0xbf4c, 2}, - {0xbf4d, 3}, - {0xbf4e, 4}, - {0xbf4f, 5}, - {0xbf50, 2162}, - {0xbf51, 2163}, - {0xbf53, 0}, - {0xbf54, 1}, - {0xbf55, 2164}, - {0xbf57, 0}, - {0xbf58, 1}, - {0xbf59, 2}, - {0xbf5a, 3}, - {0xbf5b, 4}, - {0xbf5c, 5}, - {0xbf5d, 6}, - {0xbf5e, 7}, - {0xbf5f, 8}, - {0xbf60, 9}, - {0xbf61, 10}, - {0xbf62, 11}, - {0xbf63, 12}, - {0xbf64, 13}, - {0xbf65, 14}, - {0xbf66, 15}, - {0xbf67, 16}, - {0xbf68, 17}, - {0xbf69, 18}, - {0xbf6a, 19}, - {0xbf6b, 20}, - {0xbf6c, 21}, - {0xbf6d, 22}, - {0xbf6e, 23}, - {0xbf6f, 24}, - {0xbf70, 25}, - {0xbf71, 26}, - {0xbf72, 27}, - {0xbf73, 28}, - {0xbf74, 29}, - {0xbf75, 30}, - {0xbf76, 31}, - {0xbf77, 32}, - {0xbf78, 33}, - {0xbf79, 34}, - {0xbf7a, 35}, - {0xbf7b, 36}, - {0xbf7c, 37}, - {0xbf7d, 38}, - {0xbf7e, 39}, - {0xbf7f, 40}, - {0xbf80, 41}, - {0xbf81, 42}, - {0xbf82, 43}, - {0xbf83, 44}, - {0xbf84, 45}, - {0xbf85, 46}, - {0xbf86, 47}, - {0xbf87, 48}, - {0xbf88, 49}, - {0xbf89, 50}, - {0xbf8a, 51}, - {0xbf8b, 52}, - {0xbf8c, 53}, - {0xbf8d, 54}, - {0xbf8e, 55}, - {0xbf8f, 56}, - {0xbf90, 57}, - {0xbf91, 58}, - {0xbf92, 59}, - {0xbf93, 60}, - {0xbf94, 2165}, - {0xbf96, 0}, - {0xbf97, 1}, - {0xbf98, 2}, - {0xbf99, 3}, - {0xbf9a, 4}, - {0xbf9b, 5}, - {0xbf9c, 6}, - {0xbf9d, 7}, - {0xbf9e, 8}, - {0xbf9f, 9}, - {0xbfa0, 10}, - {0xbfa1, 11}, - {0xbfa2, 12}, - {0xbfa3, 13}, - {0xbfa4, 14}, - {0xbfa5, 15}, - {0xbfa6, 16}, - {0xbfa7, 17}, - {0xbfa8, 18}, - {0xbfa9, 19}, - {0xbfaa, 20}, - {0xbfab, 21}, - {0xbfac, 22}, - {0xbfad, 23}, - {0xbfae, 24}, - {0xbfaf, 25}, - {0xbfb0, 2166}, - {0xbfb2, 0}, - {0xbfb3, 1}, - {0xbfb4, 2}, - {0xbfb5, 3}, - {0xbfb6, 4}, - {0xbfb7, 5}, - {0xbfb8, 6}, - {0xbfb9, 7}, - {0xbfba, 8}, - {0xbfbb, 9}, - {0xbfbc, 10}, - {0xbfbd, 11}, - {0xbfbe, 12}, - {0xbfbf, 13}, - {0xbfc0, 14}, - {0xbfc1, 15}, - {0xbfc2, 16}, - {0xbfc3, 17}, - {0xbfc4, 18}, - {0xbfc5, 2167}, - {0xbfc7, 0}, - {0xbfc8, 1}, - {0xbfc9, 2}, - {0xbfca, 3}, - {0xbfcb, 4}, - {0xbfcc, 2168}, - {0xbfcd, 2169}, - {0xbfcf, 0}, - {0xbfd0, 2170}, - {0xbfd2, 0}, - {0xbfd3, 1}, - {0xbfd4, 2171}, - {0xbfd6, 0}, - {0xbfd7, 1}, - {0xbfd8, 2}, - {0xbfd9, 3}, - {0xbfda, 4}, - {0xbfdb, 5}, - {0xbfdc, 2172}, - {0xbfde, 0}, - {0xbfdf, 2173}, - {0xbfe1, 2174}, - {0xbfe3, 0}, - {0xbfe4, 1}, - {0xbfe5, 2}, - {0xbfe6, 3}, - {0xbfe7, 4}, - {0xbfe8, 5}, - {0xbfe9, 6}, - {0xbfea, 7}, - {0xbfeb, 8}, - {0xbfec, 9}, - {0xbfed, 10}, - {0xbfee, 11}, - {0xbfef, 12}, - {0xbff0, 13}, - {0xbff1, 14}, - {0xbff2, 15}, - {0xbff3, 16}, - {0xbff4, 17}, - {0xbff5, 18}, - {0xbff6, 19}, - {0xbff7, 20}, - {0xbff8, 21}, - {0xbff9, 22}, - {0xbffa, 23}, - {0xbffb, 24}, - {0xbffc, 25}, - {0xbffd, 26}, - {0xbffe, 27}, - {0xbfff, 28}, - {0xc001, 0}, - {0xc002, 1}, - {0xc003, 2}, - {0xc004, 3}, - {0xc005, 4}, - {0xc006, 5}, - {0xc007, 6}, - {0xc008, 7}, - {0xc009, 8}, - {0xc00a, 9}, - {0xc00b, 10}, - {0xc00c, 11}, - {0xc00d, 12}, - {0xc00e, 13}, - {0xc00f, 14}, - {0xc010, 15}, - {0xc011, 16}, - {0xc012, 17}, - {0xc013, 18}, - {0xc014, 19}, - {0xc015, 20}, - {0xc016, 21}, - {0xc017, 22}, - {0xc018, 23}, - {0xc019, 24}, - {0xc01a, 25}, - {0xc01b, 26}, - {0xc01c, 27}, - {0xc01d, 28}, - {0xc01e, 29}, - {0xc01f, 30}, - {0xc020, 31}, - {0xc021, 32}, - {0xc022, 33}, - {0xc023, 34}, - {0xc024, 35}, - {0xc025, 36}, - {0xc026, 37}, - {0xc027, 38}, - {0xc028, 39}, - {0xc029, 40}, - {0xc02a, 41}, - {0xc02b, 42}, - {0xc02c, 43}, - {0xc02d, 44}, - {0xc02e, 45}, - {0xc02f, 46}, - {0xc030, 47}, - {0xc031, 48}, - {0xc032, 49}, - {0xc033, 50}, - {0xc034, 51}, - {0xc035, 52}, - {0xc036, 53}, - {0xc037, 54}, - {0xc038, 55}, - {0xc039, 56}, - {0xc03a, 57}, - {0xc03b, 58}, - {0xc03c, 2175}, - {0xc03e, 0}, - {0xc03f, 1}, - {0xc040, 2}, - {0xc041, 3}, - {0xc042, 4}, - {0xc043, 5}, - {0xc044, 6}, - {0xc045, 7}, - {0xc046, 8}, - {0xc047, 9}, - {0xc048, 10}, - {0xc049, 11}, - {0xc04a, 12}, - {0xc04b, 13}, - {0xc04c, 14}, - {0xc04d, 15}, - {0xc04e, 16}, - {0xc04f, 17}, - {0xc050, 18}, - {0xc051, 2176}, - {0xc053, 0}, - {0xc054, 1}, - {0xc055, 2}, - {0xc056, 3}, - {0xc057, 4}, - {0xc058, 2177}, - {0xc05a, 0}, - {0xc05b, 1}, - {0xc05c, 2178}, - {0xc05e, 0}, - {0xc05f, 1}, - {0xc060, 2179}, - {0xc062, 0}, - {0xc063, 1}, - {0xc064, 2}, - {0xc065, 3}, - {0xc066, 4}, - {0xc067, 5}, - {0xc068, 2180}, - {0xc069, 2181}, - {0xc06b, 0}, - {0xc06c, 1}, - {0xc06d, 2}, - {0xc06e, 3}, - {0xc06f, 4}, - {0xc070, 5}, - {0xc071, 6}, - {0xc072, 7}, - {0xc073, 8}, - {0xc074, 9}, - {0xc075, 10}, - {0xc076, 11}, - {0xc077, 12}, - {0xc078, 13}, - {0xc079, 14}, - {0xc07a, 15}, - {0xc07b, 16}, - {0xc07c, 17}, - {0xc07d, 18}, - {0xc07e, 19}, - {0xc07f, 20}, - {0xc080, 21}, - {0xc081, 22}, - {0xc082, 23}, - {0xc083, 24}, - {0xc084, 25}, - {0xc085, 26}, - {0xc086, 27}, - {0xc087, 28}, - {0xc088, 29}, - {0xc089, 30}, - {0xc08a, 31}, - {0xc08b, 32}, - {0xc08c, 33}, - {0xc08d, 34}, - {0xc08e, 35}, - {0xc08f, 36}, - {0xc090, 2182}, - {0xc091, 2183}, - {0xc093, 0}, - {0xc094, 2184}, - {0xc096, 0}, - {0xc097, 1}, - {0xc098, 2185}, - {0xc09a, 0}, - {0xc09b, 1}, - {0xc09c, 2}, - {0xc09d, 3}, - {0xc09e, 4}, - {0xc09f, 5}, - {0xc0a0, 2186}, - {0xc0a1, 2187}, - {0xc0a3, 2188}, - {0xc0a5, 2189}, - {0xc0a7, 0}, - {0xc0a8, 1}, - {0xc0a9, 2}, - {0xc0aa, 3}, - {0xc0ab, 4}, - {0xc0ac, 2190}, - {0xc0ad, 2191}, - {0xc0af, 2192}, - {0xc0b0, 2193}, - {0xc0b2, 0}, - {0xc0b3, 2194}, - {0xc0b4, 2195}, - {0xc0b5, 2196}, - {0xc0b6, 2197}, - {0xc0b8, 0}, - {0xc0b9, 1}, - {0xc0ba, 2}, - {0xc0bb, 3}, - {0xc0bc, 2198}, - {0xc0bd, 2199}, - {0xc0bf, 2200}, - {0xc0c0, 2201}, - {0xc0c1, 2202}, - {0xc0c3, 0}, - {0xc0c4, 1}, - {0xc0c5, 2203}, - {0xc0c7, 0}, - {0xc0c8, 2204}, - {0xc0c9, 2205}, - {0xc0cb, 0}, - {0xc0cc, 2206}, - {0xc0ce, 0}, - {0xc0cf, 1}, - {0xc0d0, 2207}, - {0xc0d2, 0}, - {0xc0d3, 1}, - {0xc0d4, 2}, - {0xc0d5, 3}, - {0xc0d6, 4}, - {0xc0d7, 5}, - {0xc0d8, 2208}, - {0xc0d9, 2209}, - {0xc0db, 2210}, - {0xc0dc, 2211}, - {0xc0dd, 2212}, - {0xc0df, 0}, - {0xc0e0, 1}, - {0xc0e1, 2}, - {0xc0e2, 3}, - {0xc0e3, 4}, - {0xc0e4, 2213}, - {0xc0e5, 2214}, - {0xc0e7, 0}, - {0xc0e8, 2215}, - {0xc0ea, 0}, - {0xc0eb, 1}, - {0xc0ec, 2216}, - {0xc0ee, 0}, - {0xc0ef, 1}, - {0xc0f0, 2}, - {0xc0f1, 3}, - {0xc0f2, 4}, - {0xc0f3, 5}, - {0xc0f4, 2217}, - {0xc0f5, 2218}, - {0xc0f7, 2219}, - {0xc0f9, 2220}, - {0xc0fb, 0}, - {0xc0fc, 1}, - {0xc0fd, 2}, - {0xc0fe, 3}, - {0xc0ff, 4}, - {0xc100, 2221}, - {0xc102, 0}, - {0xc103, 1}, - {0xc104, 2222}, - {0xc106, 0}, - {0xc107, 1}, - {0xc108, 2223}, - {0xc10a, 0}, - {0xc10b, 1}, - {0xc10c, 2}, - {0xc10d, 3}, - {0xc10e, 4}, - {0xc10f, 5}, - {0xc110, 2224}, - {0xc112, 0}, - {0xc113, 1}, - {0xc114, 2}, - {0xc115, 2225}, - {0xc117, 0}, - {0xc118, 1}, - {0xc119, 2}, - {0xc11a, 3}, - {0xc11b, 4}, - {0xc11c, 2226}, - {0xc11d, 2227}, - {0xc11e, 2228}, - {0xc11f, 2229}, - {0xc120, 2230}, - {0xc122, 0}, - {0xc123, 2231}, - {0xc124, 2232}, - {0xc126, 2233}, - {0xc127, 2234}, - {0xc129, 0}, - {0xc12a, 1}, - {0xc12b, 2}, - {0xc12c, 2235}, - {0xc12d, 2236}, - {0xc12f, 2237}, - {0xc130, 2238}, - {0xc131, 2239}, - {0xc133, 0}, - {0xc134, 1}, - {0xc135, 2}, - {0xc136, 2240}, - {0xc138, 2241}, - {0xc139, 2242}, - {0xc13b, 0}, - {0xc13c, 2243}, - {0xc13e, 0}, - {0xc13f, 1}, - {0xc140, 2244}, - {0xc142, 0}, - {0xc143, 1}, - {0xc144, 2}, - {0xc145, 3}, - {0xc146, 4}, - {0xc147, 5}, - {0xc148, 2245}, - {0xc149, 2246}, - {0xc14b, 2247}, - {0xc14c, 2248}, - {0xc14d, 2249}, - {0xc14f, 0}, - {0xc150, 1}, - {0xc151, 2}, - {0xc152, 3}, - {0xc153, 4}, - {0xc154, 2250}, - {0xc155, 2251}, - {0xc157, 0}, - {0xc158, 2252}, - {0xc15a, 0}, - {0xc15b, 1}, - {0xc15c, 2253}, - {0xc15e, 0}, - {0xc15f, 1}, - {0xc160, 2}, - {0xc161, 3}, - {0xc162, 4}, - {0xc163, 5}, - {0xc164, 2254}, - {0xc165, 2255}, - {0xc167, 2256}, - {0xc168, 2257}, - {0xc169, 2258}, - {0xc16b, 0}, - {0xc16c, 1}, - {0xc16d, 2}, - {0xc16e, 3}, - {0xc16f, 4}, - {0xc170, 2259}, - {0xc172, 0}, - {0xc173, 1}, - {0xc174, 2260}, - {0xc176, 0}, - {0xc177, 1}, - {0xc178, 2261}, - {0xc17a, 0}, - {0xc17b, 1}, - {0xc17c, 2}, - {0xc17d, 3}, - {0xc17e, 4}, - {0xc17f, 5}, - {0xc180, 6}, - {0xc181, 7}, - {0xc182, 8}, - {0xc183, 9}, - {0xc184, 10}, - {0xc185, 2262}, - {0xc187, 0}, - {0xc188, 1}, - {0xc189, 2}, - {0xc18a, 3}, - {0xc18b, 4}, - {0xc18c, 2263}, - {0xc18d, 2264}, - {0xc18e, 2265}, - {0xc190, 2266}, - {0xc192, 0}, - {0xc193, 1}, - {0xc194, 2267}, - {0xc196, 2268}, - {0xc198, 0}, - {0xc199, 1}, - {0xc19a, 2}, - {0xc19b, 3}, - {0xc19c, 2269}, - {0xc19d, 2270}, - {0xc19f, 2271}, - {0xc1a1, 2272}, - {0xc1a3, 0}, - {0xc1a4, 1}, - {0xc1a5, 2273}, - {0xc1a7, 0}, - {0xc1a8, 2274}, - {0xc1a9, 2275}, - {0xc1ab, 0}, - {0xc1ac, 2276}, - {0xc1ae, 0}, - {0xc1af, 1}, - {0xc1b0, 2277}, - {0xc1b2, 0}, - {0xc1b3, 1}, - {0xc1b4, 2}, - {0xc1b5, 3}, - {0xc1b6, 4}, - {0xc1b7, 5}, - {0xc1b8, 6}, - {0xc1b9, 7}, - {0xc1ba, 8}, - {0xc1bb, 9}, - {0xc1bc, 10}, - {0xc1bd, 2278}, - {0xc1bf, 0}, - {0xc1c0, 1}, - {0xc1c1, 2}, - {0xc1c2, 3}, - {0xc1c3, 4}, - {0xc1c4, 2279}, - {0xc1c6, 0}, - {0xc1c7, 1}, - {0xc1c8, 2280}, - {0xc1ca, 0}, - {0xc1cb, 1}, - {0xc1cc, 2281}, - {0xc1ce, 0}, - {0xc1cf, 1}, - {0xc1d0, 2}, - {0xc1d1, 3}, - {0xc1d2, 4}, - {0xc1d3, 5}, - {0xc1d4, 2282}, - {0xc1d6, 0}, - {0xc1d7, 2283}, - {0xc1d8, 2284}, - {0xc1da, 0}, - {0xc1db, 1}, - {0xc1dc, 2}, - {0xc1dd, 3}, - {0xc1de, 4}, - {0xc1df, 5}, - {0xc1e0, 2285}, - {0xc1e2, 0}, - {0xc1e3, 1}, - {0xc1e4, 2286}, - {0xc1e6, 0}, - {0xc1e7, 1}, - {0xc1e8, 2287}, - {0xc1ea, 0}, - {0xc1eb, 1}, - {0xc1ec, 2}, - {0xc1ed, 3}, - {0xc1ee, 4}, - {0xc1ef, 5}, - {0xc1f0, 2288}, - {0xc1f1, 2289}, - {0xc1f3, 2290}, - {0xc1f5, 0}, - {0xc1f6, 1}, - {0xc1f7, 2}, - {0xc1f8, 3}, - {0xc1f9, 4}, - {0xc1fa, 5}, - {0xc1fb, 6}, - {0xc1fc, 2291}, - {0xc1fd, 2292}, - {0xc1ff, 0}, - {0xc200, 2293}, - {0xc202, 0}, - {0xc203, 1}, - {0xc204, 2294}, - {0xc206, 0}, - {0xc207, 1}, - {0xc208, 2}, - {0xc209, 3}, - {0xc20a, 4}, - {0xc20b, 5}, - {0xc20c, 2295}, - {0xc20d, 2296}, - {0xc20f, 2297}, - {0xc211, 2298}, - {0xc213, 0}, - {0xc214, 1}, - {0xc215, 2}, - {0xc216, 3}, - {0xc217, 4}, - {0xc218, 2299}, - {0xc219, 2300}, - {0xc21b, 0}, - {0xc21c, 2301}, - {0xc21e, 0}, - {0xc21f, 2302}, - {0xc220, 2303}, - {0xc222, 0}, - {0xc223, 1}, - {0xc224, 2}, - {0xc225, 3}, - {0xc226, 4}, - {0xc227, 5}, - {0xc228, 2304}, - {0xc229, 2305}, - {0xc22b, 2306}, - {0xc22d, 2307}, - {0xc22f, 2308}, - {0xc231, 2309}, - {0xc232, 2310}, - {0xc234, 2311}, - {0xc236, 0}, - {0xc237, 1}, - {0xc238, 2}, - {0xc239, 3}, - {0xc23a, 4}, - {0xc23b, 5}, - {0xc23c, 6}, - {0xc23d, 7}, - {0xc23e, 8}, - {0xc23f, 9}, - {0xc240, 10}, - {0xc241, 11}, - {0xc242, 12}, - {0xc243, 13}, - {0xc244, 14}, - {0xc245, 15}, - {0xc246, 16}, - {0xc247, 17}, - {0xc248, 2312}, - {0xc24a, 0}, - {0xc24b, 1}, - {0xc24c, 2}, - {0xc24d, 3}, - {0xc24e, 4}, - {0xc24f, 5}, - {0xc250, 2313}, - {0xc251, 2314}, - {0xc253, 0}, - {0xc254, 2315}, - {0xc256, 0}, - {0xc257, 1}, - {0xc258, 2316}, - {0xc25a, 0}, - {0xc25b, 1}, - {0xc25c, 2}, - {0xc25d, 3}, - {0xc25e, 4}, - {0xc25f, 5}, - {0xc260, 2317}, - {0xc262, 0}, - {0xc263, 1}, - {0xc264, 2}, - {0xc265, 2318}, - {0xc267, 0}, - {0xc268, 1}, - {0xc269, 2}, - {0xc26a, 3}, - {0xc26b, 4}, - {0xc26c, 2319}, - {0xc26d, 2320}, - {0xc26f, 0}, - {0xc270, 2321}, - {0xc272, 0}, - {0xc273, 1}, - {0xc274, 2322}, - {0xc276, 0}, - {0xc277, 1}, - {0xc278, 2}, - {0xc279, 3}, - {0xc27a, 4}, - {0xc27b, 5}, - {0xc27c, 2323}, - {0xc27d, 2324}, - {0xc27f, 2325}, - {0xc281, 2326}, - {0xc283, 0}, - {0xc284, 1}, - {0xc285, 2}, - {0xc286, 3}, - {0xc287, 4}, - {0xc288, 2327}, - {0xc289, 2328}, - {0xc28b, 0}, - {0xc28c, 1}, - {0xc28d, 2}, - {0xc28e, 3}, - {0xc28f, 4}, - {0xc290, 2329}, - {0xc292, 0}, - {0xc293, 1}, - {0xc294, 2}, - {0xc295, 3}, - {0xc296, 4}, - {0xc297, 5}, - {0xc298, 2330}, - {0xc29a, 0}, - {0xc29b, 2331}, - {0xc29d, 2332}, - {0xc29f, 0}, - {0xc2a0, 1}, - {0xc2a1, 2}, - {0xc2a2, 3}, - {0xc2a3, 4}, - {0xc2a4, 2333}, - {0xc2a5, 2334}, - {0xc2a7, 0}, - {0xc2a8, 2335}, - {0xc2aa, 0}, - {0xc2ab, 1}, - {0xc2ac, 2336}, - {0xc2ad, 2337}, - {0xc2af, 0}, - {0xc2b0, 1}, - {0xc2b1, 2}, - {0xc2b2, 3}, - {0xc2b3, 4}, - {0xc2b4, 2338}, - {0xc2b5, 2339}, - {0xc2b7, 2340}, - {0xc2b9, 2341}, - {0xc2bb, 0}, - {0xc2bc, 1}, - {0xc2bd, 2}, - {0xc2be, 3}, - {0xc2bf, 4}, - {0xc2c0, 5}, - {0xc2c1, 6}, - {0xc2c2, 7}, - {0xc2c3, 8}, - {0xc2c4, 9}, - {0xc2c5, 10}, - {0xc2c6, 11}, - {0xc2c7, 12}, - {0xc2c8, 13}, - {0xc2c9, 14}, - {0xc2ca, 15}, - {0xc2cb, 16}, - {0xc2cc, 17}, - {0xc2cd, 18}, - {0xc2ce, 19}, - {0xc2cf, 20}, - {0xc2d0, 21}, - {0xc2d1, 22}, - {0xc2d2, 23}, - {0xc2d3, 24}, - {0xc2d4, 25}, - {0xc2d5, 26}, - {0xc2d6, 27}, - {0xc2d7, 28}, - {0xc2d8, 29}, - {0xc2d9, 30}, - {0xc2da, 31}, - {0xc2db, 32}, - {0xc2dc, 2342}, - {0xc2dd, 2343}, - {0xc2df, 0}, - {0xc2e0, 2344}, - {0xc2e2, 0}, - {0xc2e3, 2345}, - {0xc2e4, 2346}, - {0xc2e6, 0}, - {0xc2e7, 1}, - {0xc2e8, 2}, - {0xc2e9, 3}, - {0xc2ea, 4}, - {0xc2eb, 2347}, - {0xc2ec, 2348}, - {0xc2ed, 2349}, - {0xc2ef, 2350}, - {0xc2f1, 2351}, - {0xc2f3, 0}, - {0xc2f4, 1}, - {0xc2f5, 2}, - {0xc2f6, 2352}, - {0xc2f8, 2353}, - {0xc2f9, 2354}, - {0xc2fb, 2355}, - {0xc2fc, 2356}, - {0xc2fe, 0}, - {0xc2ff, 1}, - {0xc300, 2357}, - {0xc302, 0}, - {0xc303, 1}, - {0xc304, 2}, - {0xc305, 3}, - {0xc306, 4}, - {0xc307, 5}, - {0xc308, 2358}, - {0xc309, 2359}, - {0xc30b, 0}, - {0xc30c, 2360}, - {0xc30d, 2361}, - {0xc30f, 0}, - {0xc310, 1}, - {0xc311, 2}, - {0xc312, 3}, - {0xc313, 2362}, - {0xc314, 2363}, - {0xc315, 2364}, - {0xc317, 0}, - {0xc318, 2365}, - {0xc31a, 0}, - {0xc31b, 1}, - {0xc31c, 2366}, - {0xc31e, 0}, - {0xc31f, 1}, - {0xc320, 2}, - {0xc321, 3}, - {0xc322, 4}, - {0xc323, 5}, - {0xc324, 2367}, - {0xc325, 2368}, - {0xc327, 0}, - {0xc328, 2369}, - {0xc329, 2370}, - {0xc32b, 0}, - {0xc32c, 1}, - {0xc32d, 2}, - {0xc32e, 3}, - {0xc32f, 4}, - {0xc330, 5}, - {0xc331, 6}, - {0xc332, 7}, - {0xc333, 8}, - {0xc334, 9}, - {0xc335, 10}, - {0xc336, 11}, - {0xc337, 12}, - {0xc338, 13}, - {0xc339, 14}, - {0xc33a, 15}, - {0xc33b, 16}, - {0xc33c, 17}, - {0xc33d, 18}, - {0xc33e, 19}, - {0xc33f, 20}, - {0xc340, 21}, - {0xc341, 22}, - {0xc342, 23}, - {0xc343, 24}, - {0xc344, 25}, - {0xc345, 2371}, - {0xc347, 0}, - {0xc348, 1}, - {0xc349, 2}, - {0xc34a, 3}, - {0xc34b, 4}, - {0xc34c, 5}, - {0xc34d, 6}, - {0xc34e, 7}, - {0xc34f, 8}, - {0xc350, 9}, - {0xc351, 10}, - {0xc352, 11}, - {0xc353, 12}, - {0xc354, 13}, - {0xc355, 14}, - {0xc356, 15}, - {0xc357, 16}, - {0xc358, 17}, - {0xc359, 18}, - {0xc35a, 19}, - {0xc35b, 20}, - {0xc35c, 21}, - {0xc35d, 22}, - {0xc35e, 23}, - {0xc35f, 24}, - {0xc360, 25}, - {0xc361, 26}, - {0xc362, 27}, - {0xc363, 28}, - {0xc364, 29}, - {0xc365, 30}, - {0xc366, 31}, - {0xc367, 32}, - {0xc368, 2372}, - {0xc369, 2373}, - {0xc36b, 0}, - {0xc36c, 2374}, - {0xc36e, 0}, - {0xc36f, 1}, - {0xc370, 2375}, - {0xc372, 2376}, - {0xc374, 0}, - {0xc375, 1}, - {0xc376, 2}, - {0xc377, 3}, - {0xc378, 2377}, - {0xc379, 2378}, - {0xc37b, 0}, - {0xc37c, 2379}, - {0xc37d, 2380}, - {0xc37f, 0}, - {0xc380, 1}, - {0xc381, 2}, - {0xc382, 3}, - {0xc383, 4}, - {0xc384, 2381}, - {0xc386, 0}, - {0xc387, 1}, - {0xc388, 2382}, - {0xc38a, 0}, - {0xc38b, 1}, - {0xc38c, 2383}, - {0xc38e, 0}, - {0xc38f, 1}, - {0xc390, 2}, - {0xc391, 3}, - {0xc392, 4}, - {0xc393, 5}, - {0xc394, 6}, - {0xc395, 7}, - {0xc396, 8}, - {0xc397, 9}, - {0xc398, 10}, - {0xc399, 11}, - {0xc39a, 12}, - {0xc39b, 13}, - {0xc39c, 14}, - {0xc39d, 15}, - {0xc39e, 16}, - {0xc39f, 17}, - {0xc3a0, 18}, - {0xc3a1, 19}, - {0xc3a2, 20}, - {0xc3a3, 21}, - {0xc3a4, 22}, - {0xc3a5, 23}, - {0xc3a6, 24}, - {0xc3a7, 25}, - {0xc3a8, 26}, - {0xc3a9, 27}, - {0xc3aa, 28}, - {0xc3ab, 29}, - {0xc3ac, 30}, - {0xc3ad, 31}, - {0xc3ae, 32}, - {0xc3af, 33}, - {0xc3b0, 34}, - {0xc3b1, 35}, - {0xc3b2, 36}, - {0xc3b3, 37}, - {0xc3b4, 38}, - {0xc3b5, 39}, - {0xc3b6, 40}, - {0xc3b7, 41}, - {0xc3b8, 42}, - {0xc3b9, 43}, - {0xc3ba, 44}, - {0xc3bb, 45}, - {0xc3bc, 46}, - {0xc3bd, 47}, - {0xc3be, 48}, - {0xc3bf, 49}, - {0xc3c0, 2384}, - {0xc3c2, 0}, - {0xc3c3, 1}, - {0xc3c4, 2}, - {0xc3c5, 3}, - {0xc3c6, 4}, - {0xc3c7, 5}, - {0xc3c8, 6}, - {0xc3c9, 7}, - {0xc3ca, 8}, - {0xc3cb, 9}, - {0xc3cc, 10}, - {0xc3cd, 11}, - {0xc3ce, 12}, - {0xc3cf, 13}, - {0xc3d0, 14}, - {0xc3d1, 15}, - {0xc3d2, 16}, - {0xc3d3, 17}, - {0xc3d4, 18}, - {0xc3d5, 19}, - {0xc3d6, 20}, - {0xc3d7, 21}, - {0xc3d8, 2385}, - {0xc3d9, 2386}, - {0xc3db, 0}, - {0xc3dc, 2387}, - {0xc3de, 0}, - {0xc3df, 2388}, - {0xc3e0, 2389}, - {0xc3e2, 2390}, - {0xc3e4, 0}, - {0xc3e5, 1}, - {0xc3e6, 2}, - {0xc3e7, 3}, - {0xc3e8, 2391}, - {0xc3e9, 2392}, - {0xc3eb, 0}, - {0xc3ec, 1}, - {0xc3ed, 2393}, - {0xc3ef, 0}, - {0xc3f0, 1}, - {0xc3f1, 2}, - {0xc3f2, 3}, - {0xc3f3, 4}, - {0xc3f4, 2394}, - {0xc3f5, 2395}, - {0xc3f7, 0}, - {0xc3f8, 2396}, - {0xc3fa, 0}, - {0xc3fb, 1}, - {0xc3fc, 2}, - {0xc3fd, 3}, - {0xc3fe, 4}, - {0xc3ff, 5}, - {0xc401, 0}, - {0xc402, 1}, - {0xc403, 2}, - {0xc404, 3}, - {0xc405, 4}, - {0xc406, 5}, - {0xc407, 6}, - {0xc408, 2397}, - {0xc40a, 0}, - {0xc40b, 1}, - {0xc40c, 2}, - {0xc40d, 3}, - {0xc40e, 4}, - {0xc40f, 5}, - {0xc410, 2398}, - {0xc412, 0}, - {0xc413, 1}, - {0xc414, 2}, - {0xc415, 3}, - {0xc416, 4}, - {0xc417, 5}, - {0xc418, 6}, - {0xc419, 7}, - {0xc41a, 8}, - {0xc41b, 9}, - {0xc41c, 10}, - {0xc41d, 11}, - {0xc41e, 12}, - {0xc41f, 13}, - {0xc420, 14}, - {0xc421, 15}, - {0xc422, 16}, - {0xc423, 17}, - {0xc424, 2399}, - {0xc426, 0}, - {0xc427, 1}, - {0xc428, 2}, - {0xc429, 3}, - {0xc42a, 4}, - {0xc42b, 5}, - {0xc42c, 2400}, - {0xc42e, 0}, - {0xc42f, 1}, - {0xc430, 2401}, - {0xc432, 0}, - {0xc433, 1}, - {0xc434, 2402}, - {0xc436, 0}, - {0xc437, 1}, - {0xc438, 2}, - {0xc439, 3}, - {0xc43a, 4}, - {0xc43b, 5}, - {0xc43c, 2403}, - {0xc43d, 2404}, - {0xc43f, 0}, - {0xc440, 1}, - {0xc441, 2}, - {0xc442, 3}, - {0xc443, 4}, - {0xc444, 5}, - {0xc445, 6}, - {0xc446, 7}, - {0xc447, 8}, - {0xc448, 2405}, - {0xc44a, 0}, - {0xc44b, 1}, - {0xc44c, 2}, - {0xc44d, 3}, - {0xc44e, 4}, - {0xc44f, 5}, - {0xc450, 6}, - {0xc451, 7}, - {0xc452, 8}, - {0xc453, 9}, - {0xc454, 10}, - {0xc455, 11}, - {0xc456, 12}, - {0xc457, 13}, - {0xc458, 14}, - {0xc459, 15}, - {0xc45a, 16}, - {0xc45b, 17}, - {0xc45c, 18}, - {0xc45d, 19}, - {0xc45e, 20}, - {0xc45f, 21}, - {0xc460, 22}, - {0xc461, 23}, - {0xc462, 24}, - {0xc463, 25}, - {0xc464, 2406}, - {0xc465, 2407}, - {0xc467, 0}, - {0xc468, 2408}, - {0xc46a, 0}, - {0xc46b, 1}, - {0xc46c, 2409}, - {0xc46e, 0}, - {0xc46f, 1}, - {0xc470, 2}, - {0xc471, 3}, - {0xc472, 4}, - {0xc473, 5}, - {0xc474, 2410}, - {0xc475, 2411}, - {0xc477, 0}, - {0xc478, 1}, - {0xc479, 2412}, - {0xc47b, 0}, - {0xc47c, 1}, - {0xc47d, 2}, - {0xc47e, 3}, - {0xc47f, 4}, - {0xc480, 2413}, - {0xc482, 0}, - {0xc483, 1}, - {0xc484, 2}, - {0xc485, 3}, - {0xc486, 4}, - {0xc487, 5}, - {0xc488, 6}, - {0xc489, 7}, - {0xc48a, 8}, - {0xc48b, 9}, - {0xc48c, 10}, - {0xc48d, 11}, - {0xc48e, 12}, - {0xc48f, 13}, - {0xc490, 14}, - {0xc491, 15}, - {0xc492, 16}, - {0xc493, 17}, - {0xc494, 2414}, - {0xc496, 0}, - {0xc497, 1}, - {0xc498, 2}, - {0xc499, 3}, - {0xc49a, 4}, - {0xc49b, 5}, - {0xc49c, 2415}, - {0xc49e, 0}, - {0xc49f, 1}, - {0xc4a0, 2}, - {0xc4a1, 3}, - {0xc4a2, 4}, - {0xc4a3, 5}, - {0xc4a4, 6}, - {0xc4a5, 7}, - {0xc4a6, 8}, - {0xc4a7, 9}, - {0xc4a8, 10}, - {0xc4a9, 11}, - {0xc4aa, 12}, - {0xc4ab, 13}, - {0xc4ac, 14}, - {0xc4ad, 15}, - {0xc4ae, 16}, - {0xc4af, 17}, - {0xc4b0, 18}, - {0xc4b1, 19}, - {0xc4b2, 20}, - {0xc4b3, 21}, - {0xc4b4, 22}, - {0xc4b5, 23}, - {0xc4b6, 24}, - {0xc4b7, 25}, - {0xc4b8, 2416}, - {0xc4ba, 0}, - {0xc4bb, 1}, - {0xc4bc, 2417}, - {0xc4be, 0}, - {0xc4bf, 1}, - {0xc4c0, 2}, - {0xc4c1, 3}, - {0xc4c2, 4}, - {0xc4c3, 5}, - {0xc4c4, 6}, - {0xc4c5, 7}, - {0xc4c6, 8}, - {0xc4c7, 9}, - {0xc4c8, 10}, - {0xc4c9, 11}, - {0xc4ca, 12}, - {0xc4cb, 13}, - {0xc4cc, 14}, - {0xc4cd, 15}, - {0xc4ce, 16}, - {0xc4cf, 17}, - {0xc4d0, 18}, - {0xc4d1, 19}, - {0xc4d2, 20}, - {0xc4d3, 21}, - {0xc4d4, 22}, - {0xc4d5, 23}, - {0xc4d6, 24}, - {0xc4d7, 25}, - {0xc4d8, 26}, - {0xc4d9, 27}, - {0xc4da, 28}, - {0xc4db, 29}, - {0xc4dc, 30}, - {0xc4dd, 31}, - {0xc4de, 32}, - {0xc4df, 33}, - {0xc4e0, 34}, - {0xc4e1, 35}, - {0xc4e2, 36}, - {0xc4e3, 37}, - {0xc4e4, 38}, - {0xc4e5, 39}, - {0xc4e6, 40}, - {0xc4e7, 41}, - {0xc4e8, 42}, - {0xc4e9, 2418}, - {0xc4eb, 0}, - {0xc4ec, 1}, - {0xc4ed, 2}, - {0xc4ee, 3}, - {0xc4ef, 4}, - {0xc4f0, 2419}, - {0xc4f1, 2420}, - {0xc4f3, 0}, - {0xc4f4, 2421}, - {0xc4f6, 0}, - {0xc4f7, 1}, - {0xc4f8, 2422}, - {0xc4fa, 2423}, - {0xc4fc, 0}, - {0xc4fd, 1}, - {0xc4fe, 2}, - {0xc4ff, 2424}, - {0xc500, 2425}, - {0xc501, 2426}, - {0xc503, 0}, - {0xc504, 1}, - {0xc505, 2}, - {0xc506, 3}, - {0xc507, 4}, - {0xc508, 5}, - {0xc509, 6}, - {0xc50a, 7}, - {0xc50b, 8}, - {0xc50c, 2427}, - {0xc50e, 0}, - {0xc50f, 1}, - {0xc510, 2428}, - {0xc512, 0}, - {0xc513, 1}, - {0xc514, 2429}, - {0xc516, 0}, - {0xc517, 1}, - {0xc518, 2}, - {0xc519, 3}, - {0xc51a, 4}, - {0xc51b, 5}, - {0xc51c, 2430}, - {0xc51e, 0}, - {0xc51f, 1}, - {0xc520, 2}, - {0xc521, 3}, - {0xc522, 4}, - {0xc523, 5}, - {0xc524, 6}, - {0xc525, 7}, - {0xc526, 8}, - {0xc527, 9}, - {0xc528, 2431}, - {0xc529, 2432}, - {0xc52b, 0}, - {0xc52c, 2433}, - {0xc52e, 0}, - {0xc52f, 1}, - {0xc530, 2434}, - {0xc532, 0}, - {0xc533, 1}, - {0xc534, 2}, - {0xc535, 3}, - {0xc536, 4}, - {0xc537, 5}, - {0xc538, 2435}, - {0xc539, 2436}, - {0xc53b, 2437}, - {0xc53d, 2438}, - {0xc53f, 0}, - {0xc540, 1}, - {0xc541, 2}, - {0xc542, 3}, - {0xc543, 4}, - {0xc544, 2439}, - {0xc545, 2440}, - {0xc547, 0}, - {0xc548, 2441}, - {0xc549, 2442}, - {0xc54a, 2443}, - {0xc54c, 2444}, - {0xc54d, 2445}, - {0xc54e, 2446}, - {0xc550, 0}, - {0xc551, 1}, - {0xc552, 2}, - {0xc553, 2447}, - {0xc554, 2448}, - {0xc555, 2449}, - {0xc557, 2450}, - {0xc558, 2451}, - {0xc559, 2452}, - {0xc55b, 0}, - {0xc55c, 1}, - {0xc55d, 2453}, - {0xc55e, 2454}, - {0xc560, 2455}, - {0xc561, 2456}, - {0xc563, 0}, - {0xc564, 2457}, - {0xc566, 0}, - {0xc567, 1}, - {0xc568, 2458}, - {0xc56a, 0}, - {0xc56b, 1}, - {0xc56c, 2}, - {0xc56d, 3}, - {0xc56e, 4}, - {0xc56f, 5}, - {0xc570, 2459}, - {0xc571, 2460}, - {0xc573, 2461}, - {0xc574, 2462}, - {0xc575, 2463}, - {0xc577, 0}, - {0xc578, 1}, - {0xc579, 2}, - {0xc57a, 3}, - {0xc57b, 4}, - {0xc57c, 2464}, - {0xc57d, 2465}, - {0xc57f, 0}, - {0xc580, 2466}, - {0xc582, 0}, - {0xc583, 1}, - {0xc584, 2467}, - {0xc586, 0}, - {0xc587, 2468}, - {0xc589, 0}, - {0xc58a, 1}, - {0xc58b, 2}, - {0xc58c, 2469}, - {0xc58d, 2470}, - {0xc58f, 2471}, - {0xc591, 2472}, - {0xc593, 0}, - {0xc594, 1}, - {0xc595, 2473}, - {0xc597, 2474}, - {0xc598, 2475}, - {0xc59a, 0}, - {0xc59b, 1}, - {0xc59c, 2476}, - {0xc59e, 0}, - {0xc59f, 1}, - {0xc5a0, 2477}, - {0xc5a2, 0}, - {0xc5a3, 1}, - {0xc5a4, 2}, - {0xc5a5, 3}, - {0xc5a6, 4}, - {0xc5a7, 5}, - {0xc5a8, 6}, - {0xc5a9, 2478}, - {0xc5ab, 0}, - {0xc5ac, 1}, - {0xc5ad, 2}, - {0xc5ae, 3}, - {0xc5af, 4}, - {0xc5b0, 5}, - {0xc5b1, 6}, - {0xc5b2, 7}, - {0xc5b3, 8}, - {0xc5b4, 2479}, - {0xc5b5, 2480}, - {0xc5b7, 0}, - {0xc5b8, 2481}, - {0xc5b9, 2482}, - {0xc5bb, 2483}, - {0xc5bc, 2484}, - {0xc5bd, 2485}, - {0xc5be, 2486}, - {0xc5c0, 0}, - {0xc5c1, 1}, - {0xc5c2, 2}, - {0xc5c3, 3}, - {0xc5c4, 2487}, - {0xc5c5, 2488}, - {0xc5c6, 2489}, - {0xc5c7, 2490}, - {0xc5c8, 2491}, - {0xc5c9, 2492}, - {0xc5ca, 2493}, - {0xc5cc, 2494}, - {0xc5ce, 2495}, - {0xc5d0, 2496}, - {0xc5d1, 2497}, - {0xc5d3, 0}, - {0xc5d4, 2498}, - {0xc5d6, 0}, - {0xc5d7, 1}, - {0xc5d8, 2499}, - {0xc5da, 0}, - {0xc5db, 1}, - {0xc5dc, 2}, - {0xc5dd, 3}, - {0xc5de, 4}, - {0xc5df, 5}, - {0xc5e0, 2500}, - {0xc5e1, 2501}, - {0xc5e3, 2502}, - {0xc5e5, 2503}, - {0xc5e7, 0}, - {0xc5e8, 1}, - {0xc5e9, 2}, - {0xc5ea, 3}, - {0xc5eb, 4}, - {0xc5ec, 2504}, - {0xc5ed, 2505}, - {0xc5ee, 2506}, - {0xc5f0, 2507}, - {0xc5f2, 0}, - {0xc5f3, 1}, - {0xc5f4, 2508}, - {0xc5f6, 2509}, - {0xc5f7, 2510}, - {0xc5f9, 0}, - {0xc5fa, 1}, - {0xc5fb, 2}, - {0xc5fc, 2511}, - {0xc5fd, 2512}, - {0xc5fe, 2513}, - {0xc5ff, 2514}, - {0xc600, 2515}, - {0xc601, 2516}, - {0xc603, 0}, - {0xc604, 1}, - {0xc605, 2517}, - {0xc606, 2518}, - {0xc607, 2519}, - {0xc608, 2520}, - {0xc60a, 0}, - {0xc60b, 1}, - {0xc60c, 2521}, - {0xc60e, 0}, - {0xc60f, 1}, - {0xc610, 2522}, - {0xc612, 0}, - {0xc613, 1}, - {0xc614, 2}, - {0xc615, 3}, - {0xc616, 4}, - {0xc617, 5}, - {0xc618, 2523}, - {0xc619, 2524}, - {0xc61b, 2525}, - {0xc61c, 2526}, - {0xc61e, 0}, - {0xc61f, 1}, - {0xc620, 2}, - {0xc621, 3}, - {0xc622, 4}, - {0xc623, 5}, - {0xc624, 2527}, - {0xc625, 2528}, - {0xc627, 0}, - {0xc628, 2529}, - {0xc62a, 0}, - {0xc62b, 1}, - {0xc62c, 2530}, - {0xc62d, 2531}, - {0xc62e, 2532}, - {0xc630, 2533}, - {0xc632, 0}, - {0xc633, 2534}, - {0xc634, 2535}, - {0xc635, 2536}, - {0xc637, 2537}, - {0xc639, 2538}, - {0xc63b, 2539}, - {0xc63d, 0}, - {0xc63e, 1}, - {0xc63f, 2}, - {0xc640, 2540}, - {0xc641, 2541}, - {0xc643, 0}, - {0xc644, 2542}, - {0xc646, 0}, - {0xc647, 1}, - {0xc648, 2543}, - {0xc64a, 0}, - {0xc64b, 1}, - {0xc64c, 2}, - {0xc64d, 3}, - {0xc64e, 4}, - {0xc64f, 5}, - {0xc650, 2544}, - {0xc651, 2545}, - {0xc653, 2546}, - {0xc654, 2547}, - {0xc655, 2548}, - {0xc657, 0}, - {0xc658, 1}, - {0xc659, 2}, - {0xc65a, 3}, - {0xc65b, 4}, - {0xc65c, 2549}, - {0xc65d, 2550}, - {0xc65f, 0}, - {0xc660, 2551}, - {0xc662, 0}, - {0xc663, 1}, - {0xc664, 2}, - {0xc665, 3}, - {0xc666, 4}, - {0xc667, 5}, - {0xc668, 6}, - {0xc669, 7}, - {0xc66a, 8}, - {0xc66b, 9}, - {0xc66c, 2552}, - {0xc66e, 0}, - {0xc66f, 2553}, - {0xc671, 2554}, - {0xc673, 0}, - {0xc674, 1}, - {0xc675, 2}, - {0xc676, 3}, - {0xc677, 4}, - {0xc678, 2555}, - {0xc679, 2556}, - {0xc67b, 0}, - {0xc67c, 2557}, - {0xc67e, 0}, - {0xc67f, 1}, - {0xc680, 2558}, - {0xc682, 0}, - {0xc683, 1}, - {0xc684, 2}, - {0xc685, 3}, - {0xc686, 4}, - {0xc687, 5}, - {0xc688, 2559}, - {0xc689, 2560}, - {0xc68b, 2561}, - {0xc68d, 2562}, - {0xc68f, 0}, - {0xc690, 1}, - {0xc691, 2}, - {0xc692, 3}, - {0xc693, 4}, - {0xc694, 2563}, - {0xc695, 2564}, - {0xc697, 0}, - {0xc698, 2565}, - {0xc69a, 0}, - {0xc69b, 1}, - {0xc69c, 2566}, - {0xc69e, 0}, - {0xc69f, 1}, - {0xc6a0, 2}, - {0xc6a1, 3}, - {0xc6a2, 4}, - {0xc6a3, 5}, - {0xc6a4, 2567}, - {0xc6a5, 2568}, - {0xc6a7, 2569}, - {0xc6a9, 2570}, - {0xc6ab, 0}, - {0xc6ac, 1}, - {0xc6ad, 2}, - {0xc6ae, 3}, - {0xc6af, 4}, - {0xc6b0, 2571}, - {0xc6b1, 2572}, - {0xc6b3, 0}, - {0xc6b4, 2573}, - {0xc6b6, 0}, - {0xc6b7, 1}, - {0xc6b8, 2574}, - {0xc6b9, 2575}, - {0xc6ba, 2576}, - {0xc6bc, 0}, - {0xc6bd, 1}, - {0xc6be, 2}, - {0xc6bf, 3}, - {0xc6c0, 2577}, - {0xc6c1, 2578}, - {0xc6c3, 2579}, - {0xc6c5, 2580}, - {0xc6c7, 0}, - {0xc6c8, 1}, - {0xc6c9, 2}, - {0xc6ca, 3}, - {0xc6cb, 4}, - {0xc6cc, 2581}, - {0xc6cd, 2582}, - {0xc6cf, 0}, - {0xc6d0, 2583}, - {0xc6d2, 0}, - {0xc6d3, 1}, - {0xc6d4, 2584}, - {0xc6d6, 0}, - {0xc6d7, 1}, - {0xc6d8, 2}, - {0xc6d9, 3}, - {0xc6da, 4}, - {0xc6db, 5}, - {0xc6dc, 2585}, - {0xc6dd, 2586}, - {0xc6df, 0}, - {0xc6e0, 2587}, - {0xc6e1, 2588}, - {0xc6e3, 0}, - {0xc6e4, 1}, - {0xc6e5, 2}, - {0xc6e6, 3}, - {0xc6e7, 4}, - {0xc6e8, 2589}, - {0xc6e9, 2590}, - {0xc6eb, 0}, - {0xc6ec, 2591}, - {0xc6ee, 0}, - {0xc6ef, 1}, - {0xc6f0, 2592}, - {0xc6f2, 0}, - {0xc6f3, 1}, - {0xc6f4, 2}, - {0xc6f5, 3}, - {0xc6f6, 4}, - {0xc6f7, 5}, - {0xc6f8, 2593}, - {0xc6f9, 2594}, - {0xc6fb, 0}, - {0xc6fc, 1}, - {0xc6fd, 2595}, - {0xc6ff, 0}, - {0xc701, 0}, - {0xc702, 1}, - {0xc703, 2}, - {0xc704, 2596}, - {0xc705, 2597}, - {0xc707, 0}, - {0xc708, 2598}, - {0xc70a, 0}, - {0xc70b, 1}, - {0xc70c, 2599}, - {0xc70e, 0}, - {0xc70f, 1}, - {0xc710, 2}, - {0xc711, 3}, - {0xc712, 4}, - {0xc713, 5}, - {0xc714, 2600}, - {0xc715, 2601}, - {0xc717, 2602}, - {0xc719, 2603}, - {0xc71b, 0}, - {0xc71c, 1}, - {0xc71d, 2}, - {0xc71e, 3}, - {0xc71f, 4}, - {0xc720, 2604}, - {0xc721, 2605}, - {0xc723, 0}, - {0xc724, 2606}, - {0xc726, 0}, - {0xc727, 1}, - {0xc728, 2607}, - {0xc72a, 0}, - {0xc72b, 1}, - {0xc72c, 2}, - {0xc72d, 3}, - {0xc72e, 4}, - {0xc72f, 5}, - {0xc730, 2608}, - {0xc731, 2609}, - {0xc733, 2610}, - {0xc735, 2611}, - {0xc737, 2612}, - {0xc739, 0}, - {0xc73a, 1}, - {0xc73b, 2}, - {0xc73c, 2613}, - {0xc73d, 2614}, - {0xc73f, 0}, - {0xc740, 2615}, - {0xc742, 0}, - {0xc743, 1}, - {0xc744, 2616}, - {0xc746, 0}, - {0xc747, 1}, - {0xc748, 2}, - {0xc749, 3}, - {0xc74a, 2617}, - {0xc74c, 2618}, - {0xc74d, 2619}, - {0xc74f, 2620}, - {0xc751, 2621}, - {0xc752, 2622}, - {0xc753, 2623}, - {0xc754, 2624}, - {0xc755, 2625}, - {0xc756, 2626}, - {0xc757, 2627}, - {0xc758, 2628}, - {0xc75a, 0}, - {0xc75b, 1}, - {0xc75c, 2629}, - {0xc75e, 0}, - {0xc75f, 1}, - {0xc760, 2630}, - {0xc762, 0}, - {0xc763, 1}, - {0xc764, 2}, - {0xc765, 3}, - {0xc766, 4}, - {0xc767, 5}, - {0xc768, 2631}, - {0xc76a, 0}, - {0xc76b, 2632}, - {0xc76d, 0}, - {0xc76e, 1}, - {0xc76f, 2}, - {0xc770, 3}, - {0xc771, 4}, - {0xc772, 5}, - {0xc773, 6}, - {0xc774, 2633}, - {0xc775, 2634}, - {0xc777, 0}, - {0xc778, 2635}, - {0xc77a, 0}, - {0xc77b, 1}, - {0xc77c, 2636}, - {0xc77d, 2637}, - {0xc77e, 2638}, - {0xc780, 0}, - {0xc781, 1}, - {0xc782, 2}, - {0xc783, 2639}, - {0xc784, 2640}, - {0xc785, 2641}, - {0xc787, 2642}, - {0xc788, 2643}, - {0xc789, 2644}, - {0xc78a, 2645}, - {0xc78c, 0}, - {0xc78d, 1}, - {0xc78e, 2646}, - {0xc790, 2647}, - {0xc791, 2648}, - {0xc793, 0}, - {0xc794, 2649}, - {0xc796, 2650}, - {0xc797, 2651}, - {0xc798, 2652}, - {0xc79a, 2653}, - {0xc79c, 0}, - {0xc79d, 1}, - {0xc79e, 2}, - {0xc79f, 3}, - {0xc7a0, 2654}, - {0xc7a1, 2655}, - {0xc7a3, 2656}, - {0xc7a4, 2657}, - {0xc7a5, 2658}, - {0xc7a6, 2659}, - {0xc7a8, 0}, - {0xc7a9, 1}, - {0xc7aa, 2}, - {0xc7ab, 3}, - {0xc7ac, 2660}, - {0xc7ad, 2661}, - {0xc7af, 0}, - {0xc7b0, 2662}, - {0xc7b2, 0}, - {0xc7b3, 1}, - {0xc7b4, 2663}, - {0xc7b6, 0}, - {0xc7b7, 1}, - {0xc7b8, 2}, - {0xc7b9, 3}, - {0xc7ba, 4}, - {0xc7bb, 5}, - {0xc7bc, 2664}, - {0xc7bd, 2665}, - {0xc7bf, 2666}, - {0xc7c0, 2667}, - {0xc7c1, 2668}, - {0xc7c3, 0}, - {0xc7c4, 1}, - {0xc7c5, 2}, - {0xc7c6, 3}, - {0xc7c7, 4}, - {0xc7c8, 2669}, - {0xc7c9, 2670}, - {0xc7cb, 0}, - {0xc7cc, 2671}, - {0xc7ce, 2672}, - {0xc7d0, 2673}, - {0xc7d2, 0}, - {0xc7d3, 1}, - {0xc7d4, 2}, - {0xc7d5, 3}, - {0xc7d6, 4}, - {0xc7d7, 5}, - {0xc7d8, 2674}, - {0xc7da, 0}, - {0xc7db, 1}, - {0xc7dc, 2}, - {0xc7dd, 2675}, - {0xc7df, 0}, - {0xc7e0, 1}, - {0xc7e1, 2}, - {0xc7e2, 3}, - {0xc7e3, 4}, - {0xc7e4, 2676}, - {0xc7e6, 0}, - {0xc7e7, 1}, - {0xc7e8, 2677}, - {0xc7ea, 0}, - {0xc7eb, 1}, - {0xc7ec, 2678}, - {0xc7ee, 0}, - {0xc7ef, 1}, - {0xc7f0, 2}, - {0xc7f1, 3}, - {0xc7f2, 4}, - {0xc7f3, 5}, - {0xc7f4, 6}, - {0xc7f5, 7}, - {0xc7f6, 8}, - {0xc7f7, 9}, - {0xc7f8, 10}, - {0xc7f9, 11}, - {0xc7fa, 12}, - {0xc7fb, 13}, - {0xc7fc, 14}, - {0xc7fd, 15}, - {0xc7fe, 16}, - {0xc7ff, 17}, - {0xc800, 2679}, - {0xc801, 2680}, - {0xc803, 0}, - {0xc804, 2681}, - {0xc806, 0}, - {0xc807, 1}, - {0xc808, 2682}, - {0xc80a, 2683}, - {0xc80c, 0}, - {0xc80d, 1}, - {0xc80e, 2}, - {0xc80f, 3}, - {0xc810, 2684}, - {0xc811, 2685}, - {0xc813, 2686}, - {0xc815, 2687}, - {0xc816, 2688}, - {0xc818, 0}, - {0xc819, 1}, - {0xc81a, 2}, - {0xc81b, 3}, - {0xc81c, 2689}, - {0xc81d, 2690}, - {0xc81f, 0}, - {0xc820, 2691}, - {0xc822, 0}, - {0xc823, 1}, - {0xc824, 2692}, - {0xc826, 0}, - {0xc827, 1}, - {0xc828, 2}, - {0xc829, 3}, - {0xc82a, 4}, - {0xc82b, 5}, - {0xc82c, 2693}, - {0xc82d, 2694}, - {0xc82f, 2695}, - {0xc831, 2696}, - {0xc833, 0}, - {0xc834, 1}, - {0xc835, 2}, - {0xc836, 3}, - {0xc837, 4}, - {0xc838, 2697}, - {0xc83a, 0}, - {0xc83b, 1}, - {0xc83c, 2698}, - {0xc83e, 0}, - {0xc83f, 1}, - {0xc840, 2699}, - {0xc842, 0}, - {0xc843, 1}, - {0xc844, 2}, - {0xc845, 3}, - {0xc846, 4}, - {0xc847, 5}, - {0xc848, 2700}, - {0xc849, 2701}, - {0xc84b, 0}, - {0xc84c, 2702}, - {0xc84d, 2703}, - {0xc84f, 0}, - {0xc850, 1}, - {0xc851, 2}, - {0xc852, 3}, - {0xc853, 4}, - {0xc854, 2704}, - {0xc856, 0}, - {0xc857, 1}, - {0xc858, 2}, - {0xc859, 3}, - {0xc85a, 4}, - {0xc85b, 5}, - {0xc85c, 6}, - {0xc85d, 7}, - {0xc85e, 8}, - {0xc85f, 9}, - {0xc860, 10}, - {0xc861, 11}, - {0xc862, 12}, - {0xc863, 13}, - {0xc864, 14}, - {0xc865, 15}, - {0xc866, 16}, - {0xc867, 17}, - {0xc868, 18}, - {0xc869, 19}, - {0xc86a, 20}, - {0xc86b, 21}, - {0xc86c, 22}, - {0xc86d, 23}, - {0xc86e, 24}, - {0xc86f, 25}, - {0xc870, 2705}, - {0xc871, 2706}, - {0xc873, 0}, - {0xc874, 2707}, - {0xc876, 0}, - {0xc877, 1}, - {0xc878, 2708}, - {0xc87a, 2709}, - {0xc87c, 0}, - {0xc87d, 1}, - {0xc87e, 2}, - {0xc87f, 3}, - {0xc880, 2710}, - {0xc881, 2711}, - {0xc883, 2712}, - {0xc885, 2713}, - {0xc886, 2714}, - {0xc887, 2715}, - {0xc889, 0}, - {0xc88a, 1}, - {0xc88b, 2716}, - {0xc88c, 2717}, - {0xc88d, 2718}, - {0xc88f, 0}, - {0xc890, 1}, - {0xc891, 2}, - {0xc892, 3}, - {0xc893, 4}, - {0xc894, 2719}, - {0xc896, 0}, - {0xc897, 1}, - {0xc898, 2}, - {0xc899, 3}, - {0xc89a, 4}, - {0xc89b, 5}, - {0xc89c, 6}, - {0xc89d, 2720}, - {0xc89f, 2721}, - {0xc8a1, 2722}, - {0xc8a3, 0}, - {0xc8a4, 1}, - {0xc8a5, 2}, - {0xc8a6, 3}, - {0xc8a7, 4}, - {0xc8a8, 2723}, - {0xc8aa, 0}, - {0xc8ab, 1}, - {0xc8ac, 2}, - {0xc8ad, 3}, - {0xc8ae, 4}, - {0xc8af, 5}, - {0xc8b0, 6}, - {0xc8b1, 7}, - {0xc8b2, 8}, - {0xc8b3, 9}, - {0xc8b4, 10}, - {0xc8b5, 11}, - {0xc8b6, 12}, - {0xc8b7, 13}, - {0xc8b8, 14}, - {0xc8b9, 15}, - {0xc8ba, 16}, - {0xc8bb, 17}, - {0xc8bc, 2724}, - {0xc8bd, 2725}, - {0xc8bf, 0}, - {0xc8c0, 1}, - {0xc8c1, 2}, - {0xc8c2, 3}, - {0xc8c3, 4}, - {0xc8c4, 2726}, - {0xc8c6, 0}, - {0xc8c7, 1}, - {0xc8c8, 2727}, - {0xc8ca, 0}, - {0xc8cb, 1}, - {0xc8cc, 2728}, - {0xc8ce, 0}, - {0xc8cf, 1}, - {0xc8d0, 2}, - {0xc8d1, 3}, - {0xc8d2, 4}, - {0xc8d3, 5}, - {0xc8d4, 2729}, - {0xc8d5, 2730}, - {0xc8d7, 2731}, - {0xc8d9, 2732}, - {0xc8db, 0}, - {0xc8dc, 1}, - {0xc8dd, 2}, - {0xc8de, 3}, - {0xc8df, 4}, - {0xc8e0, 2733}, - {0xc8e1, 2734}, - {0xc8e3, 0}, - {0xc8e4, 2735}, - {0xc8e6, 0}, - {0xc8e7, 1}, - {0xc8e8, 2}, - {0xc8e9, 3}, - {0xc8ea, 4}, - {0xc8eb, 5}, - {0xc8ec, 6}, - {0xc8ed, 7}, - {0xc8ee, 8}, - {0xc8ef, 9}, - {0xc8f0, 10}, - {0xc8f1, 11}, - {0xc8f2, 12}, - {0xc8f3, 13}, - {0xc8f4, 14}, - {0xc8f5, 2736}, - {0xc8f7, 0}, - {0xc8f8, 1}, - {0xc8f9, 2}, - {0xc8fa, 3}, - {0xc8fb, 4}, - {0xc8fc, 2737}, - {0xc8fd, 2738}, - {0xc8ff, 0}, - {0xc900, 2739}, - {0xc902, 0}, - {0xc903, 1}, - {0xc904, 2740}, - {0xc905, 2741}, - {0xc906, 2742}, - {0xc908, 0}, - {0xc909, 1}, - {0xc90a, 2}, - {0xc90b, 3}, - {0xc90c, 2743}, - {0xc90d, 2744}, - {0xc90f, 2745}, - {0xc911, 2746}, - {0xc913, 0}, - {0xc914, 1}, - {0xc915, 2}, - {0xc916, 3}, - {0xc917, 4}, - {0xc918, 2747}, - {0xc91a, 0}, - {0xc91b, 1}, - {0xc91c, 2}, - {0xc91d, 3}, - {0xc91e, 4}, - {0xc91f, 5}, - {0xc920, 6}, - {0xc921, 7}, - {0xc922, 8}, - {0xc923, 9}, - {0xc924, 10}, - {0xc925, 11}, - {0xc926, 12}, - {0xc927, 13}, - {0xc928, 14}, - {0xc929, 15}, - {0xc92a, 16}, - {0xc92b, 17}, - {0xc92c, 2748}, - {0xc92e, 0}, - {0xc92f, 1}, - {0xc930, 2}, - {0xc931, 3}, - {0xc932, 4}, - {0xc933, 5}, - {0xc934, 2749}, - {0xc936, 0}, - {0xc937, 1}, - {0xc938, 2}, - {0xc939, 3}, - {0xc93a, 4}, - {0xc93b, 5}, - {0xc93c, 6}, - {0xc93d, 7}, - {0xc93e, 8}, - {0xc93f, 9}, - {0xc940, 10}, - {0xc941, 11}, - {0xc942, 12}, - {0xc943, 13}, - {0xc944, 14}, - {0xc945, 15}, - {0xc946, 16}, - {0xc947, 17}, - {0xc948, 18}, - {0xc949, 19}, - {0xc94a, 20}, - {0xc94b, 21}, - {0xc94c, 22}, - {0xc94d, 23}, - {0xc94e, 24}, - {0xc94f, 25}, - {0xc950, 2750}, - {0xc951, 2751}, - {0xc953, 0}, - {0xc954, 2752}, - {0xc956, 0}, - {0xc957, 1}, - {0xc958, 2753}, - {0xc95a, 0}, - {0xc95b, 1}, - {0xc95c, 2}, - {0xc95d, 3}, - {0xc95e, 4}, - {0xc95f, 5}, - {0xc960, 2754}, - {0xc961, 2755}, - {0xc963, 2756}, - {0xc965, 0}, - {0xc966, 1}, - {0xc967, 2}, - {0xc968, 3}, - {0xc969, 4}, - {0xc96a, 5}, - {0xc96b, 6}, - {0xc96c, 2757}, - {0xc96e, 0}, - {0xc96f, 1}, - {0xc970, 2758}, - {0xc972, 0}, - {0xc973, 1}, - {0xc974, 2759}, - {0xc976, 0}, - {0xc977, 1}, - {0xc978, 2}, - {0xc979, 3}, - {0xc97a, 4}, - {0xc97b, 5}, - {0xc97c, 2760}, - {0xc97e, 0}, - {0xc97f, 1}, - {0xc980, 2}, - {0xc981, 3}, - {0xc982, 4}, - {0xc983, 5}, - {0xc984, 6}, - {0xc985, 7}, - {0xc986, 8}, - {0xc987, 9}, - {0xc988, 2761}, - {0xc989, 2762}, - {0xc98b, 0}, - {0xc98c, 2763}, - {0xc98e, 0}, - {0xc98f, 1}, - {0xc990, 2764}, - {0xc992, 0}, - {0xc993, 1}, - {0xc994, 2}, - {0xc995, 3}, - {0xc996, 4}, - {0xc997, 5}, - {0xc998, 2765}, - {0xc999, 2766}, - {0xc99b, 2767}, - {0xc99d, 2768}, - {0xc99f, 0}, - {0xc9a0, 1}, - {0xc9a1, 2}, - {0xc9a2, 3}, - {0xc9a3, 4}, - {0xc9a4, 5}, - {0xc9a5, 6}, - {0xc9a6, 7}, - {0xc9a7, 8}, - {0xc9a8, 9}, - {0xc9a9, 10}, - {0xc9aa, 11}, - {0xc9ab, 12}, - {0xc9ac, 13}, - {0xc9ad, 14}, - {0xc9ae, 15}, - {0xc9af, 16}, - {0xc9b0, 17}, - {0xc9b1, 18}, - {0xc9b2, 19}, - {0xc9b3, 20}, - {0xc9b4, 21}, - {0xc9b5, 22}, - {0xc9b6, 23}, - {0xc9b7, 24}, - {0xc9b8, 25}, - {0xc9b9, 26}, - {0xc9ba, 27}, - {0xc9bb, 28}, - {0xc9bc, 29}, - {0xc9bd, 30}, - {0xc9be, 31}, - {0xc9bf, 32}, - {0xc9c0, 2769}, - {0xc9c1, 2770}, - {0xc9c3, 0}, - {0xc9c4, 2771}, - {0xc9c6, 0}, - {0xc9c7, 2772}, - {0xc9c8, 2773}, - {0xc9ca, 2774}, - {0xc9cc, 0}, - {0xc9cd, 1}, - {0xc9ce, 2}, - {0xc9cf, 3}, - {0xc9d0, 2775}, - {0xc9d1, 2776}, - {0xc9d3, 2777}, - {0xc9d5, 2778}, - {0xc9d6, 2779}, - {0xc9d8, 0}, - {0xc9d9, 2780}, - {0xc9da, 2781}, - {0xc9dc, 2782}, - {0xc9dd, 2783}, - {0xc9df, 0}, - {0xc9e0, 2784}, - {0xc9e2, 2785}, - {0xc9e4, 2786}, - {0xc9e6, 0}, - {0xc9e7, 2787}, - {0xc9e9, 0}, - {0xc9ea, 1}, - {0xc9eb, 2}, - {0xc9ec, 2788}, - {0xc9ed, 2789}, - {0xc9ef, 2790}, - {0xc9f0, 2791}, - {0xc9f1, 2792}, - {0xc9f3, 0}, - {0xc9f4, 1}, - {0xc9f5, 2}, - {0xc9f6, 3}, - {0xc9f7, 4}, - {0xc9f8, 2793}, - {0xc9f9, 2794}, - {0xc9fb, 0}, - {0xc9fc, 2795}, - {0xc9fe, 0}, - {0xc9ff, 1}, - {0xca00, 2796}, - {0xca02, 0}, - {0xca03, 1}, - {0xca04, 2}, - {0xca05, 3}, - {0xca06, 4}, - {0xca07, 5}, - {0xca08, 2797}, - {0xca09, 2798}, - {0xca0b, 2799}, - {0xca0c, 2800}, - {0xca0d, 2801}, - {0xca0f, 0}, - {0xca10, 1}, - {0xca11, 2}, - {0xca12, 3}, - {0xca13, 4}, - {0xca14, 2802}, - {0xca16, 0}, - {0xca17, 1}, - {0xca18, 2803}, - {0xca1a, 0}, - {0xca1b, 1}, - {0xca1c, 2}, - {0xca1d, 3}, - {0xca1e, 4}, - {0xca1f, 5}, - {0xca20, 6}, - {0xca21, 7}, - {0xca22, 8}, - {0xca23, 9}, - {0xca24, 10}, - {0xca25, 11}, - {0xca26, 12}, - {0xca27, 13}, - {0xca28, 14}, - {0xca29, 2804}, - {0xca2b, 0}, - {0xca2c, 1}, - {0xca2d, 2}, - {0xca2e, 3}, - {0xca2f, 4}, - {0xca30, 5}, - {0xca31, 6}, - {0xca32, 7}, - {0xca33, 8}, - {0xca34, 9}, - {0xca35, 10}, - {0xca36, 11}, - {0xca37, 12}, - {0xca38, 13}, - {0xca39, 14}, - {0xca3a, 15}, - {0xca3b, 16}, - {0xca3c, 17}, - {0xca3d, 18}, - {0xca3e, 19}, - {0xca3f, 20}, - {0xca40, 21}, - {0xca41, 22}, - {0xca42, 23}, - {0xca43, 24}, - {0xca44, 25}, - {0xca45, 26}, - {0xca46, 27}, - {0xca47, 28}, - {0xca48, 29}, - {0xca49, 30}, - {0xca4a, 31}, - {0xca4b, 32}, - {0xca4c, 2805}, - {0xca4d, 2806}, - {0xca4f, 0}, - {0xca50, 2807}, - {0xca52, 0}, - {0xca53, 1}, - {0xca54, 2808}, - {0xca56, 0}, - {0xca57, 1}, - {0xca58, 2}, - {0xca59, 3}, - {0xca5a, 4}, - {0xca5b, 5}, - {0xca5c, 2809}, - {0xca5d, 2810}, - {0xca5f, 2811}, - {0xca60, 2812}, - {0xca61, 2813}, - {0xca63, 0}, - {0xca64, 1}, - {0xca65, 2}, - {0xca66, 3}, - {0xca67, 4}, - {0xca68, 2814}, - {0xca6a, 0}, - {0xca6b, 1}, - {0xca6c, 2}, - {0xca6d, 3}, - {0xca6e, 4}, - {0xca6f, 5}, - {0xca70, 6}, - {0xca71, 7}, - {0xca72, 8}, - {0xca73, 9}, - {0xca74, 10}, - {0xca75, 11}, - {0xca76, 12}, - {0xca77, 13}, - {0xca78, 14}, - {0xca79, 15}, - {0xca7a, 16}, - {0xca7b, 17}, - {0xca7c, 18}, - {0xca7d, 2815}, - {0xca7f, 0}, - {0xca80, 1}, - {0xca81, 2}, - {0xca82, 3}, - {0xca83, 4}, - {0xca84, 2816}, - {0xca86, 0}, - {0xca87, 1}, - {0xca88, 2}, - {0xca89, 3}, - {0xca8a, 4}, - {0xca8b, 5}, - {0xca8c, 6}, - {0xca8d, 7}, - {0xca8e, 8}, - {0xca8f, 9}, - {0xca90, 10}, - {0xca91, 11}, - {0xca92, 12}, - {0xca93, 13}, - {0xca94, 14}, - {0xca95, 15}, - {0xca96, 16}, - {0xca97, 17}, - {0xca98, 2817}, - {0xca9a, 0}, - {0xca9b, 1}, - {0xca9c, 2}, - {0xca9d, 3}, - {0xca9e, 4}, - {0xca9f, 5}, - {0xcaa0, 6}, - {0xcaa1, 7}, - {0xcaa2, 8}, - {0xcaa3, 9}, - {0xcaa4, 10}, - {0xcaa5, 11}, - {0xcaa6, 12}, - {0xcaa7, 13}, - {0xcaa8, 14}, - {0xcaa9, 15}, - {0xcaaa, 16}, - {0xcaab, 17}, - {0xcaac, 18}, - {0xcaad, 19}, - {0xcaae, 20}, - {0xcaaf, 21}, - {0xcab0, 22}, - {0xcab1, 23}, - {0xcab2, 24}, - {0xcab3, 25}, - {0xcab4, 26}, - {0xcab5, 27}, - {0xcab6, 28}, - {0xcab7, 29}, - {0xcab8, 30}, - {0xcab9, 31}, - {0xcaba, 32}, - {0xcabb, 33}, - {0xcabc, 2818}, - {0xcabd, 2819}, - {0xcabf, 0}, - {0xcac0, 2820}, - {0xcac2, 0}, - {0xcac3, 1}, - {0xcac4, 2821}, - {0xcac6, 0}, - {0xcac7, 1}, - {0xcac8, 2}, - {0xcac9, 3}, - {0xcaca, 4}, - {0xcacb, 5}, - {0xcacc, 2822}, - {0xcacd, 2823}, - {0xcacf, 2824}, - {0xcad1, 2825}, - {0xcad3, 2826}, - {0xcad5, 0}, - {0xcad6, 1}, - {0xcad7, 2}, - {0xcad8, 2827}, - {0xcad9, 2828}, - {0xcadb, 0}, - {0xcadc, 1}, - {0xcadd, 2}, - {0xcade, 3}, - {0xcadf, 4}, - {0xcae0, 2829}, - {0xcae2, 0}, - {0xcae3, 1}, - {0xcae4, 2}, - {0xcae5, 3}, - {0xcae6, 4}, - {0xcae7, 5}, - {0xcae8, 6}, - {0xcae9, 7}, - {0xcaea, 8}, - {0xcaeb, 9}, - {0xcaec, 2830}, - {0xcaee, 0}, - {0xcaef, 1}, - {0xcaf0, 2}, - {0xcaf1, 3}, - {0xcaf2, 4}, - {0xcaf3, 5}, - {0xcaf4, 2831}, - {0xcaf6, 0}, - {0xcaf7, 1}, - {0xcaf8, 2}, - {0xcaf9, 3}, - {0xcafa, 4}, - {0xcafb, 5}, - {0xcafc, 6}, - {0xcafd, 7}, - {0xcafe, 8}, - {0xcaff, 9}, - {0xcb01, 0}, - {0xcb02, 1}, - {0xcb03, 2}, - {0xcb04, 3}, - {0xcb05, 4}, - {0xcb06, 5}, - {0xcb07, 6}, - {0xcb08, 2832}, - {0xcb0a, 0}, - {0xcb0b, 1}, - {0xcb0c, 2}, - {0xcb0d, 3}, - {0xcb0e, 4}, - {0xcb0f, 5}, - {0xcb10, 2833}, - {0xcb12, 0}, - {0xcb13, 1}, - {0xcb14, 2834}, - {0xcb16, 0}, - {0xcb17, 1}, - {0xcb18, 2835}, - {0xcb1a, 0}, - {0xcb1b, 1}, - {0xcb1c, 2}, - {0xcb1d, 3}, - {0xcb1e, 4}, - {0xcb1f, 5}, - {0xcb20, 2836}, - {0xcb21, 2837}, - {0xcb23, 0}, - {0xcb24, 1}, - {0xcb25, 2}, - {0xcb26, 3}, - {0xcb27, 4}, - {0xcb28, 5}, - {0xcb29, 6}, - {0xcb2a, 7}, - {0xcb2b, 8}, - {0xcb2c, 9}, - {0xcb2d, 10}, - {0xcb2e, 11}, - {0xcb2f, 12}, - {0xcb30, 13}, - {0xcb31, 14}, - {0xcb32, 15}, - {0xcb33, 16}, - {0xcb34, 17}, - {0xcb35, 18}, - {0xcb36, 19}, - {0xcb37, 20}, - {0xcb38, 21}, - {0xcb39, 22}, - {0xcb3a, 23}, - {0xcb3b, 24}, - {0xcb3c, 25}, - {0xcb3d, 26}, - {0xcb3e, 27}, - {0xcb3f, 28}, - {0xcb40, 29}, - {0xcb41, 2838}, - {0xcb43, 0}, - {0xcb44, 1}, - {0xcb45, 2}, - {0xcb46, 3}, - {0xcb47, 4}, - {0xcb48, 2839}, - {0xcb49, 2840}, - {0xcb4b, 0}, - {0xcb4c, 2841}, - {0xcb4e, 0}, - {0xcb4f, 1}, - {0xcb50, 2842}, - {0xcb52, 0}, - {0xcb53, 1}, - {0xcb54, 2}, - {0xcb55, 3}, - {0xcb56, 4}, - {0xcb57, 5}, - {0xcb58, 2843}, - {0xcb59, 2844}, - {0xcb5b, 0}, - {0xcb5c, 1}, - {0xcb5d, 2845}, - {0xcb5f, 0}, - {0xcb60, 1}, - {0xcb61, 2}, - {0xcb62, 3}, - {0xcb63, 4}, - {0xcb64, 2846}, - {0xcb66, 0}, - {0xcb67, 1}, - {0xcb68, 2}, - {0xcb69, 3}, - {0xcb6a, 4}, - {0xcb6b, 5}, - {0xcb6c, 6}, - {0xcb6d, 7}, - {0xcb6e, 8}, - {0xcb6f, 9}, - {0xcb70, 10}, - {0xcb71, 11}, - {0xcb72, 12}, - {0xcb73, 13}, - {0xcb74, 14}, - {0xcb75, 15}, - {0xcb76, 16}, - {0xcb77, 17}, - {0xcb78, 2847}, - {0xcb79, 2848}, - {0xcb7b, 0}, - {0xcb7c, 1}, - {0xcb7d, 2}, - {0xcb7e, 3}, - {0xcb7f, 4}, - {0xcb80, 5}, - {0xcb81, 6}, - {0xcb82, 7}, - {0xcb83, 8}, - {0xcb84, 9}, - {0xcb85, 10}, - {0xcb86, 11}, - {0xcb87, 12}, - {0xcb88, 13}, - {0xcb89, 14}, - {0xcb8a, 15}, - {0xcb8b, 16}, - {0xcb8c, 17}, - {0xcb8d, 18}, - {0xcb8e, 19}, - {0xcb8f, 20}, - {0xcb90, 21}, - {0xcb91, 22}, - {0xcb92, 23}, - {0xcb93, 24}, - {0xcb94, 25}, - {0xcb95, 26}, - {0xcb96, 27}, - {0xcb97, 28}, - {0xcb98, 29}, - {0xcb99, 30}, - {0xcb9a, 31}, - {0xcb9b, 32}, - {0xcb9c, 2849}, - {0xcb9e, 0}, - {0xcb9f, 1}, - {0xcba0, 2}, - {0xcba1, 3}, - {0xcba2, 4}, - {0xcba3, 5}, - {0xcba4, 6}, - {0xcba5, 7}, - {0xcba6, 8}, - {0xcba7, 9}, - {0xcba8, 10}, - {0xcba9, 11}, - {0xcbaa, 12}, - {0xcbab, 13}, - {0xcbac, 14}, - {0xcbad, 15}, - {0xcbae, 16}, - {0xcbaf, 17}, - {0xcbb0, 18}, - {0xcbb1, 19}, - {0xcbb2, 20}, - {0xcbb3, 21}, - {0xcbb4, 22}, - {0xcbb5, 23}, - {0xcbb6, 24}, - {0xcbb7, 25}, - {0xcbb8, 2850}, - {0xcbba, 0}, - {0xcbbb, 1}, - {0xcbbc, 2}, - {0xcbbd, 3}, - {0xcbbe, 4}, - {0xcbbf, 5}, - {0xcbc0, 6}, - {0xcbc1, 7}, - {0xcbc2, 8}, - {0xcbc3, 9}, - {0xcbc4, 10}, - {0xcbc5, 11}, - {0xcbc6, 12}, - {0xcbc7, 13}, - {0xcbc8, 14}, - {0xcbc9, 15}, - {0xcbca, 16}, - {0xcbcb, 17}, - {0xcbcc, 18}, - {0xcbcd, 19}, - {0xcbce, 20}, - {0xcbcf, 21}, - {0xcbd0, 22}, - {0xcbd1, 23}, - {0xcbd2, 24}, - {0xcbd3, 25}, - {0xcbd4, 2851}, - {0xcbd6, 0}, - {0xcbd7, 1}, - {0xcbd8, 2}, - {0xcbd9, 3}, - {0xcbda, 4}, - {0xcbdb, 5}, - {0xcbdc, 6}, - {0xcbdd, 7}, - {0xcbde, 8}, - {0xcbdf, 9}, - {0xcbe0, 10}, - {0xcbe1, 11}, - {0xcbe2, 12}, - {0xcbe3, 13}, - {0xcbe4, 2852}, - {0xcbe6, 0}, - {0xcbe7, 2853}, - {0xcbe9, 2854}, - {0xcbeb, 0}, - {0xcbec, 1}, - {0xcbed, 2}, - {0xcbee, 3}, - {0xcbef, 4}, - {0xcbf0, 5}, - {0xcbf1, 6}, - {0xcbf2, 7}, - {0xcbf3, 8}, - {0xcbf4, 9}, - {0xcbf5, 10}, - {0xcbf6, 11}, - {0xcbf7, 12}, - {0xcbf8, 13}, - {0xcbf9, 14}, - {0xcbfa, 15}, - {0xcbfb, 16}, - {0xcbfc, 17}, - {0xcbfd, 18}, - {0xcbfe, 19}, - {0xcbff, 20}, - {0xcc01, 0}, - {0xcc02, 1}, - {0xcc03, 2}, - {0xcc04, 3}, - {0xcc05, 4}, - {0xcc06, 5}, - {0xcc07, 6}, - {0xcc08, 7}, - {0xcc09, 8}, - {0xcc0a, 9}, - {0xcc0b, 10}, - {0xcc0c, 2855}, - {0xcc0d, 2856}, - {0xcc0f, 0}, - {0xcc10, 2857}, - {0xcc12, 0}, - {0xcc13, 1}, - {0xcc14, 2858}, - {0xcc16, 0}, - {0xcc17, 1}, - {0xcc18, 2}, - {0xcc19, 3}, - {0xcc1a, 4}, - {0xcc1b, 5}, - {0xcc1c, 2859}, - {0xcc1d, 2860}, - {0xcc1f, 0}, - {0xcc20, 1}, - {0xcc21, 2861}, - {0xcc22, 2862}, - {0xcc24, 0}, - {0xcc25, 1}, - {0xcc26, 2}, - {0xcc27, 2863}, - {0xcc28, 2864}, - {0xcc29, 2865}, - {0xcc2b, 0}, - {0xcc2c, 2866}, - {0xcc2e, 2867}, - {0xcc30, 2868}, - {0xcc32, 0}, - {0xcc33, 1}, - {0xcc34, 2}, - {0xcc35, 3}, - {0xcc36, 4}, - {0xcc37, 5}, - {0xcc38, 2869}, - {0xcc39, 2870}, - {0xcc3b, 2871}, - {0xcc3c, 2872}, - {0xcc3d, 2873}, - {0xcc3e, 2874}, - {0xcc40, 0}, - {0xcc41, 1}, - {0xcc42, 2}, - {0xcc43, 3}, - {0xcc44, 2875}, - {0xcc45, 2876}, - {0xcc47, 0}, - {0xcc48, 2877}, - {0xcc4a, 0}, - {0xcc4b, 1}, - {0xcc4c, 2878}, - {0xcc4e, 0}, - {0xcc4f, 1}, - {0xcc50, 2}, - {0xcc51, 3}, - {0xcc52, 4}, - {0xcc53, 5}, - {0xcc54, 2879}, - {0xcc55, 2880}, - {0xcc57, 2881}, - {0xcc58, 2882}, - {0xcc59, 2883}, - {0xcc5b, 0}, - {0xcc5c, 1}, - {0xcc5d, 2}, - {0xcc5e, 3}, - {0xcc5f, 4}, - {0xcc60, 2884}, - {0xcc62, 0}, - {0xcc63, 1}, - {0xcc64, 2885}, - {0xcc66, 2886}, - {0xcc68, 2887}, - {0xcc6a, 0}, - {0xcc6b, 1}, - {0xcc6c, 2}, - {0xcc6d, 3}, - {0xcc6e, 4}, - {0xcc6f, 5}, - {0xcc70, 2888}, - {0xcc72, 0}, - {0xcc73, 1}, - {0xcc74, 2}, - {0xcc75, 2889}, - {0xcc77, 0}, - {0xcc78, 1}, - {0xcc79, 2}, - {0xcc7a, 3}, - {0xcc7b, 4}, - {0xcc7c, 5}, - {0xcc7d, 6}, - {0xcc7e, 7}, - {0xcc7f, 8}, - {0xcc80, 9}, - {0xcc81, 10}, - {0xcc82, 11}, - {0xcc83, 12}, - {0xcc84, 13}, - {0xcc85, 14}, - {0xcc86, 15}, - {0xcc87, 16}, - {0xcc88, 17}, - {0xcc89, 18}, - {0xcc8a, 19}, - {0xcc8b, 20}, - {0xcc8c, 21}, - {0xcc8d, 22}, - {0xcc8e, 23}, - {0xcc8f, 24}, - {0xcc90, 25}, - {0xcc91, 26}, - {0xcc92, 27}, - {0xcc93, 28}, - {0xcc94, 29}, - {0xcc95, 30}, - {0xcc96, 31}, - {0xcc97, 32}, - {0xcc98, 2890}, - {0xcc99, 2891}, - {0xcc9b, 0}, - {0xcc9c, 2892}, - {0xcc9e, 0}, - {0xcc9f, 1}, - {0xcca0, 2893}, - {0xcca2, 0}, - {0xcca3, 1}, - {0xcca4, 2}, - {0xcca5, 3}, - {0xcca6, 4}, - {0xcca7, 5}, - {0xcca8, 2894}, - {0xcca9, 2895}, - {0xccab, 2896}, - {0xccac, 2897}, - {0xccad, 2898}, - {0xccaf, 0}, - {0xccb0, 1}, - {0xccb1, 2}, - {0xccb2, 3}, - {0xccb3, 4}, - {0xccb4, 2899}, - {0xccb5, 2900}, - {0xccb7, 0}, - {0xccb8, 2901}, - {0xccba, 0}, - {0xccbb, 1}, - {0xccbc, 2902}, - {0xccbe, 0}, - {0xccbf, 1}, - {0xccc0, 2}, - {0xccc1, 3}, - {0xccc2, 4}, - {0xccc3, 5}, - {0xccc4, 2903}, - {0xccc5, 2904}, - {0xccc7, 2905}, - {0xccc9, 2906}, - {0xcccb, 0}, - {0xcccc, 1}, - {0xcccd, 2}, - {0xccce, 3}, - {0xcccf, 4}, - {0xccd0, 2907}, - {0xccd2, 0}, - {0xccd3, 1}, - {0xccd4, 2908}, - {0xccd6, 0}, - {0xccd7, 1}, - {0xccd8, 2}, - {0xccd9, 3}, - {0xccda, 4}, - {0xccdb, 5}, - {0xccdc, 6}, - {0xccdd, 7}, - {0xccde, 8}, - {0xccdf, 9}, - {0xcce0, 10}, - {0xcce1, 11}, - {0xcce2, 12}, - {0xcce3, 13}, - {0xcce4, 2909}, - {0xcce6, 0}, - {0xcce7, 1}, - {0xcce8, 2}, - {0xcce9, 3}, - {0xccea, 4}, - {0xcceb, 5}, - {0xccec, 2910}, - {0xccee, 0}, - {0xccef, 1}, - {0xccf0, 2911}, - {0xccf2, 0}, - {0xccf3, 1}, - {0xccf4, 2}, - {0xccf5, 3}, - {0xccf6, 4}, - {0xccf7, 5}, - {0xccf8, 6}, - {0xccf9, 7}, - {0xccfa, 8}, - {0xccfb, 9}, - {0xccfc, 10}, - {0xccfd, 11}, - {0xccfe, 12}, - {0xccff, 13}, - {0xcd01, 2912}, - {0xcd03, 0}, - {0xcd04, 1}, - {0xcd05, 2}, - {0xcd06, 3}, - {0xcd07, 4}, - {0xcd08, 2913}, - {0xcd09, 2914}, - {0xcd0b, 0}, - {0xcd0c, 2915}, - {0xcd0e, 0}, - {0xcd0f, 1}, - {0xcd10, 2916}, - {0xcd12, 0}, - {0xcd13, 1}, - {0xcd14, 2}, - {0xcd15, 3}, - {0xcd16, 4}, - {0xcd17, 5}, - {0xcd18, 2917}, - {0xcd19, 2918}, - {0xcd1b, 2919}, - {0xcd1d, 2920}, - {0xcd1f, 0}, - {0xcd20, 1}, - {0xcd21, 2}, - {0xcd22, 3}, - {0xcd23, 4}, - {0xcd24, 2921}, - {0xcd26, 0}, - {0xcd27, 1}, - {0xcd28, 2922}, - {0xcd2a, 0}, - {0xcd2b, 1}, - {0xcd2c, 2923}, - {0xcd2e, 0}, - {0xcd2f, 1}, - {0xcd30, 2}, - {0xcd31, 3}, - {0xcd32, 4}, - {0xcd33, 5}, - {0xcd34, 6}, - {0xcd35, 7}, - {0xcd36, 8}, - {0xcd37, 9}, - {0xcd38, 10}, - {0xcd39, 2924}, - {0xcd3b, 0}, - {0xcd3c, 1}, - {0xcd3d, 2}, - {0xcd3e, 3}, - {0xcd3f, 4}, - {0xcd40, 5}, - {0xcd41, 6}, - {0xcd42, 7}, - {0xcd43, 8}, - {0xcd44, 9}, - {0xcd45, 10}, - {0xcd46, 11}, - {0xcd47, 12}, - {0xcd48, 13}, - {0xcd49, 14}, - {0xcd4a, 15}, - {0xcd4b, 16}, - {0xcd4c, 17}, - {0xcd4d, 18}, - {0xcd4e, 19}, - {0xcd4f, 20}, - {0xcd50, 21}, - {0xcd51, 22}, - {0xcd52, 23}, - {0xcd53, 24}, - {0xcd54, 25}, - {0xcd55, 26}, - {0xcd56, 27}, - {0xcd57, 28}, - {0xcd58, 29}, - {0xcd59, 30}, - {0xcd5a, 31}, - {0xcd5b, 32}, - {0xcd5c, 2925}, - {0xcd5e, 0}, - {0xcd5f, 1}, - {0xcd60, 2926}, - {0xcd62, 0}, - {0xcd63, 1}, - {0xcd64, 2927}, - {0xcd66, 0}, - {0xcd67, 1}, - {0xcd68, 2}, - {0xcd69, 3}, - {0xcd6a, 4}, - {0xcd6b, 5}, - {0xcd6c, 2928}, - {0xcd6d, 2929}, - {0xcd6f, 2930}, - {0xcd71, 2931}, - {0xcd73, 0}, - {0xcd74, 1}, - {0xcd75, 2}, - {0xcd76, 3}, - {0xcd77, 4}, - {0xcd78, 2932}, - {0xcd7a, 0}, - {0xcd7b, 1}, - {0xcd7c, 2}, - {0xcd7d, 3}, - {0xcd7e, 4}, - {0xcd7f, 5}, - {0xcd80, 6}, - {0xcd81, 7}, - {0xcd82, 8}, - {0xcd83, 9}, - {0xcd84, 10}, - {0xcd85, 11}, - {0xcd86, 12}, - {0xcd87, 13}, - {0xcd88, 2933}, - {0xcd8a, 0}, - {0xcd8b, 1}, - {0xcd8c, 2}, - {0xcd8d, 3}, - {0xcd8e, 4}, - {0xcd8f, 5}, - {0xcd90, 6}, - {0xcd91, 7}, - {0xcd92, 8}, - {0xcd93, 9}, - {0xcd94, 2934}, - {0xcd95, 2935}, - {0xcd97, 0}, - {0xcd98, 2936}, - {0xcd9a, 0}, - {0xcd9b, 1}, - {0xcd9c, 2937}, - {0xcd9e, 0}, - {0xcd9f, 1}, - {0xcda0, 2}, - {0xcda1, 3}, - {0xcda2, 4}, - {0xcda3, 5}, - {0xcda4, 2938}, - {0xcda5, 2939}, - {0xcda7, 2940}, - {0xcda9, 2941}, - {0xcdab, 0}, - {0xcdac, 1}, - {0xcdad, 2}, - {0xcdae, 3}, - {0xcdaf, 4}, - {0xcdb0, 2942}, - {0xcdb2, 0}, - {0xcdb3, 1}, - {0xcdb4, 2}, - {0xcdb5, 3}, - {0xcdb6, 4}, - {0xcdb7, 5}, - {0xcdb8, 6}, - {0xcdb9, 7}, - {0xcdba, 8}, - {0xcdbb, 9}, - {0xcdbc, 10}, - {0xcdbd, 11}, - {0xcdbe, 12}, - {0xcdbf, 13}, - {0xcdc0, 14}, - {0xcdc1, 15}, - {0xcdc2, 16}, - {0xcdc3, 17}, - {0xcdc4, 2943}, - {0xcdc6, 0}, - {0xcdc7, 1}, - {0xcdc8, 2}, - {0xcdc9, 3}, - {0xcdca, 4}, - {0xcdcb, 5}, - {0xcdcc, 2944}, - {0xcdce, 0}, - {0xcdcf, 1}, - {0xcdd0, 2945}, - {0xcdd2, 0}, - {0xcdd3, 1}, - {0xcdd4, 2}, - {0xcdd5, 3}, - {0xcdd6, 4}, - {0xcdd7, 5}, - {0xcdd8, 6}, - {0xcdd9, 7}, - {0xcdda, 8}, - {0xcddb, 9}, - {0xcddc, 10}, - {0xcddd, 11}, - {0xcdde, 12}, - {0xcddf, 13}, - {0xcde0, 14}, - {0xcde1, 15}, - {0xcde2, 16}, - {0xcde3, 17}, - {0xcde4, 18}, - {0xcde5, 19}, - {0xcde6, 20}, - {0xcde7, 21}, - {0xcde8, 2946}, - {0xcdea, 0}, - {0xcdeb, 1}, - {0xcdec, 2947}, - {0xcdee, 0}, - {0xcdef, 1}, - {0xcdf0, 2948}, - {0xcdf2, 0}, - {0xcdf3, 1}, - {0xcdf4, 2}, - {0xcdf5, 3}, - {0xcdf6, 4}, - {0xcdf7, 5}, - {0xcdf8, 2949}, - {0xcdf9, 2950}, - {0xcdfb, 2951}, - {0xcdfd, 2952}, - {0xcdff, 0}, - {0xce01, 0}, - {0xce02, 1}, - {0xce03, 2}, - {0xce04, 2953}, - {0xce06, 0}, - {0xce07, 1}, - {0xce08, 2954}, - {0xce0a, 0}, - {0xce0b, 1}, - {0xce0c, 2955}, - {0xce0e, 0}, - {0xce0f, 1}, - {0xce10, 2}, - {0xce11, 3}, - {0xce12, 4}, - {0xce13, 5}, - {0xce14, 2956}, - {0xce16, 0}, - {0xce17, 1}, - {0xce18, 2}, - {0xce19, 2957}, - {0xce1b, 0}, - {0xce1c, 1}, - {0xce1d, 2}, - {0xce1e, 3}, - {0xce1f, 4}, - {0xce20, 2958}, - {0xce21, 2959}, - {0xce23, 0}, - {0xce24, 2960}, - {0xce26, 0}, - {0xce27, 1}, - {0xce28, 2961}, - {0xce2a, 0}, - {0xce2b, 1}, - {0xce2c, 2}, - {0xce2d, 3}, - {0xce2e, 4}, - {0xce2f, 5}, - {0xce30, 2962}, - {0xce31, 2963}, - {0xce33, 2964}, - {0xce35, 2965}, - {0xce37, 0}, - {0xce38, 1}, - {0xce39, 2}, - {0xce3a, 3}, - {0xce3b, 4}, - {0xce3c, 5}, - {0xce3d, 6}, - {0xce3e, 7}, - {0xce3f, 8}, - {0xce40, 9}, - {0xce41, 10}, - {0xce42, 11}, - {0xce43, 12}, - {0xce44, 13}, - {0xce45, 14}, - {0xce46, 15}, - {0xce47, 16}, - {0xce48, 17}, - {0xce49, 18}, - {0xce4a, 19}, - {0xce4b, 20}, - {0xce4c, 21}, - {0xce4d, 22}, - {0xce4e, 23}, - {0xce4f, 24}, - {0xce50, 25}, - {0xce51, 26}, - {0xce52, 27}, - {0xce53, 28}, - {0xce54, 29}, - {0xce55, 30}, - {0xce56, 31}, - {0xce57, 32}, - {0xce58, 2966}, - {0xce59, 2967}, - {0xce5b, 0}, - {0xce5c, 2968}, - {0xce5e, 0}, - {0xce5f, 2969}, - {0xce60, 2970}, - {0xce61, 2971}, - {0xce63, 0}, - {0xce64, 1}, - {0xce65, 2}, - {0xce66, 3}, - {0xce67, 4}, - {0xce68, 2972}, - {0xce69, 2973}, - {0xce6b, 2974}, - {0xce6d, 2975}, - {0xce6f, 0}, - {0xce70, 1}, - {0xce71, 2}, - {0xce72, 3}, - {0xce73, 4}, - {0xce74, 2976}, - {0xce75, 2977}, - {0xce77, 0}, - {0xce78, 2978}, - {0xce7a, 0}, - {0xce7b, 1}, - {0xce7c, 2979}, - {0xce7e, 0}, - {0xce7f, 1}, - {0xce80, 2}, - {0xce81, 3}, - {0xce82, 4}, - {0xce83, 5}, - {0xce84, 2980}, - {0xce85, 2981}, - {0xce87, 2982}, - {0xce89, 2983}, - {0xce8b, 0}, - {0xce8c, 1}, - {0xce8d, 2}, - {0xce8e, 3}, - {0xce8f, 4}, - {0xce90, 2984}, - {0xce91, 2985}, - {0xce93, 0}, - {0xce94, 2986}, - {0xce96, 0}, - {0xce97, 1}, - {0xce98, 2987}, - {0xce9a, 0}, - {0xce9b, 1}, - {0xce9c, 2}, - {0xce9d, 3}, - {0xce9e, 4}, - {0xce9f, 5}, - {0xcea0, 2988}, - {0xcea1, 2989}, - {0xcea3, 2990}, - {0xcea4, 2991}, - {0xcea5, 2992}, - {0xcea7, 0}, - {0xcea8, 1}, - {0xcea9, 2}, - {0xceaa, 3}, - {0xceab, 4}, - {0xceac, 2993}, - {0xcead, 2994}, - {0xceaf, 0}, - {0xceb0, 1}, - {0xceb1, 2}, - {0xceb2, 3}, - {0xceb3, 4}, - {0xceb4, 5}, - {0xceb5, 6}, - {0xceb6, 7}, - {0xceb7, 8}, - {0xceb8, 9}, - {0xceb9, 10}, - {0xceba, 11}, - {0xcebb, 12}, - {0xcebc, 13}, - {0xcebd, 14}, - {0xcebe, 15}, - {0xcebf, 16}, - {0xcec0, 17}, - {0xcec1, 2995}, - {0xcec3, 0}, - {0xcec4, 1}, - {0xcec5, 2}, - {0xcec6, 3}, - {0xcec7, 4}, - {0xcec8, 5}, - {0xcec9, 6}, - {0xceca, 7}, - {0xcecb, 8}, - {0xcecc, 9}, - {0xcecd, 10}, - {0xcece, 11}, - {0xcecf, 12}, - {0xced0, 13}, - {0xced1, 14}, - {0xced2, 15}, - {0xced3, 16}, - {0xced4, 17}, - {0xced5, 18}, - {0xced6, 19}, - {0xced7, 20}, - {0xced8, 21}, - {0xced9, 22}, - {0xceda, 23}, - {0xcedb, 24}, - {0xcedc, 25}, - {0xcedd, 26}, - {0xcede, 27}, - {0xcedf, 28}, - {0xcee0, 29}, - {0xcee1, 30}, - {0xcee2, 31}, - {0xcee3, 32}, - {0xcee4, 2996}, - {0xcee5, 2997}, - {0xcee7, 0}, - {0xcee8, 2998}, - {0xceea, 0}, - {0xceeb, 2999}, - {0xceec, 3000}, - {0xceee, 0}, - {0xceef, 1}, - {0xcef0, 2}, - {0xcef1, 3}, - {0xcef2, 4}, - {0xcef3, 5}, - {0xcef4, 3001}, - {0xcef5, 3002}, - {0xcef7, 3003}, - {0xcef8, 3004}, - {0xcef9, 3005}, - {0xcefb, 0}, - {0xcefc, 1}, - {0xcefd, 2}, - {0xcefe, 3}, - {0xceff, 4}, - {0xcf00, 3006}, - {0xcf01, 3007}, - {0xcf03, 0}, - {0xcf04, 3008}, - {0xcf06, 0}, - {0xcf07, 1}, - {0xcf08, 3009}, - {0xcf0a, 0}, - {0xcf0b, 1}, - {0xcf0c, 2}, - {0xcf0d, 3}, - {0xcf0e, 4}, - {0xcf0f, 5}, - {0xcf10, 3010}, - {0xcf11, 3011}, - {0xcf13, 3012}, - {0xcf15, 3013}, - {0xcf17, 0}, - {0xcf18, 1}, - {0xcf19, 2}, - {0xcf1a, 3}, - {0xcf1b, 4}, - {0xcf1c, 3014}, - {0xcf1e, 0}, - {0xcf1f, 1}, - {0xcf20, 3015}, - {0xcf22, 0}, - {0xcf23, 1}, - {0xcf24, 3016}, - {0xcf26, 0}, - {0xcf27, 1}, - {0xcf28, 2}, - {0xcf29, 3}, - {0xcf2a, 4}, - {0xcf2b, 5}, - {0xcf2c, 3017}, - {0xcf2d, 3018}, - {0xcf2f, 3019}, - {0xcf30, 3020}, - {0xcf31, 3021}, - {0xcf33, 0}, - {0xcf34, 1}, - {0xcf35, 2}, - {0xcf36, 3}, - {0xcf37, 4}, - {0xcf38, 3022}, - {0xcf3a, 0}, - {0xcf3b, 1}, - {0xcf3c, 2}, - {0xcf3d, 3}, - {0xcf3e, 4}, - {0xcf3f, 5}, - {0xcf40, 6}, - {0xcf41, 7}, - {0xcf42, 8}, - {0xcf43, 9}, - {0xcf44, 10}, - {0xcf45, 11}, - {0xcf46, 12}, - {0xcf47, 13}, - {0xcf48, 14}, - {0xcf49, 15}, - {0xcf4a, 16}, - {0xcf4b, 17}, - {0xcf4c, 18}, - {0xcf4d, 19}, - {0xcf4e, 20}, - {0xcf4f, 21}, - {0xcf50, 22}, - {0xcf51, 23}, - {0xcf52, 24}, - {0xcf53, 25}, - {0xcf54, 3023}, - {0xcf55, 3024}, - {0xcf57, 0}, - {0xcf58, 3025}, - {0xcf5a, 0}, - {0xcf5b, 1}, - {0xcf5c, 3026}, - {0xcf5e, 0}, - {0xcf5f, 1}, - {0xcf60, 2}, - {0xcf61, 3}, - {0xcf62, 4}, - {0xcf63, 5}, - {0xcf64, 3027}, - {0xcf65, 3028}, - {0xcf67, 3029}, - {0xcf69, 3030}, - {0xcf6b, 0}, - {0xcf6c, 1}, - {0xcf6d, 2}, - {0xcf6e, 3}, - {0xcf6f, 4}, - {0xcf70, 3031}, - {0xcf71, 3032}, - {0xcf73, 0}, - {0xcf74, 3033}, - {0xcf76, 0}, - {0xcf77, 1}, - {0xcf78, 3034}, - {0xcf7a, 0}, - {0xcf7b, 1}, - {0xcf7c, 2}, - {0xcf7d, 3}, - {0xcf7e, 4}, - {0xcf7f, 5}, - {0xcf80, 3035}, - {0xcf82, 0}, - {0xcf83, 1}, - {0xcf84, 2}, - {0xcf85, 3036}, - {0xcf87, 0}, - {0xcf88, 1}, - {0xcf89, 2}, - {0xcf8a, 3}, - {0xcf8b, 4}, - {0xcf8c, 3037}, - {0xcf8e, 0}, - {0xcf8f, 1}, - {0xcf90, 2}, - {0xcf91, 3}, - {0xcf92, 4}, - {0xcf93, 5}, - {0xcf94, 6}, - {0xcf95, 7}, - {0xcf96, 8}, - {0xcf97, 9}, - {0xcf98, 10}, - {0xcf99, 11}, - {0xcf9a, 12}, - {0xcf9b, 13}, - {0xcf9c, 14}, - {0xcf9d, 15}, - {0xcf9e, 16}, - {0xcf9f, 17}, - {0xcfa0, 18}, - {0xcfa1, 3038}, - {0xcfa3, 0}, - {0xcfa4, 1}, - {0xcfa5, 2}, - {0xcfa6, 3}, - {0xcfa7, 4}, - {0xcfa8, 3039}, - {0xcfaa, 0}, - {0xcfab, 1}, - {0xcfac, 2}, - {0xcfad, 3}, - {0xcfae, 4}, - {0xcfaf, 5}, - {0xcfb0, 3040}, - {0xcfb2, 0}, - {0xcfb3, 1}, - {0xcfb4, 2}, - {0xcfb5, 3}, - {0xcfb6, 4}, - {0xcfb7, 5}, - {0xcfb8, 6}, - {0xcfb9, 7}, - {0xcfba, 8}, - {0xcfbb, 9}, - {0xcfbc, 10}, - {0xcfbd, 11}, - {0xcfbe, 12}, - {0xcfbf, 13}, - {0xcfc0, 14}, - {0xcfc1, 15}, - {0xcfc2, 16}, - {0xcfc3, 17}, - {0xcfc4, 3041}, - {0xcfc6, 0}, - {0xcfc7, 1}, - {0xcfc8, 2}, - {0xcfc9, 3}, - {0xcfca, 4}, - {0xcfcb, 5}, - {0xcfcc, 6}, - {0xcfcd, 7}, - {0xcfce, 8}, - {0xcfcf, 9}, - {0xcfd0, 10}, - {0xcfd1, 11}, - {0xcfd2, 12}, - {0xcfd3, 13}, - {0xcfd4, 14}, - {0xcfd5, 15}, - {0xcfd6, 16}, - {0xcfd7, 17}, - {0xcfd8, 18}, - {0xcfd9, 19}, - {0xcfda, 20}, - {0xcfdb, 21}, - {0xcfdc, 22}, - {0xcfdd, 23}, - {0xcfde, 24}, - {0xcfdf, 25}, - {0xcfe0, 3042}, - {0xcfe1, 3043}, - {0xcfe3, 0}, - {0xcfe4, 3044}, - {0xcfe6, 0}, - {0xcfe7, 1}, - {0xcfe8, 3045}, - {0xcfea, 0}, - {0xcfeb, 1}, - {0xcfec, 2}, - {0xcfed, 3}, - {0xcfee, 4}, - {0xcfef, 5}, - {0xcff0, 3046}, - {0xcff1, 3047}, - {0xcff3, 3048}, - {0xcff5, 3049}, - {0xcff7, 0}, - {0xcff8, 1}, - {0xcff9, 2}, - {0xcffa, 3}, - {0xcffb, 4}, - {0xcffc, 3050}, - {0xcffe, 0}, - {0xcfff, 1}, - {0xd000, 3051}, - {0xd002, 0}, - {0xd003, 1}, - {0xd004, 3052}, - {0xd006, 0}, - {0xd007, 1}, - {0xd008, 2}, - {0xd009, 3}, - {0xd00a, 4}, - {0xd00b, 5}, - {0xd00c, 6}, - {0xd00d, 7}, - {0xd00e, 8}, - {0xd00f, 9}, - {0xd010, 10}, - {0xd011, 3053}, - {0xd013, 0}, - {0xd014, 1}, - {0xd015, 2}, - {0xd016, 3}, - {0xd017, 4}, - {0xd018, 3054}, - {0xd01a, 0}, - {0xd01b, 1}, - {0xd01c, 2}, - {0xd01d, 3}, - {0xd01e, 4}, - {0xd01f, 5}, - {0xd020, 6}, - {0xd021, 7}, - {0xd022, 8}, - {0xd023, 9}, - {0xd024, 10}, - {0xd025, 11}, - {0xd026, 12}, - {0xd027, 13}, - {0xd028, 14}, - {0xd029, 15}, - {0xd02a, 16}, - {0xd02b, 17}, - {0xd02c, 18}, - {0xd02d, 3055}, - {0xd02f, 0}, - {0xd030, 1}, - {0xd031, 2}, - {0xd032, 3}, - {0xd033, 4}, - {0xd034, 3056}, - {0xd035, 3057}, - {0xd037, 0}, - {0xd038, 3058}, - {0xd03a, 0}, - {0xd03b, 1}, - {0xd03c, 3059}, - {0xd03e, 0}, - {0xd03f, 1}, - {0xd040, 2}, - {0xd041, 3}, - {0xd042, 4}, - {0xd043, 5}, - {0xd044, 3060}, - {0xd045, 3061}, - {0xd047, 3062}, - {0xd049, 3063}, - {0xd04b, 0}, - {0xd04c, 1}, - {0xd04d, 2}, - {0xd04e, 3}, - {0xd04f, 4}, - {0xd050, 3064}, - {0xd052, 0}, - {0xd053, 1}, - {0xd054, 3065}, - {0xd056, 0}, - {0xd057, 1}, - {0xd058, 3066}, - {0xd05a, 0}, - {0xd05b, 1}, - {0xd05c, 2}, - {0xd05d, 3}, - {0xd05e, 4}, - {0xd05f, 5}, - {0xd060, 3067}, - {0xd062, 0}, - {0xd063, 1}, - {0xd064, 2}, - {0xd065, 3}, - {0xd066, 4}, - {0xd067, 5}, - {0xd068, 6}, - {0xd069, 7}, - {0xd06a, 8}, - {0xd06b, 9}, - {0xd06c, 3068}, - {0xd06d, 3069}, - {0xd06f, 0}, - {0xd070, 3070}, - {0xd072, 0}, - {0xd073, 1}, - {0xd074, 3071}, - {0xd076, 0}, - {0xd077, 1}, - {0xd078, 2}, - {0xd079, 3}, - {0xd07a, 4}, - {0xd07b, 5}, - {0xd07c, 3072}, - {0xd07d, 3073}, - {0xd07f, 0}, - {0xd080, 1}, - {0xd081, 3074}, - {0xd083, 0}, - {0xd084, 1}, - {0xd085, 2}, - {0xd086, 3}, - {0xd087, 4}, - {0xd088, 5}, - {0xd089, 6}, - {0xd08a, 7}, - {0xd08b, 8}, - {0xd08c, 9}, - {0xd08d, 10}, - {0xd08e, 11}, - {0xd08f, 12}, - {0xd090, 13}, - {0xd091, 14}, - {0xd092, 15}, - {0xd093, 16}, - {0xd094, 17}, - {0xd095, 18}, - {0xd096, 19}, - {0xd097, 20}, - {0xd098, 21}, - {0xd099, 22}, - {0xd09a, 23}, - {0xd09b, 24}, - {0xd09c, 25}, - {0xd09d, 26}, - {0xd09e, 27}, - {0xd09f, 28}, - {0xd0a0, 29}, - {0xd0a1, 30}, - {0xd0a2, 31}, - {0xd0a3, 32}, - {0xd0a4, 3075}, - {0xd0a5, 3076}, - {0xd0a7, 0}, - {0xd0a8, 3077}, - {0xd0aa, 0}, - {0xd0ab, 1}, - {0xd0ac, 3078}, - {0xd0ae, 0}, - {0xd0af, 1}, - {0xd0b0, 2}, - {0xd0b1, 3}, - {0xd0b2, 4}, - {0xd0b3, 5}, - {0xd0b4, 3079}, - {0xd0b5, 3080}, - {0xd0b7, 3081}, - {0xd0b9, 3082}, - {0xd0bb, 0}, - {0xd0bc, 1}, - {0xd0bd, 2}, - {0xd0be, 3}, - {0xd0bf, 4}, - {0xd0c0, 3083}, - {0xd0c1, 3084}, - {0xd0c3, 0}, - {0xd0c4, 3085}, - {0xd0c6, 0}, - {0xd0c7, 1}, - {0xd0c8, 3086}, - {0xd0c9, 3087}, - {0xd0cb, 0}, - {0xd0cc, 1}, - {0xd0cd, 2}, - {0xd0ce, 3}, - {0xd0cf, 4}, - {0xd0d0, 3088}, - {0xd0d1, 3089}, - {0xd0d3, 3090}, - {0xd0d4, 3091}, - {0xd0d5, 3092}, - {0xd0d7, 0}, - {0xd0d8, 1}, - {0xd0d9, 2}, - {0xd0da, 3}, - {0xd0db, 4}, - {0xd0dc, 3093}, - {0xd0dd, 3094}, - {0xd0df, 0}, - {0xd0e0, 3095}, - {0xd0e2, 0}, - {0xd0e3, 1}, - {0xd0e4, 3096}, - {0xd0e6, 0}, - {0xd0e7, 1}, - {0xd0e8, 2}, - {0xd0e9, 3}, - {0xd0ea, 4}, - {0xd0eb, 5}, - {0xd0ec, 3097}, - {0xd0ed, 3098}, - {0xd0ef, 3099}, - {0xd0f0, 3100}, - {0xd0f1, 3101}, - {0xd0f3, 0}, - {0xd0f4, 1}, - {0xd0f5, 2}, - {0xd0f6, 3}, - {0xd0f7, 4}, - {0xd0f8, 3102}, - {0xd0fa, 0}, - {0xd0fb, 1}, - {0xd0fc, 2}, - {0xd0fd, 3}, - {0xd0fe, 4}, - {0xd0ff, 5}, - {0xd101, 0}, - {0xd102, 1}, - {0xd103, 2}, - {0xd104, 3}, - {0xd105, 4}, - {0xd106, 5}, - {0xd107, 6}, - {0xd108, 7}, - {0xd109, 8}, - {0xd10a, 9}, - {0xd10b, 10}, - {0xd10c, 11}, - {0xd10d, 3103}, - {0xd10f, 0}, - {0xd110, 1}, - {0xd111, 2}, - {0xd112, 3}, - {0xd113, 4}, - {0xd114, 5}, - {0xd115, 6}, - {0xd116, 7}, - {0xd117, 8}, - {0xd118, 9}, - {0xd119, 10}, - {0xd11a, 11}, - {0xd11b, 12}, - {0xd11c, 13}, - {0xd11d, 14}, - {0xd11e, 15}, - {0xd11f, 16}, - {0xd120, 17}, - {0xd121, 18}, - {0xd122, 19}, - {0xd123, 20}, - {0xd124, 21}, - {0xd125, 22}, - {0xd126, 23}, - {0xd127, 24}, - {0xd128, 25}, - {0xd129, 26}, - {0xd12a, 27}, - {0xd12b, 28}, - {0xd12c, 29}, - {0xd12d, 30}, - {0xd12e, 31}, - {0xd12f, 32}, - {0xd130, 3104}, - {0xd131, 3105}, - {0xd133, 0}, - {0xd134, 3106}, - {0xd136, 0}, - {0xd137, 1}, - {0xd138, 3107}, - {0xd13a, 3108}, - {0xd13c, 0}, - {0xd13d, 1}, - {0xd13e, 2}, - {0xd13f, 3}, - {0xd140, 3109}, - {0xd141, 3110}, - {0xd143, 3111}, - {0xd144, 3112}, - {0xd145, 3113}, - {0xd147, 0}, - {0xd148, 1}, - {0xd149, 2}, - {0xd14a, 3}, - {0xd14b, 4}, - {0xd14c, 3114}, - {0xd14d, 3115}, - {0xd14f, 0}, - {0xd150, 3116}, - {0xd152, 0}, - {0xd153, 1}, - {0xd154, 3117}, - {0xd156, 0}, - {0xd157, 1}, - {0xd158, 2}, - {0xd159, 3}, - {0xd15a, 4}, - {0xd15b, 5}, - {0xd15c, 3118}, - {0xd15d, 3119}, - {0xd15f, 3120}, - {0xd161, 3121}, - {0xd163, 0}, - {0xd164, 1}, - {0xd165, 2}, - {0xd166, 3}, - {0xd167, 4}, - {0xd168, 3122}, - {0xd16a, 0}, - {0xd16b, 1}, - {0xd16c, 3123}, - {0xd16e, 0}, - {0xd16f, 1}, - {0xd170, 2}, - {0xd171, 3}, - {0xd172, 4}, - {0xd173, 5}, - {0xd174, 6}, - {0xd175, 7}, - {0xd176, 8}, - {0xd177, 9}, - {0xd178, 10}, - {0xd179, 11}, - {0xd17a, 12}, - {0xd17b, 13}, - {0xd17c, 3124}, - {0xd17e, 0}, - {0xd17f, 1}, - {0xd180, 2}, - {0xd181, 3}, - {0xd182, 4}, - {0xd183, 5}, - {0xd184, 3125}, - {0xd186, 0}, - {0xd187, 1}, - {0xd188, 3126}, - {0xd18a, 0}, - {0xd18b, 1}, - {0xd18c, 2}, - {0xd18d, 3}, - {0xd18e, 4}, - {0xd18f, 5}, - {0xd190, 6}, - {0xd191, 7}, - {0xd192, 8}, - {0xd193, 9}, - {0xd194, 10}, - {0xd195, 11}, - {0xd196, 12}, - {0xd197, 13}, - {0xd198, 14}, - {0xd199, 15}, - {0xd19a, 16}, - {0xd19b, 17}, - {0xd19c, 18}, - {0xd19d, 19}, - {0xd19e, 20}, - {0xd19f, 21}, - {0xd1a0, 3127}, - {0xd1a1, 3128}, - {0xd1a3, 0}, - {0xd1a4, 3129}, - {0xd1a6, 0}, - {0xd1a7, 1}, - {0xd1a8, 3130}, - {0xd1aa, 0}, - {0xd1ab, 1}, - {0xd1ac, 2}, - {0xd1ad, 3}, - {0xd1ae, 4}, - {0xd1af, 5}, - {0xd1b0, 3131}, - {0xd1b1, 3132}, - {0xd1b3, 3133}, - {0xd1b5, 3134}, - {0xd1b7, 0}, - {0xd1b8, 1}, - {0xd1b9, 2}, - {0xd1ba, 3135}, - {0xd1bc, 3136}, - {0xd1be, 0}, - {0xd1bf, 1}, - {0xd1c0, 3137}, - {0xd1c2, 0}, - {0xd1c3, 1}, - {0xd1c4, 2}, - {0xd1c5, 3}, - {0xd1c6, 4}, - {0xd1c7, 5}, - {0xd1c8, 6}, - {0xd1c9, 7}, - {0xd1ca, 8}, - {0xd1cb, 9}, - {0xd1cc, 10}, - {0xd1cd, 11}, - {0xd1ce, 12}, - {0xd1cf, 13}, - {0xd1d0, 14}, - {0xd1d1, 15}, - {0xd1d2, 16}, - {0xd1d3, 17}, - {0xd1d4, 18}, - {0xd1d5, 19}, - {0xd1d6, 20}, - {0xd1d7, 21}, - {0xd1d8, 3138}, - {0xd1da, 0}, - {0xd1db, 1}, - {0xd1dc, 2}, - {0xd1dd, 3}, - {0xd1de, 4}, - {0xd1df, 5}, - {0xd1e0, 6}, - {0xd1e1, 7}, - {0xd1e2, 8}, - {0xd1e3, 9}, - {0xd1e4, 10}, - {0xd1e5, 11}, - {0xd1e6, 12}, - {0xd1e7, 13}, - {0xd1e8, 14}, - {0xd1e9, 15}, - {0xd1ea, 16}, - {0xd1eb, 17}, - {0xd1ec, 18}, - {0xd1ed, 19}, - {0xd1ee, 20}, - {0xd1ef, 21}, - {0xd1f0, 22}, - {0xd1f1, 23}, - {0xd1f2, 24}, - {0xd1f3, 25}, - {0xd1f4, 3139}, - {0xd1f6, 0}, - {0xd1f7, 1}, - {0xd1f8, 3140}, - {0xd1fa, 0}, - {0xd1fb, 1}, - {0xd1fc, 2}, - {0xd1fd, 3}, - {0xd1fe, 4}, - {0xd1ff, 5}, - {0xd201, 0}, - {0xd202, 1}, - {0xd203, 2}, - {0xd204, 3}, - {0xd205, 4}, - {0xd206, 5}, - {0xd207, 3141}, - {0xd209, 3142}, - {0xd20b, 0}, - {0xd20c, 1}, - {0xd20d, 2}, - {0xd20e, 3}, - {0xd20f, 4}, - {0xd210, 3143}, - {0xd212, 0}, - {0xd213, 1}, - {0xd214, 2}, - {0xd215, 3}, - {0xd216, 4}, - {0xd217, 5}, - {0xd218, 6}, - {0xd219, 7}, - {0xd21a, 8}, - {0xd21b, 9}, - {0xd21c, 10}, - {0xd21d, 11}, - {0xd21e, 12}, - {0xd21f, 13}, - {0xd220, 14}, - {0xd221, 15}, - {0xd222, 16}, - {0xd223, 17}, - {0xd224, 18}, - {0xd225, 19}, - {0xd226, 20}, - {0xd227, 21}, - {0xd228, 22}, - {0xd229, 23}, - {0xd22a, 24}, - {0xd22b, 25}, - {0xd22c, 3144}, - {0xd22d, 3145}, - {0xd22f, 0}, - {0xd230, 3146}, - {0xd232, 0}, - {0xd233, 1}, - {0xd234, 3147}, - {0xd236, 0}, - {0xd237, 1}, - {0xd238, 2}, - {0xd239, 3}, - {0xd23a, 4}, - {0xd23b, 5}, - {0xd23c, 3148}, - {0xd23d, 3149}, - {0xd23f, 3150}, - {0xd241, 3151}, - {0xd243, 0}, - {0xd244, 1}, - {0xd245, 2}, - {0xd246, 3}, - {0xd247, 4}, - {0xd248, 3152}, - {0xd24a, 0}, - {0xd24b, 1}, - {0xd24c, 2}, - {0xd24d, 3}, - {0xd24e, 4}, - {0xd24f, 5}, - {0xd250, 6}, - {0xd251, 7}, - {0xd252, 8}, - {0xd253, 9}, - {0xd254, 10}, - {0xd255, 11}, - {0xd256, 12}, - {0xd257, 13}, - {0xd258, 14}, - {0xd259, 15}, - {0xd25a, 16}, - {0xd25b, 17}, - {0xd25c, 3153}, - {0xd25e, 0}, - {0xd25f, 1}, - {0xd260, 2}, - {0xd261, 3}, - {0xd262, 4}, - {0xd263, 5}, - {0xd264, 3154}, - {0xd266, 0}, - {0xd267, 1}, - {0xd268, 2}, - {0xd269, 3}, - {0xd26a, 4}, - {0xd26b, 5}, - {0xd26c, 6}, - {0xd26d, 7}, - {0xd26e, 8}, - {0xd26f, 9}, - {0xd270, 10}, - {0xd271, 11}, - {0xd272, 12}, - {0xd273, 13}, - {0xd274, 14}, - {0xd275, 15}, - {0xd276, 16}, - {0xd277, 17}, - {0xd278, 18}, - {0xd279, 19}, - {0xd27a, 20}, - {0xd27b, 21}, - {0xd27c, 22}, - {0xd27d, 23}, - {0xd27e, 24}, - {0xd27f, 25}, - {0xd280, 3155}, - {0xd281, 3156}, - {0xd283, 0}, - {0xd284, 3157}, - {0xd286, 0}, - {0xd287, 1}, - {0xd288, 3158}, - {0xd28a, 0}, - {0xd28b, 1}, - {0xd28c, 2}, - {0xd28d, 3}, - {0xd28e, 4}, - {0xd28f, 5}, - {0xd290, 3159}, - {0xd291, 3160}, - {0xd293, 0}, - {0xd294, 1}, - {0xd295, 3161}, - {0xd297, 0}, - {0xd298, 1}, - {0xd299, 2}, - {0xd29a, 3}, - {0xd29b, 4}, - {0xd29c, 3162}, - {0xd29e, 0}, - {0xd29f, 1}, - {0xd2a0, 3163}, - {0xd2a2, 0}, - {0xd2a3, 1}, - {0xd2a4, 3164}, - {0xd2a6, 0}, - {0xd2a7, 1}, - {0xd2a8, 2}, - {0xd2a9, 3}, - {0xd2aa, 4}, - {0xd2ab, 5}, - {0xd2ac, 3165}, - {0xd2ae, 0}, - {0xd2af, 1}, - {0xd2b0, 2}, - {0xd2b1, 3166}, - {0xd2b3, 0}, - {0xd2b4, 1}, - {0xd2b5, 2}, - {0xd2b6, 3}, - {0xd2b7, 4}, - {0xd2b8, 3167}, - {0xd2b9, 3168}, - {0xd2bb, 0}, - {0xd2bc, 3169}, - {0xd2be, 0}, - {0xd2bf, 3170}, - {0xd2c0, 3171}, - {0xd2c2, 3172}, - {0xd2c4, 0}, - {0xd2c5, 1}, - {0xd2c6, 2}, - {0xd2c7, 3}, - {0xd2c8, 3173}, - {0xd2c9, 3174}, - {0xd2cb, 3175}, - {0xd2cd, 0}, - {0xd2ce, 1}, - {0xd2cf, 2}, - {0xd2d0, 3}, - {0xd2d1, 4}, - {0xd2d2, 5}, - {0xd2d3, 6}, - {0xd2d4, 3176}, - {0xd2d6, 0}, - {0xd2d7, 1}, - {0xd2d8, 3177}, - {0xd2da, 0}, - {0xd2db, 1}, - {0xd2dc, 3178}, - {0xd2de, 0}, - {0xd2df, 1}, - {0xd2e0, 2}, - {0xd2e1, 3}, - {0xd2e2, 4}, - {0xd2e3, 5}, - {0xd2e4, 3179}, - {0xd2e5, 3180}, - {0xd2e7, 0}, - {0xd2e8, 1}, - {0xd2e9, 2}, - {0xd2ea, 3}, - {0xd2eb, 4}, - {0xd2ec, 5}, - {0xd2ed, 6}, - {0xd2ee, 7}, - {0xd2ef, 8}, - {0xd2f0, 3181}, - {0xd2f1, 3182}, - {0xd2f3, 0}, - {0xd2f4, 3183}, - {0xd2f6, 0}, - {0xd2f7, 1}, - {0xd2f8, 3184}, - {0xd2fa, 0}, - {0xd2fb, 1}, - {0xd2fc, 2}, - {0xd2fd, 3}, - {0xd2fe, 4}, - {0xd2ff, 5}, - {0xd300, 3185}, - {0xd301, 3186}, - {0xd303, 3187}, - {0xd305, 3188}, - {0xd307, 0}, - {0xd308, 1}, - {0xd309, 2}, - {0xd30a, 3}, - {0xd30b, 4}, - {0xd30c, 3189}, - {0xd30d, 3190}, - {0xd30e, 3191}, - {0xd310, 3192}, - {0xd312, 0}, - {0xd313, 1}, - {0xd314, 3193}, - {0xd316, 3194}, - {0xd318, 0}, - {0xd319, 1}, - {0xd31a, 2}, - {0xd31b, 3}, - {0xd31c, 3195}, - {0xd31d, 3196}, - {0xd31f, 3197}, - {0xd320, 3198}, - {0xd321, 3199}, - {0xd323, 0}, - {0xd324, 1}, - {0xd325, 3200}, - {0xd327, 0}, - {0xd328, 3201}, - {0xd329, 3202}, - {0xd32b, 0}, - {0xd32c, 3203}, - {0xd32e, 0}, - {0xd32f, 1}, - {0xd330, 3204}, - {0xd332, 0}, - {0xd333, 1}, - {0xd334, 2}, - {0xd335, 3}, - {0xd336, 4}, - {0xd337, 5}, - {0xd338, 3205}, - {0xd339, 3206}, - {0xd33b, 3207}, - {0xd33c, 3208}, - {0xd33d, 3209}, - {0xd33f, 0}, - {0xd340, 1}, - {0xd341, 2}, - {0xd342, 3}, - {0xd343, 4}, - {0xd344, 3210}, - {0xd345, 3211}, - {0xd347, 0}, - {0xd348, 1}, - {0xd349, 2}, - {0xd34a, 3}, - {0xd34b, 4}, - {0xd34c, 5}, - {0xd34d, 6}, - {0xd34e, 7}, - {0xd34f, 8}, - {0xd350, 9}, - {0xd351, 10}, - {0xd352, 11}, - {0xd353, 12}, - {0xd354, 13}, - {0xd355, 14}, - {0xd356, 15}, - {0xd357, 16}, - {0xd358, 17}, - {0xd359, 18}, - {0xd35a, 19}, - {0xd35b, 20}, - {0xd35c, 21}, - {0xd35d, 22}, - {0xd35e, 23}, - {0xd35f, 24}, - {0xd360, 25}, - {0xd361, 26}, - {0xd362, 27}, - {0xd363, 28}, - {0xd364, 29}, - {0xd365, 30}, - {0xd366, 31}, - {0xd367, 32}, - {0xd368, 33}, - {0xd369, 34}, - {0xd36a, 35}, - {0xd36b, 36}, - {0xd36c, 37}, - {0xd36d, 38}, - {0xd36e, 39}, - {0xd36f, 40}, - {0xd370, 41}, - {0xd371, 42}, - {0xd372, 43}, - {0xd373, 44}, - {0xd374, 45}, - {0xd375, 46}, - {0xd376, 47}, - {0xd377, 48}, - {0xd378, 49}, - {0xd379, 50}, - {0xd37a, 51}, - {0xd37b, 52}, - {0xd37c, 3212}, - {0xd37d, 3213}, - {0xd37f, 0}, - {0xd380, 3214}, - {0xd382, 0}, - {0xd383, 1}, - {0xd384, 3215}, - {0xd386, 0}, - {0xd387, 1}, - {0xd388, 2}, - {0xd389, 3}, - {0xd38a, 4}, - {0xd38b, 5}, - {0xd38c, 3216}, - {0xd38d, 3217}, - {0xd38f, 3218}, - {0xd390, 3219}, - {0xd391, 3220}, - {0xd393, 0}, - {0xd394, 1}, - {0xd395, 2}, - {0xd396, 3}, - {0xd397, 4}, - {0xd398, 3221}, - {0xd399, 3222}, - {0xd39b, 0}, - {0xd39c, 3223}, - {0xd39e, 0}, - {0xd39f, 1}, - {0xd3a0, 3224}, - {0xd3a2, 0}, - {0xd3a3, 1}, - {0xd3a4, 2}, - {0xd3a5, 3}, - {0xd3a6, 4}, - {0xd3a7, 5}, - {0xd3a8, 3225}, - {0xd3a9, 3226}, - {0xd3ab, 3227}, - {0xd3ad, 3228}, - {0xd3af, 0}, - {0xd3b0, 1}, - {0xd3b1, 2}, - {0xd3b2, 3}, - {0xd3b3, 4}, - {0xd3b4, 3229}, - {0xd3b6, 0}, - {0xd3b7, 1}, - {0xd3b8, 3230}, - {0xd3ba, 0}, - {0xd3bb, 1}, - {0xd3bc, 3231}, - {0xd3be, 0}, - {0xd3bf, 1}, - {0xd3c0, 2}, - {0xd3c1, 3}, - {0xd3c2, 4}, - {0xd3c3, 5}, - {0xd3c4, 3232}, - {0xd3c5, 3233}, - {0xd3c7, 0}, - {0xd3c8, 3234}, - {0xd3c9, 3235}, - {0xd3cb, 0}, - {0xd3cc, 1}, - {0xd3cd, 2}, - {0xd3ce, 3}, - {0xd3cf, 4}, - {0xd3d0, 3236}, - {0xd3d2, 0}, - {0xd3d3, 1}, - {0xd3d4, 2}, - {0xd3d5, 3}, - {0xd3d6, 4}, - {0xd3d7, 5}, - {0xd3d8, 3237}, - {0xd3da, 0}, - {0xd3db, 1}, - {0xd3dc, 2}, - {0xd3dd, 3}, - {0xd3de, 4}, - {0xd3df, 5}, - {0xd3e0, 6}, - {0xd3e1, 3238}, - {0xd3e3, 3239}, - {0xd3e5, 0}, - {0xd3e6, 1}, - {0xd3e7, 2}, - {0xd3e8, 3}, - {0xd3e9, 4}, - {0xd3ea, 5}, - {0xd3eb, 6}, - {0xd3ec, 3240}, - {0xd3ed, 3241}, - {0xd3ef, 0}, - {0xd3f0, 3242}, - {0xd3f2, 0}, - {0xd3f3, 1}, - {0xd3f4, 3243}, - {0xd3f6, 0}, - {0xd3f7, 1}, - {0xd3f8, 2}, - {0xd3f9, 3}, - {0xd3fa, 4}, - {0xd3fb, 5}, - {0xd3fc, 3244}, - {0xd3fd, 3245}, - {0xd3ff, 3246}, - {0xd401, 3247}, - {0xd403, 0}, - {0xd404, 1}, - {0xd405, 2}, - {0xd406, 3}, - {0xd407, 4}, - {0xd408, 3248}, - {0xd40a, 0}, - {0xd40b, 1}, - {0xd40c, 2}, - {0xd40d, 3}, - {0xd40e, 4}, - {0xd40f, 5}, - {0xd410, 6}, - {0xd411, 7}, - {0xd412, 8}, - {0xd413, 9}, - {0xd414, 10}, - {0xd415, 11}, - {0xd416, 12}, - {0xd417, 13}, - {0xd418, 14}, - {0xd419, 15}, - {0xd41a, 16}, - {0xd41b, 17}, - {0xd41c, 18}, - {0xd41d, 3249}, - {0xd41f, 0}, - {0xd420, 1}, - {0xd421, 2}, - {0xd422, 3}, - {0xd423, 4}, - {0xd424, 5}, - {0xd425, 6}, - {0xd426, 7}, - {0xd427, 8}, - {0xd428, 9}, - {0xd429, 10}, - {0xd42a, 11}, - {0xd42b, 12}, - {0xd42c, 13}, - {0xd42d, 14}, - {0xd42e, 15}, - {0xd42f, 16}, - {0xd430, 17}, - {0xd431, 18}, - {0xd432, 19}, - {0xd433, 20}, - {0xd434, 21}, - {0xd435, 22}, - {0xd436, 23}, - {0xd437, 24}, - {0xd438, 25}, - {0xd439, 26}, - {0xd43a, 27}, - {0xd43b, 28}, - {0xd43c, 29}, - {0xd43d, 30}, - {0xd43e, 31}, - {0xd43f, 32}, - {0xd440, 3250}, - {0xd442, 0}, - {0xd443, 1}, - {0xd444, 3251}, - {0xd446, 0}, - {0xd447, 1}, - {0xd448, 2}, - {0xd449, 3}, - {0xd44a, 4}, - {0xd44b, 5}, - {0xd44c, 6}, - {0xd44d, 7}, - {0xd44e, 8}, - {0xd44f, 9}, - {0xd450, 10}, - {0xd451, 11}, - {0xd452, 12}, - {0xd453, 13}, - {0xd454, 14}, - {0xd455, 15}, - {0xd456, 16}, - {0xd457, 17}, - {0xd458, 18}, - {0xd459, 19}, - {0xd45a, 20}, - {0xd45b, 21}, - {0xd45c, 3252}, - {0xd45e, 0}, - {0xd45f, 1}, - {0xd460, 3253}, - {0xd462, 0}, - {0xd463, 1}, - {0xd464, 3254}, - {0xd466, 0}, - {0xd467, 1}, - {0xd468, 2}, - {0xd469, 3}, - {0xd46a, 4}, - {0xd46b, 5}, - {0xd46c, 6}, - {0xd46d, 3255}, - {0xd46f, 3256}, - {0xd471, 0}, - {0xd472, 1}, - {0xd473, 2}, - {0xd474, 3}, - {0xd475, 4}, - {0xd476, 5}, - {0xd477, 6}, - {0xd478, 3257}, - {0xd479, 3258}, - {0xd47b, 0}, - {0xd47c, 3259}, - {0xd47e, 0}, - {0xd47f, 3260}, - {0xd480, 3261}, - {0xd482, 3262}, - {0xd484, 0}, - {0xd485, 1}, - {0xd486, 2}, - {0xd487, 3}, - {0xd488, 3263}, - {0xd489, 3264}, - {0xd48b, 3265}, - {0xd48d, 3266}, - {0xd48f, 0}, - {0xd490, 1}, - {0xd491, 2}, - {0xd492, 3}, - {0xd493, 4}, - {0xd494, 3267}, - {0xd496, 0}, - {0xd497, 1}, - {0xd498, 2}, - {0xd499, 3}, - {0xd49a, 4}, - {0xd49b, 5}, - {0xd49c, 6}, - {0xd49d, 7}, - {0xd49e, 8}, - {0xd49f, 9}, - {0xd4a0, 10}, - {0xd4a1, 11}, - {0xd4a2, 12}, - {0xd4a3, 13}, - {0xd4a4, 14}, - {0xd4a5, 15}, - {0xd4a6, 16}, - {0xd4a7, 17}, - {0xd4a8, 18}, - {0xd4a9, 3268}, - {0xd4ab, 0}, - {0xd4ac, 1}, - {0xd4ad, 2}, - {0xd4ae, 3}, - {0xd4af, 4}, - {0xd4b0, 5}, - {0xd4b1, 6}, - {0xd4b2, 7}, - {0xd4b3, 8}, - {0xd4b4, 9}, - {0xd4b5, 10}, - {0xd4b6, 11}, - {0xd4b7, 12}, - {0xd4b8, 13}, - {0xd4b9, 14}, - {0xd4ba, 15}, - {0xd4bb, 16}, - {0xd4bc, 17}, - {0xd4bd, 18}, - {0xd4be, 19}, - {0xd4bf, 20}, - {0xd4c0, 21}, - {0xd4c1, 22}, - {0xd4c2, 23}, - {0xd4c3, 24}, - {0xd4c4, 25}, - {0xd4c5, 26}, - {0xd4c6, 27}, - {0xd4c7, 28}, - {0xd4c8, 29}, - {0xd4c9, 30}, - {0xd4ca, 31}, - {0xd4cb, 32}, - {0xd4cc, 3269}, - {0xd4ce, 0}, - {0xd4cf, 1}, - {0xd4d0, 3270}, - {0xd4d2, 0}, - {0xd4d3, 1}, - {0xd4d4, 3271}, - {0xd4d6, 0}, - {0xd4d7, 1}, - {0xd4d8, 2}, - {0xd4d9, 3}, - {0xd4da, 4}, - {0xd4db, 5}, - {0xd4dc, 3272}, - {0xd4de, 0}, - {0xd4df, 3273}, - {0xd4e1, 0}, - {0xd4e2, 1}, - {0xd4e3, 2}, - {0xd4e4, 3}, - {0xd4e5, 4}, - {0xd4e6, 5}, - {0xd4e7, 6}, - {0xd4e8, 3274}, - {0xd4ea, 0}, - {0xd4eb, 1}, - {0xd4ec, 3275}, - {0xd4ee, 0}, - {0xd4ef, 1}, - {0xd4f0, 3276}, - {0xd4f2, 0}, - {0xd4f3, 1}, - {0xd4f4, 2}, - {0xd4f5, 3}, - {0xd4f6, 4}, - {0xd4f7, 5}, - {0xd4f8, 3277}, - {0xd4fa, 0}, - {0xd4fb, 3278}, - {0xd4fd, 3279}, - {0xd4ff, 0}, - {0xd501, 0}, - {0xd502, 1}, - {0xd503, 2}, - {0xd504, 3280}, - {0xd506, 0}, - {0xd507, 1}, - {0xd508, 3281}, - {0xd50a, 0}, - {0xd50b, 1}, - {0xd50c, 3282}, - {0xd50e, 0}, - {0xd50f, 1}, - {0xd510, 2}, - {0xd511, 3}, - {0xd512, 4}, - {0xd513, 5}, - {0xd514, 3283}, - {0xd515, 3284}, - {0xd517, 3285}, - {0xd519, 0}, - {0xd51a, 1}, - {0xd51b, 2}, - {0xd51c, 3}, - {0xd51d, 4}, - {0xd51e, 5}, - {0xd51f, 6}, - {0xd520, 7}, - {0xd521, 8}, - {0xd522, 9}, - {0xd523, 10}, - {0xd524, 11}, - {0xd525, 12}, - {0xd526, 13}, - {0xd527, 14}, - {0xd528, 15}, - {0xd529, 16}, - {0xd52a, 17}, - {0xd52b, 18}, - {0xd52c, 19}, - {0xd52d, 20}, - {0xd52e, 21}, - {0xd52f, 22}, - {0xd530, 23}, - {0xd531, 24}, - {0xd532, 25}, - {0xd533, 26}, - {0xd534, 27}, - {0xd535, 28}, - {0xd536, 29}, - {0xd537, 30}, - {0xd538, 31}, - {0xd539, 32}, - {0xd53a, 33}, - {0xd53b, 34}, - {0xd53c, 3286}, - {0xd53d, 3287}, - {0xd53f, 0}, - {0xd540, 3288}, - {0xd542, 0}, - {0xd543, 1}, - {0xd544, 3289}, - {0xd546, 0}, - {0xd547, 1}, - {0xd548, 2}, - {0xd549, 3}, - {0xd54a, 4}, - {0xd54b, 5}, - {0xd54c, 3290}, - {0xd54d, 3291}, - {0xd54f, 3292}, - {0xd551, 3293}, - {0xd553, 0}, - {0xd554, 1}, - {0xd555, 2}, - {0xd556, 3}, - {0xd557, 4}, - {0xd558, 3294}, - {0xd559, 3295}, - {0xd55b, 0}, - {0xd55c, 3296}, - {0xd55e, 0}, - {0xd55f, 1}, - {0xd560, 3297}, - {0xd562, 0}, - {0xd563, 1}, - {0xd564, 2}, - {0xd565, 3298}, - {0xd567, 0}, - {0xd568, 3299}, - {0xd569, 3300}, - {0xd56b, 3301}, - {0xd56d, 3302}, - {0xd56f, 0}, - {0xd570, 1}, - {0xd571, 2}, - {0xd572, 3}, - {0xd573, 4}, - {0xd574, 3303}, - {0xd575, 3304}, - {0xd577, 0}, - {0xd578, 3305}, - {0xd57a, 0}, - {0xd57b, 1}, - {0xd57c, 3306}, - {0xd57e, 0}, - {0xd57f, 1}, - {0xd580, 2}, - {0xd581, 3}, - {0xd582, 4}, - {0xd583, 5}, - {0xd584, 3307}, - {0xd585, 3308}, - {0xd587, 3309}, - {0xd588, 3310}, - {0xd589, 3311}, - {0xd58b, 0}, - {0xd58c, 1}, - {0xd58d, 2}, - {0xd58e, 3}, - {0xd58f, 4}, - {0xd590, 3312}, - {0xd592, 0}, - {0xd593, 1}, - {0xd594, 2}, - {0xd595, 3}, - {0xd596, 4}, - {0xd597, 5}, - {0xd598, 6}, - {0xd599, 7}, - {0xd59a, 8}, - {0xd59b, 9}, - {0xd59c, 10}, - {0xd59d, 11}, - {0xd59e, 12}, - {0xd59f, 13}, - {0xd5a0, 14}, - {0xd5a1, 15}, - {0xd5a2, 16}, - {0xd5a3, 17}, - {0xd5a4, 18}, - {0xd5a5, 3313}, - {0xd5a7, 0}, - {0xd5a8, 1}, - {0xd5a9, 2}, - {0xd5aa, 3}, - {0xd5ab, 4}, - {0xd5ac, 5}, - {0xd5ad, 6}, - {0xd5ae, 7}, - {0xd5af, 8}, - {0xd5b0, 9}, - {0xd5b1, 10}, - {0xd5b2, 11}, - {0xd5b3, 12}, - {0xd5b4, 13}, - {0xd5b5, 14}, - {0xd5b6, 15}, - {0xd5b7, 16}, - {0xd5b8, 17}, - {0xd5b9, 18}, - {0xd5ba, 19}, - {0xd5bb, 20}, - {0xd5bc, 21}, - {0xd5bd, 22}, - {0xd5be, 23}, - {0xd5bf, 24}, - {0xd5c0, 25}, - {0xd5c1, 26}, - {0xd5c2, 27}, - {0xd5c3, 28}, - {0xd5c4, 29}, - {0xd5c5, 30}, - {0xd5c6, 31}, - {0xd5c7, 32}, - {0xd5c8, 3314}, - {0xd5c9, 3315}, - {0xd5cb, 0}, - {0xd5cc, 3316}, - {0xd5ce, 0}, - {0xd5cf, 1}, - {0xd5d0, 3317}, - {0xd5d2, 3318}, - {0xd5d4, 0}, - {0xd5d5, 1}, - {0xd5d6, 2}, - {0xd5d7, 3}, - {0xd5d8, 3319}, - {0xd5d9, 3320}, - {0xd5db, 3321}, - {0xd5dd, 3322}, - {0xd5df, 0}, - {0xd5e0, 1}, - {0xd5e1, 2}, - {0xd5e2, 3}, - {0xd5e3, 4}, - {0xd5e4, 3323}, - {0xd5e5, 3324}, - {0xd5e7, 0}, - {0xd5e8, 3325}, - {0xd5ea, 0}, - {0xd5eb, 1}, - {0xd5ec, 3326}, - {0xd5ee, 0}, - {0xd5ef, 1}, - {0xd5f0, 2}, - {0xd5f1, 3}, - {0xd5f2, 4}, - {0xd5f3, 5}, - {0xd5f4, 3327}, - {0xd5f5, 3328}, - {0xd5f7, 3329}, - {0xd5f9, 3330}, - {0xd5fb, 0}, - {0xd5fc, 1}, - {0xd5fd, 2}, - {0xd5fe, 3}, - {0xd5ff, 4}, - {0xd600, 3331}, - {0xd601, 3332}, - {0xd603, 0}, - {0xd604, 3333}, - {0xd606, 0}, - {0xd607, 1}, - {0xd608, 3334}, - {0xd60a, 0}, - {0xd60b, 1}, - {0xd60c, 2}, - {0xd60d, 3}, - {0xd60e, 4}, - {0xd60f, 5}, - {0xd610, 3335}, - {0xd611, 3336}, - {0xd613, 3337}, - {0xd614, 3338}, - {0xd615, 3339}, - {0xd617, 0}, - {0xd618, 1}, - {0xd619, 2}, - {0xd61a, 3}, - {0xd61b, 4}, - {0xd61c, 3340}, - {0xd61e, 0}, - {0xd61f, 1}, - {0xd620, 3341}, - {0xd622, 0}, - {0xd623, 1}, - {0xd624, 3342}, - {0xd626, 0}, - {0xd627, 1}, - {0xd628, 2}, - {0xd629, 3}, - {0xd62a, 4}, - {0xd62b, 5}, - {0xd62c, 6}, - {0xd62d, 3343}, - {0xd62f, 0}, - {0xd630, 1}, - {0xd631, 2}, - {0xd632, 3}, - {0xd633, 4}, - {0xd634, 5}, - {0xd635, 6}, - {0xd636, 7}, - {0xd637, 8}, - {0xd638, 3344}, - {0xd639, 3345}, - {0xd63b, 0}, - {0xd63c, 3346}, - {0xd63e, 0}, - {0xd63f, 1}, - {0xd640, 3347}, - {0xd642, 0}, - {0xd643, 1}, - {0xd644, 2}, - {0xd645, 3348}, - {0xd647, 0}, - {0xd648, 3349}, - {0xd649, 3350}, - {0xd64b, 3351}, - {0xd64d, 3352}, - {0xd64f, 0}, - {0xd650, 1}, - {0xd651, 3353}, - {0xd653, 0}, - {0xd654, 3354}, - {0xd655, 3355}, - {0xd657, 0}, - {0xd658, 3356}, - {0xd65a, 0}, - {0xd65b, 1}, - {0xd65c, 3357}, - {0xd65e, 0}, - {0xd65f, 1}, - {0xd660, 2}, - {0xd661, 3}, - {0xd662, 4}, - {0xd663, 5}, - {0xd664, 6}, - {0xd665, 7}, - {0xd666, 8}, - {0xd667, 3358}, - {0xd669, 3359}, - {0xd66b, 0}, - {0xd66c, 1}, - {0xd66d, 2}, - {0xd66e, 3}, - {0xd66f, 4}, - {0xd670, 3360}, - {0xd671, 3361}, - {0xd673, 0}, - {0xd674, 3362}, - {0xd676, 0}, - {0xd677, 1}, - {0xd678, 2}, - {0xd679, 3}, - {0xd67a, 4}, - {0xd67b, 5}, - {0xd67c, 6}, - {0xd67d, 7}, - {0xd67e, 8}, - {0xd67f, 9}, - {0xd680, 10}, - {0xd681, 11}, - {0xd682, 12}, - {0xd683, 3363}, - {0xd685, 3364}, - {0xd687, 0}, - {0xd688, 1}, - {0xd689, 2}, - {0xd68a, 3}, - {0xd68b, 4}, - {0xd68c, 3365}, - {0xd68d, 3366}, - {0xd68f, 0}, - {0xd690, 3367}, - {0xd692, 0}, - {0xd693, 1}, - {0xd694, 3368}, - {0xd696, 0}, - {0xd697, 1}, - {0xd698, 2}, - {0xd699, 3}, - {0xd69a, 4}, - {0xd69b, 5}, - {0xd69c, 6}, - {0xd69d, 3369}, - {0xd69f, 3370}, - {0xd6a1, 3371}, - {0xd6a3, 0}, - {0xd6a4, 1}, - {0xd6a5, 2}, - {0xd6a6, 3}, - {0xd6a7, 4}, - {0xd6a8, 3372}, - {0xd6aa, 0}, - {0xd6ab, 1}, - {0xd6ac, 3373}, - {0xd6ae, 0}, - {0xd6af, 1}, - {0xd6b0, 3374}, - {0xd6b2, 0}, - {0xd6b3, 1}, - {0xd6b4, 2}, - {0xd6b5, 3}, - {0xd6b6, 4}, - {0xd6b7, 5}, - {0xd6b8, 6}, - {0xd6b9, 3375}, - {0xd6bb, 3376}, - {0xd6bd, 0}, - {0xd6be, 1}, - {0xd6bf, 2}, - {0xd6c0, 3}, - {0xd6c1, 4}, - {0xd6c2, 5}, - {0xd6c3, 6}, - {0xd6c4, 3377}, - {0xd6c5, 3378}, - {0xd6c7, 0}, - {0xd6c8, 3379}, - {0xd6ca, 0}, - {0xd6cb, 1}, - {0xd6cc, 3380}, - {0xd6ce, 0}, - {0xd6cf, 1}, - {0xd6d0, 2}, - {0xd6d1, 3381}, - {0xd6d3, 0}, - {0xd6d4, 3382}, - {0xd6d6, 0}, - {0xd6d7, 3383}, - {0xd6d9, 3384}, - {0xd6db, 0}, - {0xd6dc, 1}, - {0xd6dd, 2}, - {0xd6de, 3}, - {0xd6df, 4}, - {0xd6e0, 3385}, - {0xd6e2, 0}, - {0xd6e3, 1}, - {0xd6e4, 3386}, - {0xd6e6, 0}, - {0xd6e7, 1}, - {0xd6e8, 3387}, - {0xd6ea, 0}, - {0xd6eb, 1}, - {0xd6ec, 2}, - {0xd6ed, 3}, - {0xd6ee, 4}, - {0xd6ef, 5}, - {0xd6f0, 3388}, - {0xd6f2, 0}, - {0xd6f3, 1}, - {0xd6f4, 2}, - {0xd6f5, 3389}, - {0xd6f7, 0}, - {0xd6f8, 1}, - {0xd6f9, 2}, - {0xd6fa, 3}, - {0xd6fb, 4}, - {0xd6fc, 3390}, - {0xd6fd, 3391}, - {0xd6ff, 0}, - {0xd700, 3392}, - {0xd702, 0}, - {0xd703, 1}, - {0xd704, 3393}, - {0xd706, 0}, - {0xd707, 1}, - {0xd708, 2}, - {0xd709, 3}, - {0xd70a, 4}, - {0xd70b, 5}, - {0xd70c, 6}, - {0xd70d, 7}, - {0xd70e, 8}, - {0xd70f, 9}, - {0xd710, 10}, - {0xd711, 3394}, - {0xd713, 0}, - {0xd714, 1}, - {0xd715, 2}, - {0xd716, 3}, - {0xd717, 4}, - {0xd718, 3395}, - {0xd719, 3396}, - {0xd71b, 0}, - {0xd71c, 3397}, - {0xd71e, 0}, - {0xd71f, 1}, - {0xd720, 3398}, - {0xd722, 0}, - {0xd723, 1}, - {0xd724, 2}, - {0xd725, 3}, - {0xd726, 4}, - {0xd727, 5}, - {0xd728, 3399}, - {0xd729, 3400}, - {0xd72b, 3401}, - {0xd72d, 3402}, - {0xd72f, 0}, - {0xd730, 1}, - {0xd731, 2}, - {0xd732, 3}, - {0xd733, 4}, - {0xd734, 3403}, - {0xd735, 3404}, - {0xd737, 0}, - {0xd738, 3405}, - {0xd73a, 0}, - {0xd73b, 1}, - {0xd73c, 3406}, - {0xd73e, 0}, - {0xd73f, 1}, - {0xd740, 2}, - {0xd741, 3}, - {0xd742, 4}, - {0xd743, 5}, - {0xd744, 3407}, - {0xd746, 0}, - {0xd747, 3408}, - {0xd749, 3409}, - {0xd74b, 0}, - {0xd74c, 1}, - {0xd74d, 2}, - {0xd74e, 3}, - {0xd74f, 4}, - {0xd750, 3410}, - {0xd751, 3411}, - {0xd753, 0}, - {0xd754, 3412}, - {0xd756, 3413}, - {0xd757, 3414}, - {0xd758, 3415}, - {0xd759, 3416}, - {0xd75b, 0}, - {0xd75c, 1}, - {0xd75d, 2}, - {0xd75e, 3}, - {0xd75f, 4}, - {0xd760, 3417}, - {0xd761, 3418}, - {0xd763, 3419}, - {0xd765, 3420}, - {0xd767, 0}, - {0xd768, 1}, - {0xd769, 3421}, - {0xd76b, 0}, - {0xd76c, 3422}, - {0xd76e, 0}, - {0xd76f, 1}, - {0xd770, 3423}, - {0xd772, 0}, - {0xd773, 1}, - {0xd774, 3424}, - {0xd776, 0}, - {0xd777, 1}, - {0xd778, 2}, - {0xd779, 3}, - {0xd77a, 4}, - {0xd77b, 5}, - {0xd77c, 3425}, - {0xd77d, 3426}, - {0xd77f, 0}, - {0xd780, 1}, - {0xd781, 3427}, - {0xd783, 0}, - {0xd784, 1}, - {0xd785, 2}, - {0xd786, 3}, - {0xd787, 4}, - {0xd788, 3428}, - {0xd789, 3429}, - {0xd78b, 0}, - {0xd78c, 3430}, - {0xd78e, 0}, - {0xd78f, 1}, - {0xd790, 3431}, - {0xd792, 0}, - {0xd793, 1}, - {0xd794, 2}, - {0xd795, 3}, - {0xd796, 4}, - {0xd797, 5}, - {0xd798, 3432}, - {0xd799, 3433}, - {0xd79b, 3434}, - {0xd79d, 3435}, - {0xd79f, 0}, - {0xd7a0, 1}, - {0xd7a1, 2}, - {0xd7a2, 3}, - {0xd7a3, 4}, - {0xf900, 4116}, - {0xf901, 3678}, - {0xf902, 7053}, - {0xf903, 3460}, - {0xf904, 7900}, - {0xf905, 3802}, - {0xf906, 3902}, - {0xf907, 3946}, - {0xf908, 3946}, - {0xf909, 3708}, - {0xf90a, 4131}, - {0xf90b, 4374}, - {0xf90c, 4156}, - {0xf90d, 4375}, - {0xf90e, 4376}, - {0xf90f, 4377}, - {0xf910, 4378}, - {0xf911, 4379}, - {0xf912, 4380}, - {0xf913, 4381}, - {0xf914, 5800}, - {0xf915, 4382}, - {0xf916, 4383}, - {0xf917, 4384}, - {0xf918, 4386}, - {0xf919, 4387}, - {0xf91a, 4388}, - {0xf91b, 4389}, - {0xf91c, 4390}, - {0xf91d, 4391}, - {0xf91e, 4394}, - {0xf91f, 4395}, - {0xf920, 4396}, - {0xf921, 4399}, - {0xf922, 4403}, - {0xf923, 4406}, - {0xf924, 4407}, - {0xf925, 4409}, - {0xf926, 4410}, - {0xf927, 4411}, - {0xf928, 4412}, - {0xf929, 4413}, - {0xf92a, 4414}, - {0xf92b, 4415}, - {0xf92c, 4419}, - {0xf92d, 4420}, - {0xf92e, 4424}, - {0xf92f, 4511}, - {0xf930, 4513}, - {0xf931, 4514}, - {0xf932, 4517}, - {0xf933, 4518}, - {0xf934, 4519}, - {0xf935, 4520}, - {0xf936, 4521}, - {0xf937, 4522}, - {0xf938, 4524}, - {0xf939, 4525}, - {0xf93a, 4526}, - {0xf93b, 4528}, - {0xf93c, 4529}, - {0xf93d, 4530}, - {0xf93e, 4531}, - {0xf93f, 4532}, - {0xf940, 4533}, - {0xf941, 4535}, - {0xf942, 4536}, - {0xf943, 4537}, - {0xf944, 4541}, - {0xf945, 4542}, - {0xf946, 4545}, - {0xf947, 4546}, - {0xf948, 4547}, - {0xf949, 4550}, - {0xf94a, 4564}, - {0xf94b, 4566}, - {0xf94c, 4567}, - {0xf94d, 4568}, - {0xf94e, 4569}, - {0xf94f, 4571}, - {0xf950, 4572}, - {0xf951, 4576}, - {0xf952, 4604}, - {0xf953, 4605}, - {0xf954, 4606}, - {0xf955, 4607}, - {0xf956, 4609}, - {0xf957, 4610}, - {0xf958, 4611}, - {0xf959, 4612}, - {0xf95a, 4318}, - {0xf95b, 4136}, - {0xf95c, 5800}, - {0xf95d, 4139}, - {0xf95e, 4192}, - {0xf95f, 4167}, - {0xf960, 4172}, - {0xf961, 5552}, - {0xf962, 6424}, - {0xf963, 5151}, - {0xf964, 4922}, - {0xf965, 7518}, - {0xf966, 5079}, - {0xf967, 5109}, - {0xf968, 7607}, - {0xf969, 5584}, - {0xf96a, 5367}, - {0xf96b, 7083}, - {0xf96c, 5362}, - {0xf96d, 5485}, - {0xf96e, 6001}, - {0xf96f, 5460}, - {0xf970, 5317}, - {0xf971, 7009}, - {0xf972, 7370}, - {0xf973, 5678}, - {0xf974, 5874}, - {0xf975, 4425}, - {0xf976, 4426}, - {0xf977, 4427}, - {0xf978, 4429}, - {0xf979, 4430}, - {0xf97a, 4431}, - {0xf97b, 4435}, - {0xf97c, 4436}, - {0xf97d, 4437}, - {0xf97e, 4439}, - {0xf97f, 4442}, - {0xf980, 4443}, - {0xf981, 4159}, - {0xf982, 4444}, - {0xf983, 4447}, - {0xf984, 4449}, - {0xf985, 4450}, - {0xf986, 4453}, - {0xf987, 4455}, - {0xf988, 4456}, - {0xf989, 4457}, - {0xf98a, 4458}, - {0xf98b, 4459}, - {0xf98c, 4460}, - {0xf98d, 4463}, - {0xf98e, 4160}, - {0xf98f, 4465}, - {0xf990, 4466}, - {0xf991, 4161}, - {0xf992, 4468}, - {0xf993, 4469}, - {0xf994, 4470}, - {0xf995, 4162}, - {0xf996, 4471}, - {0xf997, 4472}, - {0xf998, 4474}, - {0xf999, 4473}, - {0xf99a, 4475}, - {0xf99b, 4476}, - {0xf99c, 4478}, - {0xf99d, 4479}, - {0xf99e, 6447}, - {0xf99f, 4481}, - {0xf9a0, 4482}, - {0xf9a1, 5460}, - {0xf9a2, 4483}, - {0xf9a3, 4163}, - {0xf9a4, 4166}, - {0xf9a5, 4485}, - {0xf9a6, 4487}, - {0xf9a7, 4488}, - {0xf9a8, 4489}, - {0xf9a9, 4491}, - {0xf9aa, 4167}, - {0xf9ab, 4493}, - {0xf9ac, 4494}, - {0xf9ad, 4495}, - {0xf9ae, 7783}, - {0xf9af, 4497}, - {0xf9b0, 4499}, - {0xf9b1, 4501}, - {0xf9b2, 4502}, - {0xf9b3, 4503}, - {0xf9b4, 4504}, - {0xf9b5, 4506}, - {0xf9b6, 4508}, - {0xf9b7, 4509}, - {0xf9b8, 4510}, - {0xf9b9, 5797}, - {0xf9ba, 4551}, - {0xf9bb, 4552}, - {0xf9bc, 4553}, - {0xf9bd, 4180}, - {0xf9be, 4555}, - {0xf9bf, 5800}, - {0xf9c0, 4556}, - {0xf9c1, 4557}, - {0xf9c2, 4560}, - {0xf9c3, 4561}, - {0xf9c4, 4563}, - {0xf9c5, 7988}, - {0xf9c6, 6123}, - {0xf9c7, 4577}, - {0xf9c8, 4183}, - {0xf9c9, 4579}, - {0xf9ca, 4581}, - {0xf9cb, 4582}, - {0xf9cc, 4584}, - {0xf9cd, 4586}, - {0xf9ce, 4588}, - {0xf9cf, 4184}, - {0xf9d0, 4590}, - {0xf9d1, 4591}, - {0xf9d2, 4592}, - {0xf9d3, 4593}, - {0xf9d4, 4595}, - {0xf9d5, 4596}, - {0xf9d6, 4597}, - {0xf9d7, 4599}, - {0xf9d8, 4600}, - {0xf9d9, 4601}, - {0xf9da, 4602}, - {0xf9db, 5552}, - {0xf9dc, 4603}, - {0xf9dd, 4614}, - {0xf9de, 4616}, - {0xf9df, 4618}, - {0xf9e0, 5950}, - {0xf9e1, 4620}, - {0xf9e2, 4621}, - {0xf9e3, 4187}, - {0xf9e4, 4625}, - {0xf9e5, 4627}, - {0xf9e6, 4629}, - {0xf9e7, 4632}, - {0xf9e8, 4633}, - {0xf9e9, 4634}, - {0xf9ea, 4636}, - {0xf9eb, 4188}, - {0xf9ec, 4189}, - {0xf9ed, 4638}, - {0xf9ee, 4640}, - {0xf9ef, 4641}, - {0xf9f0, 4642}, - {0xf9f1, 4644}, - {0xf9f2, 4645}, - {0xf9f3, 4646}, - {0xf9f4, 4647}, - {0xf9f5, 4648}, - {0xf9f6, 4650}, - {0xf9f7, 4653}, - {0xf9f8, 4654}, - {0xf9f9, 4655}, - {0xf9fa, 5351}, - {0xf9fb, 6494}, - {0xf9fc, 5731}, - {0xf9fd, 5771}, - {0xf9fe, 4191}, - {0xf9ff, 6484}, - {0xfa00, 6684}, - {0xfa01, 4279}, - {0xfa02, 7139}, - {0xfa03, 4247}, - {0xfa04, 4266}, - {0xfa05, 4340}, - {0xfa06, 7572}, - {0xfa07, 5088}, - {0xfa08, 7709}, - {0xfa09, 3558}, - {0xfa0a, 3644}, - {0xfa0b, 3815}, - {0xff01, 264}, - {0xff02, 265}, - {0xff03, 266}, - {0xff04, 267}, - {0xff05, 268}, - {0xff06, 269}, - {0xff07, 270}, - {0xff08, 271}, - {0xff09, 272}, - {0xff0a, 273}, - {0xff0b, 274}, - {0xff0c, 275}, - {0xff0d, 276}, - {0xff0e, 277}, - {0xff0f, 278}, - {0xff10, 279}, - {0xff11, 280}, - {0xff12, 281}, - {0xff13, 282}, - {0xff14, 283}, - {0xff15, 284}, - {0xff16, 285}, - {0xff17, 286}, - {0xff18, 287}, - {0xff19, 288}, - {0xff1a, 289}, - {0xff1b, 290}, - {0xff1c, 291}, - {0xff1d, 292}, - {0xff1e, 293}, - {0xff1f, 294}, - {0xff20, 295}, - {0xff21, 296}, - {0xff22, 297}, - {0xff23, 298}, - {0xff24, 299}, - {0xff25, 300}, - {0xff26, 301}, - {0xff27, 302}, - {0xff28, 303}, - {0xff29, 304}, - {0xff2a, 305}, - {0xff2b, 306}, - {0xff2c, 307}, - {0xff2d, 308}, - {0xff2e, 309}, - {0xff2f, 310}, - {0xff30, 311}, - {0xff31, 312}, - {0xff32, 313}, - {0xff33, 314}, - {0xff34, 315}, - {0xff35, 316}, - {0xff36, 317}, - {0xff37, 318}, - {0xff38, 319}, - {0xff39, 320}, - {0xff3a, 321}, - {0xff3b, 322}, - {0xff3c, 112}, - {0xff3d, 324}, - {0xff3e, 325}, - {0xff3f, 326}, - {0xff40, 327}, - {0xff41, 328}, - {0xff42, 329}, - {0xff43, 330}, - {0xff44, 331}, - {0xff45, 332}, - {0xff46, 333}, - {0xff47, 334}, - {0xff48, 335}, - {0xff49, 336}, - {0xff4a, 337}, - {0xff4b, 338}, - {0xff4c, 339}, - {0xff4d, 340}, - {0xff4e, 341}, - {0xff4f, 342}, - {0xff50, 343}, - {0xff51, 344}, - {0xff52, 345}, - {0xff53, 346}, - {0xff54, 347}, - {0xff55, 348}, - {0xff56, 349}, - {0xff57, 350}, - {0xff58, 351}, - {0xff59, 352}, - {0xff5a, 353}, - {0xff5b, 354}, - {0xff5c, 355}, - {0xff5d, 356}, - {0xff5e, 113}, - {0xffe0, 143}, - {0xffe1, 144}, - {0xffe2, 194}, - {0xffe3, 357}, - {0xffe5, 145}, - {0xffe6, 323}}; - diff --git a/src/add-ons/print/drivers/pdf/source/unicode0.h b/src/add-ons/print/drivers/pdf/source/unicode0.h deleted file mode 100644 index 2bdaac5174..0000000000 --- a/src/add-ons/print/drivers/pdf/source/unicode0.h +++ /dev/null @@ -1,260 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -static uint16 unicode0[] = { -0x20, -0x21, -0x22, -0x23, -0x24, -0x25, -0x26, -0x27, -0x28, -0x29, -0x2a, -0x2b, -0x2c, -0x2d, -0x2e, -0x2f, -0x30, -0x31, -0x32, -0x33, -0x34, -0x35, -0x36, -0x37, -0x38, -0x39, -0x3a, -0x3b, -0x3c, -0x3d, -0x3e, -0x3f, -0x40, -0x41, -0x42, -0x43, -0x44, -0x45, -0x46, -0x47, -0x48, -0x49, -0x4a, -0x4b, -0x4c, -0x4d, -0x4e, -0x4f, -0x50, -0x51, -0x52, -0x53, -0x54, -0x55, -0x56, -0x57, -0x58, -0x59, -0x5a, -0x5b, -0x5c, -0x5d, -0x5e, -0x5f, -0x60, -0x61, -0x62, -0x63, -0x64, -0x65, -0x66, -0x67, -0x68, -0x69, -0x6a, -0x6b, -0x6c, -0x6d, -0x6e, -0x6f, -0x70, -0x71, -0x72, -0x73, -0x74, -0x75, -0x76, -0x77, -0x78, -0x79, -0x7a, -0x7b, -0x7c, -0x7d, -0x7e, -0xa0, -0xa1, -0xa2, -0xa3, -0xa4, -0xa5, -0xa6, -0xa7, -0xa8, -0xa9, -0xaa, -0xab, -0xac, -0xad, -0xae, -0xaf, -0xb0, -0xb1, -0xb2, -0xb3, -0xb4, -0xb5, -0xb6, -0xb7, -0xb8, -0xb9, -0xba, -0xbb, -0xbc, -0xbd, -0xbe, -0xbf, -0xc0, -0xc1, -0xc2, -0xc3, -0xc4, -0xc5, -0xc6, -0xc7, -0xc8, -0xc9, -0xca, -0xcb, -0xcc, -0xcd, -0xce, -0xcf, -0xd0, -0xd1, -0xd2, -0xd3, -0xd4, -0xd5, -0xd6, -0xd7, -0xd8, -0xd9, -0xda, -0xdb, -0xdc, -0xdd, -0xde, -0xdf, -0xe0, -0xe1, -0xe2, -0xe3, -0xe4, -0xe5, -0xe6, -0xe7, -0xe8, -0xe9, -0xea, -0xeb, -0xec, -0xed, -0xee, -0xef, -0xf0, -0xf1, -0xf2, -0xf3, -0xf4, -0xf5, -0xf6, -0xf7, -0xf8, -0xf9, -0xfa, -0xfb, -0xfc, -0xfd, -0xfe, -0xff, -0x100, -0x101, -0x102, -0x103, -0x104, -0x105, -0x106, -0x107, -0x108, -0x109, -0x10a, -0x10b, -0x10c, -0x10d, -0x10e, -0x10f, -0x110, -0x111, -0x112, -0x113, -0x114, -0x115, -0x116, -0x117, -0x118, -0x119, -0x11a, -0x11b, -0x11c, -0x11d, -0x11e, -0x11f, -0x120, -0x121, -0x122, -0x123, -0x124, -0x125, -0x126, -0x127, -0x128, -0x129, -0x12a, -0x12b, -0x12c, -0x12d, -0x12e, -0x12f, -0x130, -0x131, -0x132, -0x133, -0x134, -0x135, -0x136, -0x137, -0x138, -0x139, -0x13a, -0x13b, -0x13c, -0x13d, -0x13e, -0x13f, -0x140 -}; - diff --git a/src/add-ons/print/drivers/pdf/source/unicode1.h b/src/add-ons/print/drivers/pdf/source/unicode1.h deleted file mode 100644 index ae7e073e16..0000000000 --- a/src/add-ons/print/drivers/pdf/source/unicode1.h +++ /dev/null @@ -1,260 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -static uint16 unicode1[] = { -0x141, -0x142, -0x143, -0x144, -0x145, -0x146, -0x147, -0x148, -0x149, -0x14a, -0x14b, -0x14c, -0x14d, -0x14e, -0x14f, -0x150, -0x151, -0x152, -0x153, -0x154, -0x155, -0x156, -0x157, -0x158, -0x159, -0x15a, -0x15b, -0x15c, -0x15d, -0x15e, -0x15f, -0x160, -0x161, -0x162, -0x163, -0x164, -0x165, -0x166, -0x167, -0x168, -0x169, -0x16a, -0x16b, -0x16c, -0x16d, -0x16e, -0x16f, -0x170, -0x171, -0x172, -0x173, -0x174, -0x175, -0x176, -0x177, -0x178, -0x179, -0x17a, -0x17b, -0x17c, -0x17d, -0x17e, -0x17f, -0x192, -0x1a0, -0x1a1, -0x1af, -0x1b0, -0x1e6, -0x1e7, -0x1fa, -0x1fb, -0x1fc, -0x1fd, -0x1fe, -0x1ff, -0x218, -0x219, -0x21a, -0x21b, -0x2bc, -0x2bd, -0x2c6, -0x2c7, -0x2c9, -0x2d8, -0x2d9, -0x2da, -0x2db, -0x2dc, -0x2dd, -0x300, -0x301, -0x303, -0x309, -0x323, -0x384, -0x385, -0x386, -0x387, -0x388, -0x389, -0x38a, -0x38c, -0x38e, -0x38f, -0x390, -0x391, -0x392, -0x393, -0x394, -0x395, -0x396, -0x397, -0x398, -0x399, -0x39a, -0x39b, -0x39c, -0x39d, -0x39e, -0x39f, -0x3a0, -0x3a1, -0x3a3, -0x3a4, -0x3a5, -0x3a6, -0x3a7, -0x3a8, -0x3a9, -0x3aa, -0x3ab, -0x3ac, -0x3ad, -0x3ae, -0x3af, -0x3b0, -0x3b1, -0x3b2, -0x3b3, -0x3b4, -0x3b5, -0x3b6, -0x3b7, -0x3b8, -0x3b9, -0x3ba, -0x3bb, -0x3bc, -0x3bd, -0x3be, -0x3bf, -0x3c0, -0x3c1, -0x3c2, -0x3c3, -0x3c4, -0x3c5, -0x3c6, -0x3c7, -0x3c8, -0x3c9, -0x3ca, -0x3cb, -0x3cc, -0x3cd, -0x3ce, -0x3d1, -0x3d2, -0x3d5, -0x3d6, -0x401, -0x402, -0x403, -0x404, -0x405, -0x406, -0x407, -0x408, -0x409, -0x40a, -0x40b, -0x40c, -0x40e, -0x40f, -0x410, -0x411, -0x412, -0x413, -0x414, -0x415, -0x416, -0x417, -0x418, -0x419, -0x41a, -0x41b, -0x41c, -0x41d, -0x41e, -0x41f, -0x420, -0x421, -0x422, -0x423, -0x424, -0x425, -0x426, -0x427, -0x428, -0x429, -0x42a, -0x42b, -0x42c, -0x42d, -0x42e, -0x42f, -0x430, -0x431, -0x432, -0x433, -0x434, -0x435, -0x436, -0x437, -0x438, -0x439, -0x43a, -0x43b, -0x43c, -0x43d, -0x43e, -0x43f, -0x440, -0x441, -0x442, -0x443, -0x444, -0x445, -0x446, -0x447, -0x448, -0x449, -0x44a, -0x44b, -0x44c, -0x44d, -0x44e, -0x44f, -0x451, -0x452, -0x453, -0x454, -0x455, -0x456 -}; - diff --git a/src/add-ons/print/drivers/pdf/source/unicode2.h b/src/add-ons/print/drivers/pdf/source/unicode2.h deleted file mode 100644 index f13eebd3ae..0000000000 --- a/src/add-ons/print/drivers/pdf/source/unicode2.h +++ /dev/null @@ -1,260 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -static uint16 unicode2[] = { -0x457, -0x458, -0x459, -0x45a, -0x45b, -0x45c, -0x45e, -0x45f, -0x462, -0x463, -0x472, -0x473, -0x474, -0x475, -0x490, -0x491, -0x4d9, -0x5b0, -0x5b1, -0x5b2, -0x5b3, -0x5b4, -0x5b5, -0x5b6, -0x5b7, -0x5b8, -0x5b9, -0x5bb, -0x5bc, -0x5bd, -0x5be, -0x5bf, -0x5c0, -0x5c1, -0x5c2, -0x5c3, -0x5d0, -0x5d1, -0x5d2, -0x5d3, -0x5d4, -0x5d5, -0x5d6, -0x5d7, -0x5d8, -0x5d9, -0x5da, -0x5db, -0x5dc, -0x5dd, -0x5de, -0x5df, -0x5e0, -0x5e1, -0x5e2, -0x5e3, -0x5e4, -0x5e5, -0x5e6, -0x5e7, -0x5e8, -0x5e9, -0x5ea, -0x5f0, -0x5f1, -0x5f2, -0x60c, -0x61b, -0x61f, -0x621, -0x622, -0x623, -0x624, -0x625, -0x626, -0x627, -0x628, -0x629, -0x62a, -0x62b, -0x62c, -0x62d, -0x62e, -0x62f, -0x630, -0x631, -0x632, -0x633, -0x634, -0x635, -0x636, -0x637, -0x638, -0x639, -0x63a, -0x640, -0x641, -0x642, -0x643, -0x644, -0x645, -0x646, -0x647, -0x648, -0x649, -0x64a, -0x64b, -0x64c, -0x64d, -0x64e, -0x64f, -0x650, -0x651, -0x652, -0x660, -0x661, -0x662, -0x663, -0x664, -0x665, -0x666, -0x667, -0x668, -0x669, -0x66a, -0x66d, -0x679, -0x67e, -0x686, -0x688, -0x691, -0x698, -0x6a4, -0x6af, -0x6ba, -0x6d2, -0x6d5, -0x1e80, -0x1e81, -0x1e82, -0x1e83, -0x1e84, -0x1e85, -0x1ef2, -0x1ef3, -0x200c, -0x200d, -0x200e, -0x200f, -0x2012, -0x2013, -0x2014, -0x2015, -0x2017, -0x2018, -0x2019, -0x201a, -0x201b, -0x201c, -0x201d, -0x201e, -0x2020, -0x2021, -0x2022, -0x2024, -0x2025, -0x2026, -0x202c, -0x202d, -0x202e, -0x2030, -0x2032, -0x2033, -0x2039, -0x203a, -0x203c, -0x2044, -0x2070, -0x2074, -0x2075, -0x2076, -0x2077, -0x2078, -0x2079, -0x207d, -0x207e, -0x207f, -0x2080, -0x2081, -0x2082, -0x2083, -0x2084, -0x2085, -0x2086, -0x2087, -0x2088, -0x2089, -0x208d, -0x208e, -0x20a1, -0x20a3, -0x20a4, -0x20a7, -0x20aa, -0x20ab, -0x20ac, -0x2105, -0x2111, -0x2113, -0x2116, -0x2118, -0x211c, -0x211e, -0x2122, -0x2126, -0x212e, -0x2135, -0x2153, -0x2154, -0x215b, -0x215c, -0x215d, -0x215e, -0x2190, -0x2191, -0x2192, -0x2193, -0x2194, -0x2195, -0x21a8, -0x21b5, -0x21d0, -0x21d1, -0x21d2, -0x21d3, -0x21d4, -0x2200, -0x2202, -0x2203, -0x2205, -0x2206, -0x2207, -0x2208, -0x2209, -0x220b, -0x220f, -0x2211, -0x2212, -0x2215, -0x2217, -0x2219, -0x221a, -0x221d, -0x221e, -0x221f, -0x2220 -}; - diff --git a/src/add-ons/print/drivers/pdf/source/unicode3.h b/src/add-ons/print/drivers/pdf/source/unicode3.h deleted file mode 100644 index 55f5364135..0000000000 --- a/src/add-ons/print/drivers/pdf/source/unicode3.h +++ /dev/null @@ -1,260 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -static uint16 unicode3[] = { -0x2227, -0x2228, -0x2229, -0x222a, -0x222b, -0x2234, -0x223c, -0x2245, -0x2248, -0x2260, -0x2261, -0x2264, -0x2265, -0x2282, -0x2283, -0x2284, -0x2286, -0x2287, -0x2295, -0x2297, -0x22a5, -0x22c5, -0x2302, -0x2310, -0x2320, -0x2321, -0x2329, -0x232a, -0x2500, -0x2502, -0x250c, -0x2510, -0x2514, -0x2518, -0x251c, -0x2524, -0x252c, -0x2534, -0x253c, -0x2550, -0x2551, -0x2552, -0x2553, -0x2554, -0x2555, -0x2556, -0x2557, -0x2558, -0x2559, -0x255a, -0x255b, -0x255c, -0x255d, -0x255e, -0x255f, -0x2560, -0x2561, -0x2562, -0x2563, -0x2564, -0x2565, -0x2566, -0x2567, -0x2568, -0x2569, -0x256a, -0x256b, -0x256c, -0x2580, -0x2584, -0x2588, -0x258c, -0x2590, -0x2591, -0x2592, -0x2593, -0x25a0, -0x25a1, -0x25aa, -0x25ab, -0x25ac, -0x25b2, -0x25ba, -0x25bc, -0x25c4, -0x25ca, -0x25cb, -0x25cf, -0x25d8, -0x25d9, -0x25e6, -0x263a, -0x263b, -0x263c, -0x2640, -0x2642, -0x2660, -0x2663, -0x2665, -0x2666, -0x266a, -0x266b, -0xf6be, -0xf6bf, -0xf6c0, -0xf6c1, -0xf6c2, -0xf6c3, -0xf6c4, -0xf6c5, -0xf6c6, -0xf6c7, -0xf6c8, -0xf6c9, -0xf6ca, -0xf6cb, -0xf6cc, -0xf6cd, -0xf6ce, -0xf6cf, -0xf6d0, -0xf6d1, -0xf6d2, -0xf6d3, -0xf6d4, -0xf6d5, -0xf6d6, -0xf6d7, -0xf6d8, -0xf6d9, -0xf6da, -0xf6db, -0xf6dc, -0xf6dd, -0xf6de, -0xf6df, -0xf6e0, -0xf6e1, -0xf6e2, -0xf6e3, -0xf6e4, -0xf6e5, -0xf6e6, -0xf6e7, -0xf6e8, -0xf6e9, -0xf6ea, -0xf6eb, -0xf6ec, -0xf6ed, -0xf6ee, -0xf6ef, -0xf6f0, -0xf6f1, -0xf6f2, -0xf6f3, -0xf6f4, -0xf6f5, -0xf6f6, -0xf6f7, -0xf6f8, -0xf6f9, -0xf6fa, -0xf6fb, -0xf6fc, -0xf6fd, -0xf6fe, -0xf6ff, -0xf721, -0xf724, -0xf726, -0xf730, -0xf731, -0xf732, -0xf733, -0xf734, -0xf735, -0xf736, -0xf737, -0xf738, -0xf739, -0xf73f, -0xf760, -0xf761, -0xf762, -0xf763, -0xf764, -0xf765, -0xf766, -0xf767, -0xf768, -0xf769, -0xf76a, -0xf76b, -0xf76c, -0xf76d, -0xf76e, -0xf76f, -0xf770, -0xf771, -0xf772, -0xf773, -0xf774, -0xf775, -0xf776, -0xf777, -0xf778, -0xf779, -0xf77a, -0xf7a1, -0xf7a2, -0xf7a8, -0xf7af, -0xf7b4, -0xf7b8, -0xf7bf, -0xf7e0, -0xf7e1, -0xf7e2, -0xf7e3, -0xf7e4, -0xf7e5, -0xf7e6, -0xf7e7, -0xf7e8, -0xf7e9, -0xf7ea, -0xf7eb, -0xf7ec, -0xf7ed, -0xf7ee, -0xf7ef, -0xf7f0, -0xf7f1, -0xf7f2, -0xf7f3, -0xf7f4, -0xf7f5, -0xf7f6, -0xf7f8, -0xf7f9, -0xf7fa, -0xf7fb, -0xf7fc, -0xf7fd, -0xf7fe, -0xf7ff, -0xf8e5, -0xf8e6, -0xf8e7, -0xf8e8, -0xf8e9, -0xf8ea, -0xf8eb, -0xf8ec, -0xf8ed -}; - diff --git a/src/add-ons/print/drivers/pdf/source/unicode4.h b/src/add-ons/print/drivers/pdf/source/unicode4.h deleted file mode 100644 index edd8a58478..0000000000 --- a/src/add-ons/print/drivers/pdf/source/unicode4.h +++ /dev/null @@ -1,31 +0,0 @@ -// WARNING: MACHINE GENERATED DON'T CHANGE! -static uint16 unicode4[] = { -0xf8ee, -0xf8ef, -0xf8f0, -0xf8f1, -0xf8f2, -0xf8f3, -0xf8f4, -0xf8f5, -0xf8f6, -0xf8f7, -0xf8f8, -0xf8f9, -0xf8fa, -0xf8fb, -0xf8fc, -0xf8fd, -0xf8fe, -0xfb00, -0xfb01, -0xfb02, -0xfb03, -0xfb04, -0xfb1f, -0xfb2a, -0xfb2b, -0xfb35, -0xfb4b -}; - diff --git a/src/add-ons/print/drivers/pdf/xrefs/Deutsch b/src/add-ons/print/drivers/pdf/xrefs/Deutsch deleted file mode 100644 index c2240928a7..0000000000 --- a/src/add-ons/print/drivers/pdf/xrefs/Deutsch +++ /dev/null @@ -1,7 +0,0 @@ -CrossReferences 1.0 -"[sS]iehe Tabelle ([0-9]+ )" -> "Tabelle ([0-9]+)". - -"[sS]iehe Abbildung ([0-9]+ )", "[sS]iehe Abb. ([0-9]+ )" --> -"Abbildung ([0-9]+)", "Abb. ([0-9]+ )". - diff --git a/src/add-ons/print/drivers/pdf/xrefs/English b/src/add-ons/print/drivers/pdf/xrefs/English deleted file mode 100644 index 4e622c88ab..0000000000 --- a/src/add-ons/print/drivers/pdf/xrefs/English +++ /dev/null @@ -1,18 +0,0 @@ -CrossReferences 1.0 -# Table -"[sS]ee [tT]able ([0-9]+)", "see [tT]bl. ([0-9]+)" - -> -"[tT]able ([0-9]+)", "[tT]bl. ([0-9]+)". - -# Figure -"[sS]ee [fF]igure ([0-9]+)", "[sS]ee [fF]ig. ([0-9]+)" - -> -"[fF]igure ([0-9]+)", "[fF]ig. ([0-9]+)". - -# Page, Table of contents -"\.\.\.\.\. *([0-9]+)", "[pP]age ([0-9]+)" - -> -"\- ([0-9]+) \-". - -# Cite -". \[([a-zA-Z0-9]+)\]" -> "\[([a-zA-Z0-9]+)\]". diff --git a/src/apps/aboutsystem/AboutSystem.cpp b/src/apps/aboutsystem/AboutSystem.cpp index 07e0e361dd..8c885a7744 100644 --- a/src/apps/aboutsystem/AboutSystem.cpp +++ b/src/apps/aboutsystem/AboutSystem.cpp @@ -1139,14 +1139,6 @@ AboutView::_CreateCreditsView() .SetLicenses("Anti-Grain Geometry", kBSDThreeClause, NULL) .SetURL("http://www.antigrain.com")); - // PDFLib copyrights - _AddPackageCredit(PackageCredit("PDFLib") - .SetCopyright(B_TRANSLATE(COPYRIGHT_STRING "1997-2006 PDFlib GmbH and " - "Thomas Merz. All rights reserved.\n" - "PDFlib and PDFlib logo are registered trademarks of PDFlib GmbH.")) - .SetLicense("PDFlib Lite") - .SetURL("http://www.pdflib.com")); - // FreeType copyrights _AddPackageCredit(PackageCredit("FreeType2") .SetCopyrights(B_TRANSLATE(COPYRIGHT_STRING "1996-2002, 2006 " diff --git a/src/libs/Jamfile b/src/libs/Jamfile index 4b37a53e1a..a36f334ef8 100644 --- a/src/libs/Jamfile +++ b/src/libs/Jamfile @@ -13,7 +13,6 @@ SubInclude HAIKU_TOP src libs libtelnet ; SubInclude HAIKU_TOP src libs libunwind ; SubInclude HAIKU_TOP src libs linprog ; SubInclude HAIKU_TOP src libs mapm ; -SubInclude HAIKU_TOP src libs pdflib ; SubInclude HAIKU_TOP src libs posix_error_mapper ; SubInclude HAIKU_TOP src libs print ; SubInclude HAIKU_TOP src libs stdc++ ; diff --git a/src/libs/pdflib/Jamfile b/src/libs/pdflib/Jamfile deleted file mode 100644 index 66488e8bea..0000000000 --- a/src/libs/pdflib/Jamfile +++ /dev/null @@ -1,3 +0,0 @@ -SubDir HAIKU_TOP src libs pdflib ; - -SubInclude HAIKU_TOP src libs pdflib libs ; diff --git a/src/libs/pdflib/Makefile b/src/libs/pdflib/Makefile deleted file mode 100644 index c71388826e..0000000000 --- a/src/libs/pdflib/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Main PDFlib Makefile -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir=. - -include config/mkcommon.inc - -SUB_DIRS = libs bind progs $(PTFDIR) - -include config/mksubdirs.inc - -# --------------------------- install --------------------------------- -install:: .dummy - $(INSTALL) pdflib-config $(bindir) - -# ----------------------- distclean --------------------------------- -distclean:: .dummy - -$(RM) libtool pdflib-config config.cache config.log config.status \ - config/mkprogs.inc config/mklibs.inc config/mkcommon.inc \ - config/mkbind.inc config/mksubdirs.inc diff --git a/src/libs/pdflib/PDFlib.dsw b/src/libs/pdflib/PDFlib.dsw deleted file mode 100644 index 3dd3352e88..0000000000 --- a/src/libs/pdflib/PDFlib.dsw +++ /dev/null @@ -1,191 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "Java"=".\bind\pdflib\java\Java.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name pdflib - End Project Dependency -}}} - -############################################################################### - -Project: "Perl"=".\bind\pdflib\perl\Perl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name pdflib - End Project Dependency -}}} - -############################################################################### - -Project: "Python"=".\bind\pdflib\python\Python.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name pdflib - End Project Dependency -}}} - -############################################################################### - -Project: "Tcl"=".\bind\pdflib\tcl\Tcl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name pdflib - End Project Dependency -}}} - -############################################################################### - -Project: "flate"=".\libs\flate\flate.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pdcore"=".\libs\pdcore\pdcore.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pdf"=".\libs\pdflib\pdf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pdflib"=".\libs\pdflib\pdflib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name flate - End Project Dependency - Begin Project Dependency - Project_Dep_Name pdcore - End Project Dependency - Begin Project Dependency - Project_Dep_Name pdf - End Project Dependency - Begin Project Dependency - Project_Dep_Name tiff - End Project Dependency - Begin Project Dependency - Project_Dep_Name png - End Project Dependency -}}} - -############################################################################### - -Project: "pdflib_dll"=".\libs\pdflib\pdflib_dll.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name flate - End Project Dependency - Begin Project Dependency - Project_Dep_Name pdcore - End Project Dependency - Begin Project Dependency - Project_Dep_Name tiff - End Project Dependency - Begin Project Dependency - Project_Dep_Name png - End Project Dependency - Begin Project Dependency - Project_Dep_Name pdf - End Project Dependency -}}} - -############################################################################### - -Project: "png"=".\libs\png\png.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tiff"=".\libs\tiff\tiff.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/src/libs/pdflib/bind/Makefile b/src/libs/pdflib/bind/Makefile deleted file mode 100644 index cb8e8a7212..0000000000 --- a/src/libs/pdflib/bind/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# PDFlib bindings Makefile -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -include ../config/mkcommon.inc - -SUB_DIRS = $(BINDTARGETS) - -include ../config/mksubdirs.inc diff --git a/src/libs/pdflib/bind/pdflib/Makefile b/src/libs/pdflib/bind/pdflib/Makefile deleted file mode 100644 index eed33a2e4d..0000000000 --- a/src/libs/pdflib/bind/pdflib/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# PDFlib bindings Makefile -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -include ../../config/mkcommon.inc - -SUB_DIRS = $(BINDINGS) - -include ../../config/mksubdirs.inc - -distclean:: - -$(RM) php/Makefile.in diff --git a/src/libs/pdflib/bind/pdflib/c/Makefile b/src/libs/pdflib/bind/pdflib/c/Makefile deleted file mode 100644 index 9c6da97993..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -# Makefile for PDFlib C samples, C language binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc - -DEPLIBS = $(PDFLIBLINK) -LIBS = $(DEPLIBS) $(EXTERNALLIBS) -INCLUDES = $(PDFLIBINC) $(PDCORELIBINC) -FLAGS = $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) - -# the following is platform-specific -DLLIB = -ldl - -# ------------------------------ - -SRC = \ - $(srcdir)/chartab.c \ - $(srcdir)/hello.c \ - $(srcdir)/hellodl.c \ - $(srcdir)/image.c \ - $(srcdir)/pdfclock.c \ - $(srcdir)/invoice.c \ - $(srcdir)/businesscard.c \ - $(srcdir)/quickreference.c \ - $(srcdir)/smoketest.c \ - $(srcdir)/smoketestdl.c - -PROGS = \ - hello$(EXE) \ - image$(EXE) \ - pdfclock$(EXE) \ - chartab$(EXE) \ - invoice$(EXE) \ - businesscard$(EXE) \ - quickreference$(EXE) - -include $(top_builddir)/config/mkprogs.inc - -test:: $(PROGS) - -./hello - -./image - -./pdfclock - -./chartab - -./invoice - -./businesscard - -./quickreference - -smoke:: test smoketest$(EXE) - -./smoketest - -clean:: - $(RM) chartab.pdf hello.pdf image.pdf pdfclock.pdf invoice.pdf - $(RM) smoketest$(EXE) smoketestdl$(EXE) smoke_c_?.pdf smoke_cdl_?.pdf - $(RM) hellodl hellodl.pdf businesscard.pdf quickreference.pdf - -hello$(EXE): hello.c $(DEPLIBS) - $(PROGS_BUILD) - -image$(EXE): image.c $(DEPLIBS) - $(PROGS_BUILD) - -pdfclock$(EXE): pdfclock.c $(DEPLIBS) - $(PROGS_BUILD) - -chartab$(EXE): chartab.c $(DEPLIBS) - $(PROGS_BUILD) - -invoice$(EXE): invoice.c $(DEPLIBS) - $(PROGS_BUILD) - -businesscard$(EXE): businesscard.c $(DEPLIBS) - $(PROGS_BUILD) - -quickreference$(EXE): quickreference.c $(DEPLIBS) - $(PROGS_BUILD) - -smoketest$(EXE): smoketest.c $(DEPLIBS) - $(PROGS_BUILD) - -smoketestdl$(EXE): smoketestdl.c pdflibdl.c $(DEPLIBS) $(DLLIB) pdflibdl.h - $(PROGS_BUILD) pdflibdl.c $(DLLIB) - -hellodl$(EXE): hellodl.c pdflibdl.c $(DEPLIBS) $(DLLIB) pdflibdl.h - $(PROGS_BUILD) pdflibdl.c $(DLLIB) diff --git a/src/libs/pdflib/bind/pdflib/c/businesscard.c b/src/libs/pdflib/bind/pdflib/c/businesscard.c deleted file mode 100644 index a8a4590c11..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/businesscard.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $Id: businesscard.c 14574 2005-10-29 16:27:43Z bonefish $ - * PDFlib client: block processing example in C - * - */ - -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - PDF *p; - int i, blockcontainer, page; - char *infile = "boilerplate.pdf"; - - /* - * This is where font/image/PDF input files live. Adjust as necessary. - * - * Note that this directory must also contain the LuciduxSans font outline - * and metrics files. - */ - char *searchpath = "../data"; - - typedef struct { char *name; char *value; } blockdata; - - blockdata data[] = { - { "name", "Victor Kraxi" }, - { "business.title", "Chief Paper Officer" }, - { "business.address.line1", "17, Aviation Road" }, - { "business.address.city", "Paperfield" }, - { "business.telephone.voice","phone +1 234 567-89" }, - { "business.telephone.fax", "fax +1 234 567-98" }, - { "business.email", "victor@kraxi.com" }, - { "business.homepage", "www.kraxi.com" }, - }; - -#define BLOCKCOUNT (sizeof(data)/sizeof(data[0])) - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) { - /* Set the search path for fonts and PDF files */ - - /* open new PDF file */ - if (PDF_open_file(p, "businesscard.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_set_parameter(p, "SearchPath", searchpath); - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "businesscard.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title","PDFlib block processing sample (C)"); - - blockcontainer = PDF_open_pdi(p, infile, "", 0); - if (blockcontainer == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - page = PDF_open_pdi_page(p, blockcontainer, 1, ""); - if (page == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_begin_page(p, 20, 20); /* dummy page size */ - - /* This will adjust the page size to the block container's size. */ - PDF_fit_pdi_page(p, page, 0, 0, "adjustpage"); - - /* Fill all text blocks with dynamic data */ - for (i = 0; i < (int) BLOCKCOUNT; i++) { - if (PDF_fill_textblock(p, page, data[i].name, data[i].value, 0, - "embedding encoding=host") == -1) { - printf("Warning: %s\n", PDF_get_errmsg(p)); - } - } - - PDF_end_page(p); /* close page */ - PDF_close_pdi_page(p, page); - - PDF_close(p); /* close PDF document */ - PDF_close_pdi(p, blockcontainer); - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in businesscard sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); /* delete the PDFlib object */ - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/businesscard.dsp b/src/libs/pdflib/bind/pdflib/c/businesscard.dsp deleted file mode 100644 index c7a7f7db22..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/businesscard.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="businesscard" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=businesscard - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "businesscard.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "businesscard.mak" CFG="businesscard - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "businesscard - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "businesscard - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "businesscard - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"businesscard.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "businesscard - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"businesscard.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "businesscard - Win32 Release" -# Name "businesscard - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\businesscard.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/chartab.c b/src/libs/pdflib/bind/pdflib/c/chartab.c deleted file mode 100644 index 7ae853c6a7..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/chartab.c +++ /dev/null @@ -1,129 +0,0 @@ -/* $Id: chartab.c 14574 2005-10-29 16:27:43Z bonefish $ - * PDFlib client: character table in C - * - */ - -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - /* change these as required */ - const char *fontname = "LuciduxSans-Oblique"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - char *searchpath = "../data"; - - /* list of encodings to use */ - const char *encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" }; - - /* whether or not to embed the font */ - int embed = 1; - -#define ENCODINGS ((int) ((sizeof(encodings)/sizeof(encodings[0])))) - - char buf[256]; - float x, y; - PDF *p; - int row, col, font, page; - -#define FONTSIZE ((float) 16) -#define TOP ((float) 700) -#define LEFT ((float) 50) -#define YINCR 2*FONTSIZE -#define XINCR 2*FONTSIZE - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) - { - /* open new PDF file */ - if (PDF_open_file(p, "chartab.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_set_parameter(p, "openaction", "fitpage"); - PDF_set_parameter(p, "fontwarning", "true"); - - PDF_set_parameter(p, "SearchPath", searchpath); - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "chartab.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "Character table (C)"); - - /* loop over all encodings */ - for (page = 0; page < ENCODINGS; page++) - { - PDF_begin_page(p, a4_width, a4_height); /* start a new page */ - - /* print the heading and generate the bookmark */ - /* Change "host" encoding to "winansi" or whatever you need! */ - font = PDF_load_font(p, "Helvetica", 0, "host", ""); - PDF_setfont(p, font, FONTSIZE); - sprintf(buf, "%s (%s) %sembedded", - fontname, encodings[page], embed ? "" : "not "); - - PDF_show_xy(p, buf, LEFT - XINCR, TOP + 3 * YINCR); - PDF_add_bookmark(p, buf, 0, 0); - - /* print the row and column captions */ - PDF_setfont(p, font, 2 * FONTSIZE/3); - - for (row = 0; row < 16; row++) - { - sprintf(buf, "x%X", row); - PDF_show_xy(p, buf, LEFT + row*XINCR, TOP + YINCR); - - sprintf(buf, "%Xx", row); - PDF_show_xy(p, buf, LEFT - XINCR, TOP - row * YINCR); - } - - /* print the character table */ - font = PDF_load_font(p, fontname, 0, encodings[page], - embed ? "embedding": ""); - PDF_setfont(p, font, FONTSIZE); - - y = TOP; - x = LEFT; - - for (row = 0; row < 16; row++) - { - for (col = 0; col < 16; col++) { - sprintf(buf, "%c", 16*row + col); - PDF_show_xy(p, buf, x, y); - x += XINCR; - } - x = LEFT; - y -= YINCR; - } - - PDF_end_page(p); /* close page */ - } - - PDF_close(p); /* close PDF document */ - } - PDF_CATCH(p) - { - printf("PDFlib exception occurred in chartab sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); /* delete the PDFlib object */ - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/chartab.dsp b/src/libs/pdflib/bind/pdflib/c/chartab.dsp deleted file mode 100644 index f3da7ae7cf..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/chartab.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="chartab" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=chartab - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "chartab.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "chartab.mak" CFG="chartab - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "chartab - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "chartab - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "chartab - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"chartab.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "chartab - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"chartab.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "chartab - Win32 Release" -# Name "chartab - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\chartab.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/examples_c.dsw b/src/libs/pdflib/bind/pdflib/c/examples_c.dsw deleted file mode 100644 index c1f4135f53..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/examples_c.dsw +++ /dev/null @@ -1,101 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "businesscard"=".\businesscard.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "chartab"=".\chartab.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hello"=".\hello.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "image"=".\image.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "invoice"=".\invoice.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pdfclock"=".\pdfclock.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "quickreference"=".\quickreference.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/src/libs/pdflib/bind/pdflib/c/hello.c b/src/libs/pdflib/bind/pdflib/c/hello.c deleted file mode 100644 index 5dd9da074c..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/hello.c +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id: hello.c 14574 2005-10-29 16:27:43Z bonefish $ - * PDFlib client: hello example in C - * - */ - -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - PDF *p; - int font; - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) { - /* open new PDF file */ - if (PDF_open_file(p, "hello.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "hello.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "Hello, world (C)!"); - - PDF_begin_page(p, a4_width, a4_height); /* start a new page */ - - /* Change "host" encoding to "winansi" or whatever you need! */ - font = PDF_load_font(p, "Helvetica-Bold", 0, "host", ""); - - PDF_setfont(p, font, 24); - PDF_set_text_pos(p, 50, 700); - PDF_show(p, "Hello, world!"); - PDF_continue_text(p, "(says C)"); - PDF_end_page(p); /* close page */ - - PDF_close(p); /* close PDF document */ - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in hello sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); /* delete the PDFlib object */ - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/hello.dsp b/src/libs/pdflib/bind/pdflib/c/hello.dsp deleted file mode 100644 index 9c166e28d8..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/hello.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hello - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "hello.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "hello.mak" CFG="hello - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hello - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"hello.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "hello - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"hello.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "hello - Win32 Release" -# Name "hello - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\hello.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/hellodl.c b/src/libs/pdflib/bind/pdflib/c/hellodl.c deleted file mode 100644 index 7c64ea05bb..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/hellodl.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $Id: hellodl.c 14574 2005-10-29 16:27:43Z bonefish $ - * PDFlib client: hello example in C with dynamic DLL loading - * - */ - -#include -#include - -#include "pdflibdl.h" - -int -main(void) -{ - PDF *p; - int font; - PDFlib_api *PDFlib; - - /* load the PDFlib dynamic library and create a new PDFlib object*/ - if ((PDFlib = PDF_new_dl(&p)) == (PDFlib_api *) NULL) - { - printf("Couldn't create PDFlib object (DLL not found?)\n"); - return(2); - } - - PDF_TRY_DL(PDFlib, p) { - /* open new PDF file */ - if (PDFlib->PDF_open_file(p, "hellodl.pdf") == -1) { - printf("Error: %s\n", PDFlib->PDF_get_errmsg(p)); - return(2); - } - - /* This line is required to avoid problems on Japanese systems */ - PDFlib->PDF_set_parameter(p, "hypertextencoding", "host"); - - PDFlib->PDF_set_info(p, "Creator", "hello.c"); - PDFlib->PDF_set_info(p, "Author", "Thomas Merz"); - PDFlib->PDF_set_info(p, "Title", "Hello, world (C DLL)!"); - - PDFlib->PDF_begin_page(p, a4_width, a4_height); /* start a new page */ - - /* Change "host" encoding to "winansi" or whatever you need! */ - font = PDFlib->PDF_load_font(p, "Helvetica-Bold", 0, "host", ""); - - PDFlib->PDF_setfont(p, font, 24); - PDFlib->PDF_set_text_pos(p, 50, 700); - PDFlib->PDF_show(p, "Hello, world!"); - PDFlib->PDF_continue_text(p, "(says C DLL)"); - PDFlib->PDF_end_page(p); /* close page */ - - PDFlib->PDF_close(p); /* close PDF document */ - } - - PDF_CATCH_DL(PDFlib, p) { - printf("PDFlib exception occurred in hellodl sample:\n"); - printf("[%d] %s: %s\n", - PDFlib->PDF_get_errnum(p), PDFlib->PDF_get_apiname(p), - PDFlib->PDF_get_errmsg(p)); - PDF_delete_dl(PDFlib, p); - return(2); - } - - /* delete the PDFlib object and unload the library */ - PDF_delete_dl(PDFlib, p); - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/image.c b/src/libs/pdflib/bind/pdflib/c/image.c deleted file mode 100644 index 51abce7bbf..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/image.c +++ /dev/null @@ -1,71 +0,0 @@ -/* $Id: image.c 14574 2005-10-29 16:27:43Z bonefish $ - * PDFlib client: image example in C - * - */ - -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - PDF *p; - int image; - char *imagefile = "nesrin.jpg"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - char *searchpath = "../data"; - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p){ - /* open new PDF file */ - if (PDF_open_file(p, "image.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_set_parameter(p, "SearchPath", searchpath); - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "image.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "image sample (C)"); - - image = PDF_load_image(p, "auto", imagefile, 0, ""); - - if (image == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(3); - } - - /* dummy page size, will be adjusted by PDF_fit_image() */ - PDF_begin_page(p, 10, 10); - PDF_fit_image(p, image, (float) 0.0, (float) 0.0, "adjustpage"); - PDF_close_image(p, image); - PDF_end_page(p); /* close page */ - - PDF_close(p); /* close PDF document */ - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in image sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); /* delete the PDFlib object */ - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/image.dsp b/src/libs/pdflib/bind/pdflib/c/image.dsp deleted file mode 100644 index 31ad143c2d..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/image.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=image - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "image.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "image - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"image.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "image - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"image.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "image - Win32 Release" -# Name "image - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\image.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/invoice.c b/src/libs/pdflib/bind/pdflib/c/invoice.c deleted file mode 100644 index e5bf97e532..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/invoice.c +++ /dev/null @@ -1,196 +0,0 @@ -/* $Id: invoice.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib/PDI client: invoice generation demo - */ - -#include -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - PDF * p; - int i, form, page, regularfont, boldfont; - char * infile = "stationery.pdf"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - char *searchpath = "../data"; - - const float col1 = 55; - const float col2 = 100; - const float col3 = 330; - const float col4 = 430; - const float col5 = 530; - time_t timer; - struct tm ltime; - float fontsize = 12, leading, y; - float sum, total; - float pagewidth = 595, pageheight = 842; - char buf[128]; - char *closingtext = - "30 days warranty starting at the day of sale. " - "This warranty covers defects in workmanship only. " - "Kraxi Systems, Inc. will, at its option, repair or replace the " - "product under the warranty. This warranty is not transferable. " - "No returns or exchanges will be accepted for wet products."; - - typedef struct { char *name; float price; int quantity; } articledata; - - articledata data[] = { - { "Super Kite", 20, 2}, - { "Turbo Flyer", 40, 5}, - { "Giga Trash", 180, 1}, - { "Bare Bone Kit", 50, 3}, - { "Nitty Gritty", 20, 10}, - { "Pretty Dark Flyer", 75, 1}, - { "Free Gift", 0, 1}, - }; - -#define ARTICLECOUNT (sizeof(data)/sizeof(data[0])) - - static const char *months[] = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }; - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) { - /* open new PDF file */ - if (PDF_open_file(p, "invoice.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_set_parameter(p, "SearchPath", searchpath); - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "invoice.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "PDFlib invoice generation demo (C)"); - - form = PDF_open_pdi(p, infile, "", 0); - if (form == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - page = PDF_open_pdi_page(p, form, 1, ""); - if (page == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - boldfont = PDF_load_font(p, "Helvetica-Bold", 0, "host", ""); - regularfont = PDF_load_font(p, "Helvetica", 0, "host", ""); - leading = fontsize + 2; - - /* Establish coordinates with the origin in the upper left corner. */ - PDF_set_parameter(p, "topdown", "true"); - - PDF_begin_page(p, pagewidth, pageheight); /* A4 page */ - - PDF_fit_pdi_page(p, page, 0, pageheight, ""); - PDF_close_pdi_page(p, page); - - PDF_setfont(p, regularfont, fontsize); - - /* Print the address */ - y = 170; - PDF_set_value(p, "leading", leading); - - PDF_show_xy(p, "John Q. Doe", col1, y); - PDF_continue_text(p, "255 Customer Lane"); - PDF_continue_text(p, "Suite B"); - PDF_continue_text(p, "12345 User Town"); - PDF_continue_text(p, "Everland"); - - /* Print the header and date */ - - PDF_setfont(p, boldfont, fontsize); - y = 300; - PDF_show_xy(p, "INVOICE", col1, y); - - time(&timer); - ltime = *localtime(&timer); - sprintf(buf, "%s %d, %d", - months[ltime.tm_mon], ltime.tm_mday, ltime.tm_year + 1900); - PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}"); - - /* Print the invoice header line */ - PDF_setfont(p, boldfont, fontsize); - - /* "position {0 0}" is left-aligned, "position {100 0}" right-aligned */ - y = 370; - PDF_fit_textline(p, "ITEM", 0, col1, y, "position {0 0}"); - PDF_fit_textline(p, "DESCRIPTION", 0, col2, y, "position {0 0}"); - PDF_fit_textline(p, "QUANTITY", 0, col3, y, "position {100 0}"); - PDF_fit_textline(p, "PRICE", 0, col4, y, "position {100 0}"); - PDF_fit_textline(p, "AMOUNT", 0, col5, y, "position {100 0}"); - - /* Print the article list */ - - PDF_setfont(p, regularfont, fontsize); - y += 2*leading; - total = 0; - - for (i = 0; i < (int) ARTICLECOUNT; i++) { - sprintf(buf, "%d", i+1); - PDF_show_xy(p, buf, col1, y); - - PDF_show_xy(p, data[i].name, col2, y); - - sprintf(buf, "%d", data[i].quantity); - PDF_fit_textline(p, buf, 0, col3, y, "position {100 0}"); - - sprintf(buf, "%.2f", data[i].price); - PDF_fit_textline(p, buf, 0, col4, y, "position {100 0}"); - - sum = data[i].price * data[i].quantity; - sprintf(buf, "%.2f", sum); - PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}"); - - y += leading; - total += sum; - } - - y += leading; - PDF_setfont(p, boldfont, fontsize); - sprintf(buf, "%.2f", total); - PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}"); - - /* Print the closing text */ - - y += 5*leading; - PDF_setfont(p, regularfont, fontsize); - PDF_set_value(p, "leading", leading); - PDF_show_boxed(p, closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", ""); - - PDF_end_page(p); - PDF_close(p); - PDF_close_pdi(p, form); - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in invoice sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/invoice.dsp b/src/libs/pdflib/bind/pdflib/c/invoice.dsp deleted file mode 100644 index f1a61499f0..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/invoice.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="invoice" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=invoice - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "invoice.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "invoice.mak" CFG="invoice - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "invoice - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "invoice - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "invoice - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"invoice.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "invoice - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"invoice.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "invoice - Win32 Release" -# Name "invoice - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\invoice.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/pdfclock.c b/src/libs/pdflib/bind/pdflib/c/pdfclock.c deleted file mode 100644 index be873c4839..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/pdfclock.c +++ /dev/null @@ -1,131 +0,0 @@ -/* $Id: pdfclock.c 14574 2005-10-29 16:27:43Z bonefish $ - * A little PDFlib application to draw an analog clock. - * - */ - -#include -#include -#include - -#include "pdflib.h" - -#define RADIUS 200.0f -#define MARGIN 20.0f - -int -main(void) -{ - PDF *p; - float alpha; - time_t timer; - struct tm ltime; - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) { - /* open new PDF file */ - if (PDF_open_file(p, "pdfclock.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "pdfclock.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "PDF clock (C)"); - - PDF_begin_page(p, (float) (2 * (RADIUS + MARGIN)), - (float) (2 * (RADIUS + MARGIN))); - - PDF_translate(p, RADIUS + MARGIN, RADIUS + MARGIN); - PDF_setcolor(p, "fillstroke", "rgb", 0, 0, 1, 0); - PDF_save(p); - - /* minute strokes */ - PDF_setlinewidth(p, 2); - for (alpha = 0; alpha < 360; alpha += 6) - { - PDF_rotate(p, 6); - PDF_moveto(p, RADIUS, 0); - PDF_lineto(p, (float) (RADIUS-MARGIN/3), 0); - PDF_stroke(p); - } - - PDF_restore(p); - PDF_save(p); - - /* 5 minute strokes */ - PDF_setlinewidth(p, 3); - for (alpha = 0; alpha < 360; alpha += 30) - { - PDF_rotate(p, 30); - PDF_moveto(p, RADIUS, 0); - PDF_lineto(p, RADIUS-MARGIN, 0); - PDF_stroke(p); - } - - time(&timer); - ltime = *localtime(&timer); - - /* draw hour hand */ - PDF_save(p); - PDF_rotate(p, - (float)(-((ltime.tm_min/60.0) + ltime.tm_hour - 3.0) * 30.0)); - PDF_moveto(p, -RADIUS/10, -RADIUS/20); - PDF_lineto(p, RADIUS/2, 0); - PDF_lineto(p, -RADIUS/10, RADIUS/20); - PDF_closepath(p); - PDF_fill(p); - PDF_restore(p); - - /* draw minute hand */ - PDF_save(p); - PDF_rotate(p, - (float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0)); - PDF_moveto(p, -RADIUS/10, -RADIUS/20); - PDF_lineto(p, RADIUS * 0.8f, 0); - PDF_lineto(p, -RADIUS/10, RADIUS/20); - PDF_closepath(p); - PDF_fill(p); - PDF_restore(p); - - /* draw second hand */ - PDF_setcolor(p, "fillstroke", "rgb", 1, 0, 0, 0); - PDF_setlinewidth(p, 2); - PDF_save(p); - PDF_rotate(p, (float) -((ltime.tm_sec - 15.0) * 6.0)); - PDF_moveto(p, -RADIUS/5, 0); - PDF_lineto(p, RADIUS, 0); - PDF_stroke(p); - PDF_restore(p); - - /* draw little circle at center */ - PDF_circle(p, 0, 0, (float) RADIUS/30); - PDF_fill(p); - - PDF_restore(p); - - PDF_end_page(p); - - PDF_close(p); - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in pdfclock sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); /* delete the PDFlib object */ - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/pdfclock.dsp b/src/libs/pdflib/bind/pdflib/c/pdfclock.dsp deleted file mode 100644 index 903e2df14a..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/pdfclock.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdfclock" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pdfclock - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdfclock.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdfclock.mak" CFG="pdfclock - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdfclock - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pdfclock - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdfclock - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "pdfclock - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"pdfclock.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "pdfclock - Win32 Release" -# Name "pdfclock - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdfclock.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/pdflibdl.c b/src/libs/pdflib/bind/pdflib/c/pdflibdl.c deleted file mode 100644 index 47092cb2c0..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/pdflibdl.c +++ /dev/null @@ -1,532 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflibdl.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * C wrapper code for dynamically loading the PDFlib DLL at runtime. - * - * This module is not supported on all platforms. - * - */ - -#include - -#include "pdflibdl.h" - -/* enable this to avoid error messages */ -//#define PDF_SILENT - -/* ---------------------------------- WIN32 ----------------------------- */ - -#ifdef WIN32 - -#define WIN32_LEAN_AND_MEAN -#include -#include -#undef WIN32_LEAN_AND_MEAN - -#define PDF_DLLNAME "pdflib.dll" - -static void * -pdf_dlopen(const char *filename) -{ - return (void *) LoadLibrary(filename); -} - -static void * -pdf_dlsym(void *handle, const char *funcname) -{ - return (void *) GetProcAddress((HINSTANCE) handle, funcname); -} - -static void -pdf_dlclose(void *handle) -{ - (void) FreeLibrary((HINSTANCE) handle); -} - -/* ---------------------------------- MVS ----------------------------- */ - -#elif defined(__MVS__) - -#include -#include - -#define PDF_DLLNAME "PDFLIB" - -static void * -pdf_dlopen(const char *filename) -{ - return dllload(filename); -} - -static void * -pdf_dlsym(void *handle, const char *funcname) -{ - return dllqueryfn((dllhandle *) handle, funcname); -} - -static void pdf_dlclose(void *handle) -{ - (void) dllfree((dllhandle *) handle); -} - -/* ---------------------------------- Linux ----------------------------- */ - -#elif defined(linux) - -#include - -#define PDF_DLLNAME "libpdf.so" - -static void * -pdf_dlopen(const char *filename) -{ - return dlopen(filename, RTLD_LAZY); -} - -static void * -pdf_dlsym(void *handle, const char *funcname) -{ - return dlsym(handle, funcname); -} - -static void pdf_dlclose(void *handle) -{ - (void) dlclose(handle); -} - -/* ---------------------------------- Mac OS X ----------------------------- */ - -#elif defined(__ppc__) && defined(__APPLE__) - -#define PDF_DLLNAME "libpdf.dylib" - -/* - * The dl code for Mac OS X has been butchered from dlcompat, - * see http://www.opendarwin.org/projects/dlcompat - * It contained the copyright notice below. - */ - -/* -Copyright (c) 2002 Peter O'Gorman - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include -#include - -#if defined (__GNUC__) && __GNUC__ > 3 -#define dl_restrict __restrict -#else -#define dl_restrict -#endif -/* - * Structure filled in by dladdr(). - */ - -typedef struct dl_info { - const char *dli_fname; /* Pathname of shared object */ - void *dli_fbase; /* Base address of shared object */ - const char *dli_sname; /* Name of nearest symbol */ - void *dli_saddr; /* Address of nearest symbol */ -} Dl_info; - -#define RTLD_LAZY 0x1 -#define RTLD_NOW 0x2 -#define RTLD_LOCAL 0x4 -#define RTLD_GLOBAL 0x8 -#define RTLD_NOLOAD 0x10 -#define RTLD_NODELETE 0x80 - -/* - * Special handle arguments for dlsym(). - */ -#define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */ -#define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */ - -static void *dlsymIntern(void *handle, const char *symbol); - -void *pdf_dlopen(const char *path) -{ - int mode = RTLD_LAZY; - void *module = 0; - NSObjectFileImage ofi = 0; - NSObjectFileImageReturnCode ofirc; - static int (*make_private_module_public) (NSModule module) = 0; - unsigned int flags = - NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE; - -/* If we got no path, the app wants the global namespace, use -1 as the marker - in this case */ - if (!path) - return (void *)-1; - - /* Create the object file image, works for things linked with the - -bundle arg to ld */ - ofirc = NSCreateObjectFileImageFromFile(path, &ofi); - switch (ofirc) - { - case NSObjectFileImageSuccess: - /* It was okay, so use NSLinkModule to link in the image */ - if (!(mode & RTLD_LAZY)) flags += NSLINKMODULE_OPTION_BINDNOW; - module = NSLinkModule(ofi, path,flags); - /* Don't forget to destroy the object file image, unless you like leaks */ - NSDestroyObjectFileImage(ofi); - /* If the mode was global, then change the module, this avoids - multiply defined symbol errors to first load private then make - global. Silly, isn't it. */ - if ((mode & RTLD_GLOBAL)) - { - if (!make_private_module_public) - { - _dyld_func_lookup("__dyld_NSMakePrivateModulePublic", - (unsigned long *)&make_private_module_public); - } - make_private_module_public(module); - } - break; - case NSObjectFileImageInappropriateFile: -/* It may have been a dynamic library rather than a bundle, try to load it */ - module = - (void *)NSAddImage(path, NSADDIMAGE_OPTION_RETURN_ON_ERROR); - break; - case NSObjectFileImageFailure: - /* - error(0,"Object file setup failure : \"%s\"", path); - */ - return 0; - case NSObjectFileImageArch: - /* - error(0,"No object for this architecture : \"%s\"", path); - */ - return 0; - case NSObjectFileImageFormat: - /* - error(0,"Bad object file format : \"%s\"", path); - */ - return 0; - case NSObjectFileImageAccess: - /* - error(0,"Can't read object file : \"%s\"", path); - */ - return 0; - } - if (!module) - /* - error(0, "Can not open \"%s\"", path); - */ - ; - - return module; -} - -/* dlsymIntern is used by dlsym to find the symbol */ -void *dlsymIntern(void *handle, const char *symbol) -{ - NSSymbol *nssym = 0; - /* If the handle is -1, if is the app global context */ - if (handle == (void *)-1) - { - /* Global context, use NSLookupAndBindSymbol */ - if (NSIsSymbolNameDefined(symbol)) - { - nssym = NSLookupAndBindSymbol(symbol); - } - - } - /* Now see if the handle is a struch mach_header* or not, use - NSLookupSymbol in image for libraries, and NSLookupSymbolInModule - for bundles */ - else - { - /* Check for both possible magic numbers depending on x86/ppc byte order */ - if ((((struct mach_header *)handle)->magic == MH_MAGIC) || - (((struct mach_header *)handle)->magic == MH_CIGAM)) - { - if (NSIsSymbolNameDefinedInImage((struct mach_header *)handle, symbol)) - { - nssym = NSLookupSymbolInImage((struct mach_header *)handle, - symbol, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND - | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); - } - - } - else - { - nssym = NSLookupSymbolInModule(handle, symbol); - } - } - if (!nssym) - { - /* - error(0, "Symbol \"%s\" Not found", symbol); - */ - return NULL; - } - return NSAddressOfSymbol(nssym); -} - -int pdf_dlclose(void *handle) -{ - if ((((struct mach_header *)handle)->magic == MH_MAGIC) || - (((struct mach_header *)handle)->magic == MH_CIGAM)) - { - /* - error(-1, "Can't remove dynamic libraries on darwin"); - */ - return 0; - } - if (!NSUnLinkModule(handle, 0)) - { - /* - error(0, "unable to unlink module %s", NSNameOfModule(handle)); - */ - return 1; - } - return 0; -} - -/* dlsym, prepend the underscore and call dlsymIntern */ -void *pdf_dlsym(void *handle, const char *symbol) -{ - static char undersym[257]; /* Saves calls to malloc(3) */ - int sym_len = strlen(symbol); - void *value = NULL; - char *malloc_sym = NULL; - - if (sym_len < 256) - { - snprintf(undersym, 256, "_%s", symbol); - value = dlsymIntern(handle, undersym); - } - else - { - malloc_sym = malloc(sym_len + 2); - if (malloc_sym) - { - sprintf(malloc_sym, "_%s", symbol); - value = dlsymIntern(handle, malloc_sym); - free(malloc_sym); - } - else - { - /* - error(-1, "Unable to allocate memory"); - */ - } - } - return value; -} - -/* ---------------------------------- AS/400 ----------------------------- */ - -#elif defined __ILEC400__ - -#include - -#include -#include -#include -#include "mgosifc.h" - -#define PDF_DLLNAME "PDFLIB" - -static void * -pdf_dlopen(const char *filename) -{ - char libName[11], objName[11], *s; - HMODULE handle; - _SYSPTR pSrvPgm; - Qle_ABP_Info_t actInfo; - int actInfoLen; - Qus_EC_t errCode; - - memset(libName, '\0', sizeof(libName)); - if ((s = strchr(filename, '/')) == NULL) { - s = filename; - } else { - memcpy(libName, filename, s - filename); - if (!strcmp(libName, "*LIBL")) - libName[0] = '\0'; - s += 1; - } - strcpy(objName, s); - - /* Get system pointer to service program */ - pSrvPgm = rslvsp(WLI_SRVPGM, objName, libName, _AUTH_NONE); - - /* Activate Bound Program */ - handle = malloc(sizeof(int)); - actInfoLen = sizeof(actInfo); - errCode.Bytes_Provided = sizeof(errCode); - QleActBndPgm(&pSrvPgm, handle, &actInfo, &actInfoLen, &errCode); - - if (errCode.Bytes_Available > 0) - return NULL; - - return (void *) handle; -} - -static void * -pdf_dlsym(void *handle, const char *funcname) -{ - int expID; - int expNameLen; - void *ret; - int expType; - Qus_EC_t errCode; - - expID = 0; - expNameLen = strlen(funcname); - errCode.Bytes_Provided = sizeof(errCode); - QleGetExp((HMODULE) handle, - &expID, &expNameLen, funcname, &ret, &expType, &errCode); - - if (errCode.Bytes_Available > 0) - return NULL; - - return ret; -} - -static void pdf_dlclose(void *handle) -{ - free((HMODULE) handle); -} - -/* ---------------------------------- unknown ----------------------------- */ - -#else - -#error No DLL loading code for this platform available! - -#endif - -/* ---------------------------------- generic ----------------------------- */ - -static void -pdf_dlerror(const char *msg) -{ -#ifndef PDF_SILENT - fprintf(stderr, msg); -#endif -} - -/* Load the PDFlib DLL and fetch the API structure */ - -PDFLIB_API PDFlib_api * PDFLIB_CALL -PDF_new_dl(PDF **pp) -{ - PDFlib_api *PDFlib, *(PDFLIB_CALL *get_api)(void); - char buf[256]; - void *handle; - PDF *p; - - /* load the PDFLIB DLL... */ - handle = pdf_dlopen(PDF_DLLNAME); - - if (!handle) - { - pdf_dlerror("Error: couldn't load PDFlib DLL\n"); - return NULL; - } - - /* ...and fetch function pointers */ - get_api = (PDFlib_api *(PDFLIB_CALL *)(void)) - pdf_dlsym(handle, "PDF_get_api"); - - if (get_api == NULL) - { - pdf_dlerror( - "Error: couldn't find function PDF_get_api in PDFlib DLL\n"); - pdf_dlclose(handle); - return NULL; - } - - /* Fetch the API structure and boot the library. */ - PDFlib = (*get_api)(); - - /* - * Check the version number of the loaded DLL against that of - * the included header file to avoid version mismatch. - */ - - if (PDFlib->sizeof_PDFlib_api != sizeof(PDFlib_api) || - PDFlib->major != PDFLIB_MAJORVERSION || - PDFlib->minor != PDFLIB_MINORVERSION) { - sprintf(buf, - "Error: loaded wrong version of PDFlib DLL\n" - "Expected version %d.%d (API size %d), loaded %d.%d (API size %d)\n", - PDFLIB_MAJORVERSION, PDFLIB_MINORVERSION, sizeof(PDFlib_api), - PDFlib->major, PDFlib->minor, PDFlib->sizeof_PDFlib_api); - pdf_dlerror(buf); - pdf_dlclose(handle); - return NULL; - } - - /* Boot the library. */ - PDFlib->PDF_boot(); - - /* - * Create a new PDFlib object; use PDF_new2() so that we can store - * the DLL handle within PDFlib and later retrieve it. - */ - if ((p = PDFlib->PDF_new2(NULL, NULL, NULL, NULL, handle)) == (PDF *) NULL) - { - pdf_dlerror("Couldn't create PDFlib object (out of memory)!\n"); - return NULL; - } - - /* Make the PDF * available to the client and return */ - *pp = p; - return PDFlib; -} - -/* delete the PDFlib object and unload the previously loaded PDFlib DLL */ - -PDFLIB_API void PDFLIB_CALL -PDF_delete_dl(PDFlib_api *PDFlib, PDF *p) -{ - void *handle; - - if (!PDFlib || !p) - return; - - /* fetch the DLL handle (previously stored in PDFlib) */ - handle = PDFlib->PDF_get_opaque(p); - - if (!handle) - return; - - PDFlib->PDF_delete(p); - PDFlib->PDF_shutdown(); - - pdf_dlclose(handle); -} diff --git a/src/libs/pdflib/bind/pdflib/c/pdflibdl.h b/src/libs/pdflib/bind/pdflib/c/pdflibdl.h deleted file mode 100644 index dc706b40d9..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/pdflibdl.h +++ /dev/null @@ -1,63 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -/* $Id: pdflibdl.h 14574 2005-10-29 16:27:43Z bonefish $ - * - * Function prototypes for dynamically loading the PDFlib DLL at runtime - * - */ - -#ifdef __cplusplus -#define PDF PDF_c -#endif - -#include "pdflib.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Notes for using the PDFlib DLL loading mechanism: - * - * - PDF_TRY_DL()/PDF_CATCH_DL() must be used instead of the standard - * exception handling macros. - * - PDF_new_dl() must be used instead of PDF_boot() and PDF_new()/PDF_new2(). - * - PDF_delete_dl() must be used instead of PDF_delete() and PDF_shutdown(). - * - PDF_get_opaque() must not be used. - */ - -/* Load the PDFlib DLL, and fetch pointers to all exported functions. */ -PDFLIB_API PDFlib_api * PDFLIB_CALL -PDF_new_dl(PDF **pp); - -/* Unload the previously loaded PDFlib DLL (also calls PDF_shutdown()) */ -PDFLIB_API void PDFLIB_CALL -PDF_delete_dl(PDFlib_api *PDFlib, PDF *p); - - -#define PDF_TRY_DL(PDFlib, p) \ - if (p) { if (setjmp(PDFlib->pdf_jbuf(p)->jbuf) == 0) - -/* Inform the exception machinery that a PDF_TRY() will be left without - entering the corresponding PDF_CATCH( ) clause. */ -#define PDF_EXIT_TRY_DL(PDFlib, p) PDFlib->pdf_exit_try(p) - -/* Catch an exception; must always be paired with PDF_TRY(). */ -#define PDF_CATCH_DL(PDFlib, p) } if (PDFlib->pdf_catch(p)) - -/* Re-throw an exception to another handler. */ -#define PDF_RETHROW_DL(PDFlib, p) PDFlib->pdf_rethrow(p) - -#ifdef __cplusplus -} /* extern "C" */ -#endif diff --git a/src/libs/pdflib/bind/pdflib/c/quickreference.c b/src/libs/pdflib/bind/pdflib/c/quickreference.c deleted file mode 100644 index d4f2613eb4..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/quickreference.c +++ /dev/null @@ -1,112 +0,0 @@ -/* $Id: quickreference.c 14574 2005-10-29 16:27:43Z bonefish $ - * - * PDFlib/PDI client: mini imposition demo - */ -#include -#include - -#include "pdflib.h" - -int -main(void) -{ - PDF *p; - int manual, page; - int font, row, col; - const int maxrow = 2; - const int maxcol = 2; - char optlist[128]; - int startpage = 1, endpage = 4; - const float width = 500, height = 770; - int pageno; - const char *infile = "reference.pdf"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - char *searchpath = "../data"; - - /* create a new PDFlib object */ - if ((p = PDF_new()) == (PDF *) 0) - { - printf("Couldn't create PDFlib object (out of memory)!\n"); - return(2); - } - - PDF_TRY(p) { - /* open new PDF file */ - if (PDF_open_file(p, "quickreference.pdf") == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - PDF_set_parameter(p, "SearchPath", searchpath); - - /* This line is required to avoid problems on Japanese systems */ - PDF_set_parameter(p, "hypertextencoding", "host"); - - PDF_set_info(p, "Creator", "quickreference.c"); - PDF_set_info(p, "Author", "Thomas Merz"); - PDF_set_info(p, "Title", "mini imposition demo (C)"); - - manual = PDF_open_pdi(p, infile, "", 0); - if (manual == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - row = 0; - col = 0; - - PDF_set_parameter(p, "topdown", "true"); - - for (pageno = startpage; pageno <= endpage; pageno++) { - if (row == 0 && col == 0) { - PDF_begin_page(p, width, height); - font = PDF_load_font(p, "Helvetica-Bold", 0, "host", ""); - PDF_setfont(p, font, 18); - PDF_set_text_pos(p, 24, 24); - PDF_show(p, "PDFlib Quick Reference"); - } - - page = PDF_open_pdi_page(p, manual, pageno, ""); - - if (page == -1) { - printf("Error: %s\n", PDF_get_errmsg(p)); - return(2); - } - - sprintf(optlist, "scale %f", (float) 1/maxrow); - PDF_fit_pdi_page(p, page, - width/maxcol*col, (row + 1) * height/maxrow, optlist); - PDF_close_pdi_page(p, page); - - col++; - if (col == maxcol) { - col = 0; - row++; - } - if (row == maxrow) { - row = 0; - PDF_end_page(p); - } - } - - /* finish the last partial page */ - if (row != 0 || col != 0) - PDF_end_page(p); - - PDF_close(p); - PDF_close_pdi(p, manual); - } - - PDF_CATCH(p) { - printf("PDFlib exception occurred in quickreference sample:\n"); - printf("[%d] %s: %s\n", - PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p)); - PDF_delete(p); - return(2); - } - - PDF_delete(p); - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/c/quickreference.dsp b/src/libs/pdflib/bind/pdflib/c/quickreference.dsp deleted file mode 100644 index 7224c57051..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/quickreference.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="quickreference" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=quickreference - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "quickreference.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "quickreference.mak" CFG="quickreference - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "quickreference - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "quickreference - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "quickreference - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"quickreference.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "quickreference - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"quickreference.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib" -# SUBTRACT BASE LINK32 /debug -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "quickreference - Win32 Release" -# Name "quickreference - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\quickreference.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/c/readme.txt b/src/libs/pdflib/bind/pdflib/c/readme.txt deleted file mode 100644 index 900cf07a3f..0000000000 --- a/src/libs/pdflib/bind/pdflib/c/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -Notes on the PDFlib C binding: - -(none) diff --git a/src/libs/pdflib/bind/pdflib/c/samples.mcp b/src/libs/pdflib/bind/pdflib/c/samples.mcp deleted file mode 100644 index 3668ec4ad99a3411f8224dc60f51606695c36022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866353 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 diff --git a/src/libs/pdflib/bind/pdflib/cpp/Makefile b/src/libs/pdflib/bind/pdflib/cpp/Makefile deleted file mode 100644 index f13745cb29..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -# Makefile for PDFlib, C++ language binding -# $Id: Makefile 14574 2005-10-29 16:27:43Z bonefish $ - -top_builddir = ../../.. - -include $(top_builddir)/config/mkcommon.inc - -DEPLIBS = $(PDFLIBLINK) pdflib$(LO) -LIBS = $(DEPLIBS) $(STDCPP) $(EXTERNALLIBS) -INCLUDES = $(PDFLIBINC) -CXXFLAGS = $(CFLAGS) -FLAGS = $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) - -# -------------------------------------------------------------------------- - -SRC = \ - $(srcdir)/pdflib.cpp \ - $(srcdir)/hello.cpp \ - $(srcdir)/image.cpp \ - $(srcdir)/pdfclock.cpp \ - $(srcdir)/chartab.cpp \ - $(srcdir)/invoice.cpp \ - $(srcdir)/businesscard.cpp \ - $(srcdir)/quickreference.cpp \ - $(srcdir)/smoketest.cpp - -PROGS = \ - hello$(EXE) \ - image$(EXE) \ - pdfclock$(EXE) \ - chartab$(EXE) \ - invoice$(EXE) \ - businesscard$(EXE) \ - quickreference$(EXE) - -include $(top_builddir)/config/mkprogs.inc - - -test:: $(PROGS) - -./hello - -./image - -./pdfclock - -./chartab - -./invoice - -./businesscard - -./quickreference - -smoke:: test smoketest$(EXE) - -./smoketest - -clean:: - $(RM) smoketest$(EXE) smoke_cpp_?.pdf - $(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf - $(RM) businesscard.pdf quickreference.pdf - -hello$(EXE): hello.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -image$(EXE): image.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -pdfclock$(EXE): pdfclock.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -chartab$(EXE): chartab.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -invoice$(EXE): invoice.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -businesscard$(EXE): businesscard.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -quickreference$(EXE): quickreference.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -smoketest$(EXE): smoketest.cpp $(DEPLIBS) - $(CXXPROGS_BUILD) - -pdflib$(LO): ./pdflib.cpp pdflib.hpp ../../../libs/pdflib/pdflib.h - $(LIBTOOL_CC) $(CXX) -c $(CXXFLAGS) pdflib.cpp diff --git a/src/libs/pdflib/bind/pdflib/cpp/businesscard.cpp b/src/libs/pdflib/bind/pdflib/cpp/businesscard.cpp deleted file mode 100644 index 31885266f4..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/businesscard.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// $Id: businesscard.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// PDFlib client: hello example in C++ -// -// - -#include - -#include "pdflib.hpp" - -int -main(void) -{ - try { - PDFlib p; // the PDFlib object - int i, blockcontainer, page; - const string infile = "boilerplate.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary. - * - * Note that this directory must also contain the LuciduxSans font - * outline and metrics files. - */ - const string searchpath = "../data"; - struct blockdata { - blockdata(string n, string v): name(n), value(v){} - string name; - string value; - }; - - blockdata data[] = { - blockdata("name", "Victor Kraxi"), - blockdata("business.title", "Chief Paper Officer"), - blockdata("business.address.line1", "17, Aviation Road"), - blockdata("business.address.city", "Paperfield"), - blockdata("business.telephone.voice","phone +1 234 567-89"), - blockdata("business.telephone.fax", "fax +1 234 567-98"), - blockdata("business.email", "victor@kraxi.com"), - blockdata("business.homepage", "www.kraxi.com"), - }; - -#define BLOCKCOUNT (sizeof(data)/sizeof(data[0])) - - // open new PDF file - if (p.open_file("businesscard.pdf") == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - p.set_parameter("SearchPath", searchpath); - - // This line is required to avoid problems on Japanese systems - p.set_parameter("hypertextencoding", "host"); - - p.set_info("Creator", "businesscard.cpp"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title","PDFlib block processing sample (C++)"); - - blockcontainer = p.open_pdi(infile, "", 0); - if (blockcontainer == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - page = p.open_pdi_page(blockcontainer, 1, ""); - if (page == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - p.begin_page(20, 20); // dummy page size - - // This will adjust the page size to the block container's size. - p.fit_pdi_page(page, 0, 0, "adjustpage"); - - // Fill all text blocks with dynamic data - for (i = 0; i < (int) BLOCKCOUNT; i++) { - if (p.fill_textblock(page, data[i].name, data[i].value, - "embedding encoding=host") == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - } - } - - p.end_page(); // close page - p.close_pdi_page(page); - - p.close(); // close PDF document - p.close_pdi(blockcontainer); - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in businesscard sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 99; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/businesscard.dsp b/src/libs/pdflib/bind/pdflib/cpp/businesscard.dsp deleted file mode 100644 index da3689507e..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/businesscard.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="businesscard" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=businesscard - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "businesscard.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "businesscard.mak" CFG="businesscard - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "businesscard - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "businesscard - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "businesscard - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\businesscard.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "businesscard - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"businesscard.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "businesscard - Win32 Release" -# Name "businesscard - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\businesscard.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/chartab.cpp b/src/libs/pdflib/bind/pdflib/cpp/chartab.cpp deleted file mode 100644 index 665ddcd80d..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/chartab.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// $Id: chartab.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// PDFlib client: chartab example in C++ -// -// - -#include - -#include "pdflib.hpp" - -int -main(void) -{ - /* change these as required */ - const char *fontname = "LuciduxSans-Oblique"; - - /* This is where font/image/PDF input files live. Adjust as necessary. */ - char *searchpath = "../data"; - - /* list of encodings to use */ - const char *encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" }; - - /* whether or not to embed the font */ - int embed = 1; - - - char buf[256]; - float x, y; - int row, col, font, page; - - static const int ENCODINGS = 3; - static const float FONTSIZE = 16; - static const float TOP = 700; - static const float LEFT = 50; - static const float YINCR = 2*FONTSIZE; - static const float XINCR = 2*FONTSIZE; - - try { - /* create a new PDFlib object */ - PDFlib p; // the PDFlib object - - /* open new PDF file */ - if (p.open_file("chartab.pdf") == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - p.set_parameter("openaction", "fitpage"); - p.set_parameter("fontwarning", "true"); - - p.set_parameter("SearchPath", searchpath); - - // This line is required to avoid problems on Japanese systems - p.set_parameter("hypertextencoding", "host"); - - p.set_info("Creator", "chartab.c"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Character table (C++)"); - - /* loop over all encodings */ - for (page = 0; page < ENCODINGS; page++) - { - p.begin_page(a4_width, a4_height); /* start a new page */ - - /* print the heading and generate the bookmark */ - // Change "host" encoding to "winansi" or whatever you need! - font = p.load_font("Helvetica", "host", ""); - p.setfont(font, FONTSIZE); - sprintf(buf, "%s (%s) %sembedded", - fontname, encodings[page], embed ? "" : "not "); - - p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR); - p.add_bookmark(buf, 0, 0); - - /* print the row and column captions */ - p.setfont(font, 2 * FONTSIZE/3); - - for (row = 0; row < 16; row++) - { - sprintf(buf, "x%X", row); - p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR); - - sprintf(buf, "%Xx", row); - p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR); - } - - /* print the character table */ - font = p.load_font(fontname, encodings[page], - embed ? "embedding": ""); - p.setfont(font, FONTSIZE); - - y = TOP; - x = LEFT; - - for (row = 0; row < 16; row++) - { - for (col = 0; col < 16; col++) { - sprintf(buf, "%c", 16*row + col); - p.show_xy(buf, x, y); - x += XINCR; - } - x = LEFT; - y -= YINCR; - } - - p.end_page(); /* close page */ - } - - p.close(); /* close PDF document */ - - - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in chartab sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/chartab.dsp b/src/libs/pdflib/bind/pdflib/cpp/chartab.dsp deleted file mode 100644 index 24bf46a40e..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/chartab.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="chartab" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=chartab - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "chartab.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "chartab.mak" CFG="chartab - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "chartab - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "chartab - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "chartab - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\chartab.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "chartab - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"chartab.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "chartab - Win32 Release" -# Name "chartab - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\chartab.cpp -# End Source File -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/examples_cpp.dsw b/src/libs/pdflib/bind/pdflib/cpp/examples_cpp.dsw deleted file mode 100644 index c1f4135f53..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/examples_cpp.dsw +++ /dev/null @@ -1,101 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "businesscard"=".\businesscard.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "chartab"=".\chartab.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hello"=".\hello.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "image"=".\image.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "invoice"=".\invoice.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pdfclock"=".\pdfclock.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "quickreference"=".\quickreference.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/src/libs/pdflib/bind/pdflib/cpp/hello.cpp b/src/libs/pdflib/bind/pdflib/cpp/hello.cpp deleted file mode 100644 index c19e370883..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/hello.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// $Id: hello.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// PDFlib client: hello example in C++ -// -// - -#include - -#include "pdflib.hpp" - -int -main(void) -{ - try { - int font; - PDFlib p; // the PDFlib object - - // open new PDF file - if (p.open_file("hello.pdf") == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return 2; - } - - // This line is required to avoid problems on Japanese systems - p.set_parameter("hypertextencoding", "host"); - - p.set_info("Creator", "hello.cpp"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "Hello, world (C++)!"); - - // start a new page - p.begin_page((float) a4_width, (float) a4_height); - - // Change "host" encoding to "winansi" or whatever you need! - font = p.load_font("Helvetica-Bold", "host", ""); - - p.setfont(font, 24); - p.set_text_pos(50, 700); - p.show("Hello, world!"); - p.continue_text("(says C++)"); - p.end_page(); // close page - p.close(); // close PDF document - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in hello sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/hello.dsp b/src/libs/pdflib/bind/pdflib/cpp/hello.dsp deleted file mode 100644 index c931f96e0f..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/hello.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hello - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "hello.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "hello.mak" CFG="hello - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hello - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\hello.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "hello - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "hello - Win32 Release" -# Name "hello - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\hello.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/image.cpp b/src/libs/pdflib/bind/pdflib/cpp/image.cpp deleted file mode 100644 index 3d6ba46970..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/image.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// $Id: image.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// PDFlib client: image example in C++ -// -// - -#include - -#include "pdflib.hpp" - -int -main(void) -{ - try { - PDFlib *p; // pointer to the PDFlib class - int image; - char *imagefile = (char *) "nesrin.jpg"; - // This is where font/image/PDF input files live. Adjust as necessary. - char *searchpath = (char *) "../data"; - - p = new PDFlib(); - - // Open new PDF file - if (p->open_file("image.pdf") == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - return 2; - } - - p->set_parameter("SearchPath", searchpath); - - // This line is required to avoid problems on Japanese systems - p->set_parameter("hypertextencoding", "host"); - - p->set_info("Creator", "image.cpp"); - p->set_info("Author", "Thomas Merz"); - p->set_info("Title", "image sample (C++)!"); - - image = p->load_image("auto", imagefile, ""); - - if (image == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - exit(3); - } - - // dummy page size, will be adjusted by PDF_fit_image() - p->begin_page(10, 10); - p->fit_image(image, (float) 0.0,(float) 0.0, "adjustpage"); - p->close_image(image); - p->end_page(); // close page - - p->close(); // close PDF document - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in hello sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/image.dsp b/src/libs/pdflib/bind/pdflib/cpp/image.dsp deleted file mode 100644 index abd4b0c849..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/image.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=image - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "image.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "image - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\image.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "image - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "image - Win32 Release" -# Name "image - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\image.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/invoice.cpp b/src/libs/pdflib/bind/pdflib/cpp/invoice.cpp deleted file mode 100644 index b032fa4213..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/invoice.cpp +++ /dev/null @@ -1,194 +0,0 @@ -// $Id: invoice.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// PDFlib client: invoice example in C++ -// -// - -#include - -#include - -#if !defined(WIN32) && !defined(MAC) -#include -#endif - -#include "pdflib.hpp" - -int -main(void) -{ - try { - int i, form, page, regularfont, boldfont; - string infile = "stationery.pdf"; - // This is where font/image/PDF input files live. Adjust as necessary. - string searchpath = "../data"; - const float col1 = 55; - const float col2 = 100; - const float col3 = 330; - const float col4 = 430; - const float col5 = 530; - time_t timer; - struct tm ltime; - float fontsize = 12, leading, y; - float sum, total; - float pagewidth = 595, pageheight = 842; - char buf[128]; - PDFlib p; - string closingtext = - "30 days warranty starting at the day of sale. " - "This warranty covers defects in workmanship only. " - "Kraxi Systems, Inc. will, at its option, repair or replace the " - "product under the warranty. This warranty is not transferable. " - "No returns or exchanges will be accepted for wet products."; - - struct articledata { - articledata(string n, float pr, int q): - name(n), price(pr), quantity(q){} - string name; - float price; - int quantity; - }; - - articledata data[] = { - articledata("Super Kite", 20, 2), - articledata("Turbo Flyer", 40, 5), - articledata("Giga Trash", 180, 1), - articledata("Bare Bone Kit", 50, 3), - articledata("Nitty Gritty", 20, 10), - articledata("Pretty Dark Flyer", 75, 1), - articledata("Free Gift", 0, 1), - }; - -#define ARTICLECOUNT (sizeof(data)/sizeof(data[0])) - - static const string months[] = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }; - - - // open new PDF file - if (p.open_file("invoice.pdf") == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - p.set_parameter("SearchPath", searchpath); - - // This line is required to avoid problems on Japanese systems - p.set_parameter("hypertextencoding", "host"); - - p.set_info("Creator", "invoice.cpp"); - p.set_info("Author", "Thomas Merz"); - p.set_info("Title", "PDFlib invoice generation demo (C++)"); - - form = p.open_pdi(infile, "", 0); - if (form == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - page = p.open_pdi_page(form, 1, ""); - if (page == -1) { - cerr << "Error: " << p.get_errmsg() << endl; - return(2); - } - - boldfont = p.load_font("Helvetica-Bold", "host", ""); - regularfont = p.load_font("Helvetica", "host", ""); - leading = fontsize + 2; - - // Establish coordinates with the origin in the upper left corner. - p.set_parameter("topdown", "true"); - - p.begin_page(pagewidth, pageheight); // A4 page - - p.fit_pdi_page(page, 0, pageheight, ""); - p.close_pdi_page(page); - - p.setfont(regularfont, 12); - - // Print the address - y = 170; - p.set_value("leading", leading); - - p.show_xy("John Q. Doe", col1, y); - p.continue_text("255 Customer Lane"); - p.continue_text("Suite B"); - p.continue_text("12345 User Town"); - p.continue_text("Everland"); - - // Print the header and date - - p.setfont(boldfont, 12); - y = 300; - p.show_xy("INVOICE", col1, y); - - time(&timer); - ltime = *localtime(&timer); - sprintf(buf, "%s %d, %d", months[ltime.tm_mon].c_str(), - ltime.tm_mday, ltime.tm_year + 1900); - p.fit_textline(buf, col5, y, "position {100 0}"); - - // Print the invoice header line - p.setfont(boldfont, 12); - - // "position {0 0}" is left-aligned, "position {100 0}" right-aligned - y = 370; - p.fit_textline("ITEM", col1, y, "position {0 0}"); - p.fit_textline("DESCRIPTION", col2, y, "position {0 0}"); - p.fit_textline("QUANTITY", col3, y, "position {100 0}"); - p.fit_textline("PRICE", col4, y, "position {100 0}"); - p.fit_textline("AMOUNT", col5, y, "position {100 0}"); - - // Print the article list - - p.setfont(regularfont, 12); - y += 2*leading; - total = 0; - - for (i = 0; i < (int)ARTICLECOUNT; i++) { - sprintf(buf, "%d", i+1); - p.show_xy(buf, col1, y); - - p.show_xy(data[i].name, col2, y); - - sprintf(buf, "%d", data[i].quantity); - p.fit_textline(buf, col3, y, "position {100 0}"); - - sprintf(buf, "%.2f", data[i].price); - p.fit_textline(buf, col4, y, "position {100 0}"); - - sum = data[i].price * data[i].quantity; - sprintf(buf, "%.2f", sum); - p.fit_textline(buf, col5, y, "position {100 0}"); - - y += leading; - total += sum; - } - - y += leading; - p.setfont(boldfont, 12); - sprintf(buf, "%.2f", total); - p.fit_textline(buf, col5, y, "position {100 0}"); - - // Print the closing text - - y += 5*leading; - p.setfont(regularfont, 12); - p.set_value("leading", leading); - p.show_boxed(closingtext, - col1, y + 4*leading, col5-col1, 4*leading, "justify", ""); - - p.end_page(); - p.close(); - p.close_pdi(form); - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in invoice sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/invoice.dsp b/src/libs/pdflib/bind/pdflib/cpp/invoice.dsp deleted file mode 100644 index 54493b426f..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/invoice.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="invoice" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=invoice - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "invoice.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "invoice.mak" CFG="invoice - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "invoice - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "invoice - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "invoice - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\invoice.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "invoice - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"invoice.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "invoice - Win32 Release" -# Name "invoice - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\invoice.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/pdfclock.cpp b/src/libs/pdflib/bind/pdflib/cpp/pdfclock.cpp deleted file mode 100644 index 8475aaea9c..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/pdfclock.cpp +++ /dev/null @@ -1,126 +0,0 @@ -// $Id: pdfclock.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// A little PDFlib application to draw an analog clock. -// -// - -#include - -#include - -#if !defined(WIN32) && !defined(MAC) -#include -#endif - -#include "pdflib.hpp" - -#define RADIUS 200.0f -#define MARGIN 20.0f - -int -main() -{ - try { - PDFlib *p; - float alpha; - time_t timer; - struct tm ltime; - - // Create a new PDFlib object - p = new PDFlib(); - - // Open new PDF file - if (p->open_file("pdfclock.pdf") == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - return 2; - } - - // This line is required to avoid problems on Japanese systems - p->set_parameter("hypertextencoding", "host"); - - p->set_info("Creator", "pdfclock.cpp"); - p->set_info("Author", "Thomas Merz"); - p->set_info("Title", "PDF clock (C++)"); - - p->begin_page((unsigned int) (2 * (RADIUS + MARGIN)), - (unsigned int) (2 * (RADIUS + MARGIN))); - - p->translate(RADIUS + MARGIN, RADIUS + MARGIN); - p->setcolor("fillstroke", "rgb", 0, 0, 1, 0); - p->save(); - - // minute strokes - p->setlinewidth(2); - for (alpha = 0; alpha < 360; alpha += 6) - { - p->rotate(6); - p->moveto(RADIUS, 0); - p->lineto((float) (RADIUS-MARGIN/3), 0); - p->stroke(); - } - - p->restore(); - p->save(); - - // 5 minute strokes - p->setlinewidth(3); - for (alpha = 0; alpha < 360; alpha += 30) - { - p->rotate(30); - p->moveto(RADIUS, 0); - p->lineto(RADIUS-MARGIN, 0); - p->stroke(); - } - - time(&timer); - ltime = *localtime(&timer); - - // draw hour hand - p->save(); - p->rotate( - (float)(-((ltime.tm_min/60) + ltime.tm_hour - 3.0) * 30)); - p->moveto(-RADIUS/10, -RADIUS/20); - p->lineto(RADIUS/2, 0); - p->lineto(-RADIUS/10, RADIUS/20); - p->closepath(); - p->fill(); - p->restore(); - - // draw minute hand - p->save(); - p->rotate((float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0)); - p->moveto(-RADIUS/10, -RADIUS/20); - p->lineto(RADIUS * 0.8, 0); - p->lineto(-RADIUS/10, RADIUS/20); - p->closepath(); - p->fill(); - p->restore(); - - // draw second hand - p->setcolor("fillstroke", "rgb", 1, 0, 0, 0); - p->setlinewidth(2); - p->save(); - p->rotate((float) -((ltime.tm_sec - 15) * 6)); - p->moveto(-RADIUS/5, 0); - p->lineto(RADIUS, 0); - p->stroke(); - p->restore(); - - // draw little circle at center - p->circle(0, 0, (float) RADIUS/30); - p->fill(); - - p->restore(); - - p->end_page(); - - p->close(); - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in pdfclock sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/pdfclock.dsp b/src/libs/pdflib/bind/pdflib/cpp/pdfclock.dsp deleted file mode 100644 index 1458230b62..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/pdfclock.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pdfclock" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pdfclock - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pdfclock.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pdfclock.mak" CFG="pdfclock - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pdfclock - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pdfclock - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pdfclock - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\pdfclock.exe"/libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "pdfclock - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "pdfclock - Win32 Release" -# Name "pdfclock - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\pdfclock.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/pdflib.cpp b/src/libs/pdflib/bind/pdflib/cpp/pdflib.cpp deleted file mode 100644 index 3e12e0e25b..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/pdflib.cpp +++ /dev/null @@ -1,1299 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -// $Id: pdflib.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// -// in sync with pdflib.h 1.151.2.22 -// -// Implementation of C++ wrapper for PDFlib -// -// - -#include "pdflib.hpp" - -#define CHAR(s) (s).c_str() -#define LEN(s) (s).size() - - -#ifdef PDF_THROWS_CPP_EXCEPTIONS - -PDFlib::Exception::Exception(string errmsg, int errnum, string apiname, void *opaque) -: m_errmsg(errmsg), - m_errnum(errnum), - m_apiname(apiname), - m_opaque(opaque) -{ } - -string PDFlib::Exception::get_errmsg() { return m_errmsg; } -string PDFlib::Exception::get_message() { return m_errmsg; } -int PDFlib::Exception::get_errnum() { return m_errnum; } -string PDFlib::Exception::get_apiname() { return m_apiname; } -const void * PDFlib::Exception::get_opaque() { return m_opaque; } - -#define PDFCPP_TRY PDF_TRY(p) -#define PDFCPP_CATCH \ -PDF_CATCH(p) {\ - throw Exception(PDF_get_errmsg(p), PDF_get_errnum(p),\ - PDF_get_apiname(p), PDF_get_opaque(p));\ -} -#else - -#define PDFCPP_TRY -#define PDFCPP_CATCH - -#endif // PDF_THROWS_CPP_EXCEPTIONS - - -#ifdef PDF_THROWS_CPP_EXCEPTIONS -PDFlib::PDFlib( - errorproc_t errorproc, - allocproc_t allocproc, - reallocproc_t reallocproc, - freeproc_t freeproc, - void *opaque) PDF_THROWS(PDFlib::Exception) -{ - m_PDFlib_api = ::PDF_get_api(); - - if (m_PDFlib_api->sizeof_PDFlib_api != sizeof(PDFlib_api) || - m_PDFlib_api->major != PDFLIB_MAJORVERSION || - m_PDFlib_api->minor != PDFLIB_MINORVERSION) { - throw Exception("loaded wrong version of PDFlib library", 0, - "pdflib.cpp", opaque); - } - - m_PDFlib_api->PDF_boot(); - - p = m_PDFlib_api->PDF_new2(NULL, allocproc, reallocproc, freeproc, opaque); - -/* - * errorproc is ignored here to be compatible with old applications - * that were not compiled with PDF_THROWS_CPP_EXCEPTIONS - */ - (void) errorproc; - - if (p == (PDF *)0) { - throw Exception("No memory for PDFlib object", 0, "pdflib.cpp", opaque); - } - - PDFCPP_TRY - { - PDF_set_parameter(p, "binding", "C++"); - } - PDFCPP_CATCH; -} - -PDFlib::PDFlib( - allocproc_t allocproc, - reallocproc_t reallocproc, - freeproc_t freeproc, - void *opaque) PDF_THROWS(PDFlib::Exception) -{ - m_PDFlib_api = ::PDF_get_api(); - - if (m_PDFlib_api->sizeof_PDFlib_api != sizeof(PDFlib_api) || - m_PDFlib_api->major != PDFLIB_MAJORVERSION || - m_PDFlib_api->minor != PDFLIB_MINORVERSION) { - throw Exception("loaded wrong version of PDFlib library", 0, - "pdflib.cpp", opaque); - } - - m_PDFlib_api->PDF_boot(); - - p = m_PDFlib_api->PDF_new2(NULL, allocproc, reallocproc, freeproc, opaque); - - if (p == (PDF *)0) { - throw Exception("No memory for PDFlib object", 0, "pdflib.cpp", opaque); - } - - PDFCPP_TRY - { - PDF_set_parameter(p, "binding", "C++"); - } - PDFCPP_CATCH; -} - -#else // ! PDF_THROWS_CPP_EXCEPTIONS - -PDFlib::PDFlib( - errorproc_t errorproc, - allocproc_t allocproc, - reallocproc_t reallocproc, - freeproc_t freeproc, - void *opaque) -{ - PDF_boot(); - m_PDFlib_api = ::PDF_get_api(); - - p = m_PDFlib_api->PDF_new2(errorproc, allocproc, reallocproc, freeproc, opaque); - - PDF_set_parameter(p, "binding", "C++"); -} - -#endif // ! PDF_THROWS_CPP_EXCEPTIONS - - -PDFlib::~PDFlib() PDF_THROWS_NOTHING -{ - m_PDFlib_api->PDF_delete(p); - m_PDFlib_api->PDF_shutdown(); -} - -/* p_annots.c */ -void -PDFlib::add_launchlink(float llx, float lly, float urx, float ury, - string filename) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_launchlink(p, llx, lly, urx, ury, CHAR(filename)); - PDFCPP_CATCH; -} - -void -PDFlib::add_locallink(float llx, float lly, float urx, float ury, int page, - string optlist) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_locallink(p, llx, lly, urx, ury, page, CHAR(optlist)); - PDFCPP_CATCH; -} - -void -PDFlib::add_note(float llx, float lly, float urx, float ury, string contents, - string title, string icon, bool p_open) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_note(p, llx, lly, urx, ury, CHAR(contents), - CHAR(title), CHAR(icon), p_open); - PDFCPP_CATCH; -} - -void -PDFlib::add_pdflink(float llx, float lly, float urx, float ury, - string filename, int page, string optlist) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - { - m_PDFlib_api->PDF_add_pdflink(p, llx, lly, urx, ury, CHAR(filename), - page, CHAR(optlist)); - } - PDFCPP_CATCH; -} - -void -PDFlib::add_weblink(float llx, float lly, float urx, float ury, - string url) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_weblink(p, llx, lly, urx, ury, CHAR(url)); - PDFCPP_CATCH; -} - -void -PDFlib::attach_file(float llx, float lly, float urx, float ury, - string filename, string description, string author, - string mimetype, string icon) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - { - m_PDFlib_api->PDF_attach_file2(p, llx, lly, urx, ury, CHAR(filename), 0, - CHAR(description), (int) LEN(description), CHAR(author), - (int) LEN(author), CHAR(mimetype), CHAR(icon)); - } - PDFCPP_CATCH; -} - -void -PDFlib::set_border_color(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_border_color(p, red, green, blue); - PDFCPP_CATCH; -} - -void -PDFlib::set_border_dash(float b, float w) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_border_dash(p, b, w); - PDFCPP_CATCH; -} - -void -PDFlib::set_border_style(string style, float width) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_border_style(p, CHAR(style), width); - PDFCPP_CATCH; -} - -/* p_basic.c */ - -void -PDFlib::begin_page(float width, float height) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_begin_page(p, width, height); - PDFCPP_CATCH; -} - -void -PDFlib::close() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_close(p); - PDFCPP_CATCH; -} - -void -PDFlib::end_page() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_end_page(p); - PDFCPP_CATCH; -} - -string -PDFlib::get_apiname() PDF_THROWS(PDFlib::Exception) -{ - const char *retval = NULL; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_get_apiname(p); - } - PDFCPP_CATCH; - - if (retval) - return retval; - else - return ""; -} - -const char * -PDFlib::get_buffer(long *size) PDF_THROWS(PDFlib::Exception) -{ - const char * retval = NULL; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_get_buffer(p, size); - PDFCPP_CATCH; - - return retval; -} - -string -PDFlib::get_errmsg() PDF_THROWS(PDFlib::Exception) -{ - const char *retval = NULL; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_get_errmsg(p); - } - PDFCPP_CATCH; - - if (retval) - return retval; - else - return ""; -} - -int -PDFlib::get_errnum() PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_get_errnum(p); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::get_majorversion() PDF_THROWS_NOTHING -{ - return (int) m_PDFlib_api->PDF_get_value(NULL, "major", 0); -} - -int -PDFlib::get_minorversion() PDF_THROWS_NOTHING -{ - return (int) m_PDFlib_api->PDF_get_value(NULL, "minor", 0); -} - -void * -PDFlib::get_opaque() PDF_THROWS(PDFlib::Exception) -{ - void * retval = NULL; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_get_opaque(p); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open(string filename) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_open_file(p, CHAR(filename)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open(FILE *fp) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_open_fp(p, fp); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::open(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_open_mem(p, writeproc); - PDFCPP_CATCH; -} - -int -PDFlib::open_file(string filename) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_open_file(p, CHAR(filename)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_fp(FILE *fp) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_open_fp(p, fp); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::open_mem(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_open_mem(p, writeproc); - PDFCPP_CATCH; -} - -/* p_block.c */ -int -PDFlib::fill_imageblock(int page, string blockname, int image, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_fill_imageblock(p, page, CHAR(blockname), - image, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::fill_pdfblock(int page, string blockname, int contents, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_fill_pdfblock(p, page, CHAR(blockname), - contents, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::fill_textblock(int page, string blockname, string text, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_fill_textblock(p, page, CHAR(blockname), - CHAR(text), (int) LEN(text), CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -/* p_color.c */ - -int -PDFlib::makespotcolor(string spotname, int reserved) PDF_THROWS(PDFlib::Exception) -{ - (void) reserved; - - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_makespotcolor(p, CHAR(spotname), (int) LEN(spotname)); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::setcolor(string fstype, string colorspace, - float c1, float c2, float c3, float c4) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - m_PDFlib_api->PDF_setcolor(p, CHAR(fstype), CHAR(colorspace), c1, c2, c3, c4); - PDFCPP_CATCH; -} - -void -PDFlib::setgray(float g) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "fillstroke", "gray", g, 0, 0, 0); - PDFCPP_CATCH; -} - -void -PDFlib::setgray_fill(float g) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "fill", "gray", g, 0, 0, 0); - PDFCPP_CATCH; -} - -void -PDFlib::setgray_stroke(float g) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "stroke", "gray", g, 0, 0, 0); - PDFCPP_CATCH; -} - -void -PDFlib::setrgbcolor(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "fillstroke", "rgb", red, green, blue, 0); - PDFCPP_CATCH; -} - -void -PDFlib::setrgbcolor_fill(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "fill", "rgb", red, green, blue, 0); - PDFCPP_CATCH; -} - -void -PDFlib::setrgbcolor_stroke(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setcolor(p, "stroke", "rgb", red, green, blue, 0); - PDFCPP_CATCH; -} - -/* p_draw.c */ - -void -PDFlib::arc(float x, float y, float r, float alpha, float beta) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_arc(p, x, y, r, alpha, beta); - PDFCPP_CATCH; -} - -void -PDFlib::arcn(float x, float y, float r, float alpha, float beta) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_arcn(p, x, y, r, alpha, beta); - PDFCPP_CATCH; -} - -void -PDFlib::circle(float x, float y, float r) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_circle(p, x, y, r); - PDFCPP_CATCH; -} - -void -PDFlib::clip() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_clip(p); - PDFCPP_CATCH; -} - -void -PDFlib::closepath() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_closepath(p); - PDFCPP_CATCH; -} - -void -PDFlib::closepath_fill_stroke() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_closepath_fill_stroke(p); - PDFCPP_CATCH; -} - -void -PDFlib::closepath_stroke() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_closepath_stroke(p); - PDFCPP_CATCH; -} - -void -PDFlib::curveto(float x1, float y1, float x2, float y2, float x3, float y3) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_curveto(p, x1, y1, x2, y2, x3, y3); - PDFCPP_CATCH; -} - -void -PDFlib::endpath() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_endpath(p); - PDFCPP_CATCH; -} - -void -PDFlib::fill() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_fill(p); - PDFCPP_CATCH; -} - -void -PDFlib::fill_stroke() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_fill_stroke(p); - PDFCPP_CATCH; -} - -void -PDFlib::lineto(float x, float y) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_lineto(p, x, y); - PDFCPP_CATCH; -} - -void -PDFlib::moveto(float x, float y) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_moveto(p, x, y); - PDFCPP_CATCH; -} - -void -PDFlib::rect(float x, float y, float width, float height) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_rect(p, x, y, width, height); - PDFCPP_CATCH; -} - -void -PDFlib::stroke() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_stroke(p); - PDFCPP_CATCH; -} - -/* p_encoding.c */ - -void -PDFlib::encoding_set_char(string encoding, int slot, string glyphname, int uv) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_encoding_set_char(p, CHAR(encoding), slot, - CHAR(glyphname), uv); - PDFCPP_CATCH; -} - -/* p_font.c */ - -int -PDFlib::findfont(string fontname, string encoding, int embed) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - PDFCPP_TRY - - retval = m_PDFlib_api->PDF_findfont(p, CHAR(fontname), - CHAR(encoding), embed); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::load_font(string fontname, string encoding, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - PDFCPP_TRY - retval = m_PDFlib_api->PDF_load_font(p, CHAR(fontname), 0, CHAR(encoding), - CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::setfont(int font, float fontsize) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setfont(p, font, fontsize); - PDFCPP_CATCH; -} - -/* p_gstate.c */ - -void -PDFlib::concat(float a, float b, float c, float d, float e, float f) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_concat(p, a, b, c, d, e, f); - PDFCPP_CATCH; -} - -void -PDFlib::initgraphics() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_initgraphics(p); - PDFCPP_CATCH; -} - -void -PDFlib::restore() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_restore(p); - PDFCPP_CATCH; -} - -void -PDFlib::rotate(float phi) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_rotate(p, phi); - PDFCPP_CATCH; -} - -void -PDFlib::save() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_save(p); - PDFCPP_CATCH; -} - -void -PDFlib::scale(float sx, float sy) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_scale(p, sx, sy); - PDFCPP_CATCH; -} - -void -PDFlib::setdash(float b, float w) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setdash(p, b, w); - PDFCPP_CATCH; -} - -void -PDFlib::setdashpattern(string optlist) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setdashpattern(p, CHAR(optlist)); - PDFCPP_CATCH; -} - -void -PDFlib::setflat(float flatness) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setflat(p, flatness); - PDFCPP_CATCH; -} - -void -PDFlib::setlinecap(int linecap) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setlinecap(p, linecap); - PDFCPP_CATCH; -} - -void -PDFlib::setlinejoin(int linejoin) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setlinejoin(p, linejoin); - PDFCPP_CATCH; -} - -void -PDFlib::setlinewidth(float width) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setlinewidth(p, width); - PDFCPP_CATCH; -} - -void -PDFlib::setmatrix( float a, float b, float c, float d, float e, float f) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setmatrix(p, a, b, c, d, e, f); - PDFCPP_CATCH; -} - -void -PDFlib::setmiterlimit(float miter) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setmiterlimit(p, miter); - PDFCPP_CATCH; -} - -void -PDFlib::setpolydash(float *darray, int length) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_setpolydash(p, darray, length); - PDFCPP_CATCH; -} - -void -PDFlib::skew(float alpha, float beta) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_skew(p, alpha, beta); - PDFCPP_CATCH; -} - -void -PDFlib::translate(float tx, float ty) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_translate(p, tx, ty); - PDFCPP_CATCH; -} - -/* p_hyper.c */ - -int -PDFlib::add_bookmark(string text, int parent, bool p_open) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - PDFCPP_TRY - retval = m_PDFlib_api->PDF_add_bookmark2(p, CHAR(text), (int) LEN(text), - parent, p_open); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::add_nameddest(string name, string optlist) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_nameddest(p, CHAR(name), 0, CHAR(optlist)); - PDFCPP_CATCH; -} - -void -PDFlib::set_info(string key, string value) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - m_PDFlib_api->PDF_set_info2(p, CHAR(key), CHAR(value), - (int) LEN(value)); - PDFCPP_CATCH; -} - -/* p_icc.c */ - -int -PDFlib::load_iccprofile(string profilename, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_load_iccprofile(p, CHAR(profilename), 0, - CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -/* p_image.c */ - -void -PDFlib::add_thumbnail(int image) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_add_thumbnail(p, image); - PDFCPP_CATCH; -} - -void -PDFlib::close_image(int image) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_close_image(p, image); - PDFCPP_CATCH; -} - -void -PDFlib::fit_image (int image, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_fit_image(p, image, x, y, CHAR(optlist)); - PDFCPP_CATCH; -} - -int -PDFlib::load_image (string imagetype, string filename, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_load_image(p, CHAR(imagetype), - CHAR(filename),0, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_CCITT(string filename, int width, int height, bool BitReverse, - int K, bool BlackIs1) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_open_CCITT(p, CHAR(filename), width, height, - BitReverse, K, BlackIs1); - } - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_image(string imagetype, string source, const char *data, long len, - int width, int height, int components, int bpc, string params) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_open_image(p, CHAR(imagetype), CHAR(source), - data, len, width, height, components, bpc, CHAR(params)); - } - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_image_file(string imagetype, string filename, - string stringparam, int intparam) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_open_image_file(p, CHAR(imagetype), - CHAR(filename), CHAR(stringparam), intparam); - } - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::place_image(int image, float x, float y, float p_scale) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_place_image(p, image, x, y, p_scale); - PDFCPP_CATCH; -} - -/* p_params.c */ - -string -PDFlib::get_parameter(string key, float modifier) PDF_THROWS(PDFlib::Exception) -{ - const char *retval = NULL; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_get_parameter(p, CHAR(key), modifier); - } - PDFCPP_CATCH; - - if (retval) - return retval; - else - return ""; -} - -float -PDFlib::get_value(string key, float modifier) PDF_THROWS(PDFlib::Exception) -{ - float retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_get_value(p, CHAR(key), modifier); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::set_parameter(string key, string value) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_parameter(p, CHAR(key), CHAR(value)); - PDFCPP_CATCH; -} - -void -PDFlib::set_value(string key, float value) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_value(p, CHAR(key), value); - PDFCPP_CATCH; -} - -/* p_pattern.c */ - -int -PDFlib::begin_pattern(float width, float height, float xstep, float ystep, - int painttype) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - - retval = m_PDFlib_api->PDF_begin_pattern(p, width, height, - xstep, ystep, painttype); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::end_pattern() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_end_pattern(p); - PDFCPP_CATCH; -} - -/* p_pdi.c */ - -void -PDFlib::close_pdi(int doc) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_close_pdi(p, doc); - PDFCPP_CATCH; -} - -void -PDFlib::close_pdi_page(int page) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_close_pdi_page(p, page); - PDFCPP_CATCH; -} - -void -PDFlib::fit_pdi_page (int page, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_fit_pdi_page(p, page, x, y, CHAR(optlist)); - PDFCPP_CATCH; -} - -string -PDFlib::get_pdi_parameter(string key, int doc, int page, int reserved, int *len) - PDF_THROWS(PDFlib::Exception) -{ - const char *retval = NULL; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_get_pdi_parameter(p, CHAR(key), - doc, page, reserved, len); - PDFCPP_CATCH; - - if (retval) - return retval; - else - return ""; -} - -float -PDFlib::get_pdi_value(string key, int doc, int page, int reserved) - PDF_THROWS(PDFlib::Exception) -{ - float retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_get_pdi_value(p, CHAR(key), doc, page,reserved); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_pdi(string filename, string optlist, int reserved) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_open_pdi(p, CHAR(filename), - CHAR(optlist), reserved); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::open_pdi_page(int doc, int pagenumber, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - PDFCPP_TRY - retval = m_PDFlib_api->PDF_open_pdi_page(p, doc, pagenumber, - CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::place_pdi_page(int page, float x, float y, float sx, float sy) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_place_pdi_page(p, page, x, y, sx, sy); - PDFCPP_CATCH; -} - -int -PDFlib::process_pdi(int doc, int page, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_process_pdi(p, doc, page, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -/* p_resource.c */ - -void -PDFlib::create_pvf(string filename, void *data, size_t size, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - m_PDFlib_api->PDF_create_pvf(p, CHAR(filename), 0, data, size, CHAR(optlist)); - PDFCPP_CATCH; -} - -int -PDFlib::delete_pvf(string filename) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_delete_pvf(p, CHAR(filename), 0); - PDFCPP_CATCH; - - return retval; -} - -/* p_shading.c */ -int -PDFlib::shading (string shtype, float x0, float y0, float x1, float y1, - float c1, float c2, float c3, float c4, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_shading(p, CHAR(shtype), x0, y0, x1, y1, - c1, c2, c3, c4, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -int -PDFlib::shading_pattern (int shade, string optlist) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_shading_pattern(p, shade, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::shfill (int shade) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - m_PDFlib_api->PDF_shfill(p, shade); - PDFCPP_CATCH; -} - -/* p_template.c */ - -int -PDFlib::begin_template(float width, float height) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY retval = m_PDFlib_api->PDF_begin_template(p, width, height); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::end_template() PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_end_template(p); - PDFCPP_CATCH; -} - -/* p_text.c */ - -void -PDFlib::continue_text(string text) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_continue_text2(p, CHAR(text), (int) LEN(text)); - PDFCPP_CATCH; -} - -void -PDFlib::fit_textline(string text, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY - m_PDFlib_api->PDF_fit_textline(p, CHAR(text), (int) LEN(text), x, y, CHAR(optlist)); - PDFCPP_CATCH; -} - -void -PDFlib::set_text_pos(float x, float y) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_text_pos(p, x, y); - PDFCPP_CATCH; -} - -void -PDFlib::show(string text) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_show2(p, CHAR(text), (int) LEN(text)); - PDFCPP_CATCH; -} - -int -PDFlib::show_boxed(string text, float left, float top, - float width, float height, string hmode, string feature) - PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - { - retval = m_PDFlib_api->PDF_show_boxed(p, CHAR(text), left, top, width, - height, CHAR(hmode), CHAR(feature)); - } - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::show_xy(string text, float x, float y) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_show_xy2(p, CHAR(text), (int) LEN(text), x, y); - PDFCPP_CATCH; -} - -float -PDFlib::stringwidth(string text, int font, float fontsize) - PDF_THROWS(PDFlib::Exception) -{ - float retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_stringwidth2(p, CHAR(text), - (int) LEN(text), font, fontsize); - PDFCPP_CATCH; - - return retval; -} - -/* p_type3.c */ - -void -PDFlib::begin_font(string fontname, float a, float b, - float c, float d, float e, float f, string optlist) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_begin_font(p, CHAR(fontname), 0, - a, b, c, d, e, f, CHAR(optlist)); - PDFCPP_CATCH; -} - -void -PDFlib::begin_glyph(string glyphname, float wx, float llx, float lly, - float urx, float ury) PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_begin_glyph(p, CHAR(glyphname), wx, llx, lly, urx, ury); - PDFCPP_CATCH; -} - -void -PDFlib::end_font() - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_end_font(p); - PDFCPP_CATCH; -} - -void -PDFlib::end_glyph() - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_end_glyph(p); - PDFCPP_CATCH; -} - -/* p_xgstate.c */ - -int -PDFlib::create_gstate (string optlist) PDF_THROWS(PDFlib::Exception) -{ - int retval = 0; - - PDFCPP_TRY - retval = m_PDFlib_api->PDF_create_gstate(p, CHAR(optlist)); - PDFCPP_CATCH; - - return retval; -} - -void -PDFlib::set_gstate(int gstate) - PDF_THROWS(PDFlib::Exception) -{ - PDFCPP_TRY m_PDFlib_api->PDF_set_gstate(p, gstate); - PDFCPP_CATCH; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/pdflib.hpp b/src/libs/pdflib/bind/pdflib/cpp/pdflib.hpp deleted file mode 100644 index a3a47faa78..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/pdflib.hpp +++ /dev/null @@ -1,312 +0,0 @@ -/*---------------------------------------------------------------------------* - | PDFlib - A library for generating PDF on the fly | - +---------------------------------------------------------------------------+ - | Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. | - +---------------------------------------------------------------------------+ - | | - | This software is subject to the PDFlib license. It is NOT in the | - | public domain. Extended versions and commercial licenses are | - | available, please check http://www.pdflib.com. | - | | - *---------------------------------------------------------------------------*/ - -// $Id: pdflib.hpp 14574 2005-10-29 16:27:43Z bonefish $ -// -// in sync with pdflib.h 1.151.2.22 -// -// C++ wrapper for PDFlib -// -// - -#ifndef PDFLIB_HPP -#define PDFLIB_HPP - -#include - - using namespace std; - -// We use PDF as a C++ class name, therefore hide the actual C struct -// name for PDFlib usage with C++. - -#define PDF_THROWS_CPP_EXCEPTIONS - -#include "pdflib.h" - - -#ifdef PDF_THROWS_CPP_EXCEPTIONS -#define PDF_THROWS(x) throw (x) -#define PDF_THROWS_NOTHING throw () -#else -#define PDFlib PDF -#define PDF_THROWS(x) -#define PDF_THROWS_NOTHING -#endif - - -// The C++ class wrapper for PDFlib - -class PDFlib { -public: -#ifdef PDF_THROWS_CPP_EXCEPTIONS - class Exception - { - public: - Exception(string errmsg, int errnum, string apiname, void *opaque); - string get_message(); - string get_errmsg(); - int get_errnum(); - string get_apiname(); - const void *get_opaque(); - private: - string m_errmsg; - int m_errnum; - string m_apiname; - void * m_opaque; - }; // Exception - - PDFlib(errorproc_t errorproc = NULL, - allocproc_t allocproc = NULL, - reallocproc_t reallocproc = NULL, - freeproc_t freeproc = NULL, - void *opaque = NULL) PDF_THROWS(Exception); - - PDFlib(allocproc_t allocproc, - reallocproc_t reallocproc, - freeproc_t freeproc, - void *opaque = NULL) PDF_THROWS(Exception); - -#else // PDF_THROWS_CPP_EXCEPTIONS - - PDFlib(errorproc_t errorproc = NULL, - allocproc_t allocproc = NULL, - reallocproc_t reallocproc = NULL, - freeproc_t freeproc = NULL, - void *opaque = NULL); - -#endif // PDF_THROWS_CPP_EXCEPTIONS - - ~PDFlib() PDF_THROWS_NOTHING; - - /* p_annots.c */ - void add_launchlink(float llx, float lly, float urx, float ury, - string filename) PDF_THROWS(PDFlib::Exception); - void add_locallink(float llx, float lly, float urx, float ury, - int page, string optlist) PDF_THROWS(PDFlib::Exception); - void add_note(float llx, float lly, float urx, float ury, - string contents, string title, string icon, bool open) - PDF_THROWS(PDFlib::Exception); - void add_pdflink(float llx, float lly, float urx, float ury, - string filename, int page, - string optlist) PDF_THROWS(PDFlib::Exception); - void add_weblink(float llx, float lly, float urx, float ury, string url) - PDF_THROWS(PDFlib::Exception); - void attach_file(float llx, float lly, float urx, float ury, - string filename, string description, string author, - string mimetype, string icon) PDF_THROWS(PDFlib::Exception); - void set_border_color(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception); - void set_border_dash(float b, float w) PDF_THROWS(PDFlib::Exception); - void set_border_style(string style, float width) - PDF_THROWS(PDFlib::Exception); - - /* p_basic.c */ - void begin_page(float width, float height) PDF_THROWS(PDFlib::Exception); - void close() PDF_THROWS(PDFlib::Exception); - void end_page() PDF_THROWS(PDFlib::Exception); - string get_apiname() PDF_THROWS(PDFlib::Exception); - const char *get_buffer(long *size) PDF_THROWS(PDFlib::Exception); - string get_errmsg() PDF_THROWS(PDFlib::Exception); - int get_errnum() PDF_THROWS(PDFlib::Exception); - int get_majorversion() PDF_THROWS_NOTHING; - int get_minorversion() PDF_THROWS_NOTHING; - void * get_opaque() PDF_THROWS(PDFlib::Exception); - // Overloaded generic open and close methods - int open(string filename) PDF_THROWS(PDFlib::Exception); - int open(FILE *fp) PDF_THROWS(PDFlib::Exception); - void open(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception); - int open_fp(FILE *fp) PDF_THROWS(PDFlib::Exception); - int open_file(string filename) PDF_THROWS(PDFlib::Exception); - void open_mem(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception); - - /* p_block.c */ - int fill_imageblock(int page, string blockname, int image, string optlist) - PDF_THROWS(PDFlib::Exception); - int fill_pdfblock(int page, string blockname, int contents, string optlist) - PDF_THROWS(PDFlib::Exception); - int fill_textblock(int page, string blockname, string text, string optlist) - PDF_THROWS(PDFlib::Exception); - - /* p_color.c */ - int makespotcolor(string spotname, int reserved) - PDF_THROWS(PDFlib::Exception); - void setcolor(string fstype, string colorspace, - float c1, float c2, float c3, float c4) PDF_THROWS(PDFlib::Exception); - void setgray(float g) PDF_THROWS(PDFlib::Exception); - void setgray_fill(float g) PDF_THROWS(PDFlib::Exception); - void setgray_stroke(float g) PDF_THROWS(PDFlib::Exception); - void setrgbcolor(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception); - void setrgbcolor_fill(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception); - void setrgbcolor_stroke(float red, float green, float blue) - PDF_THROWS(PDFlib::Exception); - - /* p_draw.c */ - void arc(float x, float y, float r, float alpha, float beta) - PDF_THROWS(PDFlib::Exception); - void arcn(float x, float y, float r, float alpha, float beta) - PDF_THROWS(PDFlib::Exception); - void circle(float x, float y, float r) PDF_THROWS(PDFlib::Exception); - void clip() PDF_THROWS(PDFlib::Exception); - void closepath() PDF_THROWS(PDFlib::Exception); - void closepath_fill_stroke() PDF_THROWS(PDFlib::Exception); - void closepath_stroke() PDF_THROWS(PDFlib::Exception); - void curveto(float x1, float y1, float x2, float y2, float x3, float y3) - PDF_THROWS(PDFlib::Exception); - void endpath() PDF_THROWS(PDFlib::Exception); - void fill() PDF_THROWS(PDFlib::Exception); - void fill_stroke() PDF_THROWS(PDFlib::Exception); - void lineto(float x, float y) PDF_THROWS(PDFlib::Exception); - void moveto(float x, float y) PDF_THROWS(PDFlib::Exception); - void rect(float x, float y, float width, float height) - PDF_THROWS(PDFlib::Exception); - void stroke() PDF_THROWS(PDFlib::Exception); - - /* p_encoding.c */ - void encoding_set_char(string encoding, int slot, string glyphname, - int uv) PDF_THROWS(PDFlib::Exception); - - /* p_font.c */ - int findfont(string fontname, string encoding, int embed) - PDF_THROWS(PDFlib::Exception); - int load_font(string fontname, string encoding, string optlist) - PDF_THROWS(PDFlib::Exception); - void setfont(int font, float fontsize) PDF_THROWS(PDFlib::Exception); - - /* p_gstate.c */ - void concat(float a, float b, float c, float d, float e, float f) - PDF_THROWS(PDFlib::Exception); - void initgraphics() PDF_THROWS(PDFlib::Exception); - void restore() PDF_THROWS(PDFlib::Exception); - void rotate(float phi) PDF_THROWS(PDFlib::Exception); - void save() PDF_THROWS(PDFlib::Exception); - void scale(float sx, float sy) PDF_THROWS(PDFlib::Exception); - void setdash(float b, float w) PDF_THROWS(PDFlib::Exception); - void setdashpattern(string optlist) PDF_THROWS(PDFlib::Exception); - void setflat(float flatness) PDF_THROWS(PDFlib::Exception); - void setlinecap(int linecap) PDF_THROWS(PDFlib::Exception); - void setlinejoin(int linejoin) PDF_THROWS(PDFlib::Exception); - void setlinewidth(float width) PDF_THROWS(PDFlib::Exception); - void setmatrix(float a, float b, float c, float d, float e, float f) - PDF_THROWS(PDFlib::Exception); - void setmiterlimit(float miter) PDF_THROWS(PDFlib::Exception); - void setpolydash(float *darray, int length) PDF_THROWS(PDFlib::Exception); - void skew(float alpha, float beta) PDF_THROWS(PDFlib::Exception); - void translate(float tx, float ty) PDF_THROWS(PDFlib::Exception); - - /* p_hyper.c */ - int add_bookmark(string text, int parent, bool open) - PDF_THROWS(PDFlib::Exception); - void add_nameddest (string name, string optlist) PDF_THROWS(PDFlib::Exception); - void set_info(string key, string value) PDF_THROWS(PDFlib::Exception); - - /* p_icc.c */ - int load_iccprofile(string profilename, string optlist) - PDF_THROWS(PDFlib::Exception); - - /* p_image.c */ - void add_thumbnail(int image) PDF_THROWS(PDFlib::Exception); - void close_image(int image) PDF_THROWS(PDFlib::Exception); - void fit_image (int image, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception); - int load_image (string imagetype, string filename, string optlist) - PDF_THROWS(PDFlib::Exception); - int open_CCITT(string filename, int width, int height, - bool BitReverse, int K, bool BlackIs1) PDF_THROWS(PDFlib::Exception); - int open_image(string imagetype, string source, const char *data, - long len, int width, int height, int components, int bpc, - string params) PDF_THROWS(PDFlib::Exception); - int open_image_file(string imagetype, string filename, - string stringparam, int intparam) PDF_THROWS(PDFlib::Exception); - void place_image(int image, float x, float y, float scale) - PDF_THROWS(PDFlib::Exception); - - /* p_params.c */ - string get_parameter(string key, float modifier) - PDF_THROWS(PDFlib::Exception); - float get_value(string key, float modifier) PDF_THROWS(PDFlib::Exception); - void set_parameter(string key, string value) PDF_THROWS(PDFlib::Exception); - void set_value(string key, float value) PDF_THROWS(PDFlib::Exception); - - /* p_pattern.c */ - int begin_pattern(float width, float height, float xstep, float ystep, - int painttype) PDF_THROWS(PDFlib::Exception); - void end_pattern() PDF_THROWS(PDFlib::Exception); - - /* p_pdi.c */ - void close_pdi(int doc) PDF_THROWS(PDFlib::Exception); - void close_pdi_page(int page) PDF_THROWS(PDFlib::Exception); - void fit_pdi_page (int page, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception); - string get_pdi_parameter(string key, int doc, int page, int reserved, - int *len) PDF_THROWS(PDFlib::Exception); - float get_pdi_value(string key, int doc, int page, int reserved) - PDF_THROWS(PDFlib::Exception); - int open_pdi(string filename, string stringparam, int reserved) - PDF_THROWS(PDFlib::Exception); - int open_pdi_page(int doc, int pagenumber, string optlist) - PDF_THROWS(PDFlib::Exception); - void place_pdi_page(int page, float x, float y, float sx, float sy) - PDF_THROWS(PDFlib::Exception); - int process_pdi(int doc, int page, string optlist) - PDF_THROWS(PDFlib::Exception); - - /* p_resource.c */ - void create_pvf(string filename, void *data, size_t size, string options) - PDF_THROWS(PDFlib::Exception); - int delete_pvf(string filename) PDF_THROWS(PDFlib::Exception); - - /* p_shading.c */ - int shading (string shtype, float x0, float y0, float x1, float y1, - float c1, float c2, float c3, float c4, string optlist) - PDF_THROWS(PDFlib::Exception); - int shading_pattern (int shading, string optlist) - PDF_THROWS(PDFlib::Exception); - void shfill (int shading) PDF_THROWS(PDFlib::Exception); - - /* p_template.c */ - int begin_template(float width, float height) PDF_THROWS(PDFlib::Exception); - void end_template() PDF_THROWS(PDFlib::Exception); - - /* p_text.c */ - void continue_text(string text) PDF_THROWS(PDFlib::Exception); - void fit_textline(string text, float x, float y, string optlist) - PDF_THROWS(PDFlib::Exception); - void set_text_pos(float x, float y) PDF_THROWS(PDFlib::Exception); - void show(string text) PDF_THROWS(PDFlib::Exception); - int show_boxed(string text, float left, float top, - float width, float height, string hmode, string feature) - PDF_THROWS(PDFlib::Exception); - void show_xy(string text, float x, float y) PDF_THROWS(PDFlib::Exception); - float stringwidth(string text, int font, float fontsize) - PDF_THROWS(PDFlib::Exception); - - /* p_type3.c */ - void begin_font(string fontname, float a, float b, float c, float d, - float e, float f, string optlist) PDF_THROWS(PDFlib::Exception); - void begin_glyph(string glyphname, float wx, float llx, float lly, - float urx, float ury) PDF_THROWS(PDFlib::Exception); - void end_font() PDF_THROWS(PDFlib::Exception); - void end_glyph() PDF_THROWS(PDFlib::Exception); - - /* p_xgstate.c */ - int create_gstate (string optlist) PDF_THROWS(PDFlib::Exception); - void set_gstate(int gstate) PDF_THROWS(PDFlib::Exception); - - -private: - PDF *p; - const PDFlib_api *m_PDFlib_api; -}; - -#endif // PDFLIB_HPP diff --git a/src/libs/pdflib/bind/pdflib/cpp/quickreference.cpp b/src/libs/pdflib/bind/pdflib/cpp/quickreference.cpp deleted file mode 100644 index b3c95573dc..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/quickreference.cpp +++ /dev/null @@ -1,102 +0,0 @@ -// $Id: quickreference.cpp 14574 2005-10-29 16:27:43Z bonefish $ -// -// PDFlib/PDI client: mini imposition demo -// -#include - -#include "pdflib.hpp" - -int -main(void) -{ - try { - PDFlib *p; // pointer to the PDFlib class - int manual, page; - int font, row, col; - const int maxrow = 2; - const int maxcol = 2; - char optlist[128]; - int startpage = 1, endpage = 4; - const float width = 500, height = 770; - int pageno; - const string infile = "reference.pdf"; - /* This is where font/image/PDF input files live. Adjust as necessary.*/ - const string searchpath = "../data"; - - p = new PDFlib(); - - // open new PDF file - if (p->open_file("quickreference.pdf") == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - return 2; - } - - p->set_parameter("SearchPath", searchpath); - - // This line is required to avoid problems on Japanese systems - p->set_parameter("hypertextencoding", "host"); - - p->set_info("Creator", "quickreference.cpp"); - p->set_info("Author", "Thomas Merz"); - p->set_info("Title", "mini imposition demo (C++)"); - - manual = p->open_pdi(infile, "", 0); - if (manual == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - return 2; - } - - row = 0; - col = 0; - - p->set_parameter("topdown", "true"); - - for (pageno = startpage; pageno <= endpage; pageno++) { - if (row == 0 && col == 0) { - p->begin_page(width, height); - font = p->load_font("Helvetica-Bold", "host", ""); - p->setfont(font, 18); - p->set_text_pos(24, 24); - p->show("PDFlib Quick Reference"); - } - - page = p->open_pdi_page(manual, pageno, ""); - - if (page == -1) { - cerr << "Error: " << p->get_errmsg() << endl; - return 2; - } - - sprintf(optlist, "scale %f", (float) 1/maxrow); - p->fit_pdi_page(page, width/maxcol*col, - (row + 1) * height/maxrow, optlist); - p->close_pdi_page(page); - - col++; - if (col == maxcol) { - col = 0; - row++; - } - if (row == maxrow) { - row = 0; - p->end_page(); - } - } - - // finish the last partial page - if (row != 0 || col != 0) - p->end_page(); - - p->close(); - p->close_pdi(manual); - - } - catch (PDFlib::Exception &ex) { - cerr << "PDFlib exception occurred in quickreference sample: " << endl; - cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname() - << ": " << ex.get_errmsg() << endl; - return 2; - } - - return 0; -} diff --git a/src/libs/pdflib/bind/pdflib/cpp/quickreference.dsp b/src/libs/pdflib/bind/pdflib/cpp/quickreference.dsp deleted file mode 100644 index 24bcd0f158..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/quickreference.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="quickreference" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=quickreference - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "quickreference.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "quickreference.mak" CFG="quickreference - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "quickreference - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "quickreference - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "quickreference - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\quickreference.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib" - -!ELSEIF "$(CFG)" == "quickreference - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib" -# SUBTRACT LINK32 /map - -!ENDIF - -# Begin Target - -# Name "quickreference - Win32 Release" -# Name "quickreference - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pdflib.cpp -# End Source File -# Begin Source File - -SOURCE=.\quickreference.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\pdflib.hpp -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/src/libs/pdflib/bind/pdflib/cpp/readme.txt b/src/libs/pdflib/bind/pdflib/cpp/readme.txt deleted file mode 100644 index ad5a68f4e3..0000000000 --- a/src/libs/pdflib/bind/pdflib/cpp/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -Notes on the PDFlib C++ binding: - -(none) diff --git a/src/libs/pdflib/bind/pdflib/cpp/samples.mcp b/src/libs/pdflib/bind/pdflib/cpp/samples.mcp deleted file mode 100644 index 226b8473eeae310c30379c485280c6753f1592b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677679 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 E1D7qcIRF3v diff --git a/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.afm b/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.afm deleted file mode 100644 index ec2cbe6f90..0000000000 --- a/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.afm +++ /dev/null @@ -1,497 +0,0 @@ -StartFontMetrics 2.0 -Comment Copyright (c) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. -Comment Patents pending. All Rights Reserved. -Comment Lucidux is a trademark of Bigelow & Holmes Inc. -Comment CreationDate: 2000 Mar 04 11:21:33 -Comment For other Bigelow & Holmes fonts see http://www.YandY.com -Version 000.200 -Notice Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. All rights reserved. -FullName Lucidux Sans Oblique -FamilyName LuciduxSans -Weight Normal -ItalicAngle -11.3 -IsFixedPitch false -UnderlinePosition -100 -UnderlineThickness 50 -FontName LuciduxSans-Oblique -FontBBox -114 -211 1095 993 -Comment UniqueID 5096732 -CapHeight 723 -XHeight 530 -Ascender 771 -Descender -193 -EncodingScheme AdobeStandardEncoding -StartCharMetrics 337 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 278 ; N exclam ; B 91 0 332 723 ; -C 34 ; WX 355 ; N quotedbl ; B 163 530 464 771 ; -C 35 ; WX 556 ; N numbersign ; B 55 0 645 723 ; -C 36 ; WX 556 ; N dollar ; B 58 -60 586 783 ; -C 37 ; WX 889 ; N percent ; B 118 -18 915 741 ; -C 38 ; WX 667 ; N ampersand ; B 65 -18 706 741 ; -C 40 ; WX 333 ; N parenleft ; B 116 -145 447 771 ; -C 41 ; WX 333 ; N parenright ; B 11 -145 343 771 ; -C 42 ; WX 389 ; N asterisk ; B 131 367 482 723 ; -C 43 ; WX 584 ; N plus ; B 102 48 598 530 ; -C 44 ; WX 278 ; N comma ; B 48 -157 223 120 ; -C 45 ; WX 333 ; N hyphen ; B 94 253 355 325 ; -C 46 ; WX 278 ; N period ; B 79 0 223 120 ; -C 47 ; WX 278 ; N slash ; B -58 -145 452 723 ; -C 48 ; WX 556 ; N zero ; B 96 -18 605 741 ; -C 49 ; WX 556 ; N one ; B 112 0 512 741 ; -C 50 ; WX 556 ; N two ; B 50 0 573 741 ; -C 51 ; WX 556 ; N three ; B 76 -18 567 741 ; -C 52 ; WX 556 ; N four ; B 56 0 580 723 ; -C 53 ; WX 556 ; N five ; B 78 -18 602 723 ; -C 54 ; WX 556 ; N six ; B 95 -18 605 741 ; -C 55 ; WX 556 ; N seven ; B 108 0 675 723 ; -C 56 ; WX 556 ; N eight ; B 80 -18 623 741 ; -C 57 ; WX 556 ; N nine ; B 82 -18 592 741 ; -C 58 ; WX 278 ; N colon ; B 91 0 293 530 ; -C 59 ; WX 278 ; N semicolon ; B 60 -157 293 530 ; -C 60 ; WX 584 ; N less ; B 109 48 639 530 ; -C 61 ; WX 584 ; N equal ; B 84 163 616 416 ; -C 62 ; WX 584 ; N greater ; B 61 48 591 530 ; -C 63 ; WX 556 ; N question ; B 183 0 614 741 ; -C 64 ; WX 1015 ; N at ; B 173 -18 994 741 ; -C 65 ; WX 667 ; N A ; B 9 0 655 723 ; -C 66 ; WX 667 ; N B ; B 81 0 688 723 ; -C 67 ; WX 722 ; N C ; B 118 -18 801 741 ; -C 68 ; WX 722 ; N D ; B 81 0 762 723 ; -C 69 ; WX 667 ; N E ; B 93 0 762 723 ; -C 70 ; WX 611 ; N F ; B 93 0 729 723 ; -C 71 ; WX 778 ; N G ; B 106 -18 827 741 ; -C 72 ; WX 722 ; N H ; B 81 0 786 723 ; -C 73 ; WX 278 ; N I ; B 88 0 335 723 ; -C 74 ; WX 500 ; N J ; B 1 -145 555 723 ; -C 75 ; WX 667 ; N K ; B 93 0 738 723 ; -C 76 ; WX 556 ; N L ; B 81 0 552 723 ; -C 77 ; WX 833 ; N M ; B 81 0 897 723 ; -C 78 ; WX 722 ; N N ; B 81 0 786 723 ; -C 79 ; WX 778 ; N O ; B 107 -18 816 741 ; -C 80 ; WX 667 ; N P ; B 81 0 756 723 ; -C 81 ; WX 778 ; N Q ; B 107 -145 816 741 ; -C 82 ; WX 722 ; N R ; B 81 0 718 723 ; -C 83 ; WX 667 ; N S ; B 64 -18 704 741 ; -C 84 ; WX 611 ; N T ; B 139 0 746 723 ; -C 85 ; WX 722 ; N U ; B 122 -18 786 723 ; -C 86 ; WX 667 ; N V ; B 162 0 806 723 ; -C 87 ; WX 944 ; N W ; B 157 0 1077 723 ; -C 88 ; WX 667 ; N X ; B 13 0 793 723 ; -C 89 ; WX 667 ; N Y ; B 160 0 798 723 ; -C 90 ; WX 611 ; N Z ; B 50 0 706 723 ; -C 91 ; WX 278 ; N bracketleft ; B 44 -145 420 771 ; -C 92 ; WX 278 ; N backslash ; B 116 -145 278 723 ; -C 93 ; WX 278 ; N bracketright ; B -16 -145 359 771 ; -C 94 ; WX 469 ; N asciicircum ; B 76 289 509 723 ; -C 95 ; WX 556 ; N underscore ; B 34 -72 508 0 ; -C 97 ; WX 556 ; N a ; B 69 -12 543 542 ; -C 98 ; WX 556 ; N b ; B 74 -12 579 771 ; -C 99 ; WX 500 ; N c ; B 87 -12 552 542 ; -C 100 ; WX 556 ; N d ; B 83 -12 635 771 ; -C 101 ; WX 556 ; N e ; B 89 -12 564 542 ; -C 102 ; WX 278 ; N f ; B 85 0 461 783 ; -C 103 ; WX 556 ; N g ; B 14 -205 590 542 ; -C 104 ; WX 556 ; N h ; B 75 0 570 771 ; -C 105 ; WX 222 ; N i ; B 63 0 304 723 ; -C 106 ; WX 222 ; N j ; B -114 -205 307 723 ; -C 107 ; WX 500 ; N k ; B 75 0 547 771 ; -C 108 ; WX 222 ; N l ; B 63 0 313 771 ; -C 109 ; WX 833 ; N m ; B 75 0 846 542 ; -C 110 ; WX 556 ; N n ; B 75 0 570 542 ; -C 111 ; WX 556 ; N o ; B 86 -12 576 542 ; -C 112 ; WX 556 ; N p ; B 36 -193 579 542 ; -C 113 ; WX 556 ; N q ; B 83 -193 587 542 ; -C 114 ; WX 333 ; N r ; B 75 0 434 542 ; -C 115 ; WX 500 ; N s ; B 61 -12 508 542 ; -C 116 ; WX 278 ; N t ; B 97 -12 379 636 ; -C 117 ; WX 556 ; N u ; B 92 -12 587 530 ; -C 118 ; WX 500 ; N v ; B 115 0 600 530 ; -C 119 ; WX 722 ; N w ; B 112 0 821 530 ; -C 120 ; WX 500 ; N x ; B 14 0 578 530 ; -C 121 ; WX 500 ; N y ; B 75 -193 600 530 ; -C 122 ; WX 500 ; N z ; B 36 0 564 530 ; -C 123 ; WX 334 ; N braceleft ; B 67 -145 431 771 ; -C 124 ; WX 260 ; N bar ; B 65 -145 320 771 ; -C 125 ; WX 334 ; N braceright ; B 28 -145 392 771 ; -C 126 ; WX 584 ; N asciitilde ; B 94 201 605 377 ; -C 161 ; WX 333 ; N exclamdown ; B 79 -193 321 530 ; -C 162 ; WX 556 ; N cent ; B 149 0 617 723 ; -C 163 ; WX 556 ; N sterling ; B 59 0 609 741 ; -C 165 ; WX 556 ; N yen ; B 110 0 671 723 ; -C 167 ; WX 556 ; N section ; B 38 -163 610 741 ; -C 168 ; WX 556 ; N currency ; B 97 143 604 580 ; -C 169 ; WX 191 ; N quotesingle ; B 160 506 310 771 ; -C 171 ; WX 556 ; N guillemotleft ; B 109 48 579 482 ; -C 180 ; WX 278 ; N periodcentered ; B 127 240 271 360 ; -C 182 ; WX 537 ; N paragraph ; B 151 -145 586 723 ; -C 187 ; WX 556 ; N guillemotright ; B 83 48 553 482 ; -C 191 ; WX 611 ; N questiondown ; B 77 -211 508 530 ; -C 193 ; WX 333 ; N grave ; B 209 626 406 783 ; -C 194 ; WX 333 ; N acute ; B 188 626 449 783 ; -C 195 ; WX 333 ; N circumflex ; B 121 626 462 783 ; -C 196 ; WX 333 ; N tilde ; B 129 626 477 741 ; -C 197 ; WX 333 ; N macron ; B 135 627 463 699 ; -C 198 ; WX 333 ; N breve ; B 160 626 486 783 ; -C 199 ; WX 333 ; N dotaccent ; B 243 626 360 723 ; -C 200 ; WX 333 ; N dieresis ; B 153 626 447 711 ; -C 202 ; WX 333 ; N ring ; B 201 626 427 848 ; -C 203 ; WX 333 ; N cedilla ; B 44 -211 228 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 100 626 515 783 ; -C 206 ; WX 333 ; N ogonek ; B 61 -181 225 0 ; -C 207 ; WX 333 ; N caron ; B 153 626 494 783 ; -C 225 ; WX 1000 ; N AE ; B 9 0 1095 723 ; -C 227 ; WX 370 ; N ordfeminine ; B 139 402 436 741 ; -C 232 ; WX 556 ; N Lslash ; B 68 0 552 723 ; -C 233 ; WX 778 ; N Oslash ; B 47 -18 881 741 ; -C 234 ; WX 1000 ; N OE ; B 107 -18 1095 741 ; -C 235 ; WX 365 ; N ordmasculine ; B 145 402 448 741 ; -C 241 ; WX 889 ; N ae ; B 69 -12 897 542 ; -C 245 ; WX 222 ; N dotlessi ; B 63 0 265 530 ; -C 248 ; WX 222 ; N lslash ; B 60 0 329 771 ; -C 249 ; WX 611 ; N oslash ; B 68 -12 649 542 ; -C 250 ; WX 944 ; N oe ; B 87 -12 951 542 ; -C 251 ; WX 611 ; N germandbls ; B 63 -12 602 783 ; -C -1 ; WX 667 ; N Aacute ; B 9 0 690 940 ; -C -1 ; WX 667 ; N Abreve ; B 9 0 686 940 ; -C -1 ; WX 667 ; N Acircumflex ; B 9 0 662 940 ; -C -1 ; WX 667 ; N Adieresis ; B 9 0 655 868 ; -C -1 ; WX 667 ; N Agrave ; B 9 0 655 940 ; -C -1 ; WX 667 ; N Amacron ; B 9 0 663 856 ; -C -1 ; WX 667 ; N Aogonek ; B 9 -181 655 723 ; -C -1 ; WX 667 ; N Aring ; B 9 0 655 945 ; -C -1 ; WX 667 ; N Atilde ; B 9 0 677 898 ; -C -1 ; WX 722 ; N Cacute ; B 118 -18 801 940 ; -C -1 ; WX 722 ; N Ccaron ; B 118 -18 801 940 ; -C -1 ; WX 722 ; N Ccedilla ; B 118 -211 801 741 ; -C -1 ; WX 722 ; N Ccircumflex ; B 118 -18 801 940 ; -C -1 ; WX 722 ; N Cdotaccent ; B 118 -18 801 880 ; -C -1 ; WX 722 ; N Dcaron ; B 81 0 762 940 ; -C -1 ; WX 722 ; N Dcroat ; B 68 0 763 723 ; -C -1 ; WX 667 ; N Eacute ; B 93 0 762 940 ; -C -1 ; WX 667 ; N Ebreve ; B 93 0 762 940 ; -C -1 ; WX 667 ; N Ecaron ; B 93 0 762 940 ; -C -1 ; WX 667 ; N Ecircumflex ; B 93 0 762 940 ; -C -1 ; WX 667 ; N Edieresis ; B 93 0 762 868 ; -C -1 ; WX 667 ; N Edotaccent ; B 93 0 762 880 ; -C -1 ; WX 667 ; N Egrave ; B 93 0 762 940 ; -C -1 ; WX 667 ; N Emacron ; B 93 0 762 856 ; -C -1 ; WX 722 ; N Eng ; B 81 -205 786 723 ; -C -1 ; WX 667 ; N Eogonek ; B 93 -181 762 723 ; -C -1 ; WX 722 ; N Eth ; B 68 0 763 723 ; -C -1 ; WX 556 ; N Euro ; B 52 -18 671 740 ; -C -1 ; WX 778 ; N Gbreve ; B 106 -18 827 940 ; -C -1 ; WX 778 ; N Gcircumflex ; B 106 -18 827 940 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 106 -211 827 741 ; -C -1 ; WX 778 ; N Gdotaccent ; B 106 -18 827 880 ; -C -1 ; WX 722 ; N Hbar ; B 81 0 834 723 ; -C -1 ; WX 722 ; N Hcircumflex ; B 81 0 786 940 ; -C -1 ; WX 735 ; N IJ ; B 88 -145 790 723 ; -C -1 ; WX 278 ; N Iacute ; B 88 0 495 940 ; -C -1 ; WX 278 ; N Ibreve ; B 88 0 489 940 ; -C -1 ; WX 278 ; N Icircumflex ; B 88 0 466 940 ; -C -1 ; WX 278 ; N Idieresis ; B 88 0 451 868 ; -C -1 ; WX 278 ; N Idotaccent ; B 88 0 364 880 ; -C -1 ; WX 278 ; N Igrave ; B 88 0 368 940 ; -C -1 ; WX 278 ; N Imacron ; B 88 0 466 856 ; -C -1 ; WX 278 ; N Iogonek ; B 37 -181 335 723 ; -C -1 ; WX 278 ; N Itilde ; B 88 0 481 898 ; -C -1 ; WX 500 ; N Jcircumflex ; B 1 -145 674 940 ; -C -1 ; WX 667 ; N Kcommaaccent ; B 93 -211 738 723 ; -C -1 ; WX 556 ; N Lacute ; B 81 0 552 940 ; -C -1 ; WX 556 ; N Lcaron ; B 81 0 569 723 ; -C -1 ; WX 556 ; N Lcommaaccent ; B 81 -211 552 723 ; -C -1 ; WX 556 ; N Ldot ; B 81 0 552 723 ; -C -1 ; WX 722 ; N Nacute ; B 81 0 786 940 ; -C -1 ; WX 722 ; N Ncaron ; B 81 0 786 940 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 81 -211 786 723 ; -C -1 ; WX 722 ; N Ntilde ; B 81 0 786 898 ; -C -1 ; WX 778 ; N Oacute ; B 107 -18 816 940 ; -C -1 ; WX 778 ; N Obreve ; B 107 -18 816 940 ; -C -1 ; WX 778 ; N Ocircumflex ; B 107 -18 816 940 ; -C -1 ; WX 778 ; N Odieresis ; B 107 -18 816 868 ; -C -1 ; WX 778 ; N Ograve ; B 107 -18 816 940 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -18 847 940 ; -C -1 ; WX 778 ; N Omacron ; B 107 -18 816 856 ; -C -1 ; WX 778 ; N Otilde ; B 107 -18 816 898 ; -C -1 ; WX 722 ; N Racute ; B 81 0 718 940 ; -C -1 ; WX 722 ; N Rcaron ; B 81 0 718 940 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 81 -211 718 723 ; -C -1 ; WX 667 ; N Sacute ; B 64 -18 704 940 ; -C -1 ; WX 667 ; N Scaron ; B 64 -18 704 940 ; -C -1 ; WX 667 ; N Scedilla ; B 64 -191 704 741 ; -C -1 ; WX 667 ; N Scircumflex ; B 64 -18 704 940 ; -C -1 ; WX 667 ; N Scommaaccent ; B 64 -211 704 741 ; -C -1 ; WX 611 ; N Tbar ; B 139 0 746 723 ; -C -1 ; WX 611 ; N Tcaron ; B 139 0 746 940 ; -C -1 ; WX 611 ; N Tcedilla ; B 139 -191 746 723 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 139 -211 746 723 ; -C -1 ; WX 667 ; N Thorn ; B 81 0 729 723 ; -C -1 ; WX 722 ; N Uacute ; B 122 -18 786 940 ; -C -1 ; WX 722 ; N Ubreve ; B 122 -18 786 940 ; -C -1 ; WX 722 ; N Ucircumflex ; B 122 -18 786 940 ; -C -1 ; WX 722 ; N Udieresis ; B 122 -18 786 868 ; -C -1 ; WX 722 ; N Ugrave ; B 122 -18 786 940 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 122 -18 815 940 ; -C -1 ; WX 722 ; N Umacron ; B 122 -18 786 856 ; -C -1 ; WX 722 ; N Uogonek ; B 122 -181 786 723 ; -C -1 ; WX 722 ; N Uring ; B 122 -18 786 993 ; -C -1 ; WX 722 ; N Utilde ; B 122 -18 786 898 ; -C -1 ; WX 944 ; N Wcircumflex ; B 157 0 1077 940 ; -C -1 ; WX 667 ; N Yacute ; B 160 0 798 940 ; -C -1 ; WX 667 ; N Ycircumflex ; B 160 0 798 940 ; -C -1 ; WX 667 ; N Ydieresis ; B 160 0 798 868 ; -C -1 ; WX 611 ; N Zacute ; B 50 0 706 940 ; -C -1 ; WX 611 ; N Zcaron ; B 50 0 706 940 ; -C -1 ; WX 611 ; N Zdotaccent ; B 50 0 706 880 ; -C -1 ; WX 556 ; N aacute ; B 69 -12 607 783 ; -C -1 ; WX 556 ; N abreve ; B 69 -12 607 783 ; -C -1 ; WX 556 ; N acircumflex ; B 69 -12 578 783 ; -C -1 ; WX 556 ; N adieresis ; B 69 -12 554 711 ; -C -1 ; WX 333 ; N afii57929 ; B 228 549 369 771 ; -C -1 ; WX 556 ; N agrave ; B 69 -12 543 783 ; -C -1 ; WX 556 ; N amacron ; B 69 -12 569 699 ; -C -1 ; WX 556 ; N aogonek ; B 69 -181 543 542 ; -C -1 ; WX 333 ; N apostrophe ; B 228 549 369 771 ; -C -1 ; WX 556 ; N aring ; B 69 -12 543 848 ; -C -1 ; WX 556 ; N atilde ; B 69 -12 578 741 ; -C -1 ; WX 260 ; N brokenbar ; B 65 -145 320 771 ; -C -1 ; WX 500 ; N cacute ; B 87 -12 610 783 ; -C -1 ; WX 500 ; N ccaron ; B 87 -12 624 783 ; -C -1 ; WX 500 ; N ccedilla ; B 87 -211 552 542 ; -C -1 ; WX 500 ; N ccircumflex ; B 87 -12 592 783 ; -C -1 ; WX 500 ; N cdotaccent ; B 87 -12 552 723 ; -C -1 ; WX 333 ; N commaaccent ; B 45 -211 227 -54 ; -C -1 ; WX 737 ; N copyright ; B 72 0 810 723 ; -C -1 ; WX 615 ; N dcaron ; B 83 -12 769 771 ; -C -1 ; WX 556 ; N dcroat ; B 83 -12 688 771 ; -C -1 ; WX 400 ; N degree ; B 171 452 467 741 ; -C -1 ; WX 584 ; N divide ; B 102 0 598 578 ; -C -1 ; WX 222 ; N dotlessj ; B -114 -205 268 530 ; -C -1 ; WX 556 ; N eacute ; B 89 -12 603 783 ; -C -1 ; WX 556 ; N ebreve ; B 89 -12 597 783 ; -C -1 ; WX 556 ; N ecaron ; B 89 -12 606 783 ; -C -1 ; WX 556 ; N ecircumflex ; B 89 -12 579 783 ; -C -1 ; WX 556 ; N edieresis ; B 89 -12 565 711 ; -C -1 ; WX 556 ; N edotaccent ; B 89 -12 564 723 ; -C -1 ; WX 556 ; N egrave ; B 89 -12 564 783 ; -C -1 ; WX 556 ; N emacron ; B 89 -12 574 699 ; -C -1 ; WX 556 ; N eng ; B 75 -205 570 542 ; -C -1 ; WX 556 ; N eogonek ; B 89 -181 564 542 ; -C -1 ; WX 602 ; N eth ; B 87 -12 624 818 ; -C -1 ; WX 556 ; N gbreve ; B 14 -205 612 783 ; -C -1 ; WX 556 ; N gcircumflex ; B 14 -205 590 783 ; -C -1 ; WX 556 ; N gcommaaccent ; B 14 -205 590 848 ; -C -1 ; WX 556 ; N gdotaccent ; B 14 -205 590 723 ; -C -1 ; WX 556 ; N hbar ; B 75 0 570 771 ; -C -1 ; WX 556 ; N hcircumflex ; B 75 0 616 976 ; -C -1 ; WX 222 ; N iacute ; B 63 0 436 783 ; -C -1 ; WX 222 ; N ibreve ; B 63 0 430 783 ; -C -1 ; WX 222 ; N icircumflex ; B 63 0 406 783 ; -C -1 ; WX 222 ; N idieresis ; B 63 0 391 711 ; -C -1 ; WX 222 ; N igrave ; B 63 0 308 783 ; -C -1 ; WX 444 ; N ij ; B 63 -205 529 723 ; -C -1 ; WX 222 ; N imacron ; B 63 0 407 699 ; -C -1 ; WX 222 ; N iogonek ; B 8 -181 304 723 ; -C -1 ; WX 222 ; N itilde ; B 63 0 421 741 ; -C -1 ; WX 222 ; N jcircumflex ; B -114 -205 401 783 ; -C -1 ; WX 500 ; N kcommaaccent ; B 75 -211 547 771 ; -C -1 ; WX 500 ; N kgreenlandic ; B 75 0 547 530 ; -C -1 ; WX 222 ; N lacute ; B 63 0 463 976 ; -C -1 ; WX 292 ; N lcaron ; B 63 0 452 771 ; -C -1 ; WX 222 ; N lcommaaccent ; B -2 -211 313 771 ; -C -1 ; WX 334 ; N ldot ; B 63 0 410 771 ; -C -1 ; WX 584 ; N logicalnot ; B 114 145 611 434 ; -C -1 ; WX 222 ; N longs ; B 70 0 406 783 ; -C -1 ; WX 556 ; N mu ; B 30 -193 587 530 ; -C -1 ; WX 584 ; N multiply ; B 79 55 620 523 ; -C -1 ; WX 556 ; N nacute ; B 75 0 588 783 ; -C -1 ; WX 604 ; N napostrophe ; B 110 0 618 771 ; -C -1 ; WX 278 ; N nbspace ; B 0 0 0 0 ; -C -1 ; WX 556 ; N ncaron ; B 75 0 613 783 ; -C -1 ; WX 556 ; N ncommaaccent ; B 75 -211 570 542 ; -C -1 ; WX 556 ; N ntilde ; B 75 0 584 741 ; -C -1 ; WX 556 ; N oacute ; B 86 -12 603 783 ; -C -1 ; WX 556 ; N obreve ; B 86 -12 597 783 ; -C -1 ; WX 556 ; N ocircumflex ; B 86 -12 576 783 ; -C -1 ; WX 556 ; N odieresis ; B 86 -12 576 711 ; -C -1 ; WX 556 ; N ograve ; B 86 -12 576 783 ; -C -1 ; WX 556 ; N ohungarumlaut ; B 86 -12 705 783 ; -C -1 ; WX 556 ; N omacron ; B 86 -12 576 699 ; -C -1 ; WX 834 ; N onehalf ; B 65 -18 841 741 ; -C -1 ; WX 834 ; N onequarter ; B 89 -18 839 741 ; -C -1 ; WX 333 ; N onesuperior ; B 187 289 376 734 ; -C -1 ; WX 556 ; N otilde ; B 86 -12 588 741 ; -C -1 ; WX 584 ; N plusminus ; B 51 0 613 578 ; -C -1 ; WX 333 ; N racute ; B 75 0 510 783 ; -C -1 ; WX 333 ; N rcaron ; B 75 0 500 783 ; -C -1 ; WX 333 ; N rcommaaccent ; B 34 -211 434 542 ; -C -1 ; WX 737 ; N registered ; B 72 0 810 723 ; -C -1 ; WX 500 ; N sacute ; B 61 -12 582 783 ; -C -1 ; WX 500 ; N scaron ; B 61 -12 596 783 ; -C -1 ; WX 500 ; N scedilla ; B 61 -191 508 542 ; -C -1 ; WX 500 ; N scircumflex ; B 61 -12 563 783 ; -C -1 ; WX 500 ; N scommaaccent ; B 61 -211 508 542 ; -C -1 ; WX 333 ; N sfthyphen ; B 94 253 355 325 ; -C -1 ; WX 278 ; N tbar ; B 69 -12 379 636 ; -C -1 ; WX 375 ; N tcaron ; B 97 -12 517 824 ; -C -1 ; WX 278 ; N tcedilla ; B 69 -191 379 636 ; -C -1 ; WX 278 ; N tcommaaccent ; B 46 -211 379 636 ; -C -1 ; WX 556 ; N thorn ; B 36 -193 579 771 ; -C -1 ; WX 834 ; N threequarters ; B 112 -18 884 741 ; -C -1 ; WX 333 ; N threesuperior ; B 94 278 419 734 ; -C -1 ; WX 333 ; N twosuperior ; B 94 289 437 734 ; -C -1 ; WX 556 ; N uacute ; B 92 -12 600 783 ; -C -1 ; WX 556 ; N ubreve ; B 92 -12 594 783 ; -C -1 ; WX 556 ; N ucircumflex ; B 92 -12 587 783 ; -C -1 ; WX 556 ; N udieresis ; B 92 -12 587 711 ; -C -1 ; WX 556 ; N ugrave ; B 92 -12 587 783 ; -C -1 ; WX 556 ; N uhungarumlaut ; B 92 -12 682 783 ; -C -1 ; WX 556 ; N umacron ; B 92 -12 587 699 ; -C -1 ; WX 556 ; N uni20AC ; B 52 -18 671 740 ; -C -1 ; WX 556 ; N uogonek ; B 92 -181 587 530 ; -C -1 ; WX 556 ; N uring ; B 92 -12 587 848 ; -C -1 ; WX 556 ; N utilde ; B 92 -12 587 741 ; -C -1 ; WX 722 ; N wcircumflex ; B 112 0 821 783 ; -C -1 ; WX 500 ; N yacute ; B 75 -193 600 783 ; -C -1 ; WX 500 ; N ycircumflex ; B 75 -193 600 783 ; -C -1 ; WX 500 ; N ydieresis ; B 75 -193 600 711 ; -C -1 ; WX 500 ; N zacute ; B 36 0 564 783 ; -C -1 ; WX 500 ; N zcaron ; B 36 0 579 783 ; -C -1 ; WX 500 ; N zdotaccent ; B 36 0 564 723 ; -EndCharMetrics -StartComposites 132 -CC Aacute 2 ; PCC A 0 0 ; PCC acute 210 157 ; -CC Abreve 2 ; PCC A 0 0 ; PCC breve 169 157 ; -CC Acircumflex 2 ; PCC A 0 0 ; PCC circumflex 168 157 ; -CC Adieresis 2 ; PCC A 0 0 ; PCC dieresis 168 157 ; -CC Agrave 2 ; PCC A 0 0 ; PCC grave 126 157 ; -CC Amacron 2 ; PCC A 0 0 ; PCC macron 169 157 ; -CC Atilde 2 ; PCC A 0 0 ; PCC tilde 168 157 ; -CC Cacute 2 ; PCC C 0 0 ; PCC acute 281 157 ; -CC Ccaron 2 ; PCC C 0 0 ; PCC caron 250 157 ; -CC Ccircumflex 2 ; PCC C 0 0 ; PCC circumflex 250 157 ; -CC Cdotaccent 2 ; PCC C 0 0 ; PCC dotaccent 250 157 ; -CC Dcaron 2 ; PCC D 0 0 ; PCC caron 167 157 ; -CC Eacute 2 ; PCC E 0 0 ; PCC acute 240 157 ; -CC Ebreve 2 ; PCC E 0 0 ; PCC breve 193 157 ; -CC Ecaron 2 ; PCC E 0 0 ; PCC caron 191 157 ; -CC Ecircumflex 2 ; PCC E 0 0 ; PCC circumflex 199 157 ; -CC Edieresis 2 ; PCC E 0 0 ; PCC dieresis 192 157 ; -CC Edotaccent 2 ; PCC E 0 0 ; PCC dotaccent 192 157 ; -CC Egrave 2 ; PCC E 0 0 ; PCC grave 156 157 ; -CC Emacron 2 ; PCC E 0 0 ; PCC macron 186 157 ; -CC Gbreve 2 ; PCC G 0 0 ; PCC breve 256 157 ; -CC Gcircumflex 2 ; PCC G 0 0 ; PCC circumflex 256 157 ; -CC Gdotaccent 2 ; PCC G 0 0 ; PCC dotaccent 257 157 ; -CC Hcircumflex 2 ; PCC H 0 0 ; PCC circumflex 194 157 ; -CC Iacute 2 ; PCC I 0 0 ; PCC acute 15 157 ; -CC Ibreve 2 ; PCC I 0 0 ; PCC breve -28 157 ; -CC Icircumflex 2 ; PCC I 0 0 ; PCC circumflex -28 157 ; -CC Idieresis 2 ; PCC I 0 0 ; PCC dieresis -28 157 ; -CC Idotaccent 2 ; PCC I 0 0 ; PCC dotaccent -27 157 ; -CC Igrave 2 ; PCC I 0 0 ; PCC grave -70 157 ; -CC Imacron 2 ; PCC I 0 0 ; PCC macron -28 157 ; -CC Itilde 2 ; PCC I 0 0 ; PCC tilde -28 157 ; -CC Jcircumflex 2 ; PCC J 0 0 ; PCC circumflex 180 157 ; -CC Lacute 2 ; PCC L 0 0 ; PCC acute 24 157 ; -CC Ldot 2 ; PCC L 0 0 ; PCC dotaccent 245 -313 ; -CC Nacute 2 ; PCC N 0 0 ; PCC acute 226 157 ; -CC Ncaron 2 ; PCC N 0 0 ; PCC caron 195 157 ; -CC Ntilde 2 ; PCC N 0 0 ; PCC tilde 207 157 ; -CC Oacute 2 ; PCC O 0 0 ; PCC acute 265 157 ; -CC Obreve 2 ; PCC O 0 0 ; PCC breve 222 157 ; -CC Ocircumflex 2 ; PCC O 0 0 ; PCC circumflex 222 157 ; -CC Odieresis 2 ; PCC O 0 0 ; PCC dieresis 222 157 ; -CC Ograve 2 ; PCC O 0 0 ; PCC grave 180 157 ; -CC Ohungarumlaut 2 ; PCC O 0 0 ; PCC hungarumlaut 301 157 ; -CC Omacron 2 ; PCC O 0 0 ; PCC macron 222 157 ; -CC Otilde 2 ; PCC O 0 0 ; PCC tilde 222 157 ; -CC Racute 2 ; PCC R 0 0 ; PCC acute 192 157 ; -CC Rcaron 2 ; PCC R 0 0 ; PCC caron 143 157 ; -CC Sacute 2 ; PCC S 0 0 ; PCC acute 193 157 ; -CC Scaron 2 ; PCC S 0 0 ; PCC caron 162 157 ; -CC Scircumflex 2 ; PCC S 0 0 ; PCC circumflex 161 157 ; -CC Tcaron 2 ; PCC T 0 0 ; PCC caron 139 157 ; -CC Uacute 2 ; PCC U 0 0 ; PCC acute 243 157 ; -CC Ubreve 2 ; PCC U 0 0 ; PCC breve 201 157 ; -CC Ucircumflex 2 ; PCC U 0 0 ; PCC circumflex 201 157 ; -CC Udieresis 2 ; PCC U 0 0 ; PCC dieresis 201 157 ; -CC Ugrave 2 ; PCC U 0 0 ; PCC grave 159 157 ; -CC Uhungarumlaut 2 ; PCC U 0 0 ; PCC hungarumlaut 269 157 ; -CC Umacron 2 ; PCC U 0 0 ; PCC macron 201 157 ; -CC Uring 2 ; PCC U 0 0 ; PCC ring 201 145 ; -CC Utilde 2 ; PCC U 0 0 ; PCC tilde 201 157 ; -CC Wcircumflex 2 ; PCC W 0 0 ; PCC circumflex 311 157 ; -CC Yacute 2 ; PCC Y 0 0 ; PCC acute 213 157 ; -CC Ycircumflex 2 ; PCC Y 0 0 ; PCC circumflex 178 157 ; -CC Ydieresis 2 ; PCC Y 0 0 ; PCC dieresis 178 157 ; -CC Zacute 2 ; PCC Z 0 0 ; PCC acute 170 157 ; -CC Zcaron 2 ; PCC Z 0 0 ; PCC caron 145 157 ; -CC Zdotaccent 2 ; PCC Z 0 0 ; PCC dotaccent 145 157 ; -CC aacute 2 ; PCC a 0 0 ; PCC acute 158 0 ; -CC abreve 2 ; PCC a 0 0 ; PCC breve 121 0 ; -CC acircumflex 2 ; PCC a 0 0 ; PCC circumflex 116 0 ; -CC adieresis 2 ; PCC a 0 0 ; PCC dieresis 107 0 ; -CC agrave 2 ; PCC a 0 0 ; PCC grave 74 0 ; -CC amacron 2 ; PCC a 0 0 ; PCC macron 106 0 ; -CC aring 2 ; PCC a 0 0 ; PCC ring 116 0 ; -CC atilde 2 ; PCC a 0 0 ; PCC tilde 101 0 ; -CC cacute 2 ; PCC c 0 0 ; PCC acute 161 0 ; -CC ccaron 2 ; PCC c 0 0 ; PCC caron 130 0 ; -CC ccircumflex 2 ; PCC c 0 0 ; PCC circumflex 130 0 ; -CC cdotaccent 2 ; PCC c 0 0 ; PCC dotaccent 130 0 ; -CC eacute 2 ; PCC e 0 0 ; PCC acute 154 0 ; -CC ebreve 2 ; PCC e 0 0 ; PCC breve 111 0 ; -CC ecaron 2 ; PCC e 0 0 ; PCC caron 112 0 ; -CC ecircumflex 2 ; PCC e 0 0 ; PCC circumflex 117 0 ; -CC edieresis 2 ; PCC e 0 0 ; PCC dieresis 118 0 ; -CC edotaccent 2 ; PCC e 0 0 ; PCC dotaccent 112 0 ; -CC egrave 2 ; PCC e 0 0 ; PCC grave 69 0 ; -CC emacron 2 ; PCC e 0 0 ; PCC macron 111 0 ; -CC gbreve 2 ; PCC g 0 0 ; PCC breve 126 0 ; -CC gcircumflex 2 ; PCC g 0 0 ; PCC circumflex 125 0 ; -CC gdotaccent 2 ; PCC g 0 0 ; PCC dotaccent 120 0 ; -CC hcircumflex 2 ; PCC h 0 0 ; PCC circumflex 115 193 ; -CC iacute 2 ; PCC dotlessi 0 0 ; PCC acute -13 0 ; -CC ibreve 2 ; PCC dotlessi 0 0 ; PCC breve -56 0 ; -CC icircumflex 2 ; PCC dotlessi 0 0 ; PCC circumflex -56 0 ; -CC idieresis 2 ; PCC dotlessi 0 0 ; PCC dieresis -56 0 ; -CC igrave 2 ; PCC dotlessi 0 0 ; PCC grave -98 0 ; -CC imacron 2 ; PCC dotlessi 0 0 ; PCC macron -56 0 ; -CC itilde 2 ; PCC dotlessi 0 0 ; PCC tilde -56 0 ; -CC lacute 2 ; PCC l 0 0 ; PCC acute -24 193 ; -CC nacute 2 ; PCC n 0 0 ; PCC acute 139 0 ; -CC ncaron 2 ; PCC n 0 0 ; PCC caron 119 0 ; -CC ntilde 2 ; PCC n 0 0 ; PCC tilde 107 0 ; -CC oacute 2 ; PCC o 0 0 ; PCC acute 154 0 ; -CC obreve 2 ; PCC o 0 0 ; PCC breve 111 0 ; -CC ocircumflex 2 ; PCC o 0 0 ; PCC circumflex 111 0 ; -CC odieresis 2 ; PCC o 0 0 ; PCC dieresis 111 0 ; -CC ograve 2 ; PCC o 0 0 ; PCC grave 69 0 ; -CC ohungarumlaut 2 ; PCC o 0 0 ; PCC hungarumlaut 190 0 ; -CC omacron 2 ; PCC o 0 0 ; PCC macron 111 0 ; -CC otilde 2 ; PCC o 0 0 ; PCC tilde 111 0 ; -CC racute 2 ; PCC r 0 0 ; PCC acute 61 0 ; -CC rcaron 2 ; PCC r 0 0 ; PCC caron 6 0 ; -CC sacute 2 ; PCC s 0 0 ; PCC acute 133 0 ; -CC scaron 2 ; PCC s 0 0 ; PCC caron 102 0 ; -CC scircumflex 2 ; PCC s 0 0 ; PCC circumflex 101 0 ; -CC uacute 2 ; PCC u 0 0 ; PCC acute 151 0 ; -CC ubreve 2 ; PCC u 0 0 ; PCC breve 108 0 ; -CC ucircumflex 2 ; PCC u 0 0 ; PCC circumflex 108 0 ; -CC udieresis 2 ; PCC u 0 0 ; PCC dieresis 108 0 ; -CC ugrave 2 ; PCC u 0 0 ; PCC grave 72 0 ; -CC uhungarumlaut 2 ; PCC u 0 0 ; PCC hungarumlaut 167 0 ; -CC umacron 2 ; PCC u 0 0 ; PCC macron 108 0 ; -CC uring 2 ; PCC u 0 0 ; PCC ring 108 0 ; -CC utilde 2 ; PCC u 0 0 ; PCC tilde 108 0 ; -CC wcircumflex 2 ; PCC w 0 0 ; PCC circumflex 198 0 ; -CC yacute 2 ; PCC y 0 0 ; PCC acute 127 0 ; -CC ycircumflex 2 ; PCC y 0 0 ; PCC circumflex 91 0 ; -CC ydieresis 2 ; PCC y 0 0 ; PCC dieresis 91 0 ; -CC zacute 2 ; PCC z 0 0 ; PCC acute 115 0 ; -CC zcaron 2 ; PCC z 0 0 ; PCC caron 85 0 ; -CC zdotaccent 2 ; PCC z 0 0 ; PCC dotaccent 82 0 ; -EndComposites -EndFontMetrics diff --git a/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.pfa b/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.pfa deleted file mode 100644 index 33dcbc980c..0000000000 --- a/src/libs/pdflib/bind/pdflib/data/LuciduxSans-Oblique.pfa +++ /dev/null @@ -1,947 +0,0 @@ -%!PS-AdobeFont-1.1: LuciduxSans-Oblique 000.200 -%%CreationDate: 2000 Mar 04 11:21:33 - -% Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. -% Patents pending. All Rights Reserved. -% Lucidux is a trademark of Bigelow & Holmes Inc. - -% Permission is hereby granted, free of charge, to any person obtaining a -% copy of these Fonts and associated documentation files (the "Font Software"), -% to deal in the Font Software, including without limitation the rights to -% use, copy, merge, publish, distribute, sublicense, and/or sell copies of -% the Font Software, and to permit persons to whom the Font Software is -% furnished to do so, subject to the following conditions: - -% The above copyright, trademark, patent notices and this permission notice -% shall be included in all copies of one or more of the Software. - -% The Font Software may not be modified, alterered, or added to, and in -% particular the designs of glyphs or characters in the Fonts may not be -% modified nor may additional glyphs or characters be added to the Fonts, -% except that composite characters composed of two or more characters in the -% Fonts may be created using the seac (Standard Encoding Accented Character) -% Type 1 operator. - -% THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -% COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BIGELOW & -% HOLMES INC. OR Y&Y, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -% LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR -% CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -% OTHER DEALINGS IN THE FONT SOFTWARE. - -% Except as contained in this notice, the names of Bigelow & Holmes Inc. -% and Y&Y, Inc. shall not be used in advertising or otherwise to promote -% the sale, use or other dealings in this Font Software without prior -% written authorization from the Bigelow & Holmes Inc. and Y&Y, Inc. - -% For further information, contact: -% mailto:support@yandy.com or mailto:design@bigelowandholmes.com -% For other Bigelow & Holmes fonts see http://www.YandY.com - -12 dict begin -/FontInfo 9 dict dup begin - /version (000.200) readonly def - /Notice (Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. All rights reserved.) readonly def - /FullName (Lucidux Sans Oblique) readonly def - /FamilyName (LuciduxSans) readonly def - /Weight (Normal) readonly def - /ItalicAngle -11.3 def - /isFixedPitch false def - /UnderlinePosition -100 def - /UnderlineThickness 50 def -end readonly def -/FontName /LuciduxSans-Oblique def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0.0002 0.001 0 0] readonly def -/Encoding StandardEncoding def -/FontBBox{-114 -211 1095 993}readonly def -/UniqueID 5096732 def -currentdict end -currentfile eexec -8053514D28EC28DA1630165FAB262882D3FD7667933E8516EE9710995B33AD6AFA66AE56E3B4F8 -1A010BA2D16746155E0B46B8233AF9FC6FB5A1DE6E6D7277AEC5CE81679028F3B440619FB93E88 -614EBEE63F9A83374DA4CF45FCBBACEBE22717D34438C9B2E3DC7580F497AC697EA20AC096930F -E90934EA8FFE999902BA55F2149DEADDCBC4CF03F530F526450856BF8F3CE1C247AA6810D725B6 -E4CB0C6B7DC3B7B5FBE22909A1ED01A6BCEFAE9A709DB1D61BF8A223420C27BC28535F3C5C58CE -BD7239771F455E727EB9C9025F7B0B98D9C49F8A33E8C9A67A30CBC40719B9902A42978F54386A -B019C6EED778074F809506075C7CF394AFF792A52C36CC8FCE79BAABF945F6AB3AE924FBF89F12 -D0D56822E09D7226051E5235D975B5A7E02610477A9B9148DA4E93861FF37C54BBB2F3196A5A37 -94CC7C8B06CB9817A184DD7B41CF130CA812FD511CC539DA6AE1E3D8D57C26DC2630D87CA276CB -0B55BEC3BB4626608A4DE50E3CBF313230AFAA9E86F83366003B63876ED7072ADF068B03629105 -DE8544254F4129096C4FCB741029ED5BA6CB35A252101753C6C281596F941C8920384006DC05B0 -7524CE87D7417B91C09BBEB93B101B235AB55AA83002BBEB2985F027DFBBC44788AEDC34EF62DC -2A09A392092F1A50F78EA5581DFC60B398AC14788E3B34B0668E36052A5CEE9B99194450D5EF58 -09CE4A135E0748A0B303CE38670BF1259F07723DE12F4CD22AF12BD694E18ED00771D33F9526DA -174BDF8B8A436D9393EBE156CCA73F0BF8918F0B38391DFF01B58AAEB19CDC034A8AF404241B38 -76EF2BA5BCA0B558529249379A42CF8760EEA3940C75D8BB8E8B73F93AF59AD85BCA1CBAD644AE -A6250A5D31A85622C0679181F4C77750A5B677F9E8E15DE7BF691BEE2D69968CA11564E06C0329 -26537AC3FABA055613A724B3963FE5D55CE9ACA3CB3B60A441545B5A0FC5997997B5A3F0E1278B -22BD9261203FF2843678148A6F35DAFD8A84FB0A31C02D199BE33C6D5028BA15BCD58A16B4A2EA -B46183B6C91682BF4D8FD64F91D8EE0AB4BE4C2F3B6563ECDD4EEC06069E63D1DB4C0444C4FADB -70C16B6C29BB621E1F5F55405E90D965A6AB5870C30A02BF977C49062B104C6D9F9E4B1B1B1FE4 -E4A19F5B2B36DDD1B9015B2BDF27CC38376393DFA5610A2AA765ED36F113A7F8534AE0ABFCEA93 -DCD5BC0C00B77742E6B92C88CD296CE78F6DDDF463FADF15D59F986035CAD7998191B9002D536F -D1578FA40E4B18D23164AFFD6C91D7B636497C86F743D14AB370FA25BFE68047223B3890AE5348 -BBD1A35D5B80579A6C1754EF5FC435A2D3F2131FC63525294329133007E8A2FDF8C3CCBB235577 -F0B8A91BDEB2648A833F63382FDB32E2E646CFF228F1F326F51E086D3023FFFC9185C666BF727C -4AD617741FF3DF6B205D21D7C2AA1616421AC49E94FF2F1A04A33ED9A13218C10650FCF75865E0 -CB7F08D250D3511E22D34E28DEFD4A44FBC573C888C769600053C088DA2D643AD043C4339F7581 -A38D4CDA6DC5005E90251D38F1FBA1AC10C679894D096C7572DE0E6CE0B8B3C8281DEC22BF337C -9D8ACC39B5A5030FC54E46C779AEF20DCA8926C5FE6422DB9AA089113A3E001A97E8762B68D7BE -E7E9AABC8F098161B076C10A9D560F9094A41114F56746C6ABB9E9F3454CDCE50669B0AB11F795 -1E928CA3A37EFEFCFF97D42127A373A35CC54D054150ACC4851969E4C848EF44B9B2C2F314DA9A -C684A09C35569DB4D0CEF7511AE719DEB3181C47E7F95FECB8BC2A1F8301350D7384E67B7EEAB7 -6EDAD4C361E8910F3A4538B0528E8E2338267506B8BAB757C203D9F96B01AA67534BBC736D108C -376EB8500E121768BFA217A6D0EB02DF688E9F664B4F15FD5CEAF0EF820B15AEFF20C18103865F -2C0457C39EA7F37FC5B1F02B45B85B91AFD59E3ACCF6392845FD5F0D197AE0DA7D2B992542CF20 -72AF36CD6DAF3E96E5B56F28F072D844A0114B35FCA75ED7B2ACFA9C71093A78ED1F749120C4AF -661B8D6CF18F054C459A8B939B30A6D72E9349794436167F048723E1E18A04E6DF65584DB34B89 -8313151E9E59E504B5EC388EE6B744F5D7E037BD99275D7DFA5D2ECFE2538B49B315B3A6994326 -8FE326CEB209E407BD9801C65321F3180E00DFA768DD7733EBBB5BD1FE14A96A1B86F5D7DBEF3A -EDAE880D7CFA4890E330A131C9B32E5EF275776B6E458ACAD52467570309F73B4E6BF16A18FE88 -DD79CFA7CB98E02F92AD7431B0474178BFE342DD6022BB7FA6443C7D8054D5CBB1055F515686A3 -2CF31102B435C4ADBE6D72CE5F5103FBABEE30CDC37580CCDB54DE8FB3CA1E43562D73B29788B8 -E1F3350F82DF5039C8E06D3B2191A750DF0AB9D2922A0DB6B4673E5226422BD81B58C058E5581F -A8E17C9935BEEAD10D3EC338BF825502700FF94619611955A6D7DDF55AAAE6B1EF2F9EDA1E7EDC -7D5B11B2771D03382A2594D9A08DDF522FBB8ED5183BDAD992530639F351586FDF24C4B9D9037E -8B97E36502F7DACB52E4C4602F5224BF8C1FC37908EA64FC8A2A5F05902E4B8BEFBCFBDE971A8F -82A99BDCCC29CE2677B832D08493D5463B13B25829BBD265201808D7412CB41A6B3CE3461CF737 -463EB19D3FCC05507A71AD250537CC05458FDB7ACDA9343892F3B27E215C572FB42D8AA9F4300A -1C282AB7F83BB28FBD134716EE09BE26488306488CD8E869647493156D540B90C2288FF1F359D9 -9685CB6EFEDAA78FD29F1302C67E97B01B8DAF5E6D77E16885460294F195C390B3D6ACEF2383DA -E3E4FFE6BA911C50F27B3AC9508F44327AB89DA58965079F3719EFC76B159B68328BDB139C1104 -54D7601E22D7E5EA501F805C5BF4FBA3EA051152EDEEDF0CC05D7C6765F194C5AEACD110816D94 -C6B30E978E4B07202AD3F748411BAF9200376B2FF1926255BA38A461A127FA8AC8C9B8BC3B4F83 -8A48515191B4A8C228FCB7680EA09D1EB9A482C1FCF5FB9320C3FCD37388EDE07099D0254F33BB -AE55EED41766B96278B46DF7CBECFA52D0DF759EE64C1CF9ADD80521CDDD11B8F137C40F0EF319 -632D5FAC752ECC0A398DAE6130B3E01AEA8D6804A7F2BCF6844A5E74398E626003FB64BD0F1B2E -99E3657FE6DCFD80B2F469D92EF076BACFAF61E14DF817C5E24EBD1CF9F1C0B4583F287E9E2FBB -048A2A00023514E4920F46289E4185C539C27D80F459B32D5EB2D43275C91CD09989731F423E33 -5263CF83F2215DD6649A39824DB3B89350CEE31C6C07D04C9B679DA07A78793A4CA3B75F7E31B9 -901C4379B103187BD1FCB473A327E9FCC7D45C9AC6F6EFB2DAD1817CA2F8976550116F9C3B6471 -CF39F1843F07E168303EE34EA83A84E3EDCD145B453856AD21FEEB480649CE489A42A3116115BD -BDE85F9F801D59AA8DDAE8603A6F778785C47E41FD3535F867A0C6EA2601492A64EFAC053E529A -5D1A77FF58F784050BFF66694145C44603100D079BD633A0F90200A14D92B717D58D639C5E119E -479C0B92DD6058791715D07F21646CDA08D5EF31E7F9D5722A48DCF8451B9C969254651801358A -A13244B9BF93E4B1B4C952574A1548E8C0A49B57F471F4C5093FFCAAE3DDD38E80C33A101BF195 -241E673F671438EC54DECBD006B6C9E3DB67C4B5AB05B9162900CD66F19B0EB3BF559B48D50F8D -CA100F63FE834A93AC0F9A0BAD4245E947CD848FA3277E24CADC2C477B2EEA0B2A339F0E7CF450 -CA0EF79D3A6C28598825E03FE55B4180A2494E097391D4D910ABDBFB2237275CC30606EC425B20 -472A229E8C778235A0DF2A002DA99A5DF4E83AC2816AE5229BAADEE4723AABEDF48C57017EF06C -8F1C4113C3C0B584453C96CC454835159E34F00B6FBECB94A79D21425D14506D23D0A918770BEE -69D60EF872BD5799A51149D875A8D6FFBA73830C4A5E0BC8D8CE28E72E9BCF3B32CC864A12E44B -1E8B9934BA0D2EF9DECA37431E542E0861CC85C8A7974440965995E0F773506FB7936F6613F023 -251C315267899ED6879FE1FD27C90E2579B4517B379DE6B9219FE84842D7206C6614C18722D6AB -5665B9E4294E178D8A141A3CA7F3413D922B4EFC6AC99F84870CD1655154E04E3C78DAB918F951 -5565D481F38DF8795940603CA0CBDE93F5455BB10DC043CF37342C03778F47ACA9BD2BA8502591 -9DB8199EC26FD75901809188CA821F99194480A7C3670D8B0B89C65A9D9FA372C6FD56075C3072 -E27B9ADFFBAFE39E646FC526DDEA73EB9B18E8A9D92D087A21A86C48DED12B0E11B9D04E1C1016 -9F2D1BF2E6E6AF8CD15028D54087DF5322503C931538C0E56BCA5CEBEAE300CD44C285EEBB5508 -7500BCD00B7DEC624F1758DA5E1D9AC0B7C3DBE5E8F1A7F87CBAE422D63E267FB7245736EB76DF -F82B54B156921AA5D31044CB1A2E88C1D0B108C4512543C2D8F001A104E2BE729B0AF4864F32A9 -2FB8385A1005753F545DC69D66B1ED980B9AEB13B3A0921BB13EFC532152C2A258D88ED3DA9B15 -2901A965A8108FF88B834DFBA4D80CA96148BDB3E13C037515872718FB22FEB61999671C1DFDFA -0AD97032B8E4CE1B3ADEFB01C6327AD2C492EC3B7439ED80E6BC296888225511FEBE1F165411E1 -A18FF41C2363D1538BB9CEF5DD7667BE52A28BAB7D4D8AE6823CCE5FCFD6284D4AC21B42B5F42E -81ED445D914F558CADF62907E1C37EC0AED73FA6DCC88529E6379C30B9B61C2E72CFF7CD919C08 -B81C924A65EDB08776E3762A109DA8B55B5F89C30A2AA4335EF6D5B6FC91F5BB9031F529EF6250 -08AF9BD044416428349CE319F1E98BBDF46C95628DF86B62F0385DDB5288D3BA3AA48DBFB0A726 -3BD3CBD87A75B52E2FA4E6E74BE7E335888EEE6EC40005B39C758A4E06FF9BCCF75ED94D643948 -B04691E7C46286D7D611A238A07ACD1FFC9F742F9DE1F570C8EDD01C6C3C03A1EE45E0783AD514 -BC071640BDB313C33D1BB81D4C8B59B4437B58BDFFEA478464E828F4DED42C55C9DC3C27C8A867 -BD8E754069FC1DECD51E5B3FAA42B39B429DACE417AA2BDDC825D2AF88D08BA85A54B65B96F15F -8594B13E09526BF8AB8A674DACBDCF1984739CFC1DD40BC2F64B1A4F7AADF93891FC191896A6AA -CD01598F655BF7BF4B681832A5E08EF9FB17A505AFF213A3D2CD5C4CF2DFB6861BC85CED1BEA11 -9C3715324857B8604F941543B85D97E52801CC4ABB95649CA733E6C393F480E0A16963A2CB3801 -37215CE5802D673337E6308D46F8AE275E26F19746CB319D3E4340AE879DBB7FC553DAEC61C4AA -56DEAFFDEFD42FA1DC5C45C28FD9F66E5D6F00489D53A3367BCAE8A81286E3A89F6091B43C245D -F6C7B6F9C35C47D639FDD264DD716603D8B3BABEF8785AC4F0740C6FB7EABC7BAE61A4517C1BF6 -F69DBF9F009500E576409BB69A4853CFBC72438829B86D6276DA9A6A0EB1F1711F730638DA6B91 -8A381890FC8EAD040297C85BD0307A62CC45A5BE691D1D258CB9F9BB776A32DC6F3624E9C897B2 -3FB5215AE222438504ED14C1553662AF4EEC414B8DD564DD78F713B1470750E5D143A0CD8475C9 -C85DE3AA5B8D06A527BA8100FD346D7B091FF5B4242099BBD680C7F4378BA86D70CF9AF604A812 -E51B64E0A6F26A3E278B58C67B5A49AD185BCE7EBD99597DF1BB5C0522EA51701D654DB5E2C657 -62EC461A245CB956B0B18FD09BDB2CB0617EC2D89EC932CC5F989938DFDE6487C29CD8308FB3A6 -4149590DC7AAFA3C9A79AC31B80152B8D49CECEB7FCBD28FDB98001E95D3C5AA65D63A3F2CD4F9 -A7EA2D5BB4D820D4C0A0ED49AB0643574ADA5276A9E6DD59B019C49B17EBB7DE7F2B400C54C852 -374DAA0539F683C3D684775CDE0EC09485B60FF2122A0EA168B4528253FD3EED1C9FBAF78B0D7F -1F1C6B509E3D8ECDA6D2E92C963319808EA7B268A3C37FAE564C84C78B450E67B2B69441051380 -D5AC704BDEE2EBE93D29E32B574A622FF6610DA773CA34210CF5D835BCB2BF121877D69B1ECB56 -3D694DA5995CF3F9C8CB525CFABF344D638EA8475790A055AFF046A32A8EC2691606B0F00141B2 -ADF78382AE4B6A7A16378D1AEA1B35C92E4DBA9183157A8F7AE96E7267E220315B3A00F204C235 -4C3350AD42833115AA3B783FEDD36D660165E7758F11D99EA3E8F0306F8989EE3ADCC5FB561381 -AB45CA683B78A35AD3BACA299770505F33E815BCBD0F513F5E7EA12A8782749142F94BA886B521 -64EDCB12EBF6DFB715C485D7A25AC051F71BF026D71D428320AD284CFCCF833756988279C2249F -F4E2282520CDC423376238BB57A4C6A7E29CEDAFEDF2F224F69FFD6B291664C898BC5F049DEDCE -4BB359CAE6F055E2A8160D24A96AB6E1CA0AD93FB80D95F7AB5083DA60336AF05A6DB33EA47651 -28F7273D09B3F0501E89CA21BD8E0A87FEA3BB92BAC38134100071BD46AA4B164472DD6EFFC697 -4C3C52B0B5D1849E1196D0D4B159FC4F7177D2DCF985BC6629DDDD1876EF83F522EFB7A4A7BD98 -98E439122195523E1825120A209F1D4DE2FEE3B9110AECE61ED044A1B0981ADEB82AF59B6B8FE7 -88B4DD6600098A4780914AD5BBF6CF66B53B642B0D57C4929BA0912888E995411C20A7F52E05E4 -BF3A2D7847ECE17DE0D6ACD79379988B2115B2469E39C24CE54A9D31114184F9865C07D707A2CB -14A2F45B62A19C5E3ADFC090F2F53C97458EDF8EBE0D23A1680CBE18AA90B694153E8E9A805E77 -B878C9CDE4D6D4532B6C1BAD4A42F7BB1EE748BAE521686B11A18B9FB97D10229997B718EFAF6E -EB3C223059083F3143E57DF2990229FEFCC5E91600CB3DC2602703F8256C663FF753B636475B05 -ECA220FF5D9897A3080C38440DC9C0095D3ADFB49C24E3B4CAAC89F5E4FB2527B54ECD34B4F094 -4D3C39657DF53FBB696C352E5AD9EA245BB4D61018E34154916DA4C227B2BC55034C67F373E65A -A4F3A9838DEF143CBA0409DE99206E3D31DF19AE24189613B4B11B47359966B72624A83D88A897 -696E2CED831E895A4C9337DFE19483AA3F967E2A483149EFB53B53791078B06E43DC859F84F35A -9201DD09588E695C707169258B18C7E8A72AD464786E9188E017125642D9D56427F18C8622426E -4144451E56108E615EE15A26419F0AB0AF19EDE2988C982BEBBCC99506EB5D9D2D22940E3CB28F -EECBCF8AF67F81F196D53462FAC860FA0076A902A785AC346A2DCD064294CE87602F3791D3E178 -88A5167DBB5FFF6DA15F221C47C50851FA7D81B7AFB2F7B8AE72566EA5EC5CDBE149CA15E1E07D -43F42497A7CCE6E2FB21168960446F31071F5F101BAEA8A1687ABE5BB00F564CFDC8A41D04826A -BDB6DDBAF8F02413F1E5E40446A74F64D287A16A70A305B38C5D58C40C80B2646CB7B9A8440715 -EA1A1496E10B1EC58357B6296548635A5709724B0858D0E56F1778590FA592DA34B0F5085BF1AB -F06B5B31C7C1119CF65D17106A5A657C737D1A3289F74DD8258BEB910EA530E1406CE6D0E78589 -BFD383BC20EDA6FF09D8DF2B9232053C4DD8A43D659BD28FEE42E451C14C5BC39C3689B1225869 -724668393B0D1917A4F85F9171054D30F6E77B8210CEE239F6E72D55463AF4729DAE9DCF007371 -6BB69BB5C57EEADCEE8387E600A7F9DBB36A25FB3B31E78E03019A19B8470ABF9691F2158B6CD0 -1A834164ACD7E6BB471C88E31A3A3EE5FD793EC2B66B459DB7643AF4E99A683B7CF84644F3149C -1D9108C93CF41A60696DCE71C0B9D0DB1DEEEFD812ECFC40CAB9E970FA0262D2428C515377043B -C9111E2972EB943FDFBE04ACDF77259A2E16A11BF14223871B00DCAA88CA0E43E4CFB615395FA5 -130AE496BC9F039055520187A5A03A491760CA2F755C7E8A9237A9FF40A3E10837B4A6C5731542 -9BDB0A55A29059D73AB0A7C12FC31267185279AE9DBC0DBFB0E431CF2A094C4B5EFFE835D627DA -FBED6C6F1E4993912FEF954036AD8F1554376369DC38C61AA9DA8E02233552BD769B3036992B47 -F3387D09F9AA1980C5312999899E4A4EF3C7BF90C8579C883D7B0BA2242E40F9A95501614B241C -4ECA8CB31071EC6EB6CEBBB917A0FCD3B12ADD6046AF3790668D9AEE87DAB0160F37DDB2230DD6 -51BB701E72A9B05A998516EE6F506B3504AF675A9DECF7A3719B16253F94B1A0D873582A61471F -B0F9CA6B9A4143DA90C60FA53F2D6C741F4D15E26AD2BAC61DFC0817EAF480D67F16D4A88183C6 -EEE75732772FCB0B31D149E2082AB91E9F2FD4C4569EC5FC46F1754E0C1E0A4EA3EEAF7A871DCD -9B05FA45A170D3052D1734A38F56B7D3F835CB8D375E7772B389AC5B924CCE960EE53019BF1322 -4918E1672C65D14331F32FFC0189762EF3EE777D0BFE48D5AB94B498D097D79ABD0FCF53A1402C -A94FFCDAE7FF694A99718B8111EA52CBD0A5F228A393852B2F9A1BB5AE74C39AAF9B8260FA6255 -A2946815E5AC55075074CC2BF6E3BF30F6B9477E6F162114485F80F8F271FB3100B5A6851AA333 -8B9FD55C62632BF3ED4ECDE95D8C291AF0B4E0C04766C061295095C3F157047A0A6CBB8B83D220 -623E2F28C8D1068C751C8C0EBDB1B0C92EF2E410EBF3DF9CA11624D481BA44C5B46424EA8F5E1F -EE45A6157DB420DD1168C77218A55BE868AF011AD844592BAF82CACF37A614AA4173C2BEE42D07 -1D21C2C136171CE5E3AF793BBDFB8F4DD613DABEAA00127156A60BFA49616EB454018FD2226DBC -1C31398BE17A926E67C3A9B51E54CC1BA91579AC3F36FA1C90C0497AE6BCC1FB9AC399BA49F855 -DFA95D303DF17D7578227087FEA07E4833EAB50170E4B2E1964F3227D69921887A462AA939F118 -2AF3310257B9DCB70AA063AF79E8D70D3EB52099A4D5B17F90F4D8D465EEED09BD4EC53811491A -9AE9A2648679CD4551FB68F7A8A32AE41B5C1C4BD79E0E538BFC58F4468FFB81B5341BE9AB45EB -05148D080B74CFB0E4F290A2E9A8B165DE52999A107608596F6DB9198545B252EC068C0330E1E5 -C9A613380C9421107EFA5BC4A65688143FD0C13165E2FC77705F1890E423C00BFA8C01AEBB6CF8 -094762D8E14CB390E63673FF5CFA983DEB170021104CD0A01407C0C4E4C3CDE146D749202B3DE7 -2FA97DAE1F89C28000727A7A7735DEFACBD19BEB8B34E63F0AF0D64F7F7A3CF3D8B579A69FD70B -449E677ACB9C2059A4B800AF36B03224F0729CE60C4DAAA4312AF1144932BAA474164C09377913 -57E38ED1F81403D3D70E87AC620E404B67D176EA3FC388F0996D29E558518F321EF9E48C0B58C9 -D5EA596C020A2283AB53240B58CFB2F3A1CF9203DA24BC43D8D41AB27248A5FD3F1DF2D9C25AC2 -2BE2FDC79C3C9688AAC025E2ED0E2FDCAE9C01F5E93892E7DCEA21FC6A75C3B33B0150C3E5EA36 -A8BB9598297550155B6F7947218F41CACCD3BE58AFA2329EAFB9E21AD9A143B97218D0FC606897 -301D358A70705F155525572CDBC419518271ECC052EBA5A9BC514AAEDB63C164306A63731C21A8 -499F2290DC24D81A4E461B7452FDC0E2ABDC89A7D98EE00ADC4DF87A3767A07948308EC40C3418 -FAA51ED4BB717794472D2F0D9D4B20C8801FA37B8E595946A2331A30A2464275AE3AC8EFAD8A22 -7CAB2C93E118D5B06D8A71C290887CF7ED7AF4601B54B3F1F6E0CA5C540768B44B64E6E7E58F8E -3FC5DBFF8BDD0B4A34A35589F8A4E85A46B3C6598D93666996D984E076F97A532D5FAA6C676502 -86979E208B03E95BF39B57DCBD25F21D325A2A6830F88476F9B8245FAB4BB958C9DEA3ABADF877 -6F4E8B710E2A8A34E8EDCF51F7BDBEFDA7536EC603C6EC7787AB070E4A1E347CD2A8A71B2E51B9 -EC40844FFABBF21DDE78FFB26E77F71D67D00E54E1C2D4C93C400BCAF2F420F728870C613A3095 -66E2CD17671EB9D17328C888543D2B07BE7B3673C3CA3BE4575EFCE4C41CDAEA9DE3FC724147A7 -62B48566F9904C89F56F21416C7D06BB2C4388E8AC2EE8405FC8699CE296ECCA953AC57A563FAD -DC3CD09320AEA8141A5B8D40B7E36589E15C903FD3AA21A879216CDCDDF7A6A380C66977DB988E -571805923D17A42138474486AD92D40E1DD87155F86189675A26686CA3237B74BBFE82F501E03B -4C6926E604E58ED619EB2DF4C6489A26C4D45E56C2433BCBF66401994AB0EA8DAA93FC93ADEA8C -C03838F50C47A343DBBD8EBAC78E2FE61369D79657EFEA08521DC8F24105495E10C45C24293712 -32EF31B24C63EAACC85C59864325429BF906E90C027C0C2AA5093B92FF293BBB45F4FF8711F81E -361DA2198EEA0BC761CD8C0D9D3032D0ED03AE529072FDB7120F8C8704FDD41FE4E35FE20AB947 -F25C83AA2A2B1893A2A1C1904C94B524F03F0645526B886D116848B9032B76707F46C65678EC17 -D83965BC5564ECAB2674F38AB2A7BCD544E6BADFA39BC5DDD8E0776FA466D923FA75DE28F8187A -63CE60F1B96CB9681FEEF4C432FD75A1B7A753112D79C9521262D9199AA1151475BA5C95E8A272 -34DD27F6CB2CA3D7F36457A0E16FAACBF59807672C8A08E498182755754A6722853AC9C5EC246B -153F5879BC910AC2647B9517EC12307FFE30997DC2A96B6742F4C3E7A2978FE29A4DF5D19B8B97 -06ED7379EA6096D13B7C69BCFAC8D00101BF38FD6712F348A6D82E7E7DA0A6D551F4AAD036FFE4 -FE558161270ECA320FEE2CA914CB22470275484F10D9EB1CE7782E5336729729009804B7FA5227 -E301E841608090F109929B395894907E410F8088FE16E61D820206E5852A06E52F0487A1867719 -EE4182F57FEFAED44FF16C5D07F8050CF36232368BE568360E8E5E36B0A389812C4C38D6E06599 -B394023C5AC862F10418D45B897535242EA4B85C0B39889CCB51350244F360A7C15FE9BE8D4FEA -4DCBD99DCA136E4AC27A6232B0E4051CA30E28D7334FA443CEDEEA4D9D1E47106667C6129E40E6 -8E033D54E8B41FD0B8C7297B92C641D4F31C4E8D4884590678A90BBDA4A0550A7A6608313221C9 -E23D40886A154FC3B81882E2E2A239B4051D78FE495F336BC1B157EEDB434B31CAFBB9A14D008E -DE727F5949F4EB5FC2104DAED0D1A48113172099A72D05AE12771006FB8CFE05B2368B9B42CB21 -EF2C18F61A8C4379E8C37C5CA661E79C8DE56AB6DA4A6364150FA27A2F94E56713C674F30C0EBF -F9B725B754688D2E8EDABD5A4E0C8595BE5BFF2313BD5B53DF71282C6C2EBF49AFA6004AF2CA21 -577C3F1CC44FF3C2B4025D914D943759060B1106E062957CD43E01AFA864140B0002ABE6A325ED -10385B3AA72C49C77EA067401C7F155F282B96397B84E0E6DD4E28480F4D09C1396E51DF7ACA92 -C47732C752BB28DBF2FE284A689FA6EF092A0B8FDE8253023D0C3A2F9437B57C6082CC5C88E6DA -831A0DFC932A009FF4ED36DC187562EDCE833EB70F3E128F918DDA9089B521AB1215ED6AD8328B -3371C660AA42EA386345169CC9936C74EC5B9442F34E43E0A6648C61DBC00A6595F4F27F3E59D7 -2123B7F84D4496F80BA60C3FD3B6DB97821E11DE92918F74DCD48CABE3A5F4BB20606B7232D1B2 -3C86ABE6DF561F496F45BA03EC89A84585CBD62E0E3C1E33ECB2B2EC80BE4F65958EBCFE42BB29 -43B6E396560BADAD5DF6E3DC4CF1222AC2E339A9A861DC8B4A85449918A5BB7C3E0A449F392B42 -192DF15A0C9F0DE2843DD0BA26FD8162734FBA4DAB878F29639B95E58CA740C33B618293908388 -2530C11416F949D4D1E78D5A61549A21AA6C038FD4AA8EA1F65FD68AFBF9BCB4797512CCE43C69 -0650A8648F2E84922B34A064A44060E9010C6CB700AFDCF765F16A76677A4D60A4A4D3BF23DB87 -C411A480F2FEBDB08B45582B4F15B486225512D4A0123126B79996FB409D9A1C2CAD9C4DCC0E26 -2F20B16D218A03C053FC84A52548AA808B278355E897B0418CC7710762163A97F5291D6F4C2DA6 -220D6A4A18F7970326BEAA3B11CDC64203330B73DB774EEFDEC7C5894525328817AE98EC67D06C -E232D3213BFE16CEA3B41AA69A8F573A69EBDBE40BEC1E25A83B89378643F8CF5BAE906389A403 -B8BB2A2A073EB58E4676C55E9BCE21DA1055E61D89AFF8E5286F80C97BBEE472D1337A9FAF0900 -576407AC06AF4E2D2F78E262CD203EB3094280A5F406B261C8F481B59F8833A0D0EB6B125EB7E5 -206E2C89A35B35964E52D0B3DBDAE7008F0C299C0498DD84149AFFAA9A3377144FC90ED52C6AB6 -E2544ADC6CC58B73F3898F7D0DA5FDCC54D9E676AA747894991038A5CF2AA4F65BFBAAE4D32C82 -1A21C5B284FB37D3DE45C2C92B29C8A3C911B01915586D8C4D57C5C6A0F1BA3E9D436B523D4D00 -C0CCD3E7EEC13736EF20E744E1ABE9AEABD32931DAD3DD2BC88388105C65C211C7F853A1C90BE6 -51645E4C9793B0F95C1FFCD3BEE11994F3C05D444D8C2511A0D5468457D2F4E749A5927E59EC9F -85F69D5057956FD0B70D69DBAD0E8DBAC7EC1410262929F7C53D316333375F23E6B686DDDF2AF8 -7BBC56729714372E5D5B04E8BAD8011718211293A3402CA94AD423362745028B8BCEED09670183 -7A47BA659CB282CF51403ED3E74EBB6D51A79C6951EDF9C65828A0F360D402A8593CD484EC2AFA -E543288B28E89ACF7070679F4DD79E2C98E81D06A2EC6FA93F4DD34DDC143B56F5734AC27B3F3B -FC696BEDCEA113F035249AF11C9BB38A891384E7F4ABDFA8B7F9F9EFB9CD5C7CCE4FB2CBCD1624 -20D265BF6D62C8318043E37FCE4EB54EFDC6B0AC22C86BBC2E1C3F8A179BA736ABCA0686CCF489 -1EB7B9F6073791F7DFE3A4EBB89C17EFB81459573F62AEBCE3751D7C2FFF6F8BB1F846649F1706 -F06CB4078914BA7A03D9A2F3184960D6F7D0D15283267BAB1D3A85C6743F57B2372958BEEFDFC7 -088224A09298E43ABA58DD5F7E181B3055759734BFBCE114B8D10C104CC9AD471251A993709571 -27E120FD7CC83381C321E1B607FE7EDA1D7BCC0420E04921B3E14FD0774987A6277C5C9E94BF06 -3BF0AACF88D14438067509DC123972A3C63545D7D8A23EA7CA721A3BB7611B42439949C537369E -B5706C4DF7ABB673A5319FCD42C4EA0B876A158E476DBE914F129FF88C1FDC6FD9C81EE073DB7D -81AE7EB717CC78420C08693C0ADFF3D5A6B2580FB03FAEE2B28B68368F05DA7E6164C0356D81A1 -736118C656798D2A59B931D337B36983851B846848A1AB2F18717A1BA02B5F86559FD693CD965E -B4F334FEF23B3C7F64CB1BBE86ED595695CB11AF4F32C26046059E4DCDD149EF2E47D81147F375 -A8432FA727386BC5D5D509711A258920F163FA24A7C7B936BF6F78DFB85FF1731670885DA6E7CF -92C36B13416CB099DFA12775332013B5EC11A4B1884E458EC62BA2D313625380E875653529BD18 -046C1C6C4BFA4885484497174F0C73DBF92B1921130F4398B76B6F5495725E33E930B677D6A60E -E388F5699F5347ED8B520F6AB9B71A9F417BDA923EA6FAD6298D253BD55DD27806A53E926604F6 -5E51E217DE1A3F57DE33B9CC678CF0590590D174F6822236FBEC7234BE06F07F886B408684CC84 -AEAA429AC7240BBAFE45121F40D01938AF2C5D247CD696255FEABD9159256F51689B339A7843ED -1763FF2B357E5ED39FE9E3053A74C588181C15694F0CA77FD721CE0AF61D68B8CE913124888383 -E51F4795874CFEE6C13B30415D4AA6377BB37DB5E2654E745D483B6FAEDAC975DB56CFEDAC6264 -C935D83D0372DA2B98B84CAB5450AE2335E409EB7E210451DE1FE08FC78CAC720B6FEE56BB6DFB -5B3D83EF2092E890CEF54412FA3AF3F92AE24CF4E53F2CA48429A7EE2DDC34EACACB484CF02116 -3B303B38546D9799FFB37B0D5F9394108F518AC824FEAA68DAC5B5159DFBD469996F80F1DC41DE -5AB6ED10D3FED9A298F39483052311BC6E7CADCE546AD8E65820DE1F47AF5882E9F035ED64C3A5 -F1368E1AE38DCBD80F4AFE0DC427BDC881110A292A023D8922745EE3FEEB057048CDE275AC0E17 -1681A3FFA7264AED9BA03E3FE3DF81A463FE2AE5B362BC89920FB6A6A6FF1CEB9F24E61B3D0219 -6FF0F2837326DA8F943AAD0317F68B7B3F81457785FAC57F882CAD078CC502D2AFCF64260EF779 -461D622A117E5DA766F2FCC7033B87717628451992EA4158A16FA3C889226B2FC0540C220BB480 -FA2AE0170E69C8FE97AB89AF3A5C7A0A398F34F2FFCB20A56A1D691A303A84AE09FF399497E638 -4E8EB6FDF67D941B424C84C58B9B5FCA6484370467F6F0DDD5B407156F6A41422CEC15FF38BC87 -7264D0558AB3A84F3B92FAE804D9F15FCA39F4ADD22821E636F01C3F25C3DAAF48DBC646428CFB -A690373961CEFCBDF1E747A735716FCA30AA72F3776F279E8CD6D223FF9A3C133CE93AE7B4D901 -61F1B2589F51E33387558D96ED493599554BCD3124D9F9E4F85076636862E3FA9E9C33704C0716 -684E2315AAB19CA54CD8774EAF4542CA2AC861C186A9660BD1FF972B341B825A7CE829970EC32E -646DAE9103E1AD2F337E880D3149000B1A4C3703EBA589B9D6324AB5AEDEF54102057226F43BDC -BD4C2542596218F50F3D9B8BD86241060E55385CF40CD1BB32D3361573B645D09840CAAA9F692A -5802D4E6863B23EB526834FB9FEC4C8BECE83B1DDDAF0E78EF6CB5691A83C2F45D62CD2D7BFED1 -6B6B1844942E43E7473305BF88551F0AB7B4DAADEB544E5344D77D7FD76190FB008CDF09D762C3 -E67C3796B1906E2F16A2F6EA46E0E266520D823B36F5D30B834C75E2A58C97B26B07A912F30B48 -9C8DD9BED4A4C76A9C4CC099AE2524D1B760CA6A1047CA8CF682CE6E6D7532E132477DAFA145FA -B571DFA8D9690C87FC9F7BAD55ED0FBD266E3C3CF618D94D2F0796C1AC2E86CD06C8C671A2528C -B5331C751DF60166841FC61A2D498FCA1DB077C8AB3FEF45F3C918A062DCBB3FF10199B62FACDE -9F6D7633603B3A4DE267D013A8C6FAA0EFCDCDD7EC38A82E9EEB177CB1AFF3A22B590B9F2F00EF -B44B5AA6E1A912181DE1F5E0BB6253F63D47FE9F9E6CBC3B4E7E5AD767841B7FF40FE9433651A2 -9B70ECC43C193A34CC5271BFF7682F5431B32E10B60F8F776168EDF198734846E93308502962F1 -7895AC2A253D367C4FC280EF45CFB287DB362CA5DD712342F7BC1DBC91E3F014F6C9CBE60757A4 -BDA19A16792D98BEDEC85C5DEBF5FEF45C1ED6A9529F0C071ABBE824293650959BE5446B21A23D -76FD9575729A7248BFC08A07505D539DCDC7E946D96130EB592DC2C5B0BC669EEFE149BD07741A -C388859D10337E07E3FB75132BA943BA0495834E297FBA2AAA671E4507FAC24823234FC0CDD166 -49C5577465675958A863B64683DE16F205F3FD5C00258D590B1A4832B094632DB6EF8C2829F753 -918516633859AF29552DB3E6D1F74F5AB15BA7216F900D3A708317B971375D11D4F4F9BC831299 -2E751FD31D0DADA44B0CB303C6AF3B3A6090B55CCA087DD0F4A16B25CC2B1E249C4F08622AB6E9 -D16B938DAE0E57E441151DE90FE40A7DC4DEDB300C99E967FAD2A1808A4DE6B106F743DAD775D3 -0BEDAA3C9D18A93F5024BB89887D373771EBFE8CB04AF4BB0B17B3CE4208D401E1BAC23F36241B -4166BF66F2A7CE59A240396FE8D6F37EAF30E1482639ABAE1FA3B05A9F1A915BEBCAD0C39EA72E -7FDA4326F02649B5765ABAA6136A53E96224E5320D8FD9CDB0C354EB729FD37302078E4418AC5C -CF29DF19A686C7031AC6BB28AB99608F3D92FEEE1D795E444B819624FE3BA235C6116118A7BBE2 -D3FCA93D01096D8B39186FA74D112B2E9548D3F08909F19F34872AB08075A3586E9674627E2DE2 -80D2358F2D4A39919FD4359E3F3016293B5EC420AAD2EED0DA0621C1F4F67FEDBCB3F52D2475BC -697F9637655DE73D38D37DD7BEFA8FFB241D41009B0CF30E8F749BAB37DA0E8A21873647ADB342 -C2D34B19C195B6FCB0CE92005ACFF149DFBAB097E7FA7D456C774BA66C7F901E6B627EB3D8D2E8 -64ABED0B7B43E036491486909C67ACA1BE8E375F3CC269242FDF813720ED71114D65B5EE33E2A9 -BB4D0025D8703095458592CFAB5F1D89EB134B4C74AD59D12B04CAB6D60775D5F61E9EA9F549B8 -DFD662C1DC2E67912A7C83CD6996718274D196DE9F8DAF382C05B71EF24ED35D23B92A63A8BD06 -BEE8B178A39AE50669135E28FB18752C39007998AEE3FECA68091FF94531EE2341731C8010BEE1 -95CFBC398F2A6A8B9356BC9315C3C65AD4155F577275CB4697AB8322149F68B3F49E0D697B5E9B -14EEEA36572128D2CB97299EB9039A26971720AD09DC033C5F3E72A8CF5099F0C661F061AA73D8 -F7B7EF6A3231D71B8CA31D0F1EF511C7C43F67904F777CDC99B99EBC339064F7873A205F766DA5 -1979E93AD7987BC1046E08584D1E0BE1D6A2FEE34E8AADE64624DDC3113DE99505D10343A5D92E -D737201CA31EE3A14EC98EA89090BD0CA90694ECA4D225E29584621EE6621CA1D9E5CBC7A7510F -4EDA32274D13D9293A786E8723D3E49A5F647B98DC14C3C11141EF875CCDCBEB9812F0FF225598 -AADB836BAE5714060DCBF2CAC0C6C042F6B5389EFC01776CDF4992A78C371A657596BAAC97738F -2EB75200C47BF7653A561983C7ADF807D676E25BE355F3B76247EAB21F32A8A0F010B7454848C1 -17EFE1705F67B72E1CBEFFB821F839FC141699507607BB181C68A360366F0167F9CC39DD4D0DFF -8464C8FA4AE47894BA20D5DA5E40C604BEC10441352A3EA8890CAFFA5A64E0BC07D8645660F9D6 -F830A271719846CBB7A5850E17E3F3924C55951C31F7E6ED1CB887FB95CFDD7B99746E8F3E773A -EF8EFAF5071B8E41A7755334C2E2931AE15B7DE4E64938286BA03111CCB90AB09EC39CC12A8A45 -82B1D54BC5140FCBF51BA190A6A439C81ED22E0182A1083AFA1A03EA8A4D546D6B564E618D553E -D313DD35D5E1FFC8D7BDC15B1F4E8BE094DDA24F0E8109198ED8B0810F5D13AD2A9C97ECE518B8 -377E054CEBB3B85EF73B4C4F0FF59A1F727131B00C5E4A1E3A2215D7523E7A80F32CD80E21BF89 -F10E5E93697448D743518C0A5C5905365C3E80C2C3896D36424006CF72B613B20668792F0C3903 -AF69A59FC29BA87633BDAA063B27CC0DAF6882B0378499F627FB184A1F3DF2FAEA6DCC4333E1A8 -4D62DCC8BBA596500EBECF3C5353893BD07F7D282EC9F8050D892B00972F99DECA3923C5F77BC5 -E62BF3E9F78C268AFAC2C00F5639790F2C255A41A3C660916B2CD25D2F075D6FCCDB8ED7780206 -990039B0A2440E59065A07418EBC53D7F35F4C1FBD10ED357D3B25E1B2AB42EF8A0C1C1BC30F62 -4BA98E317A9FAF0943480765BCB5DF0192DA204EB1DECF7766F4F57D27209203525598C4EAD672 -DFA16C99E1F5E92EA7CB142A1B929E282D8D3257E898D89CE32B25E4A0649EFCBBAD87441B2612 -372C15922BD6E6E46CAC07871D3A903FC9A16F2608AD8E2BF2FDF62CEC4D133DA9F3C371425418 -0987F8CE7BF4E907A63A6624A8BC08511380234E3B9F8E9943AF99DE6E1943F7055ED5A6467D71 -97146BA48B6C6A9B6802D2EDF7F7B0C55C66E53E94338468C334C4BCFAB842E4E62CEF3A86D052 -FEBDBF6059692E5446309E6AAAD7C3AFF70864F2F6D70AD9AD75D2AAB8436A750580C3969317F9 -850D7BF6EFDD3EC9142712F8611FDE2948E3457352E299C81B20ADA11055AC1162FD3CB67F34B3 -DDDFD0FAA99B5912641FD82C2999A16AF3110D4CEDF7598A402446FF14AA065979F32B11511B7B -692325EAB481B179CA6BA09DC0B0F2C6278570C6E93592093CE5EFFAE490619D58BBA6906924D5 -F9107E2CB71FF8D826868928F08A3E43DD6CF61CAE912DACE89BED9970506489CF6966A31A360A -AAFB25EC26735DD44241FCBDECF0F8ABB89DB3410D9477D4615A13F67E082A8958F8E1D1FA730C -4E9AECC71075FFF0002D2013BC8F1ACFEA24BCDDAC5591D8740646157EBD7606F66929F89C0BDD -57ECF5AAF3E99CBADB9F5C9F70ACCAE2B7E99221F7B489DF9042B80F24C9B5675DDE6BE8098726 -98DEB1A014F0E8E917E17990162BB9B149401CD4EF82D47C53AC369CD89BB7FBC2A9283D9114E4 -1BAF3D17A717B214C60F20576A058BC603C8D2D0E1FE42F473DF6491ED0F3DA6D960DEDDF80D64 -A23908E8B03C204EDC0F9CB787B8758408188BB2F0899519B826FBCCFF69978EAA8499E38EEBC6 -CBF6475A1B8682E6562D5A1B538303C4E313BA8C63A2442D9F182743FFFEB953D40E7B71CFC867 -2954CFFB39B3DDF0AFA03687F3FE8E5BDE44F5F6E9D3DACFAB5178239DDA89FAB6ACF15D46676B -1E0F093DE8FA0F099B045AE0039C2A4AB450B6CD6D9FB9A0F0A16D31CDABCC2300A449DF463B4E -37988EF16AB0A56E64A30382741AFCCF386EB6F41D2B8E99F1A1F63C9EEA6646A48069C736EF4A -C5074FEABA3FCE00F33B1C4B2E0442175127E022EBAFEF645A40B8FE006C9FC16812FE62468B31 -BE648C96799F9E227A2E96F629EAA1FA0C26A7DC8EDFA916059CAD8DDA35BD1DFAE4AD4C6F4E92 -D4B89D862C0C4EE1C458F7E9BAFD67C731922220A20C57E7E84A92B14CA7CD0C4E6BC1467A7543 -D97A1933BE0C0263E0ADE5F9A4434C45C17576314946B4825A07417D94D061CF0B71AF2F1E1F8B -7030F0E7210A7DEE8882E64DD777A5BF247EA5708607E2200AD0EE450225CF17277A97C13F2642 -09A5F83A46501CAF0AC674596379FCA3B9B2C71DAC24106826FB99ADE52A978B10C4408C637101 -D500C9198642552A88184038042E3E7193D6AEE4B65D706287C60375C250B6547205D84938D4BF -FA8F71A2596F5EBF115D2386FB639E37286C4B0ACE6C45AC4E0A3BC02DE8DEF7E2628D6C4D4D2C -21495B16D6FACECF7783FD44E20AF622D2F3829BDA0D9326A46C13FFAFF179A740F22483D99E05 -82E81E9DDEA9741F916A13C1AC247E52705389A75805C01FD9B361EA097A7D47EAB1DFD13D9111 -86E60F0B69823C6E0402F51F66D3677F4DC68B83B8DBFCE9A9769C9EC6631AAD5484738C024D1B -DB71BBEDED98E518D3D8043B762FC1A3A17966B1A3EA1E59585D23B697D988CE36E337726FAD4F -1192EFDF2CE53D58991441CE981A640CF683D412CFF40243A0C5959A717542756E185A4689F265 -D080FB0D762EBB2DB9B37C47A87E9FCAD6A8C032D6C914636710D9CDB3B082FCA62907E93DC849 -8998BF5BEF3BEEC31EEC205F536C39B1ECD0BAE888AFB1E43CA0978A97C1A51E1E822A9BA9E7AA -27DE81A573C822C8C58D62186FAA9F326FD31AD9641DC196C3676F32171F118A8C500D564048B4 -315C4EFDE53CCCA5D19BF70E6C0B9613037E95DE267B05CEA87AA3C3C66A07B266CD5F7FD39B8F -A6B4D8E72D8F4DFD4FA52A00A1D66CDA36711090FF5E182416BD3E0BD7248426C4E7F9F02CE817 -88B7D33AB94AC6F41634DC7E622BC11C1D2249915F21CB9B80713B106943F87CC97772A9B84C63 -FB5F13771E485967D2292BEA3BD017C6C6061DD0E593863C5ED982775274C0582D715A3170CFF6 -B895EB61F999BEC8A5528BB33282F22B9675AC71A489041FDCAF51D51A19D81811025440EFB49A -50C1EC14FE04596C14A7DD8F4F9D9071EA40328D21D05E89267E710E704FCAC607D55E9E3EA88D -63C0EFAB004CE589474A3945414EA5CA9A77C6A7E1CB00BEF416931CBB42625BE1D4D892616676 -791D41E6986F98AF29DF13A42F086546DA429C9FD464AEB7FD8647276704ECEC2E3282016C931C -74DF9DFDE9218A703ED29989AEBD5F08480F63994FCB03BA872C737B33851F164B6EAA40687E76 -35C82BB6134CF945FA1D074441C150B32CC01417203FFEFAFA07D4E6581CE31CF48FF6B4AD7103 -896C5B120ECAA67CADED19B6C3E1C273954AA518B112478ACF06F57C6F631844A781CC82A18283 -ACD80EB5BAA7A08D6910EC9C212DC483C31FAE516E286F735E616E46239076D1860A52382B28F2 -893E22A5E81ABD92C1E71D7D73A6F75BBD8EC4E62975F6B13B83431B93C84CF8B04B5923D43209 -530261BF3D92221485111B8428D0D347BF494A3DFB92CDE7F4FC1EFFC6E7B0E58AC3000CE36C2B -E8194932A52702604FFF93BBE313B41DBDE474DFC3619F3A861FC8BE35B2F2F72E0E0D76D2CABE -A25CEFDBAFFC084CAD9B8C56F4817CA2291AA2E05F9D5A47CF83EC6889A9CD709095B531FC39EA -9EF7AFC813814806927D226078633A71E92455A4347B07DAE5CBF9448CD54361757ED686809868 -79B159F3D906A4469622BBA3BC63921BB45E0DBDF4E6B412C576FF8D1545C258FDE4AA76E3A588 -C506467395AA8EF1F5C4D42DA413D42E17032C4994690FF655839E65AF9352E70A0B522353D154 -D8B5F3278D8596FC07744708BBA8220190AD78AD44A4D97F42C57BE89E281EC8EAA3227DE396C2 -51D22BDC019D95AE8DD73D01463DF9A9654440314B2A8AA78EA16EE5441FF358C83934E5B22DED -527050FEBB7523148EA2CCCEDEBCE2B19608AD9A03321108EE9BB0AE167CE3E996783DD7FB22BA -6DF7620741F7ABD1B970A72A7535B3C43210D8A6F87389BB4A6BE7BA1A4481383D448303691368 -04F99FC313500F5E064F5DBFF1194894B9F120A669D67E5C321B5EBB041B9CC9B85B2FE2DCA0AA -0FA5B2B389BF1B0A60498E425D31CE00052F5D8E24F04E01880E92E29CD963C99948876D9DCDD9 -306DCA082EE3A8BFF3B1D4A8CE9302B9DA4C9BBEE9BA9941C7C19A761F5699F9F8874E86597A92 -46A156B1338435A1DF700BE1E6D365698B99EF460D558DF976E7CBF9305226FC0BD8EEF41CD8C4 -5659452C5AFD8CDC6A7681883B460E34E88A0346B5B41AF8CE56542395AE7D9EE630C1547BDE1E -EEF0464ED5D8A59F487422BF14B69CAEA9FE4B44B35E8C224A28ED01FA3F478A132F5EDC9D55F9 -D53B5891DBBD462F35C373921D6E062190C01840AF421AB8884F209D3572A3BCBBE0061E7D3CC8 -0A40259088D0A7F82A865776AE02979749394798E0A65CC74ED6B4E7EE07062060CAA5889E324C -284B40D11B22AD49144797F9E2852692199840586D98003C218D355F499A4B4F3CC4ECE85F043C -8B17448EAB12502219616E73FBC9E024E002746A4DC4A4746CCE089B5BDA14546CECC0AC036862 -1E5EE5F3333AEE176866F22F79E7C4B3C4C0F013F019A8423F0BDFB0BD069CEB21AC533304EE10 -DA6133A3909B0F2CCCB61084F14699C7BDC7FAAF7E08E5A978270D2FDBAE6B5E02B2801217605C -788C9899B9B82EFECB9CB02AB2AE5FB157D50681F1D43C159CDF46B1F05491C5E439F24A9D0BB5 -EE1C2F520AE58E4628981F03F36957130C2880C2738C84C87DCB79EB5C7C130EEF0490859BEEDD -FEA0C624BF8265229826292F3BC6FB29A27A850A6D69087568EF9506DDE2E900B1C37EDE3C8605 -7E6A0E97C178A67BECB622405A4F99D5E0F9F9B9762AD25503C2BF02E5C36AA819BC8C37141975 -F3AB1C7E4C4418E5E56D2E16BF99B856C47BA738ACAA7068D81E76A24F197C74C04D3E72CFDCEF -B6EF052EA7A436105D27D7566552311A03E29076296D4818EF7BBBDA18AC6626EA7BBF3CA28EBC -0359E0F66ED49C89AC23314D585524AD63B48DD63CEDC066416D142583A75383F0FA138D53EE8A -FB81CDEDEBC90B676373B712485726B8049EF6717599976972412A75BBDAD6A4570FD95F58A4DD -043424F7DA4AD1FAAB8B8F974B955704B634F9C3CF0F297EAB66218CC678D31DB4FCAA789DEF80 -F13BCAE4855EFD9F86251A4A6A746B157F61905C001EA4438A1F00AEEE8E161D879546EF2BAF6D -40AAEF9494E127B291E3DCD29941A52563BC402FE9EA357B853A21B4E50D5BE2BCC93912FDDBF6 -B46A2DD3AF397F0E09E39AEE129F12ACC6AC407426102766381593D73933F41C08A6D293C88374 -0A51B2102AC1A3F71BB46BEFACAC04D80532D6E36D89C716BBA853D447200FC27649E38580EC1D -A1728D07629D9676E2B7CDE31C46A31DF5F9A9CFD04EBEB1797BE6FBC58C29C8C135259BCA6B09 -BA7292B965358F6C79B75084923E0BDC1DDD214A6578DC4A4A968F3844CCE1216ED1C1966816FF -99B4B7CDACF2F3D363AFA381467328D72843D61AAABF4B752E36B334BA23FA1D834DCC959B4DFD -DE5C32DAC6D5D3DE385FE3791EDD62551101D9E219B77E2C51CCF63E219C51B330F197DBCA948B -3727CDEFE782BC7513A9A11045F0F184AF1DDF2FB654B5CFA2FD7CEE4E198137CBF8C16C902FF2 -B35FC7DDB8E769750E2920895758D853897EC2C2E79B5763B88530B4A5A4E10A20A71E7991CAD0 -26F8DFB9EA166D8B58CE596FB9E456AE276DB602716EBE339D81C15E62D2CFF2A356B97B7A6D70 -CAAE6276DBF3E41D995CC20B76450342314805FFB74639217E2316CD2FA6406DD5A88B6987EA6F -A23E620A461B075B81DE8F4F2F4AF703FB16C5166E9620A50DAEE9827F6E05C913B1B07C70B550 -A3855F63CB1F18B21B2C0B64C930FA01DF40503D486E3ADCD31FB244A2590AA19FDD395C1E52FA -833A69A0D8DB922897291EBE520006A949C6228520906590426DC9FC298D3B4909DF305C2B41CF -7BA0181A437C88BEBFCE09FB9DC21829ABF5CC5A72004F7DC1A04310E9AAFEE3844528B52C6034 -06DE4AA5FE8A70DE9347DD2D129B9D0C96B1E2B8B67006B4F6763162ADEB702739AC0A3F2F4B3D -C1181A0AF575A90DE3F4808D399D57E4BA2AD9C33AD87DEF44E1A72817B14893E7344BD33DC104 -6583526AAE6FB4B19B7A4890B3B38B06DECC81F7C8B8754924E32F09F1DF35AB1E63918D643BFF -E12EE8A4EECD816FCC648883E67B8D8C3D37869D75BC0E38CE6C213E17B624F5A82604922E4CEB -6047A7002CC260CAFE7E501E7DBCC71D08F0C0267B3391D58C00F17322E18A88648B59460101C9 -801950A6AE05F90367E1D0B2B68AA7C82997747998CF36E2BAB18F80B9225BB8303D9C68ADD86A -AFE9DDEB4E7AA39B3BC61FAF63477C355C7C04324ED3BC943EEEBA3BC2E2C0C156C2874A3663D0 -1C1F8EA826A1DDCA09566637D4B5AFCBD2FC112DF0F35E2C0D6F385AD575C1480DBEE713527655 -00ECDBADCDE426C3B33781B4FC5926576708998537EDEF5AF2AF65C0198B0957B7C0C822B033D4 -8D3B547A32FEEA3A45BDCF869287C981D3EA1BA6928944D62DD3F4C21BD2DB628C1C8707B343AA -97199ED1ACB52CCCD0822A4538E12FAB15D704812D19D04C7A0A4AA1B1B360FA6A6876A8C79CB6 -4E0EFF153C65C1F0226B5DF7100BD9D0F3CA6567BAD1ADB1E695AA440579A8B643AD4B4FC12982 -A46B1A97323B9CA57D3F9C4F4F257274EEE06669D83A6A64B1CB90DDE54EECCAAE923D234D7FBE -F89A04C755B1C92CE5E20086222413D8F4555EB4E452124F83AF92EEDFCD0FE63FABFF189DCEBD -5FD618F956E206F3970C558818136E95EFC257227553B790BDE15B2BA19A775D6F1A6909C7E877 -C50803ECBD75868D20700EA708416A947C8D4CAA9E20B1C26790063B68C4A517D805A1EDF22357 -3607C6E7EB571F13B61F294A3ADA65B6551A35163B2B09FF48204DA33C39228B90EBC2C42066D4 -3CF90E8152C9640F72314C415855B1A20C46F0CB69D91E690FC601A430F1605E710D1B6DE24B4C -BF183DAABCD4EB1F9A064B1C0EE66CF8583EDB4B929623BA1D0DAA518DDF244B33101930182E96 -620CF26D9FFD672FF7CE2E7A1E6C1FD5E263175D4383A9824006E3A24EF54BEA370BF09C4467D9 -9C7DA12786EAF43DBF0FEC582315890C8DF0BDFDFE60E50EB05D7D9CBB57E5AD8B680AACF1E600 -AC70ADAA467EB9FE4CE9FB15AB3B1733D1668D5DE1195E02810780D977F72CB8A249CB6060F756 -5B09D6D6205AD0F63566C56DAC006CD80A67FC4B522BFD5F0AB88EC6E46715B95074F7AD5EA332 -347F5F288DD1955B11674F46BB0FFBD3AEEB0B89926FFFF951D3A1F29633B3270863D3AE368974 -77BA28AD8245374F09B2F75D7930AA74118400C96AEC68A49F69F8402201BE29D5ED5009FBE347 -0D5B1F37C59383294CEC3BA4FFFCA5EEA6471E41F1CFD3B366719228263E4194CB7D91F729CEC4 -134414C18719D5F66A90707F0B8763C23C369EA27F3475F4E5BC18DF91713338EDC64E37398107 -E858D2FA86B34319F630175CC0EA0C0A69AFB950B6A44DC453725391EC4E2BE1D94EC660A728CA -3C9E9154DE885AE99B2255A8E503617C494ABED9974699A39F0AC8204C67D25B377F44A083CB75 -B36181284C75D1E43D457E1FABF44587267FEB0335D5951411A54EB0D3C95E0C8E5B99BE2023D9 -56D3AA605760175DB8BEB96AB13B5719B9DB208D676FAD5B7268AE7BBF16BD6D446B4C0049C363 -E40436A562786CB908194A7B8779B8E643C4EDD8F7B04B38D7CBDD011CB962A9E96297567A9F3A -82FAA696F6BDD100E5D74824BF84B16DD619CE7C9EC8C835EEE6DB5CD3CB8C41F39BC18E8DD7CF -94B139222930B39F9E1BA15981DE9F82D4C7797513FAC518C1D4F2EA30E803E0E3B665E21E073D -275A173CC2615DF9A69DA5CCFA720CD300486F03E34DA79856DF7716584940DD3F786BBA10B315 -3AA3D81C17CB2B5964A5259E9B739AD177532F8C1160E44666E4D0C3C3DCBB6A873B9797CF0239 -35459FFCFA6C463605A8A77C74AA9AE3E5A989FF03E7C55776696D21F11E801CB1AFD551234152 -EAC591D789E70FBD147C908ED8DA319A41F9714A7F1FC023F112CEDF88B4EEAE8794CADE8A1AAB -68D9EDF19082C4F7DA38865C3B905783BC9CAAB7E16CB1F5EFDA2F6AE513CC50544160687A6C82 -1B54E5F897DF81EA0004B763D02FDE7FC4ADA768CC7F2830C7D7BF5C446B15804E7777CAEA78FB -9F14D3B95A6EB62B4A310CE75725D1372DFE08BDFD7AA8FA58D36DB1D2C33DBD632BD5D0056135 -53E846815D995AEA6D8422ED35EE328231F57ED0A5BA065E1296FB513CC584A0205DC34C2D1ACC -580041F4806B3B7E163BF3CAF9C9102AED1DBF23017F6EE5F14A486977BF8E4801BF9BED1992D5 -4001E7D6015454F9A7D3A39424E1D16D1D0456CBE4EC4B28C019A0CF581089C068C796FEFF4768 -0C7306A4E0905D91BFE9C874786574164C09374FFF473212CD28F7549C85F742F6EDFD34A3EC96 -7311092F305CCDB9439101F9DE2341A0A341C19EB86718FC837473C31DE015530BE489A3DE1719 -6AD8D52BEC8207DC2C52AD1B6DA14E2E5E55E18E588182C49377F4F83FB1B878351B25B1B480D1 -369E69DD6F5FF1079170D185B3E9D104AD4EA0D325B03274C53AC0FF5C499CC106BDADFA07EC3A -5279475AC5F1807A2AEF64FA1C8ED95D8D865502337CE250177B18940C49310A81AFFEA7290A53 -8CE2806DB563CB130EC43166E6262F40BAC7A10C3176B0F5CF263491B90C3D9E16F1451063A0FC -28C4CF2F5B879583F4E7F28CF7BCCB3C24A12064037F04EA84F2A99D37EE787B023973EED0A62F -7791A1EC592A009512F93F5C798398AADE97B26CBA03C04C4324FCE97EB5789C3FAFB6BBB4AEEB -E241CF464AB0B78502DBCBFD29986A2BEDAC0F44AD4CDB15B1143DBC7FFEFF6C57914328176489 -5B315178BD0EAB310FE4D364D31B424ABE7F5192B89C1D1E92D27AC1E749A5D7FB1788552F5662 -08731B8A6766C0EC3B06740BF336BD314F8CD0A29E77F9368A088A99ABD60B880AFDA377E9C1D8 -CD4BE7E77010BF09396858526C49540AF6AD87112D07A83330703CCBE88869287262F1DB69F17A -E09BC16BCB22A5A7AE2F979956498E74A754B94971FF67645808FF9189E89019B8EEF8D48BE24C -98A031AA823115B638F5014FE507198CEA3CAC92D8A237BB0E49F2C02689E9E776E16F21A1139B -AB3311433B6373BF536E30A5959410D66823DE25B870E3C8568E0F95995DDA5D76D3817728D9CC -C39E53869EE7F5A0D4D662389CBCDE890600A581451DA0A37427237AAD1D77E0EA543A00B8379A -55F55AB79E5A1D44ED010C6847A3A657AF68A894E4E3AA45B88EF00A82B7ECF590BAABC2371B0D -5320001C3D1FA425F6F57B13C7EC69B64AB4B21F8C00E3D63DEC8C56713ACA560A0A349A1BF0FD -A614CDFE65E935B40F502B7D914BBDB4A77F5A4AAE5A2CFFEB26D5A58E3E50FDAA8D34811CEB61 -CF811D37C92A53CF493A7D6157CB48AA26367FAE934BB478ABE1EA432CB77F2411E7DEA7F65540 -B904CED9DB4BFA3ED733505DCF97D1971A66317E516F7F04EA905325C263EBB7BD8513B73D74B9 -220FB92616250EDE3F72169BCD8304FD8BC3A27B7C103E0045F769DB56A418AE8880AD56BC9E9C -DC833AE39C55A3C2948CA60384171CF9C207EE9BA9CE27BDFE3471C65DE1D617C6407133346AA2 -C25A88F42C08E72B12A32A2061800D825C31CD595D92FB6DB14FF28B309F1D317DBB1AFDE68221 -D98262E4A264F5A35570F40368D638BA8FAE9871F39782A6B46D8F3545186DDB8277A7C7EFB96D -5F09EA49652C129B4C54B872D8A409BDB611ABE271DF3300A7F3E8C8E161017FD0188580C954F8 -C4CC674E22FEB88CF5E0ABD19A284A0D9D91F2EC95F9A93F1D35FCA8D00BCAD8C6612E92C358DF -A868DA9C5DBFD73B01D11C38CA5F131564872BDC60F819BC5BFD15FD8E75AB533DAC3548B8266F -8D1D596DE55166BA58B3003A07182C7C0F69D4B1F298233262F2E7AF2B24A3CCFB725BDE5A5E48 -D7E9565970651803930E70E4189529CD573697A81C0B0A61ECDCF942F3339FDE20D1DDC8086202 -D1D3609AD6603E3690A79A285E1692353124196549C913077D3F8C6646975591A42AF8B5DDEE53 -78238DFB9624F44365ADDEAD9ED557CF4D8CAC26BFDDD772CEB98C5B366AFB2140959055EEE647 -90206F72E58E161E8773F8FF59582AB55B1B3E638399539F630E11780E5352ED6EE9737876FCC1 -763241305257C279854203A088F4782C30C6EAA125C8A6FC26212C535E66789980970DC0803E50 -6671FE3E96928BA55FE297368079A35A67B7FE13C8DC465C360E22A406DDF868FF4FFA3CFA6955 -0AD36656CC1CD19A1A1836FECE37B79F458DB40D42DE82D4E5ADA8BBB910EA51154948346FFFC2 -46EB10EF2660EDA4BFFFFFE6FF201D5A3CDD09528066C739255F4C23D39389E59FEC4407021D2E -0A870C6C627C32DAD68511ED8C91C05BD746BAA819D9900AD5102EFE6360858FBCD2F9A71FFFCE -AEC72FD18B5767336D08446AE9D69486C9C593CEDB8A91EB0804DD709C757DEAE3F9E6D6248AC8 -F8CC65E617965AF69FE99CCBA7189B288FCD4C1CE3DE8EEA0776D38B8A2B8F01679C2270356046 -C9310723589B7F396E9FB18C628EE7A83AE57F6D1817C1D94FD3EC6C45CD6728C82EA72E2CEED8 -2F0857A6143CCC6EAAE0B443EC7D274D7974B895948F6483C58F0F33FBD311D498E0A029012249 -8DFC0A644CDDC892B8CF603F7A6D39F7B650EF99E0C0F7D1611227BC3BC8BDCADED093902193EF -A008E6C5E52E032914165156CD97FBFA0B423447A8BF6CE288047D77F0B7A9E4932F89F6560C47 -B02738DF984BB26E0548423BAC15FD9FEF5B46CB5B396A3472CCC0D61B334B7DEB439892BF377D -BE2435787D0145F410E19640224A3DBF881521D31888AC1A4FA69A5E90852811B13596B546F159 -340A0F66E06251A095204556D8175A10A57EF634A6152B036F9EBF2F3639DFDE53C3CBB14CA209 -EA4BDA72BB143299E5EEDE1B535D45F07B24495918E7C71879E2F03467AA3D19C0D63F61A6252B -724EBD3EC0E343BB4F627B02914972D07DE8298CD128FD99A1D484BB1B5CA373F4E2491D24BAFC -320DA213FD2DA7F2B09DB190CDD2F30BDA955E44096617E5AD294DD32E35CB60CFA20615DB6337 -C23D83054F5E6F595FD907D150272AE09C66216DFB4F743E3B2E62B7D53B5E8E7667B289A00CE7 -B96B0B53244F3D124FF980C0BA68306C01FE4A8F282EF4C8D6568A53D90F3B05EB14E26BF96777 -50BF259A58735E2AABF4F003380CB8CB8EE541507C36BE19B2C46A2A2657FBD11BEB0A30BFA051 -2A6D3C9F8E26FF2C72BBD173EF0F04C8DB3DC608336C84829D5D54571A90F1B7728E0AA3108802 -C8992B6987B27FAE219EA24AF3F178DBBC7B455C9B59402B4BF3B265929C02D95B8BB3BFDFF9A0 -9639B4E1CD845B1340915489A7AA9AA19AD6822CD437E52033499D9CE1BE3A351811661CC140A8 -66E9BD299727F14813431B7DE87A015E84298EDACEB0BF034A9BFA2CDA13EEF9970FE8BD269246 -7BBA1FD66B349217DAB37501E98D330623D2E7BFFCB076ECCAA19D835074DBB07C6395F6930C5B -67077B26210227DD697D0B6F46FC88C182BEA5C5A4BFBE33D772AB706215308854A30AD2D065C7 -708A4AE333C65CE0BC2B0F22F0B60EA61197BBA3AF236D9E1FBF21DB6BEAD9AE94C3B28A3DA552 -09827CC8752A7BA6763EF1A943AAA5E60726B4015CF14D16F1352D433C5F4AE74D2D2B31204F05 -06966383AAF38A5CF0E5ECBD1B792BD1073B25A8CC4D0D2E1650AB4E931D89A2A619F860BC7244 -1DDB888F0324BB646DCCCE2D491F5FA75E598CF2651B0323187F3A8DB5A8BB4BD59367871B76F4 -ACBAB3D7153CD215540799F29EC08139EB9918AF0FF098ABF8554A9035A16442A5C202389076DC -D6E23751A85FD1B3F3AEA19E043B8A3EEB75C40C70EF918FA4102973E0E8615959F28807C3D20C -DB9E972E392745BC632B451FEA1FE04A410C8077B035AFA74F1B701FD91753B0D01BB3DE1AFE1B -E79802710DAB4DCE481870EE559F8C677D4C978D20CAF4474804F1F053812E67CACB662427B560 -458532D532C202E4942221A492EB14885148C43B62F8A0D19EF45490FF38CCAD1FA02C378EC0AC -44600B2CB28B244C787150A468BA7FA4986BC2E3A93A18531243E0B836988DD2C196AD291A305D -D91F3B4DA47CA75BD05FF0513FE10F844072E60AC651AEB7BC78DF6FC3A5E8E37584B0E45B457C -046557A3B3586442803328D2BE2C286456F34F8DFC1D1478377DA6847CF53C1ACA05AD72999E77 -C0FC0A262120BEA3FA83AC099756309B444596C26486208726CBE32558991EF39838798463BA21 -1345B85FD8FDA2A2FE834C488DDE8F8264A5E86246DB3AAB30B75B8C51A71EA729DAEF0F03FBF5 -B020AD02E09D43803126C34C11CFF1A69F2AE2DF39274ECAEC92C868989335190E6E2C245925D7 -1F45B1A4593578338BBFA6A2E2CAD3CE8AE00E97F5039B430DD9EC8A77404BC1231589F7FD32CE -3AFD2D0238085FF6FEFE450C9A2014463C41F4D3312DD98FF27A039BC894AC993961F81ED116B6 -5CA0BB449011527101A0D1168CB8CCCA699231C96ADF616582C557E4ADE73B0377F825C9AB0BB3 -C789F46535E0A3843A9955F292DC9A3E046E3990A558004478B12A2ADE2A95626FAC0F60DEA236 -0C0BB784F5073DE5185CD81565FBFF1189F47DCA5B947C59CA154C13F38260D51C47989D1C60DA -57D3ED1C8BD10A54D0D646F901D9B2E4A08D0477BB3B06E99C4CC3BEE8AD49CBFCD70FCA133F71 -0F8C2E8AD72191B672A37EC62BB27BC5905C70EEB185D4E801028764F2B3FCFA28321264950971 -37FDD160FC2F91B01A55F41CE24DCF84FFCA957D272FF4B8CCD8DAFC196816F258F12000975EEA -8284FE1C9894B140C717B9892B2F1FB1F9A63F27342363A34E280F42FC7517070062F3B45FD468 -4836E9B48C7BD721105B0D8D2FE65C759E47AF34C2D99EFA576DBC7B390597ED274AE0AFE364C7 -66B24E9C267AB0E6AF79E29D9A61A1141440FFEF47FAC973E1277122833B65CCD0C1669E8E0943 -CA94CDF9879F5B3540D9DA03B314274B338EECB14D93F6B229ED1BF061E0E662601F4BB44EC49D -58CFE25CF826B28F9885B8DC6C171F5D9F886E28BCB68291B0A00BBF8AE9A10F5B137AED55165B -CD3044786C0464EEAD2641B5B416ACE8B4D15B48E12D509D42188E3F3143E56AB28C85A3C312ED -F114B8931C57E66CCCED4CAB926F6CE5AE543CE2858C16AD0ABBEF49C66614255285549465F618 -12207C1DE430353F9C84D69D0D8AD5DD6594CF1770DBE352E41F5E12793A51CC70F386133B0EE8 -F96E4249F7DE76AE85233938BA8DFD4E8006F53FAFECF02DD407816873A76CD4EC41B175170ABD -70951C54647063553EB4E5EB14C900DBD377D2413575C50381317CA959747CE3E354768728484D -7B9AAC935EA5B17616DB1F80CC1D1DFDC1DAA780384B3475A816F4CDC3E92F307FD5373BFF893F -AF1E294259719699A387068094F8DEA44146EFEF7E079A131D9727347F351AF955CC435C07AD95 -49B8B1D75D19C5C465753BB77355FCA71406B77A6AF3204AFF93B4CD3E34E90A88DAC6D9A9A453 -37BC6AE499E07CEB31D14798FF0F55E2D8FC111B7D095554E7751BF71C3D4A7C33199C3E320246 -04B645D1D7029ABF2FC1801D4314E01D1C209A4F1ADB0FA96FE882B7416FA41AACC9EFA6879E53 -971A639D90B2AD319D259507E73A536575CE9251AAB41BF174395A5657E83FBC9D7003889561EB -AF9AC04CF2BF8E7310B7E6659812D19248CF6991DEB4C2A396AE00E725DEA00528CE08FD8D1D59 -5D1DD69D556F4584D50A80D51FCA123E8A35E13E5BD9EE977E09A692D821832B4ABDF01DA3ADEE -6AFCB27D3A7799711E3442FB8F83AC27FBD12BB7345D71F1F9712DA9DF2111FC10CFFCE8770699 -55011A4D38355B005B531AD274A09EEBFB8CD6A1F964A4DB7907B1781E52C42514D7858AD21CE9 -E6D97817432229CBC8CDDD5F0917F3FD35F9E62EDE71102A96CCEA949CDD94C1ACD847241C4FCE -BFFE7FF6028FFBC05E999F1C1C002FF395502643782D78543ADE03568B73A269266556CB545B7A -8D4177A782264B71BCC4B6B605C75B62ACFD6485D2E5D07A7FF53BF84A28FE086ADCE032D12729 -03D7C9901FF0E71C2E2411F6157A4CDDC9260E47A768CE48F099D4DB84868741913274F219DAA8 -068E82298242261D9BC0F4515298CA81FDD19215E5380EB4F46B1ADDD33BC8520361121C624BE4 -FFF8339DAE4776EA251776F6AB33AB8FDE785B6A94DBA8C960F95136308D09B4BA32D25F3A8CCB -2BE5AE8B4468A302435F4DD30EE92D165D12A463CF5BDADF434804CBF1686D4F5433D01E50F60C -DB832DB19E52CAAFC73DFD28510228646F610869C0CEC899C497B272D470F4B8B7710AD23E8059 -8BE10019858015F16FFC232CE4D5336370DF76EBBDA878CF686E3331D814EC72CDD40C5BCDEBEC -AF33C40081A4C27B1B21522F4BB7A92A674C5456EABC8D90827D747012F268C84C16E7AB4401AD -4E7F96FB64E0C83631A44723C9F35278174A56DE96322E152B3FE95658D11EF4C0BE5C0BCC1349 -0293310B10B0C8CCFA2479D50439A8B40F5CA0955A2D30E9327364080A83A1896B1A062793A557 -2DF318BEDDA17F3E662C0D4B41D8C348C1F2CCDE37392D715C4BC89BB5F9DD323E6AC6C3EAE658 -0B61EC042A91C45C6D72250CA6CB87B660389672933ED446B7D80D88E1A0BCC9D618C67B26D8A0 -12FB02C68FA7E4FC9FC91A22926C2D8F48F2371709E8151C31F5F4D40C6E75280FF9428F13D559 -DB7D37F75456E9B53B271BA496EE76A1AFF092390E5B896145C1ECFE3D39359634F9B942BE156E -9951FEC9D81A290469961303EF4ECFC1C050540A5FC778D18BFAB6FF326814CB256DD315F9C224 -8466F67E996E67DE3B772A4BD0238BC5C532F387B5F2A8546E6703B35E86D59716972B0C0883A0 -9C37410CE21704956BF6F5BFD93355B079C6405DACF179254BC08E415D0ED560CF9D7D786A4149 -DDD69FF12EFF44F4628D39830AABB8E951C9D6F2D80EA8EBE498CFA76E47BF82C76246A337346D -005EE988C82DBB8D1FD4729E2234A549666FF469D15349402B322A205E69CFB65A2C93E5C51B7D -D45F2E488DDBF1AC7BBA4484E0013A456DB8568BC8C48F8DB292055062FD73D01C47D5A48A0B6D -EAA5485F2D3717899AA9A7C861247DE19E3EF236506A76A7CF6A03335FD453DA1A319E209E71AB -A95C7727805EF257093573A1F963ECCDD8D5EB00CA24F323A74703EEA66668B38E76DC53A00542 -C61C737EBB67552C8C0D90A04D30109F562105E03A669AA93168FABCE3F6E8F15D0F94A7DF9659 -447E45F00570C63B74449D628471A70754B8A5C3DD4B7F1257CB9C02360CA1118EF42445B81A77 -8E671CF4B94BF5EC261A34A7EA7BD65B80D149F68CE50320DBC63E45BAD02BBF09C28D50A021E6 -0859FC9BFB6ABB71F874C39547291060CA4AD86BA98D6F106C945924EB226B0604E65D41C70921 -8822B9BF062BB0795E8CA290DDAA2FFE6ABE37D13995731F008F06CDF4654AE43F6D0F180E9430 -2FF7F71349F12D0E6C5D7BB8981A94930A6C1CF5799F5B3A64486A1B279E5DFEF99FB82CED12F1 -9C5B9A80CDE6D8AC2AABCAA1D2FDDC03455E69EDBCA45654321A7CEE805D3555A6870CD69DFAFE -8DC3DFFB20FD9DEF9EC095BBDF1894543A2EED30B416083E0C976F099569B95722D48ECD95258D -6FDFED1E14427F44A56F25B974FCB4D47F5749564EFEC60A783695924CD5E6569339F6E43C6696 -00A478AD5ACFEDA6E60835F19274BFE1E9085AE42DDBC2CEE9B856BBDEA49C0BBD66A400509D22 -B75C8AC63FFC5D82758FD22D9CBBFAAC44FB258BC893977E823D00F3837172AF051B69FFB4B427 -3911ADEBEA9D520F234BA4D8FC3E3C363238CD744402D096FA5078681AC3CAD245F9FFB510EC68 -13DCE93C66BF83C0AE307ABF446F4E1091745F57C941544336DD8F59749E832B5437C3AB8994B0 -82914781AF7EA09208D7F1BD45DD6D21FDBF11031AF0CAF929C39DB34BCB05144821082D1471E9 -E6526937C7F78DA1113ED907D7C0C03A6EB8D72BC0BD292EA13B0C92295FAD404DDE1212DBB454 -C3BE0EA56E5270B6E5FB81918AFA8D8574582D3464869C07188211730888ED6F5405BE928A9928 -E851A4CF29DBF352F3D257525B708FA7A1303B55A532E4C1258A5F6A0D12995802529CBD6E65AA -AA602E4220815A5AB18673FFA922789D35943DE4157F63142B3CBD2C8FC0E0CE664AAE02BE5A93 -C97CEE6FA6F8F6AB841857B3887FA143F6B9610B2F3AFD3740F3E0B442B5AC065AF833C29F01E2 -29FC382804E896DED6E0F676CD666F8787DD406DB5C69C9A2847E18BCE2FD27A138AA93379CE8C -37891058DC1C5515CA5F23380D3530050EE56F6B9732E4A0185B4D8FEDFB1E7460AA13771EF4DF -05D74602200CC84DFF2A103D3748D6198756F4749B74AA32B2F30F700D1F08E71E1645BF2C9A4F -544544E13F1439825969ACC1A6DC057348702E1CFD18DC3B697B28B042E39CB7B09C80E70707F2 -13C636A75753EBF406B599010D028940E9312B75BFEEC39C0030BD18333404479447210F91684D -BE2105B852064B685C3C6028C7178FC5CA73C17F0954C93F6B2C4B2191175D4CDDFEDF41FC4048 -0F0C8B8B369A27F550AC1D353FA11B318DEEBB01B4B8FC7AA6F06828968E1FE4F9B5B96F9D3017 -1866B8D14485287A60037526E721739C7CD0C17F6F64FD99EE76623F71C48C0A982E50CAE84DE3 -D25F5F1AABBC058FFA718AF92327E4FEBF106F744C170EAB07749FFB69633FD98E480CB281AA03 -93E6DE2159DD6B99C790167E538CD79D6155775604F644D040E43869DB91A4D00875EA13440FC3 -902AD40066380C2F83443B0499206BE189DDA2076DF315B58D6BCC0C89D42A699225676A47144B -04DF1BA596017F3A2E2EC3D513CDD2A9F184070CCE94C96F7BF6CFF00D922748BFC1C8597C7668 -F116989E7F08CA14585BF06880EF1A073FB8A77075074957BC126EE2BD330BB4C569A23009D01C -A08D0F691A6BCE9C4B5A50AE33A8D7C8948FBE555D9A0BD39BF49EA21811C515CD384361D5A0DC -611DBD505058A43122D8D9647FE84DC4DDC8BFFA1E31D3FEBA54276784D9B36CA7614B9938700F -59C39289B78213122F7B4602CB59013CB72E028C3D297E574A6B43A0C68BE116BDA1276BACC516 -73FAE3818E011213F0F87AB6DB1888140BBEC4F1119C00E4A62288F0F5E23B6058099F3F65FE3B -3E074385ECBE56E5DA88FE13C1EC3E7FDF22E775C7E1FD0CBC4B7FE931B7395A2E9350B69C484C -389628F1A7A85CF10B665734B60C4A945FC79388EA356FE1A03C9FB016DE980B8BC3B9BB8BAF80 -16FEFCBBC66690E1356BB97AFF51F98CEA4837A418557E5FC1619D069FC59A4A4C3EC08714D00A -8F1AA53F8B59C403C123A8C04EE38025DB14CB7CF964A4DB792E25A9E8FB5743817EF7F9000B3F -EADF7726EAFCB71940D2A9FDDAA02AA62D8B13EE70FCAC1358A34591AC3CCD3F163B4DA0EACE30 -0467E63CF26F6BCEA3EB934AC6775DE665AED32C8119293CBA154DAED637633C0253D4E001CC2F -699E318C5D2413FB8468B43EF418EA0C6C2314AEFD5E429F3BEDDDD122DE559D0725A44B31A749 -0F653D9A9233117B76237DE8B27E4C1886423A04F999792ACCCCA4BA4CD7BF35C785FA07D65672 -223E0C8661CE11EC0FBD391AA4B990CD353CAF98135827FBEBD98BBA4D618CC0BFE026589EAEAE -55DAF78E0597BC770A36751261192555BE810C82F6A736BA2AE6D3D8043B761826D440F795280B -03AAC4CEB41DB919A67C2AC68947B39B70D9C4918CC8512FC2F7C663190A81E33335A5A6196E95 -39A276D49FB75DD408570144DEACEC7153917E6494A56A1D8E8B3A2D06D997A9AF15575E4F50E1 -FC7A1067291BF0E9C69FBE1784AABA9874712B1E37F3EEBDE499E3FC6B3B9A9F15C620ADCB559A -8F79A17C5403411C1F72CC343B1FC1A639C5B5CA0D2D0B75DAD4B0B4834D7948A1B82D2AD1C6AF -FC0664EE1E82A6445E1BDDBE61CE2E5FA89CBA747ACB305C0458C71D1C40278FD48840C3EDBD15 -DEF854810CEA55DBD03FC20A63F7D2027A6553C053E153DB79D08A447835E252216DEFC01C2262 -32C8EA4A13A477207A37180A21E6C36DBF11DB159966F862B6BEEAAC2AABC9DA188F0D10AFCE82 -588F6457AADB7C3B4DE2FC6DB3EAF91E09FB2D1C748F0584E037F1C901F532217F2BA27C4491AA -8EF780DEF8177C2E80ACEFA425508D81737A008B6D9342130799AAFB7F5BE5A4F05EEC34F93F5A -4DF2F01EC3AB9574D32AE530A6BDD9EAE39AB88FF21FA502C434730537D38AE69F747A0413E4B0 -7B6AFCABCC807FEA7088AC8C96FB6DA878C08E2A114AE417AF245C6302B705C1B7A8FAB1CC76B3 -08A71E905602C35799828ED1185048EC2B5C01465E70A996655C6AD5B9638DB6FBDF425980BB31 -642A9B57CB1675E94804F6C3D35679E3C37A020D361D6FBDACF6963689201B8EEC706CFF2D5107 -41B4BEAA7FAF600D3608CEFFB406B06887C1A1A1D08093EC3C7510D292278ABB7193DD9988BF2F -E9A6612422B8E44656EBC88D9299F9FE5DA3AD9DBE9D75A2D49E4CF8BBE6A794039E5F69931ED3 -40081841C762AB97ED85F786692038DD1B59D89EAF49920E768E7F7F1EDD29C75DB9C1D3617E75 -B1940DB46CE53264F3992A1FB5BDEB1799F5D3A695A63BA2C6D33D594C5C365683C66FBA942B2E -FD09F3F0BCA92248D5F30FC7C7189D8B01B13D4D50CA60091F590407AFEB4EC2076B5B92F0B30F -4041F2E4100EA471A066E823695F1D2233F2A6E03F8CA102E0C155334330EECEE15147827AEA8E -C014A0C08E6CA126D9CE917861CF2111B5E03DDFAA0CAC9AE2F6B2E6AE961D4377AD47041999B9 -CD86A17ECAB5315823ECC411598F37B7E756190DCC6A1FDA59FE638C1A93907E04CF90DB5C7224 -FD8719E57D5A430C429E210FD49FBD3CEC3F24D845EBF8F5A088F68E19CF7D339887AF3C298912 -26CB77855A7F2683F257407C708BBAA4C4B9DB8745270C8980BFF767BB06561B3015B9932294D9 -5DB8A1040D7BF9E3D40A63C617DAF8EE7644D5B0D6308FB171EF3E78614648A321C5FDE3AD8184 -4BB85BBD99592562D7002347ABC2638E9338F26CCF0743087FECD56D3CA82B6849BEB2ECD7D377 -CA06361AB29CF13EB1DBDC56F86BDFEB451AD6C48915FDD35A14E7A6911837AD87CA3E38199C09 -16374140E83C9AF1A8A85C56DE956FAEC1D75541F4ED3B64C99D951180E1B8F64F1F8B7B45B159 -F8F5A0D426766C68D7B072EF6974F3ADF3A5BE90B7E9A21FEDCF47E29E7414C80C845C5D93B8B1 -D9FA86B1CA0E22558DF8EBCD439EB920BAB797536C174C458B1550F2EE8D7A784521F02517F8EC -A4F71CB240FB5F9D86E4F51F9151F403B0AC8A72C0FB6842356941FC3A2370996C9642CBBBCB08 -9BA6A5CB6FB9E2BAFA06E84F0E2E549E0EE23B21821E626077FAA50F021A23D42FBF4A7C4829E7 -26708780FE7B0613923D556F039B934712658859E8E685E74141499E09EAD6FCB62B0CE175A021 -36887CC85EDA5D3B8377AD464EEBDBDA46D0ABB1446D87AE5F0A45E3A94F1C6281647A0B899954 -410DD0DE1117BA611AA431F573CC4DA9CDA2FD3AD71C37A4FFF7B8250212797DFC54B99A8A6067 -A27D70D6FE72DF3C59247CD853E07CCDBB6A74F6B228B19F5FC764222E63D09BDDAE37245516DD -37517F13E23205C8B0D0CE1AEE7612D61D962A67559E3FD96566C1BA374D07A9A462B499734332 -5C78AFA5230AB300EB23F6A225DC7C7C7233403713774A190AEF9B6E7AAB5D8B887EB7F1F8F585 -C9B3118AA1C30F80284BCE0E730E247085FF7B1CD7E0988F36BAA813C8FCD339887407D4882AB3 -74112DE05DDFA5139EDB6AE5B583E031157980C2D52169D49775FBA8B4E1D906EA4B8E10DAB35E -203CA01FA7629BB5325218A005637EB76CD3E55D11B771FA770C337E6CEEB465A8D7F1597F6551 -B2FF65FC891033FADF0389DBC588C8DFBD1DA9AFCACCE38582B167C3E36210B9AD5551E75067BC -50AD37890806683F8028D06ED899E9B198A9EFBD321A3AC3C6D9FE41B644CD37B66412E5720D14 -47A89CFE14AF540B5DE8E900E9D66C21BD6528D636F6AE5293F1C9444883F0C15C41D79EBBDC25 -4BFAF1005645A73FFE6C2F657CAAE102E0BB5E787471E929F7F8DD97C6E59659925F0C3D741BA0 -9CE501E074E78CF9333485AEF2730507157A422D843A19CA1DE2B808D5F0A22318A1B9CC5E07C5 -5CF186372472A2C737D87499294A5C5E8EA50EEB7947C833AEF8A3CD932D4A7E4B8FD99C74604A -BCA2B4AA067CA63C1CFBAF9FCD793B00F452011DF2DECB602EDE3FFB8A06FAA52489EF4EE736F0 -B8C5FB0B6B9BC8B59E9ECEEA1D22668FBC908A89EFFDE0DF6BAC4D0A7A7F038DD8EFC85F177970 -9B4DB3949C6943F9E080853762B79D5BD391C6B066BF52547320E2C8358D0C0CEE994C89CA1CA9 -F37CD219736C2C01AD74993103C4E992FEE17503A00F025A55A882DBB711112E3A247623DC65D5 -14FF7CEC646305862AFEB7BF057B1816F9CDAD7DA4A1DAA6E26682FAFD0A7D20F88F37FF51BD77 -734B1EDE7092B809A214CC1C12EC8B8434F34E0DB6C249D3553C548E2A00D71D2C4723D9E10F76 -05E66FDD97F90C26DB0864421B57313FC2A345D31829B0B25450E2CB4ABEC4FB9D1F39A2D68BCF -BF41B93F92B39E7EC6DA3912DF9BCA1686DAD2F69EDB26B37C1205A1409187C8274A50ECB0434A -D03524EFCF0BD29131EA2B6DC7115FD69D98E4D8D9C38DB3A9A5AF5605A13E627F4EAB13B08911 -B44E2E6C678004F88DA3FE2DD09C3407220DEA3DCAC845C89049D9370DD8383EF4CD3B684AC7B0 -A61B688FA132868C52A27DCF6C885EA96B5313627164D532C3C70CADA13EC5124E940C55837008 -78D64D77AF0A13F4803E2716A1C6973130AFC4954A6800461DE890AF174C3501D575C1F3A3661C -0974B3D4CDFEC08205DBFC683D6F265DFDE654C623F30BDF9CBE83262869767D243291A7BC5747 -8929BD6231701D3C493E47C54824F073C45739A179BE64EED97B01B6161840BD9DBF4E54B2BD1A -2768FD02108989F4A41D4A727100E5B9B1CCFE3891BD70A6926AA1DE689620DE6925CF29F10657 -91FEFBACA00068DA6A1AF89E0DB4C042B97517EB6AA79BDAC43EE8FEB822F8BF616BFD7123200C -BAA27C8468BB472F93DB1A012BAF9B0A4B5F826D6E2DACB093022BBAB16FA3ECA34CF711BCE815 -CFF4C2D72F49020C34EC029DDB65E0793F9ABACE04003CC7FDAEC84340964BF7010B37F05AC17D -B406FDD7975C49FB46280D6599C47C0123FB86218D242338BC54F8566CB38FD2425F70379E0123 -C9D0A53B3BC609BA0586E7BAA48C889DB4AC331FBACC669C2E14F3419C6B0F58E75FC76C405C42 -E9562D33FAF544941B0F8CF79DC26F83A14F1D8746BFBF020D4D443D22CEC07432C921187827E1 -D52C93DE2743A75320E55169F2D619B78C0A0089CA20C6832FDF1116145FD98BF771ECCD42DB59 -BD173B046FD71DDDBF9D9AFEBBAD6116B1863427EE0D81713BEB43CD0EB9166296FDEE311EB20C -013B3F7601CE6229425FBD8B28A0972A81A8D1C0484289F5561B69C2ADDDBB70F75F770DF38996 -8FE1C7D6DB3872BE6EA35EB1C7B56D4593016541D22EC5C71A635CCCF52D6A621A9122D14C37C2 -93EA5CE08E368E8292F7C98B2500229B04A5E1C96924E802A3BC0FB5E58B8F778A6E57AA8C64C2 -759E0C8B63083DF8F46FC3761FC9F984EEA18C5A932A144E58DAA18FD55F51FAAB06E1D28F2655 -09365235B5E44F1453E3B0624C6E3709641AB1C5814FAE6642D852DA32AC7B54FE8560BF3ADD3A -B3033BA8923A0884E565D1CADC4D09C8A52CBDDD039E2C83769058DD389F86F71852F10998B4E3 -A758498F4A9B79CA6C334019901CC779B9A6B005569A0E192AE2628E16A8BCBD70276E36E175CA -A41E221A3502A046B178FAACF020A1CF03188D8764730809B2D37A45FAA742D7E591BE258B4172 -6D91960670CAE77ADADEC51A672A7F7624057603FFEF82622FBFBD4E0EF4661151429E37A64B5F -4CE3C03D593AD9F504597EB6F0528F36399B33F30CC3B2F96F3733A8013041EB3A6AAF4B0A45FE -F733D1FC07D44693D6AF26F4E3A902C8F20A7AFA23A9726F334C4E6120855EB049172A34E4BD0C -93C3003AA814CF57C912C53C6254E3B37F494C99AFAEF3ED92ED9D1A3826C812C315F5D1C78641 -1EA2CD5ED850E596EC26CD63CF6AD87D0A43B9F44E0A297180416C2B551D6DB874E7E11E0D23AF -306F045C7F67B6F54AA8A588084EC5FC95BEC9E4591231BE11A52E398B863C32B7256475C6EBCB -5F2313D750C7742E3E838C62DE54311278BBCCCD5116DD957EB97D34D6452700C1847581DC82AF -67E3288DAE3B6F16E9DC35799C1C85F9A568DCFB9839960C8D28F11261375C4A19B4DF0B2DE321 -AEF39EEFE81A28147876D457931A141E1E6FB18DE81582DE371EB7304AC7BFCD7E116E7277DC4B -041A8E304CD6AFC986E037D112DEE3B26D0B353D8011FA8B0E9B048CB382D6C4C7BB82AC2E0EC2 -FB6C4D904FB9E6D3A9FB83F88605DAB42E02C7982B894B945787E8C61E3A256F42D36B2632DFB7 -CD62BB7EFD676D42A155F0FB6475B51008729CCF23957B468946D4286272C7510DB2D0645EE78B -AF3F051730DDB1F7D56092BEC76E82B76D201A470D3946BE6AD863533526D66DAE5914DEC93438 -77BFDB7C2F01D9886354059CB8EFE4270058D3A06146B213C36D1B342D457DB8673BFFAC4315BC -CEE9ABCC370920E95F8637B83480D8C978C093CE085EA1B4E01CE104C94AC744BC0E69671AB889 -CDE75E6CD976FD2D0FA70C306B6D36C4511E70AEA5B6655512372FD55C016432A3CD9417D97D0A -4C228BE55911C32419A0FE5F16EC9A6071AAAE1D851F74AE0710056014BF9630039F6637EEF891 -99BF3CF081C955795B4467EAE95019BAC7EF36FA79D9F97F3D33DF2251F44B99D13DCB7D832378 -24E4BE48A308529C6BC428B12CF69A6127EFC21121444DCC37F9A7A3F2730F02D8D3FE9581CA2B -88BE913CF948A95152A64566A881389A059E5BEE75841870787C4720DC6FAD43F12F853EEC7A65 -FE5ED736DF222CE1E386B806BEA91AF7F7F72EEC0EFDF895471D76057854AA61255D6E2EA52813 -62153D6F589FA2FBD0376DF21968B0FA750B30D65EDCA7FC2D85702361C4CAF1CD043E48485C45 -1534C56AA12BCDE172F23F6738D165A320CDF987B827BC566FB90EDD853C6D7C567C095AA5DA9D -379415125D7C67919EF3B8D982A1469169016064F637708A327E68EF2C5AF23BFE04C1AB598DF0 -85BC3CB55A0646850932FA352A9E8AE66017D9837AF4129339680A1E55C160E4A049F31FCC2A25 -76C7EB46248B94CE3519BAC922CF46F1E1E9A7B8A75F47AAE73EBF0A994CF247A0D08E65AB321A -059CB4EE443F720EE5BB46A1271305FF9884F5EC3E63DFE059B32849E88FB974A4A091DBB853D9 -B39DBC19E523D69925A419E891E8AEA1476B14BCC1BA4AE031263CB83BEEF7C7060362BC08D82A -6415FD9958CF428D4C43961DBEBAD1FB7D77663700DC73B80F6692E862A5FA8E5B31C028B6C7C8 -A7C11B3B1B0A79787ADABD6D1E37306118CA3505DC3C07372641E721DA4C5460A82CC6CA846FA5 -49CE1054C7C096FCE1AE70765DDDA2679F035226A0321F422FF944689BB614169B7E41FA56AB25 -E1CBD33DD1612E53D4484F49526800E2FF17233E262E3BCEE284CF7451B81F07037C7B9D724EB6 -40D32F49D2CF36A63E8F41D967BE05EE2B1A96B0C1CA58ACC971CBA30074970DEEBC91B0D66ACF -6DF605332DD97B1BE3CB54B7A8EECB390FBE859084BCD1A458ACEB0042C778FED53D5EAB466A28 -10EAB53A25E40F97B0550FEB048F83E8CA232DCE97FE280E98F43867A62D7F9EB5DA265435C783 -2BDB173271FA2AE0A3863D03AE13F0CF54B7DF774767F87D1BAA65CEE822C038A6F91AB256CB68 -23B9C505D77EE082844FD8C7072CA789737FE8D6F4D6621CED1DEC6C9756F1195DCCF09244FB8E -87BE0077EA745DA363F398328CD3B22EC1EAE10BD08E5FCEEED39B7E0B86305628FAC28A050C75 -A6F17864E16BE855C2E4A1998B83AB94AE09FA37B69FE6673F4D1D241ED9ABE53FFA2175777364 -7B5F07FF8CE2BC3121EA092FCE04072647C5645C1937B7EFE57CC1D6C2652F8EE4F5F7788A7243 -AC033876ECAFD7C5DB01D09F00830661A8F01C0FFB7CEDF7C23E620A78733A50028CAD88D33DF1 -58CE6A1F833C2AE7E57C875CF29304DD96DADBFE1DC590FE866C066EA6EF0C78F7FBE8229200E4 -8A0E6FD4AC0A81623255CCE187ADB8AEEA7C1D791EC5901ACF30074FBF6C97AECB19BCE7CD96A2 -58C901D1FFC4A79446EF7BE7A9080AEEFB054372C30F3555D3654D5CC2DE0BFA214B00A5764B9D -69B0F02B420647C0C61CAED3755896D4A9E872CD95D0FE6DF1D3799626E818B802435C6AF74308 -5F0AC41AE3618C4D345C509E9E689C8934EDA9F76A17F8F056ADD5367884E14AA984C28FEF4F5D -4D9776E0133A4A550F7964F43E2C9E8AF8B54C9F81FC7818A6C80B2C3319690A5CD785D00320C5 -8FC00E762F2A1D8102F8EB7A3EA692928900CEBF2764907E75CCA0F1500C546D931B9ECC96A53E -CA6FA69EBAEF1F09EC6F4FD6C16B34243F5639C9F9DA5C4E2851D7A21E76FCB35F5D2E8EBA7CA7 -AB688C96F27D782C335BBB3DCF7CF8EEB322FE5692CF2EBC2E363F12ACCF9F7A513BBBB024FF94 -788BAF7086ECEFFDAEA528D8168D8BD43E428D4BD7A0E5F9414C116BD6E42D257882EB8634CBC6 -D11B5AEA305DD6C628387C6E489B9A871CED2085903463470A10E8B85433BB7865B7B9B955ED04 -60691CCF814A0BA81F6C20C2B19877E4F37C406744BA5FEAD343EDC4B42BC0040B8FDEA21BDCF3 -047030A1E62365FBEBB3E0C419DB4DB280BEC3CBBDE80DAE0088D1AA03DD1A8A3313FC744EBEEF -1E993482AADE395EB6024A67BC90A4DD121D8D2A82BC9B50B817843CBBC79A2810FDE2A148BDDC -183C9B8391CD0FD80817E39F299028420A09939D41C1351C2562E20A45BF8392ADB750A1AA3245 -24D61999129D827D4C28BDCBF3A9DF6207BF8C33337B19F886B9326AB723071652AAC0CCD5FD1F -2D47062848BC1AEF1032B35F8F20AF5739BE6B0F7A612559A36CA3814F4807CF62B65FD6DCF1F0 -26F31D2523B523DA3A55270EDA57C727C69EC945911028F9F6E56234B3A400FDF92C80C1D42211 -F661DEC84271C010E2450B08500534530BB6CFBECDC8FEA688C2CCEFB0FCD77744CF4E0719FBC5 -CED407B114EB2F51E266F5BB9766F831ADEBDC8485C4B519ED77A1BC98BB56BBE0E5940D3BD1D2 -46ECAFD652DE1BA803D2798645CEBA92D6E6E123852D27BBD75F9946CC17E2DB56008231D07BEE -887EF18AC9F99EEFCF1B2BFAE8F99987B61451AD50DDD548DED93CE69161A2E67435E9BA5EDB8C -2EEA6088D4F71FACE28CA3B27628C3EAA0C59A1049EF61DDCF048F587F725082F557953FE0B804 -8B7B38A196A66A975557F6F5749B52474DB4AC594AEF8181876EB84277E2699F637DB5AA2F5B46 -20CC1037D83881D63D7E8DD3430C307E4646466F94E529BCB54EE9A7F8A795DD789683615CB182 -623D16D1F80257B9FC1759C798CD3917648F992A34BC685B3F6798D398E762E0E0F3F86B6933B0 -D7AF1ADC561B621BA00828F89E21335B079738ACCAB8D88AE5C406AE9CB920708F41110E6D7ED4 -315330E6FDFCBFEBB541CE32E5F93C5FF1396BDF250232E9893CEB5F87F5E4165A9FE1AD8D71C0 -7C23B65B875A7331F59340874222B9F3085B25E4F00F11154AAAC24562B2BFA901B960426A4E6C -E481ED163C9AB39E6426C4CCE2B20E8C72B1C108C405977D45C460115FF4EC599C9BBE75F8BF4F -0D186A2FE9309D9F50768E829531C40BB63297C382B19DBCE41D5E5E91F4B58D98990291D9CFF1 -EFCCC6F8B1F8CEDC8076825B673121609812A297D6B9564B4048C8A899631D351A438621003BF8 -AEA0B738AE619E99C0531D175EBCAE621B836CD9C593358E03CBA68498B05BA0B56F233F59DC52 -0699C21985E63F5A4A3F77CB74A2AE1946AC5C78DAC2AB7728EAC7B5CF10A97755059B1EAD6640 -91C8ED90AB4EE76F827F1AE1EF1DD9A50396C1832FDC24754A976878A49F6E87AE9B2195F82BDD -DB8D035BC0343CA13815B3A4A6DFE42D6F59C07E017F8CF207711397897435E3C5B914AC719210 -FA8D12A2909E11FFF50A2C47299916A49D4E180F5BCA51F0F3EA76E549A04A1A117279FDA57CA0 -6A069A4578525471537268F263E8A150D14C266383B94E61972B189525D99A9BA9D65E4F0EED37 -88C2DA2B5D476FE2A70EACB7CAA301BABCCEBD031B12A8AF178D371232AD0A47DB8972E7722BDF -BA44356EB7C5D7B6EAB76305BE2267F4F8F7F3579F8CEFB2919FCB14FE218197B6C2997BEF23DF -8FBB588F2DCF0F2D3AE1F057FC2049FD732C238981F5FBD1B057B49A4C0092BC958780EE01BEE2 -A4F42B0486935409EAB9E8E1C0E8D7D46D834A09E191FEDBA815094F745B87F2BAAEAB278B0FD7 -C68A95363FAA80A24BD3CD02979B6C0A168A7C056370020D4E70721FD0309D6405D1E61FB307B1 -5C54FF8139EAE59C2A1BA1D893A7D26609296369763BA51577B5C9A7497A7DAE54E939C289E4D0 -C925B456EA7A08DE43D89BA5AD3E5E629637AAA91BDE15D982A3FF9971C6EDCC8568B3A262DB7A -B3BD950E4C9A372D2995B7EF38DF40246F2EF7366A8DD25074BB52FAD66589E892DC53B0F76D94 -E54381D0D5ACE114E8B1114E1233419C688B207F2982633960DF741AC2D97B9CBE1C492F2F7A70 -EA70968F75DC7C49F3F17864ACD90177CA8E0E1F02BA7EEDA27271F2ADBCD7F8C980CAC6ABA671 -8E3BAC6016FB2BDB2D44A81A0967386BF9E6212797B0F2F9A9B2B4A2015DE47D4722289E5632FC -3BDCE60F5F1AF5D1033BAFA4366FA938B1DC63A799190319CF16236EEAA454585C3D22DA9E28CA -C0174C9C878075F29692C9865C54726316A0016E148F37210E1C90BFDE8FF6A6AE696529B3039A -1BA3C28179C198035CE42A1F794B290814BC98EE2F46A39750DDD65C873F25D173ACDEE1A5BC53 -1564EA76995DCF122E4E1D05F6E84524A2FE136E6BE115F8E3E80AAEC073A150DDFA6394B0FE5B -0398FC08F49C2B271960182F63ECCC2F71C973A0768F5D1464D86CFA932B9FEBAEA87EF97E0FCD -6EFE7E4BBED09C2184902176FB7D2EA1A885250D338EA4C8FE4DF827A402CB4D511B730E98C644 -D3009A2A6AA30604DCC012F9B3833AC40FB72040EBB22FF3CCF65697158F50248F2ED01F749570 -6684DCA7556FABF359CCC3A73FEB39E2AABBE9E337C1B338EA33CF54BF25B8B9788F418CFB064E -0667948946027A755ABFBA7A72EE83D34533F95A72F34A724181C6E52C1944D11F6DD2B2AB4E1E -3C9BB1C94A0782DDB2B63BDA717DDAE42618B99E24AAD06B5463DFDC8C055F39820911D2BF2605 -3CC93F110ED75B5F48DA4599454C03461C95F48A1915EE53689C05AE84A7B1D3938FF5B3AC5F5A -34A1BA2725FA5BDBA7B6C272FBA86731207502C8BBECCEF03B6CD4E50FE6FDEFFC87E74F48816A -566A1222BE1F47491DBD73E4DECB5791BA834D4D1C99C497985959A1847B817751C4ABAF98D96A -6F995AE37DB073655CBFBB9DC91497CCA1434BCDEBD5F83CB160E74963BA96F0E795FF727061C4 -D0CA9FFA9B373762EC0FE39E1CD41C6D2434537D159EEE9ECFDD6F3564F31452035D2303D7938A -AF260E8442D58EF5BFDA2DA2FEA1D89582C1E13903CE2002BBCBE0F79D623A3498A7333B1F9A9F -383795981679F5DC5F1B782F20F3464D00107970B2B05FED2A02BA813C66BCFC67385B79EF4358 -AAA05039F1765780177E1CF51A5B4CE720D491C16D929495015AACABC3F898068EC8EE33895AF7 -2AA3EB7203BCAAAE9ACB00390BF9AA87B113C230FB9B1442FA0C2102DBDEB3B95B712F05407B9B -7012A0602009A6A69474181B552E8398D8B9093E588427C2A4EE8F601332A89DE59724C07DD39A -C83B5FA441256A517117801E56FE217B47764C79B4250A8ABF00B60B6B68A7919A4BCDAF8C9A6B -590F6A7F93C361D74606B0C96A6242A515E859032AF658E3817943FCAC6981FE1D7C865D5CC57E -000A3F1E9535E0C45105ED0B0BD4700C29E9C89441C931785925B711E1FD4E8ECCBB3F7A3AD63F -68C41C1BCE45557139D329C076E167DDD4FFAAE81D4664353D03C20759354232D85EA6869854EA -2D9E8AA9300D3DF0039A0A0AB73D018476B5F9BA8B5CCA9A20270FC1CEA623630FBA1ACFB66BB6 -BBE9A218855F07DCA2479EB8876354533186C7FEC2D63B3974D3FB8C3F5064BC8A0EAD9B8F1698 -85F93B1BEB0181242D76A94956BBC5314E57515C3ACFFAE5CFA1C1584715C4290A850847C06995 -18B2CA576B128EBD9BE61196EB0A2CCC51477707D1D073CCAD6851501EA673966FE65E2342C54C -05C81CD80FFDF78FDCC77A0C0E8C5FABA906C1FDD4D08DE0184BCEC1BF9E6F7AAB80862A4E5EF6 -509ECFCD45D48A74EA2886D244A361256E8B8112DDDD5432C68936FD7FC2D5A62722BB50183470 -11DC2FE65B2C7E28005347EE495FE071E59DF2326E9C4B91D324BE9185D3511212B2A2E47CFA7B -D1A4CD5CB3CB986488FC985E7624737A00F18C547852AC26658210C94C2F84761BA0230AB0F484 -18D591E115C6016EC39B97F8B12899FD7A4C1C6B155EF17EF46AEC8FC6F5D10353EBAD43D87C44 -A085A86F9DBA13F0BEB46C85DA96D08C1D9BC65E2E5443631AE92FDDD68E3E24A2F2249E36460D -F1CCBB2CF80A5D1545D8AC3D71D9B11098EA4DC944B4D1F83E43DD9C3804B101220A74692FF7E2 -281D509FA230567FD325D0D2717150C52C557506D61DDDD33430230E74F6E9ADC722B24A7471AA -9ABE1942AFB075E2AF7A1EBABF205EE7C89EFA9807BA76E28F12406B0B2B8E3404768EF607131D -E759494BFA1B2F935415299734E0C68EAF737D44F207163E16AF0CEE304CB57E5AFE3E5DA24DA2 -4513A3BE9F1A7E489AAFFBA73F46E0475705AFB8C0762FB011FF6AA4CF201BDC4F519BE49E18EF -C5406269E9850A8D70BE682451B541094FB99C7DC23693A2761826BE7531E4FF4F853FB38EE944 -94E51A45991E256F0E9B841945351EC27AA28F33717EE276D3F1ACCDA6584A89C11F9FA0878B98 -96ED230C9440E6DE15F6F16D3DFFF568CF1DFDCD629A0259C174C5B366A13C545AFBF7EBAB3499 -6F7F0EED236BDFB8B20CCA618BB717E63658DC3805C259AF55E1A515AAC1E6D1A25AF80925D54E -3AB059F1634D966AC7A184B22D03CB000F766C60C579684CA613D8B6DCEBD3202C11D117797435 -D88FA620A0CA34E7C1242E2AF58EE6B102C15D6D19EEFD837E360AAD094BA6C646FB18FA15C2A2 -3755DF7B1A5E78460E3625BC0496B864405BC5EB57690ED18A7402F5A5EBA9FE39AD3B89000652 -90DFDE4604A8837DB0E8C15CED65679FCBAE5E36AD6361CB1BAD709F4CC7EB620D4F36FBB41CB9 -CF1A58E92D31E48419D4C3E265E465AC1D1A72CA49FEFB007BE89FC577BE36EA07CC77DD456A4B -9A1B534347A9FCEB1E342B3BDAA514289DBC68C504A3F0BA2F2CBDB2FEA9BEE064FD28B616594C -B9544AE541ED7C3BD384D5AF90E04F3054D3525A1650A14A61F9458A5B57645310C6BF0E4228C4 -8368E50433AD91AB68C5420BC0D280BC01DE983DE039B205B82349BB16F96F6AE3563335B0BA23 -ECE046C4C8B74545AED35F6686A53AD04CCADF82D6158907BD7849D308E8211FCAE32A0D7C6530 -833520005842093FDEE243B68BED8ED474CA329F4456D46E3EA01E4E8D350C710CFA5211B7DDE4 -1119BF82249E7BC7CF2B34A7AB2CAD5919DB030F08DCB38203537B864E208AB2AF0E7C71D6241D -D52068080641FF8F0ABF3C7870D3ED073C858E9037868D4CFC078E65E2781146550320B5760C6D -C267F0FCBDA013AC5D3E53104D29FC7BE967F94756337BA8326A4236CF1BF6ABEFE33ACFCCDB6E -FB14F847D0966FA25C3712ACB68FB1D43323198D2114FB4699814307311A06EE32E6BA0874D891 -C33471BEB116209013F89F843F47B3EB599F0D3C4E9FE3AB5164C6E9A91D219E0BE9E651A01A1F -373FC8650A81A3303756D63CE841C7577DF7915FDF112897393B3CD3C3607DA7C6DCCEF2352595 -E532F8FF9E6636F90AC733CFA66FB911768C0CCEC0FA71E7E13E6291D5DF3CBD60E13B9979BC1A -AD37FD2F1927B9755212E6ACF5DF241F231D8C46F656F85F563DACEFF22B117535332CA805099F -1EDAE0D808021C9F401B44A5AD7B60A447E229D8BB7B0808C152F2008D6762C95E5461399DE9D8 -CE542B5F9B706D0D3A57F2FC0E8C0773414A9E68434D1FDDF5B6FFBEB267F68D9D9161774094FE -01239404823F2CCBA524C1C01716D2FBBA0084127ACF78EE9DFBAA0ED8F78BE95C86C125940CC4 -4B212C731159B19C0B408E99D4C548AA46B2AE843FE48E468198F8D95756960612B4202102F3E4 -D52B3820494459555FA4023263706F11B42893695D07F0EB8E127DFD37A97E91D5DC7FB0196446 -E01D601FBB5B8760E4AB2C29748812902D70DD542768348BA72474CB11002B3F8409B8EE61E994 -40F953E188265FD44098477F84C792A1370D6E69886F2B1519FD44C3D8A5864BDA156A7ECDA773 -07A0E02FDD14EEC81E3B47290710078FFC0327CD05EF83322B2895F5EFD50316AB6DD8E4728C41 -6E53A4D1FBFF227B6AA74AF674D610ABE75232164D67A28888CD1761F1495EA4E952D7C6E9DFF7 -F34BB44BF18EA414A777D0287FDE8D87AF5961964C3983B34CDA085C809460FE1AC18BA1EF66F7 -6BFE1DED0C4D2F5BB503464F6AE24C3EB1D8A0FFBAD22E62CD09A44C42F5AC9F65639A617A4BE5 -A7ED95ED939485671FADE5118C8C62B27903D13C872899813B511C16246D0EB28FD225992E4C45 -1FBACB81875A8BC56CC80F6CFFF53BCF0E13B5613D8E67183029B7297FED40D4A0094F69B05FF2 -2021C2E27B7581B9C02D849D58D53F6BE9B1393C0089EC07CB15624FAA4B85ED8221E559351E51 -78AB83CAC67F38C972A8A1763993356BE358E73378AAAE22FB2345EB68C09D61B7CA2A7217F396 -C25F8D1230E81CE01269DCE2FE7006BB68F50375A53A38FF7F387F19120260AD9E8E39A797AC33 -E85D7BD2F960A3E8606F7C7AC756279BC3B0DDDC2575D29800AF220D0928DCFEC6FD9A287A5E8E -3CAD8D3FE4ED4904100163695F2C32B3BC9C3074E2AC1E28EFC899EF49D1424199663BEB347F6E -E1 - -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark - diff --git a/src/libs/pdflib/bind/pdflib/data/blocks.pdf b/src/libs/pdflib/bind/pdflib/data/blocks.pdf deleted file mode 100644 index 13beaad876564595cd87cbffba8903acf6cf2c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14262 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 diff --git a/src/libs/pdflib/bind/pdflib/data/boilerplate.pdf b/src/libs/pdflib/bind/pdflib/data/boilerplate.pdf deleted file mode 100644 index 52960c388beac11fc3c99ff10c35ade536c7e90c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10989 zcmds7cUTlh8@E9Wc=iwr>LMCI<#uncBcO1IAXN^~h$4G;3oKl7Z@~jKiX}#{_l~h* zR4hTG5EUC@*H}?eM2H2WXo@D9_|5DU4vyr@^L)?ukMKOOGxN?nGrzaYJMT>Y=%8S4 z9#_EWU;XgXRgRMs!4RDyjpOT!aL{l{OA<7dO{x$cC`KVX_%8%W03Uo2f@1}fVs)ILLSd<3?U!0r{nYOa1rwD=Pcw)?B^#G+w&7k?DxQIkjJDf#Qpk+e50X^-NCcNLF>KEIoGFI5TI__`WmdxlNlDK(t;t_L5)DvST@O>Nd@)3JN_oBc_$} z?+#tFHhhWUm}gmQ>N8}1>$X^nsU6y_htA48klAgqGk`EjfndyaP}ePM;h-kyAR;Vo zG^u5*z{QXTT?VZLPy)Y-%5-WSE!PuD(o~dV2sB}U6e^SR5S|Hcuvm1Mkr^&$03Iyi za6pKg35Nqh9M~1?G+d4&IM89!Hy`1{dBq?QEi_mMrU3_y<&6i!n5ZD@Xj-R~lML|X zDA)o(J85KqH)lJ^KqoML1H!W?X)H}?0(C|}4HXp!QsfEwtn-hiNF~WCG#mx6Qd0_q z-yknEf>cpN^L=HsPTzb>jE-G3)<}0)kf03EATpCulCp@;!y1GEQL||rP7_%Tjc^@i zCI3f76pj8;zs@URiXdE{ap@RE?vHR zM(*s>>-Z02TDw20cH8Zy5AR;%cxYPe!uZO*8+N`r-F;b)wB)S#FzKLviPhm713Gn` zX?S(C#nIZ>)g2GL3F16$*L~2HOSz{Ep@zz1lBFZ6KYj9WZq|$UJF_Ok=71~lE~_qn*S%}Eesih0|8srz zS|^`)heeCK?B6u_&`Qzx>@ia-`xH-jKR2;b_j~B1kM3_f`x$3{%JUlf=e=tl)3@$U zd|Pb1SFCH*u0>k?EmoY3&61TD6f9pVY>+mz3$wH>b_wkuh%_i^O3&zMU>E@gCA3hW zVZhz#Lr5wm)l`C1mKNZPQVfVxWHzKgld^hCM2I(z0UN+T2m$sK))3$bk%R^~tzl8o zQISyt<4IaYXbJB?omv$N94e&*Y)l^k+7va3c!Sx4U4bDr@$5WCn`a>uh~cbK2^t!x zCmM#*D1jPL3N=8dfy&V=)POQ5iE2=#PNN~vP*jU5Q9VghIu#m?>QS|q$@GC!CHV-? z?609(TYMMv1kGRsCzPRJ*lhrMG#Ky&Q?!AB(}8vk!ac%V;^DA$6s2NP4Zt(-Ssw}g zL(^Zr2zn&b-==N0WsYs3;aezx0u_rP6VtDl53L>4vAdV07Ra*U6Ml(AaN$B2Lx6AS z1K_V^p71{p1Dm>-bu1u;0F4|0h#G{z$qR&VP!ks^A`<{ZPVMAroW{$c+8624Q-+1UTi6=KoiodbO| zpYQcPeUZE=b=f@baz-zVsd%-i=N@ex*5=ghseP7RDhnoiVeKB~b*OrM_)^}Z2VqA# zq%SPqws7_89pW8;&m4O{CjENVaRn{QW73Eq6<`?nv}-&Gb? z%Z7Z>5Mdb9r8QV$Iv~fEw&o54x*#{xx?_h&$bx z3XF8S5aJvd@~rJVto&Sg)FNKZm$7efW4`M@Y)ktkXR7{izZ_I57Js*CgJbK^34@)Y6hH9V z#$8%KJR-U{%_q_~e7wwWps4lqY2%L%omUWeto^gj$mI*8_O=X(owz4iKI?d|mGQT8 zcl(E)Ep30rdqCU0F7G(AvfF*prq8?fzC#Ij#}4XWH*M(jR*Lz(6B-?~8#Z*Aabjbu zWm96ie{-$le5o>ig==JLO14aLe_Okv80@cM6$!Wesse|cZ1FPd<@4F+buSYCx{!Y+ zPJ4wHChPLdJy@VodK8HF+!>nZf3lFPpWklD{^9Lrs7m50hXkIx_es>7Is5Cc*U*_> zeDR9JlUJP|EUT;0oV$LcbLGVC6Eep~4s7S_e%w>{VBEWIFMd4S>Uph)`$$@}oLlzf z&0VLddByvmA4p6otT3FWbuA<7z>BbkjqCY(i&n8cO7(geD z>BGA`Qg(dp-mSYFCY_PK7|U==Tq-sWK0zMrCw8Az>QHH1`17}1x}3ONL9Hpw8yvAt z`$^2Bl?P%+CGMZrbFbE@ugE?z;p%q%z2Zk%`Nb1ceD;-k12b?&;pL(BGxK6!WkoQ^)r z^PD^~zjR5@vf7KT>t6V}Oj(tt%dfh<>bIAFP1uyu?fG(#y?I|Bs;9dx7=%WyDCn8j zTXe4G)>m;+*<9n+?|)gElBQU^^Y!}rwG;9m+%7BjUY9)YUco6&k5MnOV!Dr7@g+5m zy1qAZ8U0t%;!sEVRm#m}MB6zbcxUI~S;IGt&5WIVPu5lDe5LlJlQE$1#9Wudn)3N~ zJ`%3YO?$CG)o!j^T`@E7`~2el%&a3ZiRbQaa>;#ov6Wo^ozOD%Z}r< zt7yf?z8+$Q&yE}S9+m#|&H9(xrMr9M2ASycj>Zjqmrhlco3T*uEXN{fK5)wCzG{(*!SGR}{4}b$3Pj`aQj880h*Q zzs>QybV2n^eKg+ttC5B$Q%}e;yF6K4G|BsynQdOLUSB%?^j~cU^;9krEiFYbsO zm#3C%p7(QgKk;zPS?$jbu5&AgxG;`W9Y(xj`t{!&X!Km=w7Fo*^gBJ2iW`>;mOp!) zb|~PsU(FA9IGLNy;7?1*`oYy1Pkwq^cF5Va)?oOw%xnKyjhvsh=61o2E${2^|M_Og z=rv2uBRyl=?8}W1^}5>M*BtG)yTV0~HD--2 z^62u%E?>5BUXaj6)WhTIBI9S_v-w-92E=g}3|_Hv*rV@vC6#r#)i)`e(2VXL-*yBU z9eVhU(lEZu)oX)q(QBX0OV9JkPMmtWe$u(sJ5H8Kef=+%xNbgGi|rGn|Bzi=;5H>G zduI1lq7j+uj_T=h{i{KjX6XlRoqoT3!Lo7bJExCJc&&|I&^vML7qb@~ORo1HUel@~ zDY>}qfpeN}bs5>3#L34+qBAk>%aIqVwa1OV5y9{HIg(xrkCY6Z+`6dzSckoROGh4z z!si{nPCd?!z1Xfy_)v-7Q-LGJm#ovO9(HV2A=k z18@RLCNk8FHJ*bx2UAO=j@A(Bh6c+a6^+zs!O_$l|FP%DCh=dxX%hs20Z1~THo&v2 zJOaVE7>xX)qOFxWz4bFHI)csi1rEoNhIyfJvY1BYkXYN+SkTC>2E;ySK&afxEieM) z6-_Y_sw7y(@(99^j(}jZX{3bPocWr-VL9-DRX2tM9`INM8^Zy^uz!Ywp)>xkXt0ZE z4h^^zSl<{8`_u}X0{G`OSVa2wf`sRx{~|~zIvY7Rma8m)6AAk`xM5>y+uHypkfr021~F1D8;#X!u_ZiadlpD}gkTU9*y6vS2bDPNAWdA=RWl z75EBnrVb=o5STS)=VY|h+|@& zLl<_ znv`cp#wxSZl~R=lqR3)MgP#XviCHusHi)o`qtu^?7lAlK^!{~ibbmGK` z+=+ayj!r?r(+4Sv;V6!K0}5|LmX;xm-dcmZhm*M@HQL%w3lBy*1<3_>W+*ip1&0UJ z0}O?*V_7Z-VI)i_bQuhovlC+C(mV^G>wpIzwUYUOn*T!T4_NvFG9Oz7^@nE_Zw&Xw z#IZbyk5KFbRMZ!>BeV21tFF15&>IKcKp&nDtGqrKX6kDpvvjklv;W^|vqhP`O#Q9& z76vB$_GdJvc5~6vYF2pvzteY{1?gxj4y+0I{|gH+bvKa%k)cpOY-IL7$k9mXO}YS9 zV$wEH)4Uw5r0o1b$s|V-dXm49ViO{W7OY~As#!MuniXRcN=s)OK|l%{L9iXnuXO$u zb6Z*qdke^5su1M>H3OGxE~zO9l8>6urucany;Y_>q{qJ#A!MhfSZ*c>ntA)8aN?G6 z|3~5KGiWvI9aKsbzS1e1-KfBsji{ghG(8Nwz$Ol!(Dw zf+i2t*e9Az>m=}D7W`>=&?u2&U<+wnC*|2cq?9)ESWb$=S4>U%;QAO;Yi@$duO zpOHlyxOxY8`@4Gku!sr@0i+y z@PY9^+JCX{|6+Lm$_Md}4U6Dk?ZMYS8aLU$8o_@(9pm45KmN6903JI#KOi0t66e3q z`j4eJJLkVFA`b`<0DF-CV~qH}7J>h1`Pb*q2OR+LdDzSUW5GQ92mU`o_y13@f7kq< z9r$Oh59`KI{7?Pw`+@&p1(2jXh=2As^r4zObRXJR4_y)jfEEC}|35{BoNWLi0YrFsc=&ik`1nNR zgam}-RHQ^iq*SyN6jT%xwB$tpmjB-TNBQ3+keHB=n1q;&goKQegoK3hA3;L-pDE=3 zcO2Xg0LbwkRvL;4WCLK312M^g_gerg0N(vD@W}&9Y~a7;f$%>C^WmR>g^h!YhfhHG z5UKww_z-lM{{tig0I`6W7+4tCxHx#&m_(uvAUP%$D@Yhy$tK-8DH#tbMP0ZE@_V7Qb{#&R2?b}kf512-F3QbiG06+*!!-=omLjr znm)Yv`Kr8aWa-NfsB>U+Mn(JR^8U4?x|vJRo6O3Nv6X`xasUR#16!j=D*J*2Rs2xAf%QSbvu^F6xZjrM#gR&jwEkh#U%z940v4S z9LMDE6Oq@3J<7@1q|a4s5BKalB(@D}Mg*R{4!TLHI(n(JdS13nKPL8-V=CeA3H@tv zi+We(iuB_Js|grw*IrNc&L24w#FyREurgsz+-Rp zf%|kN{p9J(fE4GiZZgsL0JpcW*}=ADLo=h+Xz3oy!z>K_j>Sz-bd!w5w_nEW>Mx&A zC!Utqk^Z1vC=<$$oLD(Le@>O{;fvAI)t`qG@%xM_?_*(Ngm=;HOKm1BZ|=jtA@RA7 z^2*;t%wOgoHLmHtTNA-8>^2Zekzq)K{_9&@7gqv0cLHjQtEMWkPGd914i| zo$~9`q;AGd_klvVp2Tun)Id8u7E~hZLS1}UsOwA1(UW;J{B6CAP0EV9qrCkCuD|#wp$kz5dR@4pPNJ;hcIj*W_x{=S;7wm1qij zzTQt~5It?!gR@2xDhH!KV`Y-eQ7Q%Je-iv6lsY%Bi2pR(EjDP57(mSK zRS)SGxr_b5#5xT6$dN?gXW@uT0t9U-JX+SK=yT3}=KuWP!Dxv$WtZ0{pKKy>4?zn&iE z(sjq#qKMPL!3ket*T1#+W*!bnDI6&s-gIJ!?8Q*vr@ucW&$Rfxt6$nrDb1yjB!7JD z-f#WmOLQ(>(VsI7X3IMVMonlu8*q|$V6H+|uJ#X+@dlbI& z<@+EYQ9*^b-(mWw1NU8uSqQ_q9qw(v`kl7Y*GlPxD-Ysv+pjXoVuMC~Jhxx%J69Vh zj?QTv1D>A>`k(v!0Pr{C%&Xrje!7LrN((=O9LSm{z1#k9r5TzcWa0-V>|8L3GC4LC;Q zcKzi}y$6^!nRGn9l1lvYL;S0P>i4GpRd+7ay7AHa*51Az-0IFij@OcR8?U7eUP_9A z7&?OlPUSYPQYHjb=nd#!C&Z9`lv&3OUG~39Kt=xAi(UDg=!Qg(XDha?e-~tXg*jrz znH|eAZ~@C_+YmZ=^|bO`#v?7wAX2A_M$jFm>bW3vF zqqs*FB%PA$)*Sl#lLIGo44dnO5%GW@Ouzd-colYbbW5bGTxbONaa&l8nT~XjiZ7Yt zFJ{Oh_fyYaeF@6qP&D`ynDjVrZNs^Tk@mV1V6_EX82;JiVUK$of*IOA=jq?W^zze^ z`5Aq1ffjnK{k5!`6gW9Nh`94J+1cuFsa1y zuEo(-^*x{rH~EK&aJ zHaGNxPqNg%zqy^U;C%027t$U!wOKTQG#K5km;3hJ5}E+zPQe0z!2p5=IdX} z(#4G?^XVh8f^0R!b2@5%dDV{K;q;me#_utxxLC zKT1zl2R3YWZ0P~P-r*xNHT*v?UnT)SQkxBSn|cZxgs~iw3?!o=~9JyAD8 z-h~2VB3GT?a-51QMs zdjr!eK^|kYc}@{NyWC;1BwfAdgXzDHAZE#@nk`PT(bM%9bMtAi+C@|Ru6S@7X5dTg zOTnJ9Ym^luCeE}3(r78YpKpo{IdT0#3&4;h!83W)B6?;MTi(!N8<2rvi;|99+59bm z3%dtof?lJj5-b&#pvMWca|L6+v>_@wv`qN^13PlwBFpBZcdPq_63FD_6l=w-KZ3bd zq+UDjP6*j1k1KD`&#cdM3+aaMlrs7R>ya;D1a%Iy`J8WKoIxC(mANhqGVyir_&>56 zSDxNa*8g1B6Ua<>_GMW6IIAYy3O+ibk5FUg8{J>9>BAuXL#c*N7~(^`T6yKlMfz)U zSZaViSpw`+kVF!apL|=ID|E9i@T6d+(BU3%SjX7>$o1-@$1b}_WtDeqYf#^DNuH={-jxAt;Qx)S!R z5N<(LLR&PR5AGl)AMm{^|(v~7PHDX-oFe_oiCR&Jp-GjDLPb|Fo!W26ER?Qm8|{cKK$N6=_T3% z)fM~CQ3{!8pRc7zKQDOmi1SO{R-bQA@=DVSY~*ED>F4p7wr>8q=h428vHrUh{RPH% z`ZKanoelqV=ckua3+PtA>iV2yXXb|V{b7-K1G-=HFJ@E_4cFZ6)+Q}$FCcU$WADv` z+L-0{*Y^vrYD4{nCBH9yKF_)5uY+9<;-H83+VgeHUyj`+nq(3$LhQo}1 z*WT8Dl_6WG)HDmvTb9cd?{REL5Z!9cT8s`CKQ?>1x;Tb!m=K-Mq)_W1lO%OayVR+W z?4=yc+Mo0NQBDi3;|mjuY-jmMGcrr!xIi8toMg8^lT@HWSs^W4wIBg91aFL*nGvE)hknja zE!F<6CGE3w)}>-UPXEl@1M<5J{af(Xm0pE&qyk=2!|(bhEVF`t(mqRTO7>}NmDz8L zy!)`QdEl{`#g323#J*TKe=C@hrtw5li-DzKUF49`k$6LqWtuL(U*8ncOCW}LbEWTf zE#t7Ro!z5<Rq%^_Lb5KqTf zdw<>^(oiQ?U z=%z|v0CB<1>&5aYC*AUyhWAdsr?xmSjo)MUfQAu)>sHsTt!cXO5J)DToZ^b^YBLkK z>O3>uSch6}7==%96J_0*&G||3WNNhN#n8f?c5Y=?2v zDe#kjZW|cVXFy5(d$|98ac^wBR9`P-^y}|0`1b(!t%eVyGzuskZ^c&&kGAgtl-$qn z`XydeM#Z4C0tJ3JY;}B7uUtv?t|YJI19GHYdEe=6y_EV@bFh+n^@J)0#rtqx)-5~z zZFJ+cGQagHJN;qabB`w-FN^ykz2*a_Rgx=zr+M51)?byrdzpJ(xRsysiDq7Gcr&YQIt;(LP@cGk$Dp_ zT;&lkEZ_`f<{VUz7A()>pgZ>jbHe@F9cW4mISOl?JNF8vmnM=zGlMDsZB%^EF?6ueHn z94{*ttsbg-(rtKJ(a!sUA-U0QH-;69e2MFFPaY*Zjx0~M*}=AS@^sz7&-^x0m4hr}8u z=NaUCE1b?BVdI+Y0ts~CF)`Yz?x|-yfg8M!$2w9jNN@k)0B0tu{2^sHSgmpEfXx;!H70Zv~eQkF+s~qSKSn z%moh8L=|nv;seNGHFOQN-WYwAmJrRkU08y*v z`*go6y0(Zu@qB?ooE9fhEEQOc9UfoJ%s3?_cfo?UG?TGE?1-IXrB`30md~&y3`|#YBcIzV4yIByO%=tK!|Xr=c?D)-+@~_3eZo zjf<0dJg6P7a)B0l zgW++iF7xpZZjM?3VQt~cQPIj9Ev{eWi3KY3Ih}i0XPZO#NT&W!qqk#Y4Umf^g1Bri zmaqA;cn?fx#j?}wd#C7tbfZJ;yn!MGm`=u=x%gnl(A(j3t-GBv%t;UXKuz|*eTv*( zl&#hqXnThSp>Ws3yCvo3mENg@%DY#!N)t!rQ)xjJvD)q_ai8wz-ovN1@U~BHSz(ox zm?Y3gaii^~qG=us{cuS$lBz2L+7w2oY=J-lNc5=b2=*5 zan27Brd*8TgykXT`x!%HlMe39hDneBm2Y^*-^3C!Z_T#L5zLKcH0p!rlQLq)wp+!Zhe1#R zjM6L5(OoPVLCA$H7u`S&bt`e}^ z(X*OGv9Ovc%FmcZOXgM9zt*|6*t=K9uf3>azL>Q}U&fLGNtVU;jB;o|apr0bI6^OHm+e#y8xc!E9jhk-M{S9sCrRf_B4&Hj~ z%7Mr;-_3M{ff%@bToCm3Il!#zUAoY!tKUKyuHoBo$9NXJlcv#5lRWt^7QUEDYf#Z% zRDvPf;3AdHyY)%cpP(XhaI@6pWS7XZK3ZGNwK9&>teo#(N2htStRZndwp4BbR7 z6~Ca?8KaU$T_?A-$!JslnZDVJ{L|F#Pp{Y&&p$1#4%yb7e1A3fhx!>wV5NzBmWwLO zDBGx?mhSOsDAlChF4LBC=5vR%7cWp6I%#HVu;aC!%GSHwNs{>)Qa-iXAQ7q%dg227 z5_S7-Lx$-7l2@4@tDJ4rTix55lPmS&^Sie`a8wJQ)H3Vq#nOK8I$$?)=aRjs>R}ni zrZ(SpHp$~mj*%Io?bSBCXj)%Mya&X+AjGT%)hWpO6{pQkqeuB-R~l-p&04Zd8TWLN zQl`8!FJ+j?KINXQ;)27uRwg06*0+z2S8%)EddbO{_?+^)UYKcmM(pOOQf;sLc?lUy z{~Zx5+R7wF z`0h!l@VAWb-zUgI{XFC-u_Yu7i;~!8tD^KQX%CYjm9AxZL%_UGD2`Fftwc6?A zDygteinX74te>SmjfG~rd6LT`Eo_h#x3jDG-GWP0`hva%NA>7|YBS}mqYLAv+}7WQ z?+n#)-hZ+s*h*_l{{X6un-aurmQXEf1fEax*-~d0hJWz!C!&HgeO?7_mmD|%&3%?B21|9ECGcI@%y?P5 z!ICOpVkszpSM{iXMn)9hX%zK2Q3@VZb!6)pN1CJt#*sV^;J!o}@`t4*<44EFqA6h` z!eFk?Wo?>}Tua6ZUwqyyR4EvgO(iI9q*Jy=+ai7YEbABx5~y$(j~N7z(cFl zf~EG^jKq@(FxGIlsRfW;xsAt?el*sQ8b8#8%42)^R3>r2lraBACe@s?fk%VV&!{N4 zwiPVc*uKVYCNL&)fQ?{6$6U#1gG%C}dB#z!Fnk$)({84)oIg1=vt15H0dc%1E9BTAkb#p940|TMnbl%WHNRT(?4S2D1*8-@_Hzq>ZaPhRZ zTyE~w)NNk!t%s!sH;rOY@O1sgmI4sN_Epk9`TC~gnjePRQSN-isps*k-a{HTw#TuV z=%hRM!kGgI-uq(WZB44#@~C7=L63IW#z;oI%;JWmRPHzxGz$)GglTep6tIN|%l{N= zUMRm-ue%_>DJhNCSBQCEvhZ4sJ(4?M%5t>oE=3-C=f^}JCd1d{*UJ5(_>4z6)6jV!7=pJNTfR--)0Ig zkk$k2THk`z%d-)_k1xmdE#7)ia0cQM#U;NN#WG{dW@_<~!!?#wkpW@}pNv28`Qp(* z*TY2}Xo5SSn{e8Y#$%xj6+AQ41=ftpl1!-9y!#5cR-9my!7{P$ETEoca*8mhOjh-9 zOlQpNK5-*9m{fz|xDKmW2r!pje>HiER17W6M4s5_J6X&cL&UHfX9INw94179A?sEq z0|myvDHC+;DIpG%6{23?>O5NpkGqkuA6yIk2Tj*C7WYt54=mcELiXtK`Z zlrm>Unn0hbf}?lRehif5FeH;$u7b5mniO_%4;hTYL|Ax*x#A*glA-x{XF8~S zO{J`)5tN6u&8@1_8bzl+X=$K+zc4-Slr5n+2No@rAJXJmwEAG?zE*b!DFsi;;4IqF zfwU8!s;xUFQBBr(3b61snD`4&wWiIobN&{NZjdy7Cc#V2vnKI810|&lw1_F9Z;{Z- z5sxa3Z%ZgRj>oCmnT^5MfR(tG_k)KA6ltCWOsXdP&S|wIhknN%B-OzGp;5P)OGv1Z zuFM+Q?~5gH+_?Y%W$LoqbdPuy1Mj* zcarGSEI;*rE_o8KXD?>d2b)Ri4f@h14B&Hb5fWrbk7_mZiP$Qqp8g7>XLwOFY!J@Cot`jQ2XjG+fmWB0dxT+5)&MPp+DxICa*nHHnlZ9A^FRO@H3$!Lo-z|n0S}5yQ zgUj1;`91*KV#IYEbWVvyUhRST3W**b@}KVHgYJp+t=Ch}EfZ6_7)%gxaBw&V7=}h7 zoEevwl`bqYOuYKnOHMQU72CR@JPHT+;ITOYmsv&IO>eDi_GV_mxl66NW7WDE;A!KA zf8-EZ7lyG+EM`k-YCZ-%6p_(2YGq=xi{KIT%Mb#_8FMDSu~1IurUQ$k3Yu&=b%ZtR z0o)vcN*XcYWhAj(;P;xE+F_j3-2-0~@${^W^rq{=hU$(usb-Pc34&mc`sErF!mOsm zvPjuMS%q)4PS7h(dLo0|ogmiN!@btp&?#lO9x6mwRI{a&NJ18xQIi(npv%%q_7OM&B{@`$Svfl9xN(r>biYiCqT zq>ZpxjA)wB7rLg2g?=td253r(+Ghkd?3zliIK33mH54#?T$AVc@X^oWOlGb@cmgBD z1YPy+PEdaDj)E!qAFH#F04F#%{b5Wy1@{}~5h*vlb{TW5BTiP1h5Nlj+gJJkwJwW6U$W-3Y}Cs&=~- zGJp{qMf>;{F_c*-u1ZkACC+|b&-p9a7@vg^Z%J+qIo`Er2uBQc9%4z&MYo=r&n`5s zONQ6dzte*x%M~hVM3b>qXZ!=$sIu^u6D_iB>LfCK;-PZ+MhzHzPjM*X1`6WfSXzr? z@PN?fW0}h~p8>S8gojs@vO9d8P=~EG1Pg!LHD~m_R`?GO;|LV%ItxHE-J6XVSt~b) z)@RD%5cdu^4Iew>R_!`!U)Hc{qbB?I&HAx^55nHWLe+gD&YD&x3kiK}U{^gdRqn5x zVP-a(6CbKO_SooGd~C2>u68U%39*MDPg31imTR5_V6oLvslI>BwgaO$(H5Zmj4HC2ptfp~a{zB}4H--OhxWFEYo^`+>BnHKF z1t$kJDOypx6~j>Zr8-U$H0iOvs|PZ&j4f+mV#Y}&AJU=s1mScg-hhn3w6v<4K0`wC zHo~X@)Sq;!r~y#vo2^QqSHN|CKbFXg+NKxN{=)5`i>BtJ15(cUFU!`N=Ur2lG}LLE zs?utG?sn@K^CPeJ-J5L=Sp+8a?&M6-kGRzT$`V_i;cR`8l3fg5 zi?4~4u-#(L5vqDkZ5k@BSe^X}9FP$dweY#@M#?>$(b;4M#Y&*t&NH6KSP4IVUZNEn z(!)Abz;)*aFT!>VD7n_rDt`m-=-BPJ=EXB#XpPNJDMyr>LFpAzN1~5oR1n2ytk6}6 zfk^-zefwT#FS2$m<`)ddL`k$t4`gmjn6nuIw0tSoRd>UCryhLpMXA_)%|VWHK$4>qn=NPemyWE?q)qZ18{+wx+Ov66FX*=G)a={f`gHFY{j_35 z+D0)+ohTM8w#)X2Tp05rcifo^K4C>;z5v}|$Tu&(w|iMaqpmCgl{01Za9&h0i^_q- zbJQ17J`2(tbFUX(=ihO~G0a8bR{c!wqY5~{7kJgygTNZp`D;Sua}9xdZ~0Uds?zmeWG*qpGe2u;HG#!nK6hfAI*HmZ#$MW zxfJZ>6oSyn>Slc{OPFBz2q+MTeZO`4lKh> zM}>^s(dM9M0>@7NjfsfKwh-uppJFDha<-X}aK2|~N{LD+e-(zVL{sBVPuzTwwnH<| z7*Q1|$Lh=*GE)n^4c|A!VwVh9HOY;Iwy@x(J554?dWH$`g+(f&woV8HEz};z8VjFk zd++{On|pa7R?U7_Yn2{Js;20}J}ekgYkVZvD;O$6r$Cs05;QgS!sOZ8*i>9F8pF0F(S^uNCPoLS3Mn$ z3JE4MT;9NR>R466FkUWB%0sd)Fc`@+&-nzXQdS;c#M+4}yUY$Zg48mh9eH}zDZ~nn zI8$SQL=)iI>IAH`vJI35Ta?!~y?KK8v>L}WN`@@o-bdoA0T=SD7fZfN82ld38pbM; z=P*A~dHi8`(Qk4sp_a$0+)I_Iwu)y!75M&sdB3)Lc3Z1MU%zQ=YiNFK2(E~1Xl`%C zBPeSQbWRdH<9+_jt1-!z%`OeXdA2O-GHQ?!76{_fF?BSqb$d0 z*N9%8Bn9WwT3RtKIzYEDcYyffp_(TrjjQ|1K_S#QChS&i3o71r)}q>ld|8Xj$0B?% zqM02`HrHvXMgD~#hblPWMy5-;WJ-W*LAM$R|aK1(uO-!>+~_=fC=D%Oy0 zFd4j1fyd|yTXAeseZYVCj9k^zq#A6uB(#1p03~>>SZ%Uh2Vhs3H^a$25~_J>;VL5_ zONy%XK{|4)lqk)@+ae2o>bhNRm0+Hx^H2}ya($%eFg2GqFCH8Pu_~@ZTd$3YgTmW% zSz?V5kN`u}B&N#ZZW;U;!HGLrjJpTxZ~+bdk?Rtal%qCZdzFa4-THh<8)z5poG6)H z!?k2ns{}n^KxV|3c*fX68iNTI;K-B;if5S@MOWq_JUKbCe6p-6t(5gvJeH;|8pd9n zF36%A4_?H_q$+ggDs2dBf2B~MnOh^3-6@Gj(owG?)eyNnqq@C#W#rk2-D!iRAu2l| z0$Vm_{v&WL@fqdnY9iFz;Bdd$YM|ZxPn1Q5)l7q;o}ol(k_gq(?i8WkJj+i3IUXm! z`X40e9Pdh>a%Oxrdh5_?9E+bwzt7Fs=8)@r^P9@(jPl&C!KwgTIMv-BIf2T{)}zmB z%csg^rl--3h*_^CiAtV#BWVS7yJ9rX)gENDu7BC71c^98m>|q$I+VhW76fF|7EYr6 z1Y@0^zCf=v2GX3-3D-@1CoT#8dP3%BX5HF)zbro7KEwq>d`h%)ZvyHeMebB^NX_vCA$31Gld%#@arH?M$u z%3^g}^$8Uj1vz-D$S|KkQ^^IqDyFk1Xv6`CqYg<0Er&h`G)}AVZ%!p0dh;&pZZH5%Yg!ySC>4*ZnZpuw{C~luu7LR8zIB>0 zXnH^#%eu+WduZq4*g!-8zpN}nugQ@?rFE>YeeIZ?7cI@VrL=h1GQym0NQMk~WijXw zr++X_F0)oscA8fZs%VeXa*Tv*X(~15ryxPDRsXSyfUca2~mzgs8B2avWjADHbU6PRN1PJr&j^UXhlx1MwB7}5c zQ2J3$QMdsv^canZ(ZcXlnlgu&MJl(9m?#ZgtetcGGT64|n43owZ2v=w-c-y_R>!Tj zN_Rzfl&bWv1~?bgy5pq8;@9Jl?L#U}PK!uaaS^@Q*mr*Q_MgdA>V86fa~!!f2w?af zrNh%6_)vufoy(?UGC3-u(;mK{rb$xon8Vc@DYdtH9&ekBJnOz$Jv;6q2bF!S^;tH& zCQ!JLm3im992*teivo?$AT}$C2l7pt-Vm9)D1arKV0%~>Z9L=z8KT)hD|lxV<&AS_ z#dn+>Fm=&_hhM$oGc+W?nG%+97|GO7b<>)JQS2ENCFS0(mMSN{&idS`JBe)M-52tX zh{=~!83gWi?CHg-12KGJ(haKhBfVT2u%DCpgzh9DDoNp)z?u?;%4e!LG2+_AM8waT>Uodw_C9-d6rrtZ{76iCkeB^rui2sBbjOvMADLR z=YR2gbSUvza$Sq0)(njIN)--j$58W^iBDv{fVPu+nz|#*&lHZJ@-8?74=4AJ2}0@a zsj?iayFj$D=2ujSxPDAgv)W9Vdtx3~jAzvdB2+;TLtx9z>O!aN8yW+9V~fUScg31? z$=2#K?uE!YYgKIp6yCU{iN=2a#E&$Z$kSPefOD@v1ALGLaYz`JAHpV61AD zDsDlYJp!KMERlTG8cnd)HHma%xG8l?FLqBD!c<6y=MsdI&>6~Yrq00Nb*=JF2ka+pGg0x7roC5(1;)AdcVCfaSm9B%Bwixx^eHmj+xssQ}tzJ!dwOK(LX z434!02VHuJHKUXzt3=w71jV_FTb*rDPFo=#oksMDbnqSMqioA9aXK%kV`^eRj$~g_8B}&P2E4}zH8lyZ?R@d zaH=-+g3?I^#%^zN4t0dE&hcK!DMHmdc?fN(LHIf_g6y}0$_oL9239TWif9wxV4-uW zL*W{RRXiCE0=)L9Eb)ysqn>ihVhwX}~RvchrLmNg@ioeiB z{5i&8U}?8P+fN;fbw$6R&UbN3TWgK4xxUP$P!*vj3|$%5P#|!bzqL`K=b_PrVp^^0 zZN#WJJ9pQ31z-t%7s(_pjd|nMThTM&@@aVs8j^LQ%u`>Kva7k#@%MKXbIGXHaRnpR zT_D2w*q7`!5qm6q`mrNB@f${+PNIM^E2A_2fvsBhVoxj{k8xeMx3$- z`_Na2b;{r^jJQJ8c6cXhD#Zoa8UP0iR_+xiOqRVVRs##fN?p-hpv~i);?lre?8NV< zIs4JAs2aPCrVV|(KT6-NS}S~RtAl7NHtVL}$iPVA#m}SMXA!0a9JRs#oVvtxDCI|6 zF54&u#=K~`YHYGfyy9HF7;ljPJsm7*4W1T8Zf{_44M+~a=KzxN67M`}qVO- z6b&Z}lE8{1D!y1Mptx5n-HmIlRePv=g4iUtG<{TxEXdNL(UYvn|r&IFgK@F zuLws#*E|MvQsn8_aG}eh09e5C+}ec&Vs*K8aa~)3nE*e0byU&sw)9Oc=7=)=xF1)b zd_#*5D9T#jZK(`gYQ+!gV>{m45NZWCLdJ?eL;AI+dCKVQxRrfabrbWc6n8Oly#)-B z(}e!$O)`N7G2>dckm|KsCs6}4*8_!8k>a5yha$3PCiyO18sZKzTqHcxFR)FdwHLM0 z2%V;D&{+5uFO^FrCj4=y`RaqAw7=-fI2@W290Ul*Hx|yzjyYIT=mkeNpV!ex*tXu-$wDwi4DWEF)~e1eB*RL_qh z5-|{FM}5I2!VPw0rlH4EVc2HKr6$aZ^L!OK*Z9sx_)w*8aTB)1WB64%InhAdcOIu1 zS;%My-46;3$RV*KK0(h3{K`i^vf6RSTh1y-$)FEy?X>lV&+9zjvW>BBvoGgzMY4&k zB4N-j4KMh;LqpT&tdNA{(9>FTz3)BQYTX@+yDQ<0@7rGtVQyMEe&4MmlDAlC*0%n1 z*fVgg`N8d3BXPs$q~ z`rT=bLWB;}B=NBYf;!?{aK++xv5V2gm}WAY>8N~W$Gjje1g5xMWRI(|cK)fdzN_-% z{OaenhnrcdQ%@gNe|;Nb!*6#k=JV^7-(I_TyQiSQw|NA#V=cbzEC9s$)*Bs^x}MAL zP~sr+LwC}@klUcO>4Zjdx9hwxW22fnQBmPKd4{iO@LdsbO-Wd1b*8PkX+|&OFv=-v zNs0F!VBAOz+A>r4ovFh_9@FHSU80VV=>VCA(C!yd)qM3vJaI_NQxU${DCEG#K)}>; zHp%iM7phcrSoQ>j%B(7#MK?yPaDC=t^suNR$x1$l$01dT*2_xf^U^>iwX5Q4oCHHL zO6D8~Za|{m0?O63FO;xp$828j06cuD(J&Q^&uPOXM+HCW*`yRrKRT9`K(oIHYs&DL zW3!YPPih$|;G^(Cs0=of)l~xuo|#3679o(6xs7@mlB-rF2+RrA$#kUbttb?y)8u?| zKi{_uNHzrG`p7Rvgv!+oeIiNZf~1aP=sW3l={gvQh!Tdm>TGi~>=HA#1zy6I;;-S> z1C|N}H|If{bt2J$Kz%x&INLO-nNH%PcGKKNlDECst&^8wVW4qNZU2} zaB~2ZYvxntU?@{!W?7J3hnX(y;}wQcyqi)as#5;_49|1R4kopDL_%MYsy*7nQvYE- zr1od~Fsq|@f_t>+=L#ms&XM4jeMhp73T;|XbG>pApFm?(VoMx9Q|L!nZRf4`y6Lw7 zY;Cp(ha0Rgc@xEYP}}9=fkE`-CK_8q8Uxwl;m_D$_9DulQT8cTn7LuQ;5#f%RJ5a(Z!-EZ*74^dZwIXr zbv0W=nigHwtjSB=k2uBrZfr9s(Cbf*flV%M*jvamEU5XW7fc?UQn z_%PEoLW}gOXd}=NM?_H5_xR8Ps`k~fWbueZ6uoUd!I?M9P_#kCu!wm8lSwT`Fs3Wd+4oxqAN6?0O}#n#a)=R!_D`zd{};x*Z5j~uy43kUkoX{>NH-*NR73{ zE;=swI7tRsq?|2-u*>+gr0~#%b?;yV`l4N1;BCV4%k_Vl66?qir!4|?20w8$&XLHB z$uylH9r&iQqg25{jR_KVtGPLzbq=_Fx?j9!*#k~)F`uU_G(GJ=JeMBMC?vl!yx^lV z_5AaMgY0GHxxblyY{n-IYB~>G$!#;fRL{A|j{rD;7&Ghde9!!4d$Q_2F2C>DldR7Z zqa$whMs5rCs}x)9pW8Qt=dyiBxV`H7i5m7^MzZ= zhipQVH?3TvtQsfHptvFSy1FeCUk@vdLPwdCx*d{g0o1?}@F7am)JPlWEOd-D#AY*u zjDRmSG{M(pZ|)Zo&H7)}tdjbmjhq|ETEFEeE;)}cJZGD`^**myPyY(Blw-|_*K*A{ zr|z#LfY8U7YnXb!OCRUZk}ZnU6<_3qpx4FP68RRrE!L^jknV)zxt7g z++gAyQ(l8RDRk#nqna*7v}1{Pv=fA#We7%juHiEz?RNg#HwjzctYtP)@LZW1AU7ePi(83CrlXZeAA%jN*W^= zx@QAbIX6DhV_KpFZs=zc?PEeb<8qhv(O*4+OwUFIM95l^1Ibt$F*0RhXpNOlwkYwB z1U@T%;V>A&h-4ux-5mjOIzEsgzF-WN{)8eUMo1+{#d|WwD)M@@n zC>`5^c*n=+hsJr!J2T%wW6z|>PSeq?#ud2TfY$W*0LW^FJpa{}UaTk&c|$Sn>KbS# z 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